fujaba/NetworkParser

View on GitHub
doc/diagram.js.map

Summary

Maintainability
Test Coverage

FIXME found
Open

{"version":3,"sources":["webpack://DiagramJS/webpack/bootstrap","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Adapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Bridge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/BridgeElement.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/CSS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Control.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Data.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventBus.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/JSEPS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Palette.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertiesPanel.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertyBinder.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/RGBColor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/SVGConverter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/ScrumBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Toolbar.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/UML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/VirtualKeyBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/JavaAdapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/BaseElements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/ClassEditor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Graph.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Model.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregate.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Association.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Composition.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Generalisation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Implements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Attribute.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/AutoComplete.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/BR.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Button.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Class.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/ClazzProperty.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Dice.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Div.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Form.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/HTML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/InfoText.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Input.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Label.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Method.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Node.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/SO.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/StereoType.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Symbol.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Table.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/AddNode.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Drag.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/GraphListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/ImportFile.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/NewEdge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Select.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Zoom.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayout.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayoutMin.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/Random.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/main.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/util.ts"],"names":[],"mappings":"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","file":"diagram.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./main.ts\");\n","export abstract class Adapter {\r\n    public id: string = null;\r\n\r\n    abstract update(evt: Object): boolean;\r\n}\r\n","'use strict';\r\n\r\nimport * as controls from './elements/nodes';\r\nimport * as adapters from './adapters';\r\nimport Data from './Data';\r\nimport {Control} from './Control';\r\nimport {Adapter} from './Adapter';\r\nimport {Graph} from './elements';\r\nimport {Util} from './util';\r\nimport {Point} from './elements';\r\n\r\nexport class Bridge extends Control {\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public static version: string = '0.42.01.1601007-1739';\r\n    private controlFactory: Object = {};\r\n    private adapterFactory: Object = {};\r\n    private controls: Object = {};\r\n    private adapters: Object = {};\r\n    private items: Object = {};\r\n    private controlNo: number = 1;\r\n    private online: boolean = true;\r\n    private language: string = navigator.language.toUpperCase();\r\n    private toolBar: HTMLElement;\r\n\r\n    constructor(viewRoot?: HTMLElement) {\r\n        super();\r\n        let i;\r\n\r\n        if (viewRoot) {\r\n            this.$view = viewRoot;\r\n        }\r\n\r\n        let keys: string[] = Object.keys(adapters);\r\n        for (i = 0; i < keys.length; i++) {\r\n            let child = adapters[keys[i]];\r\n            if (child && child.id) {\r\n                this.adapterFactory[child.id.toLowerCase()] = child;\r\n            }\r\n        }\r\n\r\n        keys = Object.keys(controls);\r\n        for (i = 0; i < keys.length; i++) {\r\n            this.addControl(controls[keys[i]]);\r\n        }\r\n        this.addControl(Graph);\r\n\r\n        let that = this;\r\n        window.addEventListener('load', function () {\r\n            let updateOnlineStatus = function updateOnlineStatus() {\r\n                that.setOnline(navigator.onLine);\r\n            };\r\n            window.addEventListener('online', updateOnlineStatus);\r\n            window.addEventListener('offline', updateOnlineStatus);\r\n        });\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public setOnline(value: boolean) {\r\n        this.online = value;\r\n        if (this.toolBar.children[0]) {\r\n            this.toolBar.children[0].className = value ? 'online' : 'offline';\r\n        }\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addToolbar(): boolean {\r\n        if (this.toolBar) {\r\n            return false;\r\n        }\r\n        this.toolBar = document.createElement('div');\r\n        this.toolBar.className = 'onlineStatus';\r\n        let child = document.createElement('div');\r\n        child.className = 'online';\r\n        this.toolBar.appendChild(child);\r\n        child = document.createElement('div');\r\n        child.className = 'lang';\r\n        child.innerHTML = this.language;\r\n        this.toolBar.appendChild(child);\r\n\r\n        let body: HTMLElement = document.getElementsByTagName('body')[0];\r\n        body.insertBefore(this.toolBar, body.firstChild);\r\n        // Refresh Online Status\r\n        this.setOnline(this.online);\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addListener = function (listener: any) {\r\n        this.listener.push(listener);\r\n    };\r\n\r\n    public addControl(control: any) {\r\n        if (control && control.name) {\r\n            this.controlFactory[control.name.toLowerCase()] = control;\r\n        }\r\n    }\r\n\r\n    public getId(): string {\r\n        return 'control' + (this.controlNo++);\r\n    }\r\n\r\n    public adapterUpdate(message: string) {\r\n        let keys: string[] = Object.keys(this.adapters);\r\n        if (keys.length > 0) {\r\n            let i;\r\n            for (i = 0; i < keys.length; i++) {\r\n                let adapterList = this.adapters[keys[i]];\r\n                if (adapterList instanceof Adapter) {\r\n                    adapterList.update(message);\r\n                } else {\r\n                    for (let adapter of adapterList) {\r\n                        adapter.update(message);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        let config = {}, className: string, id: string;\r\n        if (typeof(json) === 'string') {\r\n            // Only a String\r\n            config['id'] = '' + json;\r\n            let item = document.getElementById(config['id']);\r\n            let className: string;\r\n            if (item) {\r\n                className = item.getAttribute('class');\r\n                if (!className) {\r\n                    className = item.getAttribute('classname') || '';\r\n                }\r\n                // Found Element and now config Data element\r\n                if (item.getAttribute('property')) {\r\n                    if (this.hasItem(item.getAttribute('property'))) {\r\n                        let data = this.getItem(item.getAttribute('property'));\r\n                        for (let key in data.prop) {\r\n                            if (item.getAttribute(key)) {\r\n                                data.setValue(key, item.getAttribute(key));\r\n                            }\r\n                        }\r\n                        if (item.getAttribute('property')) {\r\n                            // TODO: FIXME!!!\r\n                            // data.property = item.getAttribute(\"property\");\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                className = '' + json;\r\n            }\r\n            className = className.toLowerCase();\r\n            config['className'] = className;\r\n        } else {\r\n            config = <JSON>json;\r\n        }\r\n        // Config validate\r\n        if (!config['id']) {\r\n            config['id'] = this.getId();\r\n        }\r\n        // Backup for Old Graph\r\n        if (!config['className'] && (config['type'] === 'clazzdiagram' || config['type'] === 'objectdiagram')) {\r\n            config['className'] = 'graph';\r\n        }\r\n\r\n        className = config['className'] || config['class'];\r\n        className = className.toLocaleLowerCase();\r\n        id = config['id'];\r\n\r\n        // Check For Control or Data\r\n        if ((config['prop'] || config['upd'] || config['rem']) && this.controls[id] === null) {\r\n            // Its Data\r\n            let newData = !this.hasItem(config['id']);\r\n            let item: Data = this.getItem(config['id']);\r\n            // TODO: FIXME!!!\r\n            // if (id && className && !item.property) {\r\n            //      item.property = className;\r\n            // }\r\n            if (newData) {\r\n                for (let i in this.controls) {\r\n                    if (this.controls.hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    this.controls[i].addItem(this, item);\r\n                }\r\n            }\r\n            // Add all Values to item\r\n            item.addProperties(config);\r\n            // Bridge.addProperties(config['prop'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return item;\r\n        }\r\n\r\n        let control;\r\n        if (this.controls[id]) {\r\n            control = this.controls[id];\r\n            control.initControl(json);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return control;\r\n        }\r\n\r\n        if (typeof(this.controlFactory[className]) === 'object' || typeof(this.controlFactory[className]) === 'function') {\r\n            let obj = this.controlFactory[className];\r\n            control = new obj(json);\r\n            Util.initControl(owner || this, control, config['property'], id, json);\r\n\r\n            if (control.id) {\r\n                this.controls[control.id] = control;\r\n            } else {\r\n                this.controls[id] = control;\r\n            }\r\n\r\n            // create DataObject and register this control as listener to it\r\n            // let obj = {id:id};\r\n            // let data: Data = this.load(obj);\r\n            // data.addListener(this);\r\n\r\n            // Try to Show\r\n            if (typeof control.getSVG === 'function' && typeof control.getSize === 'function') {\r\n                let size: Point = control.getSize();\r\n\r\n                let svg = Util.createShape({\r\n                    tag: 'svg',\r\n                    id: 'root',\r\n                    width: size.x,\r\n                    height: size.y\r\n                });\r\n\r\n                let view = control.getSVG();\r\n                svg.appendChild(view);\r\n                document.getElementsByTagName('body')[0].appendChild(svg);\r\n            }\r\n            return control;\r\n        }\r\n        return null;\r\n        // bridge.load('{class:table, columns:[{id:'firstname'}, {id:'lastname'}]}');\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n\r\n        if (this.items[id] !== undefined) {\r\n            return true;\r\n        }\r\n        id = id.split('.')[0];\r\n        return (this.items[id] !== undefined);\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return this.items;\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        let item = this.items[id];\r\n        if (!item) {\r\n            id = id.split('.')[0];\r\n            item = this.items[id];\r\n            if (!item) {\r\n                item = new Data();\r\n                item.id = id;\r\n                this.items[id] = item;\r\n            }\r\n        }\r\n        return item;\r\n    }\r\n\r\n    /**\r\n     * Method for executing user input -> Event\r\n     * @param object\r\n     * @param attribute\r\n     * @param oldValue\r\n     * @param newValue\r\n     * @returns {boolean}\r\n     */\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        alert('Bridge.setValue: oldVal:' + oldValue + ', newVal: ' +  + newValue + ', attribute: ' + attribute + ', object: ' + JSON.stringify(object));\r\n        let obj: Data;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n\r\n        } else if (object instanceof Data) {\r\n            obj = object;\r\n            id = object.id;\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = <Data>object;\r\n            id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return false;\r\n        }\r\n        if (obj) {\r\n            // Execute Update to Data\r\n            obj.setValue(attribute, newValue);\r\n            // Could be done here, but currently is done at this.execueChange..:\r\n            // obj[attribute] = value;\r\n        }\r\n\r\n        /*let tmp = {'id': id};\r\n        if (typeof(newValue) !== 'undefined' && newValue !== null) {\r\n            let upd = {};\r\n            upd[attribute] = newValue;\r\n            tmp['upd'] = upd;\r\n        }\r\n        if (typeof(oldValue) !== 'undefined' && oldValue !== null) {\r\n            let rem = {};\r\n            rem[attribute] = oldValue;\r\n            tmp['rem'] = rem;\r\n        }*/\r\n        // this.load(tmp);\r\n        return true;\r\n    }\r\n\r\n    public getValue(object: Object, attribute: string): any {\r\n        let obj: Object;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = object;\r\n            // id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return;\r\n        }\r\n        if (obj) {\r\n            if (obj.hasOwnProperty(attribute)) {\r\n                return obj[attribute];\r\n            } else if (obj instanceof Data) {\r\n                return (<Data>obj).getValue(attribute);\r\n            } else {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    public getNumber(object: Object, attribute: string, defaultValue: number = 0): number {\r\n        let res = <number>this.getValue(object, attribute);\r\n        if (typeof res === 'number') {\r\n            return res;\r\n        } else if (typeof res === 'string') {\r\n            // check whether res is a number\r\n            let value = Number(res);\r\n            if (value || value === 0) {\r\n                return value;\r\n            }\r\n        }\r\n        return defaultValue;\r\n    }\r\n\r\n    getControl(controlId: string) {\r\n        return this.controls[controlId];\r\n    }\r\n\r\n    public registerListener(eventType: string, control: Control, callBackfunction: string): Control {\r\n        if (typeof control === 'string') {\r\n            control = this.getControl(<string>control);\r\n        }\r\n        if (!control) {\r\n            return null;\r\n        }\r\n        if (eventType) {\r\n            eventType = eventType.toLowerCase();\r\n        }\r\n        control.registerListenerOnHTMLObject(eventType);\r\n        if (callBackfunction) {\r\n            let adapter: DelegateAdapter = new DelegateAdapter();\r\n            adapter.callBackfunction = callBackfunction;\r\n            adapter.id = control.getId();\r\n            this.addAdapter(adapter, eventType);\r\n        }\r\n        return control;\r\n    }\r\n\r\n    public addAdapter(adapter: Adapter | string, eventType: string): Adapter {\r\n        if (!eventType) {\r\n            eventType = '';\r\n        }\r\n        let result: Adapter;\r\n        if (adapter instanceof String) {\r\n            let obj = this.adapterFactory[adapter.toLowerCase()];\r\n            result = new obj();\r\n        } else {\r\n            result = <Adapter>adapter;\r\n        }\r\n        let handlers = this.adapters[eventType];\r\n\r\n        if (handlers === null || handlers === undefined) {\r\n            handlers = [];\r\n            this.adapters[eventType] = handlers;\r\n        }\r\n        handlers.push(result);\r\n        return result;\r\n    }\r\n\r\n    public fireEvent(evt: Event): void {\r\n        let handlers = this.adapters[''];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n        handlers = this.adapters[evt['eventType']];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport class DelegateAdapter extends Adapter {\r\n    adapter: Adapter;\r\n    callBackfunction: string;\r\n\r\n    update(evt: Event): boolean {\r\n        if (this.adapter) {\r\n            this.adapter.update(evt);\r\n            return true;\r\n        } else if (this.callBackfunction) {\r\n            return this.executeFunction(this.callBackfunction, evt);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public setAdapter(adapter: Adapter): boolean {\r\n        this.adapter = adapter;\r\n        return true;\r\n    }\r\n\r\n    private executeFunction(strValue: string, evt: Event): boolean {\r\n        let scope = window;\r\n        let scopeSplit = strValue.split('.');\r\n        for (let i = 0; i < scopeSplit.length - 1; i++) {\r\n            scope = scope[scopeSplit[i]];\r\n            if (scope === undefined) {\r\n                return false;\r\n            }\r\n        }\r\n        let fn: any = scope[scopeSplit[scopeSplit.length - 1]];\r\n        if (typeof fn === 'function') {\r\n            fn.call(scope);\r\n            return true;\r\n        } else {\r\n            window['callBack1'].update(evt);\r\n\r\n        }\r\n        return false;\r\n    }\r\n}\r\n","'use strict';\r\nimport Data from './Data';\r\n\r\nexport default class BridgeElement {\r\n    private static elementSet: BridgeElement[] = [];\r\n    public model: Data;\r\n    public id: string;\r\n    public gui: HTMLElement;\r\n\r\n    constructor(model: Data) {\r\n        this.model = model;\r\n        this.id = model.id;\r\n        BridgeElement.elementSet.push(this);\r\n    }\r\n}\r\n","import {Util} from './util';\r\n\r\n// \t\t\t\t######################################################### CSS #########################################################\r\nexport class CSS {\r\n    public css: Object;\r\n    private name: string;\r\n\r\n    constructor(name: string, item?: any) {\r\n        let i, value, border: string, prop, el;\r\n        this.name = name;\r\n        this.css = {};\r\n        if (!item) {\r\n            return;\r\n        }\r\n\r\n        el = window.getComputedStyle(item, null);\r\n        border = el.getPropertyValue('border');\r\n        for (i in el) {\r\n            prop = i;\r\n            value = el.getPropertyValue(prop);\r\n            if (value && value !== '') {\r\n                // optimize CSS\r\n                if (border) {\r\n                    if (prop === 'border-bottom' || prop === 'border-right' || prop === 'border-top' || prop === 'border-left') {\r\n                        if (value !== border) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-color' || prop === 'border-bottom-color' || prop === 'border-right-color' || prop === 'border-top-color' || prop === 'border-left-color') {\r\n                        if (border.substring(border.length - value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-width') {\r\n                        if (border.substring(0, value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else {\r\n                        this.css[prop] = value;\r\n                    }\r\n                } else {\r\n                    this.css[prop] = value;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public static getStdDef() {\r\n        let child, def = Util.create({tag: 'defs'});\r\n\r\n        child = Util.create({tag: 'filter', id: 'drop-shadow'});\r\n        child.appendChild(Util.create({tag: 'feGaussianBlur', 'in': 'SourceAlpha', result: 'blur-out', stdDeviation: 2}));\r\n        child.appendChild(Util.create({tag: 'feOffset', 'in': 'blur-out', dx: 2, dy: 2}));\r\n        child.appendChild(Util.create({tag: 'feBlend', 'in': 'SourceGraphic', mode: 'normal'}));\r\n        def.appendChild(child);\r\n        child = Util.create({tag: 'linearGradient', id: 'reflect', x1: 0, x2: 0, y1: '50%', y2: 0, spreadMethod: 'reflect'});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#aaa', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#eee', offset: '100%'}));\r\n        def.appendChild(child);\r\n\r\n        child = Util.create({tag: 'linearGradient', id: 'classelement', x1: 0, x2: '100%', y1: '100%', y2: 0});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#fff', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#d3d3d3', offset: 1}));\r\n        def.appendChild(child);\r\n\r\n        return def;\r\n    }\r\n\r\n    public static getSubstring(str: string, search: string, startChar: string, endChar: string, splitter: string): any {\r\n        let pos, end, count = 0, array = [];\r\n        pos = str.indexOf(search);\r\n        if (pos > 0) {\r\n            end = str.indexOf(startChar, pos);\r\n            pos = end + 1;\r\n            if (end > 0) {\r\n                while (end < str.length) {\r\n                    if (str.charAt(end) === startChar) {\r\n                        count += 1;\r\n                    }\r\n                    if (str.charAt(end) === endChar) {\r\n                        count -= 1;\r\n                        if (count === 0) {\r\n                            if (splitter && pos !== end) {\r\n                                array.push(str.substring(pos, end).trim());\r\n                            }\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (str.charAt(end) === splitter && count === 1) {\r\n                        array.push(str.substring(pos, end).trim());\r\n                        pos = end + 1;\r\n                    }\r\n\r\n                    end += 1;\r\n                }\r\n                if (splitter) {\r\n                    return array;\r\n                }\r\n                return str.substring(pos, end);\r\n            }\r\n            return str.substring(pos);\r\n        }\r\n        return '';\r\n    }\r\n\r\n    public static addStyle(board: SVGElement, styleName: any) {\r\n        let defs, style: any, css;\r\n        if (styleName.baseVal || styleName.baseVal === '') {\r\n            styleName = styleName.baseVal;\r\n        }\r\n        if (!styleName) {\r\n            return;\r\n        }\r\n        defs = CSS.getDefs(board);\r\n        if (defs.getElementsByTagName('style').length > 0) {\r\n            style = defs.getElementsByTagName('style')[0];\r\n        } else {\r\n            style = Util.create({tag: 'style'});\r\n            style.item = {};\r\n            defs.appendChild(style);\r\n        }\r\n        if (!style.item[styleName]) {\r\n            css = Util.getStyle(styleName);\r\n            style.item[styleName] = css;\r\n            style.innerHTML = style.innerHTML + '\\n.' + styleName + css.getSVGString(board);\r\n        }\r\n    }\r\n\r\n    public static addStyles(board: SVGElement, item: any) {\r\n        if (!item) {\r\n            return;\r\n        }\r\n        let items, i, className: any = item.className;\r\n\r\n        if (className) {\r\n            if (className.baseVal || className.baseVal === '') {\r\n                className = className.baseVal;\r\n            }\r\n        }\r\n        if (className) {\r\n            items = className.split(' ');\r\n            for (i = 0; i < items.length; i += 1) {\r\n                CSS.addStyle(board, items[i].trim());\r\n            }\r\n        }\r\n        for (i = 0; i < item.childNodes.length; i += 1) {\r\n            this.addStyles(board, item.childNodes[i]);\r\n        }\r\n    }\r\n\r\n    public static getDefs(board: SVGElement) {\r\n        let defs;\r\n        if (board.getElementsByTagName('defs').length < 1) {\r\n            defs = Util.create({tag: 'defs'});\r\n            board.insertBefore(defs, board.childNodes[0]);\r\n        } else {\r\n            defs = board.getElementsByTagName('defs')[0];\r\n        }\r\n        return defs;\r\n    }\r\n\r\n    public add(key: string, value: string) {\r\n        this.css[key] = value;\r\n    }\r\n\r\n    public get(key: string): any {\r\n        let i;\r\n        for (i in this.css) {\r\n            if (i === key) {\r\n                return this.css[key];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public getNumber(key: string) {\r\n        return parseInt((this.get(key) || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    public getSVGString(board: SVGElement) {\r\n        let str, pos, style, defs, value, filter, z;\r\n        str = '{';\r\n        for (style in this.css) {\r\n            if (!this.css.hasOwnProperty(style)) {\r\n                continue;\r\n            }\r\n            if (style === 'border') {\r\n                pos = this.css[style].indexOf(' ');\r\n                str = str + 'stroke-width: ' + this.css[style].substring(0, pos) + ';';\r\n                pos = this.css[style].indexOf(' ', pos + 1);\r\n                str = str + 'stroke:' + this.css[style].substring(pos) + ';';\r\n            } else if (style === 'background-color') {\r\n                str = str + 'fill: ' + this.css[style] + ';';\r\n            } else if (style === 'background') {\r\n                value = CSS.getSubstring(this.css[style], 'linear-gradient', '(', ')', ',');\r\n                if (value.length > 0) {\r\n                    defs = CSS.getDefs(board);\r\n                    if (value[0] === '45deg') {\r\n                        pos = 1;\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '100%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                    } else {\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '0%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                        pos = 0;\r\n                    }\r\n                    defs.appendChild(filter);\r\n                    while (pos < value.length) {\r\n                        value[pos] = value[pos].trim();\r\n                        z = value[pos].lastIndexOf(' ');\r\n                        filter.appendChild(Util.create({\r\n                            tag: 'stop',\r\n                            'offset': value[pos].substring(z + 1),\r\n                            style: {'stop-color': value[pos].substring(0, z)}\r\n                        }));\r\n                        pos += 1;\r\n                    }\r\n                    str = str + 'fill: url(#' + this.name + ');';\r\n                    continue;\r\n                }\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n                // box-shadow: inset 0 3px 4px #888;\r\n// \t\t\t\t<defs>\r\n// \t\t\t\t\t<filter id='drop-shadow'>\r\n// \t\t\t\t\t\t<feGaussianBlur in='SourceAlpha' result='blur-out' stdDeviation='2'></feGaussianBlur>\r\n// \t\t\t\t\t\t<feOffset in='blur-out' dx='2' dy='2'></feOffset>\r\n// \t\t\t\t\t\t<feBlend in='SourceGraphic' mode='normal'></feBlend>\r\n// \t\t\t\t\t</filter>\r\n// \t\t\t\t</defs>\r\n            } else {\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n            }\r\n        }\r\n        str = str + '}';\r\n        return str;\r\n    }\r\n}\r\n","import {Bridge} from './Bridge';\r\nimport Data from './Data';\r\nimport EventListener from './EventListener';\r\n\r\nexport abstract class Control {\r\n    public $owner: Control;\r\n    /**\r\n     *\r\n     */\r\n    public property: string;\r\n    public id: string;\r\n    public $view: Element;\r\n    public $viewData: Data = null;\r\n\r\n    protected $model: Data;\r\n    protected $viewListener: EventListenerOrEventListenerObject;\r\n\r\n    /**\r\n     * The properties, we want to listen to\r\n     */\r\n    // static defaultProperties: string[] = [];\r\n\r\n    // public getProperties(): string[] {\r\n    //     return this.properties;\r\n    // }\r\n\r\n    constructor() {\r\n        // e.g. this.properties.push(\"key\");\r\n        // this.properties.push(\"property\");\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data: Data = new Data();\r\n        if (oldData) {\r\n            oldData.removeListener(this);\r\n            const keys: string[] = oldData.getKeys();\r\n            for (let i = 0; i < keys.length; i++) {\r\n                let attr = keys[i];\r\n                if (this.$view) {\r\n                    if (this.$view[attr] === null) {\r\n                        continue;\r\n                    }\r\n                    data.setValue(attr, this.$view[attr]);\r\n                } else {\r\n                    data.setValue(attr, null);\r\n                }\r\n            }\r\n        }\r\n        data.addListener(this);\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     *  Set the new HTMLElement and attach listener to it.\r\n     *  Also remove Listeners from old one and return the old one, if present.\r\n     * @param element\r\n     * @returns The previous Element\r\n     */\r\n    public setView(element: Element): Element {\r\n        let oldElement: Element = null;\r\n        if (this.$view) {\r\n            oldElement = this.$view;\r\n            if (this.$viewListener) {\r\n                oldElement.removeEventListener('change', this.$viewListener);\r\n            }\r\n        }\r\n        this.$view = element;\r\n\r\n        if (this.$viewListener) {\r\n            element.addEventListener('change', this.$viewListener);\r\n        }\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n        return element;\r\n    }\r\n\r\n    public init(owner: Control, property ?: string, id ?: string): Control {\r\n        if (!this.$owner) {\r\n            this.$owner = owner;\r\n        }\r\n        if (!this.id) {\r\n            this.id = id;\r\n        }\r\n        if (!this.property) {\r\n            this.property = this.generateID(property, id);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public createEventListener(): EventListener {\r\n        return new EventListener();\r\n    }\r\n\r\n    public getRoot(): Control {\r\n        if (this.$owner) {\r\n            return this.$owner.getRoot();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return null;\r\n    }\r\n\r\n    public initControl(data: any): void {\r\n        if (this.$view === null || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (data.hasOwnProperty('prop')) {\r\n            for (let key in data.prop) {\r\n                let oldValue = this.$viewData.getValue(key);\r\n                if (this.$view) {\r\n                    this.updateElement(key, oldValue, data.prop[key]);\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        let hasRem = data.hasOwnProperty('rem');\r\n        let removed: any[] = [];\r\n        if (data.hasOwnProperty('upd')) {\r\n            for (let key in data.upd) {\r\n                let oldValue;\r\n                let newValue = data.upd[key];\r\n                let entity;\r\n                const temp = false;\r\n                if (temp) {\r\n//                if (newValue == this.getViewData().getValue(key)) {\r\n                    // new Value assertEquals old value, so we don't need to change anything..\r\n                    // delete data.rem[key];\r\n                    if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                        removed.push(data.rem[key]);\r\n                    }\r\n                    continue;\r\n                }\r\n                if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                    // if there's a rem, the oldValue from rem will be used and expected to be right..\r\n                    oldValue = data.rem[key];\r\n                    if (this.$model && this.$model.getValue(key) === oldValue) {\r\n                        entity = this.$model;\r\n//                    } else if (oldValue == this.getViewData().getValue(key)) {\r\n//                        $graphModel = this.getViewData();\r\n                    }\r\n                    delete data.rem[key];\r\n\r\n                    if (entity === null) {\r\n                        continue;\r\n                    }\r\n                }\r\n                if (entity) {\r\n                    if (!hasRem) {\r\n                        if (entity === this.$model) {\r\n                            oldValue = this.$model.getValue(key);\r\n                        } else {\r\n//                           oldValue = this.getViewData().getValue(key);\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (this.$model) {\r\n                        // try to get the oldValue directly from the $graphModel...\r\n                        oldValue = this.$model.getValue(key);\r\n                        entity = this.$model;\r\n                    }\r\n                    if (oldValue === null) {\r\n                        // if there was no data in the entity, we try to get oldValue from the $view\r\n//                        oldValue = this.getViewData().getValue(key);\r\n//                        entity = this.getViewData();\r\n                    }\r\n                }\r\n\r\n                //  || oldValue !== this.$viewData.getValue(key)\r\n                if (newValue === oldValue) {\r\n                    // no match, so update should be wrong...\r\n                    continue;\r\n                }\r\n                const viewDataOldValue = this.$viewData.getValue(key);\r\n                if (entity === this.$viewData) {\r\n\r\n                    // this.getViewData().setValue(key, newValue);\r\n                    if (this.$view) {\r\n                        this.updateElement(key, viewDataOldValue, newValue);\r\n                    }\r\n                } else {\r\n                    this.updateElement(key, viewDataOldValue, newValue);\r\n                }\r\n                this.getRoot().setValue(entity, key, newValue, oldValue);\r\n            }\r\n            // this.saveViewInData();\r\n        }\r\n        if (hasRem) {\r\n            for (let key in data.rem) {\r\n                if (removed.hasOwnProperty(key)) {\r\n                    continue;\r\n                }\r\n                let oldValue;\r\n//                    this.getViewData().getValue(key);\r\n//                if (oldValue != data.rem[key] || data.upd !== undefined && (data.upd[key] == oldValue || this.getViewData().getValue(key) == data.upd[key])) {\r\n                // if rem is invalid, or if the change is already applied, don't do anything..\r\n                //                  continue;\r\n                //            }\r\n                // delete this.$viewData.getValue(key);\r\n                // this.saveViewInData();\r\n                this.updateElement(key, null, null);\r\n                // this.$view.removeAttribute(key);\r\n                if (this.$model) {\r\n//                    this.getRoot().setValue(this.$graphModel, key, this.getViewData().getValue(key), oldValue);\r\n                }\r\n            }\r\n        }\r\n        if (this.property) {\r\n            // Add listener to Input field:\r\n            this.$view['onchange'] = ((ev: Event) => {\r\n                    this.controlChanged(ev);\r\n                }\r\n            );\r\n        }\r\n//        this.saveViewInData();\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        return null;\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n        return false;\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return new Object();\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue ?: Object): boolean {\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Is called when a object, that the Control is listening to, changes its value.\r\n     * @param entity\r\n     * @param property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        if (oldValue === newValue || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (oldValue === this.$viewData.getValue(property)) {\r\n            return;\r\n        }\r\n        // Set NewData to ViewData and Fire PC\r\n        this.$viewData.setValue(property, newValue);\r\n\r\n//\r\n//\r\n//         // if (entity == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.entity) {\r\n//                 alert(\"entity = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.entity.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.entity, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the entity is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"entity = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n// >>>>>>> addOldFunctions\r\n        if (this.$viewData) {\r\n            this.$viewData.setValue(property, newValue);\r\n        }\r\n        if (this.$model) {\r\n            this.$model.setValue(property, newValue);\r\n        }\r\n        this.updateElement(property, oldValue, newValue);\r\n    }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            // Do Nothing\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  Update GUI Element\r\n     * @param {string} property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        if (this.$view && this.$view.hasAttribute(property)) {\r\n            this.$view.setAttribute(property, newValue);\r\n        }\r\n    }\r\n\r\n//        if (oldValue == newValue) {\r\n//            return;\r\n//        }\r\n//        if (oldValue == this.$viewData.getValue(property)) {\r\n//            return;\r\n//        }\r\n//        // Set NewData to ViewData and Fire PC\r\n//        this.$viewData.setValue(property, newValue);\r\n//\r\n//\r\n//\r\n//         // if ($graphModel == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.$graphModel) {\r\n//                 alert(\"$graphModel = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.$graphModel.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.$graphModel, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the $graphModel is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"$graphModel = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n\r\n    public getId(): string {\r\n        return this.id;\r\n    }\r\n\r\n    public load(json: JSON | Object, owner ?: Control): any {\r\n        // Do Nothing\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.property || entity.hasProperty(this.property)) {\r\n                entity.addListener(this, this.property);\r\n                this.$model = entity;\r\n            }\r\n        }\r\n    }\r\n\r\n    public appendChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.appendChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].appendChild(child.$view);\r\n        }\r\n    }\r\n\r\n    public removeChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.removeChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].removeChild(child.$view);\r\n        }\r\n    }\r\n\r\n    /*\r\n     Property looks like: 't1.talk'\r\n     */\r\n    public setProperty(property: string): void {\r\n        if (!this.property) {\r\n            return;\r\n        }\r\n        let objId = property.split('.')[0];\r\n        let object = null;\r\n        if (this.$owner.hasItem(objId)) {\r\n            object = this.$owner.getItem(objId);\r\n        }\r\n\r\n        // remove listener on old object\r\n        if (this.$model) {\r\n            // this.$graphModel.removeListener(this);\r\n            this.$model.removeListener(this, this.lastProperty);\r\n        }\r\n        this.property = property;\r\n\r\n        // add listener to object..\r\n        if (object) {\r\n            object.addListener(this, this.lastProperty);\r\n            this.$model = object;\r\n            this.updateElement(this.lastProperty, this.$viewData.getValue(this.lastProperty), object.prop[this.lastProperty]);\r\n        }\r\n    }\r\n\r\n    public registerListenerOnHTMLObject(eventType: string): boolean {\r\n        return this.registerEventListener(eventType, <HTMLElement>this.$view);\r\n    }\r\n\r\n    // Normal Event HTML-Event\r\n    // Eventtype:string,\r\n    // id:string of Control\r\n    public fireEvent(evt: Event): void {\r\n        // Do Nothing\r\n    }\r\n\r\n    public isClosed(): boolean {\r\n        return this['closed'];\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        if (this.isClosed()) {\r\n            return this.$owner.getShowed();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * the id of the Data object, that contains the properties of the view\r\n     * @returns {string}\r\n     */\r\n    protected getControlDataID() {\r\n        return this.id + '_data';\r\n    }\r\n\r\n    protected generateID(property ?: string, id ?: string): string {\r\n        if (property) {\r\n            return property;\r\n        }\r\n        if (id) {\r\n            // will generate a data Object suitable for the Control..\r\n            // must be overridden, if the changeEvent shouldn't listen on value...\r\n//            return id + '.' + this.getStandardProperty();//+ \"_data\"\r\n            return id + '.' + '_data';\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected updateViewData() {\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n        const keys: string[] = this.$viewData.getKeys();\r\n        for (let i = 0; i < keys.length; i++) {\r\n            let attr = keys[i];\r\n            if (this.$view[attr] === null) {\r\n                continue;\r\n            }\r\n            this.$viewData.setValue(attr, this.$view[attr]);\r\n        }\r\n    }\r\n\r\n    protected registerEventListener(eventType: string, htmlElement: HTMLElement): boolean {\r\n        if (!htmlElement) {\r\n            return false;\r\n        }\r\n        if (htmlElement instanceof HTMLElement === false) {\r\n            return false;\r\n        }\r\n        let control = this;\r\n        let listener = (t: any) => {\r\n            t.eventType = eventType;\r\n            t.id = control.id;\r\n            control.$owner.fireEvent(t);\r\n        };\r\n        htmlElement.addEventListener(eventType, listener);\r\n        return true;\r\n    }\r\n\r\n    get lastProperty(): string {\r\n        if (!this.property) {\r\n            return '';\r\n        }\r\n        let arr: string[] = this.property.split('.');\r\n        return arr[arr.length - 1];\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\n\r\nexport default class Data {\r\n    public prop = {};\r\n    id: string;\r\n    // $listener: Control[] = [];\r\n    $listener: Object = {};\r\n\r\n    private static nullCheck(property: string): string {\r\n        if (property === undefined || property === null) {\r\n            property = '';\r\n        }\r\n        return property;\r\n    }\r\n    public getKeys(): string[] {\r\n        return Object.keys(this.prop);\r\n    }\r\n\r\n    public addProperties(values: Object) {\r\n        if (!values) {\r\n            return;\r\n        }\r\n        if (values['prop']) {\r\n            let prop = values['prop'];\r\n            for (let property in prop) {\r\n                if (prop.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (prop[property] !== null && '' !== prop[property]) {\r\n                    this.setValue(property, prop[property]);\r\n                }\r\n            }\r\n        } else {\r\n            let upd = values['upd'] || {};\r\n            let rem = values['rem'] || {};\r\n\r\n            for (let property in upd) {\r\n                if (upd.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (rem.hasOwnProperty(property) === false) {\r\n                    this.setValue(property, upd[property]);\r\n                } else {\r\n                    // if we have a rem, we wan't to check, if its a valid change (teh old value is the value in rem)\r\n                    if (this.getValue(property) === rem[property]) {\r\n                        this.setValue(property, upd[property]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getValue(attribute: string) {\r\n        return this.prop[attribute];\r\n    }\r\n\r\n    public setValue(attribute: string, newValue: any): void {\r\n        let oldValue = this.prop[attribute];\r\n        if (oldValue === newValue && newValue !== null) {\r\n            return;\r\n        }\r\n        this.prop[attribute] = newValue;\r\n        this.firePropertyChange(attribute, oldValue, newValue);\r\n    }\r\n\r\n    public addTo(attribute: string, newValue: any): boolean {\r\n        let add: boolean;\r\n        if (this.prop[attribute]) {\r\n            if (this.prop[attribute].contains(newValue) === false) {\r\n                add = true;\r\n            }\r\n        } else {\r\n            this.prop[attribute] = [];\r\n            add = true;\r\n        }\r\n        if (add) {\r\n            this.prop[attribute].push(newValue);\r\n            this.firePropertyChange(attribute, null, newValue);\r\n        }\r\n        return add;\r\n    }\r\n\r\n    public removeFrom(attribute: string, newValue: any): boolean {\r\n        if (!this.prop[attribute]) {\r\n            return true;\r\n        }\r\n        let pos: number = this.prop[attribute].indexOf(newValue);\r\n        if (pos < 0) {\r\n            return true;\r\n        }\r\n        this.prop[attribute].splice(pos, 1);\r\n        this.firePropertyChange(attribute, newValue, null);\r\n        return true;\r\n    }\r\n\r\n    public addListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(property);\r\n        if (!listeners) {\r\n            listeners = [];\r\n            this.$listener[Data.nullCheck(property)] = listeners;\r\n        }\r\n        listeners.push(control);\r\n    }\r\n\r\n    public removeListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners = this.getListeners(property);\r\n        if (listeners === null) {\r\n            return;\r\n        }\r\n        let pos = listeners.indexOf(control);\r\n        if (pos >= 0) {\r\n            listeners.splice(pos, 1);\r\n        }\r\n        if (listeners.length === 0 && Data.nullCheck(property) !== '') {\r\n            // only remove, if it's not the default listener list...\r\n            delete this.$listener[property];\r\n        }\r\n    }\r\n\r\n    public hasProperty(property: string): boolean {\r\n        return this.prop.hasOwnProperty(property);\r\n    }\r\n\r\n    public addFrom(attribute: string, oldData: Data): void {\r\n        if (oldData) {\r\n            this.setValue(attribute, oldData.getValue(attribute));\r\n        } else {\r\n            this.setValue(attribute, null);\r\n        }\r\n    }\r\n\r\n    public removeKey(key: string): any {\r\n        if (this.hasProperty(key)) {\r\n            const oldValue = this.prop[key];\r\n            delete this.prop[key];\r\n            return oldValue;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected getListeners(property: string): PropertyChangeSupport[] {\r\n        property = Data.nullCheck(property);\r\n        return this.$listener[property];\r\n    }\r\n\r\n    protected firePropertyChange(attribute: string, oldValue: Object, newValue: Object) {\r\n        attribute = Data.nullCheck(attribute);\r\n        // at first fire for the given property\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(attribute);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n        // now we need to fire the Listeners that wan't to listen to everything\r\n        listeners = this.getListeners(null);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport interface EventHandler {\r\n    canHandle(): boolean;\r\n    handle(event: Event, element: DiagramElement): boolean;\r\n    setActive(active: boolean): void;\r\n}\r\n\r\nexport class EventBus {\r\n    public static CREATE: string = 'Create';\r\n    public static EDITOR: string = 'Editor';\r\n    public static OPENPROPERTIES: string = 'openProperties';\r\n    public static RELOADPROPERTIES: string = 'reloadProperties';\r\n    public static ELEMENTMOUSEDOWN: string = 'ELEMENT:MOUSEDOWN';\r\n    public static ELEMENTMOUSEUP: string = 'ELEMENT:MOUSEUP';\r\n    public static ELEMENTMOUSELEAVE: string = 'ELEMENT:MOUSELEAVE';\r\n    public static ELEMENTMOUSEMOVE: string = 'ELEMENT:MOUSEMOVE';\r\n    public static ELEMENTMOUSEWHEEL: string = 'ELEMENT:MOUSEWHEEL';\r\n    public static ELEMENTCLICK: string = 'ELEMENT:CLICK';\r\n    public static ELEMENTDBLCLICK: string = 'ELEMENT:DBLCLICK';\r\n    public static ELEMENTDRAG: string = 'ELEMENT:DRAG';\r\n    public static ELEMENTDRAGOVER: string = 'ELEMENT:DRAGOVER';\r\n    public static ELEMENTDROP: string = 'ELEMENT:DROP';\r\n    public static ELEMENTDRAGLEAVE: string = 'ELEMENT:DRAGLEAVE';\r\n\r\n    public static EVENTS: string[] = [\r\n        EventBus.CREATE,\r\n        EventBus.EDITOR,\r\n        EventBus.OPENPROPERTIES,\r\n        EventBus.RELOADPROPERTIES,\r\n        EventBus.ELEMENTMOUSEDOWN,\r\n        EventBus.ELEMENTMOUSEUP,\r\n        EventBus.ELEMENTMOUSELEAVE,\r\n        EventBus.ELEMENTMOUSEMOVE,\r\n        EventBus.ELEMENTMOUSEWHEEL,\r\n        EventBus.ELEMENTCLICK,\r\n        EventBus.ELEMENTDRAG,\r\n        EventBus.ELEMENTDBLCLICK,\r\n        EventBus.ELEMENTDRAGOVER,\r\n        EventBus.ELEMENTDROP,\r\n        EventBus.ELEMENTDRAGLEAVE,\r\n    ];\r\n\r\n    private static handlers = {};\r\n\r\n    private static $activeHandler: string = '';\r\n\r\n    public static setActiveHandler(handler: string): void {\r\n        this.$activeHandler = handler;\r\n    }\r\n\r\n    public static isHandlerActiveOrFree(handler: string, notEmpty?: boolean): boolean {\r\n        if (notEmpty) {\r\n            return this.$activeHandler === handler;\r\n        }\r\n        return this.$activeHandler === handler || this.$activeHandler === '' || this.$activeHandler === undefined;\r\n    }\r\n\r\n    public static isAnyHandlerActive(): boolean {\r\n        return !(this.$activeHandler === '' || this.$activeHandler === undefined);\r\n    }\r\n\r\n    public static releaseActiveHandler(): void {\r\n        this.$activeHandler = '';\r\n    }\r\n\r\n    public static getActiveHandler(): string {\r\n        return this.$activeHandler;\r\n    }\r\n\r\n    static register(control: Control, view: Element) {\r\n        let events: string[];\r\n        if (typeof control['getEvents'] === 'function') {\r\n            events = control['getEvents']();\r\n        }\r\n\r\n        if (!events || !view) {\r\n            return;\r\n        }\r\n        for (let event of events) {\r\n            this.registerEvent(view, event, control);\r\n        }\r\n    }\r\n\r\n    static registerEvent(view: Element, event: string, control?: any) {\r\n        const pos: number = event.indexOf(':');\r\n        if (pos > 0) {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        } else {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        }\r\n    }\r\n\r\n    public static publish(element: DiagramElement, evt: Event) {\r\n        let handlers = EventBus.handlers[evt.type];\r\n        if (handlers) {\r\n            for (let handler of handlers) {\r\n                handler.handle(evt, element);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static subscribe(handler: EventHandler, ...eventTypes: string[]) {\r\n        for (let event of eventTypes) {\r\n            let handlers = EventBus.handlers[event];\r\n            if (handlers === null || handlers === undefined) {\r\n                handlers = [];\r\n                EventBus.handlers[event] = handlers;\r\n            }\r\n            handlers.push(handler);\r\n        }\r\n    }\r\n}\r\n","import SimpleEvent from './Event';\r\n\r\nexport default class EventListener {\r\n    private $onUpdate: Function;\r\n\r\n    get onUpdate(): Function {\r\n        return this.$onUpdate;\r\n    }\r\n\r\n    set onUpdate(value: Function) {\r\n        this.$onUpdate = value;\r\n    }\r\n\r\n    update(event: SimpleEvent) {\r\n        this.$onUpdate(event);\r\n    }\r\n}\r\n","// ################################## jsEPS ####################################################\r\nimport {SVGConverter} from './SVGConverter';\r\n\r\nexport class JSEPS {\r\n    private max: number;\r\n    private min: number;\r\n    private inverting: boolean;\r\n    private output: string[];\r\n    private font: number;\r\n\r\n    constructor(options: any) {\r\n        this.max = 0;\r\n        this.min = 999;\r\n        let hasInverting = typeof (options.inverting);\r\n        this.inverting = (options && hasInverting !== 'undefined' ? options.inverting : true);\r\n        this.output = ['%!PS-Adobe-3.0 EPSF-3.0', '1 setlinewidth'];\r\n        this.out('/FSD {findfont exch scalefont def} bind def % In the document prolog: define');\r\n        this.out('/SMS {setfont moveto show} bind def % some useful procedures');\r\n        this.out('/MS {moveto show} bind def');\r\n        this.out('/F1  10  /Helvetica  FSD % At the start of the script: set up');\r\n        this.font = 1;\r\n    }\r\n\r\n    public out(value: string) {this.output.push(value); }\r\n    public rect(x: number, y: number, width: number, height: number, style: string) {\r\n        y = y + (this.inverting ? height : 0);\r\n        if (style && style.indexOf('fill:url(#classelement);') >= 0) {\r\n            this.out('gsave 0.93 0.93 0.93 setrgbcolor newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectfill grestore');\r\n        } else {\r\n            this.out('newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectstroke');\r\n        }\r\n    }\r\n    public setFillColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public y(value: number) {this.max = Math.max(this.max, value); this.min = Math.min(this.min, value); return this.inverting ? '%y(' + value + ')' : value; }\r\n    public getType(): string {\r\n        return 'application/postscript';\r\n    }\r\n\r\n    public getData(): string {\r\n        let t, end, url, text, typ = 'application/postscript', a = document.createElement('a'), data = '', pos, i;\r\n        for (i = 0; i < this.output.length; i += 1) {\r\n            text = this.output[i];\r\n            if (this.inverting) {\r\n                while ((pos = text.indexOf('%y')) >= 0) {\r\n                    end = text.indexOf(')', pos);\r\n                    t = this.max - parseInt(text.substring(pos + 3, end), 10);\r\n                    text = text.substring(0, pos) + t + text.substring(end + 1);\r\n                }\r\n            }\r\n            data = data + text + '\\r\\n';\r\n        }\r\n        return data;\r\n    }\r\n\r\n    public setDrawColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public ellipse(cx: number, cy: number, rx: number, ry: number, colorMode: string) {/*FIXME*/}\r\n    public circle(cx: number, cy: number, r: number, colorMode: string) {/*FIXME*/}\r\n    public setTextColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public text(x: number, y: number, text: string) {this.out('(' + text.replace('&lt;', '<').replace('&gt;', '>') + ') ' + x + ' ' + this.y(y) + ' F1 SMS'); }\r\n    public lineto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' lineto'); this.out('stroke'); }\r\n    public moveto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' moveto'); }\r\n    public line(x1: number, y1: number, x2: number, y2: number) {this.out('newpath ' + x1 + ' ' + this.y(y1) + ' moveto ' + x2 + ' ' + this.y(y2) + ' lineto stroke'); }\r\n    public setLineWidth(value: string) {this.out(value + ' setlinewidth'); }\r\n    public setFont(value: string) {this.out('/F' + (this.font += 1) + ' 10 /' + value + ' FSD'); }\r\n}\r\n","import { Graph } from './elements/Graph';\r\n\r\n/*const buttons = {\r\n    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    clazz: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n};\r\n*/\r\nexport default class Palette {\r\n\r\n    private graph: Graph;\r\n    private palette: Element;\r\n    private root: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n        let div = document.createElement('div');\r\n        div.className = 'palette';\r\n        div.id = 'palette';\r\n        this.root = div;\r\n        this.palette = div;\r\n        for (let key in graph.nodeFactory) {\r\n            let element = graph.nodeFactory[key];\r\n            let control = new element();\r\n            let icon = control.getToolBarIcon();\r\n            if (icon) {\r\n                let button = <HTMLButtonElement>document.createElement('button');\r\n                button.className = 'add' + key + 'Btn';\r\n                button.innerHTML = icon.outerHTML;\r\n                button.onclick = e => {\r\n                    let nextFreePosition = this.graph.getNextFreePosition();\r\n                    // let node = this.graph.addElementWithValues(graph.nodeFactory[key], {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    let node = this.graph.addElementWithValues(key, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    this.graph.drawElement(node);\r\n                };\r\n                this.palette.appendChild(button);\r\n            }\r\n        }\r\n        // this.graph.nodeFactory\r\n//        this.addButtons();\r\n    }\r\n\r\n    public show() {\r\n        document.body.appendChild(this.root);\r\n    }\r\n\r\n    private addButtons() {\r\n        /*for (let btn in buttons) {\r\n            let button = <HTMLButtonElement>document.createElement('button');\r\n            button.className = 'add' + btn + 'Btn';\r\n            button.innerHTML = buttons[btn];\r\n            button.onclick = e => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let node = this.graph.addElementWithValues(btn, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                this.graph.drawElement(node);\r\n            };\r\n            this.palette.appendChild(button);\r\n        }*/\r\n    }\r\n}\r\n","import {Graph} from './elements/Graph';\r\nimport * as edges from './elements/edges';\r\nimport {EventBus, EventHandler} from './EventBus';\r\nimport {DiagramElement} from './elements/BaseElements';\r\nimport {Util} from './util';\r\n\r\nexport class PanelGroup implements EventHandler {\r\n    private graph: Graph;\r\n    private selectedElement: DiagramElement;\r\n    private clearPanel: Panel;\r\n    private generatePanel: Panel;\r\n    private propertiesMasterPanel: HTMLDivElement;\r\n    private propertiesContent: HTMLDivElement;\r\n    private propHeaderLabel: HTMLDivElement;\r\n    private propHeaderButton: HTMLButtonElement;\r\n    private selectedPanel: Panel;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.clearPanel = new ClearPanel(this);\r\n        this.generatePanel = new GeneratePanel(this);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        this.handleOpenProperties(event, element);\r\n\r\n        if (event.type === EventBus.RELOADPROPERTIES\r\n            && this.selectedElement && element.id === this.selectedElement.id) {\r\n            this.handleEvent(event, element);\r\n        }\r\n\r\n        // the same element was clicked. do nothing\r\n        if (this.selectedElement && this.selectedElement.id === element.id) {\r\n            return true;\r\n        }\r\n        if (element.id === 'RootElement') {\r\n            this.setActivePanel(this.clearPanel);\r\n        }\r\n        if (element.id === 'GenerateProp') {\r\n            this.setActivePanel(this.generatePanel);\r\n        }\r\n        this.selectedElement = element;\r\n\r\n        return true;\r\n    }\r\n\r\n    public getGraph(): Graph {\r\n        return this.graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(PanelGroup.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(PanelGroup.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n     public handleEvent(event: any, element: any) {\r\n        // DO NOTHING\r\n    }\r\n\r\n    public show() {\r\n        // main div to display any properties, class, edge, etc.\r\n        this.propertiesMasterPanel = document.createElement('div');\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n\r\n        this.propertiesContent = document.createElement('div');\r\n        this.propertiesContent.className = 'properties-hidden';\r\n\r\n        this.propHeaderLabel = document.createElement('div');\r\n        this.propHeaderLabel.style.display = 'inherit';\r\n        this.propHeaderLabel.style.cursor = 'pointer';\r\n        this.propHeaderLabel.onclick = e => this.toogleProperties(e);\r\n\r\n        // button to display and hide the properties of e.g. a class\r\n        this.propHeaderButton = document.createElement('button');\r\n        this.propHeaderButton.className = 'btnHideProp';\r\n        this.propHeaderButton.style.cssFloat = 'right';\r\n        this.propHeaderButton.onclick = e => this.toogleProperties(e);\r\n\r\n        let propertiesHeader = document.createElement('div');\r\n        propertiesHeader.style.display = 'inline';\r\n        propertiesHeader.appendChild(this.propHeaderLabel);\r\n        propertiesHeader.appendChild(this.propHeaderButton);\r\n\r\n        this.propertiesMasterPanel.appendChild(propertiesHeader);\r\n        this.propertiesMasterPanel.appendChild(this.propertiesContent);\r\n        document.body.appendChild(this.propertiesMasterPanel);\r\n\r\n        this.setActivePanel(this.clearPanel);\r\n    }\r\n\r\n    public setActivePanel(panel: Panel) {\r\n        this.selectedPanel = panel;\r\n        this.propHeaderLabel.innerHTML = panel.getHeaderText();\r\n        if (this.propertiesContent) {\r\n            while (this.propertiesContent.hasChildNodes()) {\r\n                this.propertiesContent.removeChild(this.propertiesContent.childNodes[0]);\r\n            }\r\n        }\r\n        panel.show();\r\n\r\n        panel.showFirstTab();\r\n        if (panel !== this.clearPanel) {\r\n            this.showProperties(null);\r\n        } else {\r\n            this.hideProperties(null);\r\n        }\r\n    }\r\n\r\n    public getProperiesContent(): HTMLDivElement {\r\n        return this.propertiesContent;\r\n    }\r\n\r\n    private handleOpenProperties(event: Event, element: DiagramElement) {\r\n        if (event.type === 'dblclick') {\r\n            this.showProperties(event);\r\n        }\r\n    }\r\n\r\n    private showProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Show\r\n        this.propHeaderButton.innerHTML = '&#8897;';\r\n        this.propHeaderButton.title = 'Hide properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel';\r\n        this.propertiesContent.className = 'properties';\r\n    }\r\n\r\n    private toogleProperties(evt: Event): void {\r\n        if (this.propHeaderButton.title === 'Show properties') {\r\n            this.showProperties(evt);\r\n        } else {\r\n            this.hideProperties(evt);\r\n        }\r\n    }\r\n\r\n    private hideProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Hide\r\n        this.propHeaderButton.innerHTML = '&#8896;';\r\n        this.propHeaderButton.title = 'Show properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n        this.propertiesContent.className = 'properties-hidden';\r\n    }\r\n}\r\n\r\nexport abstract class Panel {\r\n    protected divPropertiesPanel: HTMLDivElement;\r\n    protected divPropertiesTabbedPanel: HTMLDivElement;\r\n    protected element: any;\r\n    protected group: PanelGroup;\r\n    private panelItem: PanelItem[] = [];\r\n\r\n    constructor(group: PanelGroup, element: any) {\r\n        // get the properties content panel\r\n        this.divPropertiesPanel = document.createElement('div');\r\n        this.element = element;\r\n        this.group = group;\r\n\r\n        this.divPropertiesTabbedPanel = document.createElement('div');\r\n        this.divPropertiesTabbedPanel.className = 'tabbedpane';\r\n\r\n        // add tabbed panel\r\n        this.divPropertiesPanel.appendChild(this.divPropertiesTabbedPanel);\r\n    }\r\n\r\n    public show(): void {\r\n        let propertiesContent: HTMLDivElement = this.group.getProperiesContent();\r\n        if (this.panelItem.length > 1) {\r\n            propertiesContent.appendChild(this.getPropertiesTabbedPanel());\r\n        }\r\n\r\n        propertiesContent.appendChild(this.getPropertiesPanel());\r\n    }\r\n\r\n    public getPropertiesTabbedPanel(): HTMLDivElement {\r\n        return this.divPropertiesTabbedPanel;\r\n    }\r\n\r\n    public getPropertiesPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return '';\r\n    }\r\n\r\n    public showFirstTab(): void {\r\n        if (this.panelItem.length > 0) {\r\n            this.openTab(this.panelItem[0]);\r\n        }\r\n    }\r\n\r\n    protected createTabElement(tabText: string, tabValue: string, item: PanelItem): PanelItem {\r\n        let tabElementBtn = document.createElement('button');\r\n        tabElementBtn.className = 'tablinks';\r\n        tabElementBtn.innerText = tabText;\r\n        tabElementBtn.value = tabValue;\r\n\r\n        if (item === null) {\r\n            item = new PanelItem(this);\r\n        }\r\n        item.withButton(tabElementBtn);\r\n\r\n        tabElementBtn.onclick = () => this.openTab(item);\r\n        this.divPropertiesTabbedPanel.appendChild(tabElementBtn);\r\n        this.panelItem.push(item);\r\n        return item;\r\n    }\r\n\r\n    protected openTab(panelItem: PanelItem): void {\r\n        for (let key in this.panelItem) {\r\n            let child = this.panelItem[key];\r\n            if (child !== panelItem) {\r\n                 child.deactive();\r\n            }\r\n        }\r\n        panelItem.active();\r\n        // hide other tabcontent\r\n        if (this.divPropertiesPanel) {\r\n            while (this.divPropertiesPanel.hasChildNodes()) {\r\n                this.divPropertiesPanel.removeChild(this.divPropertiesPanel.childNodes[0]);\r\n            }\r\n        }\r\n\r\n        // ADD\r\n        if (panelItem.getContent()) {\r\n            this.divPropertiesPanel.appendChild(panelItem.getContent());\r\n        }\r\n    }\r\n}\r\n\r\nexport class GeneratePanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n\r\n        let item: PanelItem = this.createTabElement('General', 'General', null);\r\n\r\n        // Workspace and generate code stuff\r\n        let inputGenerateWorkspace: HTMLInputElement =  <HTMLInputElement> Util.createHTML({tag: 'input', id: 'workspace', type: 'text', placeholder: 'Type your Folder for generated code...', value: 'src/main/java', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Folder:', inputGenerateWorkspace);\r\n\r\n        let inputGeneratePackage: HTMLInputElement = <HTMLInputElement> Util.createHTML({tag: 'input', id: 'package', type: 'text', placeholder: 'Type your workspace for generated code...', value: '', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Package:', inputGeneratePackage);\r\n\r\n        let options = document.createElement('div');\r\n        options.style.textAlign = 'center';\r\n        options.style.margin = '3';\r\n        options.style.padding = '5';\r\n\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(options);\r\n\r\n        options.style.borderStyle = 'groove';\r\n        options.style.borderRadius = '10px';\r\n\r\n        let btnGenerate = document.createElement('button');\r\n        btnGenerate.textContent = 'Generate';\r\n        btnGenerate.title = 'Generate code into your workspace';\r\n        btnGenerate.className = 'OptionElement';\r\n\r\n        let that = this;\r\n        btnGenerate.onclick = () => {\r\n            let workspace = inputGeneratePackage.value;\r\n            if (workspace.length === 0) {\r\n                alert('No workspace set.\\nEnter first your workspace');\r\n                inputGeneratePackage.focus();\r\n                return;\r\n            }\r\n            that.group.getGraph().generate(workspace, inputGenerateWorkspace.value);\r\n        };\r\n        options.appendChild(btnGenerate);\r\n        options.appendChild(document.createElement('hr'));\r\n        options.appendChild(document.createElement('br'));\r\n\r\n        let btnAutoLayout = Util.createHTML({tag: 'button', className: 'OptionElement', value: 'Auto Layout', style: {marginRight: '10px'}, onclick: () => {\r\n                that.group.getGraph().layout();\r\n            }});\r\n\r\n        options.appendChild(btnAutoLayout);\r\n\r\n        // delete all nodes\r\n        let btnDeleteAll = document.createElement('button');\r\n        btnDeleteAll.className = 'OptionElement';\r\n        btnDeleteAll.textContent = 'Delete All';\r\n        btnDeleteAll.title = 'Delete all nodes from diagram';\r\n\r\n        btnDeleteAll.onclick = () => {\r\n            let confirmDelete = confirm('All classes will be deleted!');\r\n            if (!confirmDelete) {\r\n                return;\r\n            }\r\n            that.group.getGraph().$graphModel.removeAllElements();\r\n        };\r\n        btnDeleteAll.style.marginRight = '10px';\r\n        options.appendChild(btnDeleteAll);\r\n\r\n        // export stuff\r\n        let exportTypes: string[] = ['Export', 'HTML', 'JSON', 'PDF', 'PNG', 'SVG'];\r\n        let selectExport = document.createElement('select');\r\n\r\n        exportTypes.forEach(type => {\r\n            if (!(!window['jsPDF'] && type === 'PDF')) {\r\n                let option = document.createElement('option');\r\n                option.value = type;\r\n                option.textContent = type;\r\n                selectExport.appendChild(option);\r\n            }\r\n        });\r\n\r\n        selectExport.onchange = (evt) => {\r\n            let selectedExportType = selectExport.options[selectExport.selectedIndex].value;\r\n            selectExport.selectedIndex = 0;\r\n            that.group.getGraph().saveAs(selectedExportType);\r\n        };\r\n        selectExport.className = 'OptionElement';\r\n        options.appendChild(selectExport);\r\n        options.appendChild(document.createElement('br'));\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Properties';\r\n    }\r\n\r\n}\r\n\r\nexport class ClearPanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Select any element to see its properties';\r\n    }\r\n}\r\n\r\nexport class PanelItem {\r\n    protected panel: Panel;\r\n    protected label: string;\r\n    protected button: HTMLButtonElement;\r\n    protected content: HTMLDivElement = <HTMLDivElement>Util.create({tag: 'div', className: 'tabContent'});\r\n\r\n    constructor(panel: Panel, label?: string) {\r\n        this.panel = panel;\r\n        this.label = label;\r\n    }\r\n\r\n    public active(): void {\r\n        if (this.getButton()) {\r\n            this.getButton().className += ' active';\r\n        }\r\n    }\r\n\r\n    public deactive(): void {\r\n        if (this.getButton()) {\r\n            Util.removeClass(this.getButton(), 'active');\r\n        }\r\n    }\r\n\r\n    public withButton(button: HTMLButtonElement): PanelItem {\r\n        this.button = button;\r\n        return this;\r\n    }\r\n\r\n    public withContent(element: HTMLElement): PanelItem {\r\n        this.content.appendChild(element);\r\n        return this;\r\n    }\r\n\r\n    public withInput(labelText: string, element: HTMLElement): PanelItem {\r\n        let group: HTMLDivElement = <HTMLDivElement> Util.createHTML({tag: 'div'});\r\n        let label = Util.createHTML({tag: 'label', for: element.id, value: labelText});\r\n        group.appendChild(label);\r\n        group.appendChild(element);\r\n\r\n        this.content.appendChild(group);\r\n        return this;\r\n    }\r\n\r\n    public getButton(): HTMLButtonElement {\r\n        return this.button;\r\n    }\r\n\r\n    public getContent(): HTMLDivElement {\r\n        return this.content;\r\n    }\r\n\r\n   public getHeader(): string {\r\n        return this.label;\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\nimport Data from './Data';\r\n\r\nexport class PropertyBinder implements PropertyChangeSupport {\r\n    private propertyClass1: string;\r\n    private propertyClass2: string;\r\n    private data1: Data;\r\n    private data2: Data;\r\n    // works like a lock\r\n    private applyingChange: boolean = false;\r\n\r\n    constructor(data1: Data, data2: Data, propertyClass1: string, propertyClass2: string) {\r\n        this.data1 = data1;\r\n        this.data2 = data2;\r\n        this.propertyClass1 = propertyClass1;\r\n        this.propertyClass2 = propertyClass2;\r\n    }\r\n    static bind(data1: Data, data2: Data, property1: string, property2: string) {\r\n        if (!data1 || !data2 || !property1) {\r\n            console.error('NullValue!!');\r\n            return null;\r\n        }\r\n        const propertyBinder = new PropertyBinder(data1, data2, property1, property2);\r\n        propertyBinder.bind();\r\n        return propertyBinder;\r\n    }\r\n\r\n    propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        if (!this.applyingChange) {\r\n            this.applyingChange = true;\r\n            if (entity === this.data1) {\r\n                // fire to data2\r\n                this.data2.setValue(this.propertyClass2, newValue);\r\n            } else if (entity === this.data2) {\r\n                // fire to data1\r\n                this.data1.setValue(this.propertyClass1, newValue);\r\n            }\r\n            this.applyingChange = false;\r\n        }\r\n    }\r\n\r\n    protected bind() {\r\n        // public addListener(control: Control, property?: string)\r\n        // todo: set value immediately\r\n        this.data1.setValue(this.propertyClass1, this.data2.getValue(this.propertyClass2));\r\n\r\n        this.data1.addListener(this, this.propertyClass1);\r\n        this.data2.addListener(this, this.propertyClass2);\r\n    }\r\n\r\n    protected unbind() {\r\n        // public addListener(control: Control, property?: string)\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n    }\r\n}\r\n","// ################################## RGBColor ####################################################\r\nexport class RGBColor {\r\n    public  ok: boolean;\r\n    public r: number;\r\n    public g: number;\r\n    public b: number;\r\n\r\n    constructor(value: string) {\r\n        this.ok = false;\r\n        if (value === 'none') {\r\n            return;\r\n        }\r\n        let computedColor, div = document.createElement('div');\r\n        div.style.backgroundColor = value;\r\n        document.body.appendChild(div);\r\n        computedColor = window.getComputedStyle(div).backgroundColor;\r\n        // cleanup temporary div.\r\n        document.body.removeChild(div);\r\n        this.convert(computedColor);\r\n    }\r\n    public convert(value: any) {\r\n        let values, regex = /rgb *\\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\\)/;\r\n        values = regex.exec(value);\r\n        this.r = parseInt(values[1], 10);\r\n        this.g = parseInt(values[2], 10);\r\n        this.b = parseInt(values[3], 10);\r\n        this.ok = true;\r\n    }\r\n\r\n    public toRGB(): string {return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; }\r\n    public toHex(): string {\r\n        return '#' + (this.r + 0x10000).toString(16).substring(3).toUpperCase() + (this.g + 0x10000).toString(16).substring(3).toUpperCase() + (this.b + 0x10000).toString(16).substring(3).toUpperCase();\r\n    }\r\n}\r\n","/*\r\n NetworkParser\r\n Copyright (c) 2011 - 2014, Stefan Lindel\r\n All rights reserved.\r\n\r\n Licensed under the EUPL, Version 1.1 or (as soon they\r\n will be approved by the European Commission) subsequent\r\n versions of the EUPL (the \"Licence\");\r\n You may not use this work except in compliance with the Licence.\r\n You may obtain a copy of the Licence at:\r\n\r\n http://ec.europa.eu/idabc/eupl5\r\n\r\n Unless required by applicable law or agreed to in\r\n writing, software distributed under the Licence is\r\n distributed on an \"AS IS\" basis,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\r\n express or implied.\r\n See the Licence for the specific language governing\r\n permissions and limitations under the Licence.\r\n*/\r\nimport {RGBColor} from './RGBColor';\r\nimport {JSEPS} from \"./JSEPS\";\r\n\r\nconst epsSvgAttr = {\r\n    // allowed attributes. all others are removed from the preview.\r\n    g: ['stroke', 'fill', 'stroke-width'],\r\n    line: ['x1', 'y1', 'x2', 'y2', 'stroke', 'stroke-width'],\r\n    rect: ['x', 'y', 'width', 'height', 'stroke', 'fill', 'stroke-width'],\r\n    ellipse: ['cx', 'cy', 'rx', 'ry', 'stroke', 'fill', 'stroke-width'],\r\n    circle: ['cx', 'cy', 'r', 'stroke', 'fill', 'stroke-width'],\r\n    text: ['x', 'y', 'font-size', 'font-family', 'text-anchor', 'font-weight', 'font-style', 'fill'],\r\n    path: ['']\r\n};\r\nexport class SVGConverter {\r\n    private k: number;\r\n    private remove: boolean;\r\n    private target: any;\r\n\r\n    constructor(element: any, target: any, options: any) {\r\n        this.k = 1.0;\r\n        let hasScale = typeof (options.scale), hasRemoveInvalid = typeof (options.removeInvalid);\r\n        this.k = (options && hasScale !== 'undefined' ? options.scale : 1.0);\r\n        this.remove = (options && hasRemoveInvalid !== 'undefined' ? options.removeInvalid : false);\r\n        this.target = target;\r\n        this.parse(element);\r\n    }\r\n\r\n    public parse(element: any) {\r\n        let el, i, n, colorMode, hasFillColor, fillRGB, fillColor, strokeColor, strokeRGB, fontType, pdfFontSize, x, y,\r\n            box, xOffset;\r\n        if (!element) {\r\n            return;\r\n        }\r\n        if (typeof element === 'string') {\r\n            el = document.createElement('div');\r\n            el.innerHTML = element;\r\n            element = el.childNodes[0];\r\n        }\r\n        for (i = 0; i < element.children.length; i += 1) {\r\n            n = element.children[i];\r\n            colorMode = null;\r\n            hasFillColor = false;\r\n            if ('g,line,rect,ellipse,circle,text'.indexOf(n.tagName) >= 0) {\r\n                fillColor = n.getAttribute('fill');\r\n                if (fillColor) {\r\n                    fillRGB = new RGBColor(fillColor);\r\n                    if (fillRGB.ok) {\r\n                        hasFillColor = true;\r\n                        colorMode = 'F';\r\n                    }\r\n                }\r\n            }\r\n            if ('g,line,rect,ellipse,circle'.indexOf(n.tagName) >= 0) {\r\n                if (hasFillColor) {\r\n                    this.target.setFillColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                }\r\n                strokeColor = n.getAttribute('stroke');\r\n                if (n.hasAttribute('stroke-width')) {\r\n                    this.target.setLineWidth(this.attr(n, 'stroke-width'));\r\n                }\r\n                if (strokeColor) {\r\n                    strokeRGB = new RGBColor(strokeColor);\r\n                    if (strokeRGB.ok) {\r\n                        this.target.setDrawColor(strokeRGB.r, strokeRGB.g, strokeRGB.b);\r\n                        if (colorMode === 'F') {\r\n                            colorMode = 'FD';\r\n                        } else if (!hasFillColor) {\r\n                            colorMode = 'S';\r\n                        }\r\n                    } else {\r\n                        colorMode = null;\r\n                    }\r\n                }\r\n            }\r\n            // console.log(\"write \"+n.tagName);\r\n            switch (n.tagName.toLowerCase()) {\r\n                case 'svg':\r\n                case 'a':\r\n                case 'g':\r\n                    this.parse(n);\r\n                    break;\r\n                case 'line':\r\n                    this.target.line(this.attr(n, 'x1'), this.attr(n, 'y1'), this.attr(n, 'x2'), this.attr(n, 'y2'));\r\n                    break;\r\n                case 'rect':\r\n                    this.target.rect(this.attr(n, 'x'), this.attr(n, 'y'), this.attr(n, 'width'), this.attr(n, 'height'), n.getAttribute('style'));\r\n                    break;\r\n                case 'ellipse':\r\n                    this.target.ellipse(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'rx'), this.attr(n, 'ry'), colorMode);\r\n                    break;\r\n                case 'circle':\r\n                    this.target.circle(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'r'), colorMode);\r\n                    break;\r\n                case 'text':\r\n                    if (n.hasAttribute('font-family')) {\r\n                        switch (n.getAttribute('font-family').toLowerCase()) {\r\n                            case 'serif':\r\n                                this.target.setFont('times');\r\n                                break;\r\n                            case 'monospace':\r\n                                this.target.setFont('courier');\r\n                                break;\r\n                            default:\r\n                                n.getAttribute('font-family', 'sans-serif');\r\n                                this.target.setFont('Helvetica');\r\n                        }\r\n                    }\r\n                    if (hasFillColor) {\r\n                        this.target.setTextColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                    }\r\n                    if (this.target instanceof JSEPS) {\r\n                        this.target.text(this.attr(n, 'x'), this.attr(n, 'y'), n.innerHTML);\r\n                        break;\r\n                    }\r\n                    fontType = '';\r\n                    if (n.hasAttribute('font-weight')) {\r\n                        if (n.getAttribute('font-weight') === 'bold') {\r\n                            fontType = 'bold';\r\n                        }\r\n                    }\r\n                    if (n.hasAttribute('font-style')) {\r\n                        if (n.getAttribute('font-style') === 'italic') {\r\n                            fontType += 'italic';\r\n                        }\r\n                    }\r\n                    this.target.setFontType(fontType);\r\n                    pdfFontSize = 16;\r\n                    if (n.hasAttribute('font-size')) {\r\n                        pdfFontSize = parseInt(n.getAttribute('font-size'), 10);\r\n                    }\r\n                    box = n.getBBox();\r\n                    // FIXME: use more accurate positioning!!\r\n                    x = this.attr(n, 'x');\r\n                    y = this.attr(n, 'y');\r\n                    xOffset = 0;\r\n                    if (n.hasAttribute('text-anchor')) {\r\n                        switch (n.getAttribute('text-anchor')) {\r\n                            case 'end':\r\n                                xOffset = box.width;\r\n                                break;\r\n                            case 'middle':\r\n                                xOffset = box.width / 2;\r\n                                break;\r\n                            case 'start':\r\n                                break;\r\n                            case 'default':\r\n                                n.getAttribute('text-anchor', 'start');\r\n                                break;\r\n                        }\r\n                        x = x - (xOffset * this.k);\r\n                    }\r\n                    this.target.setFontSize(pdfFontSize).text(x, y, n.innerHTML);\r\n                    break;\r\n                default:\r\n                    if (this.remove) {\r\n                        console.log('cant translate to target:', n);\r\n                        element.removeChild(n);\r\n                        i -= 1;\r\n                    }\r\n            }\r\n        }\r\n    }\r\n\r\n    public attr(node: any, name: string) {\r\n        return this.k * parseInt(node.getAttribute(name), 10);\r\n    }\r\n}\r\n","import {Control} from './Control';\r\n\r\nexport class ScrumBoard extends Control {\r\n    public static cards = [0, 0.5, 1, 2, 3, 5, 8, 13, 20, 40, 100, '?', 'Coffee'];\r\n    private $selected: HTMLDivElement;\r\n    private $board: HTMLDivElement;\r\n\r\n    constructor() {\r\n        super();\r\n        this.redraw();\r\n    }\r\n\r\n    public redraw(): void {\r\n        if (this.$board) {\r\n            while (this.$board.children.length > 0 ) {\r\n                this.$board.removeChild(this.$board.children[0]);\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('div');\r\n            this.$selected = document.createElement('div');\r\n            this.$board = document.createElement('div');\r\n            this.$view.appendChild(this.$board);\r\n            this.$view.appendChild(this.$selected);\r\n        }\r\n        this.$view.className = 'ScrumBoard';\r\n        for ( let i = 0; i < ScrumBoard.cards.length; i++) {\r\n            let card = document.createElement('div');\r\n            card.className = 'ScrumCard';\r\n            card.innerHTML = <string>ScrumBoard.cards[i];\r\n            card['pokervalue'] = <string>ScrumBoard.cards[i];\r\n            card.onclick = e => {\r\n                this.onClick(<HTMLDivElement>e.target);\r\n            };\r\n            this.$board.appendChild(card);\r\n        }\r\n    }\r\n\r\n    public getSVG() {\r\n        this.redraw();\r\n        return this.$view;\r\n    }\r\n\r\n    public onClick(target: HTMLDivElement): void {\r\n        console.log(target['pokervalue']);\r\n\r\n        while (this.$selected.children.length > 0 ) {\r\n            this.$selected.removeChild(this.$selected.children[0]);\r\n        }\r\n        let card = document.createElement('div');\r\n        card.className = 'ScrumCard';\r\n        card['pokervalue'] = target['pokervalue'];\r\n        card.onclick = e => {\r\n            this.onShow(<HTMLDivElement>e.target);\r\n        };\r\n        this.$selected.appendChild(card);\r\n        this.$board['style']['display'] = 'none';\r\n    }\r\n\r\n    public onShow(target: HTMLDivElement): void {\r\n        target.innerHTML = target['pokervalue'];\r\n    }\r\n}\r\n","import {Graph} from './main';\r\nimport {SymbolLibary} from './elements/nodes/Symbol';\r\nimport {EventBus} from './EventBus';\r\n\r\nexport class Toolbar {\r\n\r\n    private graph: Graph;\r\n    private mainDiv: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public show(): void {\r\n        if (this.mainDiv) {\r\n            return;\r\n        }\r\n\r\n        this.mainDiv = document.createElement('div');\r\n        this.mainDiv.className = 'toolbar';\r\n\r\n        let h1Logo = document.createElement('h1');\r\n        h1Logo.className = 'logo';\r\n        h1Logo.textContent = 'DiagramJS';\r\n\r\n        let node = {type: 'Hamburger', property: 'HTML', width: 24, height: 24, id: 'GenerateProp'};\r\n        let hamburger = SymbolLibary.draw( node);\r\n        EventBus.registerEvent(hamburger, 'click', node);\r\n        this.mainDiv.appendChild(hamburger);\r\n\r\n        this.mainDiv.appendChild(h1Logo);\r\n        document.body.appendChild(this.mainDiv);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 06.03.2017.\r\n */\r\nimport Data from './Data';\r\n\r\n// export default class Data {\r\n//    public values = {};\r\n//    id: string;\r\n//    $listener: Control[] = [];\r\n//    property: string;\r\nexport namespace UML {\r\n    export class Clazz extends Data {\r\n        public static NAME: string = 'name';\r\n        public static ATTRIBUTES: string = 'attributes';\r\n        public static METHODS: string = 'methods';\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Clazz';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n\r\n        public getAttributes() {\r\n            return this.prop[Clazz.ATTRIBUTES];\r\n        }\r\n\r\n        public addToAttributes(newValue: string) {\r\n            this.addTo(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n\r\n        public removeFromAttributes(newValue: string) {\r\n            this.removeFrom(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n    }\r\n\r\n    export class Attribute extends Data {\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Attribute';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n    }\r\n\r\n    export class Methods extends Data {\r\n\r\n    }\r\n}\r\n\r\nwindow['UML'] = UML;\r\n","import {Control} from './Control';\r\n\r\nexport class VirtualKeyBoard extends Control {\r\n    constructor(data: any) {\r\n        super();\r\n        if (!data) {\r\n            data = this.getDefault();\r\n        }\r\n        let board = document.createElement('div');\r\n        this.$viewData = data;\r\n\r\n        for (let type in data) {\r\n            if (type === 'normal') {\r\n                for (let line in data[type]) {\r\n                    let lineBoard = document.createElement('div');\r\n                    lineBoard.className = 'vkLine';\r\n                    for (let key in data[type][line]) {\r\n                        let btn: HTMLButtonElement = document.createElement('button');\r\n                        let keyTag = data[type][line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                        btn.ontouchend = () => {this.action(btn); };\r\n                        btn.onclick = () => {this.action(btn); };\r\n                        lineBoard.appendChild(btn);\r\n                    }\r\n                    board.appendChild(lineBoard);\r\n                }\r\n            }\r\n        }\r\n        this.$view = board;\r\n    }\r\n\r\n    public action(btn: HTMLButtonElement) {\r\n        if (btn['key'] === '{Shift}') {\r\n            if ( btn.className === 'vkbuttonAction') {\r\n                let keys = this.$viewData['normal'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                    }\r\n                }\r\n            } else if ( btn.className === 'vkbutton') {\r\n                let keys = this.$viewData['shift'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbuttonAction');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        alert(btn);\r\n    }\r\n\r\n    public getDefault(): any {\r\n        let format = {\r\n            normal: [\r\n                ['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '?', '´', '{Bksp}'],\r\n                ['{Tab}', 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+'],\r\n                ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '#', '{enter}'],\r\n                ['{Shift}', '<', 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n// '{left}', '{up}', '{down}','{right}', '{Cancel}']\r\n            ],\r\n            shift: [\r\n                ['°', '!', '\"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '`', '{Bksp}'],\r\n                ['{Tab}', 'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', 'O', 'P', 'Ü', '*'],\r\n                ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', '\\'', '{enter}'],\r\n                ['{Shift}', '>', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n            ]\r\n        };\r\n        return format;\r\n    }\r\n\r\n    public getBoard() {\r\n        return this.$view;\r\n    }\r\n\r\n    private setButtonValue(keyTag: string, btn: HTMLButtonElement, shiftClass: string) {\r\n        btn.className = 'vkbutton';\r\n        btn['key'] = keyTag;\r\n        btn['type'] = 'normal';\r\n        if (keyTag.substring(0, 1) === '{') {\r\n            if (keyTag === '{Bksp}') {\r\n                btn.innerHTML = 'Bksp';\r\n            } else if (keyTag === '{Tab}') {\r\n                btn.innerHTML = '&#8677; Tab';\r\n            } else if (keyTag === '{enter}') {\r\n                btn.innerHTML = 'enter';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Shift}') {\r\n                btn.innerHTML = 'Shift';\r\n                btn.className = shiftClass;\r\n            } else if (keyTag === '{Accept}') {\r\n                btn.innerHTML = 'Accept';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Alt}') {\r\n                btn.innerHTML = 'Alt';\r\n            } else if (keyTag === '{Space}') {\r\n                btn.innerHTML = '&nbsp;';\r\n                btn.className = 'vkbuttonSpace';\r\n            } else if (keyTag === '{left}') {\r\n                btn.innerHTML = '&#8592';\r\n            } else if (keyTag === '{right}') {\r\n                btn.innerHTML = '&#8594;';\r\n            } else if (keyTag === '{up}') {\r\n                btn.innerHTML = '&#8593;';\r\n            } else if (keyTag === '{down}') {\r\n                btn.innerHTML = '&#8595;';\r\n            } else if (keyTag === '{Cancel}') {\r\n                btn.innerHTML = 'Cancel';\r\n                btn.className = 'vkbuttonAction';\r\n            }\r\n        } else {\r\n            btn.innerHTML = keyTag;\r\n        }\r\n    }\r\n}\r\n","import {Adapter} from '../Adapter';\r\n\r\nexport class JavaAdapter extends Adapter {\r\n    constructor() {\r\n        super();\r\n        this.id = 'JavaAdapter';\r\n    }\r\n    update(evt: Object): boolean {\r\n        if (this.isActive()) {\r\n            window['JavaBridge'].executeChange(evt);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public isActive(): boolean {\r\n        return window['JavaBridge'];\r\n    }\r\n}\r\n","export * from './JavaAdapter';\r\n","import { Util } from '../util';\r\nimport { Control } from '../Control';\r\n\r\nexport interface Size {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\ninterface GraphElement {\r\n    getSize(): Point;\r\n\r\n    getPos(): Point;\r\n\r\n    getCenter(): Point;\r\n\r\n    getSVG(): Element;\r\n\r\n    getCanvas(): Element;\r\n\r\n    getEvents(): string[];\r\n\r\n    withPos(x: number, y: number): GraphElement;\r\n\r\n    load(data: any): any;\r\n\r\n    getToolBarIcon(): Element;\r\n\r\n    loadProperties(properties: any): void;\r\n}\r\n\r\nexport abstract class DiagramElement extends Control implements GraphElement {\r\n\r\n    protected $isDraggable: boolean = true;\r\n    protected $labelHeight = 25;\r\n    protected $labelFontSize = 14;\r\n    private $pos: Point = new Point();\r\n    private $size: Point = new Point();\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getPos(): Point {\r\n        return this.$pos;\r\n    }\r\n\r\n    public getSize(): Point {\r\n        return this.$size;\r\n    }\r\n\r\n    public getCenter(): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        return new Point(pos.x + size.x / 2, pos.y + size.y / 2);\r\n    }\r\n\r\n    public getCenterPosition(p: string): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let offset = this['$' + p];\r\n        let center = this.getCenter();\r\n        if (p === Point.DOWN) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y + size.y, Point.DOWN);\r\n        }\r\n        if (p === Point.UP) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y, Point.UP);\r\n        }\r\n        if (p === Point.LEFT) {\r\n            return new Point(pos.x, Math.min(center.y + offset, pos.y + size.y), Point.LEFT);\r\n        }\r\n        if (p === Point.RIGHT) {\r\n            return new Point(pos.x + size.x, Math.min(center.y + offset, pos.y + size.y), Point.RIGHT);\r\n        }\r\n        return new Point();\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getCanvas(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return null;\r\n    }\r\n\r\n    public getAlreadyDisplayingSVG(): Element {\r\n        return document.getElementById(this.id) || this.getSVG();\r\n    }\r\n\r\n    public load(data: any) {\r\n        // Do Nothing\r\n    }\r\n\r\n    public withPos(x: number, y: number): GraphElement {\r\n        if (x && y) {\r\n            this.$pos = new Point(x, y);\r\n        } else {\r\n            if (typeof (x) !== 'undefined' && x !== null) {\r\n                this.$pos.x = x;\r\n            }\r\n            if (typeof (y) !== 'undefined' && y !== null) {\r\n                this.$pos.y = y;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public withSize(width: number, height: number): DiagramElement {\r\n        if (width && height) {\r\n            this.$size = new Point(width, height);\r\n        } else {\r\n            if (typeof (width) !== 'undefined' && width !== null) {\r\n                this.$size.x = width;\r\n            }\r\n            if (typeof (height) !== 'undefined' && height !== null) {\r\n                this.$size.y = height;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        // FIXME if (this.status === 'close') {\r\n        // if (!this.$owner.isClosed()) {\r\n        //        return this;\r\n        //    }\r\n        // }\r\n        return super.getShowed();\r\n    }\r\n\r\n    public loadProperties(properties: any) {\r\n        // DO Nothing\r\n    }\r\n\r\n    protected createShape(attrs: any): Element {\r\n        return Util.createShape(attrs);\r\n    }\r\n}\r\n\r\nexport class Point {\r\n    public static UP: string = 'UP';\r\n    public static LEFT: string = 'LEFT';\r\n    public static RIGHT: string = 'RIGHT';\r\n    public static DOWN: string = 'DOWN';\r\n    x: number = 0;\r\n    y: number = 0;\r\n\r\n    //    pos:string = '';\r\n\r\n    constructor(x?: number, y?: number, pos?: string) {\r\n        this.x = Math.ceil(x || 0);\r\n        this.y = Math.ceil(y || 0);\r\n        if (pos) {\r\n            this['pos'] = pos;\r\n        }\r\n    }\r\n\r\n    public add(pos: Point) {\r\n        this.x += pos.x;\r\n        this.y += pos.y;\r\n        return this;\r\n    }\r\n\r\n    public getPosition(): string {\r\n        if (!this['pos']) {\r\n            return '';\r\n        }\r\n        return this['pos'];\r\n    }\r\n\r\n    public addNum(x: number, y: number) {\r\n        this.x += x;\r\n        this.y += y;\r\n        return this;\r\n    }\r\n\r\n    public sum(pos: Point) {\r\n        let sum = new Point(this.x, this.y);\r\n        sum.add(pos);\r\n        return sum;\r\n    }\r\n\r\n    public center(posA: Point, posB: Point) {\r\n        let count = 0;\r\n        if (posA) {\r\n            this.x += posA.x;\r\n            this.y += posA.y;\r\n            count++;\r\n        }\r\n        if (posB) {\r\n            this.x += posB.x;\r\n            this.y += posB.y;\r\n            count++;\r\n        }\r\n        if (count > 0) {\r\n            this.x = (this.x / count);\r\n            this.y = (this.y / count);\r\n        }\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        return this.x < 1 && this.y < 1;\r\n    }\r\n\r\n    public size(posA: Point, posB: Point) {\r\n        let x1 = 0, x2 = 0, y1 = 0, y2 = 0;\r\n        if (posA) {\r\n            x1 = posA.x;\r\n            y1 = posA.y;\r\n        }\r\n        if (posB) {\r\n            x2 = posB.x;\r\n            y2 = posB.y;\r\n        }\r\n        if (x1 > x2) {\r\n            this.x = x1 - x2;\r\n        } else {\r\n            this.x = x2 - x1;\r\n        }\r\n        if (y1 > y2) {\r\n            this.y = y1 - y2;\r\n        } else {\r\n            this.y = y2 - y1;\r\n        }\r\n    }\r\n}\r\n\r\n// \t\t\t\t######################################################### Line #########################################################\r\nexport class Line extends DiagramElement {\r\n    public static FORMAT = { SOLID: 'SOLID', DOTTED: 'DOTTED', PATH: 'PATH' };\r\n    public source: Point;\r\n    public target: Point;\r\n    public color: string;\r\n    public lineType: string;\r\n    private path: string;\r\n    private angle: Number;\r\n\r\n    constructor(lineType: string) {\r\n        super();\r\n        this.lineType = lineType;\r\n    }\r\n\r\n    public getTyp(): string {\r\n        return 'SVG';\r\n    }\r\n\r\n    public getPos() {\r\n        let pos = new Point();\r\n        pos.center(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public getSize() {\r\n        let pos = new Point();\r\n        pos.size(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public withColor(color: string): Line {\r\n        this.color = color;\r\n        return this;\r\n    }\r\n\r\n    public withSize(x: number, y: number): DiagramElement {\r\n        return this;\r\n    }\r\n\r\n    public withPath(path: Array<Point>, close: boolean, angle?: any): Line {\r\n        let i: number, d: string = 'M' + path[0].x + ' ' + path[0].y;\r\n        this.lineType = Line.FORMAT.PATH; // It is a Path not a Line\r\n        for (i = 1; i < path.length; i += 1) {\r\n            d = d + 'L ' + path[i].x + ' ' + path[i].y;\r\n        }\r\n        if (close) {\r\n            d = d + ' Z';\r\n            this.target = path[0];\r\n        } else {\r\n            this.target = path[path.length - 1];\r\n        }\r\n        this.path = d;\r\n        if (angle instanceof Number) {\r\n            this.angle = angle;\r\n        } else if (angle) {\r\n            // var lineangle, start = path[0], end = path[path.length - 1];\r\n            // lineangle = Math.atan2(end.y - start.y, end.x - start.x);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): SVGGElement {\r\n        if (this.lineType === 'PATH') {\r\n            return <SVGGElement>Util.create({\r\n                tag: 'path',\r\n                'd': this.path,\r\n                'fill': this.color,\r\n                stroke: '#000',\r\n                'stroke-width': '1px'\r\n            });\r\n        }\r\n        let line: SVGGElement = <SVGGElement>Util.create({\r\n            tag: 'line',\r\n            'x1': this.source.x,\r\n            'y1': this.source.y,\r\n            'x2': this.target.x,\r\n            'y2': this.target.y,\r\n            'stroke': Util.getColor(this.color)\r\n        });\r\n        if (this.lineType && this.lineType.toLowerCase() === 'dotted') {\r\n            line.setAttribute('stroke-miterlimit', '4');\r\n            line.setAttribute('stroke-dasharray', '1,1');\r\n        }\r\n        return line;\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport Options from '../Options';\r\nimport {JavaAdapter} from '../adapters';\r\n\r\nexport class ClassEditor extends Graph {\r\n    private adapter: JavaAdapter;\r\n    constructor(json: any, options: Options) {\r\n        if (!options ) {\r\n            options = {};\r\n        }\r\n        options.canvas = options.canvas || 'canvas';\r\n        // options.origin = options.origin || new Point(150, 45);\r\n//            layout: \"DagreLayout\",\r\n        options.autoSave = options.autoSave || true;\r\n        if (!options.features) {\r\n            options.features = {\r\n                drag: true,\r\n                editor: true,\r\n                palette: true,\r\n                select: true,\r\n                zoom: true,\r\n                toolbar: true,\r\n                import: true,\r\n                properties: true,\r\n                addnode: true,\r\n                newedge: true\r\n            };\r\n        }\r\n        super(json, options);\r\n    }\r\n\r\n    public setBoardStyle(value: string) {\r\n        console.log(value);\r\n        this.importFile.setBoardStyle(value);\r\n    }\r\n\r\n    public registerListener(): void {\r\n        this.adapter = new JavaAdapter();\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return this.adapter;\r\n    }\r\n}\r\n","import * as edges from './edges';\r\nimport { Association } from './edges';\r\nimport * as nodes from './nodes';\r\nimport * as layouts from '../layouts';\r\nimport Layout from '../layouts/Layout';\r\nimport { GraphModel } from './Model';\r\nimport { Point, Size } from './BaseElements';\r\nimport { Util } from '../util';\r\nimport { Control } from '../Control';\r\nimport Data from '../Data';\r\nimport { EventBus } from '../EventBus';\r\nimport { AddNode, Drag, NewEdge, Select, Zoom } from '../handlers';\r\nimport Options from '../Options';\r\nimport { ImportFile } from '../handlers/ImportFile';\r\nimport { CSS } from '../CSS';\r\nimport { DiagramElement } from './index';\r\nimport { Toolbar } from '../Toolbar';\r\nimport {JSEPS} from '../JSEPS';\r\nimport {SVGConverter} from '../SVGConverter';\r\nimport Palette from '../Palette';\r\nimport {PanelGroup} from '../PropertiesPanel';\r\n\r\nexport class Graph extends Control {\r\n    // canvas: HTMLElement;\r\n    root: SVGElement;\r\n    $graphModel: GraphModel;\r\n    options: Options;\r\n    canvasSize: Size;\r\n    nodeFactory: Object;\r\n    edgeFactory: Object;\r\n    layoutFactory: Object;\r\n    protected importFile: ImportFile;\r\n    private currentlayout: Layout;\r\n    // private layerToolBar: SVGSVGElement;\r\n    // https://stackoverflow.com/questions/15181452/how-to-save-export-inline-svg-styled-with-css-from-browser-to-image-file\r\n    private containerElements = ['svg', 'g'];\r\n    private relevantStyles = {\r\n        'rect': ['fill', 'stroke', 'stroke-width'],\r\n        'path': ['fill', 'stroke', 'stroke-width', 'opacity'],\r\n        'circle': ['fill', 'stroke', 'stroke-width'],\r\n        'line': ['stroke', 'stroke-width'],\r\n        'text': ['fill', 'font-size', 'text-anchor', 'font-family'],\r\n        'polygon': ['stroke', 'fill']\r\n    };\r\n\r\n    constructor(json: any, options: Options) {\r\n        super();\r\n        json = json || {};\r\n        if (json['data']) {\r\n            options = json['options'];\r\n            json = json['data'];\r\n            this.id = json['id'];\r\n        }\r\n        this.options = options || {features: { drag: true}};\r\n        if (json['init']) {\r\n            return;\r\n        }\r\n        if (!this.options.origin) {\r\n            this.options.origin = new Point(150, 45);\r\n        }\r\n        if (!this.options.style) {\r\n            // Style can be classic or modern\r\n            this.options.style = 'classic';\r\n        }\r\n        if (this.options.autoSave) {\r\n            Util.isAutoSave = options.autoSave;\r\n        }\r\n\r\n        this.initFactories();\r\n        this.initCanvas();\r\n        this.initFeatures(this.options.features);\r\n\r\n        // load previous session, if user wants it\r\n        // otherwise load the json data\r\n        if (!this.lookupInLocalStorage()) {\r\n            this.load(json);\r\n        }\r\n\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    public lookupInLocalStorage(): boolean {\r\n        if (!this.options.autoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (!Util.isLocalStorageSupported()) {\r\n            return false;\r\n        }\r\n        let diagram = Util.getDiagramFromLocalStorage();\r\n        if (diagram && diagram.length > 0) {\r\n            if (confirm('Restore previous session?')) {\r\n                let jsonData: JSON = JSON.parse(diagram);\r\n                this.load(jsonData);\r\n                this.layout();\r\n                return true;\r\n            } else {\r\n                Util.saveToLocalStorage( null);\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public fitSizeOnNodes(): void {\r\n        let maxWidth: number = 0;\r\n        let maxHeight: number = 0;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            let nodePos = node.getPos();\r\n            let nodeSize = node.getSize();\r\n            let nodeWidestPosX = nodePos.x + nodeSize.x;\r\n            let nodeWidestPosY = nodePos.y + nodeSize.y;\r\n\r\n            if (nodeWidestPosX > maxWidth) {\r\n                maxWidth = nodeWidestPosX;\r\n            }\r\n\r\n            if (nodeWidestPosY > maxHeight) {\r\n                maxHeight = nodeWidestPosY;\r\n            }\r\n        }\r\n\r\n        this.root.setAttributeNS(null, 'width', '' + (maxWidth + 100));\r\n        this.root.setAttributeNS(null, 'height', '' + (maxHeight + 50));\r\n    }\r\n\r\n    public saveAs(typ: string) {\r\n        typ = typ.toLowerCase();\r\n\r\n        // shrink size of graph to minimum. only to show up nodes\r\n        const currentSize = this.getRootSize();\r\n        this.fitSizeOnNodes();\r\n\r\n        if (typ === 'svg') {\r\n            this.exportSvg();\r\n        } else if (typ === 'png') {\r\n            this.exportPng();\r\n        } else if (typ === 'html') {\r\n            this.exportHtml();\r\n\r\n        } else if (typ === 'pdf') {\r\n            this.exportPdf();\r\n            // } else if (typ === 'eps') {\r\n            // this.ExportEPS();\r\n        }\r\n        else if (typ === 'json') {\r\n            this.exportJson();\r\n        }\r\n\r\n        // set the size back to default\r\n        this.root.setAttributeNS(null, 'width', '' + currentSize.width);\r\n        this.root.setAttributeNS(null, 'height', '' + currentSize.height);\r\n    }\r\n\r\n    /**\r\n     * generates a blob file and makes it available for download.\r\n     * @param type type of file\r\n     * @param data raw data\r\n     * @param name name of download file\r\n     */\r\n    public save(type: string, data: any, name: string, context: string) {\r\n        if (window['java']) {\r\n            window['java'].export(type, data, name, context);\r\n            return;\r\n        }\r\n        let a = document.createElement('a');\r\n        a.href = window.URL.createObjectURL(new Blob([data], { type: context }));\r\n        a.download = name;\r\n        document.body.appendChild(a);\r\n        a.click();\r\n        document.body.removeChild(a);\r\n    }\r\n\r\n    /** Exports the diagram as svg. */\r\n    public exportSvg(): void {\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        this.save('svg', this.serializeXmlNode(wellFormatedSvgDom), 'class_diagram.svg', 'image/svg+xml');\r\n    }\r\n\r\n    /** Exports the diagram as html. */\r\n    public exportHtml(): void {\r\n        let htmlFacade = '<html><head><title>DiagramJS - Classdiagram</title></head><body>$content</body></html>';\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        let svgAsXml = this.serializeXmlNode(wellFormatedSvgDom);\r\n\r\n        let htmlResult = htmlFacade.replace('$content', svgAsXml);\r\n\r\n        this.save('html', htmlResult, 'class_diagram.htm', 'text/plain');\r\n    }\r\n\r\n    /** Exports the diagram as json. */\r\n    public exportJson(): void {\r\n        let type = 'text/plain';\r\n        let jsonObj = Util.toJson(this.$graphModel);\r\n        let data = JSON.stringify(jsonObj, null, '\\t');\r\n\r\n        this.save('json', data, 'class_diagram.json', type);\r\n    }\r\n\r\n    /** Exports the diagram as pdf. */\r\n    public exportPdf(): void {\r\n        if (!window['jsPDF']) {\r\n            console.log('jspdf n.a.');\r\n            return;\r\n        }\r\n        let type = 'image/svg+xml';\r\n        let converter, pdf = new window['jsPDF']('l', 'px', [this.$graphModel.getSize().x, this.$graphModel.getSize().y]);\r\n        converter = new SVGConverter(this.$view, pdf, {removeInvalid: false});\r\n        pdf.save('Download.pdf');\r\n/*        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let canvas, context, a, image = new Image();\r\n        let size = this.getRootSize();\r\n\r\n        // create the loaded img source into a canvas. to generate a picture. then place this picture in the pdf\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            let pdf = new window['jsPDF']();\r\n\r\n            pdf.addImage(canvas.toDataURL('image/jpeg'), 'jpeg', 15, 40, 180, 160);\r\n            pdf.save('class_diagram.pdf');\r\n\r\n        };\r\n\r\n        image.src = url;\r\n        */\r\n    }\r\n\r\n    public import(data: string): void {\r\n        let rootElement = this.$graphModel.$view;\r\n        while (rootElement.hasChildNodes()) {\r\n            rootElement.removeChild(rootElement.firstChild);\r\n        }\r\n\r\n        while (this.$view.hasChildNodes()) {\r\n            this.$view.removeChild(this.$view.firstChild);\r\n        }\r\n\r\n        this.clearModel();\r\n        let jsonData = JSON.parse(data);\r\n        this.load(jsonData);\r\n        this.layout();\r\n    }\r\n\r\n    public exportEPS(): void {\r\n          let converter, doc = new JSEPS({inverting: true});\r\n            converter = new SVGConverter(this.$view, doc, {removeInvalid: false});\r\n            this.save('eps', doc.getData(), 'diagram.eps', doc.getType());\r\n    }\r\n\r\n    /** Exports the diagram as png. */\r\n    public exportPng(): void {\r\n        let canvas, context, a, image = new Image();\r\n        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let typ = 'image/svg+xml';\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let size = this.getRootSize();\r\n\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            a = document.createElement('a');\r\n            a.download = 'class_diagram.png';\r\n            a.href = canvas.toDataURL('image/png');\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            document.body.removeChild(a);\r\n        };\r\n\r\n        image.src = url;\r\n\r\n    }\r\n\r\n    public getSvgWithStyleAttributes(): Node {\r\n        let oDOM = this.$graphModel.$view.cloneNode(true);\r\n        this.readElement(oDOM, this.$graphModel.$view);\r\n\r\n        return oDOM;\r\n    }\r\n\r\n    public serializeXmlNode(xmlNode: any) {\r\n        if (window['XMLSerializer'] !== undefined) {\r\n            return (new window['XMLSerializer']()).serializeToString(xmlNode);\r\n        }\r\n        if (xmlNode.xml !== undefined) {\r\n            return xmlNode.xml;\r\n        }\r\n        return xmlNode.outerHTML;\r\n    }\r\n\r\n    public getRootSize(): Size {\r\n        let width: number;\r\n        let height: number;\r\n        width = +this.root.getAttribute('width');\r\n        height = +this.root.getAttribute('height');\r\n\r\n        return { width: width, height: height };\r\n    }\r\n\r\n        // Graph.prototype.ExportEPS = function () {\r\n        //     var converter, doc = new svgConverter.jsEPS({inverting: true});\r\n        //     converter = new svgConverter(this.board, doc, {removeInvalid: false});\r\n        //     doc.save();\r\n        // };\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        this.$graphModel = new GraphModel();\r\n        this.$graphModel.init(this);\r\n        this.$graphModel.load(json);\r\n    }\r\n\r\n    public clearModel(): void {\r\n        this.$graphModel.removeAllElements();\r\n        this.clearSvgRoot();\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.layout();\r\n        return this;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        return;\r\n    }\r\n\r\n    public getNextFreePosition(): Point {\r\n\r\n        if (!this.$graphModel) {\r\n            return new Point(50, 50);\r\n        }\r\n\r\n        let point = new Point(0, 50);\r\n\r\n        let maxX = 0;\r\n        let minX = 9000;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            maxX = Math.max(maxX, node.getPos().x);\r\n            minX = Math.min(minX, node.getPos().x);\r\n        }\r\n\r\n        if (minX > 170) {\r\n            point.x = 10;\r\n        }\r\n        else {\r\n            point.x = maxX + 200;\r\n        }\r\n\r\n        return point;\r\n    }\r\n\r\n    public addElement(type: string, dontDraw?: boolean): boolean {\r\n        let success = this.$graphModel.addElement(type);\r\n        if (success === true) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return success;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues?: Object, layout?: boolean, dontDraw?: boolean): DiagramElement {\r\n        let element = this.$graphModel.addElementWithValues(type, optionalValues);\r\n        if (element && layout) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public layout(dontDraw?: boolean): Graph {\r\n        this.getLayout().layout(this, this.$graphModel);\r\n\r\n        if (dontDraw) {\r\n            return this;\r\n        }\r\n\r\n        this.draw();\r\n        return this;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTDRAGOVER, EventBus.ELEMENTDRAGLEAVE, EventBus.ELEMENTDROP];\r\n    }\r\n\r\n    public draw() {\r\n        this.clearSvgRoot();\r\n        let model = this.$graphModel;\r\n        let root = this.root;\r\n        let max: Point = new Point();\r\n        if (this.options) {\r\n            max.x = this.options.minWidth || 0;\r\n            max.y = this.options.minHeight || 0;\r\n        }\r\n\r\n        for (let node of model.nodes) {\r\n            let svg = node.getSVG();\r\n            EventBus.register(node, svg);\r\n            root.appendChild(svg);\r\n\r\n            let temp: number;\r\n            temp = node.getPos().x + node.getSize().x;\r\n            if (temp > max.x) {\r\n                max.x = temp;\r\n            }\r\n            temp = node.getPos().y + node.getSize().y;\r\n            if (temp > max.y) {\r\n                max.y = temp;\r\n            }\r\n\r\n        }\r\n        Util.setAttributeSize(this.root, max.x + 60, max.y + 40);\r\n\r\n        for (let edge of model.edges) {\r\n            let svg = edge.getSVG();\r\n            EventBus.register(edge, svg);\r\n            root.appendChild(svg);\r\n        }\r\n    }\r\n\r\n    public getNode(id: string) {\r\n        return this.$graphModel.getNodeById(id);\r\n    }\r\n\r\n    public drawElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let svg = element.getSVG();\r\n        this.root.appendChild(svg);\r\n\r\n        // actualize root width size, if neccessary\r\n        // get current width of root\r\n        let rootSize = this.getRootSize();\r\n        let newWidth = element.getPos().x + element.getSize().x + 40;\r\n        let newHeight = element.getPos().y + element.getSize().y;\r\n\r\n        if (rootSize.width < newWidth) {\r\n            this.root.setAttributeNS(null, 'width', '' + newWidth);\r\n        }\r\n\r\n        if (rootSize.height < newHeight) {\r\n            this.root.setAttributeNS(null, 'height', '' + newHeight);\r\n        }\r\n\r\n        // draw edge\r\n        if (element instanceof Association) {\r\n            let edge = <Association>element;\r\n            edge.redraw(edge.$sNode);\r\n            let srcSvg = element.$sNode.getAlreadyDisplayingSVG();\r\n            let targetSvg = element.$tNode.getAlreadyDisplayingSVG();\r\n\r\n            this.root.appendChild(srcSvg);\r\n            this.root.appendChild(targetSvg);\r\n        }\r\n\r\n        EventBus.register(element, svg);\r\n    }\r\n\r\n    public removeElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let alreadyDisplayingSvg = element.getAlreadyDisplayingSVG();\r\n        if (Util.isParentOfChild(this.root, alreadyDisplayingSvg)) {\r\n            this.root.removeChild(alreadyDisplayingSvg);\r\n        }\r\n    }\r\n\r\n    public generate(packageName: string, path?: string) {\r\n        this.$graphModel.package = packageName;\r\n        this.$graphModel.genPath = path;\r\n\r\n        let data, result = Util.toJson(this.$graphModel);\r\n        data = JSON.stringify(result, null, '\\t');\r\n        if (window['java'] && typeof window['java'].generate === 'function') {\r\n            window['java'].generate(data);\r\n        }\r\n    }\r\n// REFACTORING dd\r\n    private readElement(parent: any, origData: any): void {\r\n        let children = parent.childNodes;\r\n        let origChildDat = origData.childNodes;\r\n\r\n        for (let cd = 0; cd < children.length; cd++) {\r\n            let child = children[cd];\r\n\r\n            let tagName = child.tagName;\r\n            if (this.containerElements.indexOf(tagName) !== -1) {\r\n                this.readElement(child, origChildDat[cd]);\r\n            } else if (tagName in this.relevantStyles) {\r\n                let styleDef = window.getComputedStyle(origChildDat[cd]);\r\n\r\n                let styleString = '';\r\n                for (let st = 0; st < this.relevantStyles[tagName].length; st++) {\r\n                    styleString += this.relevantStyles[tagName][st] + ':' + styleDef.getPropertyValue(this.relevantStyles[tagName][st]) + '; ';\r\n                }\r\n\r\n                child.setAttribute('style', styleString);\r\n            }\r\n        }\r\n    }\r\n\r\n    private createPattern(): Element {\r\n        const defs = Util.createShape({ tag: 'defs' });\r\n        const pattern = Util.createShape({\r\n            tag: 'pattern',\r\n            id: 'raster',\r\n            patternUnits: 'userSpaceOnUse',\r\n            width: 40,\r\n            height: 40\r\n        });\r\n        const path = 'M0 4 L0 0 L4 0 M36 0 L40 0 L40 4 M40 36 L40 40 L36 40 M4 40 L0 40 L0 36';\r\n        const cross = Util.createShape({\r\n            tag: 'path',\r\n            d: path,\r\n            stroke: '#DDD',\r\n            'stroke-width': 1,\r\n            fill: 'none'\r\n        });\r\n\r\n        const rect = Util.createShape({\r\n            tag: 'rect',\r\n            x: 0,\r\n            y: 0,\r\n            width: 40,\r\n            height: 40,\r\n            fill: 'none'\r\n        });\r\n        pattern.appendChild(rect);\r\n        pattern.appendChild(cross);\r\n        defs.appendChild(pattern);\r\n        return defs;\r\n    }\r\n\r\n    private clearSvgRoot() {\r\n        const root = this.root;\r\n        this.$graphModel.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n        while (root.firstChild) {\r\n            root.removeChild(root.firstChild);\r\n        }\r\n\r\n        root.appendChild(this.createPattern());\r\n        let fillValue = 'none';\r\n        if (this.options.raster) {\r\n            fillValue = 'url(#raster)';\r\n        }\r\n        let background = Util.createShape({\r\n            tag: 'rect',\r\n            id: 'background',\r\n            width: 5000,\r\n            height: 5000,\r\n            x: 0,\r\n            y: 0,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: fillValue\r\n        });\r\n        root.appendChild(background);\r\n\r\n        // delete inline Edit, if exists\r\n        let inlineEdit = document.getElementById('inlineEdit');\r\n        if (inlineEdit && document.body.contains(inlineEdit)) {\r\n            document.body.removeChild(inlineEdit);\r\n        }\r\n    }\r\n\r\n    private getLayout(): Layout {\r\n        if (this.currentlayout) {\r\n            return this.currentlayout;\r\n        }\r\n\r\n        let layout = this.options.layout || '';\r\n        if (this.layoutFactory[layout]) {\r\n            this.currentlayout = new this.layoutFactory[layout]();\r\n        } else {\r\n            this.currentlayout = new layouts.DagreLayout();\r\n        }\r\n\r\n        return this.currentlayout;\r\n    }\r\n\r\n    private initFactories() {\r\n\r\n        let noder = nodes;\r\n        this.nodeFactory = {};\r\n        for (let id in noder) {\r\n            if (noder.hasOwnProperty(id) === true) {\r\n                this.nodeFactory[id] = noder[id];\r\n            }\r\n        }\r\n\r\n        let edger = edges;\r\n        this.edgeFactory = {};\r\n        for (let id in edger) {\r\n            if (edger.hasOwnProperty(id) === true) {\r\n                this.edgeFactory[id] = edger[id];\r\n            }\r\n        }\r\n\r\n        let layouter = layouts;\r\n        this.layoutFactory = {};\r\n        for (let id in layouter) {\r\n            if (layouter.hasOwnProperty(id) === true) {\r\n                this.layoutFactory[id] = layouter[id];\r\n            }\r\n        }\r\n    }\r\n\r\n    private initCanvas() {\r\n        if (this.options.canvas) {\r\n            this.$view = document.getElementById(this.options.canvas);\r\n        }\r\n        if (!this.$view) {\r\n            this.$view = document.createElement('div');\r\n            this.$view.setAttribute('class', 'diagram');\r\n            document.body.appendChild(this.$view);\r\n        }\r\n    }\r\n\r\n    private initFeatures(features: any) {\r\n\r\n        if (features) {\r\n            if (features.newedge) {\r\n                EventBus.subscribe(new NewEdge(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            this.importFile = new ImportFile(this);\r\n            if (features.import) {\r\n                EventBus.subscribe(this.importFile, 'dragover', 'dragleave', 'drop');\r\n            }\r\n            if (features.zoom) {\r\n                let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n                EventBus.subscribe(new Zoom(this), mousewheel);\r\n            }\r\n            if (features.drag) {\r\n                EventBus.subscribe(new Drag(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            if (features.select) {\r\n                EventBus.subscribe(new Select(this), 'click', 'drag');\r\n            }\r\n            if (features.palette) {\r\n                new Palette(this).show();\r\n            }\r\n            if (features.toolbar) {\r\n                new Toolbar(this).show();\r\n            }\r\n            if (features.properties) {\r\n                let propertyPanel = new PanelGroup(this);\r\n                // let dispatcher = new PropertiesDispatcher(this);\r\n                EventBus.subscribe(propertyPanel, 'dblclick', 'click', EventBus.RELOADPROPERTIES);\r\n                propertyPanel.show();\r\n            }\r\n            if (features.addnode) {\r\n                EventBus.subscribe(new AddNode(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n        }\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport {DiagramElement, Point} from './BaseElements';\r\nimport {Association} from './edges';\r\nimport {Node} from './nodes';\r\nimport {Control} from '../Control';\r\nimport {Util} from '../util';\r\nimport {EventBus} from '../EventBus';\r\n\r\nexport class GraphModel extends DiagramElement {\r\n    nodes: Node[] = [];\r\n    edges: Association[] = [];\r\n    package: string;\r\n    genPath: string;\r\n    $isLoading: boolean;\r\n\r\n    public load(data?: any) {\r\n\r\n        this.$isLoading = true;\r\n        data = data || {};\r\n        this.property = data.type || data.property || 'classdiagram';\r\n        this.id = 'RootElement';\r\n        if (data.nodes) {\r\n            for (let node of data.nodes) {\r\n                this.addNode(node);\r\n            }\r\n        }\r\n        if (data.edges) {\r\n            for (let edge of data.edges) {\r\n                this.addEdge(edge);\r\n            }\r\n        }\r\n\r\n        this.$isLoading = false;\r\n    }\r\n\r\n    public getNodeByPosition(x: number, y: number): Node {\r\n        for (let node of this.nodes) {\r\n            let posOfNode: Point = (<Node>node).getPos();\r\n            let sizeOfNode: Point = (<Node>node).getSize();\r\n\r\n            if ((posOfNode.x <= x && (posOfNode.x + sizeOfNode.x) >= x)\r\n                && (posOfNode.y <= y && (posOfNode.y + sizeOfNode.y) >= y)) {\r\n                return node;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.initCanvas();\r\n        return this;\r\n    }\r\n\r\n    public addElement(type: string): boolean {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n        if (element) {\r\n            Util.saveToLocalStorage(this);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues: Object): DiagramElement {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n\r\n        // position\r\n        if (optionalValues) {\r\n            if (optionalValues.hasOwnProperty('x') && optionalValues.hasOwnProperty('y')) {\r\n                let x = optionalValues['x'];\r\n                let y = optionalValues['y'];\r\n                element.withPos(x, y);\r\n            }\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return element;\r\n    }\r\n\r\n    public removeAllElements(): void {\r\n\r\n        let nodesLength = this.nodes.length;\r\n        for (let i = 0; i < nodesLength; i++) {\r\n            this.removeElement(this.nodes[0].id);\r\n        }\r\n\r\n        this.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n    }\r\n\r\n    public removeElement(id: string): boolean {\r\n\r\n        let element = this.getDiagramElementById(id);\r\n        if (!element) {\r\n            return false;\r\n        }\r\n\r\n        (<Graph>this.$owner).removeElement(element);\r\n\r\n        if (element instanceof Node) {\r\n\r\n            let idxOfNode = this.nodes.indexOf(element);\r\n            if (idxOfNode > -1) {\r\n                this.nodes.splice(idxOfNode, 1);\r\n            }\r\n\r\n            while (element.$edges.length > 0) {\r\n                this.removeElement(element.$edges[0].id);\r\n            }\r\n\r\n            element.$edges = [];\r\n        }\r\n        else if (element instanceof Association) {\r\n\r\n            let idxOfEdge = this.edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                this.edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from source\r\n            idxOfEdge = element.$sNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$sNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from target\r\n            idxOfEdge = element.$tNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$tNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return true;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        const size = 10;\r\n        const path = `M${-size} 0 L${+size} 0 M0 ${-size} L0 ${+size}`;\r\n\r\n        const attr = {\r\n            tag: 'path',\r\n            id: 'origin',\r\n            d: path,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: 'none'\r\n        };\r\n        let shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: 0 - size,\r\n            y: 0 - size / 1.5,\r\n            'text-anchor': 'end',\r\n            'font-family': 'Verdana',\r\n            'font-size': '9',\r\n            fill: '#999'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = '(0, 0)';\r\n\r\n        let group = this.createShape({tag: 'g'});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEUP, EventBus.ELEMENTMOUSELEAVE, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTMOUSEWHEEL, EventBus.ELEMENTCLICK, EventBus.ELEMENTDRAG];\r\n    }\r\n\r\n    public getNewId(prefix?: string): string {\r\n        let id = (prefix ? prefix.toLowerCase() + '-' : '') + Math.floor(Math.random() * 100000);\r\n        return id;\r\n    }\r\n\r\n    public getEdgeById(id: string): Association {\r\n        for (let edge of this.edges) {\r\n            if (edge.id === id) {\r\n                return edge;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    public getDiagramElementById(id: string): DiagramElement {\r\n\r\n        return this.getNodeById(id) || this.getEdgeById(id);\r\n    }\r\n\r\n    /**\r\n     * Add an edge with data in json file. Optional you can say, that the edge should have\r\n     * the points of source node and target node.\r\n     * @param edge information about edge in json\r\n     * @param withPosOfNodes optional. set points to line of source and target node\r\n     */\r\n    public addEdge(edge: any, withPosOfNodes?: boolean): Association {\r\n\r\n        // lookup in factoryedges and check if the edge type realy exists\r\n        if (edge && edge.type) {\r\n            const graph = (<Graph>this.$owner);\r\n            let typeExists = false;\r\n            for (let edgeType in graph.edgeFactory) {\r\n                if (edgeType === edge.type) {\r\n                    typeExists = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!typeExists) {\r\n                edge.type = 'Association';\r\n            }\r\n        }\r\n\r\n        let type = edge.type || 'Association';\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n\r\n        let newEdge = <Association>this.createElement(type, id, edge);\r\n        newEdge.type = type;\r\n\r\n        let source: Node;\r\n        let sourceAsString: string = edge.source.id || edge.source;\r\n        if (sourceAsString) {\r\n            source = this.getNodeById(sourceAsString);\r\n            if (!source) {\r\n                let nodeID = edge.source;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                source = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                source.init(this);\r\n            }\r\n        }\r\n\r\n        let target: Node;\r\n        let targetAsString: string = edge.target.id || edge.target;\r\n        if (targetAsString) {\r\n            target = this.getNodeById(targetAsString);\r\n            if (!target) {\r\n                let nodeID = edge.target;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                target = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                target.init(this);\r\n            }\r\n        }\r\n\r\n        newEdge.withItem(source, target);\r\n\r\n        if (withPosOfNodes) {\r\n            let srcX = source.getPos().x + (source.getSize().x / 2);\r\n            let srcY = source.getPos().y + (source.getSize().y / 2);\r\n\r\n            let targetX = target.getPos().x + (target.getSize().x / 2);\r\n            let targetY = target.getPos().y + (target.getSize().y / 2);\r\n\r\n            newEdge.addPoint(srcX, srcY);\r\n            newEdge.addPoint(targetX, targetY);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public createElement(type: string, id: string, data: Object): DiagramElement {\r\n        const graph = <Graph>this.$owner;\r\n        let element: DiagramElement;\r\n        if (graph.nodeFactory[type]) {\r\n            element = new graph.nodeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.nodes.push(<Node>element);\r\n        }\r\n        if (graph.edgeFactory[type]) {\r\n            element = new graph.edgeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.edges.push(<Association>element);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public getNodeById(id: string): Node {\r\n        for (let node of this.nodes) {\r\n            if (node.id === id) {\r\n                return node;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    private initCanvas() {\r\n        const graph = <Graph>this.$owner;\r\n        graph.canvasSize = {width: graph.$view.clientWidth, height: graph.$view.clientHeight};\r\n        graph.root = Util.createShape({\r\n            tag: 'svg',\r\n            id: 'root',\r\n            width: graph.canvasSize.width,\r\n            height: graph.canvasSize.height\r\n            // FIXME,viewBox: `${this.$graph.options.origin.x * -1} ${this.$graph.options.origin.y * -1} ${this.$graph.canvasSize.width} ${this.$graph.canvasSize.height}`\r\n        });\r\n        this.$view = graph.root;\r\n        graph.$view.appendChild(graph.root);\r\n\r\n        let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    private addNode(node: Node): Node {\r\n        let type = node['type'] || node.property || 'Node';\r\n        type = Util.toPascalCase(type);\r\n        let id = node['id'] || node['name'] || this.getNewId(type);\r\n\r\n        return <Node>this.createElement(type, id, node);\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction } from './index';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\n\r\nexport abstract class Aggregate extends Association {\r\n\r\n    protected $diamond: Element;\r\n\r\n    public getSVG(): Element {\r\n\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled diamond\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n        };\r\n\r\n        this.$diamond = this.createShape(attr);\r\n\r\n        group.appendChild(this.$diamond);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint: Point = this.$points[0];\r\n        let direction: Direction = Direction.Down;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if (this.$sNode.id === startNode.id || this.$points.length == 2) {\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$diamond.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint: Point, direction: Direction): string {\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                path = `M${startX} ${startY} L${startX + 6} ${startY + 10} L${startX} ${startY + 20} L${startX - 6} ${startY + 10} Z`;\r\n                startPoint.y = startPoint.y+20;\r\n                break;\r\n            case Direction.Right:\r\n                path = `M${startX} ${startY} L${startX - 10} ${startY + 6} L${startX - 20} ${startY} L${startX - 10} ${startY - 6} Z`;\r\n                startPoint.x = startPoint.x-20;\r\n                break;\r\n            case Direction.Left:\r\n                path = `M${startX} ${startY} L${startX + 10} ${startY - 6} L${startX + 20} ${startY} L${startX + 10} ${startY + 6} Z`;\r\n                startPoint.x = startPoint.x+20;\r\n                break;\r\n            case Direction.Down:\r\n                path = `M${startX} ${startY} L${startX - 6} ${startY - 10} L${startX} ${startY - 20} L${startX + 6} ${startY - 10} Z`;\r\n                startPoint.y = startPoint.y-20;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Aggregation extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'white');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { DiagramElement, Line, Point } from '../BaseElements';\r\nimport { Node } from '../nodes';\r\nimport { InfoText } from '../nodes/InfoText';\r\nimport { Util } from '../../util';\r\nimport { EventBus } from '../../EventBus';\r\nimport * as edges from '../edges';\r\nimport { Graph } from '../Graph';\r\n\r\nexport const enum Direction {\r\n    Up, Down, Left, Right\r\n}\r\n\r\nexport class Association extends DiagramElement {\r\n    public source: string;\r\n    public target: string;\r\n    public type: string;\r\n    public $sNode: Node;\r\n    public $tNode: Node;\r\n    public lineStyle: string;\r\n    public $points: Point[] = [];\r\n    public $pathSvg: Element;\r\n    public $pathWideSvg: Element;\r\n    public info: InfoText;\r\n    public sourceInfo: InfoText;\r\n    public targetInfo: InfoText;\r\n    $m: number;\r\n    $n: number;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super();\r\n\r\n        this.withData(data);\r\n    }\r\n\r\n    public withData(data: JSON | string | Object | any): Association {\r\n\r\n        if (!data) {\r\n            return this;\r\n        }\r\n        let srcInfo;\r\n        let trgInfo;\r\n\r\n        if (data.source && typeof data.source !== 'string') {\r\n            srcInfo = data.source;\r\n        }\r\n        else if (data.sourceInfo && typeof data.sourceInfo !== 'string') {\r\n            srcInfo = data.sourceInfo;\r\n        }\r\n\r\n        if (srcInfo) {\r\n            this.sourceInfo = new InfoText(srcInfo);\r\n            this.sourceInfo.$owner = this;\r\n        }\r\n\r\n        if (data.target && typeof data.target !== 'string') {\r\n            trgInfo = data.target;\r\n        }\r\n        else if (data.targetInfo && typeof data.targetInfo !== 'string') {\r\n            trgInfo = data.targetInfo;\r\n        }\r\n\r\n        if (trgInfo) {\r\n            this.targetInfo = new InfoText(trgInfo);\r\n            this.targetInfo.$owner = this;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    public updateSrcCardinality(cardinality: string): void {\r\n        this.sourceInfo = this.updateCardinality(this.$sNode, this.sourceInfo, cardinality);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetCardinality(cardinality: string): void {\r\n        this.targetInfo = this.updateCardinality(this.$tNode, this.targetInfo, cardinality);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateSrcProperty(property: string): void {\r\n        this.sourceInfo = this.updateProperty(this.$sNode, this.sourceInfo, property);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetProperty(property: string): void {\r\n        this.targetInfo = this.updateProperty(this.$tNode, this.targetInfo, property);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public withItem(source: Node, target: Node): Association {\r\n        source.$edges.push(this);\r\n        target.$edges.push(this);\r\n        this.$sNode = source;\r\n        this.$tNode = target;\r\n        this.source = source.id;\r\n        this.target = target.id;\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let group = Util.createShape({ tag: 'g', id: this.id, class: 'SVGEdge' });\r\n\r\n        let path: string = this.getPath();\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'none'\r\n        };\r\n        let pathLine = this.createShape(attr);\r\n\r\n        //attr['style'] = 'stroke-width:20;opacity:0;width:20;height:20';\r\n        let extendedPathLine = Util.createShape(attr);\r\n\r\n        group.appendChild(extendedPathLine);\r\n        group.appendChild(pathLine);\r\n\r\n        if (this.sourceInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.sourceInfo.getSVG());\r\n        }\r\n        if (this.targetInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.targetInfo.getSVG());\r\n        }\r\n\r\n        this.$pathWideSvg = extendedPathLine;\r\n        this.$pathSvg = pathLine;\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.EDITOR, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    public convertEdge(type: string, newId: string, redraw?: boolean): Association {\r\n        if (!edges[type]) {\r\n            return this;\r\n        }\r\n\r\n        let newEdge: Association = new edges[type]();\r\n        newEdge.withItem(this.$sNode, this.$tNode);\r\n        newEdge.id = newId;\r\n        newEdge.type = type;\r\n        newEdge.lineStyle = this.lineStyle;\r\n        newEdge.$owner = this.$owner;\r\n\r\n        if (this.sourceInfo) {\r\n            newEdge.sourceInfo = new InfoText({ property: this.sourceInfo.property, cardinality: this.sourceInfo.cardinality });\r\n            newEdge.sourceInfo.$owner = newEdge;\r\n        }\r\n\r\n        if (this.targetInfo) {\r\n            newEdge.targetInfo = new InfoText({ property: this.targetInfo.property, cardinality: this.targetInfo.cardinality });\r\n            newEdge.targetInfo.$owner = newEdge;\r\n        }\r\n\r\n        this.$points.forEach(point => {\r\n            newEdge.addPoint(point.x, point.y);\r\n        });\r\n\r\n        let graph = <Graph>this.getRoot();\r\n        if (!graph) {\r\n            return this;\r\n        }\r\n\r\n        // update model. insert the edge exact on the same index, like the old edge\r\n        let idx = graph.$graphModel.edges.indexOf(this);\r\n        graph.$graphModel.removeElement(this.id);\r\n        if (idx > -1) {\r\n            graph.$graphModel.edges.splice(idx, 0, newEdge);\r\n        }\r\n        else {\r\n            graph.$graphModel.edges.push(newEdge);\r\n        }\r\n\r\n        if (!redraw) {\r\n            return newEdge;\r\n        }\r\n\r\n        let svgRoot: Element;\r\n        if (graph) {\r\n            svgRoot = graph.root;\r\n        }\r\n        else {\r\n            svgRoot = document.getElementById('root');\r\n        }\r\n        let newEdgeSvg = newEdge.getSVG();\r\n\r\n        // update graph\r\n        graph.removeElement(this);\r\n        svgRoot.appendChild(newEdgeSvg);\r\n\r\n        // redraw the edge from both sides to get the correct display\r\n        // if the type is edge, so the path can be redraw.\r\n        // if not, so the inherited class redraw the path with his own logic\r\n\r\n        let dontDrawPath: boolean = (type !== 'Edge');\r\n        newEdge.redraw(newEdge.$sNode, dontDrawPath);\r\n        newEdge.redraw(newEdge.$tNode, dontDrawPath);\r\n\r\n        EventBus.register(newEdge, newEdgeSvg);\r\n\r\n        this.sourceInfo = undefined;\r\n        this.targetInfo = undefined;\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n        // redraw the first point\r\n        // check which point is the near to startnode\r\n        let endPoint: Point;\r\n        let recalcPoint: Point;\r\n        let endPointIdx: number;\r\n\r\n        if (this.$sNode.id === startNode.id) {\r\n            recalcPoint = this.$points[0];\r\n            endPointIdx = 1;\r\n        } else if (this.$tNode.id === startNode.id) {\r\n            recalcPoint = this.$points[this.$points.length - 1];\r\n            endPointIdx = this.$points.length - 2;\r\n        }\r\n\r\n        endPoint = this.$points[endPointIdx];\r\n\r\n        // calculate and set new position of point to redraw\r\n        this.calcIntersection(startNode, recalcPoint, endPoint);\r\n\r\n        // remove the 2nd point next to startnode, if the node was dragged upper the point\r\n        if (this.$points.length > 2 && this.$tNode.id === startNode.id && endPoint.y > (startNode.getPos().y + (startNode.getSize().y / 2))) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$tNode.id === startNode.id && this.$points.length === 2) {\r\n            this.calcIntersection(this.$sNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (this.$points.length > 2 && this.$sNode.id === startNode.id && (startNode.getPos().y + (startNode.getSize().y / 2) > endPoint.y)) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$sNode.id === startNode.id && this.$points.length === 2) {\r\n\r\n            this.calcIntersection(this.$tNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (!dontDrawPoints) {\r\n            this.redrawPointsAndInfo();\r\n        }\r\n    }\r\n\r\n    public getPath(): string {\r\n\r\n        if (this.$points.length === 0) {\r\n            return '';\r\n        }\r\n\r\n        let path: string = 'M';\r\n        for (let i = 0; i < this.$points.length; i++) {\r\n            let point: Point = this.$points[i];\r\n            if (i > 0) {\r\n                path += 'L';\r\n            }\r\n            path += Math.floor(point.x) + ' ' + Math.floor(point.y) + ' ';\r\n        }\r\n\r\n        return path;\r\n    }\r\n    public calcInfoPosNew(infoTxt: InfoText, node: Node): Point {\r\n\r\n        if (!infoTxt || !node) {\r\n            return null;\r\n        }\r\n\r\n        // 1. step: get direction\r\n        let startPoint: Point;\r\n        let nextToStartPoint: Point;\r\n        if (this.$sNode.id === node.id) {\r\n            startPoint = this.$points[0];\r\n            nextToStartPoint = this.$points[1];\r\n        }\r\n        else if (this.$tNode.id === node.id) {\r\n            startPoint = this.$points[this.$points.length - 1];\r\n            nextToStartPoint = this.$points[this.$points.length - 2];\r\n        }\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(node, startPoint);\r\n\r\n        let x: number;\r\n        let y: number;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                break;\r\n            case Direction.Right:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x - (infoTxt.getSize().x) - 5;\r\n                break;\r\n            case Direction.Left:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x + 5;\r\n                break;\r\n            case Direction.Down:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        // assign calculated position to infotext\r\n        return new Point(x, y);\r\n    }\r\n\r\n    public clearPoints(): any {\r\n        this.$points = [];\r\n        this.$points = [];\r\n    }\r\n\r\n    public addPoint(x: number, y: number): Point[] {\r\n        this.$points.push(new Point(x, y));\r\n\r\n        return this.$points;\r\n    }\r\n\r\n    protected redrawPointsAndInfo(): void {\r\n        // redraw the edge with the new position\r\n        let path: string = this.getPath();\r\n        this.$pathSvg.setAttributeNS(null, 'd', path);\r\n        this.$pathWideSvg.setAttributeNS(null, 'd', path);\r\n\r\n        this.redrawSourceInfo();\r\n        this.redrawTargetInfo();\r\n    }\r\n\r\n    protected redrawSourceInfo() {\r\n        if (this.sourceInfo) {\r\n            let newPosOfSrc = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.redrawFromEdge(newPosOfSrc);\r\n        }\r\n    }\r\n\r\n    protected redrawTargetInfo() {\r\n        if (this.targetInfo) {\r\n            let newPosOfTarget = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.redrawFromEdge(newPosOfTarget);\r\n        }\r\n    }\r\n\r\n    protected getDirectionOfPointToNode(node: Node, pointNearNode: Point): Direction {\r\n        /*\r\n            Example to calculate the direction of nearest point to Node\r\n\r\n            node\r\n         x1_ _ _ _\r\n          |       |\r\n          |       |. pointNearNode\r\n          |       |\r\n          |_ _ _ x2\r\n\r\n          the calculation would return Direction.Left\r\n        */\r\n\r\n        let x1: Point = node.getPos();\r\n        let x2: Point = new Point((x1.x + node.getSize().x), (x1.y + node.getSize().y));\r\n        let direction: Direction = Direction.Down;\r\n\r\n        if (x1.y >= pointNearNode.y) {\r\n            direction = Direction.Down;\r\n        }\r\n        if (x2.y <= pointNearNode.y) {\r\n            direction = Direction.Up;\r\n        }\r\n        if (x1.x >= pointNearNode.x) {\r\n            direction = Direction.Right;\r\n        }\r\n        if (x2.x <= pointNearNode.x) {\r\n            direction = Direction.Left;\r\n        }\r\n\r\n        return direction;\r\n    }\r\n\r\n    private updateCardinality(node: Node, infoText: InfoText, cardinality: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'cardinality': cardinality });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.cardinality = cardinality;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateCardinality(cardinality);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private updateProperty(node: Node, infoText: InfoText, property: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'property': property });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.property = property;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateProperty(property);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private calcIntersection(startNode: Node, recalcPoint: Point, endPoint: Point): Point {\r\n\r\n        // https://www.mathelounge.de/21534/schnittpunkt-einer-linie-mit-den-randern-eines-rechtecks\r\n        let h = startNode.getSize().y;\r\n        let w = startNode.getSize().x;\r\n\r\n        let x1: number = startNode.getPos().x + (w / 2);\r\n        let y1: number = startNode.getPos().y + (h / 2);\r\n\r\n        let x2: number = endPoint.x;\r\n        let y2: number = endPoint.y;\r\n\r\n        let newX: number = recalcPoint.x;\r\n        let newY: number = recalcPoint.y;\r\n\r\n        if (x2 > x1) {\r\n            newX = x1 + (w / 2);\r\n        }\r\n        else if (x2 < x1) {\r\n            newX = x1 - (w / 2);\r\n        }\r\n        else {\r\n            newX = x1;\r\n        }\r\n\r\n        if ((x2 - x1) !== 0) {\r\n            newY = ((y2 - y1) / (x2 - x1) * (newX - x1)) + y1;\r\n        }\r\n        else {\r\n            if (y1 > y2) {\r\n                newY = startNode.getPos().y;\r\n            }\r\n            else {\r\n                newY = startNode.getPos().y + h;\r\n            }\r\n        }\r\n\r\n        // if the statement is not true, so the intersection is at the horizontal line\r\n        if (!((y1 - (h / 2) <= newY) && newY <= y1 + (h / 2))) {\r\n\r\n            if (y2 > y1) {\r\n                newY = y1 + (h / 2);\r\n            }\r\n            else {\r\n                newY = y1 - (h / 2);\r\n            }\r\n\r\n            if ((x2 - x1) !== 0) {\r\n                let tmp = ((y2 - y1) / (x2 - x1));\r\n                newX = (newY + (tmp * x1) - y1) / tmp;\r\n            }\r\n            else {\r\n                newX = x1;\r\n            }\r\n        }\r\n\r\n        recalcPoint.x = Math.ceil(newX);\r\n        recalcPoint.y = Math.ceil(newY);\r\n\r\n        return null;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Composition extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'black');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { Association } from './Association';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\nimport { Direction } from '../index';\r\n\r\nexport class Generalisation extends Association {\r\n\r\n    public $TARGET_ELEMENT_HEIGHT : number = 12;\r\n    protected $targetElement: Element;\r\n\r\n    public getSVG(): Element {\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction : Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled arrow\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'white'\r\n          };\r\n\r\n        this.$targetElement = this.createShape(attr);\r\n\r\n        group.appendChild(this.$targetElement);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean) : void {\r\n\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint : Point = this.$points[0];\r\n        let direction : Direction = Direction.Up;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if(this.$sNode.id === startNode.id || this.$points.length == 2){\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$targetElement.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint : Point, direction : Direction) : string{\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch(direction){\r\n            case Direction.Up:\r\n            path = `M${startX} ${startY+3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y+12;\r\n            break;\r\n            case Direction.Right:\r\n            path = `M${startX-3} ${startY} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x-12;\r\n            break;\r\n            case Direction.Left:\r\n            path = `M${startX+3} ${startY} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x+12;\r\n            break;\r\n            case Direction.Down:\r\n            path = `M${startX} ${startY-3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y-12;\r\n            break;\r\n            default :\r\n            break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n\r\n}\r\n","import { Generalisation } from './Generalisation';\r\n\r\nexport class Implements extends Generalisation {\r\n\r\n    public getSVG(): Element {\r\n        let group = super.getSVG();\r\n\r\n        this.$pathSvg.setAttributeNS(null, 'stroke-dasharray', '3, 3');\r\n\r\n        return group;\r\n    }\r\n}\r\n","export * from './Association';\r\nexport * from './Aggregate';\r\nexport * from './Aggregation';\r\nexport * from './Composition';\r\nexport * from './Generalisation';\r\nexport * from './Implements';","export * from './edges';\r\nexport * from './nodes';\r\nexport * from './BaseElements';\r\nexport * from './Graph';\r\nexport * from './Model';\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Attribute extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 28.06.2017.\r\n */\r\nimport {Control} from \"../../Control\";\r\n\r\nexport class AutoComplete extends Control {\r\n    private $inputField:HTMLInputElement;\r\n    private $dataList:HTMLDataListElement;\r\n    private $selected:HTMLSelectElement;\r\n    private $items:HTMLDivElement;\r\n    private isMultiple:boolean;\r\n\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        let div:HTMLDivElement = document.createElement('div');\r\n        this.$view = div;\r\n        this.$inputField = document.createElement('input');\r\n        this.$dataList = document.createElement(\"datalist\");\r\n        this.$dataList.id = \"data_\"+this.id;\r\n        this.$inputField.setAttribute(\"list\", \"data_\"+this.id);\r\n        if(data[\"value\"]) {\r\n            let values = data[\"value\"];\r\n            this.isMultiple = data[\"multiple\"] != null;\r\n            let option:HTMLOptionElement;\r\n            if(this.isMultiple) {\r\n                this.$selected = document.createElement(\"select\");\r\n                this.$selected.className = \"hide\";\r\n                this.$selected.multiple = true;\r\n\r\n                this.$selected.id = this.id;\r\n                this.$items = document.createElement(\"div\");\r\n                this.$items.className = \"selectedList\";\r\n                div.appendChild(this.$items);\r\n                this.$inputField.className = \"selectedInput\";\r\n                div.appendChild(this.$selected);\r\n                this.$view[\"style\"].setProperty(\"float\", \"left\");\r\n                let that = this;\r\n                this.$inputField.oninput = function(){that.onChange();}\r\n            } else {\r\n                this.$inputField.id = this.id;\r\n            }\r\n            for (let attr in values) {\r\n                if (!values.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                option = document.createElement(\"option\");\r\n                option.value = values[attr];\r\n                this.$dataList.appendChild(option);\r\n                if(this.isMultiple) {\r\n                    option = document.createElement(\"option\");\r\n                    option.value = values[attr];\r\n                    option.innerHTML = values[attr];\r\n                    this.$selected.appendChild(option);\r\n                }\r\n        }\r\n\r\n            div.appendChild(this.$inputField);\r\n            div.appendChild(this.$dataList);\r\n        }\r\n\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n            if(this.isMultiple) {\r\n                div.appendChild(this.$selected);\r\n            }\r\n        }\r\n\r\n        parent.appendChild(this);\r\n    }\r\n\r\n    public onChange() : void {\r\n        let textValue:string = this.$inputField.value;\r\n        if(textValue.length<1) {\r\n            return;\r\n        }\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == textValue) {\r\n                if(item.selected == false) {\r\n                    item.selected = true;\r\n                    item.defaultSelected = true;\r\n                    let test = document.createElement(\"li\");\r\n                    let that = this;\r\n                    test.onclick = function() {that.onDelete(item.value, test);};\r\n                    test.className = \"selectedItem\";\r\n                    test.innerHTML = item.value;\r\n                    this.$items.appendChild(test);\r\n                    this.$inputField.value = \"\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n    public onDelete(value:string, selectedItem:HTMLLIElement) : void {\r\n        this.$items.removeChild(selectedItem);\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == value ) {\r\n                if(item.selected) {\r\n                    item.selected = false;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","import {Control} from '../../Control';\r\n\r\nexport class BR extends Control {\r\n    public load(json: JSON): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('br');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            this.$view.setAttribute(attr, data[attr]);\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\nexport class Button extends Control {\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        this.$view = document.createElement('button');\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\nimport { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\nimport { Size } from '../index';\r\nimport ClazzProperty from './ClazzProperty';\r\nimport {SymbolLibary} from './Symbol';\r\nimport {StereoType} from './StereoType';\r\nimport {GraphListener} from '../../handlers/GraphListener';\r\n\r\nexport class Class extends Node {\r\n    public attributes: Attribute[] = [];\r\n    public methods: Method[] = [];\r\n    public modifier: string;\r\n    public stereoType: string;\r\n\r\n    protected $attrHeight = 25;\r\n    protected $attrFontSize = 12;\r\n    protected $labelView: Element;\r\n\r\n    constructor(json: JSON | string | Object | any) {\r\n        super(json);\r\n        return this;\r\n    }\r\n\r\n    public load(json?: any) {\r\n        if (!json) {\r\n            json = {};\r\n        }\r\n        let y = this.$labelHeight;\r\n        let labelObj = json.name || json.id || ('New ' + this.property);\r\n\r\n        let width: number = 150;\r\n        width = Math.max(width, Util.sizeOf(labelObj).width + 60);\r\n\r\n        if (json['attributes']) {\r\n            for (let attr of json['attributes']) {\r\n\r\n                let attrObj = new Attribute(attr);\r\n                attrObj.$owner = this;\r\n                this.attributes.push(attrObj);\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(attrObj.toString()).width);\r\n                let listener = new GraphListener(attrObj);\r\n                attrObj.$data.addListener(listener);\r\n            }\r\n        }\r\n        if (json['stereotype']) {\r\n            this.stereoType = json['stereotype'];\r\n        }\r\n        if (json['methods']) {\r\n            for (let method of json['methods']) {\r\n\r\n                let methodObj = new Method(method);\r\n                methodObj.$owner = this;\r\n                this.methods.push(methodObj);\r\n\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(methodObj.toString()).width);\r\n            }\r\n            y += this.$attrHeight;\r\n        }\r\n        this.withSize(width, y);\r\n    }\r\n\r\n    public getAttributes(): Attribute[] {\r\n        return this.attributes;\r\n    }\r\n\r\n    public getMethods(): Method[] {\r\n        return this.methods;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        let icon = SymbolLibary.draw({type: 'Class', property: 'HTML', width: '50', height: '50', transform: 'translate(-26,-21)'});\r\n        return icon;\r\n        // let group = this.createShape(\r\n//    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n//    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos: Point = this.getPos();\r\n        const size: Point = this.getSize();\r\n\r\n        let group = this.createShape({ tag: 'g', id: this.id, class: 'SVGClazz', transform: 'translate(0 0)' });\r\n\r\n        if (this.stereoType) {\r\n            let type = new StereoType(this.stereoType, pos.x, pos.y);\r\n            group.appendChild(type.getSVG());\r\n        }\r\n\r\n        // Full Shape\r\n        let options = null;\r\n        let style;\r\n        let clazzName;\r\n        if (this.$owner['options']) {\r\n            let options = this.$owner['options'];\r\n            if (options) {\r\n                style = options.style;\r\n            }\r\n        }\r\n        // = = = Background = = =\r\n        if (style === 'modern') {\r\n            clazzName = 'ClazzHeader';\r\n        }\r\n        clazzName = 'ClazzHeader';\r\n        const nodeShape = this.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            height: size.y,\r\n            width: size.x,\r\n            rx: 5,\r\n            ry: 5,\r\n            fill: 'none',\r\n            stroke: 'black',\r\n            'stroke-width': 1\r\n        });\r\n        if (clazzName) {\r\n            nodeShape.setAttribute('className', clazzName);\r\n            let styleHeader = Util.getStyle('ClazzHeader');\r\n            // headerHeight = styleHeader.getNumber('height');\r\n        }\r\n\r\n        // = = = LABEL = = =\r\n        let label = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y + this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': this.$labelFontSize,\r\n            fill: 'black'\r\n        });\r\n        label.textContent = this.id;\r\n        this.$labelView = label;\r\n\r\n        group.appendChild(nodeShape);\r\n        group.appendChild(label);\r\n\r\n        // = = = ATTRIBUTES = = =\r\n        if (this.attributes.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorLabelAttr = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight,\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight,\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorLabelAttr);\r\n\r\n            let groupOfAttributes = this.createShape({ tag: 'g', id: (this.id + 'Attributes') });\r\n            groupOfAttributes.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzAttribute');\r\n            group.appendChild(groupOfAttributes);\r\n\r\n            let y = pos.y + this.$labelHeight + this.$attrHeight / 2;\r\n            for (let attr of this.attributes) {\r\n\r\n                let attrSvg = attr.getSVG();\r\n                attr.$owner = this;\r\n\r\n                attrSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                attrSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfAttributes.appendChild(attrSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        // = = = METHODS = = =\r\n        let height = this.attributes.length * this.$attrHeight;\r\n        let y = pos.y + this.$labelHeight + height + this.$attrHeight / 2;\r\n        if (this.methods.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorAttrMethods = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorAttrMethods);\r\n\r\n            let groupOfMethods = this.createShape({ tag: 'g', id: (this.id + 'Methods') });\r\n            groupOfMethods.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzMethod');\r\n            group.appendChild(groupOfMethods);\r\n\r\n            y += this.$attrHeight / 2;\r\n            for (let method of this.methods) {\r\n\r\n                let methodSvg = method.getSVG();\r\n                method.$owner = this;\r\n\r\n                methodSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                methodSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfMethods.appendChild(methodSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        this.$view = group;\r\n        return group;\r\n    }\r\n\r\n    public copy(): Class {\r\n        let copy: Class;\r\n        copy = <Class>super.copy();\r\n\r\n        // copy label\r\n        copy.id = this.id + 'Copy';\r\n\r\n        // copy attributes\r\n        this.attributes.forEach(attr => {\r\n            copy.attributes.push(new Attribute(attr.toString()));\r\n        });\r\n        // copy methods\r\n        this.methods.forEach(method => {\r\n            copy.methods.push(new Method(method.toString()));\r\n        });\r\n        copy.reCalcSize();\r\n\r\n        return copy;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTCLICK,\r\n                EventBus.ELEMENTDRAG, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES, EventBus.RELOADPROPERTIES];\r\n    }\r\n\r\n    public addProperty(value: string, type: string): any {\r\n        if (!this[type] || !value || value.length === 0) {\r\n            return;\r\n        }\r\n\r\n        let extractedValue;\r\n        if (type === 'attributes') {\r\n            extractedValue = new Attribute(value);\r\n        }\r\n        else if (type === 'methods') {\r\n            extractedValue = new Method(value);\r\n        }\r\n\r\n        for (let valueOfType of this[type]) {\r\n            if (valueOfType.toString() === extractedValue.toString()) {\r\n                alert(extractedValue.toString() + ' already exists.');\r\n                extractedValue = undefined;\r\n                return;\r\n            }\r\n        }\r\n\r\n        this[type].push(extractedValue);\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        return extractedValue;\r\n    }\r\n\r\n    public addAttribute(value: string): Attribute {\r\n        return this.addProperty(value, 'attributes');\r\n    }\r\n\r\n    public addAttributeObj(attr: Attribute): Attribute[] {\r\n        this.attributes.push(attr);\r\n        return this.getAttributes();\r\n    }\r\n\r\n    public addMethodObj(method: Method): Method[] {\r\n        this.methods.push(method);\r\n        return this.getMethods();\r\n    }\r\n\r\n    public addMethod(value: string): Method {\r\n        return this.addProperty(value, 'methods');\r\n    }\r\n\r\n    public removeAttribute(attr: Attribute): void {\r\n        let idx = this.attributes.indexOf(attr);\r\n        this.attributes.splice(idx, 1);\r\n    }\r\n\r\n    public removeMethod(method: Method): void {\r\n        let idx = this.methods.indexOf(method);\r\n        this.methods.splice(idx, 1);\r\n    }\r\n\r\n    public removeProperty(property: ClazzProperty): void {\r\n\r\n        if (property instanceof Attribute) {\r\n            this.removeAttribute(<Attribute>property);\r\n        }\r\n\r\n        if (property instanceof Method) {\r\n            this.removeMethod(<Method>property);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n        let hasSizeChanged: [boolean, Size] = this.hasSizeChanged();\r\n\r\n        if (drawOnlyIfSizeChanged) {\r\n            if (!hasSizeChanged[0]) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n\r\n        // redraw only this clazz\r\n        this.$owner.$view.removeChild(this.$view);\r\n        let newSvg = this.getSVG();\r\n        this.$owner.$view.appendChild(newSvg);\r\n        this.$view = newSvg;\r\n        EventBus.register(this, newSvg);\r\n\r\n        this.redrawEdges();\r\n    }\r\n\r\n    public hasSizeChanged(): [boolean, Size] {\r\n        let oldSize = { width: this.getSize().x, height: this.getSize().y };\r\n        let newSize = this.reCalcSize();\r\n\r\n        // size doenst changed, so nothing to redraw\r\n        if (oldSize.width === newSize.width && oldSize.height === newSize.height) {\r\n            return [false, newSize];\r\n        }\r\n\r\n        return [true, newSize];\r\n    }\r\n\r\n    public updateLabel(newLabel: string): void {\r\n        if (this.$labelView) {\r\n            this.$labelView.textContent = newLabel;\r\n        }\r\n\r\n        // update label in all edges\r\n        this.$edges.forEach(edge => {\r\n            if (this.id === edge.$sNode.id) {\r\n                edge.source = newLabel;\r\n            }\r\n            else if (this.id === edge.$tNode.id) {\r\n                edge.target = newLabel;\r\n            }\r\n        });\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        this.reDraw(true);\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.modifier = modifier;\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reCalcSize(): Size {\r\n        // label\r\n        let newWidth = 150;\r\n        newWidth = Math.max(newWidth, Util.sizeOf(this.id).width + 30);\r\n\r\n        // attributes\r\n        this.attributes.forEach(attrEl => {\r\n\r\n            let widthOfAttr;\r\n            if (attrEl.$view) {\r\n                widthOfAttr = attrEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfAttr = Util.sizeOf(attrEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfAttr + 15);\r\n        });\r\n\r\n        // methods\r\n        this.methods.forEach(methodEl => {\r\n            let widthOfMethod;\r\n            if (methodEl.$view) {\r\n                widthOfMethod = methodEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfMethod = Util.sizeOf(methodEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfMethod + 15);\r\n        });\r\n\r\n        // TODO: height has to be calculated by font-size\r\n        this.getSize().x = newWidth;\r\n        this.getSize().y = this.$labelHeight + ((this.attributes.length + this.methods.length) * this.$attrHeight)\r\n            + this.$attrHeight;\r\n\r\n        let newSize = { width: newWidth, height: this.getSize().y };\r\n\r\n        return newSize;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    private getModernStyle(): Element {\r\n        let width, height, id, size, z, item, rect, g, board, styleHeader, headerHeight, x, y;\r\n        board = this.getRoot()['board'];\r\n        styleHeader = Util.getStyle('ClazzHeader');\r\n        headerHeight = styleHeader.getNumber('height');\r\n        width = 0;\r\n        height = 10 + headerHeight;\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].getType().toLowerCase() === 'objectdiagram') {\r\n            id = this.id.charAt(0).toLowerCase() + this.id.slice(1);\r\n            item = 'Object';\r\n        } else {\r\n            id = this.id;\r\n            item = 'Class';\r\n            if (this['counter']) {\r\n                id += ' (' + this['counter'] + ')';\r\n            }\r\n        }\r\n        g = Util.create({tag: 'g', model: this});\r\n        size = Util.sizeOf(id, this);\r\n        width = Math.max(width, size.width);\r\n        if (this.attributes && this.attributes.length > 0) {\r\n            height = height + this.attributes.length * 25;\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.attributes[z], this).width);\r\n            }\r\n        } else {\r\n            height += 20;\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            height = height + this.methods.length * 25;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.methods[z], this).width);\r\n            }\r\n        }\r\n        width += 20;\r\n\r\n        let pos = this.getPos();\r\n        y = pos.y;\r\n        x = pos.x;\r\n\r\n        rect = {\r\n            tag: 'rect',\r\n            'width': width,\r\n            'height': height,\r\n            'x': x,\r\n            'y': y,\r\n            'class': item + ' draggable',\r\n            'fill': 'none'\r\n        };\r\n        g.appendChild(Util.create(rect));\r\n        g.appendChild(Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            'x': x,\r\n            'y': y,\r\n            height: headerHeight,\r\n            'width': width,\r\n            'class': 'ClazzHeader'\r\n        }));\r\n\r\n        item = Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'class': 'InfoText',\r\n            'text-anchor': 'right',\r\n            'x': x + width / 2 - size.width / 2,\r\n            'y': y + (headerHeight / 2) + (size.height / 2),\r\n            'width': size.width\r\n        });\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].type.toLowerCase() === 'objectdiagram') {\r\n            item.setAttribute('text-decoration', 'underline');\r\n        }\r\n        item.appendChild(document.createTextNode(id));\r\n\r\n        g.appendChild(item);\r\n        g.appendChild(Util.create({\r\n            tag: 'line',\r\n            x1: x,\r\n            y1: y + headerHeight,\r\n            x2: x + width,\r\n            y2: y + headerHeight,\r\n            stroke: '#000'\r\n        }));\r\n        y += headerHeight + 20;\r\n\r\n        if (this.attributes) {\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': (x + 10),\r\n                    'y': y,\r\n                    value: this.attributes[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n            if (this.attributes.length > 0) {\r\n                y -= 10;\r\n            }\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            g.appendChild(Util.create({tag: 'line', x1: x, y1: y, x2: x + width, y2: y, stroke: '#000'}));\r\n            y += 20;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': x + 10,\r\n                    'y': y,\r\n                    value: this.methods[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n        }\r\n        return g;\r\n    }\r\n}\r\n","import {Util} from '../../util';\r\nimport {DiagramElement} from '../BaseElements';\r\nimport Data from '../../Data';\r\n\r\nexport default class ClazzProperty extends DiagramElement {\r\n\r\n    // Public (+)\r\n    // Private (-)\r\n    // Protected (#)\r\n    // Package (~)\r\n\r\n    public $data = new Data();\r\n//    public modifier: string = '+';\r\n//    public name: string;\r\n//    public type: string;\r\n//    public value: string;\r\n\r\n    constructor(data: any | JSON) {\r\n        super();\r\n        this.$data.setValue('modifier', '+');\r\n        this.$data.setValue('name', null);\r\n        this.$data.setValue('type', null);\r\n        this.$data.setValue('value', null);\r\n        this.extractData(data);\r\n    }\r\n\r\n    public update(data: any | JSON): void {\r\n        this.extractData(data);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.$data.setValue('modifier', modifier);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateType(type: string): void {\r\n        this.$data.setValue('type', type);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateValue(value: string): void {\r\n        this.$data.setValue('value', value);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateName(name: string): void {\r\n        this.$data.setValue('name', name);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public getName(): string {\r\n        return this.$data.getValue('name');\r\n    }\r\n\r\n    public getModifier(): string {\r\n        return this.$data.getValue('modifier');\r\n    }\r\n\r\n    public getType(): string {\r\n        return this.$data.getValue('type');\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let attrText = {\r\n            tag: 'text',\r\n            'text-anchor': 'start',\r\n            'alignment-baseline': 'middle',\r\n        };\r\n\r\n        let attrSvg = Util.createShape(attrText);\r\n        attrSvg.textContent = this.toString();\r\n\r\n        this.$view = attrSvg;\r\n\r\n        return attrSvg;\r\n    }\r\n\r\n    public toString(): string {\r\n        let value = this.$data.getValue('value');\r\n        let result = this.$data.getValue('modifier') + ' ';\r\n        result += this.$data.getValue('name') + ' : ';\r\n        result += this.$data.getValue('type');\r\n        if (value && value.length > 0) {\r\n            result += ' = ' + this.$data.getValue('value');\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.$data.setValue('type', data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.$data.setValue('name', data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.$data.setValue('modifier', data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n\r\n            // e.g. name : string or name:string\r\n            let dataSplitted = data.split(':');\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                let name;\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.$data.setValue('modifier', firstChar);\r\n                    name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                }\r\n                else {\r\n                    name = modifierAndNameSplitted;\r\n                }\r\n                // delete whitespaces in name\r\n                name = name.replace(/ /g, '_');\r\n\r\n                this.$data.setValue('name', name);\r\n                let type = dataSplitted[1].trim() || 'String';\r\n\r\n                // if the type was entered with a small begin letter\r\n                if (type.toLowerCase() === 'string') {\r\n                    type = 'String';\r\n                }\r\n                // delete whitespaces in type\r\n                type = type.replace(/ /g, '_');\r\n                this.$data.setValue('type',  type);\r\n            } else {\r\n                dataSplitted = data.split('=');\r\n                if (dataSplitted && dataSplitted.length === 2) {\r\n                    // modifer (and or) name\r\n                    let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                    // first char is +, - or #\r\n                    let firstChar = modifierAndNameSplitted[0];\r\n                    let name;\r\n                    if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                        this.$data.setValue('modifier', firstChar);\r\n                        name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                    }\r\n                    else {\r\n                        name = modifierAndNameSplitted;\r\n                    }\r\n                    // delete whitespaces in name\r\n                    name = name.replace(/ /g, '_');\r\n\r\n                    this.$data.setValue('name', name);\r\n                    let value = dataSplitted[1].trim() || '\"\"';\r\n                    this.$data.setValue('value', value);\r\n                    this.$data.setValue('type', typeof value);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected updateTextOfView() {\r\n        if (this.$view) {\r\n            this.$view.textContent = this.toString();\r\n        }\r\n        if (this.$owner) {\r\n            Util.saveToLocalStorage(this.$owner.$owner);\r\n        }\r\n    }\r\n}\r\n","import {Node} from \"./Node\";\r\n/**\r\n * Created by Stefan on 29.03.2017.\r\n */\r\n\r\nexport class Dice extends Node {\r\n    private value: number;\r\n    private max: number = 6;\r\n    private $animation: SVGElement;\r\n    private $zoom: number = 0.6;\r\n    private $border: number = 0.2;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super(data);\r\n        this.withSize(100, 100);\r\n    }\r\n\r\n    public setNumber(number: number) {\r\n        this.value = number;\r\n        this.refresh();\r\n    }\r\n\r\n    public refresh() {\r\n        if (this.$view) {\r\n            this.reset();\r\n            let group = this.createPointValue();\r\n            if (group) {\r\n                this.$view.appendChild(group);\r\n            }\r\n        }\r\n    }\r\n\r\n    public reset() {\r\n        if (this.$view) {\r\n            while (this.$view.children.length > 1) {\r\n                if(this.$view.children.item(this.$view.children.length - 1).tagName!== \"animateTransform\") {\r\n                    console.log(this.$view.children.item(this.$view.children.length - 1));\r\n                    this.$view.removeChild(this.$view.children.item(this.$view.children.length - 1));\r\n                }else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let dice: SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x + size.x * this.$border,\r\n            y: pos.y + size.y * this.$border,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y * this.$zoom,\r\n            width: size.x * this.$zoom,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        dice.appendChild(this.createShape(attr));\r\n\r\n        let group = this.createPointValue();\r\n        if (group) {\r\n            dice.appendChild(group);\r\n        }\r\n\r\n        this.$view = dice;\r\n        return dice;\r\n    }\r\n\r\n    public animationTimeout(newValues: number[]) {\r\n        if(newValues.length>0) {\r\n            let newValue = newValues.shift();\r\n            this.setNumber(newValue);\r\n            let that=this;\r\n            setTimeout(function() {that.animationTimeout(newValues)}, 100);\r\n        }\r\n    }\r\n\r\n    public roll() {\r\n        this.startAnimation();\r\n        let values:number[]=[];\r\n        let i:number;\r\n        for(i=1;i<this.max;i++) {\r\n            values.push(i);\r\n        }\r\n        for(i=this.max;i>0;i--) {\r\n            values.push(i);\r\n        }\r\n        let that=this;\r\n        values.push( Math.floor(Math.random() * this.max)+1 );\r\n        setTimeout(function() {that.animationTimeout(values)}, 100);\r\n    }\r\n    public startAnimation() {\r\n        if(this.$animation) {\r\n            return;\r\n        }\r\n        let center = this.getPos().x+this.getSize().x /2;\r\n        const attr = {\r\n            tag: 'animateTransform',\r\n            attributeType: \"xml\",\r\n            attributeName:\"transform\",\r\n            type:\"rotate\",\r\n            dur: \"1s\",\r\n            repeatCount:\"1\",\r\n            from:\"0 \"+center+\" \"+center,\r\n            to:\"360 \"+center+\" \"+center\r\n        };\r\n        this.$animation = <SVGElement>this.createShape(attr);\r\n        this.$view.appendChild(this.$animation);\r\n    }\r\n\r\n    public stopAnimation() {\r\n        if(this.$animation) {\r\n            this.$view.removeChild(this.$animation);\r\n            this.$animation = null;\r\n        }\r\n    }\r\n\r\n    public createPointValue() :SVGElement {\r\n        if (this.value == 1) {\r\n           return this.getCircle(2, 2);\r\n        } else if (this.value == 2) {\r\n            return this.getCircle(1, 1, 3, 3);\r\n        } else if (this.value == 3) {\r\n            return this.getCircle(1, 1, 2, 2, 3, 3);\r\n        } else if (this.value == 4) {\r\n            return this.getCircle(1, 1, 1, 3, 3, 1, 3, 3);\r\n        } else if (this.value == 5) {\r\n            return this.getCircle(1, 1, 1, 3, 2, 2, 3, 1, 3, 3);\r\n        } else if (this.value == 6) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 7) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 2, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 8) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 9) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private getCircle(...values:number[]) : SVGElement {\r\n        if (values.length % 2 > 0) {\r\n            return null;\r\n        }\r\n        let size = this.getSize();\r\n        let pos = this.getPos();\r\n        //FIXME let group:SVGElement = <SVGElement>this.createShape({tag: 'g', transform: 'translate(0 0)', height: size.y, width: size.x});\r\n        let group:SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n\r\n\r\n        for (let i: number = 0; i < values.length; i += 2) {\r\n            group.appendChild(this.createCircle(values[i], values[i + 1]));\r\n        }\r\n        return group;\r\n    }\r\n    private createCircle(x:number, y:number) : SVGElement {\r\n        let size = this.getSize();\r\n        let radius = size.x / 10*this.$zoom;\r\n        let border = size.y*this.$border;\r\n        let zoom = size.y*this.$zoom;\r\n        const attr = {\r\n            tag: 'circle',\r\n            r : radius,\r\n            cx: (size.x*this.$zoom * x) / 4 + border,\r\n            cy: (size.y*this.$zoom * y) / 4 + border,\r\n            stroke:\"black\",\r\n            \"stroke-width\":\"3\",\r\n            fill:\"red\",\r\n            style: 'fill:black;stroke:black;stroke-width:2'\r\n        };\r\n        return <SVGElement>this.createShape(attr);\r\n    }\r\n}","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\n\r\nexport class Div extends Control {\r\n    private className: string;\r\n\r\n    public load(data:JSON|any): any {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = <string>data;\r\n        } else {\r\n            id = data.id;\r\n            this.className = data.class;\r\n            this.property = data.property;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let div: HTMLElement = document.getElementById(id);\r\n\r\n        if (!this.property) {\r\n            // if(inputField){\r\n            // TODO disuss how to decide, which property we should listen on...\r\n            // this.property = id;\r\n            this.property = div.getAttribute('Property');\r\n            // }\r\n        }\r\n\r\n        if (div instanceof HTMLDivElement) {\r\n            this.$view = div;\r\n        } else {\r\n            if (!div) {\r\n                this.$view = document.createElement('div');\r\n                this.$view.setAttribute('id', this.id);\r\n                this.$view.setAttribute('property', this.property);\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists+\r\n        if (data.hasOwnProperty('property')) {\r\n            this.setProperty(data['property']);\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        this.$model = entity;\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.className || entity.hasProperty(this.className)) {\r\n                if (entity.id === this.property.split('.')[0]) {\r\n                    entity.addListener(this, this.className);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        this.$view.innerHTML = <string>newValue;\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Form extends Control {\r\n    // private applyingChange: boolean = false;\r\n    private children: Object = {};\r\n    // private property: string = \"\";\r\n\r\n    /**\r\n     * Data should look like the following json:\r\n     *\r\n     * <pre>{\r\n     *      id: \"t1\",\r\n     *      control: \"form\",\r\n     *      elements: [\r\n     *          {id: \"inputField1\", property: \"talk\"},\r\n     *          {id: \"inputField2\", property: \"room\"}\r\n     *      ]\r\n     * }</pre>\r\n     * @param data\r\n     */\r\n    public load(data: any) {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let form: HTMLElement = document.getElementById(id);\r\n\r\n        if (form instanceof HTMLFormElement) {\r\n            this.$view = form;\r\n            if (this.$view.hasAttribute('property')) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            if (!form) {\r\n                this.$view = document.createElement('form');\r\n                this.$view.setAttribute('id', this.id);\r\n\r\n                if (data.hasOwnProperty('property')) {\r\n                    this.property = data['property'];\r\n                }\r\n\r\n                // add all the attributes to the form element\r\n                for (let attr in data) {\r\n                    if (data.hasOwnProperty(attr) === false) {\r\n                        continue;\r\n                    }\r\n                    if (attr === 'elements') {\r\n                        continue;\r\n                    }\r\n                    this.$view.setAttribute(attr, data[attr]);\r\n                }\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists\r\n        let objId = this.property;\r\n        let hasItem = this.$owner.hasItem(objId);\r\n        if (hasItem) {\r\n            let item = this.$owner.getItem(objId);\r\n            item.addListener(this);\r\n            this.$model = item;\r\n        }\r\n\r\n        // now create all the sub input controls\r\n        for (let field of data.elements) {\r\n            // this.createField(field);\r\n            if (field.hasOwnProperty('property')) {\r\n                let property = field['property'];\r\n                property = this.property + '.' + property;\r\n                field['property'] = property;\r\n            }\r\n            if (!field.hasOwnProperty('class')) {\r\n                field['class'] = 'input';\r\n            }\r\n\r\n            // let the Bridge load the subControl\r\n            let control: Control = this.$owner.load(field, this);\r\n\r\n            // add subControl to children\r\n            this.children[control.getId()] = control;\r\n        }\r\n\r\n    }\r\n\r\n    public setProperty(id: string): void {\r\n        this.property = id;\r\n        let keys: string[] = Object.keys(this.children);\r\n        for (let k = 0; k < keys.length; k++) {\r\n            let key = keys[k];\r\n            let childControl = this.children[key];\r\n            // only set Property, if there is a Property defined before\r\n            if (childControl.property) {\r\n                childControl.setProperty(this.property + '.' + childControl.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object,  oldValue?: Object): boolean {\r\n        if (this.$owner != null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    /**\r\n     * Here we create the form elements and put all the attributes to them in order for the Control only having to load\r\n     * the data were appending here. Alternative would be loading with the bridge and afterwards setting\r\n     * the owner to the form instead of the body..\r\n     * @param field\r\n     */\r\n    /*private createField(field: Object) {\r\n     let control = 'input';\r\n     if (field.hasOwnProperty('class')) {\r\n     control = field['class'];\r\n     }\r\n     let input = document.createElement(control);\r\n     input.setAttribute('class', control);\r\n     let id: string;\r\n     if (!field.hasOwnProperty('id')) {\r\n     // TODO: not the best solution for generating unique id's for forms...\r\n     id = this.$owner.getId();\r\n     field['id'] = id;\r\n     }\r\n     if (field.hasOwnProperty('property')) {\r\n     let property = field['property'];\r\n     property = this.id + '.' + property;\r\n     input.setAttribute('property', property);\r\n     }\r\n     for (let attr in field) {\r\n     if (attr === 'property' || attr === 'class' || !field.hasOwnProperty(attr)) {\r\n     continue;\r\n     }\r\n     input.setAttribute(attr, field[attr]);\r\n     }\r\n\r\n     this.$viewElement.appendChild(input);\r\n\r\n     let newcontrol: Control = this.$owner.load(field['id']);\r\n     this.children[newcontrol.getId()] = newcontrol;\r\n     }*/\r\n}\r\n","/**\r\n * Created by Stefan on 01.03.2017.\r\n */\r\nimport {Control} from '../../Control';\r\n\r\nexport class HTML extends Control {\r\n    constructor(data: JSON|Object|any) {\r\n        super();\r\n\r\n        let id: string;\r\n        let tag: string;\r\n\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            data = {};\r\n        } else if (data) {\r\n            id = data.id;\r\n        }\r\n        if (id) {\r\n            this.id = id;\r\n            this.$view = document.getElementById(id);\r\n        }\r\n        if (!this.$view) {\r\n            if (data) {\r\n                tag = data['tag'] || 'div';\r\n            } else {\r\n                tag = 'div';\r\n            }\r\n            this.$view = document.createElement(tag);\r\n            let parent = document.getElementsByTagName('body')[0];\r\n            parent.appendChild(this.$view);\r\n        }\r\n        if (!parent) {\r\n            return;\r\n        }\r\n        this.writeAttribute(data, this.$view);\r\n    }\r\n\r\n    private writeAttribute(properties: Object, entity?: any) {\r\n        let lowKey;\r\n        if (!entity) {\r\n            lowKey = properties['tag'] || 'div';\r\n            entity = document.createElement(lowKey);\r\n        }\r\n        for (let key in properties) {\r\n            if (!properties.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            lowKey = key.toLowerCase();\r\n            if (properties[key] === null) {\r\n                entity.setAttribute(key, '');\r\n                continue;\r\n            }\r\n\r\n            if (lowKey === 'tag' || lowKey.charAt(0) === '$' || lowKey === '$graphModel' || lowKey === 'class') {\r\n                continue;\r\n            }\r\n            if (lowKey === 'children') {\r\n                if (Array.isArray(properties[key])) {\r\n                    for (let item in properties[key]) {\r\n                        if (properties[key].hasOwnProperty(item) === false) {\r\n                            continue;\r\n                        }\r\n                        let child = this.writeAttribute(item);\r\n                        if (child) {\r\n                            entity.appendChild(child);\r\n                        }\r\n                    }\r\n                } else {\r\n                    let child = this.writeAttribute(properties[key]);\r\n                    if (child) {\r\n                        entity.appendChild(child);\r\n                    }\r\n                }\r\n                continue;\r\n            }\r\n            entity[key] = properties[key];\r\n        }\r\n        return entity;\r\n    }\r\n}\r\n","import { Point } from '../BaseElements';\r\nimport { Util } from '../../util';\r\nimport { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\n\r\nexport class InfoText extends Node {\r\n\r\n    public cardinality: string = '';\r\n    private $heightOfOneTextItem: number;\r\n    private $cardinalitySvg: Element;\r\n    private $propertySvg: Element;\r\n    private $rectBackground: Element;\r\n\r\n    constructor(info: any) {\r\n        super(info);\r\n        if (typeof (info) === 'string') {\r\n            this.id = info;\r\n        } else {\r\n            if (info.property) {\r\n                this.property = info.property;\r\n            }\r\n            if (info.cardinality) {\r\n                this.cardinality = info.cardinality;\r\n            }\r\n        }\r\n        this.$isDraggable = true;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n    }\r\n\r\n    public updateCardinality(cardinality: string): void {\r\n        this.cardinality = cardinality;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (this.$rectBackground) {\r\n            this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n            this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n        }\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((cardinality.length === 0 && this.property.length > 0) || !this.$cardinalitySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$cardinalitySvg) {\r\n            this.$cardinalitySvg.textContent = cardinality;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.property.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    public updateProperty(property: string): void {\r\n        this.property = property;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((property.length === 0 && this.cardinality.length > 0) || !this.$propertySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$propertySvg) {\r\n            this.$propertySvg.textContent = property;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.cardinality.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos: Point = this.getPos();\r\n        let group = Util.create({ tag: 'g', class: 'SVGEdgeInfo', transform: 'translate(0, 0)' });\r\n\r\n        // append rect as background for text items\r\n        this.$rectBackground = Util.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y - this.$heightOfOneTextItem + 3,\r\n            width: this.getSize().x,\r\n            height: this.getSize().y,\r\n            fill: '#DDD',\r\n            'stroke-width': 0,\r\n            rx: '5',\r\n            ry: '5'\r\n        });\r\n        group.appendChild(this.$rectBackground);\r\n\r\n        let y = pos.y;\r\n        if (this.property) {\r\n            // property\r\n            this.$propertySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$propertySvg.textContent = this.property;\r\n            group.appendChild(this.$propertySvg);\r\n\r\n            y += this.$heightOfOneTextItem;\r\n        }\r\n\r\n        // cardinality\r\n        if (this.cardinality) {\r\n            this.$cardinalitySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$cardinalitySvg.textContent = this.cardinality;\r\n            group.appendChild(this.$cardinalitySvg);\r\n        }\r\n\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        let cardinalityAvailable = this.cardinality && this.cardinality.length > 0;\r\n        let propertyAvailable = this.property && this.property.length > 0;\r\n\r\n        return !propertyAvailable && !cardinalityAvailable;\r\n    }\r\n\r\n    public redrawFromEdge(newPos: Point): void {\r\n\r\n        if (!newPos) {\r\n            return;\r\n        }\r\n\r\n        let oldPos = this.getPos();\r\n\r\n        // get difference between new and the old position\r\n        let diffPos = new Point();\r\n        diffPos.x = newPos.x - oldPos.x;\r\n        diffPos.y = newPos.y - oldPos.y;\r\n\r\n        // get translate information\r\n        let translation = this.$view.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        let sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        // set new traslation values\r\n        let newTransX = (sx + diffPos.x);\r\n        let newTransY = (sy + diffPos.y);\r\n        this.$view.setAttributeNS(null, 'transform', 'translate(' + newTransX + ' ' + newTransY + ')');\r\n\r\n        // set new position of svg\r\n        this.getPos().x = newPos.x;\r\n        this.getPos().y = newPos.y;\r\n    }\r\n\r\n    public getText(): string {\r\n        let infoTxt: string = '';\r\n\r\n        if (this.property) {\r\n            infoTxt = this.property;\r\n        }\r\n        if (this.cardinality) {\r\n            if (infoTxt.length > 0) {\r\n                infoTxt += '\\n';\r\n            }\r\n            infoTxt += this.cardinality;\r\n        }\r\n\r\n        return infoTxt;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    private calcSize(): Point {\r\n        let text: string = this.getText();\r\n        let items: Array<string> = text.split('\\n');\r\n\r\n        let maxSize = new Point(0, 0);\r\n        if (text.length === 0) {\r\n            return maxSize;\r\n        }\r\n\r\n        for (let i = 0; i < items.length; i += 1) {\r\n            // calculate size\r\n            let sizeOfText: ClientRect = Util.sizeOf(items[i]);\r\n            maxSize.x = Math.max(maxSize.x, sizeOfText.width);\r\n            maxSize.y += sizeOfText.height;\r\n\r\n            this.$heightOfOneTextItem = sizeOfText.height;\r\n        }\r\n\r\n        return maxSize;\r\n    }\r\n    private resetAllSvgElements() {\r\n        this.$cardinalitySvg = undefined;\r\n        this.$view = undefined;\r\n        this.$propertySvg = undefined;\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\nimport {PropertyBinder} from '../../PropertyBinder';\r\n\r\nexport class Input extends Control {\r\n    private type: string;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data = super.initViewDataProperties(oldData);\r\n        if ('checkbox' === this.type || 'radio' === this.type) {\r\n            data.addFrom('checked', oldData);\r\n        }\r\n        data.addFrom('value', oldData);\r\n        data.addFrom('type', oldData);\r\n        return data;\r\n    }\r\n\r\n    public load(data: any) {\r\n        let id: string;\r\n        let inputField: HTMLElement;\r\n        let useData: boolean;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            useData = true;\r\n        } else {\r\n            id = data.id;\r\n            if (data.type) {\r\n                this.setType(data['type']);\r\n            } else {\r\n                this.setType('text');\r\n            }\r\n            if (data.hasOwnProperty('property')) {\r\n                this.setProperty(data['property']);\r\n            }\r\n            useData = false;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n\r\n        inputField = document.getElementById(id);\r\n\r\n        if (useData) {\r\n            if (inputField) {\r\n                // TODO disuss how to decide, which property we should listen on...\r\n                // this.property = id;\r\n                if (inputField.hasAttribute('Property')) {\r\n                    this.setProperty(inputField.getAttribute('Property'));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (inputField instanceof HTMLInputElement) {\r\n            this.setView(inputField);\r\n            this.type = inputField.type;\r\n            // useData = false;\r\n        } else {\r\n            if (!inputField) {\r\n                this.setView(document.createElement('input'));\r\n                this.$viewData = this.initViewDataProperties(this.$viewData);\r\n                // append viewListener\r\n                // this.$view.addEventListener('change', this.$viewListener);\r\n                if (typeof(data) !== 'string') {\r\n                    for (let attr in data) {\r\n                        if (data.hasOwnProperty(attr) === false) {\r\n                            continue;\r\n                        }\r\n                        // this.$view[attr] = data[attr];\r\n                        this.$viewData.setValue(attr, data[attr]);\r\n                    }\r\n                } else {\r\n                    if (this.type) {\r\n                        this.$view.setAttribute('type', this.type);\r\n                    }\r\n                    if (data.hasOwnProperty('class')) {\r\n                        this.$view.setAttribute('class', data['class']);\r\n                    }\r\n                    this.$view.setAttribute('id', this.id);\r\n                    this.$view.setAttribute('property', this.property);\r\n                }\r\n\r\n                if (data.value) {\r\n                    // if theres a value at the control, we want to change the model to the new value\r\n                    if (this.$model) {\r\n                        this.$model.setValue(this.lastProperty, data.value);\r\n                    }\r\n                }\r\n                if (this.$model) {\r\n                    PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                }\r\n\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (this.property && entity) {\r\n            if (entity.id === this.property.split('.')[0]) {\r\n                this.$model = entity;\r\n                PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                // entity.addListener(this, this.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n    // TODO FIXME protected updateElement(property: string, value: string) {\r\n    //     if (this.$view instanceof HTMLInputElement) {\r\n    //         if (value != null) {\r\n    //             if(property == this.lastProperty) {\r\n    //                 (<HTMLInputElement>this.$view)[this.getStandardProperty()] = value;\r\n    //             } else {\r\n    //                 // this.getRoot().setValue(this, property, value, (<HTMLInputElement>this.$view)[property]);\r\n    //                 (<HTMLInputElement>this.$view)[property] = value;\r\n    //             }\r\n    //         } else {\r\n    //             delete (<HTMLInputElement>this.$view)[property];\r\n    //         }\r\n    //     }\r\n    // }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            super.controlChanged(ev);\r\n        }\r\n// <<<<<<< HEAD\r\n//             let newVal = element[this.getStandardProperty()];\r\n//             if (this.isKeyOnly()) {\r\n//                 // we expect, element[this.lastProperty] to be boolean:\r\n//                 if (!newVal) {\r\n//                     newVal = null;\r\n//                 }\r\n//             } else {\r\n//             }\r\n        // let $graphModel;\r\n        // let value;\r\n        /*if (this.$graphModel) {\r\n            $graphModel = this.$graphModel;\r\n            value = this.$graphModel.getValue(this.lastProperty);\r\n        } else {\r\n            $graphModel = this;\r\n            if (this.$view) {\r\n                value = this.$view[this.lastProperty];\r\n            }\r\n        }*/\r\n        // this.$model.setValue(this.lastProperty, newVal);\r\n        // this.propertyChange(this.$graphModel,this.lastProperty, this.$graphModel.getValue(this.lastProperty), newVal);\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n// =======\r\n        // let newVal = element[this.lastProperty];\r\n        // if (this.isKeyOnly()) {\r\n        //     // we expect, element[this.lastProperty] to be boolean:\r\n        //     if (!newVal) {\r\n        //         newVal = null;\r\n        //     }\r\n        // } else {\r\n        // }\r\n        // let $graphModel;\r\n        // let value;\r\n\r\n        // $graphModel = this.getViewData();\r\n        // if (this.$graphModel) {\r\n        //     $graphModel = this.$graphModel;\r\n        //     value = this.$graphModel.getValue(this.lastProperty);\r\n        // } else {\r\n        //     $graphModel = this;\r\n        //     if (this.$view) {\r\n        //         value = this.$view[this.lastProperty];\r\n        //     }\r\n        // }\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n//            this.saveViewInData();\r\n// >>>>>>> addOldFunctions\r\n//         } else {\r\n//             console.log('value does not match the pattern...');\r\n//         }\r\n    }\r\n\r\n    public setType(type: string): void {\r\n        let oldValue: string = this.type;\r\n        if (oldValue === type) {\r\n            return;\r\n        }\r\n        if (type === 'radio') {\r\n            this.$viewData.setValue('checked', null);\r\n        } else {\r\n            this.$viewData.removeKey('checked');\r\n        }\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\n\r\nexport class Label extends Control {\r\n    public load(data: JSON): any {\r\n        this.createControl(this.$owner, data);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('label');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr === 'textContent') {\r\n                this.$view.textContent = data['textContent'];\r\n            } else {\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Method extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.updateType(data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.updateType(data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.updateType(data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n            // e.g. setName() : string or name:string\r\n            let dataSplitted = data.split(':');\r\n\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }\r\n                else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType(dataSplitted[1].trim() || 'void');\r\n            }\r\n            // set default return type of void\r\n            else {\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = data.trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }  else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType('void');\r\n            }\r\n        }\r\n\r\n        if (Util.includes(this.$data.getValue('name'), '(') && !Util.includes(this.$data.getValue('name'), ')') === false) {\r\n            this.$data.setValue('name', this.$data.getValue('name') + '()');\r\n        }\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\nimport {Association} from '../edges';\r\nimport { GraphModel } from '..';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\n\r\nexport class Node extends DiagramElement {\r\n    public $edges: Association[] = [];\r\n    public $minWidth: number = 150;\r\n    public $minheight: number = 25;\r\n    public $defaulEdgeType: string;\r\n\r\n    constructor(data: JSON|string|Object|any) {\r\n        super();\r\n\r\n        // default size\r\n        this.withSize(this.$minWidth, this.$minheight);\r\n\r\n        if (data) {\r\n            if (data['x'] && data['y']) {\r\n                this.withPos(data['x'], data['y']);\r\n            }\r\n            if (data['width'] || data['height']) {\r\n                this.withSize(data['width'], data['height']);\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos = this.getPos();\r\n        const size = this.getSize();\r\n\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x - size.x / 2,\r\n            y: pos.y - size.y / 2,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y,\r\n            width: size.x,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        const shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'middle',\r\n            'font-family': 'Verdana',\r\n            'font-size': '14',\r\n            fill: 'black'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = this.id;\r\n\r\n        let group = this.createShape({tag: 'g', id: this.id});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public copy(): Node {\r\n        let copy: Node;\r\n        // create new id\r\n        let model = <GraphModel>this.$owner || <GraphModel>this.getRoot();\r\n        if (model) {\r\n            let type = this.property || Node.name;\r\n            let newId = model.getNewId(type);\r\n            copy = <Node>model.createElement(type, newId, null);\r\n            copy.withSize(this.getSize().x, this.getSize().y);\r\n            copy.$owner = model;\r\n        } else {\r\n            copy.id = this.id + '-copy';\r\n            copy.$owner = this.getRoot();\r\n        }\r\n        return copy;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n// EMPTY\r\n    }\r\n    public addAttribute(value: string): Attribute {\r\n        return null;\r\n    }\r\n    public getAttributes(): Attribute[] {\r\n        return null;\r\n    }\r\n    public addMethod(value: string): Method {\r\n        return null;\r\n    }\r\n    public updateLabel(newLabel: string): void {\r\n// EMPTY\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\n\r\nexport class SO extends DiagramElement {\r\n    public static create(element: Object) {\r\n        let result: SO = new SO();\r\n        for (let key in element) {\r\n            if (element.hasOwnProperty(key) === false) {\r\n                continue;\r\n            }\r\n            result.withKeyValue(key, element[key]);\r\n\r\n        }\r\n        return result;\r\n    }\r\n\r\n    public withKeyValue(key: string, value: any): SO {\r\n        if (key === 'typ') {\r\n            this.property = value;\r\n        } else if (key === 'x') {\r\n            this.withPos(value, null);\r\n        } else if (key === 'y') {\r\n            this.withPos(null, value);\r\n        } else if (key === 'width') {\r\n            this.withSize(value, null);\r\n        } else if (key === 'height') {\r\n            this.withSize(null, value);\r\n        } else {\r\n            this[key] = value;\r\n        }\r\n        return this;\r\n    }\r\n}\r\n","import {Point} from '../BaseElements';\r\nimport {Node} from './Node';\r\n\r\nexport class StereoType extends Node {\r\n\r\n    protected stereoType: string;\r\n\r\n    constructor (type: string, x: number, y: number) {\r\n        super('');\r\n        this.withPos(x, y);\r\n        this.setStereoType(type);\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        let pos: Point = this.getPos();\r\n        let size: Point = this.getSize();\r\n\r\n               // = = = STEREOTYPE = = =\r\n        let stereoType = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y - this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': 10,\r\n            'font-weight': 'bold',\r\n            fill: 'black'\r\n        });\r\n        stereoType.textContent = this.stereoType;\r\n\r\n        this.$view = stereoType;\r\n        return stereoType;\r\n    }\r\n\r\n    public setStereoType(value: string): void {\r\n        this.stereoType = '<<' + value + '>>';\r\n    }\r\n\r\n    public getStereoType(): string {\r\n        return this.stereoType;\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { SO } from './SO';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport { Util } from '../../util';\r\n\r\nexport class Symbol extends Node {\r\n    public $heightMax: number = 0;\r\n    public $heightMin: number = 0;\r\n\r\n    constructor(typ: string) {\r\n        super(typ);\r\n    }\r\n\r\n    public draw(typ?: string): SVGElement {\r\n        return SymbolLibary.draw(this);\r\n    }\r\n}\r\n\r\n// \t\t\t\t###################################################### SymbolLibary ####################################################################################\r\n// Example Items\r\n// {tag: 'path', d: ''}\r\n// {tag: 'rect', width:46, height:34}\r\n// {tag: 'ellipse', width:23, height:4}\r\n// {tag: 'line', x1:650, y1:-286, x2:650, y2:-252}\r\n// {tag: 'circle', r:5, x:12, y:0}\r\n// {tag: 'image', height: 30, width: 50, content$src: hallo}\r\n// {tag: 'text', 'text-anchor': 'left', x: '10'}\r\nexport class SymbolLibary {\r\n\r\n    public static drawSVG(node: any): SVGSVGElement {\r\n        // const lib = new SymbolLibary();\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            const parent = SO.create(node);\r\n            parent['property'] = 'SVG';\r\n            symbol = fn(parent);\r\n            // symbol = fn.apply(lib, parent);\r\n\r\n            return SymbolLibary.createGroup(parent, symbol);\r\n        }\r\n        return symbol;\r\n    }\r\n\r\n    public static draw(node: any, parent?: Object): SVGElement {\r\n        // Node is Symbol or simple Object\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            if (!(node instanceof DiagramElement)) {\r\n                node = SO.create(node);\r\n                if (!node.property) {\r\n                    node.property = 'SVG';\r\n                }\r\n            }\r\n            symbol = fn.apply(this, [node]);\r\n            if (!parent) {\r\n                return SymbolLibary.createGroup(node, symbol);\r\n            }\r\n            return SymbolLibary.createGroup(node, symbol);\r\n        } else if (node.property) {\r\n            symbol = new Symbol(node.property);\r\n            symbol.init(node);\r\n            let pos = node.getPos();\r\n            let size = node.getSize();\r\n            symbol.withPos(pos.x, pos.y);\r\n            symbol.withSize(size.x, size.y);\r\n            symbol['value'] = node['value'];\r\n            parent = node['$parent'];\r\n            return SymbolLibary.draw(symbol, parent);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public static upFirstChar(txt: string): string {\r\n        return txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase();\r\n    }\r\n\r\n    public static isSymbolName(typ: string): boolean {\r\n        let fn = SymbolLibary['draw' + SymbolLibary.upFirstChar(typ)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static isSymbol(node: Symbol) {\r\n        let fn = SymbolLibary[SymbolLibary.getName(node)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static getName(node: any): string {\r\n        if (node['type']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['type']);\r\n        }\r\n        if (node.property) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node.property);\r\n        }\r\n        if (node['src']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['src']);\r\n        }\r\n        return 'drawNode';\r\n    }\r\n\r\n    /*FIXME   public static createImage(node: Symbol, $graphModel:Node) {\r\n           let n, img: HTMLElement;\r\n           // node.$graphModel = node;\r\n           if (SymbolLibary.isSymbol(node)) {\r\n               return SymbolLibary.draw(null, node);\r\n           }\r\n           n = {tag: 'img', $graphModel: node, src: node['src']};\r\n           let size = node.getSize();\r\n           if (size.isEmpty() === false) {\r\n               n['width'] = size.x;\r\n               n['height'] = size.y;\r\n           } else {\r\n               n['xmlns'] = 'http://www.w3.org/1999/xhtml';\r\n           }\r\n           img = Util.create(n);\r\n           if (size.isEmpty()) {\r\n               $graphModel.appendImage(img);\r\n               return null;\r\n           }\r\n           return img;\r\n       }*/\r\n\r\n    public static createGroup(node: DiagramElement, group: any) {\r\n        let func, y: number, z: number, box, item: Element, transform, i, offsetX = 0, offsetY = 0;\r\n        let svg: any;\r\n        if (node.property.toUpperCase() === 'HTML') {\r\n            let so = {\r\n                tag: 'svg',\r\n                style: { left: (group.x | 0) + node.getPos().x, top: (group.y | 0) + node.getPos().y, position: 'absolute' }\r\n            };\r\n            if (node['transform']) {\r\n                so['transform'] = node['transform'];\r\n            }\r\n            svg = Util.create(so);\r\n        } else {\r\n            svg = Util.create({ tag: 'g' });\r\n            transform = 'translate(' + group.getPos().x + ' ' + group.getPos().y + ')';\r\n            if (group.scale) {\r\n                transform += ' scale(' + group.scale + ')';\r\n            }\r\n            if (group.rotate) {\r\n                transform += ' rotate(' + group.rotate + ')';\r\n            }\r\n            svg.setAttribute('transform', transform);\r\n            if (group['id']) {\r\n                svg.id = group['id'];\r\n            }\r\n        }\r\n\r\n        if (node['tooltip']) {\r\n            const tooltipTitleAttr = {\r\n                tag: 'title'\r\n            };\r\n            let tooltipTitle = Util.createShape(tooltipTitleAttr);\r\n            tooltipTitle.textContent = node['tooltip'];\r\n            svg.appendChild(tooltipTitle);\r\n        }\r\n\r\n        if (node['background']) {\r\n            const attrCircle = {\r\n                tag: 'circle',\r\n                cx: 20,\r\n                cy: 20,\r\n                r: 17,\r\n                stroke: '#888',\r\n                'stroke-width': 0,\r\n                fill: '#DDD'\r\n            };\r\n            svg.appendChild(Util.create(attrCircle));\r\n        }\r\n\r\n        for (i = 0; i < group.items.length; i += 1) {\r\n            svg.appendChild(Util.create(group.items[i]));\r\n        }\r\n        let elements = node['elements'];\r\n        Util.setSize(svg, group.width + node.getSize().x, group.height + node.getSize().y);\r\n        node['$heightMin'] = node.getSize().y;\r\n        if (elements) {\r\n            for (i = 0; i < elements.length; i += 1) {\r\n                if (!elements[i] && elements[i].length < 1) {\r\n                    elements.splice(i, 1);\r\n                    i -= 1;\r\n                }\r\n            }\r\n            box = Util.create({ tag: 'g' });\r\n            // Calculate new Height\r\n            let c: number;\r\n            z = 0;\r\n            for (c = 0; c < elements.length; c += 1) {\r\n                if (typeof elements[c] === 'string') {\r\n                    z += 1;\r\n                } else {\r\n                    z += elements[c].length;\r\n                }\r\n            }\r\n            z = z * 25 + 6;\r\n            box.appendChild(Util.create({\r\n                tag: 'rect',\r\n                rx: 0,\r\n                x: offsetX,\r\n                y: (offsetY + 28),\r\n                width: 70,\r\n                height: z,\r\n                stroke: '#000',\r\n                fill: '#fff',\r\n                opacity: '0.7'\r\n            }));\r\n            node['$heightMax'] = z + node['$heightMin'];\r\n\r\n            svg['elements'] = elements;\r\n            if (node['type'] === 'DropDown') {\r\n                svg['activ'] = Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': 60,\r\n                    'x': (10 + offsetX),\r\n                    'y': 20,\r\n                    value: node['activText']\r\n                });\r\n                svg.appendChild(svg.activ);\r\n            }\r\n\r\n            y = offsetY + 46;\r\n            // 46 -28 = 18\r\n\r\n            func = function (event: Event) {\r\n                if (svg.activ) {\r\n                    svg.activ.textContent = (<any>event.currentTarget).value;\r\n                }\r\n            };\r\n            let txt: string;\r\n            let textClass = 'SVGTEXT';\r\n            for (z = 0; z < elements.length; z += 1) {\r\n                if (typeof elements[z] === 'string') {\r\n                    txt = elements[z];\r\n                } else {\r\n                    item = this.addText(y, offsetX, box, elements[z][0], 'SVGTEXT');\r\n                    y += 26;\r\n                    for (c = 1; c < elements[z].length; c += 1) {\r\n                        item = this.addText(y, offsetX, box, '* ' + elements[z][c], 'SVGTEXTITEM');\r\n\r\n                        item['value'] = elements[z];\r\n                        if (node['action']) {\r\n                            item['onclick'] = node['action'];\r\n                        } else {\r\n                            item['onclick'] = func;\r\n                        }\r\n                        y += 26;\r\n                    }\r\n                    txt = elements[z];\r\n                    let subBox = Util.create({\r\n                        tag: 'rect',\r\n                        rx: 0,\r\n                        x: offsetX,\r\n                        y: (offsetY + 28),\r\n                        width: 60,\r\n                        height: z,\r\n                        stroke: '#000',\r\n                        fill: '#fff',\r\n                        opacity: '0.7'\r\n                    });\r\n                    continue;\r\n                }\r\n                // let txt = elements[z];\r\n                item = this.addText(y, offsetX, box, txt, textClass);\r\n\r\n                item['value'] = elements[z];\r\n                if (node['action']) {\r\n                    item['onclick'] = node['action'];\r\n                } else {\r\n                    item['onclick'] = func;\r\n                }\r\n                y += 26;\r\n            }\r\n            svg.choicebox = box;\r\n        }\r\n        svg.tool = node;\r\n        svg.onclick = function () {\r\n            if (svg.status === 'close') {\r\n                svg.open();\r\n            } else {\r\n                svg.close();\r\n            }\r\n        };\r\n        svg.close = function () {\r\n            if (svg.status === 'open' && svg.choicebox) {\r\n                this.removeChild(svg.choicebox);\r\n            }\r\n            svg.status = 'close';\r\n            svg.tool.$size.height = svg.tool.heightMin;\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x, g.tool.height + g.tool.y);\r\n            Util.setSize(svg, svg.tool.$size.x, svg.tool.$size.y);\r\n        };\r\n        svg.open = function () {\r\n            if (this.tagName === 'svg') {\r\n                return;\r\n            }\r\n            if (svg.status === 'close' && svg.choicebox) {\r\n                this.appendChild(svg.choicebox);\r\n            }\r\n            svg.status = 'open';\r\n            svg.tool.$size.height = svg.tool.heightMax;\r\n            Util.setSize(svg, svg.tool.width, svg.tool.height);\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x + 10, g.tool.height + g.tool.y + 10);\r\n        };\r\n        svg.close();\r\n        return svg;\r\n    }\r\n\r\n    public static addChild(parent: SVGElement, json: JSON | Element): void {\r\n        let item: Element;\r\n        if ((<any>json).offsetLeft) {\r\n            item = <Element>json;\r\n        } else {\r\n            item = Util.create(json);\r\n        }\r\n        item.setAttribute('class', 'draggable');\r\n        parent.appendChild(item);\r\n    }\r\n\r\n    public static all(node: any): void {\r\n        SymbolLibary.drawSmiley(node);\r\n        SymbolLibary.drawDatabase(node);\r\n        SymbolLibary.drawLetter(node);\r\n        SymbolLibary.drawMobilephone(node);\r\n        SymbolLibary.drawWall(node);\r\n        SymbolLibary.drawActor(node);\r\n        SymbolLibary.drawLamp(node);\r\n        SymbolLibary.drawArrow(node);\r\n        SymbolLibary.drawButton(node);\r\n        SymbolLibary.drawDropdown(node);\r\n        SymbolLibary.drawClassicon(node);\r\n        SymbolLibary.drawClassWithEdgeicon(node);\r\n    }\r\n\r\n    public static drawHamburger(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'circle', r: 10, fill: '#ccc', cx: 12, cy: 12, 'stroke-width': 1, stroke: 'black'},\r\n                { tag: 'path', d: 'M 8,7 H 16 M 8,12 H 16 M 8,17 H 16', stroke: 'black', fill: 'none' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawSmiley(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'path', d: 'm49.01774,25.64542a24.5001,24.5 0 1 1 -49.0001,0a24.5001,24.5 0 1 1 49.0001,0z', stroke: 'black', fill: 'none' }, { tag: 'path', d: 'm8,31.5c16,20 32,0.3 32,0.3' },\r\n                { tag: 'path', d: 'm19.15,20.32a1.74,2.52 0 1 1 -3.49,0a1.74,2.52 0 1 1 3.49,0z' },\r\n                { tag: 'path', d: 'm33,20.32a1.74,2.52 0 1 1 -3.48,0a1.74,2.52 0 1 1 3.48,0z' },\r\n                { tag: 'path', d: 'm5.57,31.65c3.39,0.91 4.03,-2.20 4.03,-2.20' },\r\n                { tag: 'path', d: 'm43,32c-3,0.91 -4,-2.20 -4.04,-2.20' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDatabase(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 40,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,-6.26 25.03,-6.26 25.03,0l0,25.82c0,6.26 -25.03,6.26 -25.03,0l0,-25.82z',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLetter(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 17,\r\n            items: [\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1,1l22,0l0,14l-22,0l0,-14z' },\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1.06,1.14l10.94,6.81l10.91,-6.91' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMobilephone(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 4.2 0.5 15.61 0c 2 0 3.7 1.65 3.7 3.7l 0 41.6c 0 2-1.65 3.7-3.7 3.7l-15.6 0c-2 0-3.7-1.6-3.7-3.7l 0-41.6c 0-2 1.6-3.7 3.7-3.7z',\r\n                    fill: 'none',\r\n                    stroke: 'black'\r\n                },\r\n                { tag: 'path', d: 'm 12.5 2.73a 0.5 0.5 0 1 1-1 0 0.5 0.5 0 1 1 1 0z' },\r\n                { tag: 'path', d: 'm 14 46a 2 2 0 1 1-4 0 2 2 0 1 1 4 0z' },\r\n                { tag: 'path', d: 'm 8 5 7 0' },\r\n                { tag: 'path', d: 'm 1.63 7.54 20.73 0 0 34-20.73 0z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawWall(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'path', d: 'm26,45.44l-5,3.56l-21,-9l0,-36.41l5,-3.56l20.96,9l-0,36.4z' },\r\n                {\r\n                    tag: 'path',\r\n                    stroke: 'white',\r\n                    d: 'm2.21,11l18.34,7.91m-14.46,-12.57l0,6.3m8.2,21.74l0,6.35m-8.6,-10l0,6.351m4.1,-10.67l0,6.3m4.8,-10.2l0,6.3m-8.87,-10.23l0,6.35m4.78,-10.22l0,6.35m-8,14.5l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m0,-13l0,34m-18.23,-41.84l18.3,8m0,0.11l5,-3.57'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawActor(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'line', stroke: '#000', x1: '12', y1: '10', x2: '12', y2: '30' },\r\n                { tag: 'circle', stroke: '#000', cy: '5', cx: '12', r: '5' },\r\n                { tag: 'line', stroke: '#000', y2: '18', x2: '25', y1: '18', x1: '0' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '5', y1: '30', x1: '12' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '20', y1: '30', x1: '12' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLamp(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 22.47 10.58c-6.57 0-11.89 5.17-11.89 11.54 0 2.35 0.74 4.54 2 6.36 2 4 4.36 5.63 4.42 10.4l 11.15 0c 0.12-4.9 2.5-6.8 4.43-10.4 1.39-1.5 1.8-4.5 1.8-6.4 0-6.4-5.3-11.5-11.9-11.5z',\r\n                    fill: 'white',\r\n                    stroke: 'black'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 40 8 0c 0.58 0 1 0.5 1 1 0 0.6-0.5 1-1 1l-8 0c-0.6 0-1-0.47-1-1 0-0.58 0.47-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 42.7 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 45.3 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                { tag: 'path', d: 'm 19.5 48c 0.37 0.8 1 1.3 1.9 1.7 0.6 0.3 1.5 0.3 2 0 0.8-0.3 1.4-0.8 1.9-1.8z' },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 6 37.5 4.2-4c 0.3-0.3 0.8-0.3 1 0 0.3 0.3 0.3 0.8 0 1.1l-4.2 4c-0.3 0.3-0.8 0.3-1.1 0-0.3-0.3-0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 39 37.56-4.15-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 38 23 5.8 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.8 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 1.3 23 6 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.9 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 34.75 11.2 4-4.1c 0.3-0.3 0.3-0.8 0-1-0.3-0.3-0.8-0.3-1 0l-4 4.1c-0.3 0.3-0.3 0.8 0 1 0.3 0.3 0.8 0.3 1 0z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 11.23 10-4-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 21.64 1.3 0 5.8c 0 0.4 0.3 0.8 0.8 0.8 0.4 0 0.8-0.3 0.8-0.8l 0-5.8c 0-0.4-0.3-0.8-0.8-0.8-0.4 0-0.8 0.3-0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 26.1 24.3c-0.5 0-1 0.2-1.3 0.4-1.1 0.6-2 3-2.27 3.5-0.26-0.69-1.14-2.9-2.2-3.5-0.7-0.4-2-0.7-2.5 0-0.6 0.8 0.2 2.2 0.9 2.9 1 0.9 3.9 0.9 3.9 0.9 0 0 0 0 0 0 0.54 0 2.8 0 3.7-0.9 0.7-0.7 1.5-2 0.9-2.9-0.2-0.3-0.7-0.4-1.2-0.4z'\r\n                },\r\n                { tag: 'path', d: 'm 22.5 28.57 0 10.7' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawStop(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 30,\r\n            height: 30,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: '#FFF',\r\n                    'stroke-width': '2',\r\n                    stroke: '#B00',\r\n                    d: 'm 6,6 a 14,14 0 1 0 0.06,-0.06 z m 0,0 20,21'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMin(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    d: 'm 0,0 19,0 0,19 -19,0 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 13,-0.04'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawArrow(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 10,\r\n            height: 9,\r\n            rotate: node['rotate'],\r\n            items: [\r\n                { tag: 'path', fill: '#000', stroke: '#000', d: 'M 0,0 10,4 0,9 z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMax(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    'stroke-dashoffset': 2,\r\n                    'stroke-dasharray': '4.8,4.8',\r\n                    d: 'm 0,0 4.91187,0 5.44643,0 9.11886,0 0,19.47716 -19.47716,0 0,-15.88809 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 6,0.006 0.02,5 0.01,-11 -0.03,6.02 c 2,-0.01 4,-0.002 6,0.01'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawButton(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight, btnValue;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        btnValue = node['value'] || '';\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: 60,\r\n            height: 28,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 8,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    filter: 'url(#drop-shadow)',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                { tag: 'text', $font: true, x: 10, y: 18, fill: 'black', value: btnValue, 'class': 'hand' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDropdown(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 0,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth - 20,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 2,\r\n                    x: btnWidth - 20,\r\n                    y: 0,\r\n                    width: 20,\r\n                    height: 28,\r\n                    stroke: '#000',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    style: 'fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1',\r\n                    d: 'm ' + (btnWidth - 15) + ',13 10,0 L ' + (btnWidth - 10) + ',20 z'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassicon(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.19999l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm25.68807,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.2l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                { tag: 'line', x1: 11, y1: 7, x2: 25, y2: 7, stroke: '#000' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassWithEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M2,10 20,10 20,35 2,35 Z M2,17 20,17 M20,10 28,5 28,9 M 28.5,4.7 24,4',\r\n                    style: 'fill:none;stroke:#000000;transform:scale(0.8);'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClass(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: '100%',\r\n            height: '100%',\r\n            items: [\r\n                { tag: 'rect', width: 50, height: 40, x: 0, y: 0, 'stroke-width': 2, stroke: 'black', fill: 'none'},\r\n                { tag: 'rect', width: 50, height: 12, x: 0, y: 18, 'stroke-width': 1, stroke: 'black', fill: 'none'},\r\n                { tag: 'text', x: 27, y: 14, 'text-anchor': 'middle', 'font-size': 11, value: 'Class'},\r\n                { tag: 'text', x: 5, y: 24, 'font-size': 5, value: '+ field: type'},\r\n                { tag: 'text', x: 5, y: 36, 'font-size': 5, value: '+ method(type)'}\r\n            ]\r\n        });\r\n    }\r\n/*\r\n<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n    <g>\r\n    <text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text>\r\n        <text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>\r\n*/\r\n\r\n    public static drawEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M10,30 30,10 M19,10 30,10 30,21',\r\n                    style: 'fill:none;stroke:#555;stroke-width:2;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawCopynode(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M5 5 L15 5 L15 20 L5 20 Z M5 10 L15 10',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M8 2 L18 2 L18 17 L8 17 Z M8 7 L18 7'\r\n                        + 'M11 4.5 L15 4.5 '\r\n                        + 'M10 10 L16 10 '\r\n                        + 'M10 13 L16 13 ',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawBasket(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M12 12 L18 12 L18 11 L22 11 L22 12 L28 12 L28 14 L27 14 L27 29 L13 29 L13 14 L12 14 Z M13 14 L27 14 M20 17 L20 26 M17 16 L17 27 M23 16 L23 27',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawPencil(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M6 20 L12 23 L33 23 L33 17 L12 17 Z M30 17 L30 23 M12 17 L12 23 M15 19 L28 19 M15 21 L28 21',\r\n                    stroke: '#000',\r\n                    'stroke-width': 1,\r\n                    fill: 'white'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    private static addText(y: number, offsetX: number, box: Element, text: string, textClass: string): Element {\r\n        let item: Element;\r\n        box.appendChild(Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'text-anchor': 'left',\r\n            width: 70,\r\n            x: 10,\r\n            y: y,\r\n            class: textClass,\r\n            value: text,\r\n            eventValue: text\r\n        }));\r\n        if (textClass === 'SVGTEXT') {\r\n            textClass = 'SVGChoiceText';\r\n        } else {\r\n            textClass = 'SVGChoice';\r\n        }\r\n\r\n        item = Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            x: offsetX,\r\n            y: y - 18,\r\n            width: 70,\r\n            height: 24,\r\n            stroke: 'none',\r\n            class: textClass,\r\n        });\r\n        item['eventValue'] = text;\r\n        box.appendChild(item);\r\n        return item;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n}\r\n","import {Control} from '../../Control';\r\nimport BridgeElement from '../../BridgeElement';\r\nimport Data from '../../Data';\r\nimport {Util} from '../../util';\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Table extends Control {\r\n    protected items: BridgeElement[] = [];\r\n    private columns: Column[] = [];\r\n    private cells: Object = {};\r\n    private $bodysection: HTMLTableSectionElement;\r\n    private $headersection: HTMLTableSectionElement;\r\n    private showedItems: Array<BridgeElement> = [];\r\n    // BridgeElements:\r\n    private itemsIds: Object = {};\r\n    private countElement: HTMLElement;\r\n    private countColumn: HTMLElement;\r\n    private countColumnPos: number;\r\n    private resultColumn: string;\r\n    private lastSearchText: string;\r\n    private searchColumns: Array<string> = [];\r\n    private searchText: Array<string> = [];\r\n    private sortColumn: Column;\r\n    private direction: number;\r\n    private moveElement: Column = null;\r\n    private isDrag: boolean = false;\r\n    private moveTimeStamp: number;\r\n    private moveX: number;\r\n    private movePos: number;\r\n    private dragColumn: Column;\r\n    private dragPos: number;\r\n    private tableOption: HTMLTableHeaderCellElement;\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    private static indexOfChild(item: BridgeElement) {\r\n        let i: number = 0;\r\n        let child: Node = item.gui;\r\n        while ((child = child.previousSibling) !== null) {\r\n            i++;\r\n        }\r\n        return i;\r\n    }\r\n\r\n    public load(data: any): void {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n            if (data.property) {\r\n                this.property = data.property;\r\n            }\r\n\r\n            if (data.searchColumns) {\r\n                let search: Array<string> = [];\r\n                if (typeof(data.searchColumns) === 'string') {\r\n                    search = data.searchColumns.split(' ');\r\n                } else {\r\n                    search = data.searchColumns;\r\n                }\r\n                for (let z: number = 0; z < search.length; z++) {\r\n                    let item = search[z].trim();\r\n                    if (item.length > 0) {\r\n                        if (this.searchColumns.indexOf(item) < 0) {\r\n                            this.searchColumns.push(item);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        if (this.$view) {\r\n            // Must be an Update\r\n            if (data['columns']) {\r\n                // It is a json must add all things and generate HTML\r\n                for (let i in data['columns']) {\r\n                    if (data['columns'].hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    let col = this.parseData(data['columns'][i]);\r\n                    this.addHeaderInfo(col);\r\n                    this.columns.push(col);\r\n                    this.tableOption.parentElement.insertBefore(col.$element, this.tableOption);\r\n                }\r\n                for (let i in this.showedItems) {\r\n                    let item: BridgeElement = this.showedItems[i];\r\n                    let cell;\r\n                    // Now Add some Children\r\n                    while (item.gui.children.length < this.columns.length) {\r\n                        cell = document.createElement('td');\r\n                        item.gui.appendChild(cell);\r\n                    }\r\n                    // Now Remove Some Children\r\n                    while (item.gui.children.length > this.columns.length) {\r\n                        item.gui.removeChild(item.gui.children[item.gui.children.length - 1]);\r\n                    }\r\n                    for (let c: number = 0; c < this.columns.length; c++) {\r\n                        let name = this.columns[c].attribute;\r\n                        // let count = this.columns.length;\r\n                        cell = item.gui.children[c];\r\n                        cell.innerHTML = item.model.getValue(name);\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n\r\n        this.$view = document.getElementById(id);\r\n        let headerrow: HTMLTableRowElement;\r\n        if (this.$view) {\r\n            if (!this.property) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('table');\r\n            this.$owner.appendChild(this);\r\n        }\r\n        if (!this.$bodysection) {\r\n            // add tbody element if missing\r\n            this.$bodysection = document.createElement('tbody');\r\n            this.$view.appendChild(this.$bodysection);\r\n        }\r\n        if (data['classname']) {\r\n            this.$view.className = data['classname'];\r\n        } else {\r\n            this.$view.className = 'mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp';\r\n        }\r\n\r\n        this.id = id;\r\n        this.$view.id = id;\r\n        this.$view.setAttribute('type', this.constructor['name'].toLowerCase());\r\n        let counter = 0;\r\n        for (let c = 0; c < this.$view.children.length; c++) {\r\n            let row: HTMLTableRowElement = <HTMLTableRowElement>this.$view.children[c];\r\n            if (row instanceof HTMLTableSectionElement) {\r\n                if (row.tagName === 'THEAD') {\r\n                    headerrow = row;\r\n                    // Its a thead\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingHeader(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                } else {\r\n                    // Its a tbody\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingData(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                }\r\n            } else {\r\n                // fallback, if there are no thead and tbody...\r\n                if (counter === 0) {\r\n                    headerrow = row;\r\n                    this.parsingHeader(row);\r\n                } else {\r\n                    this.parsingData(row);\r\n                }\r\n            }\r\n            counter++;\r\n        }\r\n        if (!headerrow || !this.$headersection) {\r\n            if (!this.$headersection) {\r\n                // find eventually existing thead\r\n                let header = this.$view.getElementsByTagName('thead');\r\n                if (header.length === 0) {\r\n                    this.$headersection = document.createElement('thead');\r\n                    this.$view.appendChild(this.$headersection);\r\n                } else {\r\n                    // take first thead element\r\n                    this.$headersection = <HTMLTableSectionElement>header.item(0);\r\n                }\r\n            }\r\n            if (!headerrow) {\r\n                headerrow = document.createElement('tr');\r\n                this.$headersection.appendChild(headerrow);\r\n            }\r\n        }\r\n\r\n        if (data['columns']) {\r\n            // It is a json must add all things and generate HTML\r\n            for (let i in data['columns']) {\r\n                if (data['columns'].hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                let col = this.parseData(data['columns'][i]);\r\n                this.addHeaderInfo(col);\r\n                this.columns.push(col);\r\n                headerrow.appendChild(col.$element);\r\n            }\r\n            this.tableOption = document.createElement('th');\r\n            this.tableOption.classList.add('tableOption');\r\n            headerrow.appendChild(this.tableOption);\r\n            let context: HTMLElement = this.addOptionItem(null, this.tableOption, true);\r\n            let contentChild: HTMLElement = this.addOptionItem('show', context, true);\r\n            // let simpleLink: HTMLElement = this.addOptionItem('show', contentChild, false);\r\n            this.addOptionItem('show', contentChild, false);\r\n        }\r\n        this.registerEvents(['mousemove', 'mousedown', 'mouseup', 'resize', 'dragstart', 'dragover', 'drop', 'dragend']);\r\n\r\n        // Check for SearchBar\r\n        // if(data[\"searchproperty\"]){\r\n        // Create Full Row\r\n        let searchBar = document.createElement('tr');\r\n        let cell = document.createElement('td');\r\n        cell.setAttribute('colspan', '' + (this.columns.length));\r\n        searchBar.appendChild(cell);\r\n\r\n        let search = document.createElement('input');\r\n        search.className = 'search';\r\n        let that = this;\r\n        search.addEventListener('keyup', function (evt) {\r\n            that.search(evt.target['value']);\r\n        });\r\n\r\n        cell.appendChild(search);\r\n        if (this.resultColumn) {\r\n            if (this.resultColumn.indexOf('#') !== 0) {\r\n                this.countElement = document.createElement('div');\r\n                searchBar.appendChild(this.countElement);\r\n            } else {\r\n                for (let z: number = 0; z < this.$headersection.children.length; z++) {\r\n                    if (this.$headersection.children[z].innerHTML === this.resultColumn) {\r\n                        this.countColumn = <HTMLElement> this.$headersection.children[z];\r\n                        this.countColumnPos = z;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        let first = this.$headersection.children.item(0);\r\n        this.$headersection.insertBefore(searchBar, first);\r\n\r\n        this.updateElement(this.property, null);\r\n\r\n        // now update those elements, that were not loaded currently\r\n    }\r\n\r\n    public tableEvent(type: string, e: Event) {\r\n        let button: number = 0;\r\n        let eventX: number = 0;\r\n        if (e instanceof MouseEvent) {\r\n            button = e.buttons;\r\n            eventX = e.pageX;\r\n        }\r\n        if (type === 'mouseup') {\r\n            this.moveElement = null;\r\n        } else if (type === 'mousedown' || type === 'resize') {\r\n            // End to Resize\r\n            this.moveElement = null;\r\n            if (button === 1) {\r\n                let c: number;\r\n                for (c = 0; c < this.columns.length; c++) {\r\n                    if (this.columns[c].$resize === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = false;\r\n                        break;\r\n                    } else if (this.columns[c].$element === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = true;\r\n                    }\r\n                }\r\n                this.moveTimeStamp = e.timeStamp;\r\n                this.moveX = eventX;\r\n            } else {\r\n                this.moveTimeStamp = 0;\r\n            }\r\n        } else if (type === 'mousemove') {\r\n            if (button === 1 && this.moveElement) {\r\n                if (this.moveTimeStamp && e.timeStamp - this.moveTimeStamp < 2000) {\r\n                    if (this.isDrag) {\r\n                        // FIXME\r\n                    } else {\r\n                        let x = eventX - this.moveX;\r\n                        let width = this.moveElement.$element.offsetWidth;\r\n                        this.moveElement.$element.width = '' + (width + x);\r\n                        e.stopPropagation();\r\n                    }\r\n                }\r\n                this.moveX = eventX;\r\n                this.moveTimeStamp = e.timeStamp;\r\n            }\r\n        } else if (this.isDrag) {\r\n            this.columnDragEvent(type, <DragEvent> e);\r\n        }\r\n    }\r\n\r\n    public parsingHeader(row: HTMLTableRowElement) {\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let column: HTMLTableHeaderCellElement = <HTMLTableHeaderCellElement>row.children[i];\r\n            let id = column.innerHTML.trim();\r\n            let col: Column = null;\r\n            for (let c in this.columns) {\r\n                if (this.columns.hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                if (this.columns[c].label === id) {\r\n                    col = this.columns[c];\r\n                    col.$element = column;\r\n                    break;\r\n                }\r\n            }\r\n            if (col === null) {\r\n                col = new Column();\r\n                col.label = id;\r\n                col.attribute = column.getAttribute('attribute');\r\n                col.$element = column;\r\n                this.columns.push(col);\r\n            }\r\n            this.addHeaderInfo(col);\r\n        }\r\n    }\r\n\r\n    public parsingData(row: HTMLTableRowElement) {\r\n        let id = row.getAttribute('id');\r\n        let item: Data = this.$owner.getItem(id);\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let cell: HTMLTableCellElement = <HTMLTableCellElement>row.children[i];\r\n            let colAttribute = this.columns[i].attribute;\r\n            if (colAttribute.indexOf('\\.') < 0) {\r\n                item[colAttribute] = cell.innerHTML.trim();\r\n            }\r\n        }\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: Object, newValue: Object) {\r\n        if (entity) {\r\n            // Check for Show\r\n            if (this.property && !entity.hasProperty(property)) {\r\n                return;\r\n            }\r\n        }\r\n        if (entity.id === undefined) {\r\n            return;\r\n        }\r\n        let item: BridgeElement = <BridgeElement>this.itemsIds[entity.id];\r\n        let row: HTMLTableRowElement;\r\n        if (!item) {\r\n            item = new BridgeElement(entity);\r\n            this.items.push(item);\r\n            this.itemsIds[entity.id] = item;\r\n        }\r\n        row = this.cells[entity.id];\r\n        if (row) {\r\n            item.gui = row;\r\n        }\r\n        if (this.searching(item) === false) {\r\n            return;\r\n        }\r\n        let cell;\r\n        let showItem = false;\r\n\r\n        if (!row) {\r\n            showItem = true;\r\n            row = document.createElement('tr');\r\n            let count = this.columns.length;\r\n            for (let i = 0; i < count; i++) {\r\n                cell = document.createElement('td');\r\n                row.appendChild(cell);\r\n            }\r\n            this.cells[entity.id] = row;\r\n            item.gui = row;\r\n        }\r\n        for (let c: number = 0; c < this.columns.length; c++) {\r\n            let name = this.columns[c].attribute;\r\n            if (name === property) {\r\n                cell = row.children[c];\r\n                cell.innerHTML = <string>newValue;\r\n            }\r\n        }\r\n        if (showItem) {\r\n            this.showItem(item, true);\r\n        }\r\n        // super.propertyChange(entity, property, newValue, oldValue);\r\n    }\r\n\r\n    public sort(column: Column) {\r\n        if (this.sortColumn === column) {\r\n            if (this.direction === 1) {\r\n                this.direction = -1;\r\n                column.$element.classList.remove('asc');\r\n                column.$element.classList.add('desc');\r\n            } else {\r\n                this.direction = 1;\r\n                column.$element.classList.remove('desc');\r\n                column.$element.classList.add('asc');\r\n            }\r\n        } else {\r\n            if (this.sortColumn !== null) {\r\n                this.sortColumn.$element.classList.remove('desc');\r\n                this.sortColumn.$element.classList.remove('asc');\r\n            }\r\n            this.sortColumn = column;\r\n            this.sortColumn.$element.classList.add('asc');\r\n            this.direction = 1;\r\n        }\r\n        let that = this;\r\n        let sort = function (a: BridgeElement, b: BridgeElement) {\r\n            return that.sorting(a, b);\r\n        };\r\n        this.showedItems.sort(sort);\r\n        let len: number = this.showedItems.length;\r\n        let body = this.$bodysection;\r\n        let i = 0;\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            if (i !== Table.indexOfChild(item)) {\r\n                break;\r\n            }\r\n            i = i + 1;\r\n        }\r\n        while (body.children.length > i) {\r\n            body.removeChild(body.children.item(body.children.length - 1));\r\n        }\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            body.appendChild(item.gui);\r\n            i = i + 1;\r\n        }\r\n\r\n        //      body.removeChild(item.gui);\r\n        //      body.remove\r\n    }\r\n\r\n    public sorting(a: BridgeElement, b: BridgeElement): number {\r\n        let path: string[] = this.sortColumn.attribute.split('.');\r\n        let itemA = a.model.prop;\r\n        let itemB = b.model.prop;\r\n        let check = this.sortColumn.attribute;\r\n        for (let p = 0; p < path.length; p++) {\r\n            check = path[p];\r\n            if (itemA[check]) {\r\n                itemA = itemA[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n            if (itemB[check]) {\r\n                itemB = itemB[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n        if (itemA !== itemB) {\r\n            if (this.direction === 1) {\r\n                return (itemA < itemB) ? -1 : 1;\r\n            }\r\n            return (itemA < itemB) ? 1 : -1;\r\n\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    // Searching\r\n    public search(origSearchText: string): void {\r\n        if (!origSearchText) {\r\n            origSearchText = '';\r\n        }\r\n        let searchText: string = origSearchText.trim().toLowerCase();\r\n        if (searchText === this.lastSearchText && searchText !== '') {\r\n            return; // <==== nothing to be done\r\n        }\r\n        let oldSearch: string = this.lastSearchText;\r\n        this.lastSearchText = searchText;\r\n\r\n        this.parseSearchArray();\r\n        if (searchText !== '' && oldSearch !== null && searchText.indexOf(oldSearch) >= 0 && searchText.indexOf('|') < 0) {\r\n            this.searchArray(this.showedItems);\r\n        } else {\r\n            this.searchSet(this.items);\r\n        }\r\n        this.refreshCounter();\r\n    }\r\n\r\n    public refreshCounter() {\r\n        if (this.countColumn) {\r\n            this.countColumn.innerHTML = this.columns[this.countColumnPos].label + ' (' + this.showedItems.length + ')';\r\n        }\r\n        // var countElement = document.getElementById('talkCount');\r\n        //  if (countElement) {\r\n        //     var txt = (this.showedItems.size() > 0 && searchText.length > 0 ) ? this.options.TEXT_SEARCHLIST : this.options.TEXT_SEARCHFULLLIST;\r\n        //     countElement.innerHTML = txt.replace(\"%LEN%\", this.root['children'].length).replace(\"%COUNT%\", this.showedItems.size()).replace(\"%SEARCH%\", origSearchText);\r\n        // }\r\n        // if (this.countColumn) {\r\n        //     this.countColu1mn.innerHTML = this.countColumn[\"label\"] + \" (\" + this.showedItems.size() + \")\";\r\n        // }\r\n    }\r\n\r\n    public parseSearchArray() {\r\n        let pos: number = 0;\r\n        let split: Array<string> = [];\r\n        let quote: boolean = false;\r\n        for (let i: number = 0; i < this.lastSearchText.length; i++) {\r\n            if ((this.lastSearchText.charAt(i) === ' ') && !quote) {\r\n                let txt = this.lastSearchText.substring(pos, i).trim();\r\n                if (txt.length > 0) {\r\n                    split.push(txt);\r\n                }\r\n                pos = i + 1;\r\n            } else if (this.lastSearchText.charAt(i) === '\\\"') {\r\n                if (quote) {\r\n                    let txt = this.lastSearchText.substring(pos, i).trim();\r\n                    if (txt.length > 0) {\r\n                        split.push(txt);\r\n                    }\r\n                    pos = i + 1;\r\n                } else {\r\n                    pos = i + 1;\r\n                }\r\n                quote = !quote;\r\n            }\r\n        }\r\n        if (pos < this.lastSearchText.length) {\r\n            split.push(this.lastSearchText.substring(pos, this.lastSearchText.length).trim());\r\n        }\r\n        this.searchText = split;\r\n        return split;\r\n    }\r\n\r\n    public searchArray(root: Array<BridgeElement>) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let i: number = 0; i < root.length; i++) {\r\n            let item: BridgeElement = root[i];\r\n            this.showItem(item, this.searching(item));\r\n        }\r\n    }\r\n\r\n    public searchSet(root: BridgeElement[]) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let item of root) {\r\n            let child: BridgeElement = <BridgeElement>item;\r\n            this.showItem(child, this.searching(child));\r\n        }\r\n    }\r\n\r\n    public showItem(item: BridgeElement, visible: boolean) {\r\n        if (visible) {\r\n            this.showedItems.push(item);\r\n            this.$bodysection.appendChild(item.gui);\r\n        } else if (item.gui && item.gui.parentElement) {\r\n            this.$bodysection.removeChild(item.gui);\r\n        }\r\n    }\r\n\r\n    public searching(item: BridgeElement): boolean {\r\n        let fullText: string = '';\r\n        for (let i: number = 0; i < this.searchColumns.length; i++) {\r\n            fullText = fullText + ' ' + item.model.getValue(this.searchColumns[i]);\r\n        }\r\n        fullText = fullText.trim().toLowerCase();\r\n        for (let z: number = 0; z < this.searchText.length; z++) {\r\n            if ('' !== this.searchText[z]) {\r\n                let orSplit: Array<string>;\r\n                if (this.searchText[z].indexOf('|') > 0) {\r\n                    orSplit = this.searchText[z].split('|');\r\n                } else {\r\n                    orSplit = [this.searchText[z]];\r\n                }\r\n                let o: number = 0;\r\n                for (; o < orSplit.length; o++) {\r\n                    let pos: number = orSplit[o].indexOf(':');\r\n                    if (orSplit[o].indexOf('#') === 0 && pos > 1) {\r\n                        // if (searchProperties.contains(propString)) {\r\n                        let value: string = orSplit[o].substring(pos + 1);\r\n                        let column: string = orSplit[o].substring(1, pos - 1);\r\n                        let dataValue: Object = item.model.getValue(column);\r\n                        if (dataValue) {\r\n                            if (dataValue.toString().toLowerCase().indexOf(value) >= 0) {\r\n                                // Search for simple Property\r\n                                break;\r\n                            }\r\n                        }\r\n                    } else if (orSplit[o].length > 1 && orSplit[o].indexOf('-') === 0) {\r\n                        if (fullText.indexOf(orSplit[o].substring(1)) < 0) {\r\n                            break;\r\n                        }\r\n                    } else if (fullText.indexOf(orSplit[o]) >= 0) {\r\n                        // his search word is found in full text\r\n                        break;\r\n                    }\r\n                }\r\n                if (o === orSplit.length) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public getColumn(): Column[] {\r\n        return this.columns;\r\n    }\r\n\r\n    public updateElement(property: string, value: string): void {\r\n        // first clear all elements inside the table:\r\n        for (let item of this.items) {\r\n            if (item instanceof BridgeElement) {\r\n                (<BridgeElement>item).model.removeListener(this);\r\n            }\r\n        }\r\n\r\n        this.items = [];\r\n        this.itemsIds = {};\r\n\r\n        // load all entitys that match the property\r\n        if (this.property !== undefined) {\r\n            let items = this.$owner.getItems();\r\n            for (let j in items) {\r\n                if (items.hasOwnProperty(j)) {\r\n                    let item = items[j];\r\n                    if (item instanceof Data) {\r\n                        if (property === j) {\r\n                            // if (property == item.property) {\r\n                            let i = new BridgeElement(<Data>item);\r\n                            this.items.push(i);\r\n                            this.itemsIds[item.id] = i;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            this.redrawAllElements();\r\n        }\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        if (this.$owner !== null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    protected redrawAllElements() {\r\n        let children: HTMLCollection = this.$bodysection.children;\r\n        // remove old children\r\n        for (let i = 0; i < children.length; i++) {\r\n            let child = children.item(i);\r\n            // remove child\r\n            this.$bodysection.removeChild(child);\r\n        }\r\n\r\n        // load new children\r\n        for (let obj of this.items) {\r\n            // register listeners\r\n            obj.model.addListener(this);\r\n            // create tr\r\n            let row = this.createRow(obj);\r\n            this.$bodysection.appendChild(row);\r\n            this.cells[obj.id] = row;\r\n        }\r\n    }\r\n\r\n    private parseData(column: any): Column {\r\n        let col = new Column();\r\n        col.label = column.label || column.id;\r\n        col.attribute = column.attribute || column.label || column.id;\r\n        col.$element = document.createElement('th');\r\n        col.$element.innerHTML = col.label;\r\n        col.$element.draggable = true;\r\n\r\n        // resize Header\r\n        col.$resize = document.createElement('div');\r\n        col.$resize.classList.add('resize');\r\n        col.$element.appendChild(col.$resize);\r\n\r\n        return col;\r\n    }\r\n\r\n    private createRow(data: BridgeElement): HTMLTableRowElement {\r\n        let tr: HTMLTableRowElement = document.createElement('tr');\r\n\r\n        for (let id of this.columns) {\r\n            let td: HTMLTableDataCellElement = document.createElement('td');\r\n            tr.appendChild(td);\r\n            td.innerHTML = data.model.getValue(id.attribute);\r\n        }\r\n        return tr;\r\n    }\r\n\r\n    private addHeaderInfo(col: Column) {\r\n        let element: HTMLTableCellElement = col.$element;\r\n        let that = this;\r\n        element.classList.add('sort');\r\n        element.addEventListener('click',\r\n            function () {\r\n                that.sort(col);\r\n            },\r\n            false);\r\n    }\r\n\r\n    private columnDragEvent(type: string, e: DragEvent) {\r\n        if (type === 'dragstart') {\r\n            // Target (this) element is the source node.\r\n            this.moveElement.$element.style.opacity = '0.4';\r\n            e.dataTransfer.effectAllowed = 'move';\r\n            e.dataTransfer.setData('text/json', JSON.stringify(Util.toJson(this.moveElement)));\r\n        } else if (type === 'dragenter') {\r\n            // TO Nothing\r\n        } else if (type === 'dragleave') {\r\n            this.moveElement.$element.classList.remove('over');\r\n        } else if (type === 'dragover') {\r\n            if (e.preventDefault) {\r\n                e.preventDefault(); // Necessary. Allows us to drop.\r\n            }\r\n            for (let c = 0; c < this.columns.length; c++) {\r\n                if (this.columns[c].$element === e.target) {\r\n                    this.dragColumn = this.columns[c];\r\n                    this.dragPos = c;\r\n                    this.columns[c].$element.classList.add('over');\r\n                } else {\r\n                    this.columns[c].$element.classList.remove('over');\r\n                }\r\n            }\r\n            if (e.target === this.tableOption) {\r\n                this.tableOption.classList.add('over');\r\n                this.dragPos = this.columns.length;\r\n            } else {\r\n                this.tableOption.classList.remove('over');\r\n            }\r\n            e.dataTransfer.dropEffect = 'move';  // See the section on the DataTransfer object.\r\n        } else if (type === 'drop') {\r\n            // this / e.target is current target element.\r\n            if (e.stopPropagation) {\r\n                e.stopPropagation(); // stops the browser from redirecting.\r\n            }\r\n            if (this.movePos === this.dragPos) {\r\n                return;\r\n            }\r\n            // movePos -> dragPos\r\n            // See the section on the DataTransfer object.\r\n            // DataModel\r\n            this.columns.splice(this.movePos, 1);\r\n            if (this.movePos >= this.dragPos) {\r\n                this.columns.splice(this.dragPos, 0, this.moveElement);\r\n            } else {\r\n                this.columns.splice(this.dragPos - 1, 0, this.moveElement);\r\n            }\r\n\r\n            // Header Line\r\n            let line: HTMLElement = this.moveElement.$element.parentElement;\r\n            line.removeChild(this.moveElement.$element);\r\n            if (this.dragPos < this.columns.length) {\r\n                line.insertBefore(this.moveElement.$element, this.dragColumn.$element);\r\n            } else {\r\n                line.insertBefore(this.moveElement.$element, this.tableOption);\r\n            }\r\n\r\n            let oldElement: Element;\r\n            let newElement: Element;\r\n\r\n            // Now all Childs\r\n            for (let i = 0; i < this.$bodysection.children.length; i++) {\r\n                // Each line\r\n                line = <HTMLElement>this.$bodysection.children.item(i);\r\n                oldElement = line.children.item(this.movePos);\r\n                newElement = line.children.item(this.dragPos);\r\n                line.removeChild(oldElement);\r\n                line.insertBefore(oldElement, newElement);\r\n            }\r\n        } else if (type === 'dragend') {\r\n            // this/e.target is the source node.\r\n            this.moveElement.$element.style.opacity = '1';\r\n            for (let i = 0; i < this.columns.length; i++) {\r\n                this.columns[i].$element.classList.remove('over');\r\n            }\r\n            this.tableOption.classList.remove('over');\r\n        }\r\n    }\r\n\r\n    private addOptionItem(label: string, parent: HTMLElement, sub: boolean): HTMLElement {\r\n        let labelControl;\r\n        if (label) {\r\n            labelControl = document.createElement('a');\r\n            labelControl.appendChild(document.createTextNode(label));\r\n            labelControl.href = 'javascript:void(0);';\r\n            parent.appendChild(labelControl);\r\n        }\r\n        if (sub) {\r\n            let context = document.createElement('div');\r\n            context.classList.add('dropdown-content');\r\n            context.style.setProperty('position', 'absolute');\r\n            parent.appendChild(context);\r\n\r\n            /* When the user clicks on the button,\r\n             toggle between hiding and showing the dropdown content */\r\n            parent.addEventListener(\r\n                'click',\r\n                function () {\r\n                    context.classList.toggle('show');\r\n                },\r\n                false);\r\n            return context;\r\n        }\r\n        return labelControl;\r\n    }\r\n\r\n    private registerEvents(events: string[]) {\r\n        let that = this;\r\n        for (let i = 0; i < events.length; i++) {\r\n            this.$view.addEventListener(events[i], function (evt) {\r\n                return that.tableEvent(events[i], evt);\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\nclass Column {\r\n    label: string;\r\n    attribute: string;\r\n    $element: HTMLTableHeaderCellElement;\r\n    $resize: HTMLDivElement;\r\n    visible: boolean;\r\n}\r\n","import { AutoComplete } from './AutoComplete';\r\nimport { BR } from './BR';\r\nimport { Div } from './Div';\r\nimport { Label } from './Label';\r\n\r\nexport * from './Node';\r\nexport * from './Class';\r\nexport * from './SO';\r\nexport * from './Symbol';\r\n\r\nexport * from './BR';\r\nexport * from './Button';\r\nexport * from './Div';\r\nexport * from './Form';\r\nexport * from './Input';\r\nexport * from './Label';\r\nexport * from './Table';\r\nexport * from './HTML';\r\nexport * from './Dice';\r\nexport * from './AutoComplete';\r\nexport * from './Attribute';\r\nexport * from './Method';\r\nexport * from './ClazzProperty';\r\n\r\nnew AutoComplete();\r\nnew BR();\r\nnew Div();\r\nnew Label();\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class AddNode implements EventHandler {\r\n\r\n    public MIN_SIZE_TO_ADD_NODE: number = 30;\r\n    public MIN_SIZE_TO_ADD_TEXT: number = 10;\r\n    private graph: Graph;\r\n    private svgRect: SVGSVGElement;\r\n    private svgGroupAddNode: SVGSVGElement;\r\n    private svgTextAddNode: SVGSVGElement;\r\n    private svgTextRectAddNode: SVGSVGElement;\r\n    private isRectDrawing: boolean;\r\n    private isDrawToLeft: boolean;\r\n    private isDrawToTop: boolean;\r\n    private isBigEnoughForAddNode: boolean;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(AddNode.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(AddNode.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!this.canHandle()) {\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element.id !== 'RootElement') {\r\n            return false;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element.id === 'RootElement') {\r\n                    this.start(event, element);\r\n\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mousemove':\r\n                this.drawRect(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.removeRect();\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.addNode();\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawRect(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isRectDrawing) {\r\n            return;\r\n        }\r\n\r\n        evt.stopPropagation();\r\n\r\n        let width = Util.getEventX(evt) - this.x;\r\n        let height = Util.getEventY(evt) - this.y;\r\n\r\n        // rectangle is in a negative area, drawn to upper case. not possibble with svg\r\n        if (width < 0) {\r\n            this.isDrawToLeft = true;\r\n            width *= -1;\r\n        } else {\r\n            this.isDrawToLeft = false;\r\n        }\r\n\r\n        if (height < 0) {\r\n            this.isDrawToTop = true;\r\n            height *= -1;\r\n        } else {\r\n            this.isDrawToTop = false;\r\n        }\r\n\r\n        if (width > this.MIN_SIZE_TO_ADD_NODE && height > this.MIN_SIZE_TO_ADD_NODE) {\r\n            this.isBigEnoughForAddNode = true;\r\n        } else {\r\n            this.isBigEnoughForAddNode = false;\r\n        }\r\n\r\n        this.graph.root.style.cursor = 'pointer';\r\n\r\n        // if line wasnt draw\r\n        if (!this.svgRect) {\r\n\r\n            let rectAddNode = Util.createShape({\r\n                tag: 'rect',\r\n                id: 'addNodeRect',\r\n                x: this.x,\r\n                y: this.y,\r\n                width: 1,\r\n                height: 1,\r\n                class: 'SVGAddNode'\r\n            });\r\n\r\n            let group = Util.createShape({ tag: 'g', id: 'groupAddNode' });\r\n            group.appendChild(rectAddNode);\r\n\r\n            this.graph.root.appendChild(group);\r\n            this.svgRect = rectAddNode;\r\n            this.svgGroupAddNode = group;\r\n        }\r\n        else {\r\n\r\n            let svgRectBBox = this.svgRect.getBBox();\r\n\r\n            // if rect is big enough, show text as helper\r\n            if ((svgRectBBox.width > this.MIN_SIZE_TO_ADD_TEXT\r\n                || svgRectBBox.height > this.MIN_SIZE_TO_ADD_TEXT) && !this.svgTextAddNode) {\r\n\r\n                let textAddNode = Util.createShape({\r\n                    tag: 'text',\r\n                    x: this.x,\r\n                    y: this.y - 5,\r\n                    'font-family': 'Verdana',\r\n                    'font-size': 12,\r\n                    fill: 'black'\r\n                });\r\n                textAddNode.textContent = 'Hold on and move to create a new class';\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n\r\n\r\n                // get correct size of text node\r\n                let sizeClientRect: ClientRect = textAddNode.getBoundingClientRect();\r\n\r\n                let rectBackgroundForText = Util.createShape({\r\n                    tag: 'rect',\r\n                    x: this.x,\r\n                    y: this.y - sizeClientRect.height,\r\n                    width: sizeClientRect.width,\r\n                    height: sizeClientRect.height,\r\n                    fill: '#DDD',\r\n                    'stroke-width': 0\r\n                });\r\n\r\n                this.svgTextRectAddNode = rectBackgroundForText;\r\n                this.svgTextAddNode = textAddNode;\r\n                this.svgGroupAddNode.appendChild(rectBackgroundForText);\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n            }\r\n\r\n            if (this.isDrawToLeft) {\r\n                this.svgRect.setAttributeNS(null, 'x', '' + Util.getEventX(evt));\r\n            }\r\n\r\n            if (this.isDrawToTop) {\r\n                this.svgRect.setAttributeNS(null, 'y', '' + Util.getEventY(evt));\r\n            }\r\n\r\n            // set width and height\r\n            this.svgRect.setAttributeNS(null, 'width', width.toString());\r\n            this.svgRect.setAttributeNS(null, 'height', height.toString());\r\n\r\n            // set color\r\n            if (this.isBigEnoughForAddNode) {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode-ready');\r\n\r\n                // draw text\r\n            }\r\n            else {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeRect(): void {\r\n        this.isRectDrawing = false;\r\n        this.isBigEnoughForAddNode = false;\r\n\r\n        this.graph.root.style.cursor = 'default';\r\n\r\n        if (this.svgGroupAddNode) {\r\n            this.graph.root.removeChild(this.svgGroupAddNode);\r\n            this.svgGroupAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgRect) {\r\n            this.svgRect = undefined;\r\n        }\r\n\r\n        if (this.svgTextAddNode) {\r\n            this.svgTextAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgTextRectAddNode) {\r\n            this.svgTextRectAddNode = undefined;\r\n        }\r\n    }\r\n\r\n    private addNode(): void {\r\n\r\n        if (!this.isBigEnoughForAddNode) {\r\n            this.removeRect();\r\n            return;\r\n        }\r\n\r\n        this.removeRect();\r\n        let node = this.graph.addElementWithValues('Class', { x: this.x, y: this.y });\r\n        this.graph.drawElement(node);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isRectDrawing) {\r\n            return;\r\n        }\r\n        this.isRectDrawing = true;\r\n\r\n        this.x = Util.getEventX(evt);\r\n        this.y = Util.getEventY(evt);\r\n    }\r\n\r\n}\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement, Point } from '../elements/BaseElements';\r\nimport { GraphModel } from '../elements/Model';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Control } from '../Control';\r\nimport { Util } from '../util';\r\n\r\nexport class Drag implements EventHandler {\r\n\r\n    private element: DiagramElement;\r\n    private svgElement: SVGSVGElement;\r\n    private dragging = false;\r\n    private reinsert = false;\r\n    private mouseOffset = new Point();\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        if (!this.canHandle()) {\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if ((!this.dragging) && (element.id !== 'RootElement')) {\r\n                    this.element = element;\r\n                    this.svgElement = <SVGSVGElement>element.$view;\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mouseup':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n\r\n                break;\r\n            case 'mousemove':\r\n                if (this.dragging) {\r\n                    this.drag(event, element);\r\n                }\r\n                break;\r\n            case 'mouseleave':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Drag.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Drag.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private reset() {\r\n        this.dragging = false;\r\n        this.svgElement.style.cursor = 'pointer';\r\n\r\n        /*  WORKAROUND\r\n            Chrome got problem with the Node.appendChild() method.\r\n            Sometimes it works, sometimes not.\r\n            So the background is, in the drag method will the current element be appended\r\n            to front of the svg root.\r\n            If this happend, the click event won't fire.\r\n            So it will be fired manually.\r\n            This problem occurs only in chrome.\r\n        */\r\n        if (Util.isChrome()) {\r\n            let clickEvt = Util.createCustomEvent('click');\r\n            this.svgElement.dispatchEvent(clickEvt);\r\n        }\r\n    }\r\n\r\n    private start(evt: Event | any, element: Control) {\r\n\r\n        this.dragging = true;\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n        this.reinsert = true;\r\n\r\n        this.svgElement.style.cursor = 'move';\r\n    }\r\n\r\n    private drag(evt: Event | any, element: DiagramElement) {\r\n\r\n        if (this.reinsert) {\r\n            if (this.element.id !== 'RootElement') {\r\n                // nesseccary to set the dragged object on top of svg children\r\n                this.graph.root.appendChild(this.svgElement);\r\n            }\r\n\r\n            let dragEvent = Util.createCustomEvent('drag');\r\n            element.$view.dispatchEvent(dragEvent);\r\n        }\r\n        this.reinsert = false;\r\n\r\n        evt.stopPropagation();\r\n\r\n        const translation = this.svgElement.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        const sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        const transX = sx + evt.clientX - this.mouseOffset.x;\r\n        const transY = sy + evt.clientY - this.mouseOffset.y;\r\n        this.svgElement.setAttributeNS(null, 'transform', 'translate(' + transX + ' ' + transY + ')');\r\n        this.element.getPos().addNum(transX - sx, transY - sy);\r\n\r\n        if (this.element instanceof Node) {\r\n            (<Node>this.element).redrawEdges();\r\n        }\r\n\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n\r\n\r\n        // resize svg root\r\n        let maxX = this.element.getPos().x + this.element.getSize().x;\r\n        let maxY = this.element.getPos().y + this.element.getSize().y;\r\n\r\n        let domRectRoot = this.graph.root.getBoundingClientRect();\r\n        if(!domRectRoot){\r\n            return;\r\n        }\r\n\r\n        if(maxX > domRectRoot.width){\r\n            this.graph.root.setAttributeNS(null, 'width', '' + maxX);\r\n        }\r\n        \r\n        if(maxY > domRectRoot.height){\r\n            this.graph.root.setAttributeNS(null, 'height', '' + maxY);\r\n        }\r\n    }\r\n}\r\n","import PropertyChangeSupport from '../PropertyChangeSupport';\r\nimport Data from '../Data';\r\nimport {Adapter} from '../Adapter';\r\nimport ClazzProperty from '../elements/nodes/ClazzProperty';\r\n\r\nexport class GraphListener implements PropertyChangeSupport {\r\n    private $owner: ClazzProperty;\r\n\r\n    constructor(owner: ClazzProperty) {\r\n        this.$owner = owner;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        let adapter = this.$owner.getRoot().getAdapter();\r\n        if (adapter) {\r\n            // messages.add(\"{\\\"class\\\":\\\"de.uniks.networkparser.test.model.House\\\",\\\"id\\\":\\\"H1\\\",\\\"rem\\\":{\\\"floor\\\":4},\\\"upd\\\":{\\\"floor\\\":42}}\");\r\n            let myId =  this.$owner.$owner.getId();\r\n            if (myId && myId.length > 0) {\r\n                let pos = myId.indexOf(':');\r\n                if (pos > 0) {\r\n                    myId = myId.substring(0, pos).trim();\r\n                }\r\n            }\r\n            let myName = this.$owner.getName();\r\n            let remJson = {};\r\n            remJson[myName] = oldValue;\r\n            let updJson = {};\r\n            updJson[myName] = newValue;\r\n            let json = {};\r\n            json['id'] = myId;\r\n            json['rem'] = remJson;\r\n            json['upd'] = updJson;\r\n            let message = JSON.stringify(json);\r\n            (<Adapter> adapter).update(message);\r\n        }\r\n    }\r\n}\r\n","import {Graph} from '../elements/';\r\nimport {EventHandler, EventBus} from '../EventBus';\r\nimport {DiagramElement} from '../elements/';\r\nimport {Util} from '../util';\r\n\r\nexport class ImportFile implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(ImportFile.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(ImportFile.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        let type: string = typeof event;\r\n        if (type !== 'DragEvent') {\r\n            return false;\r\n        }\r\n        let evt: DragEvent = <DragEvent>event;\r\n        if (evt.type === 'dragover') {\r\n            this.handleDragOver(evt);\r\n        } else if (evt.type === 'dragleave') {\r\n            if (this.graph.$view !== evt.target) {\r\n                return false;\r\n            }\r\n            this.setBoardStyle('dragleave');\r\n        } else if (evt.type === 'drop') {\r\n            this.handleLoadFile(evt);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public setBoardStyle(typ: string): boolean {\r\n        let b = this.graph.$view;\r\n        Util.removeClass(b, 'Error');\r\n        Util.removeClass(b, 'Ok');\r\n        Util.removeClass(b, 'Add');\r\n        if (typ === 'dragleave') {\r\n            if (b['errorText']) {\r\n                b.removeChild(b['errorText']);\r\n                b['errorText'] = null;\r\n            }\r\n            return true;\r\n        }\r\n        Util.addClass(b, typ);\r\n        if (typ === 'Error') {\r\n            if (!b['errorText']) {\r\n                b['errorText'] = Util.create({tag: 'div', style: 'margin-top: 30%', value: 'NO TEXTFILE'});\r\n                b.appendChild(b['errorText']);\r\n            }\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private handleLoadFile(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n\r\n        let files = evt.dataTransfer.files; // FileList object.\r\n\r\n        if (files.length > 1) {\r\n            evt.dataTransfer.dropEffect = 'none';\r\n            return;\r\n        }\r\n\r\n        // files is a FileList of File objects. List some properties.\r\n        let reader  = new FileReader();\r\n        let output = [];\r\n        let htmlResult = '';\r\n        let that = this;\r\n        for (let i = 0, f; f = files[i]; i++) {\r\n            reader.onload = function(event) {\r\n                htmlResult = event.target['result'];\r\n                console.log('fileContent: ' + htmlResult);\r\n\r\n                // CHANGE TO INTERNAL OBJECT\r\n                if (that.graph) {\r\n                    that.graph.import(htmlResult);\r\n                }\r\n            };\r\n            reader.readAsText(f);\r\n        }\r\n        this.setBoardStyle('dragleave');\r\n    }\r\n\r\n    private handleDragOver(evt: DragEvent): void {\r\n        let error: boolean = true, n: string, f;\r\n        let files = evt.dataTransfer.files;\r\n        // process all File objects\r\n        if (files && files.length > 0) {\r\n            for (let i: number = 0; i < files.length; i += 1) {\r\n                f = files[i];\r\n                if (f.type.indexOf('text') === 0) {\r\n                    error = false;\r\n                } else if (f.type === '') {\r\n                    n = f.name.toLowerCase();\r\n                    if (n.indexOf('json', n.length - 4) !== -1) {\r\n                        error = false;\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            let items = evt.dataTransfer.items;\r\n            if (items && items.length > 0) {\r\n                for (let z = 0; z < items.length; z ++) {\r\n                    if (items[z].type === '' || items[z].type === 'text/plain') {\r\n                        error = false;\r\n                    }\r\n                }\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.\r\n        if (error) {\r\n            this.dragStyler(evt, 'Error');\r\n        } else if (evt.ctrlKey) {\r\n            this.dragStyler(evt, 'Add');\r\n        } else {\r\n            this.dragStyler(evt, 'Ok');\r\n        }\r\n        /* //evt.target['className'] += ' diagramLoadFile';\r\n        '//console.log('handDragOver');*/\r\n    }\r\n\r\n    private dragStyler(event: Event, typ: string) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n        this.setBoardStyle(typ);\r\n    }\r\n\r\n    private handleDragLeave(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n        evt.dataTransfer.dropEffect = 'link'; // Explicitly show this is a copy.\r\n        evt.target['className'] = 'diagram';\r\n        console.log('handDragLeave');\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Class } from '../elements/nodes/Class';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Association } from '../elements/index';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class NewEdge implements EventHandler {\r\n    private graph: Graph;\r\n    private svgLine: SVGSVGElement;\r\n    private isEdgeDrawing: boolean;\r\n    private sourceNode: Node;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    private lastTargetNode: Node;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(NewEdge.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(NewEdge.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!((<KeyboardEvent>event).ctrlKey || EventBus.isHandlerActiveOrFree('NewEdge', true))) {\r\n            this.removeLine();\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element instanceof Node) {\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n\r\n            case 'mousemove':\r\n                this.drawEdge(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.setNewEdgeToNode(event);\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default: break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawEdge(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        let lineToX = Util.getEventX(evt);\r\n        let lineToy = Util.getEventY(evt);\r\n\r\n        let path = `M${this.x} ${this.y} L${lineToX} ${lineToy}`;\r\n        // if line wasnt draw\r\n        if (!this.svgLine) {\r\n\r\n            let attr = {\r\n                tag: 'path',\r\n                id: 'newEdgePath',\r\n                d: path,\r\n                class: 'SVGEdge'\r\n            };\r\n\r\n            let shape = Util.createShape(attr);\r\n            this.svgLine = shape;\r\n\r\n            this.graph.root.appendChild(shape);\r\n            this.graph.root.appendChild(this.sourceNode.$view);\r\n        }\r\n        else {\r\n\r\n            // set new L path\r\n            this.svgLine.setAttributeNS(null, 'd', path);\r\n\r\n            // get node from position\r\n            let targetNode = this.graph.$graphModel.getNodeByPosition(Util.getEventX(evt), Util.getEventY(evt));\r\n\r\n            // if some targetnode is available, so highlight the node\r\n            if (targetNode) {\r\n\r\n                // reset the last one\r\n                if (this.lastTargetNode && this.lastTargetNode.id !== targetNode.id) {\r\n                    this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n                }\r\n\r\n                this.lastTargetNode = targetNode;\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz-drawedge');\r\n            }\r\n            else if (this.lastTargetNode) {\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeLine(): void {\r\n        this.isEdgeDrawing = false;\r\n\r\n        if (this.svgLine) {\r\n            this.graph.root.removeChild(this.svgLine);\r\n            this.svgLine = null;\r\n        }\r\n\r\n        if (this.lastTargetNode) {\r\n            this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n        }\r\n    }\r\n\r\n    private setNewEdgeToNode(event: Event | any): void {\r\n        // get node from position\r\n        let targetNode = this.graph.$graphModel\r\n            .getNodeByPosition(Util.getEventX(event), Util.getEventY(event));\r\n\r\n        if (!targetNode) {\r\n            this.removeLine();\r\n\r\n            return;\r\n        }\r\n\r\n        this.removeLine();\r\n        let edgeType = this.sourceNode.$defaulEdgeType || 'Association';\r\n\r\n        let jsonData = {\r\n            type: edgeType,\r\n            source: this.sourceNode.id,\r\n            target: targetNode.id\r\n        };\r\n\r\n        let newEdge = this.graph.$graphModel.addEdge(<any>jsonData, true);\r\n        this.graph.drawElement(newEdge);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        this.isEdgeDrawing = true;\r\n        this.sourceNode = element as Class;\r\n\r\n        this.x = this.sourceNode.getPos().x + (this.sourceNode.getSize().x / 2);\r\n        this.y = this.sourceNode.getPos().y + (this.sourceNode.getSize().y / 2);\r\n\r\n        // TODO: get this into util or select\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Node } from '../elements/nodes';\r\nimport { Association } from '../elements/edges';\r\nimport { Util } from '../util';\r\nimport { SymbolLibary } from '../elements/nodes/Symbol';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\nimport Attribute from '../elements/nodes/Attribute';\r\n\r\nexport class Select implements EventHandler {\r\n\r\n    private deleteShape: SVGSVGElement;\r\n    private addEdgeShape: SVGSVGElement;\r\n    private copyNodeShape: SVGSVGElement;\r\n    private graph: Graph;\r\n    private padding = 5;\r\n\r\n    private lastSelectedNode: Element;\r\n    private lastSelectedEdge: Element;\r\n\r\n    private isDragged: boolean;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.deleteShape = SymbolLibary.drawSVG({ type: 'Basket', background: true, id: 'trashcan', tooltip: 'Delete class' });\r\n        this.copyNodeShape = SymbolLibary.drawSVG({ type: 'Copynode', background: true, id: 'copyNode', tooltip: 'Copy class' });\r\n        this.addEdgeShape = SymbolLibary.drawSVG({ type: 'Edgeicon', background: true, id: 'addEdge', tooltip: 'Click and drag to connect this class' });\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        let x = Util.getEventX(event);\r\n        let y = Util.getEventY(event);\r\n\r\n        event.stopPropagation();\r\n        if (event.type === 'drag') {\r\n            this.isDragged = true;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            if (element instanceof Node) {\r\n                this.lastSelectedNode = <Element>element.$view;\r\n            }\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n        }\r\n\r\n        if (event.target['id'] === 'background' || element === this.graph.$graphModel) {\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let e = <Node>element;\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.graph.root.appendChild(this.addEdgeShape);\r\n            this.graph.root.appendChild(this.copyNodeShape);\r\n            this.graph.root.appendChild(element.$view);\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'visible');\r\n\r\n            let x = (e.getPos().x + e.getSize().x) + 5;\r\n            let y = e.getPos().y;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y + this.padding})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.copyNodeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 40 + this.padding})`);\r\n            this.copyNodeShape.onclick = (evt) => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let copyClass = (element).copy();\r\n                copyClass.withPos(nextFreePosition.x, nextFreePosition.y);\r\n                this.graph.drawElement(copyClass);\r\n            };\r\n\r\n            this.addEdgeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 80 + this.padding})`);\r\n            this.addEdgeShape.onmousedown = function () {\r\n                EventBus.setActiveHandler('NewEdge');\r\n                element.$view.dispatchEvent(Util.createCustomEvent('mousedown'));\r\n            };\r\n        }\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let clazz = <Node>element;\r\n\r\n            if (Util.isChrome()) {\r\n                if (this.lastSelectedNode && element.id === this.lastSelectedNode.id && !this.isDragged) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            this.isDragged = false;\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            this.lastSelectedNode = <Element>element.$view;\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete class');\r\n\r\n            // draw textbox to edit clazz in one line\r\n            let divInlineEdit = document.createElement('div');\r\n            divInlineEdit.id = 'inlineEdit';\r\n            divInlineEdit.style.position = 'absolute';\r\n            divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n            divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n            divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n            divInlineEdit.style.zIndex = '42';\r\n\r\n            let inputText = document.createElement('input');\r\n            inputText.type = 'text';\r\n            inputText.style.width = '100%';\r\n            inputText.placeholder = 'Add properties, edit label';\r\n\r\n            divInlineEdit.appendChild(inputText);\r\n            document.body.appendChild(divInlineEdit);\r\n\r\n            inputText.addEventListener('focusout', (evt) => {\r\n\r\n                if (Util.isChrome()) {\r\n                    // only if input is empty, remove the inline edit function\r\n                    if ((!inputText.value || inputText.value.length === 0) && (!this.lastSelectedNode || element.id !== this.lastSelectedNode.id)) {\r\n                        this.removeLastInlineEdit();\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                // only if input is empty, remove the inline edit function\r\n                if ((!inputText.value || inputText.value.length === 0)) {\r\n                    this.removeLastInlineEdit();\r\n                }\r\n            });\r\n\r\n            let g = this.graph;\r\n            let propertyTypes: string[] = ['boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'short', 'String', 'void'];\r\n            inputText.addEventListener('keydown', function (evt) {\r\n\r\n                let keyCode = (<any>evt).which;\r\n                let inputValue = <any>inputText.value;\r\n\r\n                if (Util.endsWith(inputValue, ':') && !document.getElementById('selectPropertyType')) {\r\n                    let selectType = document.createElement('select');\r\n                    selectType.id = 'selectPropertyType';\r\n                    selectType.style.width = '100%';\r\n\r\n                    for (let type of propertyTypes) {\r\n                        let selectOption = document.createElement('option');\r\n                        selectOption.value = type;\r\n                        selectOption.innerHTML = type;\r\n                        selectType.appendChild(selectOption);\r\n                    }\r\n\r\n                    selectType.addEventListener('change', function (evt) {\r\n                        let inputValueSplitted = inputValue.split(':');\r\n                        let selectedPropertyType = selectType.options[selectType.selectedIndex].value;\r\n\r\n                        if (inputValueSplitted.length >= 1) {\r\n                            inputText.value = inputValueSplitted[0].trim() + ' : ' + selectedPropertyType;\r\n                            inputText.focus();\r\n                        }\r\n                    });\r\n\r\n                    divInlineEdit.appendChild(selectType);\r\n                }\r\n                else if (!Util.includes(inputValue, ':')) {\r\n                    let selectType = document.getElementById('selectPropertyType');\r\n\r\n                    if (selectType) {\r\n                        selectType.remove();\r\n                    }\r\n                }\r\n\r\n                if (keyCode !== 13) {\r\n                    return;\r\n                }\r\n\r\n                // attribute\r\n                if ((Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) === false) {\r\n                    if (Util.includes(inputValue, ':')) {\r\n                        clazz.addAttribute(inputValue.trim());\r\n                        clazz.reDraw();\r\n                    } else if (Util.includes(inputValue, '=') ) {\r\n                        let attr: Attribute = null;\r\n                        let name = inputValue.substring(0, inputValue.indexOf('=')).trim();\r\n                        for (let child of clazz.getAttributes() ) {\r\n                            if ( name === child.getName()) {\r\n                                attr = child;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (attr) {\r\n                            attr.updateValue(inputValue.substring(inputValue.indexOf('=') + 1).trim());\r\n                        }\r\n                        clazz.reDraw();\r\n                    }\r\n                }\r\n\r\n                // method\r\n                else if (Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) {\r\n                    clazz.addMethod(inputValue.trim());\r\n                    clazz.reDraw();\r\n                }\r\n                // label\r\n                else if (inputValue.trim().split(' ').length === 1 && inputValue.trim().length > 0) {\r\n                    clazz.updateLabel(inputValue.trim());\r\n                }\r\n\r\n                // reset size\r\n                divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n                divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n                divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n\r\n                inputText.value = '';\r\n\r\n                // remove combobox to select type of property\r\n                let selectType = document.getElementById('selectPropertyType');\r\n\r\n                if (selectType) {\r\n                    selectType.remove();\r\n                }\r\n\r\n                // TODO: reload propertiespanel. not working!\r\n                // event wont dispatch\r\n                // let customEvt = Util.createCustomEvent(EventBus.RELOADPROPERTIES);\r\n                // element.$view.dispatchEvent(customEvt);\r\n            });\r\n\r\n            (<any>divInlineEdit.children[0]).focus();\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Association) {\r\n            this.graph.root.appendChild(element.$view);\r\n            this.graph.root.appendChild(element.$sNode.$view);\r\n            this.graph.root.appendChild(element.$tNode.$view);\r\n\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete edge');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            let edge = <Association>element;\r\n            this.lastSelectedEdge = edge.$view;\r\n\r\n            Util.addClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Select.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Select.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private setTooltipOfShape(shape: SVGSVGElement, tooltip: string): void {\r\n        if (!shape || !shape.hasChildNodes()) {\r\n            return;\r\n        }\r\n\r\n        let titleElement = <SVGSVGElement>shape.childNodes[0];\r\n        if (!titleElement || titleElement.tagName !== 'title') {\r\n            return;\r\n        }\r\n\r\n        titleElement.textContent = tooltip;\r\n    }\r\n\r\n    private resetLastSelectedElements() {\r\n        // reset the last one\r\n        if (this.lastSelectedNode) {\r\n            Util.removeClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.lastSelectedNode = undefined;\r\n        }\r\n\r\n        if (this.lastSelectedEdge) {\r\n            Util.removeClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n            this.lastSelectedEdge = undefined;\r\n        }\r\n\r\n        this.removeLastInlineEdit();\r\n    }\r\n\r\n    private removeLastInlineEdit(): void {\r\n        // remove last inline edit of clazz\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n\r\n            // its not supported in internet explorer\r\n            // lastInlineEdit.remove();\r\n        }\r\n    }\r\n\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\n\r\nexport class Zoom implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n    }\r\n\r\n    public handle(e: any, element: DiagramElement): boolean {\r\n        let delta = e.deltaY || e.wheelDeltaY || -e.wheelDelta;\r\n        let d = 1 + (delta / 1000);\r\n\r\n        let values = this.graph.root.getAttribute('viewBox').split(' ');\r\n        const newViewBox = `${values[0]} ${values[1]} ${parseInt(values[2]) * d} ${parseInt(values[3]) * d}`;\r\n        this.graph.root.setAttribute('viewBox', newViewBox);\r\n\r\n        e.preventDefault();\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Zoom.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Zoom.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n}\r\n","export * from './Drag';\r\nexport * from './Select';\r\nexport * from './Zoom';\r\nexport * from './NewEdge';\r\nexport * from './ImportFile';\r\nexport * from './AddNode';\r\n","import { Association } from '../elements/edges';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport Layout from './Layout';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\n\r\nexport class DagreLayout implements Layout {\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        if (!window['dagre']) {\r\n            return;\r\n        }\r\n        let model = graph.$graphModel;\r\n        let g = new window['dagre'].graphlib.Graph();\r\n\r\n        g.setGraph({ marginx: 100, marginy: 20 }).setDefaultEdgeLabel(function () {\r\n            return {};\r\n        });\r\n\r\n        for (let node of model.nodes) {\r\n            g.setNode(node.id, { width: node.getSize().x, height: node.getSize().y });\r\n        }\r\n\r\n        for (let edge of model.edges) {\r\n            g.setEdge(edge.$sNode.id, edge.$tNode.id);\r\n        }\r\n\r\n        window['dagre'].layout(g);\r\n\r\n        g.nodes().forEach(function (nodeId: string) {\r\n            for (let node of model.nodes) {\r\n                if (node.id === nodeId) {\r\n                    node.withPos(g.node(nodeId).x - g.node(nodeId).width / 2, g.node(nodeId).y - g.node(nodeId).height / 2);\r\n                }\r\n            }\r\n        });\r\n        g.edges().forEach(function (e: any) {\r\n            for (let edge of model.edges) {\r\n                if (edge.$sNode.id === e.v && edge.$tNode.id === e.w) {\r\n                    let size = g.edge(e).points.length;\r\n                    edge.clearPoints();\r\n                    for (let i = 0; i < size; i++) {\r\n                        let point: SVGPoint = g.edge(e).points[i];\r\n                        edge.addPoint(point.x, point.y);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n}\r\n","import {DiagramElement} from '../elements/BaseElements';\r\nimport Layout from './Layout';\r\nimport {Graph} from '../elements/Graph';\r\nimport {Association} from '../elements/edges/Association';\r\nimport {Node} from '../elements/nodes/Node';\r\nimport {Control} from '../Control';\r\n\r\nexport class LayoutGraphMin {\r\n    public nodes: Object = {};\r\n    public edges: Array<Object> = [];\r\n    public outEdges: Object = {};\r\n    public inEdges: Object = {};\r\n    public dummyNodes: Array<LayoutGraphNode> = [];\r\n    public dummyEdges: Object = {};\r\n    public count: number = 0;\r\n    public minRank: number = Number.POSITIVE_INFINITY;\r\n    public maxRank: number = 0;\r\n    public maxHeight: number = 0;\r\n    public maxWidth: number = 0;\r\n    public ranksep: number = 0;\r\n    public edgesLabel: Array<Object> = [];\r\n\r\n    public nodeCount(): number {\r\n        return this.count;\r\n    }\r\n\r\n    public node(id: string) {\r\n        return this.nodes[id];\r\n    }\r\n\r\n    public setNode(id: string, n: LayoutGraphNode) {\r\n        if (n && !this.nodes[id]) {\r\n            this.nodes[id] = n;\r\n            this.count = this.count + 1;\r\n        } else if (!n && this.nodes[id]) {\r\n            delete this.nodes[id];\r\n        }\r\n    }\r\n}\r\n\r\nexport class LayoutGraphNode {\r\n    public id: string;\r\n    public width: number;\r\n    public height: number;\r\n    public x: number;\r\n    public y: number;\r\n    public edgeObj: LayoutGraphEdge;\r\n    public rank: number;\r\n\r\n    constructor(id: string, width: number, height: number, x: number, y: number) {\r\n        this.id = id;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n\r\nexport class LayoutGraphEdge {\r\n    public source: string;\r\n    public target: string;\r\n}\r\n\r\n// \t\t\t\t######################################################### DagreGraph #########################################################\r\nexport class DagreLayoutMin implements Layout {\r\n    public static EDGE_KEY_DELIM = '\\x01';\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        let g, layoutNode, nodes, newEdge, edges;\r\n        let i, n, x, y, sId, tId, split = DagreLayoutMin.EDGE_KEY_DELIM;\r\n        let e: Association;\r\n\r\n        nodes = node['nodes'];\r\n        edges = node['edges'];\r\n        g = new LayoutGraphMin();\r\n\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            g.setNode(n.id, new LayoutGraphNode(n.id, n.getSize().x, n.getSize().y, n.getPos().x, n.getPos().y));\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            sId = this.getNodeId(e.$sNode);\r\n            tId = this.getNodeId(e.$tNode);\r\n            if (sId > tId) {\r\n                let tmp = tId;\r\n                tId = sId;\r\n                sId = tmp;\r\n            }\r\n            let idAB = sId + split + tId + split;\r\n            let idBA = tId + split + sId + split;\r\n            if (sId !== tId && g.edgesLabel.indexOf(idAB) < 0 && g.edgesLabel.indexOf(idBA) < 0) {\r\n                newEdge = {source: sId, target: tId, minlen: 1, weight: 1};\r\n                g.edges.push(newEdge);\r\n                g.edgesLabel.push(idAB);\r\n                // In Edges\r\n                if (!g.inEdges[tId]) {\r\n                    g.inEdges[tId] = [];\r\n                }\r\n                g.inEdges[tId].push(newEdge);\r\n\r\n                // Out Edges\r\n                if (!g.outEdges[sId]) {\r\n                    g.outEdges[sId] = [];\r\n                }\r\n                g.outEdges[sId].push(newEdge);\r\n            }\r\n        }\r\n        this.layouting(g);\r\n        // Set the layouting back\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            layoutNode = g.node(n.id);\r\n            x = n.getPos().x;\r\n            y = n.getPos().y;\r\n            if (x < 1 && y < 1) {\r\n                n.withPos(Math.ceil(layoutNode.x), Math.ceil(layoutNode.y));\r\n            }\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            // OBSOLETE method:  e.calc(graph.canvas);\r\n        }\r\n        graph.draw();\r\n    }\r\n\r\n    public getNodeId(node: Control): string {\r\n        if (node.$owner) {\r\n            return this.getNodeId(node.$owner) || node.id;\r\n        }\r\n        return node.id;\r\n    }\r\n\r\n    public layouting(g: LayoutGraphMin) {\r\n        this.longestPath(g);\r\n        this.normalizeRanks(g);\r\n        this.normalizeEdge(g);\r\n        // this.setSimpleOrder(g);\r\n        this.order(g);\r\n        g.ranksep = 25;\r\n        // remove Dummy\r\n        this.removeDummy(g);\r\n        this.position(g);\r\n    }\r\n\r\n    public setSimpleOrder(g: LayoutGraphMin) {\r\n        let i, n;\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            n.order = n.rank;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Applies heuristics to minimize edge crossings in the graph and sets the best\r\n     * order solution as an order attribute on each node.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Graph must be DAG\r\n     *    2. Graph nodes must be objects with a \"rank\" attribute\r\n     *    3. Graph edges must have the \"weight\" attribute\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Graph nodes will have an \"order\" attribute based on the results of the\r\n     *       algorithm.\r\n     */\r\n    public order(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        let visited = {};\r\n        let node, n, order, i;\r\n        for (i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (n in g.nodes) {\r\n            if (visited[n]) {\r\n                continue;\r\n            }\r\n            visited[n] = true;\r\n            node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank].push(n);\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                g.nodes[layering[order][n]].order = parseInt(n);\r\n            }\r\n        }\r\n        // Fix resolve conflict\r\n        for (order in layering) {\r\n            if (layering[order].length > 1) {\r\n                for (n in layering[order]) {\r\n                    if (layering[order].hasOwnProperty(n) === false) {\r\n                        continue;\r\n                    }\r\n                    let name = layering[order][n];\r\n                    let sum = 0;\r\n                    let weight = 1;\r\n                    let edges = g.dummyEdges[name];\r\n                    if (edges) {\r\n                        for (i in edges) {\r\n                            if (edges.hasOwnProperty(i) === false) {\r\n                                continue;\r\n                            }\r\n                            let edge = edges[i];\r\n                            let nodeU = g.node(edge.target);\r\n                            sum = sum + (edge.weight * nodeU.order);\r\n                            weight = weight + edge.weight;\r\n                        }\r\n                    }\r\n                    g.node(name).barycenter = sum / weight;\r\n                    g.node(name).weight = weight;\r\n                }\r\n            } else if (layering[order].length > 0) {\r\n                for (n in layering[order]) {\r\n                    let name = layering[order][n];\r\n                    g.node(name).barycenter = 1;\r\n                    g.node(name).weight = 1;\r\n                }\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                let node = g.nodes[layering[order][n]];\r\n                node.order = parseInt(n) + node.barycenter * node.weight;\r\n                if (isNaN(node.order)) {\r\n                    console.log('ERROR');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public removeDummy(g: LayoutGraphMin) {\r\n        for (let z in g.dummyNodes) {\r\n            let node = g.dummyNodes[z];\r\n            g.setNode(node.id, null);\r\n        }\r\n        g.dummyNodes = [];\r\n        g.dummyEdges = {};\r\n    }\r\n\r\n    /*\r\n     * Breaks any long edges in the graph into short segments that span 1 layer\r\n     * each. This operation is undoable with the denormalize function.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. The input graph is a DAG.\r\n     *    2. Each node in the graph has a \"rank\" property.\r\n     *\r\n     * Post-condition:\r\n     *\r\n     *    1. All edges in the graph have a length of 1.\r\n     *    2. Dummy nodes are added where edges have been split into segments.\r\n     *    3. The graph is augmented with a \"dummyChains\" attribute which contains\r\n     *       the first dummy in each chain of dummy nodes produced.\r\n     */\r\n    public normalizeEdge(g: LayoutGraphMin): void {\r\n        let i: number = 1;\r\n        for (let id in g.edges) {\r\n            let e: LayoutGraphEdge = <LayoutGraphEdge>g.edges[id];\r\n            let v: string = e.source;\r\n            let vRank = g.node(v).rank;\r\n            const w: string = e.target;\r\n            const wRank: number = g.node(w).rank;\r\n            let name: string;\r\n\r\n            if (wRank === vRank + 1) {\r\n                continue;\r\n            }\r\n\r\n            let dummy;\r\n            for (vRank = vRank + 1; vRank < wRank; ++vRank) {\r\n                name = '_d' + e.source + e.target + (i++);\r\n                let newEdge = {source: v, target: name, minlen: 1, weight: 1};\r\n                dummy = new LayoutGraphNode(name, 0, 0, 0, 0);\r\n                dummy.edgeObj = e;\r\n                dummy.rank = vRank;\r\n                // Dummy Edges\r\n                if (!g.dummyEdges[v]) {\r\n                    g.dummyEdges[v] = [];\r\n                }\r\n                g.dummyEdges[v].push(newEdge);\r\n\r\n                g.dummyNodes.push(dummy);\r\n                g.setNode(dummy.id, dummy);\r\n                v = name;\r\n            }\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Initializes ranks for the input graph using the longest path algorithm. This\r\n     * algorithm scales well and is fast in practice, it yields rather poor\r\n     * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\r\n     * ranks wide and leaving edges longer than necessary. However, due to its\r\n     * speed, this algorithm is good for getting an initial ranking that can be fed\r\n     * into other algorithms.\r\n     *\r\n     * This algorithm does not normalize layers because it will be used by other\r\n     * algorithms in most cases. If using this algorithm directly, be sure to\r\n     * run normalize at the end.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Input graph is a DAG.\r\n     *    2. Input graph node labels can be assigned properties.\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Each node will be assign an (unnormalized) \"rank\" property.\r\n     */\r\n    public longestPath(g: LayoutGraphMin) {\r\n        let i, n, visited = [];\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            visited.push(i);\r\n            n.rank = this.findAllPaths(g, n, 0, visited);\r\n            g.minRank = Math.min(g.minRank, n.rank);\r\n        }\r\n    }\r\n\r\n    public findAllPaths(g: LayoutGraphMin, n: Node, currentCost: number, path: Array<String>) {\r\n        let min: number = 0;\r\n        let id: string;\r\n        let z: number;\r\n        let target;\r\n        if (g.outEdges[n.id]) {\r\n            for (z = 0; z < g.outEdges[n.id].length; z++) {\r\n                id = g.outEdges[n.id][z].target;\r\n                target = g.nodes[id];\r\n                if (path[id]) {\r\n                    min = Math.min(min, target.rank);\r\n                } else if (path.indexOf(id) < 0) {\r\n                    min = Math.min(min, this.findAllPaths(g, target, currentCost - 2, path));\r\n                } else {\r\n                    min = currentCost;\r\n                }\r\n            }\r\n            return min;\r\n        }\r\n        return currentCost;\r\n    }\r\n\r\n    /*\r\n     * Adjusts the ranks for all nodes in the graph such that all nodes v have\r\n     * rank(v) >= 0 and at least one node w has rank(w) = 0.\r\n     */\r\n    public normalizeRanks(g: LayoutGraphMin) {\r\n        let min = g.minRank;\r\n        let value;\r\n        g.maxRank = Number.NEGATIVE_INFINITY;\r\n        g.maxHeight = 0;\r\n        g.maxWidth = 0;\r\n        for (let i in g.nodes) {\r\n            let node = g.nodes[i];\r\n            if (node.rank !== undefined) {\r\n                node.rank -= min;\r\n                value = Math.abs(node.rank);\r\n                if (value > g.maxRank) {\r\n                    g.maxRank = value;\r\n                }\r\n                g.maxHeight = Math.max(g.maxHeight, node.height);\r\n                g.maxWidth = Math.max(g.maxWidth, node.width);\r\n            }\r\n        }\r\n    }\r\n\r\n    public position(g: LayoutGraphMin) {\r\n        this.positionY(g);\r\n        let list = this.positionX(g);\r\n        for (let i in list) {\r\n            for (let pos in list[i]) {\r\n                if (list[i].hasOwnProperty(pos) === false) {\r\n                    continue;\r\n                }\r\n                if (g.node(list[i][pos])) {\r\n                    g.node(list[i][pos]).x = parseInt(pos) * g.maxWidth;\r\n                }\r\n            }\r\n\r\n        }\r\n    }\r\n\r\n    public positionY(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        let rankSep = g.ranksep;\r\n        let prevY = 0;\r\n        for (let layer in layering) {\r\n            let maxHeight = g.maxHeight;\r\n            for (let v in layering[layer]) {\r\n                if (layering[layer].hasOwnProperty(v) === false) {\r\n                    continue;\r\n                }\r\n                let id = layering[layer][v];\r\n                g.nodes[id].y = prevY + maxHeight / 2;\r\n            }\r\n            prevY += maxHeight + rankSep;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\r\n     * function will produce a matrix with the ids of each node.\r\n     */\r\n    public buildLayerMatrix(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        for (let i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (let n in g.nodes) {\r\n            let node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank][node.order] = n;\r\n            }\r\n        }\r\n        return layering;\r\n    }\r\n\r\n    public positionX(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        return layering;\r\n    }\r\n}\r\n","import { Point } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport Layout from './Layout';\r\n\r\nexport class Random implements Layout {\r\n\r\n  public layout(graph: Graph) {\r\n\r\n    let model = graph.$graphModel;\r\n\r\n    if (model.nodes) {\r\n      for (let node of model.nodes) {\r\n        let pos: Point = node.getPos();\r\n        if (pos.x === 0 && pos.y === 0) {\r\n          let x = Util.getRandomInt(0, graph.canvasSize.width);\r\n          let y = Util.getRandomInt(0, graph.canvasSize.height);\r\n          node.withPos(x, y);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","export * from './DagreLayout';\r\nexport * from './Random';\r\nexport * from './DagreLayoutMin';\r\n\r\nimport {DagreLayout} from './DagreLayout';\r\nimport {DagreLayoutMin} from './DagreLayoutMin';\r\nimport {Random} from './Random';\r\nnew DagreLayout();\r\nnew DagreLayoutMin();\r\nnew Random();\r\n","import {VirtualKeyBoard} from './VirtualKeyBoard';\r\n\r\nexport {Point} from './elements/BaseElements';\r\nexport {Bridge, DelegateAdapter} from './Bridge';\r\nexport {Graph} from './elements/Graph';\r\nexport * from './elements/nodes';\r\nexport * from './elements/edges';\r\nexport * from './adapters';\r\nexport * from './UML';\r\nimport {Point} from './elements/BaseElements';\r\nimport {Graph} from './elements/Graph';\r\nimport {ClassEditor} from './elements/ClassEditor';\r\nimport {Bridge} from './Bridge';\r\nimport {Util} from './util';\r\nimport * as nodes  from './elements/nodes';\r\nimport * as edges from './elements/edges';\r\nimport {ScrumBoard} from './ScrumBoard';\r\n\r\nif (!window['Point']) {\r\n    window['Point'] = Point;\r\n    window['Graph'] = Graph;\r\n    window['bridge'] = new Bridge();\r\n    window['Util'] = Util;\r\n    window['Class'] = nodes.Class;\r\n    window['Association'] = edges.Association;\r\n    window['SymbolLibary'] = nodes.SymbolLibary;\r\n    window['ClassEditor'] = ClassEditor;\r\n    window['VirtualKeyBoard'] = VirtualKeyBoard;\r\n    window['ScrumBoard'] = ScrumBoard;\r\n}\r\n","'use strict';\r\nimport { CSS } from './CSS';\r\nimport { Node } from './elements/nodes/Node';\r\nimport { DiagramElement, Point } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport class Util {\r\n\r\n    public static isAutoSave: boolean;\r\n\r\n    static getRandomInt(min: number, max: number): number {\r\n        return Math.floor(Math.random() * (max - min + 1)) + min;\r\n    }\r\n\r\n    static createShape(attrs: any): SVGSVGElement {\r\n        let xmlns = attrs.xmlns || 'http://www.w3.org/2000/svg';\r\n        let shape = document.createElementNS(xmlns, attrs.tag);\r\n\r\n        for (let attr in attrs) {\r\n            if (!attrs.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr !== 'tag') {\r\n                shape.setAttribute(attr, attrs[attr]);\r\n\r\n            }\r\n        }\r\n        return <SVGSVGElement><any>shape;\r\n    }\r\n\r\n    static toPascalCase(value: string): string {\r\n        value = value.charAt(0).toUpperCase() + value.substring(1).toLowerCase();\r\n        return value;\r\n    }\r\n\r\n    static isSVG(tag: string): boolean {\r\n        let i,\r\n            list = ['svg', 'path', 'polygon', 'polyline', 'line', 'title', 'rect', 'filter', 'feGaussianBlur', 'feOffset', 'feBlend', 'linearGradient', 'stop', 'text', 'symbol', 'textPath', 'defs', 'fegaussianblur', 'feoffset', 'feblend', 'circle', 'ellipse', 'g'];\r\n        for (i = 0; i < list.length; i += 1) {\r\n            if (list[i] === tag) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    static createHTML(node: any): HTMLElement {\r\n        return <HTMLElement>this.create(node);\r\n    }\r\n    static create(node: any): Element {\r\n        let style, item, xmlns, key, tag, k;\r\n        if (document.createElementNS && (this.isSVG(node.tag) || node.xmlns)) {\r\n            if (node.xmlns) {\r\n                xmlns = node.xmlns;\r\n            } else {\r\n                xmlns = 'http://www.w3.org/2000/svg';\r\n            }\r\n            if (node.tag === 'img' && xmlns) {\r\n                item = document.createElementNS(xmlns, 'image');\r\n                item.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\r\n                item.setAttributeNS('http://www.w3.org/1999/xlink', 'href', node.src);\r\n            } else {\r\n                item = document.createElementNS(xmlns, node.tag);\r\n            }\r\n        } else {\r\n            item = document.createElement(node.tag);\r\n        }\r\n        tag = node.tag.toLowerCase();\r\n        for (key in node) {\r\n            if (!node.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            k = key.toLowerCase();\r\n            if (node[key] === null) {\r\n                continue;\r\n            }\r\n            if (k === 'tag' || k.charAt(0) === '$' || k === '$graphModel') {\r\n                continue;\r\n            }\r\n            if (k.charAt(0) === '#') {\r\n                item[k.substring(1)] = node[key];\r\n                continue;\r\n            }\r\n            if (k === 'rotate') {\r\n                item.setAttribute('transform', 'rotate(' + node[key] + ',' + node.$graphModel.x + ',' + node.$graphModel.y + ')');\r\n                continue;\r\n            }\r\n            if (k === 'value') {\r\n                if (!node[key]) {\r\n                    continue;\r\n                }\r\n                if (tag !== 'input') {\r\n                    if (tag === 'text') {// SVG\r\n                        item.appendChild(document.createTextNode(node[key]));\r\n                    } else {\r\n                        item.innerHTML = node[key];\r\n                    }\r\n                } else {\r\n                    item[key] = node[key];\r\n                }\r\n                continue;\r\n            }\r\n            if (k.indexOf('on') === 0) {\r\n                this.bind(item, k.substring(2), node[key]);\r\n                continue;\r\n            }\r\n            if (k.indexOf('-') >= 0) {\r\n                item.style[key] = node[key];\r\n            } else {\r\n                if (k === 'style' && typeof (node[key]) === 'object') {\r\n                    for (style in node[key]) {\r\n                        if (!node[key].hasOwnProperty(style)) {\r\n                            continue;\r\n                        }\r\n                        if (node[key][style]) {\r\n                            if ('transform' === style) {\r\n                                item.style.transform = node[key][style];\r\n                                item.style.msTransform = item.style.MozTransform = item.style.WebkitTransform = item.style.OTransform = node[key][style];\r\n                            } else {\r\n                                item.style[style] = node[key][style];\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    item.setAttribute(key, node[key]);\r\n                }\r\n            }\r\n        }\r\n        if (node.$parent) {\r\n            node.$parent.appendChild(item);\r\n        }\r\n        if (node.$graphModel) {\r\n            item.$graphModel = node.$graphModel;\r\n        }\r\n        return item;\r\n    }\r\n\r\n    static setSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttribute('width', value);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.setAttribute('height', value);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setAttributeSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttributeNS(null, 'width', value);\r\n        value = Util.getValue(height);\r\n        item.setAttributeNS(null, 'height', value);\r\n    }\r\n\r\n    static setStyleSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setPos(item: any, x: number, y: number): void {\r\n        if (item.x && item.x.baseVal) {\r\n            item.style.left = x + 'px';\r\n            item.style.top = y + 'px';\r\n        } else {\r\n            item.x = x;\r\n            item.y = y;\r\n        }\r\n    }\r\n\r\n    static getValue(value: string | number): number {\r\n        return parseInt(('0' + value).replace('px', ''), 10);\r\n    }\r\n\r\n    static isIE(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('.net') > -1;\r\n    }\r\n\r\n    static isEdge(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('edge') > -1;\r\n    }\r\n\r\n    static isFireFox(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n    }\r\n\r\n    static isSafari(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        return navigator.userAgent.toLowerCase().indexOf('safari') > -1 && !isEdge;\r\n    }\r\n\r\n    static isOpera(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('opera') > -1;\r\n    }\r\n\r\n    static isChrome(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        let isSafari = Util.isSafari();\r\n        return navigator.userAgent.toLowerCase().indexOf('chrome') > -1 && !isEdge && isSafari;\r\n    }\r\n\r\n    static getEventX(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetX'] : event.layerX;\r\n    }\r\n\r\n    static getEventY(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetY'] : event.layerY;\r\n    }\r\n\r\n    static getNumber(str: string): number {\r\n        return parseInt((str || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    static getStyle(styleProp: string): CSS {\r\n        let i, style, diff, current, ref, el = document.createElement('div'), css;\r\n        document.body.appendChild(el);\r\n        css = new CSS(styleProp);\r\n        ref = new CSS(styleProp, el).css;\r\n        style = window.getComputedStyle(el, null);\r\n        el.className = styleProp;\r\n        current = new CSS(styleProp, el).css;\r\n        diff = Util.getNumber(style.getPropertyValue('border-width'));\r\n        for (i in current) {\r\n            if (!current.hasOwnProperty(i)) {\r\n                continue;\r\n            }\r\n            if (i === 'width' || i === 'height') {\r\n                if (Util.getNumber(current[i]) !== 0 && Util.getNumber(current[i]) + diff * 2 !== Util.getNumber(ref[i])) {\r\n                    css.add(i, current[i]);\r\n                }\r\n            } else if (current[i] !== ref[i]) {\r\n                css.add(i, current[i]);\r\n            }\r\n        }\r\n        document.body.removeChild(el);\r\n        return css;\r\n    }\r\n\r\n    static sizeOf(item: string | any, node?: Node): ClientRect {\r\n        let board;\r\n        let rect: ClientRect;\r\n        let addBoard: boolean;\r\n        if (!item) {\r\n            return undefined;\r\n        }\r\n        if (node) {\r\n            board = node.$owner.$view;\r\n            addBoard = false;\r\n        }\r\n\r\n        if (!board) {\r\n            addBoard = true;\r\n            board = Util.createShape({ tag: 'svg', id: 'root', width: 200, height: 200 });\r\n            document.body.appendChild(board);\r\n        }\r\n        if (board.tagName === 'svg') {\r\n            if (typeof item === 'string') {\r\n                item = Util.create({ tag: 'text', $font: true, value: item });\r\n                item.setAttribute('width', '5px');\r\n            }\r\n        } else if (typeof item === 'string') {\r\n            item = document.createTextNode(item);\r\n        }\r\n        board.appendChild(item);\r\n        rect = item.getBoundingClientRect();\r\n        board.removeChild(item);\r\n\r\n        if (addBoard) {\r\n            document.body.removeChild(board);\r\n        }\r\n        return rect;\r\n    }\r\n\r\n    static getColor(style: string, defaultColor?: string) {\r\n        if (style) {\r\n            if (style.toLowerCase() === 'create') {\r\n                return '#008000';\r\n            }\r\n            if (style.toLowerCase() === 'nac') {\r\n                return '#FE3E3E';\r\n            }\r\n            if (style.indexOf('#') === 0) {\r\n                return style;\r\n            }\r\n        }\r\n        if (defaultColor) {\r\n            return defaultColor;\r\n        }\r\n        return '#000';\r\n    }\r\n\r\n    public static utf8$to$b64(str: string): string {\r\n        return window.btoa(encodeURIComponent(str));\r\n    }\r\n\r\n    public static showSVG(control: DiagramElement) {\r\n        let svg = Util.create({\r\n            tag: 'svg',\r\n            style: { left: control.getPos().x, top: control.getPos().y, position: 'absolute' }\r\n        });\r\n        let child = control.getSVG();\r\n        if (child) {\r\n            svg.appendChild(child);\r\n        }\r\n        Util.setSize(svg, control.getSize().x, control.getSize().y);\r\n        document.body.appendChild(svg);\r\n    }\r\n\r\n    public static toJson(ref: JSON | Object): Object {\r\n        let result = {};\r\n        return Util.copy(result, ref, false, false);\r\n    }\r\n\r\n    public static initControl(parent: Control, control: Control, type: string, id: string, json: JSON | Object) {\r\n        if (typeof control.init === 'function') {\r\n            control.init(parent, type, id);\r\n        }\r\n        if (typeof control.load === 'function') {\r\n            control.load(json);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * copy One Json into another\r\n     * @function\r\n     * @param ref reference Json\r\n     * @param src source Json\r\n     * @param full all attributes include privet $\r\n     * @param replace set the original reference or copy it\r\n     * @returns ref\r\n     * @name copy\r\n     */\r\n    public static copy(ref: JSON | Object, src: JSON | Object, full: boolean, replace: boolean) {\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (replace) {\r\n                        ref[i] = src[i];\r\n                        continue;\r\n                    }\r\n                    if (!ref[i]) {\r\n                        if (src[i] instanceof Array) {\r\n                            ref[i] = [];\r\n                        } else {\r\n                            ref[i] = {};\r\n                        }\r\n                    }\r\n                    Util.copy(ref[i], src[i], full, false);\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref[i] = src[i];\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    public static xmlstringify(text: string): string {\r\n        text = text.replace('<', '&lt;');\r\n        text = text.replace('>', '&gt;');\r\n        return text;\r\n    }\r\n\r\n    public static toXML(ref: JSON | Object | any, src: JSON | Object | any, full: boolean, doc: Document): any {\r\n        let name;\r\n        if (!ref) {\r\n            name = src.constructor.name;\r\n            doc = document.implementation.createDocument(null, name, null);\r\n            ref = doc.childNodes[0];\r\n        }\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (!ref.getAttribute(i)) {\r\n                        if (src[i] instanceof Array) {\r\n                            for (let c in src[i]) {\r\n                                if (!src[i].hasOwnProperty(c)) {\r\n                                    continue;\r\n                                }\r\n                                name = src[i][c].constructor.name;\r\n                                let child = doc.createElement(name);\r\n                                ref.appendChild(child);\r\n                                Util.toXML(child, src[i][c], full, doc);\r\n                            }\r\n                        } else {\r\n                            name = src[i].constructor.name;\r\n                            let child = doc.createElement(name);\r\n                            ref.appendChild(child);\r\n                            Util.toXML(child, src[i], full, doc);\r\n                        }\r\n                    } else {\r\n                        Util.toXML(ref.getAttribute(i), src[i], full, doc);\r\n                    }\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref.setAttribute(i, src[i]);\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    static Range(min: Point, max: Point, x: number, y: number) {\r\n        max.x = Math.max(max.x, x);\r\n        max.y = Math.max(max.y, y);\r\n        min.x = Math.min(min.x, x);\r\n        min.y = Math.min(min.y, y);\r\n    }\r\n\r\n    public static getPosition(m: number, n: number, entity: DiagramElement, refCenter: Point) {\r\n        let t, p = [], list, distance = [], min = 999999999, position, i, step = 15;\r\n        let pos: Point = entity.getPos();\r\n        let size: Point = entity.getSize();\r\n        list = [Point.LEFT, Point.RIGHT];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = this.getLRPosition(m, n, entity, list[i]);\r\n            if (t.y >= pos.y && t.y <= (pos.y + size.y + 1)) {\r\n                t.y += (entity['$' + list[i]] * step);\r\n                if (t.y > (pos.y + size.y)) {\r\n                    // Alternative\r\n                    t = Util.getUDPosition(m, n, entity, Point.DOWN, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        list = [Point.UP, Point.DOWN];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = Util.getUDPosition(m, n, entity, list[i]);\r\n            if (t.x >= pos.x && t.x <= (pos.x + size.x + 1)) {\r\n                t.x += (entity['$' + list[i]] * step);\r\n                if (t.x > (pos.x + size.x)) {\r\n                    // Alternative\r\n                    t = this.getLRPosition(m, n, entity, Point.RIGHT, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        for (i = 0; i < p.length; i += 1) {\r\n            if (distance[i] < min) {\r\n                min = distance[i];\r\n                position = p[i];\r\n            }\r\n        }\r\n        return position;\r\n    }\r\n\r\n    public static getUDPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let x, y: number = pos.y;\r\n        if (p === Point.DOWN) {\r\n            y += size.y;\r\n        }\r\n        x = (y - n) / m;\r\n        if (step) {\r\n            x += e['$' + p] * step;\r\n            if (x < pos.x) {\r\n                x = pos.x;\r\n            } else if (x > (pos.x + size.x)) {\r\n                x = pos.x + size.x;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static getLRPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let y: number, x: number = pos.x;\r\n        if (p === Point.RIGHT) {\r\n            x += size.x;\r\n        }\r\n        y = m * x + n;\r\n        if (step) {\r\n            y += e['$' + p] * step;\r\n            if (y < pos.y) {\r\n                y = pos.y;\r\n            } else if (y > (pos.y + size.y)) {\r\n                y = pos.y + size.y;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static hasClass(element: Element, cls: string) {\r\n        let className = element.getAttribute('class');\r\n        return className.indexOf(cls) > 0;\r\n    }\r\n    public static addClass(element: Element, cls: string) {\r\n        if (!Util.hasClass(element, cls)) {\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className + ' ' + cls);\r\n        }\r\n    }\r\n    public static removeClass(element: Element, cls: string) {\r\n        if (Util.hasClass(element, cls)) {\r\n            let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className.replace(reg, ' ').trim());\r\n        }\r\n    }\r\n\r\n    public static startsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.startsWith) {\r\n            return s.indexOf(searchS) === 0;\r\n        }\r\n\r\n        return s.startsWith(searchS);\r\n    }\r\n\r\n    public static endsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.endsWith) {\r\n            let lastIndex = s.lastIndexOf(searchS);\r\n            return lastIndex !== -1 && lastIndex === (s.length - 1);\r\n        }\r\n\r\n        return s.endsWith(searchS);\r\n    }\r\n\r\n    public static includes(s: string, searchS: string): boolean {\r\n        if (!String.prototype.includes) {\r\n            let idx = s.indexOf(searchS);\r\n            return idx > -1;\r\n        }\r\n        if (s === null) {\r\n            return false;\r\n        }\r\n\r\n        return s.includes(searchS);\r\n    }\r\n\r\n    public static isParentOfChild(parent: Element, child: Element): boolean {\r\n\r\n        if (!parent || !child) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isIE()) {\r\n            let children = parent.childNodes;\r\n            // let found = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                let childItem = children[i];\r\n                if (childItem === child) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        return parent.contains(child);\r\n    }\r\n\r\n    public static createCustomEvent(type: string, params?: any): CustomEvent {\r\n        let evt: CustomEvent;\r\n\r\n        if (typeof window['CustomEvent'] !== 'function') {\r\n            params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n            evt = document.createEvent('CustomEvent');\r\n            evt.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\r\n            return evt;\r\n        }\r\n\r\n        evt = new CustomEvent(type);\r\n\r\n        return evt;\r\n    }\r\n\r\n    public static saveToLocalStorage(model: any): boolean {\r\n        if (!this.isAutoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isLocalStorageSupported()) {\r\n            if (model) {\r\n                if (model.$isLoading) {\r\n                    return false;\r\n                }\r\n                let jsonObj = Util.toJson(model);\r\n                let data = JSON.stringify(jsonObj, null, '\\t');\r\n                localStorage.setItem('diagram', data);\r\n            } else {\r\n                localStorage.removeItem('diagram');\r\n            }\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static getDiagramFromLocalStorage(): string {\r\n        if (Util.isLocalStorageSupported()) {\r\n            return localStorage.getItem('diagram');\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    public static isLocalStorageSupported(): boolean {\r\n        if (this.isEdge()) {\r\n            return false;\r\n        }\r\n        return localStorage !== undefined;\r\n    }\r\n}\r\n"],"sourceRoot":""}
Severity: Minor
Found in doc/diagram.js.map by fixme

FIXME found
Open

{"version":3,"sources":["webpack://DiagramJS/webpack/bootstrap","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Adapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Bridge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/BridgeElement.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/CSS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Control.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Data.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventBus.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/JSEPS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Palette.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertiesPanel.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertyBinder.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/RGBColor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/SVGConverter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/ScrumBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Toolbar.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/UML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/VirtualKeyBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/JavaAdapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/BaseElements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/ClassEditor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Graph.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Model.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregate.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Association.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Composition.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Generalisation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Implements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Attribute.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/AutoComplete.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/BR.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Button.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Class.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/ClazzProperty.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Dice.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Div.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Form.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/HTML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/InfoText.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Input.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Label.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Method.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Node.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/SO.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/StereoType.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Symbol.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Table.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/AddNode.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Drag.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/GraphListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/ImportFile.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/NewEdge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Select.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Zoom.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayout.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayoutMin.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/Random.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/main.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/util.ts"],"names":[],"mappings":"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","file":"diagram.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./main.ts\");\n","export abstract class Adapter {\r\n    public id: string = null;\r\n\r\n    abstract update(evt: Object): boolean;\r\n}\r\n","'use strict';\r\n\r\nimport * as controls from './elements/nodes';\r\nimport * as adapters from './adapters';\r\nimport Data from './Data';\r\nimport {Control} from './Control';\r\nimport {Adapter} from './Adapter';\r\nimport {Graph} from './elements';\r\nimport {Util} from './util';\r\nimport {Point} from './elements';\r\n\r\nexport class Bridge extends Control {\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public static version: string = '0.42.01.1601007-1739';\r\n    private controlFactory: Object = {};\r\n    private adapterFactory: Object = {};\r\n    private controls: Object = {};\r\n    private adapters: Object = {};\r\n    private items: Object = {};\r\n    private controlNo: number = 1;\r\n    private online: boolean = true;\r\n    private language: string = navigator.language.toUpperCase();\r\n    private toolBar: HTMLElement;\r\n\r\n    constructor(viewRoot?: HTMLElement) {\r\n        super();\r\n        let i;\r\n\r\n        if (viewRoot) {\r\n            this.$view = viewRoot;\r\n        }\r\n\r\n        let keys: string[] = Object.keys(adapters);\r\n        for (i = 0; i < keys.length; i++) {\r\n            let child = adapters[keys[i]];\r\n            if (child && child.id) {\r\n                this.adapterFactory[child.id.toLowerCase()] = child;\r\n            }\r\n        }\r\n\r\n        keys = Object.keys(controls);\r\n        for (i = 0; i < keys.length; i++) {\r\n            this.addControl(controls[keys[i]]);\r\n        }\r\n        this.addControl(Graph);\r\n\r\n        let that = this;\r\n        window.addEventListener('load', function () {\r\n            let updateOnlineStatus = function updateOnlineStatus() {\r\n                that.setOnline(navigator.onLine);\r\n            };\r\n            window.addEventListener('online', updateOnlineStatus);\r\n            window.addEventListener('offline', updateOnlineStatus);\r\n        });\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public setOnline(value: boolean) {\r\n        this.online = value;\r\n        if (this.toolBar.children[0]) {\r\n            this.toolBar.children[0].className = value ? 'online' : 'offline';\r\n        }\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addToolbar(): boolean {\r\n        if (this.toolBar) {\r\n            return false;\r\n        }\r\n        this.toolBar = document.createElement('div');\r\n        this.toolBar.className = 'onlineStatus';\r\n        let child = document.createElement('div');\r\n        child.className = 'online';\r\n        this.toolBar.appendChild(child);\r\n        child = document.createElement('div');\r\n        child.className = 'lang';\r\n        child.innerHTML = this.language;\r\n        this.toolBar.appendChild(child);\r\n\r\n        let body: HTMLElement = document.getElementsByTagName('body')[0];\r\n        body.insertBefore(this.toolBar, body.firstChild);\r\n        // Refresh Online Status\r\n        this.setOnline(this.online);\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addListener = function (listener: any) {\r\n        this.listener.push(listener);\r\n    };\r\n\r\n    public addControl(control: any) {\r\n        if (control && control.name) {\r\n            this.controlFactory[control.name.toLowerCase()] = control;\r\n        }\r\n    }\r\n\r\n    public getId(): string {\r\n        return 'control' + (this.controlNo++);\r\n    }\r\n\r\n    public adapterUpdate(message: string) {\r\n        let keys: string[] = Object.keys(this.adapters);\r\n        if (keys.length > 0) {\r\n            let i;\r\n            for (i = 0; i < keys.length; i++) {\r\n                let adapterList = this.adapters[keys[i]];\r\n                if (adapterList instanceof Adapter) {\r\n                    adapterList.update(message);\r\n                } else {\r\n                    for (let adapter of adapterList) {\r\n                        adapter.update(message);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        let config = {}, className: string, id: string;\r\n        if (typeof(json) === 'string') {\r\n            // Only a String\r\n            config['id'] = '' + json;\r\n            let item = document.getElementById(config['id']);\r\n            let className: string;\r\n            if (item) {\r\n                className = item.getAttribute('class');\r\n                if (!className) {\r\n                    className = item.getAttribute('classname') || '';\r\n                }\r\n                // Found Element and now config Data element\r\n                if (item.getAttribute('property')) {\r\n                    if (this.hasItem(item.getAttribute('property'))) {\r\n                        let data = this.getItem(item.getAttribute('property'));\r\n                        for (let key in data.prop) {\r\n                            if (item.getAttribute(key)) {\r\n                                data.setValue(key, item.getAttribute(key));\r\n                            }\r\n                        }\r\n                        if (item.getAttribute('property')) {\r\n                            // TODO: FIXME!!!\r\n                            // data.property = item.getAttribute(\"property\");\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                className = '' + json;\r\n            }\r\n            className = className.toLowerCase();\r\n            config['className'] = className;\r\n        } else {\r\n            config = <JSON>json;\r\n        }\r\n        // Config validate\r\n        if (!config['id']) {\r\n            config['id'] = this.getId();\r\n        }\r\n        // Backup for Old Graph\r\n        if (!config['className'] && (config['type'] === 'clazzdiagram' || config['type'] === 'objectdiagram')) {\r\n            config['className'] = 'graph';\r\n        }\r\n\r\n        className = config['className'] || config['class'];\r\n        className = className.toLocaleLowerCase();\r\n        id = config['id'];\r\n\r\n        // Check For Control or Data\r\n        if ((config['prop'] || config['upd'] || config['rem']) && this.controls[id] === null) {\r\n            // Its Data\r\n            let newData = !this.hasItem(config['id']);\r\n            let item: Data = this.getItem(config['id']);\r\n            // TODO: FIXME!!!\r\n            // if (id && className && !item.property) {\r\n            //      item.property = className;\r\n            // }\r\n            if (newData) {\r\n                for (let i in this.controls) {\r\n                    if (this.controls.hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    this.controls[i].addItem(this, item);\r\n                }\r\n            }\r\n            // Add all Values to item\r\n            item.addProperties(config);\r\n            // Bridge.addProperties(config['prop'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return item;\r\n        }\r\n\r\n        let control;\r\n        if (this.controls[id]) {\r\n            control = this.controls[id];\r\n            control.initControl(json);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return control;\r\n        }\r\n\r\n        if (typeof(this.controlFactory[className]) === 'object' || typeof(this.controlFactory[className]) === 'function') {\r\n            let obj = this.controlFactory[className];\r\n            control = new obj(json);\r\n            Util.initControl(owner || this, control, config['property'], id, json);\r\n\r\n            if (control.id) {\r\n                this.controls[control.id] = control;\r\n            } else {\r\n                this.controls[id] = control;\r\n            }\r\n\r\n            // create DataObject and register this control as listener to it\r\n            // let obj = {id:id};\r\n            // let data: Data = this.load(obj);\r\n            // data.addListener(this);\r\n\r\n            // Try to Show\r\n            if (typeof control.getSVG === 'function' && typeof control.getSize === 'function') {\r\n                let size: Point = control.getSize();\r\n\r\n                let svg = Util.createShape({\r\n                    tag: 'svg',\r\n                    id: 'root',\r\n                    width: size.x,\r\n                    height: size.y\r\n                });\r\n\r\n                let view = control.getSVG();\r\n                svg.appendChild(view);\r\n                document.getElementsByTagName('body')[0].appendChild(svg);\r\n            }\r\n            return control;\r\n        }\r\n        return null;\r\n        // bridge.load('{class:table, columns:[{id:'firstname'}, {id:'lastname'}]}');\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n\r\n        if (this.items[id] !== undefined) {\r\n            return true;\r\n        }\r\n        id = id.split('.')[0];\r\n        return (this.items[id] !== undefined);\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return this.items;\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        let item = this.items[id];\r\n        if (!item) {\r\n            id = id.split('.')[0];\r\n            item = this.items[id];\r\n            if (!item) {\r\n                item = new Data();\r\n                item.id = id;\r\n                this.items[id] = item;\r\n            }\r\n        }\r\n        return item;\r\n    }\r\n\r\n    /**\r\n     * Method for executing user input -> Event\r\n     * @param object\r\n     * @param attribute\r\n     * @param oldValue\r\n     * @param newValue\r\n     * @returns {boolean}\r\n     */\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        alert('Bridge.setValue: oldVal:' + oldValue + ', newVal: ' +  + newValue + ', attribute: ' + attribute + ', object: ' + JSON.stringify(object));\r\n        let obj: Data;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n\r\n        } else if (object instanceof Data) {\r\n            obj = object;\r\n            id = object.id;\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = <Data>object;\r\n            id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return false;\r\n        }\r\n        if (obj) {\r\n            // Execute Update to Data\r\n            obj.setValue(attribute, newValue);\r\n            // Could be done here, but currently is done at this.execueChange..:\r\n            // obj[attribute] = value;\r\n        }\r\n\r\n        /*let tmp = {'id': id};\r\n        if (typeof(newValue) !== 'undefined' && newValue !== null) {\r\n            let upd = {};\r\n            upd[attribute] = newValue;\r\n            tmp['upd'] = upd;\r\n        }\r\n        if (typeof(oldValue) !== 'undefined' && oldValue !== null) {\r\n            let rem = {};\r\n            rem[attribute] = oldValue;\r\n            tmp['rem'] = rem;\r\n        }*/\r\n        // this.load(tmp);\r\n        return true;\r\n    }\r\n\r\n    public getValue(object: Object, attribute: string): any {\r\n        let obj: Object;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = object;\r\n            // id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return;\r\n        }\r\n        if (obj) {\r\n            if (obj.hasOwnProperty(attribute)) {\r\n                return obj[attribute];\r\n            } else if (obj instanceof Data) {\r\n                return (<Data>obj).getValue(attribute);\r\n            } else {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    public getNumber(object: Object, attribute: string, defaultValue: number = 0): number {\r\n        let res = <number>this.getValue(object, attribute);\r\n        if (typeof res === 'number') {\r\n            return res;\r\n        } else if (typeof res === 'string') {\r\n            // check whether res is a number\r\n            let value = Number(res);\r\n            if (value || value === 0) {\r\n                return value;\r\n            }\r\n        }\r\n        return defaultValue;\r\n    }\r\n\r\n    getControl(controlId: string) {\r\n        return this.controls[controlId];\r\n    }\r\n\r\n    public registerListener(eventType: string, control: Control, callBackfunction: string): Control {\r\n        if (typeof control === 'string') {\r\n            control = this.getControl(<string>control);\r\n        }\r\n        if (!control) {\r\n            return null;\r\n        }\r\n        if (eventType) {\r\n            eventType = eventType.toLowerCase();\r\n        }\r\n        control.registerListenerOnHTMLObject(eventType);\r\n        if (callBackfunction) {\r\n            let adapter: DelegateAdapter = new DelegateAdapter();\r\n            adapter.callBackfunction = callBackfunction;\r\n            adapter.id = control.getId();\r\n            this.addAdapter(adapter, eventType);\r\n        }\r\n        return control;\r\n    }\r\n\r\n    public addAdapter(adapter: Adapter | string, eventType: string): Adapter {\r\n        if (!eventType) {\r\n            eventType = '';\r\n        }\r\n        let result: Adapter;\r\n        if (adapter instanceof String) {\r\n            let obj = this.adapterFactory[adapter.toLowerCase()];\r\n            result = new obj();\r\n        } else {\r\n            result = <Adapter>adapter;\r\n        }\r\n        let handlers = this.adapters[eventType];\r\n\r\n        if (handlers === null || handlers === undefined) {\r\n            handlers = [];\r\n            this.adapters[eventType] = handlers;\r\n        }\r\n        handlers.push(result);\r\n        return result;\r\n    }\r\n\r\n    public fireEvent(evt: Event): void {\r\n        let handlers = this.adapters[''];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n        handlers = this.adapters[evt['eventType']];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport class DelegateAdapter extends Adapter {\r\n    adapter: Adapter;\r\n    callBackfunction: string;\r\n\r\n    update(evt: Event): boolean {\r\n        if (this.adapter) {\r\n            this.adapter.update(evt);\r\n            return true;\r\n        } else if (this.callBackfunction) {\r\n            return this.executeFunction(this.callBackfunction, evt);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public setAdapter(adapter: Adapter): boolean {\r\n        this.adapter = adapter;\r\n        return true;\r\n    }\r\n\r\n    private executeFunction(strValue: string, evt: Event): boolean {\r\n        let scope = window;\r\n        let scopeSplit = strValue.split('.');\r\n        for (let i = 0; i < scopeSplit.length - 1; i++) {\r\n            scope = scope[scopeSplit[i]];\r\n            if (scope === undefined) {\r\n                return false;\r\n            }\r\n        }\r\n        let fn: any = scope[scopeSplit[scopeSplit.length - 1]];\r\n        if (typeof fn === 'function') {\r\n            fn.call(scope);\r\n            return true;\r\n        } else {\r\n            window['callBack1'].update(evt);\r\n\r\n        }\r\n        return false;\r\n    }\r\n}\r\n","'use strict';\r\nimport Data from './Data';\r\n\r\nexport default class BridgeElement {\r\n    private static elementSet: BridgeElement[] = [];\r\n    public model: Data;\r\n    public id: string;\r\n    public gui: HTMLElement;\r\n\r\n    constructor(model: Data) {\r\n        this.model = model;\r\n        this.id = model.id;\r\n        BridgeElement.elementSet.push(this);\r\n    }\r\n}\r\n","import {Util} from './util';\r\n\r\n// \t\t\t\t######################################################### CSS #########################################################\r\nexport class CSS {\r\n    public css: Object;\r\n    private name: string;\r\n\r\n    constructor(name: string, item?: any) {\r\n        let i, value, border: string, prop, el;\r\n        this.name = name;\r\n        this.css = {};\r\n        if (!item) {\r\n            return;\r\n        }\r\n\r\n        el = window.getComputedStyle(item, null);\r\n        border = el.getPropertyValue('border');\r\n        for (i in el) {\r\n            prop = i;\r\n            value = el.getPropertyValue(prop);\r\n            if (value && value !== '') {\r\n                // optimize CSS\r\n                if (border) {\r\n                    if (prop === 'border-bottom' || prop === 'border-right' || prop === 'border-top' || prop === 'border-left') {\r\n                        if (value !== border) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-color' || prop === 'border-bottom-color' || prop === 'border-right-color' || prop === 'border-top-color' || prop === 'border-left-color') {\r\n                        if (border.substring(border.length - value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-width') {\r\n                        if (border.substring(0, value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else {\r\n                        this.css[prop] = value;\r\n                    }\r\n                } else {\r\n                    this.css[prop] = value;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public static getStdDef() {\r\n        let child, def = Util.create({tag: 'defs'});\r\n\r\n        child = Util.create({tag: 'filter', id: 'drop-shadow'});\r\n        child.appendChild(Util.create({tag: 'feGaussianBlur', 'in': 'SourceAlpha', result: 'blur-out', stdDeviation: 2}));\r\n        child.appendChild(Util.create({tag: 'feOffset', 'in': 'blur-out', dx: 2, dy: 2}));\r\n        child.appendChild(Util.create({tag: 'feBlend', 'in': 'SourceGraphic', mode: 'normal'}));\r\n        def.appendChild(child);\r\n        child = Util.create({tag: 'linearGradient', id: 'reflect', x1: 0, x2: 0, y1: '50%', y2: 0, spreadMethod: 'reflect'});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#aaa', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#eee', offset: '100%'}));\r\n        def.appendChild(child);\r\n\r\n        child = Util.create({tag: 'linearGradient', id: 'classelement', x1: 0, x2: '100%', y1: '100%', y2: 0});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#fff', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#d3d3d3', offset: 1}));\r\n        def.appendChild(child);\r\n\r\n        return def;\r\n    }\r\n\r\n    public static getSubstring(str: string, search: string, startChar: string, endChar: string, splitter: string): any {\r\n        let pos, end, count = 0, array = [];\r\n        pos = str.indexOf(search);\r\n        if (pos > 0) {\r\n            end = str.indexOf(startChar, pos);\r\n            pos = end + 1;\r\n            if (end > 0) {\r\n                while (end < str.length) {\r\n                    if (str.charAt(end) === startChar) {\r\n                        count += 1;\r\n                    }\r\n                    if (str.charAt(end) === endChar) {\r\n                        count -= 1;\r\n                        if (count === 0) {\r\n                            if (splitter && pos !== end) {\r\n                                array.push(str.substring(pos, end).trim());\r\n                            }\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (str.charAt(end) === splitter && count === 1) {\r\n                        array.push(str.substring(pos, end).trim());\r\n                        pos = end + 1;\r\n                    }\r\n\r\n                    end += 1;\r\n                }\r\n                if (splitter) {\r\n                    return array;\r\n                }\r\n                return str.substring(pos, end);\r\n            }\r\n            return str.substring(pos);\r\n        }\r\n        return '';\r\n    }\r\n\r\n    public static addStyle(board: SVGElement, styleName: any) {\r\n        let defs, style: any, css;\r\n        if (styleName.baseVal || styleName.baseVal === '') {\r\n            styleName = styleName.baseVal;\r\n        }\r\n        if (!styleName) {\r\n            return;\r\n        }\r\n        defs = CSS.getDefs(board);\r\n        if (defs.getElementsByTagName('style').length > 0) {\r\n            style = defs.getElementsByTagName('style')[0];\r\n        } else {\r\n            style = Util.create({tag: 'style'});\r\n            style.item = {};\r\n            defs.appendChild(style);\r\n        }\r\n        if (!style.item[styleName]) {\r\n            css = Util.getStyle(styleName);\r\n            style.item[styleName] = css;\r\n            style.innerHTML = style.innerHTML + '\\n.' + styleName + css.getSVGString(board);\r\n        }\r\n    }\r\n\r\n    public static addStyles(board: SVGElement, item: any) {\r\n        if (!item) {\r\n            return;\r\n        }\r\n        let items, i, className: any = item.className;\r\n\r\n        if (className) {\r\n            if (className.baseVal || className.baseVal === '') {\r\n                className = className.baseVal;\r\n            }\r\n        }\r\n        if (className) {\r\n            items = className.split(' ');\r\n            for (i = 0; i < items.length; i += 1) {\r\n                CSS.addStyle(board, items[i].trim());\r\n            }\r\n        }\r\n        for (i = 0; i < item.childNodes.length; i += 1) {\r\n            this.addStyles(board, item.childNodes[i]);\r\n        }\r\n    }\r\n\r\n    public static getDefs(board: SVGElement) {\r\n        let defs;\r\n        if (board.getElementsByTagName('defs').length < 1) {\r\n            defs = Util.create({tag: 'defs'});\r\n            board.insertBefore(defs, board.childNodes[0]);\r\n        } else {\r\n            defs = board.getElementsByTagName('defs')[0];\r\n        }\r\n        return defs;\r\n    }\r\n\r\n    public add(key: string, value: string) {\r\n        this.css[key] = value;\r\n    }\r\n\r\n    public get(key: string): any {\r\n        let i;\r\n        for (i in this.css) {\r\n            if (i === key) {\r\n                return this.css[key];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public getNumber(key: string) {\r\n        return parseInt((this.get(key) || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    public getSVGString(board: SVGElement) {\r\n        let str, pos, style, defs, value, filter, z;\r\n        str = '{';\r\n        for (style in this.css) {\r\n            if (!this.css.hasOwnProperty(style)) {\r\n                continue;\r\n            }\r\n            if (style === 'border') {\r\n                pos = this.css[style].indexOf(' ');\r\n                str = str + 'stroke-width: ' + this.css[style].substring(0, pos) + ';';\r\n                pos = this.css[style].indexOf(' ', pos + 1);\r\n                str = str + 'stroke:' + this.css[style].substring(pos) + ';';\r\n            } else if (style === 'background-color') {\r\n                str = str + 'fill: ' + this.css[style] + ';';\r\n            } else if (style === 'background') {\r\n                value = CSS.getSubstring(this.css[style], 'linear-gradient', '(', ')', ',');\r\n                if (value.length > 0) {\r\n                    defs = CSS.getDefs(board);\r\n                    if (value[0] === '45deg') {\r\n                        pos = 1;\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '100%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                    } else {\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '0%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                        pos = 0;\r\n                    }\r\n                    defs.appendChild(filter);\r\n                    while (pos < value.length) {\r\n                        value[pos] = value[pos].trim();\r\n                        z = value[pos].lastIndexOf(' ');\r\n                        filter.appendChild(Util.create({\r\n                            tag: 'stop',\r\n                            'offset': value[pos].substring(z + 1),\r\n                            style: {'stop-color': value[pos].substring(0, z)}\r\n                        }));\r\n                        pos += 1;\r\n                    }\r\n                    str = str + 'fill: url(#' + this.name + ');';\r\n                    continue;\r\n                }\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n                // box-shadow: inset 0 3px 4px #888;\r\n// \t\t\t\t<defs>\r\n// \t\t\t\t\t<filter id='drop-shadow'>\r\n// \t\t\t\t\t\t<feGaussianBlur in='SourceAlpha' result='blur-out' stdDeviation='2'></feGaussianBlur>\r\n// \t\t\t\t\t\t<feOffset in='blur-out' dx='2' dy='2'></feOffset>\r\n// \t\t\t\t\t\t<feBlend in='SourceGraphic' mode='normal'></feBlend>\r\n// \t\t\t\t\t</filter>\r\n// \t\t\t\t</defs>\r\n            } else {\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n            }\r\n        }\r\n        str = str + '}';\r\n        return str;\r\n    }\r\n}\r\n","import {Bridge} from './Bridge';\r\nimport Data from './Data';\r\nimport EventListener from './EventListener';\r\n\r\nexport abstract class Control {\r\n    public $owner: Control;\r\n    /**\r\n     *\r\n     */\r\n    public property: string;\r\n    public id: string;\r\n    public $view: Element;\r\n    public $viewData: Data = null;\r\n\r\n    protected $model: Data;\r\n    protected $viewListener: EventListenerOrEventListenerObject;\r\n\r\n    /**\r\n     * The properties, we want to listen to\r\n     */\r\n    // static defaultProperties: string[] = [];\r\n\r\n    // public getProperties(): string[] {\r\n    //     return this.properties;\r\n    // }\r\n\r\n    constructor() {\r\n        // e.g. this.properties.push(\"key\");\r\n        // this.properties.push(\"property\");\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data: Data = new Data();\r\n        if (oldData) {\r\n            oldData.removeListener(this);\r\n            const keys: string[] = oldData.getKeys();\r\n            for (let i = 0; i < keys.length; i++) {\r\n                let attr = keys[i];\r\n                if (this.$view) {\r\n                    if (this.$view[attr] === null) {\r\n                        continue;\r\n                    }\r\n                    data.setValue(attr, this.$view[attr]);\r\n                } else {\r\n                    data.setValue(attr, null);\r\n                }\r\n            }\r\n        }\r\n        data.addListener(this);\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     *  Set the new HTMLElement and attach listener to it.\r\n     *  Also remove Listeners from old one and return the old one, if present.\r\n     * @param element\r\n     * @returns The previous Element\r\n     */\r\n    public setView(element: Element): Element {\r\n        let oldElement: Element = null;\r\n        if (this.$view) {\r\n            oldElement = this.$view;\r\n            if (this.$viewListener) {\r\n                oldElement.removeEventListener('change', this.$viewListener);\r\n            }\r\n        }\r\n        this.$view = element;\r\n\r\n        if (this.$viewListener) {\r\n            element.addEventListener('change', this.$viewListener);\r\n        }\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n        return element;\r\n    }\r\n\r\n    public init(owner: Control, property ?: string, id ?: string): Control {\r\n        if (!this.$owner) {\r\n            this.$owner = owner;\r\n        }\r\n        if (!this.id) {\r\n            this.id = id;\r\n        }\r\n        if (!this.property) {\r\n            this.property = this.generateID(property, id);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public createEventListener(): EventListener {\r\n        return new EventListener();\r\n    }\r\n\r\n    public getRoot(): Control {\r\n        if (this.$owner) {\r\n            return this.$owner.getRoot();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return null;\r\n    }\r\n\r\n    public initControl(data: any): void {\r\n        if (this.$view === null || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (data.hasOwnProperty('prop')) {\r\n            for (let key in data.prop) {\r\n                let oldValue = this.$viewData.getValue(key);\r\n                if (this.$view) {\r\n                    this.updateElement(key, oldValue, data.prop[key]);\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        let hasRem = data.hasOwnProperty('rem');\r\n        let removed: any[] = [];\r\n        if (data.hasOwnProperty('upd')) {\r\n            for (let key in data.upd) {\r\n                let oldValue;\r\n                let newValue = data.upd[key];\r\n                let entity;\r\n                const temp = false;\r\n                if (temp) {\r\n//                if (newValue == this.getViewData().getValue(key)) {\r\n                    // new Value assertEquals old value, so we don't need to change anything..\r\n                    // delete data.rem[key];\r\n                    if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                        removed.push(data.rem[key]);\r\n                    }\r\n                    continue;\r\n                }\r\n                if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                    // if there's a rem, the oldValue from rem will be used and expected to be right..\r\n                    oldValue = data.rem[key];\r\n                    if (this.$model && this.$model.getValue(key) === oldValue) {\r\n                        entity = this.$model;\r\n//                    } else if (oldValue == this.getViewData().getValue(key)) {\r\n//                        $graphModel = this.getViewData();\r\n                    }\r\n                    delete data.rem[key];\r\n\r\n                    if (entity === null) {\r\n                        continue;\r\n                    }\r\n                }\r\n                if (entity) {\r\n                    if (!hasRem) {\r\n                        if (entity === this.$model) {\r\n                            oldValue = this.$model.getValue(key);\r\n                        } else {\r\n//                           oldValue = this.getViewData().getValue(key);\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (this.$model) {\r\n                        // try to get the oldValue directly from the $graphModel...\r\n                        oldValue = this.$model.getValue(key);\r\n                        entity = this.$model;\r\n                    }\r\n                    if (oldValue === null) {\r\n                        // if there was no data in the entity, we try to get oldValue from the $view\r\n//                        oldValue = this.getViewData().getValue(key);\r\n//                        entity = this.getViewData();\r\n                    }\r\n                }\r\n\r\n                //  || oldValue !== this.$viewData.getValue(key)\r\n                if (newValue === oldValue) {\r\n                    // no match, so update should be wrong...\r\n                    continue;\r\n                }\r\n                const viewDataOldValue = this.$viewData.getValue(key);\r\n                if (entity === this.$viewData) {\r\n\r\n                    // this.getViewData().setValue(key, newValue);\r\n                    if (this.$view) {\r\n                        this.updateElement(key, viewDataOldValue, newValue);\r\n                    }\r\n                } else {\r\n                    this.updateElement(key, viewDataOldValue, newValue);\r\n                }\r\n                this.getRoot().setValue(entity, key, newValue, oldValue);\r\n            }\r\n            // this.saveViewInData();\r\n        }\r\n        if (hasRem) {\r\n            for (let key in data.rem) {\r\n                if (removed.hasOwnProperty(key)) {\r\n                    continue;\r\n                }\r\n                let oldValue;\r\n//                    this.getViewData().getValue(key);\r\n//                if (oldValue != data.rem[key] || data.upd !== undefined && (data.upd[key] == oldValue || this.getViewData().getValue(key) == data.upd[key])) {\r\n                // if rem is invalid, or if the change is already applied, don't do anything..\r\n                //                  continue;\r\n                //            }\r\n                // delete this.$viewData.getValue(key);\r\n                // this.saveViewInData();\r\n                this.updateElement(key, null, null);\r\n                // this.$view.removeAttribute(key);\r\n                if (this.$model) {\r\n//                    this.getRoot().setValue(this.$graphModel, key, this.getViewData().getValue(key), oldValue);\r\n                }\r\n            }\r\n        }\r\n        if (this.property) {\r\n            // Add listener to Input field:\r\n            this.$view['onchange'] = ((ev: Event) => {\r\n                    this.controlChanged(ev);\r\n                }\r\n            );\r\n        }\r\n//        this.saveViewInData();\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        return null;\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n        return false;\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return new Object();\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue ?: Object): boolean {\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Is called when a object, that the Control is listening to, changes its value.\r\n     * @param entity\r\n     * @param property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        if (oldValue === newValue || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (oldValue === this.$viewData.getValue(property)) {\r\n            return;\r\n        }\r\n        // Set NewData to ViewData and Fire PC\r\n        this.$viewData.setValue(property, newValue);\r\n\r\n//\r\n//\r\n//         // if (entity == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.entity) {\r\n//                 alert(\"entity = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.entity.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.entity, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the entity is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"entity = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n// >>>>>>> addOldFunctions\r\n        if (this.$viewData) {\r\n            this.$viewData.setValue(property, newValue);\r\n        }\r\n        if (this.$model) {\r\n            this.$model.setValue(property, newValue);\r\n        }\r\n        this.updateElement(property, oldValue, newValue);\r\n    }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            // Do Nothing\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  Update GUI Element\r\n     * @param {string} property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        if (this.$view && this.$view.hasAttribute(property)) {\r\n            this.$view.setAttribute(property, newValue);\r\n        }\r\n    }\r\n\r\n//        if (oldValue == newValue) {\r\n//            return;\r\n//        }\r\n//        if (oldValue == this.$viewData.getValue(property)) {\r\n//            return;\r\n//        }\r\n//        // Set NewData to ViewData and Fire PC\r\n//        this.$viewData.setValue(property, newValue);\r\n//\r\n//\r\n//\r\n//         // if ($graphModel == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.$graphModel) {\r\n//                 alert(\"$graphModel = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.$graphModel.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.$graphModel, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the $graphModel is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"$graphModel = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n\r\n    public getId(): string {\r\n        return this.id;\r\n    }\r\n\r\n    public load(json: JSON | Object, owner ?: Control): any {\r\n        // Do Nothing\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.property || entity.hasProperty(this.property)) {\r\n                entity.addListener(this, this.property);\r\n                this.$model = entity;\r\n            }\r\n        }\r\n    }\r\n\r\n    public appendChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.appendChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].appendChild(child.$view);\r\n        }\r\n    }\r\n\r\n    public removeChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.removeChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].removeChild(child.$view);\r\n        }\r\n    }\r\n\r\n    /*\r\n     Property looks like: 't1.talk'\r\n     */\r\n    public setProperty(property: string): void {\r\n        if (!this.property) {\r\n            return;\r\n        }\r\n        let objId = property.split('.')[0];\r\n        let object = null;\r\n        if (this.$owner.hasItem(objId)) {\r\n            object = this.$owner.getItem(objId);\r\n        }\r\n\r\n        // remove listener on old object\r\n        if (this.$model) {\r\n            // this.$graphModel.removeListener(this);\r\n            this.$model.removeListener(this, this.lastProperty);\r\n        }\r\n        this.property = property;\r\n\r\n        // add listener to object..\r\n        if (object) {\r\n            object.addListener(this, this.lastProperty);\r\n            this.$model = object;\r\n            this.updateElement(this.lastProperty, this.$viewData.getValue(this.lastProperty), object.prop[this.lastProperty]);\r\n        }\r\n    }\r\n\r\n    public registerListenerOnHTMLObject(eventType: string): boolean {\r\n        return this.registerEventListener(eventType, <HTMLElement>this.$view);\r\n    }\r\n\r\n    // Normal Event HTML-Event\r\n    // Eventtype:string,\r\n    // id:string of Control\r\n    public fireEvent(evt: Event): void {\r\n        // Do Nothing\r\n    }\r\n\r\n    public isClosed(): boolean {\r\n        return this['closed'];\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        if (this.isClosed()) {\r\n            return this.$owner.getShowed();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * the id of the Data object, that contains the properties of the view\r\n     * @returns {string}\r\n     */\r\n    protected getControlDataID() {\r\n        return this.id + '_data';\r\n    }\r\n\r\n    protected generateID(property ?: string, id ?: string): string {\r\n        if (property) {\r\n            return property;\r\n        }\r\n        if (id) {\r\n            // will generate a data Object suitable for the Control..\r\n            // must be overridden, if the changeEvent shouldn't listen on value...\r\n//            return id + '.' + this.getStandardProperty();//+ \"_data\"\r\n            return id + '.' + '_data';\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected updateViewData() {\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n        const keys: string[] = this.$viewData.getKeys();\r\n        for (let i = 0; i < keys.length; i++) {\r\n            let attr = keys[i];\r\n            if (this.$view[attr] === null) {\r\n                continue;\r\n            }\r\n            this.$viewData.setValue(attr, this.$view[attr]);\r\n        }\r\n    }\r\n\r\n    protected registerEventListener(eventType: string, htmlElement: HTMLElement): boolean {\r\n        if (!htmlElement) {\r\n            return false;\r\n        }\r\n        if (htmlElement instanceof HTMLElement === false) {\r\n            return false;\r\n        }\r\n        let control = this;\r\n        let listener = (t: any) => {\r\n            t.eventType = eventType;\r\n            t.id = control.id;\r\n            control.$owner.fireEvent(t);\r\n        };\r\n        htmlElement.addEventListener(eventType, listener);\r\n        return true;\r\n    }\r\n\r\n    get lastProperty(): string {\r\n        if (!this.property) {\r\n            return '';\r\n        }\r\n        let arr: string[] = this.property.split('.');\r\n        return arr[arr.length - 1];\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\n\r\nexport default class Data {\r\n    public prop = {};\r\n    id: string;\r\n    // $listener: Control[] = [];\r\n    $listener: Object = {};\r\n\r\n    private static nullCheck(property: string): string {\r\n        if (property === undefined || property === null) {\r\n            property = '';\r\n        }\r\n        return property;\r\n    }\r\n    public getKeys(): string[] {\r\n        return Object.keys(this.prop);\r\n    }\r\n\r\n    public addProperties(values: Object) {\r\n        if (!values) {\r\n            return;\r\n        }\r\n        if (values['prop']) {\r\n            let prop = values['prop'];\r\n            for (let property in prop) {\r\n                if (prop.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (prop[property] !== null && '' !== prop[property]) {\r\n                    this.setValue(property, prop[property]);\r\n                }\r\n            }\r\n        } else {\r\n            let upd = values['upd'] || {};\r\n            let rem = values['rem'] || {};\r\n\r\n            for (let property in upd) {\r\n                if (upd.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (rem.hasOwnProperty(property) === false) {\r\n                    this.setValue(property, upd[property]);\r\n                } else {\r\n                    // if we have a rem, we wan't to check, if its a valid change (teh old value is the value in rem)\r\n                    if (this.getValue(property) === rem[property]) {\r\n                        this.setValue(property, upd[property]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getValue(attribute: string) {\r\n        return this.prop[attribute];\r\n    }\r\n\r\n    public setValue(attribute: string, newValue: any): void {\r\n        let oldValue = this.prop[attribute];\r\n        if (oldValue === newValue && newValue !== null) {\r\n            return;\r\n        }\r\n        this.prop[attribute] = newValue;\r\n        this.firePropertyChange(attribute, oldValue, newValue);\r\n    }\r\n\r\n    public addTo(attribute: string, newValue: any): boolean {\r\n        let add: boolean;\r\n        if (this.prop[attribute]) {\r\n            if (this.prop[attribute].contains(newValue) === false) {\r\n                add = true;\r\n            }\r\n        } else {\r\n            this.prop[attribute] = [];\r\n            add = true;\r\n        }\r\n        if (add) {\r\n            this.prop[attribute].push(newValue);\r\n            this.firePropertyChange(attribute, null, newValue);\r\n        }\r\n        return add;\r\n    }\r\n\r\n    public removeFrom(attribute: string, newValue: any): boolean {\r\n        if (!this.prop[attribute]) {\r\n            return true;\r\n        }\r\n        let pos: number = this.prop[attribute].indexOf(newValue);\r\n        if (pos < 0) {\r\n            return true;\r\n        }\r\n        this.prop[attribute].splice(pos, 1);\r\n        this.firePropertyChange(attribute, newValue, null);\r\n        return true;\r\n    }\r\n\r\n    public addListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(property);\r\n        if (!listeners) {\r\n            listeners = [];\r\n            this.$listener[Data.nullCheck(property)] = listeners;\r\n        }\r\n        listeners.push(control);\r\n    }\r\n\r\n    public removeListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners = this.getListeners(property);\r\n        if (listeners === null) {\r\n            return;\r\n        }\r\n        let pos = listeners.indexOf(control);\r\n        if (pos >= 0) {\r\n            listeners.splice(pos, 1);\r\n        }\r\n        if (listeners.length === 0 && Data.nullCheck(property) !== '') {\r\n            // only remove, if it's not the default listener list...\r\n            delete this.$listener[property];\r\n        }\r\n    }\r\n\r\n    public hasProperty(property: string): boolean {\r\n        return this.prop.hasOwnProperty(property);\r\n    }\r\n\r\n    public addFrom(attribute: string, oldData: Data): void {\r\n        if (oldData) {\r\n            this.setValue(attribute, oldData.getValue(attribute));\r\n        } else {\r\n            this.setValue(attribute, null);\r\n        }\r\n    }\r\n\r\n    public removeKey(key: string): any {\r\n        if (this.hasProperty(key)) {\r\n            const oldValue = this.prop[key];\r\n            delete this.prop[key];\r\n            return oldValue;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected getListeners(property: string): PropertyChangeSupport[] {\r\n        property = Data.nullCheck(property);\r\n        return this.$listener[property];\r\n    }\r\n\r\n    protected firePropertyChange(attribute: string, oldValue: Object, newValue: Object) {\r\n        attribute = Data.nullCheck(attribute);\r\n        // at first fire for the given property\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(attribute);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n        // now we need to fire the Listeners that wan't to listen to everything\r\n        listeners = this.getListeners(null);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport interface EventHandler {\r\n    canHandle(): boolean;\r\n    handle(event: Event, element: DiagramElement): boolean;\r\n    setActive(active: boolean): void;\r\n}\r\n\r\nexport class EventBus {\r\n    public static CREATE: string = 'Create';\r\n    public static EDITOR: string = 'Editor';\r\n    public static OPENPROPERTIES: string = 'openProperties';\r\n    public static RELOADPROPERTIES: string = 'reloadProperties';\r\n    public static ELEMENTMOUSEDOWN: string = 'ELEMENT:MOUSEDOWN';\r\n    public static ELEMENTMOUSEUP: string = 'ELEMENT:MOUSEUP';\r\n    public static ELEMENTMOUSELEAVE: string = 'ELEMENT:MOUSELEAVE';\r\n    public static ELEMENTMOUSEMOVE: string = 'ELEMENT:MOUSEMOVE';\r\n    public static ELEMENTMOUSEWHEEL: string = 'ELEMENT:MOUSEWHEEL';\r\n    public static ELEMENTCLICK: string = 'ELEMENT:CLICK';\r\n    public static ELEMENTDBLCLICK: string = 'ELEMENT:DBLCLICK';\r\n    public static ELEMENTDRAG: string = 'ELEMENT:DRAG';\r\n    public static ELEMENTDRAGOVER: string = 'ELEMENT:DRAGOVER';\r\n    public static ELEMENTDROP: string = 'ELEMENT:DROP';\r\n    public static ELEMENTDRAGLEAVE: string = 'ELEMENT:DRAGLEAVE';\r\n\r\n    public static EVENTS: string[] = [\r\n        EventBus.CREATE,\r\n        EventBus.EDITOR,\r\n        EventBus.OPENPROPERTIES,\r\n        EventBus.RELOADPROPERTIES,\r\n        EventBus.ELEMENTMOUSEDOWN,\r\n        EventBus.ELEMENTMOUSEUP,\r\n        EventBus.ELEMENTMOUSELEAVE,\r\n        EventBus.ELEMENTMOUSEMOVE,\r\n        EventBus.ELEMENTMOUSEWHEEL,\r\n        EventBus.ELEMENTCLICK,\r\n        EventBus.ELEMENTDRAG,\r\n        EventBus.ELEMENTDBLCLICK,\r\n        EventBus.ELEMENTDRAGOVER,\r\n        EventBus.ELEMENTDROP,\r\n        EventBus.ELEMENTDRAGLEAVE,\r\n    ];\r\n\r\n    private static handlers = {};\r\n\r\n    private static $activeHandler: string = '';\r\n\r\n    public static setActiveHandler(handler: string): void {\r\n        this.$activeHandler = handler;\r\n    }\r\n\r\n    public static isHandlerActiveOrFree(handler: string, notEmpty?: boolean): boolean {\r\n        if (notEmpty) {\r\n            return this.$activeHandler === handler;\r\n        }\r\n        return this.$activeHandler === handler || this.$activeHandler === '' || this.$activeHandler === undefined;\r\n    }\r\n\r\n    public static isAnyHandlerActive(): boolean {\r\n        return !(this.$activeHandler === '' || this.$activeHandler === undefined);\r\n    }\r\n\r\n    public static releaseActiveHandler(): void {\r\n        this.$activeHandler = '';\r\n    }\r\n\r\n    public static getActiveHandler(): string {\r\n        return this.$activeHandler;\r\n    }\r\n\r\n    static register(control: Control, view: Element) {\r\n        let events: string[];\r\n        if (typeof control['getEvents'] === 'function') {\r\n            events = control['getEvents']();\r\n        }\r\n\r\n        if (!events || !view) {\r\n            return;\r\n        }\r\n        for (let event of events) {\r\n            this.registerEvent(view, event, control);\r\n        }\r\n    }\r\n\r\n    static registerEvent(view: Element, event: string, control?: any) {\r\n        const pos: number = event.indexOf(':');\r\n        if (pos > 0) {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        } else {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        }\r\n    }\r\n\r\n    public static publish(element: DiagramElement, evt: Event) {\r\n        let handlers = EventBus.handlers[evt.type];\r\n        if (handlers) {\r\n            for (let handler of handlers) {\r\n                handler.handle(evt, element);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static subscribe(handler: EventHandler, ...eventTypes: string[]) {\r\n        for (let event of eventTypes) {\r\n            let handlers = EventBus.handlers[event];\r\n            if (handlers === null || handlers === undefined) {\r\n                handlers = [];\r\n                EventBus.handlers[event] = handlers;\r\n            }\r\n            handlers.push(handler);\r\n        }\r\n    }\r\n}\r\n","import SimpleEvent from './Event';\r\n\r\nexport default class EventListener {\r\n    private $onUpdate: Function;\r\n\r\n    get onUpdate(): Function {\r\n        return this.$onUpdate;\r\n    }\r\n\r\n    set onUpdate(value: Function) {\r\n        this.$onUpdate = value;\r\n    }\r\n\r\n    update(event: SimpleEvent) {\r\n        this.$onUpdate(event);\r\n    }\r\n}\r\n","// ################################## jsEPS ####################################################\r\nimport {SVGConverter} from './SVGConverter';\r\n\r\nexport class JSEPS {\r\n    private max: number;\r\n    private min: number;\r\n    private inverting: boolean;\r\n    private output: string[];\r\n    private font: number;\r\n\r\n    constructor(options: any) {\r\n        this.max = 0;\r\n        this.min = 999;\r\n        let hasInverting = typeof (options.inverting);\r\n        this.inverting = (options && hasInverting !== 'undefined' ? options.inverting : true);\r\n        this.output = ['%!PS-Adobe-3.0 EPSF-3.0', '1 setlinewidth'];\r\n        this.out('/FSD {findfont exch scalefont def} bind def % In the document prolog: define');\r\n        this.out('/SMS {setfont moveto show} bind def % some useful procedures');\r\n        this.out('/MS {moveto show} bind def');\r\n        this.out('/F1  10  /Helvetica  FSD % At the start of the script: set up');\r\n        this.font = 1;\r\n    }\r\n\r\n    public out(value: string) {this.output.push(value); }\r\n    public rect(x: number, y: number, width: number, height: number, style: string) {\r\n        y = y + (this.inverting ? height : 0);\r\n        if (style && style.indexOf('fill:url(#classelement);') >= 0) {\r\n            this.out('gsave 0.93 0.93 0.93 setrgbcolor newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectfill grestore');\r\n        } else {\r\n            this.out('newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectstroke');\r\n        }\r\n    }\r\n    public setFillColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public y(value: number) {this.max = Math.max(this.max, value); this.min = Math.min(this.min, value); return this.inverting ? '%y(' + value + ')' : value; }\r\n    public getType(): string {\r\n        return 'application/postscript';\r\n    }\r\n\r\n    public getData(): string {\r\n        let t, end, url, text, typ = 'application/postscript', a = document.createElement('a'), data = '', pos, i;\r\n        for (i = 0; i < this.output.length; i += 1) {\r\n            text = this.output[i];\r\n            if (this.inverting) {\r\n                while ((pos = text.indexOf('%y')) >= 0) {\r\n                    end = text.indexOf(')', pos);\r\n                    t = this.max - parseInt(text.substring(pos + 3, end), 10);\r\n                    text = text.substring(0, pos) + t + text.substring(end + 1);\r\n                }\r\n            }\r\n            data = data + text + '\\r\\n';\r\n        }\r\n        return data;\r\n    }\r\n\r\n    public setDrawColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public ellipse(cx: number, cy: number, rx: number, ry: number, colorMode: string) {/*FIXME*/}\r\n    public circle(cx: number, cy: number, r: number, colorMode: string) {/*FIXME*/}\r\n    public setTextColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public text(x: number, y: number, text: string) {this.out('(' + text.replace('&lt;', '<').replace('&gt;', '>') + ') ' + x + ' ' + this.y(y) + ' F1 SMS'); }\r\n    public lineto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' lineto'); this.out('stroke'); }\r\n    public moveto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' moveto'); }\r\n    public line(x1: number, y1: number, x2: number, y2: number) {this.out('newpath ' + x1 + ' ' + this.y(y1) + ' moveto ' + x2 + ' ' + this.y(y2) + ' lineto stroke'); }\r\n    public setLineWidth(value: string) {this.out(value + ' setlinewidth'); }\r\n    public setFont(value: string) {this.out('/F' + (this.font += 1) + ' 10 /' + value + ' FSD'); }\r\n}\r\n","import { Graph } from './elements/Graph';\r\n\r\n/*const buttons = {\r\n    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    clazz: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n};\r\n*/\r\nexport default class Palette {\r\n\r\n    private graph: Graph;\r\n    private palette: Element;\r\n    private root: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n        let div = document.createElement('div');\r\n        div.className = 'palette';\r\n        div.id = 'palette';\r\n        this.root = div;\r\n        this.palette = div;\r\n        for (let key in graph.nodeFactory) {\r\n            let element = graph.nodeFactory[key];\r\n            let control = new element();\r\n            let icon = control.getToolBarIcon();\r\n            if (icon) {\r\n                let button = <HTMLButtonElement>document.createElement('button');\r\n                button.className = 'add' + key + 'Btn';\r\n                button.innerHTML = icon.outerHTML;\r\n                button.onclick = e => {\r\n                    let nextFreePosition = this.graph.getNextFreePosition();\r\n                    // let node = this.graph.addElementWithValues(graph.nodeFactory[key], {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    let node = this.graph.addElementWithValues(key, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    this.graph.drawElement(node);\r\n                };\r\n                this.palette.appendChild(button);\r\n            }\r\n        }\r\n        // this.graph.nodeFactory\r\n//        this.addButtons();\r\n    }\r\n\r\n    public show() {\r\n        document.body.appendChild(this.root);\r\n    }\r\n\r\n    private addButtons() {\r\n        /*for (let btn in buttons) {\r\n            let button = <HTMLButtonElement>document.createElement('button');\r\n            button.className = 'add' + btn + 'Btn';\r\n            button.innerHTML = buttons[btn];\r\n            button.onclick = e => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let node = this.graph.addElementWithValues(btn, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                this.graph.drawElement(node);\r\n            };\r\n            this.palette.appendChild(button);\r\n        }*/\r\n    }\r\n}\r\n","import {Graph} from './elements/Graph';\r\nimport * as edges from './elements/edges';\r\nimport {EventBus, EventHandler} from './EventBus';\r\nimport {DiagramElement} from './elements/BaseElements';\r\nimport {Util} from './util';\r\n\r\nexport class PanelGroup implements EventHandler {\r\n    private graph: Graph;\r\n    private selectedElement: DiagramElement;\r\n    private clearPanel: Panel;\r\n    private generatePanel: Panel;\r\n    private propertiesMasterPanel: HTMLDivElement;\r\n    private propertiesContent: HTMLDivElement;\r\n    private propHeaderLabel: HTMLDivElement;\r\n    private propHeaderButton: HTMLButtonElement;\r\n    private selectedPanel: Panel;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.clearPanel = new ClearPanel(this);\r\n        this.generatePanel = new GeneratePanel(this);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        this.handleOpenProperties(event, element);\r\n\r\n        if (event.type === EventBus.RELOADPROPERTIES\r\n            && this.selectedElement && element.id === this.selectedElement.id) {\r\n            this.handleEvent(event, element);\r\n        }\r\n\r\n        // the same element was clicked. do nothing\r\n        if (this.selectedElement && this.selectedElement.id === element.id) {\r\n            return true;\r\n        }\r\n        if (element.id === 'RootElement') {\r\n            this.setActivePanel(this.clearPanel);\r\n        }\r\n        if (element.id === 'GenerateProp') {\r\n            this.setActivePanel(this.generatePanel);\r\n        }\r\n        this.selectedElement = element;\r\n\r\n        return true;\r\n    }\r\n\r\n    public getGraph(): Graph {\r\n        return this.graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(PanelGroup.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(PanelGroup.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n     public handleEvent(event: any, element: any) {\r\n        // DO NOTHING\r\n    }\r\n\r\n    public show() {\r\n        // main div to display any properties, class, edge, etc.\r\n        this.propertiesMasterPanel = document.createElement('div');\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n\r\n        this.propertiesContent = document.createElement('div');\r\n        this.propertiesContent.className = 'properties-hidden';\r\n\r\n        this.propHeaderLabel = document.createElement('div');\r\n        this.propHeaderLabel.style.display = 'inherit';\r\n        this.propHeaderLabel.style.cursor = 'pointer';\r\n        this.propHeaderLabel.onclick = e => this.toogleProperties(e);\r\n\r\n        // button to display and hide the properties of e.g. a class\r\n        this.propHeaderButton = document.createElement('button');\r\n        this.propHeaderButton.className = 'btnHideProp';\r\n        this.propHeaderButton.style.cssFloat = 'right';\r\n        this.propHeaderButton.onclick = e => this.toogleProperties(e);\r\n\r\n        let propertiesHeader = document.createElement('div');\r\n        propertiesHeader.style.display = 'inline';\r\n        propertiesHeader.appendChild(this.propHeaderLabel);\r\n        propertiesHeader.appendChild(this.propHeaderButton);\r\n\r\n        this.propertiesMasterPanel.appendChild(propertiesHeader);\r\n        this.propertiesMasterPanel.appendChild(this.propertiesContent);\r\n        document.body.appendChild(this.propertiesMasterPanel);\r\n\r\n        this.setActivePanel(this.clearPanel);\r\n    }\r\n\r\n    public setActivePanel(panel: Panel) {\r\n        this.selectedPanel = panel;\r\n        this.propHeaderLabel.innerHTML = panel.getHeaderText();\r\n        if (this.propertiesContent) {\r\n            while (this.propertiesContent.hasChildNodes()) {\r\n                this.propertiesContent.removeChild(this.propertiesContent.childNodes[0]);\r\n            }\r\n        }\r\n        panel.show();\r\n\r\n        panel.showFirstTab();\r\n        if (panel !== this.clearPanel) {\r\n            this.showProperties(null);\r\n        } else {\r\n            this.hideProperties(null);\r\n        }\r\n    }\r\n\r\n    public getProperiesContent(): HTMLDivElement {\r\n        return this.propertiesContent;\r\n    }\r\n\r\n    private handleOpenProperties(event: Event, element: DiagramElement) {\r\n        if (event.type === 'dblclick') {\r\n            this.showProperties(event);\r\n        }\r\n    }\r\n\r\n    private showProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Show\r\n        this.propHeaderButton.innerHTML = '&#8897;';\r\n        this.propHeaderButton.title = 'Hide properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel';\r\n        this.propertiesContent.className = 'properties';\r\n    }\r\n\r\n    private toogleProperties(evt: Event): void {\r\n        if (this.propHeaderButton.title === 'Show properties') {\r\n            this.showProperties(evt);\r\n        } else {\r\n            this.hideProperties(evt);\r\n        }\r\n    }\r\n\r\n    private hideProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Hide\r\n        this.propHeaderButton.innerHTML = '&#8896;';\r\n        this.propHeaderButton.title = 'Show properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n        this.propertiesContent.className = 'properties-hidden';\r\n    }\r\n}\r\n\r\nexport abstract class Panel {\r\n    protected divPropertiesPanel: HTMLDivElement;\r\n    protected divPropertiesTabbedPanel: HTMLDivElement;\r\n    protected element: any;\r\n    protected group: PanelGroup;\r\n    private panelItem: PanelItem[] = [];\r\n\r\n    constructor(group: PanelGroup, element: any) {\r\n        // get the properties content panel\r\n        this.divPropertiesPanel = document.createElement('div');\r\n        this.element = element;\r\n        this.group = group;\r\n\r\n        this.divPropertiesTabbedPanel = document.createElement('div');\r\n        this.divPropertiesTabbedPanel.className = 'tabbedpane';\r\n\r\n        // add tabbed panel\r\n        this.divPropertiesPanel.appendChild(this.divPropertiesTabbedPanel);\r\n    }\r\n\r\n    public show(): void {\r\n        let propertiesContent: HTMLDivElement = this.group.getProperiesContent();\r\n        if (this.panelItem.length > 1) {\r\n            propertiesContent.appendChild(this.getPropertiesTabbedPanel());\r\n        }\r\n\r\n        propertiesContent.appendChild(this.getPropertiesPanel());\r\n    }\r\n\r\n    public getPropertiesTabbedPanel(): HTMLDivElement {\r\n        return this.divPropertiesTabbedPanel;\r\n    }\r\n\r\n    public getPropertiesPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return '';\r\n    }\r\n\r\n    public showFirstTab(): void {\r\n        if (this.panelItem.length > 0) {\r\n            this.openTab(this.panelItem[0]);\r\n        }\r\n    }\r\n\r\n    protected createTabElement(tabText: string, tabValue: string, item: PanelItem): PanelItem {\r\n        let tabElementBtn = document.createElement('button');\r\n        tabElementBtn.className = 'tablinks';\r\n        tabElementBtn.innerText = tabText;\r\n        tabElementBtn.value = tabValue;\r\n\r\n        if (item === null) {\r\n            item = new PanelItem(this);\r\n        }\r\n        item.withButton(tabElementBtn);\r\n\r\n        tabElementBtn.onclick = () => this.openTab(item);\r\n        this.divPropertiesTabbedPanel.appendChild(tabElementBtn);\r\n        this.panelItem.push(item);\r\n        return item;\r\n    }\r\n\r\n    protected openTab(panelItem: PanelItem): void {\r\n        for (let key in this.panelItem) {\r\n            let child = this.panelItem[key];\r\n            if (child !== panelItem) {\r\n                 child.deactive();\r\n            }\r\n        }\r\n        panelItem.active();\r\n        // hide other tabcontent\r\n        if (this.divPropertiesPanel) {\r\n            while (this.divPropertiesPanel.hasChildNodes()) {\r\n                this.divPropertiesPanel.removeChild(this.divPropertiesPanel.childNodes[0]);\r\n            }\r\n        }\r\n\r\n        // ADD\r\n        if (panelItem.getContent()) {\r\n            this.divPropertiesPanel.appendChild(panelItem.getContent());\r\n        }\r\n    }\r\n}\r\n\r\nexport class GeneratePanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n\r\n        let item: PanelItem = this.createTabElement('General', 'General', null);\r\n\r\n        // Workspace and generate code stuff\r\n        let inputGenerateWorkspace: HTMLInputElement =  <HTMLInputElement> Util.createHTML({tag: 'input', id: 'workspace', type: 'text', placeholder: 'Type your Folder for generated code...', value: 'src/main/java', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Folder:', inputGenerateWorkspace);\r\n\r\n        let inputGeneratePackage: HTMLInputElement = <HTMLInputElement> Util.createHTML({tag: 'input', id: 'package', type: 'text', placeholder: 'Type your workspace for generated code...', value: '', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Package:', inputGeneratePackage);\r\n\r\n        let options = document.createElement('div');\r\n        options.style.textAlign = 'center';\r\n        options.style.margin = '3';\r\n        options.style.padding = '5';\r\n\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(options);\r\n\r\n        options.style.borderStyle = 'groove';\r\n        options.style.borderRadius = '10px';\r\n\r\n        let btnGenerate = document.createElement('button');\r\n        btnGenerate.textContent = 'Generate';\r\n        btnGenerate.title = 'Generate code into your workspace';\r\n        btnGenerate.className = 'OptionElement';\r\n\r\n        let that = this;\r\n        btnGenerate.onclick = () => {\r\n            let workspace = inputGeneratePackage.value;\r\n            if (workspace.length === 0) {\r\n                alert('No workspace set.\\nEnter first your workspace');\r\n                inputGeneratePackage.focus();\r\n                return;\r\n            }\r\n            that.group.getGraph().generate(workspace, inputGenerateWorkspace.value);\r\n        };\r\n        options.appendChild(btnGenerate);\r\n        options.appendChild(document.createElement('hr'));\r\n        options.appendChild(document.createElement('br'));\r\n\r\n        let btnAutoLayout = Util.createHTML({tag: 'button', className: 'OptionElement', value: 'Auto Layout', style: {marginRight: '10px'}, onclick: () => {\r\n                that.group.getGraph().layout();\r\n            }});\r\n\r\n        options.appendChild(btnAutoLayout);\r\n\r\n        // delete all nodes\r\n        let btnDeleteAll = document.createElement('button');\r\n        btnDeleteAll.className = 'OptionElement';\r\n        btnDeleteAll.textContent = 'Delete All';\r\n        btnDeleteAll.title = 'Delete all nodes from diagram';\r\n\r\n        btnDeleteAll.onclick = () => {\r\n            let confirmDelete = confirm('All classes will be deleted!');\r\n            if (!confirmDelete) {\r\n                return;\r\n            }\r\n            that.group.getGraph().$graphModel.removeAllElements();\r\n        };\r\n        btnDeleteAll.style.marginRight = '10px';\r\n        options.appendChild(btnDeleteAll);\r\n\r\n        // export stuff\r\n        let exportTypes: string[] = ['Export', 'HTML', 'JSON', 'PDF', 'PNG', 'SVG'];\r\n        let selectExport = document.createElement('select');\r\n\r\n        exportTypes.forEach(type => {\r\n            if (!(!window['jsPDF'] && type === 'PDF')) {\r\n                let option = document.createElement('option');\r\n                option.value = type;\r\n                option.textContent = type;\r\n                selectExport.appendChild(option);\r\n            }\r\n        });\r\n\r\n        selectExport.onchange = (evt) => {\r\n            let selectedExportType = selectExport.options[selectExport.selectedIndex].value;\r\n            selectExport.selectedIndex = 0;\r\n            that.group.getGraph().saveAs(selectedExportType);\r\n        };\r\n        selectExport.className = 'OptionElement';\r\n        options.appendChild(selectExport);\r\n        options.appendChild(document.createElement('br'));\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Properties';\r\n    }\r\n\r\n}\r\n\r\nexport class ClearPanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Select any element to see its properties';\r\n    }\r\n}\r\n\r\nexport class PanelItem {\r\n    protected panel: Panel;\r\n    protected label: string;\r\n    protected button: HTMLButtonElement;\r\n    protected content: HTMLDivElement = <HTMLDivElement>Util.create({tag: 'div', className: 'tabContent'});\r\n\r\n    constructor(panel: Panel, label?: string) {\r\n        this.panel = panel;\r\n        this.label = label;\r\n    }\r\n\r\n    public active(): void {\r\n        if (this.getButton()) {\r\n            this.getButton().className += ' active';\r\n        }\r\n    }\r\n\r\n    public deactive(): void {\r\n        if (this.getButton()) {\r\n            Util.removeClass(this.getButton(), 'active');\r\n        }\r\n    }\r\n\r\n    public withButton(button: HTMLButtonElement): PanelItem {\r\n        this.button = button;\r\n        return this;\r\n    }\r\n\r\n    public withContent(element: HTMLElement): PanelItem {\r\n        this.content.appendChild(element);\r\n        return this;\r\n    }\r\n\r\n    public withInput(labelText: string, element: HTMLElement): PanelItem {\r\n        let group: HTMLDivElement = <HTMLDivElement> Util.createHTML({tag: 'div'});\r\n        let label = Util.createHTML({tag: 'label', for: element.id, value: labelText});\r\n        group.appendChild(label);\r\n        group.appendChild(element);\r\n\r\n        this.content.appendChild(group);\r\n        return this;\r\n    }\r\n\r\n    public getButton(): HTMLButtonElement {\r\n        return this.button;\r\n    }\r\n\r\n    public getContent(): HTMLDivElement {\r\n        return this.content;\r\n    }\r\n\r\n   public getHeader(): string {\r\n        return this.label;\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\nimport Data from './Data';\r\n\r\nexport class PropertyBinder implements PropertyChangeSupport {\r\n    private propertyClass1: string;\r\n    private propertyClass2: string;\r\n    private data1: Data;\r\n    private data2: Data;\r\n    // works like a lock\r\n    private applyingChange: boolean = false;\r\n\r\n    constructor(data1: Data, data2: Data, propertyClass1: string, propertyClass2: string) {\r\n        this.data1 = data1;\r\n        this.data2 = data2;\r\n        this.propertyClass1 = propertyClass1;\r\n        this.propertyClass2 = propertyClass2;\r\n    }\r\n    static bind(data1: Data, data2: Data, property1: string, property2: string) {\r\n        if (!data1 || !data2 || !property1) {\r\n            console.error('NullValue!!');\r\n            return null;\r\n        }\r\n        const propertyBinder = new PropertyBinder(data1, data2, property1, property2);\r\n        propertyBinder.bind();\r\n        return propertyBinder;\r\n    }\r\n\r\n    propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        if (!this.applyingChange) {\r\n            this.applyingChange = true;\r\n            if (entity === this.data1) {\r\n                // fire to data2\r\n                this.data2.setValue(this.propertyClass2, newValue);\r\n            } else if (entity === this.data2) {\r\n                // fire to data1\r\n                this.data1.setValue(this.propertyClass1, newValue);\r\n            }\r\n            this.applyingChange = false;\r\n        }\r\n    }\r\n\r\n    protected bind() {\r\n        // public addListener(control: Control, property?: string)\r\n        // todo: set value immediately\r\n        this.data1.setValue(this.propertyClass1, this.data2.getValue(this.propertyClass2));\r\n\r\n        this.data1.addListener(this, this.propertyClass1);\r\n        this.data2.addListener(this, this.propertyClass2);\r\n    }\r\n\r\n    protected unbind() {\r\n        // public addListener(control: Control, property?: string)\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n    }\r\n}\r\n","// ################################## RGBColor ####################################################\r\nexport class RGBColor {\r\n    public  ok: boolean;\r\n    public r: number;\r\n    public g: number;\r\n    public b: number;\r\n\r\n    constructor(value: string) {\r\n        this.ok = false;\r\n        if (value === 'none') {\r\n            return;\r\n        }\r\n        let computedColor, div = document.createElement('div');\r\n        div.style.backgroundColor = value;\r\n        document.body.appendChild(div);\r\n        computedColor = window.getComputedStyle(div).backgroundColor;\r\n        // cleanup temporary div.\r\n        document.body.removeChild(div);\r\n        this.convert(computedColor);\r\n    }\r\n    public convert(value: any) {\r\n        let values, regex = /rgb *\\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\\)/;\r\n        values = regex.exec(value);\r\n        this.r = parseInt(values[1], 10);\r\n        this.g = parseInt(values[2], 10);\r\n        this.b = parseInt(values[3], 10);\r\n        this.ok = true;\r\n    }\r\n\r\n    public toRGB(): string {return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; }\r\n    public toHex(): string {\r\n        return '#' + (this.r + 0x10000).toString(16).substring(3).toUpperCase() + (this.g + 0x10000).toString(16).substring(3).toUpperCase() + (this.b + 0x10000).toString(16).substring(3).toUpperCase();\r\n    }\r\n}\r\n","/*\r\n NetworkParser\r\n Copyright (c) 2011 - 2014, Stefan Lindel\r\n All rights reserved.\r\n\r\n Licensed under the EUPL, Version 1.1 or (as soon they\r\n will be approved by the European Commission) subsequent\r\n versions of the EUPL (the \"Licence\");\r\n You may not use this work except in compliance with the Licence.\r\n You may obtain a copy of the Licence at:\r\n\r\n http://ec.europa.eu/idabc/eupl5\r\n\r\n Unless required by applicable law or agreed to in\r\n writing, software distributed under the Licence is\r\n distributed on an \"AS IS\" basis,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\r\n express or implied.\r\n See the Licence for the specific language governing\r\n permissions and limitations under the Licence.\r\n*/\r\nimport {RGBColor} from './RGBColor';\r\nimport {JSEPS} from \"./JSEPS\";\r\n\r\nconst epsSvgAttr = {\r\n    // allowed attributes. all others are removed from the preview.\r\n    g: ['stroke', 'fill', 'stroke-width'],\r\n    line: ['x1', 'y1', 'x2', 'y2', 'stroke', 'stroke-width'],\r\n    rect: ['x', 'y', 'width', 'height', 'stroke', 'fill', 'stroke-width'],\r\n    ellipse: ['cx', 'cy', 'rx', 'ry', 'stroke', 'fill', 'stroke-width'],\r\n    circle: ['cx', 'cy', 'r', 'stroke', 'fill', 'stroke-width'],\r\n    text: ['x', 'y', 'font-size', 'font-family', 'text-anchor', 'font-weight', 'font-style', 'fill'],\r\n    path: ['']\r\n};\r\nexport class SVGConverter {\r\n    private k: number;\r\n    private remove: boolean;\r\n    private target: any;\r\n\r\n    constructor(element: any, target: any, options: any) {\r\n        this.k = 1.0;\r\n        let hasScale = typeof (options.scale), hasRemoveInvalid = typeof (options.removeInvalid);\r\n        this.k = (options && hasScale !== 'undefined' ? options.scale : 1.0);\r\n        this.remove = (options && hasRemoveInvalid !== 'undefined' ? options.removeInvalid : false);\r\n        this.target = target;\r\n        this.parse(element);\r\n    }\r\n\r\n    public parse(element: any) {\r\n        let el, i, n, colorMode, hasFillColor, fillRGB, fillColor, strokeColor, strokeRGB, fontType, pdfFontSize, x, y,\r\n            box, xOffset;\r\n        if (!element) {\r\n            return;\r\n        }\r\n        if (typeof element === 'string') {\r\n            el = document.createElement('div');\r\n            el.innerHTML = element;\r\n            element = el.childNodes[0];\r\n        }\r\n        for (i = 0; i < element.children.length; i += 1) {\r\n            n = element.children[i];\r\n            colorMode = null;\r\n            hasFillColor = false;\r\n            if ('g,line,rect,ellipse,circle,text'.indexOf(n.tagName) >= 0) {\r\n                fillColor = n.getAttribute('fill');\r\n                if (fillColor) {\r\n                    fillRGB = new RGBColor(fillColor);\r\n                    if (fillRGB.ok) {\r\n                        hasFillColor = true;\r\n                        colorMode = 'F';\r\n                    }\r\n                }\r\n            }\r\n            if ('g,line,rect,ellipse,circle'.indexOf(n.tagName) >= 0) {\r\n                if (hasFillColor) {\r\n                    this.target.setFillColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                }\r\n                strokeColor = n.getAttribute('stroke');\r\n                if (n.hasAttribute('stroke-width')) {\r\n                    this.target.setLineWidth(this.attr(n, 'stroke-width'));\r\n                }\r\n                if (strokeColor) {\r\n                    strokeRGB = new RGBColor(strokeColor);\r\n                    if (strokeRGB.ok) {\r\n                        this.target.setDrawColor(strokeRGB.r, strokeRGB.g, strokeRGB.b);\r\n                        if (colorMode === 'F') {\r\n                            colorMode = 'FD';\r\n                        } else if (!hasFillColor) {\r\n                            colorMode = 'S';\r\n                        }\r\n                    } else {\r\n                        colorMode = null;\r\n                    }\r\n                }\r\n            }\r\n            // console.log(\"write \"+n.tagName);\r\n            switch (n.tagName.toLowerCase()) {\r\n                case 'svg':\r\n                case 'a':\r\n                case 'g':\r\n                    this.parse(n);\r\n                    break;\r\n                case 'line':\r\n                    this.target.line(this.attr(n, 'x1'), this.attr(n, 'y1'), this.attr(n, 'x2'), this.attr(n, 'y2'));\r\n                    break;\r\n                case 'rect':\r\n                    this.target.rect(this.attr(n, 'x'), this.attr(n, 'y'), this.attr(n, 'width'), this.attr(n, 'height'), n.getAttribute('style'));\r\n                    break;\r\n                case 'ellipse':\r\n                    this.target.ellipse(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'rx'), this.attr(n, 'ry'), colorMode);\r\n                    break;\r\n                case 'circle':\r\n                    this.target.circle(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'r'), colorMode);\r\n                    break;\r\n                case 'text':\r\n                    if (n.hasAttribute('font-family')) {\r\n                        switch (n.getAttribute('font-family').toLowerCase()) {\r\n                            case 'serif':\r\n                                this.target.setFont('times');\r\n                                break;\r\n                            case 'monospace':\r\n                                this.target.setFont('courier');\r\n                                break;\r\n                            default:\r\n                                n.getAttribute('font-family', 'sans-serif');\r\n                                this.target.setFont('Helvetica');\r\n                        }\r\n                    }\r\n                    if (hasFillColor) {\r\n                        this.target.setTextColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                    }\r\n                    if (this.target instanceof JSEPS) {\r\n                        this.target.text(this.attr(n, 'x'), this.attr(n, 'y'), n.innerHTML);\r\n                        break;\r\n                    }\r\n                    fontType = '';\r\n                    if (n.hasAttribute('font-weight')) {\r\n                        if (n.getAttribute('font-weight') === 'bold') {\r\n                            fontType = 'bold';\r\n                        }\r\n                    }\r\n                    if (n.hasAttribute('font-style')) {\r\n                        if (n.getAttribute('font-style') === 'italic') {\r\n                            fontType += 'italic';\r\n                        }\r\n                    }\r\n                    this.target.setFontType(fontType);\r\n                    pdfFontSize = 16;\r\n                    if (n.hasAttribute('font-size')) {\r\n                        pdfFontSize = parseInt(n.getAttribute('font-size'), 10);\r\n                    }\r\n                    box = n.getBBox();\r\n                    // FIXME: use more accurate positioning!!\r\n                    x = this.attr(n, 'x');\r\n                    y = this.attr(n, 'y');\r\n                    xOffset = 0;\r\n                    if (n.hasAttribute('text-anchor')) {\r\n                        switch (n.getAttribute('text-anchor')) {\r\n                            case 'end':\r\n                                xOffset = box.width;\r\n                                break;\r\n                            case 'middle':\r\n                                xOffset = box.width / 2;\r\n                                break;\r\n                            case 'start':\r\n                                break;\r\n                            case 'default':\r\n                                n.getAttribute('text-anchor', 'start');\r\n                                break;\r\n                        }\r\n                        x = x - (xOffset * this.k);\r\n                    }\r\n                    this.target.setFontSize(pdfFontSize).text(x, y, n.innerHTML);\r\n                    break;\r\n                default:\r\n                    if (this.remove) {\r\n                        console.log('cant translate to target:', n);\r\n                        element.removeChild(n);\r\n                        i -= 1;\r\n                    }\r\n            }\r\n        }\r\n    }\r\n\r\n    public attr(node: any, name: string) {\r\n        return this.k * parseInt(node.getAttribute(name), 10);\r\n    }\r\n}\r\n","import {Control} from './Control';\r\n\r\nexport class ScrumBoard extends Control {\r\n    public static cards = [0, 0.5, 1, 2, 3, 5, 8, 13, 20, 40, 100, '?', 'Coffee'];\r\n    private $selected: HTMLDivElement;\r\n    private $board: HTMLDivElement;\r\n\r\n    constructor() {\r\n        super();\r\n        this.redraw();\r\n    }\r\n\r\n    public redraw(): void {\r\n        if (this.$board) {\r\n            while (this.$board.children.length > 0 ) {\r\n                this.$board.removeChild(this.$board.children[0]);\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('div');\r\n            this.$selected = document.createElement('div');\r\n            this.$board = document.createElement('div');\r\n            this.$view.appendChild(this.$board);\r\n            this.$view.appendChild(this.$selected);\r\n        }\r\n        this.$view.className = 'ScrumBoard';\r\n        for ( let i = 0; i < ScrumBoard.cards.length; i++) {\r\n            let card = document.createElement('div');\r\n            card.className = 'ScrumCard';\r\n            card.innerHTML = <string>ScrumBoard.cards[i];\r\n            card['pokervalue'] = <string>ScrumBoard.cards[i];\r\n            card.onclick = e => {\r\n                this.onClick(<HTMLDivElement>e.target);\r\n            };\r\n            this.$board.appendChild(card);\r\n        }\r\n    }\r\n\r\n    public getSVG() {\r\n        this.redraw();\r\n        return this.$view;\r\n    }\r\n\r\n    public onClick(target: HTMLDivElement): void {\r\n        console.log(target['pokervalue']);\r\n\r\n        while (this.$selected.children.length > 0 ) {\r\n            this.$selected.removeChild(this.$selected.children[0]);\r\n        }\r\n        let card = document.createElement('div');\r\n        card.className = 'ScrumCard';\r\n        card['pokervalue'] = target['pokervalue'];\r\n        card.onclick = e => {\r\n            this.onShow(<HTMLDivElement>e.target);\r\n        };\r\n        this.$selected.appendChild(card);\r\n        this.$board['style']['display'] = 'none';\r\n    }\r\n\r\n    public onShow(target: HTMLDivElement): void {\r\n        target.innerHTML = target['pokervalue'];\r\n    }\r\n}\r\n","import {Graph} from './main';\r\nimport {SymbolLibary} from './elements/nodes/Symbol';\r\nimport {EventBus} from './EventBus';\r\n\r\nexport class Toolbar {\r\n\r\n    private graph: Graph;\r\n    private mainDiv: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public show(): void {\r\n        if (this.mainDiv) {\r\n            return;\r\n        }\r\n\r\n        this.mainDiv = document.createElement('div');\r\n        this.mainDiv.className = 'toolbar';\r\n\r\n        let h1Logo = document.createElement('h1');\r\n        h1Logo.className = 'logo';\r\n        h1Logo.textContent = 'DiagramJS';\r\n\r\n        let node = {type: 'Hamburger', property: 'HTML', width: 24, height: 24, id: 'GenerateProp'};\r\n        let hamburger = SymbolLibary.draw( node);\r\n        EventBus.registerEvent(hamburger, 'click', node);\r\n        this.mainDiv.appendChild(hamburger);\r\n\r\n        this.mainDiv.appendChild(h1Logo);\r\n        document.body.appendChild(this.mainDiv);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 06.03.2017.\r\n */\r\nimport Data from './Data';\r\n\r\n// export default class Data {\r\n//    public values = {};\r\n//    id: string;\r\n//    $listener: Control[] = [];\r\n//    property: string;\r\nexport namespace UML {\r\n    export class Clazz extends Data {\r\n        public static NAME: string = 'name';\r\n        public static ATTRIBUTES: string = 'attributes';\r\n        public static METHODS: string = 'methods';\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Clazz';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n\r\n        public getAttributes() {\r\n            return this.prop[Clazz.ATTRIBUTES];\r\n        }\r\n\r\n        public addToAttributes(newValue: string) {\r\n            this.addTo(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n\r\n        public removeFromAttributes(newValue: string) {\r\n            this.removeFrom(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n    }\r\n\r\n    export class Attribute extends Data {\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Attribute';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n    }\r\n\r\n    export class Methods extends Data {\r\n\r\n    }\r\n}\r\n\r\nwindow['UML'] = UML;\r\n","import {Control} from './Control';\r\n\r\nexport class VirtualKeyBoard extends Control {\r\n    constructor(data: any) {\r\n        super();\r\n        if (!data) {\r\n            data = this.getDefault();\r\n        }\r\n        let board = document.createElement('div');\r\n        this.$viewData = data;\r\n\r\n        for (let type in data) {\r\n            if (type === 'normal') {\r\n                for (let line in data[type]) {\r\n                    let lineBoard = document.createElement('div');\r\n                    lineBoard.className = 'vkLine';\r\n                    for (let key in data[type][line]) {\r\n                        let btn: HTMLButtonElement = document.createElement('button');\r\n                        let keyTag = data[type][line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                        btn.ontouchend = () => {this.action(btn); };\r\n                        btn.onclick = () => {this.action(btn); };\r\n                        lineBoard.appendChild(btn);\r\n                    }\r\n                    board.appendChild(lineBoard);\r\n                }\r\n            }\r\n        }\r\n        this.$view = board;\r\n    }\r\n\r\n    public action(btn: HTMLButtonElement) {\r\n        if (btn['key'] === '{Shift}') {\r\n            if ( btn.className === 'vkbuttonAction') {\r\n                let keys = this.$viewData['normal'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                    }\r\n                }\r\n            } else if ( btn.className === 'vkbutton') {\r\n                let keys = this.$viewData['shift'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbuttonAction');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        alert(btn);\r\n    }\r\n\r\n    public getDefault(): any {\r\n        let format = {\r\n            normal: [\r\n                ['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '?', '´', '{Bksp}'],\r\n                ['{Tab}', 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+'],\r\n                ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '#', '{enter}'],\r\n                ['{Shift}', '<', 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n// '{left}', '{up}', '{down}','{right}', '{Cancel}']\r\n            ],\r\n            shift: [\r\n                ['°', '!', '\"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '`', '{Bksp}'],\r\n                ['{Tab}', 'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', 'O', 'P', 'Ü', '*'],\r\n                ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', '\\'', '{enter}'],\r\n                ['{Shift}', '>', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n            ]\r\n        };\r\n        return format;\r\n    }\r\n\r\n    public getBoard() {\r\n        return this.$view;\r\n    }\r\n\r\n    private setButtonValue(keyTag: string, btn: HTMLButtonElement, shiftClass: string) {\r\n        btn.className = 'vkbutton';\r\n        btn['key'] = keyTag;\r\n        btn['type'] = 'normal';\r\n        if (keyTag.substring(0, 1) === '{') {\r\n            if (keyTag === '{Bksp}') {\r\n                btn.innerHTML = 'Bksp';\r\n            } else if (keyTag === '{Tab}') {\r\n                btn.innerHTML = '&#8677; Tab';\r\n            } else if (keyTag === '{enter}') {\r\n                btn.innerHTML = 'enter';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Shift}') {\r\n                btn.innerHTML = 'Shift';\r\n                btn.className = shiftClass;\r\n            } else if (keyTag === '{Accept}') {\r\n                btn.innerHTML = 'Accept';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Alt}') {\r\n                btn.innerHTML = 'Alt';\r\n            } else if (keyTag === '{Space}') {\r\n                btn.innerHTML = '&nbsp;';\r\n                btn.className = 'vkbuttonSpace';\r\n            } else if (keyTag === '{left}') {\r\n                btn.innerHTML = '&#8592';\r\n            } else if (keyTag === '{right}') {\r\n                btn.innerHTML = '&#8594;';\r\n            } else if (keyTag === '{up}') {\r\n                btn.innerHTML = '&#8593;';\r\n            } else if (keyTag === '{down}') {\r\n                btn.innerHTML = '&#8595;';\r\n            } else if (keyTag === '{Cancel}') {\r\n                btn.innerHTML = 'Cancel';\r\n                btn.className = 'vkbuttonAction';\r\n            }\r\n        } else {\r\n            btn.innerHTML = keyTag;\r\n        }\r\n    }\r\n}\r\n","import {Adapter} from '../Adapter';\r\n\r\nexport class JavaAdapter extends Adapter {\r\n    constructor() {\r\n        super();\r\n        this.id = 'JavaAdapter';\r\n    }\r\n    update(evt: Object): boolean {\r\n        if (this.isActive()) {\r\n            window['JavaBridge'].executeChange(evt);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public isActive(): boolean {\r\n        return window['JavaBridge'];\r\n    }\r\n}\r\n","export * from './JavaAdapter';\r\n","import { Util } from '../util';\r\nimport { Control } from '../Control';\r\n\r\nexport interface Size {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\ninterface GraphElement {\r\n    getSize(): Point;\r\n\r\n    getPos(): Point;\r\n\r\n    getCenter(): Point;\r\n\r\n    getSVG(): Element;\r\n\r\n    getCanvas(): Element;\r\n\r\n    getEvents(): string[];\r\n\r\n    withPos(x: number, y: number): GraphElement;\r\n\r\n    load(data: any): any;\r\n\r\n    getToolBarIcon(): Element;\r\n\r\n    loadProperties(properties: any): void;\r\n}\r\n\r\nexport abstract class DiagramElement extends Control implements GraphElement {\r\n\r\n    protected $isDraggable: boolean = true;\r\n    protected $labelHeight = 25;\r\n    protected $labelFontSize = 14;\r\n    private $pos: Point = new Point();\r\n    private $size: Point = new Point();\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getPos(): Point {\r\n        return this.$pos;\r\n    }\r\n\r\n    public getSize(): Point {\r\n        return this.$size;\r\n    }\r\n\r\n    public getCenter(): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        return new Point(pos.x + size.x / 2, pos.y + size.y / 2);\r\n    }\r\n\r\n    public getCenterPosition(p: string): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let offset = this['$' + p];\r\n        let center = this.getCenter();\r\n        if (p === Point.DOWN) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y + size.y, Point.DOWN);\r\n        }\r\n        if (p === Point.UP) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y, Point.UP);\r\n        }\r\n        if (p === Point.LEFT) {\r\n            return new Point(pos.x, Math.min(center.y + offset, pos.y + size.y), Point.LEFT);\r\n        }\r\n        if (p === Point.RIGHT) {\r\n            return new Point(pos.x + size.x, Math.min(center.y + offset, pos.y + size.y), Point.RIGHT);\r\n        }\r\n        return new Point();\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getCanvas(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return null;\r\n    }\r\n\r\n    public getAlreadyDisplayingSVG(): Element {\r\n        return document.getElementById(this.id) || this.getSVG();\r\n    }\r\n\r\n    public load(data: any) {\r\n        // Do Nothing\r\n    }\r\n\r\n    public withPos(x: number, y: number): GraphElement {\r\n        if (x && y) {\r\n            this.$pos = new Point(x, y);\r\n        } else {\r\n            if (typeof (x) !== 'undefined' && x !== null) {\r\n                this.$pos.x = x;\r\n            }\r\n            if (typeof (y) !== 'undefined' && y !== null) {\r\n                this.$pos.y = y;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public withSize(width: number, height: number): DiagramElement {\r\n        if (width && height) {\r\n            this.$size = new Point(width, height);\r\n        } else {\r\n            if (typeof (width) !== 'undefined' && width !== null) {\r\n                this.$size.x = width;\r\n            }\r\n            if (typeof (height) !== 'undefined' && height !== null) {\r\n                this.$size.y = height;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        // FIXME if (this.status === 'close') {\r\n        // if (!this.$owner.isClosed()) {\r\n        //        return this;\r\n        //    }\r\n        // }\r\n        return super.getShowed();\r\n    }\r\n\r\n    public loadProperties(properties: any) {\r\n        // DO Nothing\r\n    }\r\n\r\n    protected createShape(attrs: any): Element {\r\n        return Util.createShape(attrs);\r\n    }\r\n}\r\n\r\nexport class Point {\r\n    public static UP: string = 'UP';\r\n    public static LEFT: string = 'LEFT';\r\n    public static RIGHT: string = 'RIGHT';\r\n    public static DOWN: string = 'DOWN';\r\n    x: number = 0;\r\n    y: number = 0;\r\n\r\n    //    pos:string = '';\r\n\r\n    constructor(x?: number, y?: number, pos?: string) {\r\n        this.x = Math.ceil(x || 0);\r\n        this.y = Math.ceil(y || 0);\r\n        if (pos) {\r\n            this['pos'] = pos;\r\n        }\r\n    }\r\n\r\n    public add(pos: Point) {\r\n        this.x += pos.x;\r\n        this.y += pos.y;\r\n        return this;\r\n    }\r\n\r\n    public getPosition(): string {\r\n        if (!this['pos']) {\r\n            return '';\r\n        }\r\n        return this['pos'];\r\n    }\r\n\r\n    public addNum(x: number, y: number) {\r\n        this.x += x;\r\n        this.y += y;\r\n        return this;\r\n    }\r\n\r\n    public sum(pos: Point) {\r\n        let sum = new Point(this.x, this.y);\r\n        sum.add(pos);\r\n        return sum;\r\n    }\r\n\r\n    public center(posA: Point, posB: Point) {\r\n        let count = 0;\r\n        if (posA) {\r\n            this.x += posA.x;\r\n            this.y += posA.y;\r\n            count++;\r\n        }\r\n        if (posB) {\r\n            this.x += posB.x;\r\n            this.y += posB.y;\r\n            count++;\r\n        }\r\n        if (count > 0) {\r\n            this.x = (this.x / count);\r\n            this.y = (this.y / count);\r\n        }\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        return this.x < 1 && this.y < 1;\r\n    }\r\n\r\n    public size(posA: Point, posB: Point) {\r\n        let x1 = 0, x2 = 0, y1 = 0, y2 = 0;\r\n        if (posA) {\r\n            x1 = posA.x;\r\n            y1 = posA.y;\r\n        }\r\n        if (posB) {\r\n            x2 = posB.x;\r\n            y2 = posB.y;\r\n        }\r\n        if (x1 > x2) {\r\n            this.x = x1 - x2;\r\n        } else {\r\n            this.x = x2 - x1;\r\n        }\r\n        if (y1 > y2) {\r\n            this.y = y1 - y2;\r\n        } else {\r\n            this.y = y2 - y1;\r\n        }\r\n    }\r\n}\r\n\r\n// \t\t\t\t######################################################### Line #########################################################\r\nexport class Line extends DiagramElement {\r\n    public static FORMAT = { SOLID: 'SOLID', DOTTED: 'DOTTED', PATH: 'PATH' };\r\n    public source: Point;\r\n    public target: Point;\r\n    public color: string;\r\n    public lineType: string;\r\n    private path: string;\r\n    private angle: Number;\r\n\r\n    constructor(lineType: string) {\r\n        super();\r\n        this.lineType = lineType;\r\n    }\r\n\r\n    public getTyp(): string {\r\n        return 'SVG';\r\n    }\r\n\r\n    public getPos() {\r\n        let pos = new Point();\r\n        pos.center(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public getSize() {\r\n        let pos = new Point();\r\n        pos.size(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public withColor(color: string): Line {\r\n        this.color = color;\r\n        return this;\r\n    }\r\n\r\n    public withSize(x: number, y: number): DiagramElement {\r\n        return this;\r\n    }\r\n\r\n    public withPath(path: Array<Point>, close: boolean, angle?: any): Line {\r\n        let i: number, d: string = 'M' + path[0].x + ' ' + path[0].y;\r\n        this.lineType = Line.FORMAT.PATH; // It is a Path not a Line\r\n        for (i = 1; i < path.length; i += 1) {\r\n            d = d + 'L ' + path[i].x + ' ' + path[i].y;\r\n        }\r\n        if (close) {\r\n            d = d + ' Z';\r\n            this.target = path[0];\r\n        } else {\r\n            this.target = path[path.length - 1];\r\n        }\r\n        this.path = d;\r\n        if (angle instanceof Number) {\r\n            this.angle = angle;\r\n        } else if (angle) {\r\n            // var lineangle, start = path[0], end = path[path.length - 1];\r\n            // lineangle = Math.atan2(end.y - start.y, end.x - start.x);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): SVGGElement {\r\n        if (this.lineType === 'PATH') {\r\n            return <SVGGElement>Util.create({\r\n                tag: 'path',\r\n                'd': this.path,\r\n                'fill': this.color,\r\n                stroke: '#000',\r\n                'stroke-width': '1px'\r\n            });\r\n        }\r\n        let line: SVGGElement = <SVGGElement>Util.create({\r\n            tag: 'line',\r\n            'x1': this.source.x,\r\n            'y1': this.source.y,\r\n            'x2': this.target.x,\r\n            'y2': this.target.y,\r\n            'stroke': Util.getColor(this.color)\r\n        });\r\n        if (this.lineType && this.lineType.toLowerCase() === 'dotted') {\r\n            line.setAttribute('stroke-miterlimit', '4');\r\n            line.setAttribute('stroke-dasharray', '1,1');\r\n        }\r\n        return line;\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport Options from '../Options';\r\nimport {JavaAdapter} from '../adapters';\r\n\r\nexport class ClassEditor extends Graph {\r\n    private adapter: JavaAdapter;\r\n    constructor(json: any, options: Options) {\r\n        if (!options ) {\r\n            options = {};\r\n        }\r\n        options.canvas = options.canvas || 'canvas';\r\n        // options.origin = options.origin || new Point(150, 45);\r\n//            layout: \"DagreLayout\",\r\n        options.autoSave = options.autoSave || true;\r\n        if (!options.features) {\r\n            options.features = {\r\n                drag: true,\r\n                editor: true,\r\n                palette: true,\r\n                select: true,\r\n                zoom: true,\r\n                toolbar: true,\r\n                import: true,\r\n                properties: true,\r\n                addnode: true,\r\n                newedge: true\r\n            };\r\n        }\r\n        super(json, options);\r\n    }\r\n\r\n    public setBoardStyle(value: string) {\r\n        console.log(value);\r\n        this.importFile.setBoardStyle(value);\r\n    }\r\n\r\n    public registerListener(): void {\r\n        this.adapter = new JavaAdapter();\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return this.adapter;\r\n    }\r\n}\r\n","import * as edges from './edges';\r\nimport { Association } from './edges';\r\nimport * as nodes from './nodes';\r\nimport * as layouts from '../layouts';\r\nimport Layout from '../layouts/Layout';\r\nimport { GraphModel } from './Model';\r\nimport { Point, Size } from './BaseElements';\r\nimport { Util } from '../util';\r\nimport { Control } from '../Control';\r\nimport Data from '../Data';\r\nimport { EventBus } from '../EventBus';\r\nimport { AddNode, Drag, NewEdge, Select, Zoom } from '../handlers';\r\nimport Options from '../Options';\r\nimport { ImportFile } from '../handlers/ImportFile';\r\nimport { CSS } from '../CSS';\r\nimport { DiagramElement } from './index';\r\nimport { Toolbar } from '../Toolbar';\r\nimport {JSEPS} from '../JSEPS';\r\nimport {SVGConverter} from '../SVGConverter';\r\nimport Palette from '../Palette';\r\nimport {PanelGroup} from '../PropertiesPanel';\r\n\r\nexport class Graph extends Control {\r\n    // canvas: HTMLElement;\r\n    root: SVGElement;\r\n    $graphModel: GraphModel;\r\n    options: Options;\r\n    canvasSize: Size;\r\n    nodeFactory: Object;\r\n    edgeFactory: Object;\r\n    layoutFactory: Object;\r\n    protected importFile: ImportFile;\r\n    private currentlayout: Layout;\r\n    // private layerToolBar: SVGSVGElement;\r\n    // https://stackoverflow.com/questions/15181452/how-to-save-export-inline-svg-styled-with-css-from-browser-to-image-file\r\n    private containerElements = ['svg', 'g'];\r\n    private relevantStyles = {\r\n        'rect': ['fill', 'stroke', 'stroke-width'],\r\n        'path': ['fill', 'stroke', 'stroke-width', 'opacity'],\r\n        'circle': ['fill', 'stroke', 'stroke-width'],\r\n        'line': ['stroke', 'stroke-width'],\r\n        'text': ['fill', 'font-size', 'text-anchor', 'font-family'],\r\n        'polygon': ['stroke', 'fill']\r\n    };\r\n\r\n    constructor(json: any, options: Options) {\r\n        super();\r\n        json = json || {};\r\n        if (json['data']) {\r\n            options = json['options'];\r\n            json = json['data'];\r\n            this.id = json['id'];\r\n        }\r\n        this.options = options || {features: { drag: true}};\r\n        if (json['init']) {\r\n            return;\r\n        }\r\n        if (!this.options.origin) {\r\n            this.options.origin = new Point(150, 45);\r\n        }\r\n        if (!this.options.style) {\r\n            // Style can be classic or modern\r\n            this.options.style = 'classic';\r\n        }\r\n        if (this.options.autoSave) {\r\n            Util.isAutoSave = options.autoSave;\r\n        }\r\n\r\n        this.initFactories();\r\n        this.initCanvas();\r\n        this.initFeatures(this.options.features);\r\n\r\n        // load previous session, if user wants it\r\n        // otherwise load the json data\r\n        if (!this.lookupInLocalStorage()) {\r\n            this.load(json);\r\n        }\r\n\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    public lookupInLocalStorage(): boolean {\r\n        if (!this.options.autoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (!Util.isLocalStorageSupported()) {\r\n            return false;\r\n        }\r\n        let diagram = Util.getDiagramFromLocalStorage();\r\n        if (diagram && diagram.length > 0) {\r\n            if (confirm('Restore previous session?')) {\r\n                let jsonData: JSON = JSON.parse(diagram);\r\n                this.load(jsonData);\r\n                this.layout();\r\n                return true;\r\n            } else {\r\n                Util.saveToLocalStorage( null);\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public fitSizeOnNodes(): void {\r\n        let maxWidth: number = 0;\r\n        let maxHeight: number = 0;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            let nodePos = node.getPos();\r\n            let nodeSize = node.getSize();\r\n            let nodeWidestPosX = nodePos.x + nodeSize.x;\r\n            let nodeWidestPosY = nodePos.y + nodeSize.y;\r\n\r\n            if (nodeWidestPosX > maxWidth) {\r\n                maxWidth = nodeWidestPosX;\r\n            }\r\n\r\n            if (nodeWidestPosY > maxHeight) {\r\n                maxHeight = nodeWidestPosY;\r\n            }\r\n        }\r\n\r\n        this.root.setAttributeNS(null, 'width', '' + (maxWidth + 100));\r\n        this.root.setAttributeNS(null, 'height', '' + (maxHeight + 50));\r\n    }\r\n\r\n    public saveAs(typ: string) {\r\n        typ = typ.toLowerCase();\r\n\r\n        // shrink size of graph to minimum. only to show up nodes\r\n        const currentSize = this.getRootSize();\r\n        this.fitSizeOnNodes();\r\n\r\n        if (typ === 'svg') {\r\n            this.exportSvg();\r\n        } else if (typ === 'png') {\r\n            this.exportPng();\r\n        } else if (typ === 'html') {\r\n            this.exportHtml();\r\n\r\n        } else if (typ === 'pdf') {\r\n            this.exportPdf();\r\n            // } else if (typ === 'eps') {\r\n            // this.ExportEPS();\r\n        }\r\n        else if (typ === 'json') {\r\n            this.exportJson();\r\n        }\r\n\r\n        // set the size back to default\r\n        this.root.setAttributeNS(null, 'width', '' + currentSize.width);\r\n        this.root.setAttributeNS(null, 'height', '' + currentSize.height);\r\n    }\r\n\r\n    /**\r\n     * generates a blob file and makes it available for download.\r\n     * @param type type of file\r\n     * @param data raw data\r\n     * @param name name of download file\r\n     */\r\n    public save(type: string, data: any, name: string, context: string) {\r\n        if (window['java']) {\r\n            window['java'].export(type, data, name, context);\r\n            return;\r\n        }\r\n        let a = document.createElement('a');\r\n        a.href = window.URL.createObjectURL(new Blob([data], { type: context }));\r\n        a.download = name;\r\n        document.body.appendChild(a);\r\n        a.click();\r\n        document.body.removeChild(a);\r\n    }\r\n\r\n    /** Exports the diagram as svg. */\r\n    public exportSvg(): void {\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        this.save('svg', this.serializeXmlNode(wellFormatedSvgDom), 'class_diagram.svg', 'image/svg+xml');\r\n    }\r\n\r\n    /** Exports the diagram as html. */\r\n    public exportHtml(): void {\r\n        let htmlFacade = '<html><head><title>DiagramJS - Classdiagram</title></head><body>$content</body></html>';\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        let svgAsXml = this.serializeXmlNode(wellFormatedSvgDom);\r\n\r\n        let htmlResult = htmlFacade.replace('$content', svgAsXml);\r\n\r\n        this.save('html', htmlResult, 'class_diagram.htm', 'text/plain');\r\n    }\r\n\r\n    /** Exports the diagram as json. */\r\n    public exportJson(): void {\r\n        let type = 'text/plain';\r\n        let jsonObj = Util.toJson(this.$graphModel);\r\n        let data = JSON.stringify(jsonObj, null, '\\t');\r\n\r\n        this.save('json', data, 'class_diagram.json', type);\r\n    }\r\n\r\n    /** Exports the diagram as pdf. */\r\n    public exportPdf(): void {\r\n        if (!window['jsPDF']) {\r\n            console.log('jspdf n.a.');\r\n            return;\r\n        }\r\n        let type = 'image/svg+xml';\r\n        let converter, pdf = new window['jsPDF']('l', 'px', [this.$graphModel.getSize().x, this.$graphModel.getSize().y]);\r\n        converter = new SVGConverter(this.$view, pdf, {removeInvalid: false});\r\n        pdf.save('Download.pdf');\r\n/*        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let canvas, context, a, image = new Image();\r\n        let size = this.getRootSize();\r\n\r\n        // create the loaded img source into a canvas. to generate a picture. then place this picture in the pdf\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            let pdf = new window['jsPDF']();\r\n\r\n            pdf.addImage(canvas.toDataURL('image/jpeg'), 'jpeg', 15, 40, 180, 160);\r\n            pdf.save('class_diagram.pdf');\r\n\r\n        };\r\n\r\n        image.src = url;\r\n        */\r\n    }\r\n\r\n    public import(data: string): void {\r\n        let rootElement = this.$graphModel.$view;\r\n        while (rootElement.hasChildNodes()) {\r\n            rootElement.removeChild(rootElement.firstChild);\r\n        }\r\n\r\n        while (this.$view.hasChildNodes()) {\r\n            this.$view.removeChild(this.$view.firstChild);\r\n        }\r\n\r\n        this.clearModel();\r\n        let jsonData = JSON.parse(data);\r\n        this.load(jsonData);\r\n        this.layout();\r\n    }\r\n\r\n    public exportEPS(): void {\r\n          let converter, doc = new JSEPS({inverting: true});\r\n            converter = new SVGConverter(this.$view, doc, {removeInvalid: false});\r\n            this.save('eps', doc.getData(), 'diagram.eps', doc.getType());\r\n    }\r\n\r\n    /** Exports the diagram as png. */\r\n    public exportPng(): void {\r\n        let canvas, context, a, image = new Image();\r\n        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let typ = 'image/svg+xml';\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let size = this.getRootSize();\r\n\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            a = document.createElement('a');\r\n            a.download = 'class_diagram.png';\r\n            a.href = canvas.toDataURL('image/png');\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            document.body.removeChild(a);\r\n        };\r\n\r\n        image.src = url;\r\n\r\n    }\r\n\r\n    public getSvgWithStyleAttributes(): Node {\r\n        let oDOM = this.$graphModel.$view.cloneNode(true);\r\n        this.readElement(oDOM, this.$graphModel.$view);\r\n\r\n        return oDOM;\r\n    }\r\n\r\n    public serializeXmlNode(xmlNode: any) {\r\n        if (window['XMLSerializer'] !== undefined) {\r\n            return (new window['XMLSerializer']()).serializeToString(xmlNode);\r\n        }\r\n        if (xmlNode.xml !== undefined) {\r\n            return xmlNode.xml;\r\n        }\r\n        return xmlNode.outerHTML;\r\n    }\r\n\r\n    public getRootSize(): Size {\r\n        let width: number;\r\n        let height: number;\r\n        width = +this.root.getAttribute('width');\r\n        height = +this.root.getAttribute('height');\r\n\r\n        return { width: width, height: height };\r\n    }\r\n\r\n        // Graph.prototype.ExportEPS = function () {\r\n        //     var converter, doc = new svgConverter.jsEPS({inverting: true});\r\n        //     converter = new svgConverter(this.board, doc, {removeInvalid: false});\r\n        //     doc.save();\r\n        // };\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        this.$graphModel = new GraphModel();\r\n        this.$graphModel.init(this);\r\n        this.$graphModel.load(json);\r\n    }\r\n\r\n    public clearModel(): void {\r\n        this.$graphModel.removeAllElements();\r\n        this.clearSvgRoot();\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.layout();\r\n        return this;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        return;\r\n    }\r\n\r\n    public getNextFreePosition(): Point {\r\n\r\n        if (!this.$graphModel) {\r\n            return new Point(50, 50);\r\n        }\r\n\r\n        let point = new Point(0, 50);\r\n\r\n        let maxX = 0;\r\n        let minX = 9000;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            maxX = Math.max(maxX, node.getPos().x);\r\n            minX = Math.min(minX, node.getPos().x);\r\n        }\r\n\r\n        if (minX > 170) {\r\n            point.x = 10;\r\n        }\r\n        else {\r\n            point.x = maxX + 200;\r\n        }\r\n\r\n        return point;\r\n    }\r\n\r\n    public addElement(type: string, dontDraw?: boolean): boolean {\r\n        let success = this.$graphModel.addElement(type);\r\n        if (success === true) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return success;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues?: Object, layout?: boolean, dontDraw?: boolean): DiagramElement {\r\n        let element = this.$graphModel.addElementWithValues(type, optionalValues);\r\n        if (element && layout) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public layout(dontDraw?: boolean): Graph {\r\n        this.getLayout().layout(this, this.$graphModel);\r\n\r\n        if (dontDraw) {\r\n            return this;\r\n        }\r\n\r\n        this.draw();\r\n        return this;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTDRAGOVER, EventBus.ELEMENTDRAGLEAVE, EventBus.ELEMENTDROP];\r\n    }\r\n\r\n    public draw() {\r\n        this.clearSvgRoot();\r\n        let model = this.$graphModel;\r\n        let root = this.root;\r\n        let max: Point = new Point();\r\n        if (this.options) {\r\n            max.x = this.options.minWidth || 0;\r\n            max.y = this.options.minHeight || 0;\r\n        }\r\n\r\n        for (let node of model.nodes) {\r\n            let svg = node.getSVG();\r\n            EventBus.register(node, svg);\r\n            root.appendChild(svg);\r\n\r\n            let temp: number;\r\n            temp = node.getPos().x + node.getSize().x;\r\n            if (temp > max.x) {\r\n                max.x = temp;\r\n            }\r\n            temp = node.getPos().y + node.getSize().y;\r\n            if (temp > max.y) {\r\n                max.y = temp;\r\n            }\r\n\r\n        }\r\n        Util.setAttributeSize(this.root, max.x + 60, max.y + 40);\r\n\r\n        for (let edge of model.edges) {\r\n            let svg = edge.getSVG();\r\n            EventBus.register(edge, svg);\r\n            root.appendChild(svg);\r\n        }\r\n    }\r\n\r\n    public getNode(id: string) {\r\n        return this.$graphModel.getNodeById(id);\r\n    }\r\n\r\n    public drawElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let svg = element.getSVG();\r\n        this.root.appendChild(svg);\r\n\r\n        // actualize root width size, if neccessary\r\n        // get current width of root\r\n        let rootSize = this.getRootSize();\r\n        let newWidth = element.getPos().x + element.getSize().x + 40;\r\n        let newHeight = element.getPos().y + element.getSize().y;\r\n\r\n        if (rootSize.width < newWidth) {\r\n            this.root.setAttributeNS(null, 'width', '' + newWidth);\r\n        }\r\n\r\n        if (rootSize.height < newHeight) {\r\n            this.root.setAttributeNS(null, 'height', '' + newHeight);\r\n        }\r\n\r\n        // draw edge\r\n        if (element instanceof Association) {\r\n            let edge = <Association>element;\r\n            edge.redraw(edge.$sNode);\r\n            let srcSvg = element.$sNode.getAlreadyDisplayingSVG();\r\n            let targetSvg = element.$tNode.getAlreadyDisplayingSVG();\r\n\r\n            this.root.appendChild(srcSvg);\r\n            this.root.appendChild(targetSvg);\r\n        }\r\n\r\n        EventBus.register(element, svg);\r\n    }\r\n\r\n    public removeElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let alreadyDisplayingSvg = element.getAlreadyDisplayingSVG();\r\n        if (Util.isParentOfChild(this.root, alreadyDisplayingSvg)) {\r\n            this.root.removeChild(alreadyDisplayingSvg);\r\n        }\r\n    }\r\n\r\n    public generate(packageName: string, path?: string) {\r\n        this.$graphModel.package = packageName;\r\n        this.$graphModel.genPath = path;\r\n\r\n        let data, result = Util.toJson(this.$graphModel);\r\n        data = JSON.stringify(result, null, '\\t');\r\n        if (window['java'] && typeof window['java'].generate === 'function') {\r\n            window['java'].generate(data);\r\n        }\r\n    }\r\n// REFACTORING dd\r\n    private readElement(parent: any, origData: any): void {\r\n        let children = parent.childNodes;\r\n        let origChildDat = origData.childNodes;\r\n\r\n        for (let cd = 0; cd < children.length; cd++) {\r\n            let child = children[cd];\r\n\r\n            let tagName = child.tagName;\r\n            if (this.containerElements.indexOf(tagName) !== -1) {\r\n                this.readElement(child, origChildDat[cd]);\r\n            } else if (tagName in this.relevantStyles) {\r\n                let styleDef = window.getComputedStyle(origChildDat[cd]);\r\n\r\n                let styleString = '';\r\n                for (let st = 0; st < this.relevantStyles[tagName].length; st++) {\r\n                    styleString += this.relevantStyles[tagName][st] + ':' + styleDef.getPropertyValue(this.relevantStyles[tagName][st]) + '; ';\r\n                }\r\n\r\n                child.setAttribute('style', styleString);\r\n            }\r\n        }\r\n    }\r\n\r\n    private createPattern(): Element {\r\n        const defs = Util.createShape({ tag: 'defs' });\r\n        const pattern = Util.createShape({\r\n            tag: 'pattern',\r\n            id: 'raster',\r\n            patternUnits: 'userSpaceOnUse',\r\n            width: 40,\r\n            height: 40\r\n        });\r\n        const path = 'M0 4 L0 0 L4 0 M36 0 L40 0 L40 4 M40 36 L40 40 L36 40 M4 40 L0 40 L0 36';\r\n        const cross = Util.createShape({\r\n            tag: 'path',\r\n            d: path,\r\n            stroke: '#DDD',\r\n            'stroke-width': 1,\r\n            fill: 'none'\r\n        });\r\n\r\n        const rect = Util.createShape({\r\n            tag: 'rect',\r\n            x: 0,\r\n            y: 0,\r\n            width: 40,\r\n            height: 40,\r\n            fill: 'none'\r\n        });\r\n        pattern.appendChild(rect);\r\n        pattern.appendChild(cross);\r\n        defs.appendChild(pattern);\r\n        return defs;\r\n    }\r\n\r\n    private clearSvgRoot() {\r\n        const root = this.root;\r\n        this.$graphModel.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n        while (root.firstChild) {\r\n            root.removeChild(root.firstChild);\r\n        }\r\n\r\n        root.appendChild(this.createPattern());\r\n        let fillValue = 'none';\r\n        if (this.options.raster) {\r\n            fillValue = 'url(#raster)';\r\n        }\r\n        let background = Util.createShape({\r\n            tag: 'rect',\r\n            id: 'background',\r\n            width: 5000,\r\n            height: 5000,\r\n            x: 0,\r\n            y: 0,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: fillValue\r\n        });\r\n        root.appendChild(background);\r\n\r\n        // delete inline Edit, if exists\r\n        let inlineEdit = document.getElementById('inlineEdit');\r\n        if (inlineEdit && document.body.contains(inlineEdit)) {\r\n            document.body.removeChild(inlineEdit);\r\n        }\r\n    }\r\n\r\n    private getLayout(): Layout {\r\n        if (this.currentlayout) {\r\n            return this.currentlayout;\r\n        }\r\n\r\n        let layout = this.options.layout || '';\r\n        if (this.layoutFactory[layout]) {\r\n            this.currentlayout = new this.layoutFactory[layout]();\r\n        } else {\r\n            this.currentlayout = new layouts.DagreLayout();\r\n        }\r\n\r\n        return this.currentlayout;\r\n    }\r\n\r\n    private initFactories() {\r\n\r\n        let noder = nodes;\r\n        this.nodeFactory = {};\r\n        for (let id in noder) {\r\n            if (noder.hasOwnProperty(id) === true) {\r\n                this.nodeFactory[id] = noder[id];\r\n            }\r\n        }\r\n\r\n        let edger = edges;\r\n        this.edgeFactory = {};\r\n        for (let id in edger) {\r\n            if (edger.hasOwnProperty(id) === true) {\r\n                this.edgeFactory[id] = edger[id];\r\n            }\r\n        }\r\n\r\n        let layouter = layouts;\r\n        this.layoutFactory = {};\r\n        for (let id in layouter) {\r\n            if (layouter.hasOwnProperty(id) === true) {\r\n                this.layoutFactory[id] = layouter[id];\r\n            }\r\n        }\r\n    }\r\n\r\n    private initCanvas() {\r\n        if (this.options.canvas) {\r\n            this.$view = document.getElementById(this.options.canvas);\r\n        }\r\n        if (!this.$view) {\r\n            this.$view = document.createElement('div');\r\n            this.$view.setAttribute('class', 'diagram');\r\n            document.body.appendChild(this.$view);\r\n        }\r\n    }\r\n\r\n    private initFeatures(features: any) {\r\n\r\n        if (features) {\r\n            if (features.newedge) {\r\n                EventBus.subscribe(new NewEdge(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            this.importFile = new ImportFile(this);\r\n            if (features.import) {\r\n                EventBus.subscribe(this.importFile, 'dragover', 'dragleave', 'drop');\r\n            }\r\n            if (features.zoom) {\r\n                let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n                EventBus.subscribe(new Zoom(this), mousewheel);\r\n            }\r\n            if (features.drag) {\r\n                EventBus.subscribe(new Drag(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            if (features.select) {\r\n                EventBus.subscribe(new Select(this), 'click', 'drag');\r\n            }\r\n            if (features.palette) {\r\n                new Palette(this).show();\r\n            }\r\n            if (features.toolbar) {\r\n                new Toolbar(this).show();\r\n            }\r\n            if (features.properties) {\r\n                let propertyPanel = new PanelGroup(this);\r\n                // let dispatcher = new PropertiesDispatcher(this);\r\n                EventBus.subscribe(propertyPanel, 'dblclick', 'click', EventBus.RELOADPROPERTIES);\r\n                propertyPanel.show();\r\n            }\r\n            if (features.addnode) {\r\n                EventBus.subscribe(new AddNode(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n        }\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport {DiagramElement, Point} from './BaseElements';\r\nimport {Association} from './edges';\r\nimport {Node} from './nodes';\r\nimport {Control} from '../Control';\r\nimport {Util} from '../util';\r\nimport {EventBus} from '../EventBus';\r\n\r\nexport class GraphModel extends DiagramElement {\r\n    nodes: Node[] = [];\r\n    edges: Association[] = [];\r\n    package: string;\r\n    genPath: string;\r\n    $isLoading: boolean;\r\n\r\n    public load(data?: any) {\r\n\r\n        this.$isLoading = true;\r\n        data = data || {};\r\n        this.property = data.type || data.property || 'classdiagram';\r\n        this.id = 'RootElement';\r\n        if (data.nodes) {\r\n            for (let node of data.nodes) {\r\n                this.addNode(node);\r\n            }\r\n        }\r\n        if (data.edges) {\r\n            for (let edge of data.edges) {\r\n                this.addEdge(edge);\r\n            }\r\n        }\r\n\r\n        this.$isLoading = false;\r\n    }\r\n\r\n    public getNodeByPosition(x: number, y: number): Node {\r\n        for (let node of this.nodes) {\r\n            let posOfNode: Point = (<Node>node).getPos();\r\n            let sizeOfNode: Point = (<Node>node).getSize();\r\n\r\n            if ((posOfNode.x <= x && (posOfNode.x + sizeOfNode.x) >= x)\r\n                && (posOfNode.y <= y && (posOfNode.y + sizeOfNode.y) >= y)) {\r\n                return node;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.initCanvas();\r\n        return this;\r\n    }\r\n\r\n    public addElement(type: string): boolean {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n        if (element) {\r\n            Util.saveToLocalStorage(this);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues: Object): DiagramElement {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n\r\n        // position\r\n        if (optionalValues) {\r\n            if (optionalValues.hasOwnProperty('x') && optionalValues.hasOwnProperty('y')) {\r\n                let x = optionalValues['x'];\r\n                let y = optionalValues['y'];\r\n                element.withPos(x, y);\r\n            }\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return element;\r\n    }\r\n\r\n    public removeAllElements(): void {\r\n\r\n        let nodesLength = this.nodes.length;\r\n        for (let i = 0; i < nodesLength; i++) {\r\n            this.removeElement(this.nodes[0].id);\r\n        }\r\n\r\n        this.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n    }\r\n\r\n    public removeElement(id: string): boolean {\r\n\r\n        let element = this.getDiagramElementById(id);\r\n        if (!element) {\r\n            return false;\r\n        }\r\n\r\n        (<Graph>this.$owner).removeElement(element);\r\n\r\n        if (element instanceof Node) {\r\n\r\n            let idxOfNode = this.nodes.indexOf(element);\r\n            if (idxOfNode > -1) {\r\n                this.nodes.splice(idxOfNode, 1);\r\n            }\r\n\r\n            while (element.$edges.length > 0) {\r\n                this.removeElement(element.$edges[0].id);\r\n            }\r\n\r\n            element.$edges = [];\r\n        }\r\n        else if (element instanceof Association) {\r\n\r\n            let idxOfEdge = this.edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                this.edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from source\r\n            idxOfEdge = element.$sNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$sNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from target\r\n            idxOfEdge = element.$tNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$tNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return true;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        const size = 10;\r\n        const path = `M${-size} 0 L${+size} 0 M0 ${-size} L0 ${+size}`;\r\n\r\n        const attr = {\r\n            tag: 'path',\r\n            id: 'origin',\r\n            d: path,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: 'none'\r\n        };\r\n        let shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: 0 - size,\r\n            y: 0 - size / 1.5,\r\n            'text-anchor': 'end',\r\n            'font-family': 'Verdana',\r\n            'font-size': '9',\r\n            fill: '#999'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = '(0, 0)';\r\n\r\n        let group = this.createShape({tag: 'g'});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEUP, EventBus.ELEMENTMOUSELEAVE, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTMOUSEWHEEL, EventBus.ELEMENTCLICK, EventBus.ELEMENTDRAG];\r\n    }\r\n\r\n    public getNewId(prefix?: string): string {\r\n        let id = (prefix ? prefix.toLowerCase() + '-' : '') + Math.floor(Math.random() * 100000);\r\n        return id;\r\n    }\r\n\r\n    public getEdgeById(id: string): Association {\r\n        for (let edge of this.edges) {\r\n            if (edge.id === id) {\r\n                return edge;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    public getDiagramElementById(id: string): DiagramElement {\r\n\r\n        return this.getNodeById(id) || this.getEdgeById(id);\r\n    }\r\n\r\n    /**\r\n     * Add an edge with data in json file. Optional you can say, that the edge should have\r\n     * the points of source node and target node.\r\n     * @param edge information about edge in json\r\n     * @param withPosOfNodes optional. set points to line of source and target node\r\n     */\r\n    public addEdge(edge: any, withPosOfNodes?: boolean): Association {\r\n\r\n        // lookup in factoryedges and check if the edge type realy exists\r\n        if (edge && edge.type) {\r\n            const graph = (<Graph>this.$owner);\r\n            let typeExists = false;\r\n            for (let edgeType in graph.edgeFactory) {\r\n                if (edgeType === edge.type) {\r\n                    typeExists = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!typeExists) {\r\n                edge.type = 'Association';\r\n            }\r\n        }\r\n\r\n        let type = edge.type || 'Association';\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n\r\n        let newEdge = <Association>this.createElement(type, id, edge);\r\n        newEdge.type = type;\r\n\r\n        let source: Node;\r\n        let sourceAsString: string = edge.source.id || edge.source;\r\n        if (sourceAsString) {\r\n            source = this.getNodeById(sourceAsString);\r\n            if (!source) {\r\n                let nodeID = edge.source;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                source = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                source.init(this);\r\n            }\r\n        }\r\n\r\n        let target: Node;\r\n        let targetAsString: string = edge.target.id || edge.target;\r\n        if (targetAsString) {\r\n            target = this.getNodeById(targetAsString);\r\n            if (!target) {\r\n                let nodeID = edge.target;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                target = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                target.init(this);\r\n            }\r\n        }\r\n\r\n        newEdge.withItem(source, target);\r\n\r\n        if (withPosOfNodes) {\r\n            let srcX = source.getPos().x + (source.getSize().x / 2);\r\n            let srcY = source.getPos().y + (source.getSize().y / 2);\r\n\r\n            let targetX = target.getPos().x + (target.getSize().x / 2);\r\n            let targetY = target.getPos().y + (target.getSize().y / 2);\r\n\r\n            newEdge.addPoint(srcX, srcY);\r\n            newEdge.addPoint(targetX, targetY);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public createElement(type: string, id: string, data: Object): DiagramElement {\r\n        const graph = <Graph>this.$owner;\r\n        let element: DiagramElement;\r\n        if (graph.nodeFactory[type]) {\r\n            element = new graph.nodeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.nodes.push(<Node>element);\r\n        }\r\n        if (graph.edgeFactory[type]) {\r\n            element = new graph.edgeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.edges.push(<Association>element);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public getNodeById(id: string): Node {\r\n        for (let node of this.nodes) {\r\n            if (node.id === id) {\r\n                return node;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    private initCanvas() {\r\n        const graph = <Graph>this.$owner;\r\n        graph.canvasSize = {width: graph.$view.clientWidth, height: graph.$view.clientHeight};\r\n        graph.root = Util.createShape({\r\n            tag: 'svg',\r\n            id: 'root',\r\n            width: graph.canvasSize.width,\r\n            height: graph.canvasSize.height\r\n            // FIXME,viewBox: `${this.$graph.options.origin.x * -1} ${this.$graph.options.origin.y * -1} ${this.$graph.canvasSize.width} ${this.$graph.canvasSize.height}`\r\n        });\r\n        this.$view = graph.root;\r\n        graph.$view.appendChild(graph.root);\r\n\r\n        let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    private addNode(node: Node): Node {\r\n        let type = node['type'] || node.property || 'Node';\r\n        type = Util.toPascalCase(type);\r\n        let id = node['id'] || node['name'] || this.getNewId(type);\r\n\r\n        return <Node>this.createElement(type, id, node);\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction } from './index';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\n\r\nexport abstract class Aggregate extends Association {\r\n\r\n    protected $diamond: Element;\r\n\r\n    public getSVG(): Element {\r\n\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled diamond\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n        };\r\n\r\n        this.$diamond = this.createShape(attr);\r\n\r\n        group.appendChild(this.$diamond);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint: Point = this.$points[0];\r\n        let direction: Direction = Direction.Down;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if (this.$sNode.id === startNode.id || this.$points.length == 2) {\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$diamond.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint: Point, direction: Direction): string {\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                path = `M${startX} ${startY} L${startX + 6} ${startY + 10} L${startX} ${startY + 20} L${startX - 6} ${startY + 10} Z`;\r\n                startPoint.y = startPoint.y+20;\r\n                break;\r\n            case Direction.Right:\r\n                path = `M${startX} ${startY} L${startX - 10} ${startY + 6} L${startX - 20} ${startY} L${startX - 10} ${startY - 6} Z`;\r\n                startPoint.x = startPoint.x-20;\r\n                break;\r\n            case Direction.Left:\r\n                path = `M${startX} ${startY} L${startX + 10} ${startY - 6} L${startX + 20} ${startY} L${startX + 10} ${startY + 6} Z`;\r\n                startPoint.x = startPoint.x+20;\r\n                break;\r\n            case Direction.Down:\r\n                path = `M${startX} ${startY} L${startX - 6} ${startY - 10} L${startX} ${startY - 20} L${startX + 6} ${startY - 10} Z`;\r\n                startPoint.y = startPoint.y-20;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Aggregation extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'white');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { DiagramElement, Line, Point } from '../BaseElements';\r\nimport { Node } from '../nodes';\r\nimport { InfoText } from '../nodes/InfoText';\r\nimport { Util } from '../../util';\r\nimport { EventBus } from '../../EventBus';\r\nimport * as edges from '../edges';\r\nimport { Graph } from '../Graph';\r\n\r\nexport const enum Direction {\r\n    Up, Down, Left, Right\r\n}\r\n\r\nexport class Association extends DiagramElement {\r\n    public source: string;\r\n    public target: string;\r\n    public type: string;\r\n    public $sNode: Node;\r\n    public $tNode: Node;\r\n    public lineStyle: string;\r\n    public $points: Point[] = [];\r\n    public $pathSvg: Element;\r\n    public $pathWideSvg: Element;\r\n    public info: InfoText;\r\n    public sourceInfo: InfoText;\r\n    public targetInfo: InfoText;\r\n    $m: number;\r\n    $n: number;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super();\r\n\r\n        this.withData(data);\r\n    }\r\n\r\n    public withData(data: JSON | string | Object | any): Association {\r\n\r\n        if (!data) {\r\n            return this;\r\n        }\r\n        let srcInfo;\r\n        let trgInfo;\r\n\r\n        if (data.source && typeof data.source !== 'string') {\r\n            srcInfo = data.source;\r\n        }\r\n        else if (data.sourceInfo && typeof data.sourceInfo !== 'string') {\r\n            srcInfo = data.sourceInfo;\r\n        }\r\n\r\n        if (srcInfo) {\r\n            this.sourceInfo = new InfoText(srcInfo);\r\n            this.sourceInfo.$owner = this;\r\n        }\r\n\r\n        if (data.target && typeof data.target !== 'string') {\r\n            trgInfo = data.target;\r\n        }\r\n        else if (data.targetInfo && typeof data.targetInfo !== 'string') {\r\n            trgInfo = data.targetInfo;\r\n        }\r\n\r\n        if (trgInfo) {\r\n            this.targetInfo = new InfoText(trgInfo);\r\n            this.targetInfo.$owner = this;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    public updateSrcCardinality(cardinality: string): void {\r\n        this.sourceInfo = this.updateCardinality(this.$sNode, this.sourceInfo, cardinality);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetCardinality(cardinality: string): void {\r\n        this.targetInfo = this.updateCardinality(this.$tNode, this.targetInfo, cardinality);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateSrcProperty(property: string): void {\r\n        this.sourceInfo = this.updateProperty(this.$sNode, this.sourceInfo, property);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetProperty(property: string): void {\r\n        this.targetInfo = this.updateProperty(this.$tNode, this.targetInfo, property);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public withItem(source: Node, target: Node): Association {\r\n        source.$edges.push(this);\r\n        target.$edges.push(this);\r\n        this.$sNode = source;\r\n        this.$tNode = target;\r\n        this.source = source.id;\r\n        this.target = target.id;\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let group = Util.createShape({ tag: 'g', id: this.id, class: 'SVGEdge' });\r\n\r\n        let path: string = this.getPath();\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'none'\r\n        };\r\n        let pathLine = this.createShape(attr);\r\n\r\n        //attr['style'] = 'stroke-width:20;opacity:0;width:20;height:20';\r\n        let extendedPathLine = Util.createShape(attr);\r\n\r\n        group.appendChild(extendedPathLine);\r\n        group.appendChild(pathLine);\r\n\r\n        if (this.sourceInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.sourceInfo.getSVG());\r\n        }\r\n        if (this.targetInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.targetInfo.getSVG());\r\n        }\r\n\r\n        this.$pathWideSvg = extendedPathLine;\r\n        this.$pathSvg = pathLine;\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.EDITOR, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    public convertEdge(type: string, newId: string, redraw?: boolean): Association {\r\n        if (!edges[type]) {\r\n            return this;\r\n        }\r\n\r\n        let newEdge: Association = new edges[type]();\r\n        newEdge.withItem(this.$sNode, this.$tNode);\r\n        newEdge.id = newId;\r\n        newEdge.type = type;\r\n        newEdge.lineStyle = this.lineStyle;\r\n        newEdge.$owner = this.$owner;\r\n\r\n        if (this.sourceInfo) {\r\n            newEdge.sourceInfo = new InfoText({ property: this.sourceInfo.property, cardinality: this.sourceInfo.cardinality });\r\n            newEdge.sourceInfo.$owner = newEdge;\r\n        }\r\n\r\n        if (this.targetInfo) {\r\n            newEdge.targetInfo = new InfoText({ property: this.targetInfo.property, cardinality: this.targetInfo.cardinality });\r\n            newEdge.targetInfo.$owner = newEdge;\r\n        }\r\n\r\n        this.$points.forEach(point => {\r\n            newEdge.addPoint(point.x, point.y);\r\n        });\r\n\r\n        let graph = <Graph>this.getRoot();\r\n        if (!graph) {\r\n            return this;\r\n        }\r\n\r\n        // update model. insert the edge exact on the same index, like the old edge\r\n        let idx = graph.$graphModel.edges.indexOf(this);\r\n        graph.$graphModel.removeElement(this.id);\r\n        if (idx > -1) {\r\n            graph.$graphModel.edges.splice(idx, 0, newEdge);\r\n        }\r\n        else {\r\n            graph.$graphModel.edges.push(newEdge);\r\n        }\r\n\r\n        if (!redraw) {\r\n            return newEdge;\r\n        }\r\n\r\n        let svgRoot: Element;\r\n        if (graph) {\r\n            svgRoot = graph.root;\r\n        }\r\n        else {\r\n            svgRoot = document.getElementById('root');\r\n        }\r\n        let newEdgeSvg = newEdge.getSVG();\r\n\r\n        // update graph\r\n        graph.removeElement(this);\r\n        svgRoot.appendChild(newEdgeSvg);\r\n\r\n        // redraw the edge from both sides to get the correct display\r\n        // if the type is edge, so the path can be redraw.\r\n        // if not, so the inherited class redraw the path with his own logic\r\n\r\n        let dontDrawPath: boolean = (type !== 'Edge');\r\n        newEdge.redraw(newEdge.$sNode, dontDrawPath);\r\n        newEdge.redraw(newEdge.$tNode, dontDrawPath);\r\n\r\n        EventBus.register(newEdge, newEdgeSvg);\r\n\r\n        this.sourceInfo = undefined;\r\n        this.targetInfo = undefined;\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n        // redraw the first point\r\n        // check which point is the near to startnode\r\n        let endPoint: Point;\r\n        let recalcPoint: Point;\r\n        let endPointIdx: number;\r\n\r\n        if (this.$sNode.id === startNode.id) {\r\n            recalcPoint = this.$points[0];\r\n            endPointIdx = 1;\r\n        } else if (this.$tNode.id === startNode.id) {\r\n            recalcPoint = this.$points[this.$points.length - 1];\r\n            endPointIdx = this.$points.length - 2;\r\n        }\r\n\r\n        endPoint = this.$points[endPointIdx];\r\n\r\n        // calculate and set new position of point to redraw\r\n        this.calcIntersection(startNode, recalcPoint, endPoint);\r\n\r\n        // remove the 2nd point next to startnode, if the node was dragged upper the point\r\n        if (this.$points.length > 2 && this.$tNode.id === startNode.id && endPoint.y > (startNode.getPos().y + (startNode.getSize().y / 2))) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$tNode.id === startNode.id && this.$points.length === 2) {\r\n            this.calcIntersection(this.$sNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (this.$points.length > 2 && this.$sNode.id === startNode.id && (startNode.getPos().y + (startNode.getSize().y / 2) > endPoint.y)) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$sNode.id === startNode.id && this.$points.length === 2) {\r\n\r\n            this.calcIntersection(this.$tNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (!dontDrawPoints) {\r\n            this.redrawPointsAndInfo();\r\n        }\r\n    }\r\n\r\n    public getPath(): string {\r\n\r\n        if (this.$points.length === 0) {\r\n            return '';\r\n        }\r\n\r\n        let path: string = 'M';\r\n        for (let i = 0; i < this.$points.length; i++) {\r\n            let point: Point = this.$points[i];\r\n            if (i > 0) {\r\n                path += 'L';\r\n            }\r\n            path += Math.floor(point.x) + ' ' + Math.floor(point.y) + ' ';\r\n        }\r\n\r\n        return path;\r\n    }\r\n    public calcInfoPosNew(infoTxt: InfoText, node: Node): Point {\r\n\r\n        if (!infoTxt || !node) {\r\n            return null;\r\n        }\r\n\r\n        // 1. step: get direction\r\n        let startPoint: Point;\r\n        let nextToStartPoint: Point;\r\n        if (this.$sNode.id === node.id) {\r\n            startPoint = this.$points[0];\r\n            nextToStartPoint = this.$points[1];\r\n        }\r\n        else if (this.$tNode.id === node.id) {\r\n            startPoint = this.$points[this.$points.length - 1];\r\n            nextToStartPoint = this.$points[this.$points.length - 2];\r\n        }\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(node, startPoint);\r\n\r\n        let x: number;\r\n        let y: number;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                break;\r\n            case Direction.Right:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x - (infoTxt.getSize().x) - 5;\r\n                break;\r\n            case Direction.Left:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x + 5;\r\n                break;\r\n            case Direction.Down:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        // assign calculated position to infotext\r\n        return new Point(x, y);\r\n    }\r\n\r\n    public clearPoints(): any {\r\n        this.$points = [];\r\n        this.$points = [];\r\n    }\r\n\r\n    public addPoint(x: number, y: number): Point[] {\r\n        this.$points.push(new Point(x, y));\r\n\r\n        return this.$points;\r\n    }\r\n\r\n    protected redrawPointsAndInfo(): void {\r\n        // redraw the edge with the new position\r\n        let path: string = this.getPath();\r\n        this.$pathSvg.setAttributeNS(null, 'd', path);\r\n        this.$pathWideSvg.setAttributeNS(null, 'd', path);\r\n\r\n        this.redrawSourceInfo();\r\n        this.redrawTargetInfo();\r\n    }\r\n\r\n    protected redrawSourceInfo() {\r\n        if (this.sourceInfo) {\r\n            let newPosOfSrc = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.redrawFromEdge(newPosOfSrc);\r\n        }\r\n    }\r\n\r\n    protected redrawTargetInfo() {\r\n        if (this.targetInfo) {\r\n            let newPosOfTarget = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.redrawFromEdge(newPosOfTarget);\r\n        }\r\n    }\r\n\r\n    protected getDirectionOfPointToNode(node: Node, pointNearNode: Point): Direction {\r\n        /*\r\n            Example to calculate the direction of nearest point to Node\r\n\r\n            node\r\n         x1_ _ _ _\r\n          |       |\r\n          |       |. pointNearNode\r\n          |       |\r\n          |_ _ _ x2\r\n\r\n          the calculation would return Direction.Left\r\n        */\r\n\r\n        let x1: Point = node.getPos();\r\n        let x2: Point = new Point((x1.x + node.getSize().x), (x1.y + node.getSize().y));\r\n        let direction: Direction = Direction.Down;\r\n\r\n        if (x1.y >= pointNearNode.y) {\r\n            direction = Direction.Down;\r\n        }\r\n        if (x2.y <= pointNearNode.y) {\r\n            direction = Direction.Up;\r\n        }\r\n        if (x1.x >= pointNearNode.x) {\r\n            direction = Direction.Right;\r\n        }\r\n        if (x2.x <= pointNearNode.x) {\r\n            direction = Direction.Left;\r\n        }\r\n\r\n        return direction;\r\n    }\r\n\r\n    private updateCardinality(node: Node, infoText: InfoText, cardinality: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'cardinality': cardinality });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.cardinality = cardinality;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateCardinality(cardinality);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private updateProperty(node: Node, infoText: InfoText, property: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'property': property });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.property = property;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateProperty(property);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private calcIntersection(startNode: Node, recalcPoint: Point, endPoint: Point): Point {\r\n\r\n        // https://www.mathelounge.de/21534/schnittpunkt-einer-linie-mit-den-randern-eines-rechtecks\r\n        let h = startNode.getSize().y;\r\n        let w = startNode.getSize().x;\r\n\r\n        let x1: number = startNode.getPos().x + (w / 2);\r\n        let y1: number = startNode.getPos().y + (h / 2);\r\n\r\n        let x2: number = endPoint.x;\r\n        let y2: number = endPoint.y;\r\n\r\n        let newX: number = recalcPoint.x;\r\n        let newY: number = recalcPoint.y;\r\n\r\n        if (x2 > x1) {\r\n            newX = x1 + (w / 2);\r\n        }\r\n        else if (x2 < x1) {\r\n            newX = x1 - (w / 2);\r\n        }\r\n        else {\r\n            newX = x1;\r\n        }\r\n\r\n        if ((x2 - x1) !== 0) {\r\n            newY = ((y2 - y1) / (x2 - x1) * (newX - x1)) + y1;\r\n        }\r\n        else {\r\n            if (y1 > y2) {\r\n                newY = startNode.getPos().y;\r\n            }\r\n            else {\r\n                newY = startNode.getPos().y + h;\r\n            }\r\n        }\r\n\r\n        // if the statement is not true, so the intersection is at the horizontal line\r\n        if (!((y1 - (h / 2) <= newY) && newY <= y1 + (h / 2))) {\r\n\r\n            if (y2 > y1) {\r\n                newY = y1 + (h / 2);\r\n            }\r\n            else {\r\n                newY = y1 - (h / 2);\r\n            }\r\n\r\n            if ((x2 - x1) !== 0) {\r\n                let tmp = ((y2 - y1) / (x2 - x1));\r\n                newX = (newY + (tmp * x1) - y1) / tmp;\r\n            }\r\n            else {\r\n                newX = x1;\r\n            }\r\n        }\r\n\r\n        recalcPoint.x = Math.ceil(newX);\r\n        recalcPoint.y = Math.ceil(newY);\r\n\r\n        return null;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Composition extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'black');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { Association } from './Association';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\nimport { Direction } from '../index';\r\n\r\nexport class Generalisation extends Association {\r\n\r\n    public $TARGET_ELEMENT_HEIGHT : number = 12;\r\n    protected $targetElement: Element;\r\n\r\n    public getSVG(): Element {\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction : Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled arrow\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'white'\r\n          };\r\n\r\n        this.$targetElement = this.createShape(attr);\r\n\r\n        group.appendChild(this.$targetElement);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean) : void {\r\n\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint : Point = this.$points[0];\r\n        let direction : Direction = Direction.Up;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if(this.$sNode.id === startNode.id || this.$points.length == 2){\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$targetElement.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint : Point, direction : Direction) : string{\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch(direction){\r\n            case Direction.Up:\r\n            path = `M${startX} ${startY+3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y+12;\r\n            break;\r\n            case Direction.Right:\r\n            path = `M${startX-3} ${startY} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x-12;\r\n            break;\r\n            case Direction.Left:\r\n            path = `M${startX+3} ${startY} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x+12;\r\n            break;\r\n            case Direction.Down:\r\n            path = `M${startX} ${startY-3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y-12;\r\n            break;\r\n            default :\r\n            break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n\r\n}\r\n","import { Generalisation } from './Generalisation';\r\n\r\nexport class Implements extends Generalisation {\r\n\r\n    public getSVG(): Element {\r\n        let group = super.getSVG();\r\n\r\n        this.$pathSvg.setAttributeNS(null, 'stroke-dasharray', '3, 3');\r\n\r\n        return group;\r\n    }\r\n}\r\n","export * from './Association';\r\nexport * from './Aggregate';\r\nexport * from './Aggregation';\r\nexport * from './Composition';\r\nexport * from './Generalisation';\r\nexport * from './Implements';","export * from './edges';\r\nexport * from './nodes';\r\nexport * from './BaseElements';\r\nexport * from './Graph';\r\nexport * from './Model';\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Attribute extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 28.06.2017.\r\n */\r\nimport {Control} from \"../../Control\";\r\n\r\nexport class AutoComplete extends Control {\r\n    private $inputField:HTMLInputElement;\r\n    private $dataList:HTMLDataListElement;\r\n    private $selected:HTMLSelectElement;\r\n    private $items:HTMLDivElement;\r\n    private isMultiple:boolean;\r\n\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        let div:HTMLDivElement = document.createElement('div');\r\n        this.$view = div;\r\n        this.$inputField = document.createElement('input');\r\n        this.$dataList = document.createElement(\"datalist\");\r\n        this.$dataList.id = \"data_\"+this.id;\r\n        this.$inputField.setAttribute(\"list\", \"data_\"+this.id);\r\n        if(data[\"value\"]) {\r\n            let values = data[\"value\"];\r\n            this.isMultiple = data[\"multiple\"] != null;\r\n            let option:HTMLOptionElement;\r\n            if(this.isMultiple) {\r\n                this.$selected = document.createElement(\"select\");\r\n                this.$selected.className = \"hide\";\r\n                this.$selected.multiple = true;\r\n\r\n                this.$selected.id = this.id;\r\n                this.$items = document.createElement(\"div\");\r\n                this.$items.className = \"selectedList\";\r\n                div.appendChild(this.$items);\r\n                this.$inputField.className = \"selectedInput\";\r\n                div.appendChild(this.$selected);\r\n                this.$view[\"style\"].setProperty(\"float\", \"left\");\r\n                let that = this;\r\n                this.$inputField.oninput = function(){that.onChange();}\r\n            } else {\r\n                this.$inputField.id = this.id;\r\n            }\r\n            for (let attr in values) {\r\n                if (!values.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                option = document.createElement(\"option\");\r\n                option.value = values[attr];\r\n                this.$dataList.appendChild(option);\r\n                if(this.isMultiple) {\r\n                    option = document.createElement(\"option\");\r\n                    option.value = values[attr];\r\n                    option.innerHTML = values[attr];\r\n                    this.$selected.appendChild(option);\r\n                }\r\n        }\r\n\r\n            div.appendChild(this.$inputField);\r\n            div.appendChild(this.$dataList);\r\n        }\r\n\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n            if(this.isMultiple) {\r\n                div.appendChild(this.$selected);\r\n            }\r\n        }\r\n\r\n        parent.appendChild(this);\r\n    }\r\n\r\n    public onChange() : void {\r\n        let textValue:string = this.$inputField.value;\r\n        if(textValue.length<1) {\r\n            return;\r\n        }\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == textValue) {\r\n                if(item.selected == false) {\r\n                    item.selected = true;\r\n                    item.defaultSelected = true;\r\n                    let test = document.createElement(\"li\");\r\n                    let that = this;\r\n                    test.onclick = function() {that.onDelete(item.value, test);};\r\n                    test.className = \"selectedItem\";\r\n                    test.innerHTML = item.value;\r\n                    this.$items.appendChild(test);\r\n                    this.$inputField.value = \"\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n    public onDelete(value:string, selectedItem:HTMLLIElement) : void {\r\n        this.$items.removeChild(selectedItem);\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == value ) {\r\n                if(item.selected) {\r\n                    item.selected = false;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","import {Control} from '../../Control';\r\n\r\nexport class BR extends Control {\r\n    public load(json: JSON): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('br');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            this.$view.setAttribute(attr, data[attr]);\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\nexport class Button extends Control {\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        this.$view = document.createElement('button');\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\nimport { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\nimport { Size } from '../index';\r\nimport ClazzProperty from './ClazzProperty';\r\nimport {SymbolLibary} from './Symbol';\r\nimport {StereoType} from './StereoType';\r\nimport {GraphListener} from '../../handlers/GraphListener';\r\n\r\nexport class Class extends Node {\r\n    public attributes: Attribute[] = [];\r\n    public methods: Method[] = [];\r\n    public modifier: string;\r\n    public stereoType: string;\r\n\r\n    protected $attrHeight = 25;\r\n    protected $attrFontSize = 12;\r\n    protected $labelView: Element;\r\n\r\n    constructor(json: JSON | string | Object | any) {\r\n        super(json);\r\n        return this;\r\n    }\r\n\r\n    public load(json?: any) {\r\n        if (!json) {\r\n            json = {};\r\n        }\r\n        let y = this.$labelHeight;\r\n        let labelObj = json.name || json.id || ('New ' + this.property);\r\n\r\n        let width: number = 150;\r\n        width = Math.max(width, Util.sizeOf(labelObj).width + 60);\r\n\r\n        if (json['attributes']) {\r\n            for (let attr of json['attributes']) {\r\n\r\n                let attrObj = new Attribute(attr);\r\n                attrObj.$owner = this;\r\n                this.attributes.push(attrObj);\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(attrObj.toString()).width);\r\n                let listener = new GraphListener(attrObj);\r\n                attrObj.$data.addListener(listener);\r\n            }\r\n        }\r\n        if (json['stereotype']) {\r\n            this.stereoType = json['stereotype'];\r\n        }\r\n        if (json['methods']) {\r\n            for (let method of json['methods']) {\r\n\r\n                let methodObj = new Method(method);\r\n                methodObj.$owner = this;\r\n                this.methods.push(methodObj);\r\n\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(methodObj.toString()).width);\r\n            }\r\n            y += this.$attrHeight;\r\n        }\r\n        this.withSize(width, y);\r\n    }\r\n\r\n    public getAttributes(): Attribute[] {\r\n        return this.attributes;\r\n    }\r\n\r\n    public getMethods(): Method[] {\r\n        return this.methods;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        let icon = SymbolLibary.draw({type: 'Class', property: 'HTML', width: '50', height: '50', transform: 'translate(-26,-21)'});\r\n        return icon;\r\n        // let group = this.createShape(\r\n//    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n//    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos: Point = this.getPos();\r\n        const size: Point = this.getSize();\r\n\r\n        let group = this.createShape({ tag: 'g', id: this.id, class: 'SVGClazz', transform: 'translate(0 0)' });\r\n\r\n        if (this.stereoType) {\r\n            let type = new StereoType(this.stereoType, pos.x, pos.y);\r\n            group.appendChild(type.getSVG());\r\n        }\r\n\r\n        // Full Shape\r\n        let options = null;\r\n        let style;\r\n        let clazzName;\r\n        if (this.$owner['options']) {\r\n            let options = this.$owner['options'];\r\n            if (options) {\r\n                style = options.style;\r\n            }\r\n        }\r\n        // = = = Background = = =\r\n        if (style === 'modern') {\r\n            clazzName = 'ClazzHeader';\r\n        }\r\n        clazzName = 'ClazzHeader';\r\n        const nodeShape = this.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            height: size.y,\r\n            width: size.x,\r\n            rx: 5,\r\n            ry: 5,\r\n            fill: 'none',\r\n            stroke: 'black',\r\n            'stroke-width': 1\r\n        });\r\n        if (clazzName) {\r\n            nodeShape.setAttribute('className', clazzName);\r\n            let styleHeader = Util.getStyle('ClazzHeader');\r\n            // headerHeight = styleHeader.getNumber('height');\r\n        }\r\n\r\n        // = = = LABEL = = =\r\n        let label = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y + this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': this.$labelFontSize,\r\n            fill: 'black'\r\n        });\r\n        label.textContent = this.id;\r\n        this.$labelView = label;\r\n\r\n        group.appendChild(nodeShape);\r\n        group.appendChild(label);\r\n\r\n        // = = = ATTRIBUTES = = =\r\n        if (this.attributes.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorLabelAttr = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight,\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight,\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorLabelAttr);\r\n\r\n            let groupOfAttributes = this.createShape({ tag: 'g', id: (this.id + 'Attributes') });\r\n            groupOfAttributes.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzAttribute');\r\n            group.appendChild(groupOfAttributes);\r\n\r\n            let y = pos.y + this.$labelHeight + this.$attrHeight / 2;\r\n            for (let attr of this.attributes) {\r\n\r\n                let attrSvg = attr.getSVG();\r\n                attr.$owner = this;\r\n\r\n                attrSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                attrSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfAttributes.appendChild(attrSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        // = = = METHODS = = =\r\n        let height = this.attributes.length * this.$attrHeight;\r\n        let y = pos.y + this.$labelHeight + height + this.$attrHeight / 2;\r\n        if (this.methods.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorAttrMethods = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorAttrMethods);\r\n\r\n            let groupOfMethods = this.createShape({ tag: 'g', id: (this.id + 'Methods') });\r\n            groupOfMethods.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzMethod');\r\n            group.appendChild(groupOfMethods);\r\n\r\n            y += this.$attrHeight / 2;\r\n            for (let method of this.methods) {\r\n\r\n                let methodSvg = method.getSVG();\r\n                method.$owner = this;\r\n\r\n                methodSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                methodSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfMethods.appendChild(methodSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        this.$view = group;\r\n        return group;\r\n    }\r\n\r\n    public copy(): Class {\r\n        let copy: Class;\r\n        copy = <Class>super.copy();\r\n\r\n        // copy label\r\n        copy.id = this.id + 'Copy';\r\n\r\n        // copy attributes\r\n        this.attributes.forEach(attr => {\r\n            copy.attributes.push(new Attribute(attr.toString()));\r\n        });\r\n        // copy methods\r\n        this.methods.forEach(method => {\r\n            copy.methods.push(new Method(method.toString()));\r\n        });\r\n        copy.reCalcSize();\r\n\r\n        return copy;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTCLICK,\r\n                EventBus.ELEMENTDRAG, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES, EventBus.RELOADPROPERTIES];\r\n    }\r\n\r\n    public addProperty(value: string, type: string): any {\r\n        if (!this[type] || !value || value.length === 0) {\r\n            return;\r\n        }\r\n\r\n        let extractedValue;\r\n        if (type === 'attributes') {\r\n            extractedValue = new Attribute(value);\r\n        }\r\n        else if (type === 'methods') {\r\n            extractedValue = new Method(value);\r\n        }\r\n\r\n        for (let valueOfType of this[type]) {\r\n            if (valueOfType.toString() === extractedValue.toString()) {\r\n                alert(extractedValue.toString() + ' already exists.');\r\n                extractedValue = undefined;\r\n                return;\r\n            }\r\n        }\r\n\r\n        this[type].push(extractedValue);\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        return extractedValue;\r\n    }\r\n\r\n    public addAttribute(value: string): Attribute {\r\n        return this.addProperty(value, 'attributes');\r\n    }\r\n\r\n    public addAttributeObj(attr: Attribute): Attribute[] {\r\n        this.attributes.push(attr);\r\n        return this.getAttributes();\r\n    }\r\n\r\n    public addMethodObj(method: Method): Method[] {\r\n        this.methods.push(method);\r\n        return this.getMethods();\r\n    }\r\n\r\n    public addMethod(value: string): Method {\r\n        return this.addProperty(value, 'methods');\r\n    }\r\n\r\n    public removeAttribute(attr: Attribute): void {\r\n        let idx = this.attributes.indexOf(attr);\r\n        this.attributes.splice(idx, 1);\r\n    }\r\n\r\n    public removeMethod(method: Method): void {\r\n        let idx = this.methods.indexOf(method);\r\n        this.methods.splice(idx, 1);\r\n    }\r\n\r\n    public removeProperty(property: ClazzProperty): void {\r\n\r\n        if (property instanceof Attribute) {\r\n            this.removeAttribute(<Attribute>property);\r\n        }\r\n\r\n        if (property instanceof Method) {\r\n            this.removeMethod(<Method>property);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n        let hasSizeChanged: [boolean, Size] = this.hasSizeChanged();\r\n\r\n        if (drawOnlyIfSizeChanged) {\r\n            if (!hasSizeChanged[0]) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n\r\n        // redraw only this clazz\r\n        this.$owner.$view.removeChild(this.$view);\r\n        let newSvg = this.getSVG();\r\n        this.$owner.$view.appendChild(newSvg);\r\n        this.$view = newSvg;\r\n        EventBus.register(this, newSvg);\r\n\r\n        this.redrawEdges();\r\n    }\r\n\r\n    public hasSizeChanged(): [boolean, Size] {\r\n        let oldSize = { width: this.getSize().x, height: this.getSize().y };\r\n        let newSize = this.reCalcSize();\r\n\r\n        // size doenst changed, so nothing to redraw\r\n        if (oldSize.width === newSize.width && oldSize.height === newSize.height) {\r\n            return [false, newSize];\r\n        }\r\n\r\n        return [true, newSize];\r\n    }\r\n\r\n    public updateLabel(newLabel: string): void {\r\n        if (this.$labelView) {\r\n            this.$labelView.textContent = newLabel;\r\n        }\r\n\r\n        // update label in all edges\r\n        this.$edges.forEach(edge => {\r\n            if (this.id === edge.$sNode.id) {\r\n                edge.source = newLabel;\r\n            }\r\n            else if (this.id === edge.$tNode.id) {\r\n                edge.target = newLabel;\r\n            }\r\n        });\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        this.reDraw(true);\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.modifier = modifier;\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reCalcSize(): Size {\r\n        // label\r\n        let newWidth = 150;\r\n        newWidth = Math.max(newWidth, Util.sizeOf(this.id).width + 30);\r\n\r\n        // attributes\r\n        this.attributes.forEach(attrEl => {\r\n\r\n            let widthOfAttr;\r\n            if (attrEl.$view) {\r\n                widthOfAttr = attrEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfAttr = Util.sizeOf(attrEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfAttr + 15);\r\n        });\r\n\r\n        // methods\r\n        this.methods.forEach(methodEl => {\r\n            let widthOfMethod;\r\n            if (methodEl.$view) {\r\n                widthOfMethod = methodEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfMethod = Util.sizeOf(methodEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfMethod + 15);\r\n        });\r\n\r\n        // TODO: height has to be calculated by font-size\r\n        this.getSize().x = newWidth;\r\n        this.getSize().y = this.$labelHeight + ((this.attributes.length + this.methods.length) * this.$attrHeight)\r\n            + this.$attrHeight;\r\n\r\n        let newSize = { width: newWidth, height: this.getSize().y };\r\n\r\n        return newSize;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    private getModernStyle(): Element {\r\n        let width, height, id, size, z, item, rect, g, board, styleHeader, headerHeight, x, y;\r\n        board = this.getRoot()['board'];\r\n        styleHeader = Util.getStyle('ClazzHeader');\r\n        headerHeight = styleHeader.getNumber('height');\r\n        width = 0;\r\n        height = 10 + headerHeight;\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].getType().toLowerCase() === 'objectdiagram') {\r\n            id = this.id.charAt(0).toLowerCase() + this.id.slice(1);\r\n            item = 'Object';\r\n        } else {\r\n            id = this.id;\r\n            item = 'Class';\r\n            if (this['counter']) {\r\n                id += ' (' + this['counter'] + ')';\r\n            }\r\n        }\r\n        g = Util.create({tag: 'g', model: this});\r\n        size = Util.sizeOf(id, this);\r\n        width = Math.max(width, size.width);\r\n        if (this.attributes && this.attributes.length > 0) {\r\n            height = height + this.attributes.length * 25;\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.attributes[z], this).width);\r\n            }\r\n        } else {\r\n            height += 20;\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            height = height + this.methods.length * 25;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.methods[z], this).width);\r\n            }\r\n        }\r\n        width += 20;\r\n\r\n        let pos = this.getPos();\r\n        y = pos.y;\r\n        x = pos.x;\r\n\r\n        rect = {\r\n            tag: 'rect',\r\n            'width': width,\r\n            'height': height,\r\n            'x': x,\r\n            'y': y,\r\n            'class': item + ' draggable',\r\n            'fill': 'none'\r\n        };\r\n        g.appendChild(Util.create(rect));\r\n        g.appendChild(Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            'x': x,\r\n            'y': y,\r\n            height: headerHeight,\r\n            'width': width,\r\n            'class': 'ClazzHeader'\r\n        }));\r\n\r\n        item = Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'class': 'InfoText',\r\n            'text-anchor': 'right',\r\n            'x': x + width / 2 - size.width / 2,\r\n            'y': y + (headerHeight / 2) + (size.height / 2),\r\n            'width': size.width\r\n        });\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].type.toLowerCase() === 'objectdiagram') {\r\n            item.setAttribute('text-decoration', 'underline');\r\n        }\r\n        item.appendChild(document.createTextNode(id));\r\n\r\n        g.appendChild(item);\r\n        g.appendChild(Util.create({\r\n            tag: 'line',\r\n            x1: x,\r\n            y1: y + headerHeight,\r\n            x2: x + width,\r\n            y2: y + headerHeight,\r\n            stroke: '#000'\r\n        }));\r\n        y += headerHeight + 20;\r\n\r\n        if (this.attributes) {\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': (x + 10),\r\n                    'y': y,\r\n                    value: this.attributes[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n            if (this.attributes.length > 0) {\r\n                y -= 10;\r\n            }\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            g.appendChild(Util.create({tag: 'line', x1: x, y1: y, x2: x + width, y2: y, stroke: '#000'}));\r\n            y += 20;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': x + 10,\r\n                    'y': y,\r\n                    value: this.methods[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n        }\r\n        return g;\r\n    }\r\n}\r\n","import {Util} from '../../util';\r\nimport {DiagramElement} from '../BaseElements';\r\nimport Data from '../../Data';\r\n\r\nexport default class ClazzProperty extends DiagramElement {\r\n\r\n    // Public (+)\r\n    // Private (-)\r\n    // Protected (#)\r\n    // Package (~)\r\n\r\n    public $data = new Data();\r\n//    public modifier: string = '+';\r\n//    public name: string;\r\n//    public type: string;\r\n//    public value: string;\r\n\r\n    constructor(data: any | JSON) {\r\n        super();\r\n        this.$data.setValue('modifier', '+');\r\n        this.$data.setValue('name', null);\r\n        this.$data.setValue('type', null);\r\n        this.$data.setValue('value', null);\r\n        this.extractData(data);\r\n    }\r\n\r\n    public update(data: any | JSON): void {\r\n        this.extractData(data);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.$data.setValue('modifier', modifier);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateType(type: string): void {\r\n        this.$data.setValue('type', type);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateValue(value: string): void {\r\n        this.$data.setValue('value', value);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateName(name: string): void {\r\n        this.$data.setValue('name', name);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public getName(): string {\r\n        return this.$data.getValue('name');\r\n    }\r\n\r\n    public getModifier(): string {\r\n        return this.$data.getValue('modifier');\r\n    }\r\n\r\n    public getType(): string {\r\n        return this.$data.getValue('type');\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let attrText = {\r\n            tag: 'text',\r\n            'text-anchor': 'start',\r\n            'alignment-baseline': 'middle',\r\n        };\r\n\r\n        let attrSvg = Util.createShape(attrText);\r\n        attrSvg.textContent = this.toString();\r\n\r\n        this.$view = attrSvg;\r\n\r\n        return attrSvg;\r\n    }\r\n\r\n    public toString(): string {\r\n        let value = this.$data.getValue('value');\r\n        let result = this.$data.getValue('modifier') + ' ';\r\n        result += this.$data.getValue('name') + ' : ';\r\n        result += this.$data.getValue('type');\r\n        if (value && value.length > 0) {\r\n            result += ' = ' + this.$data.getValue('value');\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.$data.setValue('type', data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.$data.setValue('name', data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.$data.setValue('modifier', data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n\r\n            // e.g. name : string or name:string\r\n            let dataSplitted = data.split(':');\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                let name;\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.$data.setValue('modifier', firstChar);\r\n                    name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                }\r\n                else {\r\n                    name = modifierAndNameSplitted;\r\n                }\r\n                // delete whitespaces in name\r\n                name = name.replace(/ /g, '_');\r\n\r\n                this.$data.setValue('name', name);\r\n                let type = dataSplitted[1].trim() || 'String';\r\n\r\n                // if the type was entered with a small begin letter\r\n                if (type.toLowerCase() === 'string') {\r\n                    type = 'String';\r\n                }\r\n                // delete whitespaces in type\r\n                type = type.replace(/ /g, '_');\r\n                this.$data.setValue('type',  type);\r\n            } else {\r\n                dataSplitted = data.split('=');\r\n                if (dataSplitted && dataSplitted.length === 2) {\r\n                    // modifer (and or) name\r\n                    let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                    // first char is +, - or #\r\n                    let firstChar = modifierAndNameSplitted[0];\r\n                    let name;\r\n                    if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                        this.$data.setValue('modifier', firstChar);\r\n                        name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                    }\r\n                    else {\r\n                        name = modifierAndNameSplitted;\r\n                    }\r\n                    // delete whitespaces in name\r\n                    name = name.replace(/ /g, '_');\r\n\r\n                    this.$data.setValue('name', name);\r\n                    let value = dataSplitted[1].trim() || '\"\"';\r\n                    this.$data.setValue('value', value);\r\n                    this.$data.setValue('type', typeof value);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected updateTextOfView() {\r\n        if (this.$view) {\r\n            this.$view.textContent = this.toString();\r\n        }\r\n        if (this.$owner) {\r\n            Util.saveToLocalStorage(this.$owner.$owner);\r\n        }\r\n    }\r\n}\r\n","import {Node} from \"./Node\";\r\n/**\r\n * Created by Stefan on 29.03.2017.\r\n */\r\n\r\nexport class Dice extends Node {\r\n    private value: number;\r\n    private max: number = 6;\r\n    private $animation: SVGElement;\r\n    private $zoom: number = 0.6;\r\n    private $border: number = 0.2;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super(data);\r\n        this.withSize(100, 100);\r\n    }\r\n\r\n    public setNumber(number: number) {\r\n        this.value = number;\r\n        this.refresh();\r\n    }\r\n\r\n    public refresh() {\r\n        if (this.$view) {\r\n            this.reset();\r\n            let group = this.createPointValue();\r\n            if (group) {\r\n                this.$view.appendChild(group);\r\n            }\r\n        }\r\n    }\r\n\r\n    public reset() {\r\n        if (this.$view) {\r\n            while (this.$view.children.length > 1) {\r\n                if(this.$view.children.item(this.$view.children.length - 1).tagName!== \"animateTransform\") {\r\n                    console.log(this.$view.children.item(this.$view.children.length - 1));\r\n                    this.$view.removeChild(this.$view.children.item(this.$view.children.length - 1));\r\n                }else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let dice: SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x + size.x * this.$border,\r\n            y: pos.y + size.y * this.$border,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y * this.$zoom,\r\n            width: size.x * this.$zoom,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        dice.appendChild(this.createShape(attr));\r\n\r\n        let group = this.createPointValue();\r\n        if (group) {\r\n            dice.appendChild(group);\r\n        }\r\n\r\n        this.$view = dice;\r\n        return dice;\r\n    }\r\n\r\n    public animationTimeout(newValues: number[]) {\r\n        if(newValues.length>0) {\r\n            let newValue = newValues.shift();\r\n            this.setNumber(newValue);\r\n            let that=this;\r\n            setTimeout(function() {that.animationTimeout(newValues)}, 100);\r\n        }\r\n    }\r\n\r\n    public roll() {\r\n        this.startAnimation();\r\n        let values:number[]=[];\r\n        let i:number;\r\n        for(i=1;i<this.max;i++) {\r\n            values.push(i);\r\n        }\r\n        for(i=this.max;i>0;i--) {\r\n            values.push(i);\r\n        }\r\n        let that=this;\r\n        values.push( Math.floor(Math.random() * this.max)+1 );\r\n        setTimeout(function() {that.animationTimeout(values)}, 100);\r\n    }\r\n    public startAnimation() {\r\n        if(this.$animation) {\r\n            return;\r\n        }\r\n        let center = this.getPos().x+this.getSize().x /2;\r\n        const attr = {\r\n            tag: 'animateTransform',\r\n            attributeType: \"xml\",\r\n            attributeName:\"transform\",\r\n            type:\"rotate\",\r\n            dur: \"1s\",\r\n            repeatCount:\"1\",\r\n            from:\"0 \"+center+\" \"+center,\r\n            to:\"360 \"+center+\" \"+center\r\n        };\r\n        this.$animation = <SVGElement>this.createShape(attr);\r\n        this.$view.appendChild(this.$animation);\r\n    }\r\n\r\n    public stopAnimation() {\r\n        if(this.$animation) {\r\n            this.$view.removeChild(this.$animation);\r\n            this.$animation = null;\r\n        }\r\n    }\r\n\r\n    public createPointValue() :SVGElement {\r\n        if (this.value == 1) {\r\n           return this.getCircle(2, 2);\r\n        } else if (this.value == 2) {\r\n            return this.getCircle(1, 1, 3, 3);\r\n        } else if (this.value == 3) {\r\n            return this.getCircle(1, 1, 2, 2, 3, 3);\r\n        } else if (this.value == 4) {\r\n            return this.getCircle(1, 1, 1, 3, 3, 1, 3, 3);\r\n        } else if (this.value == 5) {\r\n            return this.getCircle(1, 1, 1, 3, 2, 2, 3, 1, 3, 3);\r\n        } else if (this.value == 6) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 7) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 2, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 8) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 9) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private getCircle(...values:number[]) : SVGElement {\r\n        if (values.length % 2 > 0) {\r\n            return null;\r\n        }\r\n        let size = this.getSize();\r\n        let pos = this.getPos();\r\n        //FIXME let group:SVGElement = <SVGElement>this.createShape({tag: 'g', transform: 'translate(0 0)', height: size.y, width: size.x});\r\n        let group:SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n\r\n\r\n        for (let i: number = 0; i < values.length; i += 2) {\r\n            group.appendChild(this.createCircle(values[i], values[i + 1]));\r\n        }\r\n        return group;\r\n    }\r\n    private createCircle(x:number, y:number) : SVGElement {\r\n        let size = this.getSize();\r\n        let radius = size.x / 10*this.$zoom;\r\n        let border = size.y*this.$border;\r\n        let zoom = size.y*this.$zoom;\r\n        const attr = {\r\n            tag: 'circle',\r\n            r : radius,\r\n            cx: (size.x*this.$zoom * x) / 4 + border,\r\n            cy: (size.y*this.$zoom * y) / 4 + border,\r\n            stroke:\"black\",\r\n            \"stroke-width\":\"3\",\r\n            fill:\"red\",\r\n            style: 'fill:black;stroke:black;stroke-width:2'\r\n        };\r\n        return <SVGElement>this.createShape(attr);\r\n    }\r\n}","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\n\r\nexport class Div extends Control {\r\n    private className: string;\r\n\r\n    public load(data:JSON|any): any {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = <string>data;\r\n        } else {\r\n            id = data.id;\r\n            this.className = data.class;\r\n            this.property = data.property;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let div: HTMLElement = document.getElementById(id);\r\n\r\n        if (!this.property) {\r\n            // if(inputField){\r\n            // TODO disuss how to decide, which property we should listen on...\r\n            // this.property = id;\r\n            this.property = div.getAttribute('Property');\r\n            // }\r\n        }\r\n\r\n        if (div instanceof HTMLDivElement) {\r\n            this.$view = div;\r\n        } else {\r\n            if (!div) {\r\n                this.$view = document.createElement('div');\r\n                this.$view.setAttribute('id', this.id);\r\n                this.$view.setAttribute('property', this.property);\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists+\r\n        if (data.hasOwnProperty('property')) {\r\n            this.setProperty(data['property']);\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        this.$model = entity;\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.className || entity.hasProperty(this.className)) {\r\n                if (entity.id === this.property.split('.')[0]) {\r\n                    entity.addListener(this, this.className);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        this.$view.innerHTML = <string>newValue;\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Form extends Control {\r\n    // private applyingChange: boolean = false;\r\n    private children: Object = {};\r\n    // private property: string = \"\";\r\n\r\n    /**\r\n     * Data should look like the following json:\r\n     *\r\n     * <pre>{\r\n     *      id: \"t1\",\r\n     *      control: \"form\",\r\n     *      elements: [\r\n     *          {id: \"inputField1\", property: \"talk\"},\r\n     *          {id: \"inputField2\", property: \"room\"}\r\n     *      ]\r\n     * }</pre>\r\n     * @param data\r\n     */\r\n    public load(data: any) {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let form: HTMLElement = document.getElementById(id);\r\n\r\n        if (form instanceof HTMLFormElement) {\r\n            this.$view = form;\r\n            if (this.$view.hasAttribute('property')) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            if (!form) {\r\n                this.$view = document.createElement('form');\r\n                this.$view.setAttribute('id', this.id);\r\n\r\n                if (data.hasOwnProperty('property')) {\r\n                    this.property = data['property'];\r\n                }\r\n\r\n                // add all the attributes to the form element\r\n                for (let attr in data) {\r\n                    if (data.hasOwnProperty(attr) === false) {\r\n                        continue;\r\n                    }\r\n                    if (attr === 'elements') {\r\n                        continue;\r\n                    }\r\n                    this.$view.setAttribute(attr, data[attr]);\r\n                }\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists\r\n        let objId = this.property;\r\n        let hasItem = this.$owner.hasItem(objId);\r\n        if (hasItem) {\r\n            let item = this.$owner.getItem(objId);\r\n            item.addListener(this);\r\n            this.$model = item;\r\n        }\r\n\r\n        // now create all the sub input controls\r\n        for (let field of data.elements) {\r\n            // this.createField(field);\r\n            if (field.hasOwnProperty('property')) {\r\n                let property = field['property'];\r\n                property = this.property + '.' + property;\r\n                field['property'] = property;\r\n            }\r\n            if (!field.hasOwnProperty('class')) {\r\n                field['class'] = 'input';\r\n            }\r\n\r\n            // let the Bridge load the subControl\r\n            let control: Control = this.$owner.load(field, this);\r\n\r\n            // add subControl to children\r\n            this.children[control.getId()] = control;\r\n        }\r\n\r\n    }\r\n\r\n    public setProperty(id: string): void {\r\n        this.property = id;\r\n        let keys: string[] = Object.keys(this.children);\r\n        for (let k = 0; k < keys.length; k++) {\r\n            let key = keys[k];\r\n            let childControl = this.children[key];\r\n            // only set Property, if there is a Property defined before\r\n            if (childControl.property) {\r\n                childControl.setProperty(this.property + '.' + childControl.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object,  oldValue?: Object): boolean {\r\n        if (this.$owner != null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    /**\r\n     * Here we create the form elements and put all the attributes to them in order for the Control only having to load\r\n     * the data were appending here. Alternative would be loading with the bridge and afterwards setting\r\n     * the owner to the form instead of the body..\r\n     * @param field\r\n     */\r\n    /*private createField(field: Object) {\r\n     let control = 'input';\r\n     if (field.hasOwnProperty('class')) {\r\n     control = field['class'];\r\n     }\r\n     let input = document.createElement(control);\r\n     input.setAttribute('class', control);\r\n     let id: string;\r\n     if (!field.hasOwnProperty('id')) {\r\n     // TODO: not the best solution for generating unique id's for forms...\r\n     id = this.$owner.getId();\r\n     field['id'] = id;\r\n     }\r\n     if (field.hasOwnProperty('property')) {\r\n     let property = field['property'];\r\n     property = this.id + '.' + property;\r\n     input.setAttribute('property', property);\r\n     }\r\n     for (let attr in field) {\r\n     if (attr === 'property' || attr === 'class' || !field.hasOwnProperty(attr)) {\r\n     continue;\r\n     }\r\n     input.setAttribute(attr, field[attr]);\r\n     }\r\n\r\n     this.$viewElement.appendChild(input);\r\n\r\n     let newcontrol: Control = this.$owner.load(field['id']);\r\n     this.children[newcontrol.getId()] = newcontrol;\r\n     }*/\r\n}\r\n","/**\r\n * Created by Stefan on 01.03.2017.\r\n */\r\nimport {Control} from '../../Control';\r\n\r\nexport class HTML extends Control {\r\n    constructor(data: JSON|Object|any) {\r\n        super();\r\n\r\n        let id: string;\r\n        let tag: string;\r\n\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            data = {};\r\n        } else if (data) {\r\n            id = data.id;\r\n        }\r\n        if (id) {\r\n            this.id = id;\r\n            this.$view = document.getElementById(id);\r\n        }\r\n        if (!this.$view) {\r\n            if (data) {\r\n                tag = data['tag'] || 'div';\r\n            } else {\r\n                tag = 'div';\r\n            }\r\n            this.$view = document.createElement(tag);\r\n            let parent = document.getElementsByTagName('body')[0];\r\n            parent.appendChild(this.$view);\r\n        }\r\n        if (!parent) {\r\n            return;\r\n        }\r\n        this.writeAttribute(data, this.$view);\r\n    }\r\n\r\n    private writeAttribute(properties: Object, entity?: any) {\r\n        let lowKey;\r\n        if (!entity) {\r\n            lowKey = properties['tag'] || 'div';\r\n            entity = document.createElement(lowKey);\r\n        }\r\n        for (let key in properties) {\r\n            if (!properties.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            lowKey = key.toLowerCase();\r\n            if (properties[key] === null) {\r\n                entity.setAttribute(key, '');\r\n                continue;\r\n            }\r\n\r\n            if (lowKey === 'tag' || lowKey.charAt(0) === '$' || lowKey === '$graphModel' || lowKey === 'class') {\r\n                continue;\r\n            }\r\n            if (lowKey === 'children') {\r\n                if (Array.isArray(properties[key])) {\r\n                    for (let item in properties[key]) {\r\n                        if (properties[key].hasOwnProperty(item) === false) {\r\n                            continue;\r\n                        }\r\n                        let child = this.writeAttribute(item);\r\n                        if (child) {\r\n                            entity.appendChild(child);\r\n                        }\r\n                    }\r\n                } else {\r\n                    let child = this.writeAttribute(properties[key]);\r\n                    if (child) {\r\n                        entity.appendChild(child);\r\n                    }\r\n                }\r\n                continue;\r\n            }\r\n            entity[key] = properties[key];\r\n        }\r\n        return entity;\r\n    }\r\n}\r\n","import { Point } from '../BaseElements';\r\nimport { Util } from '../../util';\r\nimport { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\n\r\nexport class InfoText extends Node {\r\n\r\n    public cardinality: string = '';\r\n    private $heightOfOneTextItem: number;\r\n    private $cardinalitySvg: Element;\r\n    private $propertySvg: Element;\r\n    private $rectBackground: Element;\r\n\r\n    constructor(info: any) {\r\n        super(info);\r\n        if (typeof (info) === 'string') {\r\n            this.id = info;\r\n        } else {\r\n            if (info.property) {\r\n                this.property = info.property;\r\n            }\r\n            if (info.cardinality) {\r\n                this.cardinality = info.cardinality;\r\n            }\r\n        }\r\n        this.$isDraggable = true;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n    }\r\n\r\n    public updateCardinality(cardinality: string): void {\r\n        this.cardinality = cardinality;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (this.$rectBackground) {\r\n            this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n            this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n        }\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((cardinality.length === 0 && this.property.length > 0) || !this.$cardinalitySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$cardinalitySvg) {\r\n            this.$cardinalitySvg.textContent = cardinality;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.property.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    public updateProperty(property: string): void {\r\n        this.property = property;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((property.length === 0 && this.cardinality.length > 0) || !this.$propertySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$propertySvg) {\r\n            this.$propertySvg.textContent = property;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.cardinality.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos: Point = this.getPos();\r\n        let group = Util.create({ tag: 'g', class: 'SVGEdgeInfo', transform: 'translate(0, 0)' });\r\n\r\n        // append rect as background for text items\r\n        this.$rectBackground = Util.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y - this.$heightOfOneTextItem + 3,\r\n            width: this.getSize().x,\r\n            height: this.getSize().y,\r\n            fill: '#DDD',\r\n            'stroke-width': 0,\r\n            rx: '5',\r\n            ry: '5'\r\n        });\r\n        group.appendChild(this.$rectBackground);\r\n\r\n        let y = pos.y;\r\n        if (this.property) {\r\n            // property\r\n            this.$propertySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$propertySvg.textContent = this.property;\r\n            group.appendChild(this.$propertySvg);\r\n\r\n            y += this.$heightOfOneTextItem;\r\n        }\r\n\r\n        // cardinality\r\n        if (this.cardinality) {\r\n            this.$cardinalitySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$cardinalitySvg.textContent = this.cardinality;\r\n            group.appendChild(this.$cardinalitySvg);\r\n        }\r\n\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        let cardinalityAvailable = this.cardinality && this.cardinality.length > 0;\r\n        let propertyAvailable = this.property && this.property.length > 0;\r\n\r\n        return !propertyAvailable && !cardinalityAvailable;\r\n    }\r\n\r\n    public redrawFromEdge(newPos: Point): void {\r\n\r\n        if (!newPos) {\r\n            return;\r\n        }\r\n\r\n        let oldPos = this.getPos();\r\n\r\n        // get difference between new and the old position\r\n        let diffPos = new Point();\r\n        diffPos.x = newPos.x - oldPos.x;\r\n        diffPos.y = newPos.y - oldPos.y;\r\n\r\n        // get translate information\r\n        let translation = this.$view.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        let sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        // set new traslation values\r\n        let newTransX = (sx + diffPos.x);\r\n        let newTransY = (sy + diffPos.y);\r\n        this.$view.setAttributeNS(null, 'transform', 'translate(' + newTransX + ' ' + newTransY + ')');\r\n\r\n        // set new position of svg\r\n        this.getPos().x = newPos.x;\r\n        this.getPos().y = newPos.y;\r\n    }\r\n\r\n    public getText(): string {\r\n        let infoTxt: string = '';\r\n\r\n        if (this.property) {\r\n            infoTxt = this.property;\r\n        }\r\n        if (this.cardinality) {\r\n            if (infoTxt.length > 0) {\r\n                infoTxt += '\\n';\r\n            }\r\n            infoTxt += this.cardinality;\r\n        }\r\n\r\n        return infoTxt;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    private calcSize(): Point {\r\n        let text: string = this.getText();\r\n        let items: Array<string> = text.split('\\n');\r\n\r\n        let maxSize = new Point(0, 0);\r\n        if (text.length === 0) {\r\n            return maxSize;\r\n        }\r\n\r\n        for (let i = 0; i < items.length; i += 1) {\r\n            // calculate size\r\n            let sizeOfText: ClientRect = Util.sizeOf(items[i]);\r\n            maxSize.x = Math.max(maxSize.x, sizeOfText.width);\r\n            maxSize.y += sizeOfText.height;\r\n\r\n            this.$heightOfOneTextItem = sizeOfText.height;\r\n        }\r\n\r\n        return maxSize;\r\n    }\r\n    private resetAllSvgElements() {\r\n        this.$cardinalitySvg = undefined;\r\n        this.$view = undefined;\r\n        this.$propertySvg = undefined;\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\nimport {PropertyBinder} from '../../PropertyBinder';\r\n\r\nexport class Input extends Control {\r\n    private type: string;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data = super.initViewDataProperties(oldData);\r\n        if ('checkbox' === this.type || 'radio' === this.type) {\r\n            data.addFrom('checked', oldData);\r\n        }\r\n        data.addFrom('value', oldData);\r\n        data.addFrom('type', oldData);\r\n        return data;\r\n    }\r\n\r\n    public load(data: any) {\r\n        let id: string;\r\n        let inputField: HTMLElement;\r\n        let useData: boolean;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            useData = true;\r\n        } else {\r\n            id = data.id;\r\n            if (data.type) {\r\n                this.setType(data['type']);\r\n            } else {\r\n                this.setType('text');\r\n            }\r\n            if (data.hasOwnProperty('property')) {\r\n                this.setProperty(data['property']);\r\n            }\r\n            useData = false;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n\r\n        inputField = document.getElementById(id);\r\n\r\n        if (useData) {\r\n            if (inputField) {\r\n                // TODO disuss how to decide, which property we should listen on...\r\n                // this.property = id;\r\n                if (inputField.hasAttribute('Property')) {\r\n                    this.setProperty(inputField.getAttribute('Property'));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (inputField instanceof HTMLInputElement) {\r\n            this.setView(inputField);\r\n            this.type = inputField.type;\r\n            // useData = false;\r\n        } else {\r\n            if (!inputField) {\r\n                this.setView(document.createElement('input'));\r\n                this.$viewData = this.initViewDataProperties(this.$viewData);\r\n                // append viewListener\r\n                // this.$view.addEventListener('change', this.$viewListener);\r\n                if (typeof(data) !== 'string') {\r\n                    for (let attr in data) {\r\n                        if (data.hasOwnProperty(attr) === false) {\r\n                            continue;\r\n                        }\r\n                        // this.$view[attr] = data[attr];\r\n                        this.$viewData.setValue(attr, data[attr]);\r\n                    }\r\n                } else {\r\n                    if (this.type) {\r\n                        this.$view.setAttribute('type', this.type);\r\n                    }\r\n                    if (data.hasOwnProperty('class')) {\r\n                        this.$view.setAttribute('class', data['class']);\r\n                    }\r\n                    this.$view.setAttribute('id', this.id);\r\n                    this.$view.setAttribute('property', this.property);\r\n                }\r\n\r\n                if (data.value) {\r\n                    // if theres a value at the control, we want to change the model to the new value\r\n                    if (this.$model) {\r\n                        this.$model.setValue(this.lastProperty, data.value);\r\n                    }\r\n                }\r\n                if (this.$model) {\r\n                    PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                }\r\n\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (this.property && entity) {\r\n            if (entity.id === this.property.split('.')[0]) {\r\n                this.$model = entity;\r\n                PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                // entity.addListener(this, this.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n    // TODO FIXME protected updateElement(property: string, value: string) {\r\n    //     if (this.$view instanceof HTMLInputElement) {\r\n    //         if (value != null) {\r\n    //             if(property == this.lastProperty) {\r\n    //                 (<HTMLInputElement>this.$view)[this.getStandardProperty()] = value;\r\n    //             } else {\r\n    //                 // this.getRoot().setValue(this, property, value, (<HTMLInputElement>this.$view)[property]);\r\n    //                 (<HTMLInputElement>this.$view)[property] = value;\r\n    //             }\r\n    //         } else {\r\n    //             delete (<HTMLInputElement>this.$view)[property];\r\n    //         }\r\n    //     }\r\n    // }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            super.controlChanged(ev);\r\n        }\r\n// <<<<<<< HEAD\r\n//             let newVal = element[this.getStandardProperty()];\r\n//             if (this.isKeyOnly()) {\r\n//                 // we expect, element[this.lastProperty] to be boolean:\r\n//                 if (!newVal) {\r\n//                     newVal = null;\r\n//                 }\r\n//             } else {\r\n//             }\r\n        // let $graphModel;\r\n        // let value;\r\n        /*if (this.$graphModel) {\r\n            $graphModel = this.$graphModel;\r\n            value = this.$graphModel.getValue(this.lastProperty);\r\n        } else {\r\n            $graphModel = this;\r\n            if (this.$view) {\r\n                value = this.$view[this.lastProperty];\r\n            }\r\n        }*/\r\n        // this.$model.setValue(this.lastProperty, newVal);\r\n        // this.propertyChange(this.$graphModel,this.lastProperty, this.$graphModel.getValue(this.lastProperty), newVal);\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n// =======\r\n        // let newVal = element[this.lastProperty];\r\n        // if (this.isKeyOnly()) {\r\n        //     // we expect, element[this.lastProperty] to be boolean:\r\n        //     if (!newVal) {\r\n        //         newVal = null;\r\n        //     }\r\n        // } else {\r\n        // }\r\n        // let $graphModel;\r\n        // let value;\r\n\r\n        // $graphModel = this.getViewData();\r\n        // if (this.$graphModel) {\r\n        //     $graphModel = this.$graphModel;\r\n        //     value = this.$graphModel.getValue(this.lastProperty);\r\n        // } else {\r\n        //     $graphModel = this;\r\n        //     if (this.$view) {\r\n        //         value = this.$view[this.lastProperty];\r\n        //     }\r\n        // }\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n//            this.saveViewInData();\r\n// >>>>>>> addOldFunctions\r\n//         } else {\r\n//             console.log('value does not match the pattern...');\r\n//         }\r\n    }\r\n\r\n    public setType(type: string): void {\r\n        let oldValue: string = this.type;\r\n        if (oldValue === type) {\r\n            return;\r\n        }\r\n        if (type === 'radio') {\r\n            this.$viewData.setValue('checked', null);\r\n        } else {\r\n            this.$viewData.removeKey('checked');\r\n        }\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\n\r\nexport class Label extends Control {\r\n    public load(data: JSON): any {\r\n        this.createControl(this.$owner, data);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('label');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr === 'textContent') {\r\n                this.$view.textContent = data['textContent'];\r\n            } else {\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Method extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.updateType(data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.updateType(data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.updateType(data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n            // e.g. setName() : string or name:string\r\n            let dataSplitted = data.split(':');\r\n\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }\r\n                else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType(dataSplitted[1].trim() || 'void');\r\n            }\r\n            // set default return type of void\r\n            else {\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = data.trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }  else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType('void');\r\n            }\r\n        }\r\n\r\n        if (Util.includes(this.$data.getValue('name'), '(') && !Util.includes(this.$data.getValue('name'), ')') === false) {\r\n            this.$data.setValue('name', this.$data.getValue('name') + '()');\r\n        }\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\nimport {Association} from '../edges';\r\nimport { GraphModel } from '..';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\n\r\nexport class Node extends DiagramElement {\r\n    public $edges: Association[] = [];\r\n    public $minWidth: number = 150;\r\n    public $minheight: number = 25;\r\n    public $defaulEdgeType: string;\r\n\r\n    constructor(data: JSON|string|Object|any) {\r\n        super();\r\n\r\n        // default size\r\n        this.withSize(this.$minWidth, this.$minheight);\r\n\r\n        if (data) {\r\n            if (data['x'] && data['y']) {\r\n                this.withPos(data['x'], data['y']);\r\n            }\r\n            if (data['width'] || data['height']) {\r\n                this.withSize(data['width'], data['height']);\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos = this.getPos();\r\n        const size = this.getSize();\r\n\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x - size.x / 2,\r\n            y: pos.y - size.y / 2,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y,\r\n            width: size.x,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        const shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'middle',\r\n            'font-family': 'Verdana',\r\n            'font-size': '14',\r\n            fill: 'black'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = this.id;\r\n\r\n        let group = this.createShape({tag: 'g', id: this.id});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public copy(): Node {\r\n        let copy: Node;\r\n        // create new id\r\n        let model = <GraphModel>this.$owner || <GraphModel>this.getRoot();\r\n        if (model) {\r\n            let type = this.property || Node.name;\r\n            let newId = model.getNewId(type);\r\n            copy = <Node>model.createElement(type, newId, null);\r\n            copy.withSize(this.getSize().x, this.getSize().y);\r\n            copy.$owner = model;\r\n        } else {\r\n            copy.id = this.id + '-copy';\r\n            copy.$owner = this.getRoot();\r\n        }\r\n        return copy;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n// EMPTY\r\n    }\r\n    public addAttribute(value: string): Attribute {\r\n        return null;\r\n    }\r\n    public getAttributes(): Attribute[] {\r\n        return null;\r\n    }\r\n    public addMethod(value: string): Method {\r\n        return null;\r\n    }\r\n    public updateLabel(newLabel: string): void {\r\n// EMPTY\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\n\r\nexport class SO extends DiagramElement {\r\n    public static create(element: Object) {\r\n        let result: SO = new SO();\r\n        for (let key in element) {\r\n            if (element.hasOwnProperty(key) === false) {\r\n                continue;\r\n            }\r\n            result.withKeyValue(key, element[key]);\r\n\r\n        }\r\n        return result;\r\n    }\r\n\r\n    public withKeyValue(key: string, value: any): SO {\r\n        if (key === 'typ') {\r\n            this.property = value;\r\n        } else if (key === 'x') {\r\n            this.withPos(value, null);\r\n        } else if (key === 'y') {\r\n            this.withPos(null, value);\r\n        } else if (key === 'width') {\r\n            this.withSize(value, null);\r\n        } else if (key === 'height') {\r\n            this.withSize(null, value);\r\n        } else {\r\n            this[key] = value;\r\n        }\r\n        return this;\r\n    }\r\n}\r\n","import {Point} from '../BaseElements';\r\nimport {Node} from './Node';\r\n\r\nexport class StereoType extends Node {\r\n\r\n    protected stereoType: string;\r\n\r\n    constructor (type: string, x: number, y: number) {\r\n        super('');\r\n        this.withPos(x, y);\r\n        this.setStereoType(type);\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        let pos: Point = this.getPos();\r\n        let size: Point = this.getSize();\r\n\r\n               // = = = STEREOTYPE = = =\r\n        let stereoType = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y - this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': 10,\r\n            'font-weight': 'bold',\r\n            fill: 'black'\r\n        });\r\n        stereoType.textContent = this.stereoType;\r\n\r\n        this.$view = stereoType;\r\n        return stereoType;\r\n    }\r\n\r\n    public setStereoType(value: string): void {\r\n        this.stereoType = '<<' + value + '>>';\r\n    }\r\n\r\n    public getStereoType(): string {\r\n        return this.stereoType;\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { SO } from './SO';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport { Util } from '../../util';\r\n\r\nexport class Symbol extends Node {\r\n    public $heightMax: number = 0;\r\n    public $heightMin: number = 0;\r\n\r\n    constructor(typ: string) {\r\n        super(typ);\r\n    }\r\n\r\n    public draw(typ?: string): SVGElement {\r\n        return SymbolLibary.draw(this);\r\n    }\r\n}\r\n\r\n// \t\t\t\t###################################################### SymbolLibary ####################################################################################\r\n// Example Items\r\n// {tag: 'path', d: ''}\r\n// {tag: 'rect', width:46, height:34}\r\n// {tag: 'ellipse', width:23, height:4}\r\n// {tag: 'line', x1:650, y1:-286, x2:650, y2:-252}\r\n// {tag: 'circle', r:5, x:12, y:0}\r\n// {tag: 'image', height: 30, width: 50, content$src: hallo}\r\n// {tag: 'text', 'text-anchor': 'left', x: '10'}\r\nexport class SymbolLibary {\r\n\r\n    public static drawSVG(node: any): SVGSVGElement {\r\n        // const lib = new SymbolLibary();\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            const parent = SO.create(node);\r\n            parent['property'] = 'SVG';\r\n            symbol = fn(parent);\r\n            // symbol = fn.apply(lib, parent);\r\n\r\n            return SymbolLibary.createGroup(parent, symbol);\r\n        }\r\n        return symbol;\r\n    }\r\n\r\n    public static draw(node: any, parent?: Object): SVGElement {\r\n        // Node is Symbol or simple Object\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            if (!(node instanceof DiagramElement)) {\r\n                node = SO.create(node);\r\n                if (!node.property) {\r\n                    node.property = 'SVG';\r\n                }\r\n            }\r\n            symbol = fn.apply(this, [node]);\r\n            if (!parent) {\r\n                return SymbolLibary.createGroup(node, symbol);\r\n            }\r\n            return SymbolLibary.createGroup(node, symbol);\r\n        } else if (node.property) {\r\n            symbol = new Symbol(node.property);\r\n            symbol.init(node);\r\n            let pos = node.getPos();\r\n            let size = node.getSize();\r\n            symbol.withPos(pos.x, pos.y);\r\n            symbol.withSize(size.x, size.y);\r\n            symbol['value'] = node['value'];\r\n            parent = node['$parent'];\r\n            return SymbolLibary.draw(symbol, parent);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public static upFirstChar(txt: string): string {\r\n        return txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase();\r\n    }\r\n\r\n    public static isSymbolName(typ: string): boolean {\r\n        let fn = SymbolLibary['draw' + SymbolLibary.upFirstChar(typ)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static isSymbol(node: Symbol) {\r\n        let fn = SymbolLibary[SymbolLibary.getName(node)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static getName(node: any): string {\r\n        if (node['type']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['type']);\r\n        }\r\n        if (node.property) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node.property);\r\n        }\r\n        if (node['src']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['src']);\r\n        }\r\n        return 'drawNode';\r\n    }\r\n\r\n    /*FIXME   public static createImage(node: Symbol, $graphModel:Node) {\r\n           let n, img: HTMLElement;\r\n           // node.$graphModel = node;\r\n           if (SymbolLibary.isSymbol(node)) {\r\n               return SymbolLibary.draw(null, node);\r\n           }\r\n           n = {tag: 'img', $graphModel: node, src: node['src']};\r\n           let size = node.getSize();\r\n           if (size.isEmpty() === false) {\r\n               n['width'] = size.x;\r\n               n['height'] = size.y;\r\n           } else {\r\n               n['xmlns'] = 'http://www.w3.org/1999/xhtml';\r\n           }\r\n           img = Util.create(n);\r\n           if (size.isEmpty()) {\r\n               $graphModel.appendImage(img);\r\n               return null;\r\n           }\r\n           return img;\r\n       }*/\r\n\r\n    public static createGroup(node: DiagramElement, group: any) {\r\n        let func, y: number, z: number, box, item: Element, transform, i, offsetX = 0, offsetY = 0;\r\n        let svg: any;\r\n        if (node.property.toUpperCase() === 'HTML') {\r\n            let so = {\r\n                tag: 'svg',\r\n                style: { left: (group.x | 0) + node.getPos().x, top: (group.y | 0) + node.getPos().y, position: 'absolute' }\r\n            };\r\n            if (node['transform']) {\r\n                so['transform'] = node['transform'];\r\n            }\r\n            svg = Util.create(so);\r\n        } else {\r\n            svg = Util.create({ tag: 'g' });\r\n            transform = 'translate(' + group.getPos().x + ' ' + group.getPos().y + ')';\r\n            if (group.scale) {\r\n                transform += ' scale(' + group.scale + ')';\r\n            }\r\n            if (group.rotate) {\r\n                transform += ' rotate(' + group.rotate + ')';\r\n            }\r\n            svg.setAttribute('transform', transform);\r\n            if (group['id']) {\r\n                svg.id = group['id'];\r\n            }\r\n        }\r\n\r\n        if (node['tooltip']) {\r\n            const tooltipTitleAttr = {\r\n                tag: 'title'\r\n            };\r\n            let tooltipTitle = Util.createShape(tooltipTitleAttr);\r\n            tooltipTitle.textContent = node['tooltip'];\r\n            svg.appendChild(tooltipTitle);\r\n        }\r\n\r\n        if (node['background']) {\r\n            const attrCircle = {\r\n                tag: 'circle',\r\n                cx: 20,\r\n                cy: 20,\r\n                r: 17,\r\n                stroke: '#888',\r\n                'stroke-width': 0,\r\n                fill: '#DDD'\r\n            };\r\n            svg.appendChild(Util.create(attrCircle));\r\n        }\r\n\r\n        for (i = 0; i < group.items.length; i += 1) {\r\n            svg.appendChild(Util.create(group.items[i]));\r\n        }\r\n        let elements = node['elements'];\r\n        Util.setSize(svg, group.width + node.getSize().x, group.height + node.getSize().y);\r\n        node['$heightMin'] = node.getSize().y;\r\n        if (elements) {\r\n            for (i = 0; i < elements.length; i += 1) {\r\n                if (!elements[i] && elements[i].length < 1) {\r\n                    elements.splice(i, 1);\r\n                    i -= 1;\r\n                }\r\n            }\r\n            box = Util.create({ tag: 'g' });\r\n            // Calculate new Height\r\n            let c: number;\r\n            z = 0;\r\n            for (c = 0; c < elements.length; c += 1) {\r\n                if (typeof elements[c] === 'string') {\r\n                    z += 1;\r\n                } else {\r\n                    z += elements[c].length;\r\n                }\r\n            }\r\n            z = z * 25 + 6;\r\n            box.appendChild(Util.create({\r\n                tag: 'rect',\r\n                rx: 0,\r\n                x: offsetX,\r\n                y: (offsetY + 28),\r\n                width: 70,\r\n                height: z,\r\n                stroke: '#000',\r\n                fill: '#fff',\r\n                opacity: '0.7'\r\n            }));\r\n            node['$heightMax'] = z + node['$heightMin'];\r\n\r\n            svg['elements'] = elements;\r\n            if (node['type'] === 'DropDown') {\r\n                svg['activ'] = Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': 60,\r\n                    'x': (10 + offsetX),\r\n                    'y': 20,\r\n                    value: node['activText']\r\n                });\r\n                svg.appendChild(svg.activ);\r\n            }\r\n\r\n            y = offsetY + 46;\r\n            // 46 -28 = 18\r\n\r\n            func = function (event: Event) {\r\n                if (svg.activ) {\r\n                    svg.activ.textContent = (<any>event.currentTarget).value;\r\n                }\r\n            };\r\n            let txt: string;\r\n            let textClass = 'SVGTEXT';\r\n            for (z = 0; z < elements.length; z += 1) {\r\n                if (typeof elements[z] === 'string') {\r\n                    txt = elements[z];\r\n                } else {\r\n                    item = this.addText(y, offsetX, box, elements[z][0], 'SVGTEXT');\r\n                    y += 26;\r\n                    for (c = 1; c < elements[z].length; c += 1) {\r\n                        item = this.addText(y, offsetX, box, '* ' + elements[z][c], 'SVGTEXTITEM');\r\n\r\n                        item['value'] = elements[z];\r\n                        if (node['action']) {\r\n                            item['onclick'] = node['action'];\r\n                        } else {\r\n                            item['onclick'] = func;\r\n                        }\r\n                        y += 26;\r\n                    }\r\n                    txt = elements[z];\r\n                    let subBox = Util.create({\r\n                        tag: 'rect',\r\n                        rx: 0,\r\n                        x: offsetX,\r\n                        y: (offsetY + 28),\r\n                        width: 60,\r\n                        height: z,\r\n                        stroke: '#000',\r\n                        fill: '#fff',\r\n                        opacity: '0.7'\r\n                    });\r\n                    continue;\r\n                }\r\n                // let txt = elements[z];\r\n                item = this.addText(y, offsetX, box, txt, textClass);\r\n\r\n                item['value'] = elements[z];\r\n                if (node['action']) {\r\n                    item['onclick'] = node['action'];\r\n                } else {\r\n                    item['onclick'] = func;\r\n                }\r\n                y += 26;\r\n            }\r\n            svg.choicebox = box;\r\n        }\r\n        svg.tool = node;\r\n        svg.onclick = function () {\r\n            if (svg.status === 'close') {\r\n                svg.open();\r\n            } else {\r\n                svg.close();\r\n            }\r\n        };\r\n        svg.close = function () {\r\n            if (svg.status === 'open' && svg.choicebox) {\r\n                this.removeChild(svg.choicebox);\r\n            }\r\n            svg.status = 'close';\r\n            svg.tool.$size.height = svg.tool.heightMin;\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x, g.tool.height + g.tool.y);\r\n            Util.setSize(svg, svg.tool.$size.x, svg.tool.$size.y);\r\n        };\r\n        svg.open = function () {\r\n            if (this.tagName === 'svg') {\r\n                return;\r\n            }\r\n            if (svg.status === 'close' && svg.choicebox) {\r\n                this.appendChild(svg.choicebox);\r\n            }\r\n            svg.status = 'open';\r\n            svg.tool.$size.height = svg.tool.heightMax;\r\n            Util.setSize(svg, svg.tool.width, svg.tool.height);\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x + 10, g.tool.height + g.tool.y + 10);\r\n        };\r\n        svg.close();\r\n        return svg;\r\n    }\r\n\r\n    public static addChild(parent: SVGElement, json: JSON | Element): void {\r\n        let item: Element;\r\n        if ((<any>json).offsetLeft) {\r\n            item = <Element>json;\r\n        } else {\r\n            item = Util.create(json);\r\n        }\r\n        item.setAttribute('class', 'draggable');\r\n        parent.appendChild(item);\r\n    }\r\n\r\n    public static all(node: any): void {\r\n        SymbolLibary.drawSmiley(node);\r\n        SymbolLibary.drawDatabase(node);\r\n        SymbolLibary.drawLetter(node);\r\n        SymbolLibary.drawMobilephone(node);\r\n        SymbolLibary.drawWall(node);\r\n        SymbolLibary.drawActor(node);\r\n        SymbolLibary.drawLamp(node);\r\n        SymbolLibary.drawArrow(node);\r\n        SymbolLibary.drawButton(node);\r\n        SymbolLibary.drawDropdown(node);\r\n        SymbolLibary.drawClassicon(node);\r\n        SymbolLibary.drawClassWithEdgeicon(node);\r\n    }\r\n\r\n    public static drawHamburger(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'circle', r: 10, fill: '#ccc', cx: 12, cy: 12, 'stroke-width': 1, stroke: 'black'},\r\n                { tag: 'path', d: 'M 8,7 H 16 M 8,12 H 16 M 8,17 H 16', stroke: 'black', fill: 'none' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawSmiley(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'path', d: 'm49.01774,25.64542a24.5001,24.5 0 1 1 -49.0001,0a24.5001,24.5 0 1 1 49.0001,0z', stroke: 'black', fill: 'none' }, { tag: 'path', d: 'm8,31.5c16,20 32,0.3 32,0.3' },\r\n                { tag: 'path', d: 'm19.15,20.32a1.74,2.52 0 1 1 -3.49,0a1.74,2.52 0 1 1 3.49,0z' },\r\n                { tag: 'path', d: 'm33,20.32a1.74,2.52 0 1 1 -3.48,0a1.74,2.52 0 1 1 3.48,0z' },\r\n                { tag: 'path', d: 'm5.57,31.65c3.39,0.91 4.03,-2.20 4.03,-2.20' },\r\n                { tag: 'path', d: 'm43,32c-3,0.91 -4,-2.20 -4.04,-2.20' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDatabase(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 40,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,-6.26 25.03,-6.26 25.03,0l0,25.82c0,6.26 -25.03,6.26 -25.03,0l0,-25.82z',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLetter(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 17,\r\n            items: [\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1,1l22,0l0,14l-22,0l0,-14z' },\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1.06,1.14l10.94,6.81l10.91,-6.91' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMobilephone(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 4.2 0.5 15.61 0c 2 0 3.7 1.65 3.7 3.7l 0 41.6c 0 2-1.65 3.7-3.7 3.7l-15.6 0c-2 0-3.7-1.6-3.7-3.7l 0-41.6c 0-2 1.6-3.7 3.7-3.7z',\r\n                    fill: 'none',\r\n                    stroke: 'black'\r\n                },\r\n                { tag: 'path', d: 'm 12.5 2.73a 0.5 0.5 0 1 1-1 0 0.5 0.5 0 1 1 1 0z' },\r\n                { tag: 'path', d: 'm 14 46a 2 2 0 1 1-4 0 2 2 0 1 1 4 0z' },\r\n                { tag: 'path', d: 'm 8 5 7 0' },\r\n                { tag: 'path', d: 'm 1.63 7.54 20.73 0 0 34-20.73 0z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawWall(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'path', d: 'm26,45.44l-5,3.56l-21,-9l0,-36.41l5,-3.56l20.96,9l-0,36.4z' },\r\n                {\r\n                    tag: 'path',\r\n                    stroke: 'white',\r\n                    d: 'm2.21,11l18.34,7.91m-14.46,-12.57l0,6.3m8.2,21.74l0,6.35m-8.6,-10l0,6.351m4.1,-10.67l0,6.3m4.8,-10.2l0,6.3m-8.87,-10.23l0,6.35m4.78,-10.22l0,6.35m-8,14.5l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m0,-13l0,34m-18.23,-41.84l18.3,8m0,0.11l5,-3.57'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawActor(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'line', stroke: '#000', x1: '12', y1: '10', x2: '12', y2: '30' },\r\n                { tag: 'circle', stroke: '#000', cy: '5', cx: '12', r: '5' },\r\n                { tag: 'line', stroke: '#000', y2: '18', x2: '25', y1: '18', x1: '0' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '5', y1: '30', x1: '12' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '20', y1: '30', x1: '12' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLamp(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 22.47 10.58c-6.57 0-11.89 5.17-11.89 11.54 0 2.35 0.74 4.54 2 6.36 2 4 4.36 5.63 4.42 10.4l 11.15 0c 0.12-4.9 2.5-6.8 4.43-10.4 1.39-1.5 1.8-4.5 1.8-6.4 0-6.4-5.3-11.5-11.9-11.5z',\r\n                    fill: 'white',\r\n                    stroke: 'black'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 40 8 0c 0.58 0 1 0.5 1 1 0 0.6-0.5 1-1 1l-8 0c-0.6 0-1-0.47-1-1 0-0.58 0.47-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 42.7 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 45.3 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                { tag: 'path', d: 'm 19.5 48c 0.37 0.8 1 1.3 1.9 1.7 0.6 0.3 1.5 0.3 2 0 0.8-0.3 1.4-0.8 1.9-1.8z' },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 6 37.5 4.2-4c 0.3-0.3 0.8-0.3 1 0 0.3 0.3 0.3 0.8 0 1.1l-4.2 4c-0.3 0.3-0.8 0.3-1.1 0-0.3-0.3-0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 39 37.56-4.15-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 38 23 5.8 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.8 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 1.3 23 6 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.9 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 34.75 11.2 4-4.1c 0.3-0.3 0.3-0.8 0-1-0.3-0.3-0.8-0.3-1 0l-4 4.1c-0.3 0.3-0.3 0.8 0 1 0.3 0.3 0.8 0.3 1 0z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 11.23 10-4-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 21.64 1.3 0 5.8c 0 0.4 0.3 0.8 0.8 0.8 0.4 0 0.8-0.3 0.8-0.8l 0-5.8c 0-0.4-0.3-0.8-0.8-0.8-0.4 0-0.8 0.3-0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 26.1 24.3c-0.5 0-1 0.2-1.3 0.4-1.1 0.6-2 3-2.27 3.5-0.26-0.69-1.14-2.9-2.2-3.5-0.7-0.4-2-0.7-2.5 0-0.6 0.8 0.2 2.2 0.9 2.9 1 0.9 3.9 0.9 3.9 0.9 0 0 0 0 0 0 0.54 0 2.8 0 3.7-0.9 0.7-0.7 1.5-2 0.9-2.9-0.2-0.3-0.7-0.4-1.2-0.4z'\r\n                },\r\n                { tag: 'path', d: 'm 22.5 28.57 0 10.7' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawStop(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 30,\r\n            height: 30,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: '#FFF',\r\n                    'stroke-width': '2',\r\n                    stroke: '#B00',\r\n                    d: 'm 6,6 a 14,14 0 1 0 0.06,-0.06 z m 0,0 20,21'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMin(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    d: 'm 0,0 19,0 0,19 -19,0 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 13,-0.04'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawArrow(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 10,\r\n            height: 9,\r\n            rotate: node['rotate'],\r\n            items: [\r\n                { tag: 'path', fill: '#000', stroke: '#000', d: 'M 0,0 10,4 0,9 z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMax(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    'stroke-dashoffset': 2,\r\n                    'stroke-dasharray': '4.8,4.8',\r\n                    d: 'm 0,0 4.91187,0 5.44643,0 9.11886,0 0,19.47716 -19.47716,0 0,-15.88809 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 6,0.006 0.02,5 0.01,-11 -0.03,6.02 c 2,-0.01 4,-0.002 6,0.01'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawButton(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight, btnValue;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        btnValue = node['value'] || '';\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: 60,\r\n            height: 28,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 8,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    filter: 'url(#drop-shadow)',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                { tag: 'text', $font: true, x: 10, y: 18, fill: 'black', value: btnValue, 'class': 'hand' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDropdown(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 0,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth - 20,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 2,\r\n                    x: btnWidth - 20,\r\n                    y: 0,\r\n                    width: 20,\r\n                    height: 28,\r\n                    stroke: '#000',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    style: 'fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1',\r\n                    d: 'm ' + (btnWidth - 15) + ',13 10,0 L ' + (btnWidth - 10) + ',20 z'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassicon(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.19999l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm25.68807,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.2l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                { tag: 'line', x1: 11, y1: 7, x2: 25, y2: 7, stroke: '#000' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassWithEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M2,10 20,10 20,35 2,35 Z M2,17 20,17 M20,10 28,5 28,9 M 28.5,4.7 24,4',\r\n                    style: 'fill:none;stroke:#000000;transform:scale(0.8);'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClass(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: '100%',\r\n            height: '100%',\r\n            items: [\r\n                { tag: 'rect', width: 50, height: 40, x: 0, y: 0, 'stroke-width': 2, stroke: 'black', fill: 'none'},\r\n                { tag: 'rect', width: 50, height: 12, x: 0, y: 18, 'stroke-width': 1, stroke: 'black', fill: 'none'},\r\n                { tag: 'text', x: 27, y: 14, 'text-anchor': 'middle', 'font-size': 11, value: 'Class'},\r\n                { tag: 'text', x: 5, y: 24, 'font-size': 5, value: '+ field: type'},\r\n                { tag: 'text', x: 5, y: 36, 'font-size': 5, value: '+ method(type)'}\r\n            ]\r\n        });\r\n    }\r\n/*\r\n<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n    <g>\r\n    <text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text>\r\n        <text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>\r\n*/\r\n\r\n    public static drawEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M10,30 30,10 M19,10 30,10 30,21',\r\n                    style: 'fill:none;stroke:#555;stroke-width:2;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawCopynode(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M5 5 L15 5 L15 20 L5 20 Z M5 10 L15 10',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M8 2 L18 2 L18 17 L8 17 Z M8 7 L18 7'\r\n                        + 'M11 4.5 L15 4.5 '\r\n                        + 'M10 10 L16 10 '\r\n                        + 'M10 13 L16 13 ',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawBasket(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M12 12 L18 12 L18 11 L22 11 L22 12 L28 12 L28 14 L27 14 L27 29 L13 29 L13 14 L12 14 Z M13 14 L27 14 M20 17 L20 26 M17 16 L17 27 M23 16 L23 27',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawPencil(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M6 20 L12 23 L33 23 L33 17 L12 17 Z M30 17 L30 23 M12 17 L12 23 M15 19 L28 19 M15 21 L28 21',\r\n                    stroke: '#000',\r\n                    'stroke-width': 1,\r\n                    fill: 'white'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    private static addText(y: number, offsetX: number, box: Element, text: string, textClass: string): Element {\r\n        let item: Element;\r\n        box.appendChild(Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'text-anchor': 'left',\r\n            width: 70,\r\n            x: 10,\r\n            y: y,\r\n            class: textClass,\r\n            value: text,\r\n            eventValue: text\r\n        }));\r\n        if (textClass === 'SVGTEXT') {\r\n            textClass = 'SVGChoiceText';\r\n        } else {\r\n            textClass = 'SVGChoice';\r\n        }\r\n\r\n        item = Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            x: offsetX,\r\n            y: y - 18,\r\n            width: 70,\r\n            height: 24,\r\n            stroke: 'none',\r\n            class: textClass,\r\n        });\r\n        item['eventValue'] = text;\r\n        box.appendChild(item);\r\n        return item;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n}\r\n","import {Control} from '../../Control';\r\nimport BridgeElement from '../../BridgeElement';\r\nimport Data from '../../Data';\r\nimport {Util} from '../../util';\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Table extends Control {\r\n    protected items: BridgeElement[] = [];\r\n    private columns: Column[] = [];\r\n    private cells: Object = {};\r\n    private $bodysection: HTMLTableSectionElement;\r\n    private $headersection: HTMLTableSectionElement;\r\n    private showedItems: Array<BridgeElement> = [];\r\n    // BridgeElements:\r\n    private itemsIds: Object = {};\r\n    private countElement: HTMLElement;\r\n    private countColumn: HTMLElement;\r\n    private countColumnPos: number;\r\n    private resultColumn: string;\r\n    private lastSearchText: string;\r\n    private searchColumns: Array<string> = [];\r\n    private searchText: Array<string> = [];\r\n    private sortColumn: Column;\r\n    private direction: number;\r\n    private moveElement: Column = null;\r\n    private isDrag: boolean = false;\r\n    private moveTimeStamp: number;\r\n    private moveX: number;\r\n    private movePos: number;\r\n    private dragColumn: Column;\r\n    private dragPos: number;\r\n    private tableOption: HTMLTableHeaderCellElement;\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    private static indexOfChild(item: BridgeElement) {\r\n        let i: number = 0;\r\n        let child: Node = item.gui;\r\n        while ((child = child.previousSibling) !== null) {\r\n            i++;\r\n        }\r\n        return i;\r\n    }\r\n\r\n    public load(data: any): void {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n            if (data.property) {\r\n                this.property = data.property;\r\n            }\r\n\r\n            if (data.searchColumns) {\r\n                let search: Array<string> = [];\r\n                if (typeof(data.searchColumns) === 'string') {\r\n                    search = data.searchColumns.split(' ');\r\n                } else {\r\n                    search = data.searchColumns;\r\n                }\r\n                for (let z: number = 0; z < search.length; z++) {\r\n                    let item = search[z].trim();\r\n                    if (item.length > 0) {\r\n                        if (this.searchColumns.indexOf(item) < 0) {\r\n                            this.searchColumns.push(item);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        if (this.$view) {\r\n            // Must be an Update\r\n            if (data['columns']) {\r\n                // It is a json must add all things and generate HTML\r\n                for (let i in data['columns']) {\r\n                    if (data['columns'].hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    let col = this.parseData(data['columns'][i]);\r\n                    this.addHeaderInfo(col);\r\n                    this.columns.push(col);\r\n                    this.tableOption.parentElement.insertBefore(col.$element, this.tableOption);\r\n                }\r\n                for (let i in this.showedItems) {\r\n                    let item: BridgeElement = this.showedItems[i];\r\n                    let cell;\r\n                    // Now Add some Children\r\n                    while (item.gui.children.length < this.columns.length) {\r\n                        cell = document.createElement('td');\r\n                        item.gui.appendChild(cell);\r\n                    }\r\n                    // Now Remove Some Children\r\n                    while (item.gui.children.length > this.columns.length) {\r\n                        item.gui.removeChild(item.gui.children[item.gui.children.length - 1]);\r\n                    }\r\n                    for (let c: number = 0; c < this.columns.length; c++) {\r\n                        let name = this.columns[c].attribute;\r\n                        // let count = this.columns.length;\r\n                        cell = item.gui.children[c];\r\n                        cell.innerHTML = item.model.getValue(name);\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n\r\n        this.$view = document.getElementById(id);\r\n        let headerrow: HTMLTableRowElement;\r\n        if (this.$view) {\r\n            if (!this.property) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('table');\r\n            this.$owner.appendChild(this);\r\n        }\r\n        if (!this.$bodysection) {\r\n            // add tbody element if missing\r\n            this.$bodysection = document.createElement('tbody');\r\n            this.$view.appendChild(this.$bodysection);\r\n        }\r\n        if (data['classname']) {\r\n            this.$view.className = data['classname'];\r\n        } else {\r\n            this.$view.className = 'mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp';\r\n        }\r\n\r\n        this.id = id;\r\n        this.$view.id = id;\r\n        this.$view.setAttribute('type', this.constructor['name'].toLowerCase());\r\n        let counter = 0;\r\n        for (let c = 0; c < this.$view.children.length; c++) {\r\n            let row: HTMLTableRowElement = <HTMLTableRowElement>this.$view.children[c];\r\n            if (row instanceof HTMLTableSectionElement) {\r\n                if (row.tagName === 'THEAD') {\r\n                    headerrow = row;\r\n                    // Its a thead\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingHeader(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                } else {\r\n                    // Its a tbody\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingData(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                }\r\n            } else {\r\n                // fallback, if there are no thead and tbody...\r\n                if (counter === 0) {\r\n                    headerrow = row;\r\n                    this.parsingHeader(row);\r\n                } else {\r\n                    this.parsingData(row);\r\n                }\r\n            }\r\n            counter++;\r\n        }\r\n        if (!headerrow || !this.$headersection) {\r\n            if (!this.$headersection) {\r\n                // find eventually existing thead\r\n                let header = this.$view.getElementsByTagName('thead');\r\n                if (header.length === 0) {\r\n                    this.$headersection = document.createElement('thead');\r\n                    this.$view.appendChild(this.$headersection);\r\n                } else {\r\n                    // take first thead element\r\n                    this.$headersection = <HTMLTableSectionElement>header.item(0);\r\n                }\r\n            }\r\n            if (!headerrow) {\r\n                headerrow = document.createElement('tr');\r\n                this.$headersection.appendChild(headerrow);\r\n            }\r\n        }\r\n\r\n        if (data['columns']) {\r\n            // It is a json must add all things and generate HTML\r\n            for (let i in data['columns']) {\r\n                if (data['columns'].hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                let col = this.parseData(data['columns'][i]);\r\n                this.addHeaderInfo(col);\r\n                this.columns.push(col);\r\n                headerrow.appendChild(col.$element);\r\n            }\r\n            this.tableOption = document.createElement('th');\r\n            this.tableOption.classList.add('tableOption');\r\n            headerrow.appendChild(this.tableOption);\r\n            let context: HTMLElement = this.addOptionItem(null, this.tableOption, true);\r\n            let contentChild: HTMLElement = this.addOptionItem('show', context, true);\r\n            // let simpleLink: HTMLElement = this.addOptionItem('show', contentChild, false);\r\n            this.addOptionItem('show', contentChild, false);\r\n        }\r\n        this.registerEvents(['mousemove', 'mousedown', 'mouseup', 'resize', 'dragstart', 'dragover', 'drop', 'dragend']);\r\n\r\n        // Check for SearchBar\r\n        // if(data[\"searchproperty\"]){\r\n        // Create Full Row\r\n        let searchBar = document.createElement('tr');\r\n        let cell = document.createElement('td');\r\n        cell.setAttribute('colspan', '' + (this.columns.length));\r\n        searchBar.appendChild(cell);\r\n\r\n        let search = document.createElement('input');\r\n        search.className = 'search';\r\n        let that = this;\r\n        search.addEventListener('keyup', function (evt) {\r\n            that.search(evt.target['value']);\r\n        });\r\n\r\n        cell.appendChild(search);\r\n        if (this.resultColumn) {\r\n            if (this.resultColumn.indexOf('#') !== 0) {\r\n                this.countElement = document.createElement('div');\r\n                searchBar.appendChild(this.countElement);\r\n            } else {\r\n                for (let z: number = 0; z < this.$headersection.children.length; z++) {\r\n                    if (this.$headersection.children[z].innerHTML === this.resultColumn) {\r\n                        this.countColumn = <HTMLElement> this.$headersection.children[z];\r\n                        this.countColumnPos = z;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        let first = this.$headersection.children.item(0);\r\n        this.$headersection.insertBefore(searchBar, first);\r\n\r\n        this.updateElement(this.property, null);\r\n\r\n        // now update those elements, that were not loaded currently\r\n    }\r\n\r\n    public tableEvent(type: string, e: Event) {\r\n        let button: number = 0;\r\n        let eventX: number = 0;\r\n        if (e instanceof MouseEvent) {\r\n            button = e.buttons;\r\n            eventX = e.pageX;\r\n        }\r\n        if (type === 'mouseup') {\r\n            this.moveElement = null;\r\n        } else if (type === 'mousedown' || type === 'resize') {\r\n            // End to Resize\r\n            this.moveElement = null;\r\n            if (button === 1) {\r\n                let c: number;\r\n                for (c = 0; c < this.columns.length; c++) {\r\n                    if (this.columns[c].$resize === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = false;\r\n                        break;\r\n                    } else if (this.columns[c].$element === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = true;\r\n                    }\r\n                }\r\n                this.moveTimeStamp = e.timeStamp;\r\n                this.moveX = eventX;\r\n            } else {\r\n                this.moveTimeStamp = 0;\r\n            }\r\n        } else if (type === 'mousemove') {\r\n            if (button === 1 && this.moveElement) {\r\n                if (this.moveTimeStamp && e.timeStamp - this.moveTimeStamp < 2000) {\r\n                    if (this.isDrag) {\r\n                        // FIXME\r\n                    } else {\r\n                        let x = eventX - this.moveX;\r\n                        let width = this.moveElement.$element.offsetWidth;\r\n                        this.moveElement.$element.width = '' + (width + x);\r\n                        e.stopPropagation();\r\n                    }\r\n                }\r\n                this.moveX = eventX;\r\n                this.moveTimeStamp = e.timeStamp;\r\n            }\r\n        } else if (this.isDrag) {\r\n            this.columnDragEvent(type, <DragEvent> e);\r\n        }\r\n    }\r\n\r\n    public parsingHeader(row: HTMLTableRowElement) {\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let column: HTMLTableHeaderCellElement = <HTMLTableHeaderCellElement>row.children[i];\r\n            let id = column.innerHTML.trim();\r\n            let col: Column = null;\r\n            for (let c in this.columns) {\r\n                if (this.columns.hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                if (this.columns[c].label === id) {\r\n                    col = this.columns[c];\r\n                    col.$element = column;\r\n                    break;\r\n                }\r\n            }\r\n            if (col === null) {\r\n                col = new Column();\r\n                col.label = id;\r\n                col.attribute = column.getAttribute('attribute');\r\n                col.$element = column;\r\n                this.columns.push(col);\r\n            }\r\n            this.addHeaderInfo(col);\r\n        }\r\n    }\r\n\r\n    public parsingData(row: HTMLTableRowElement) {\r\n        let id = row.getAttribute('id');\r\n        let item: Data = this.$owner.getItem(id);\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let cell: HTMLTableCellElement = <HTMLTableCellElement>row.children[i];\r\n            let colAttribute = this.columns[i].attribute;\r\n            if (colAttribute.indexOf('\\.') < 0) {\r\n                item[colAttribute] = cell.innerHTML.trim();\r\n            }\r\n        }\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: Object, newValue: Object) {\r\n        if (entity) {\r\n            // Check for Show\r\n            if (this.property && !entity.hasProperty(property)) {\r\n                return;\r\n            }\r\n        }\r\n        if (entity.id === undefined) {\r\n            return;\r\n        }\r\n        let item: BridgeElement = <BridgeElement>this.itemsIds[entity.id];\r\n        let row: HTMLTableRowElement;\r\n        if (!item) {\r\n            item = new BridgeElement(entity);\r\n            this.items.push(item);\r\n            this.itemsIds[entity.id] = item;\r\n        }\r\n        row = this.cells[entity.id];\r\n        if (row) {\r\n            item.gui = row;\r\n        }\r\n        if (this.searching(item) === false) {\r\n            return;\r\n        }\r\n        let cell;\r\n        let showItem = false;\r\n\r\n        if (!row) {\r\n            showItem = true;\r\n            row = document.createElement('tr');\r\n            let count = this.columns.length;\r\n            for (let i = 0; i < count; i++) {\r\n                cell = document.createElement('td');\r\n                row.appendChild(cell);\r\n            }\r\n            this.cells[entity.id] = row;\r\n            item.gui = row;\r\n        }\r\n        for (let c: number = 0; c < this.columns.length; c++) {\r\n            let name = this.columns[c].attribute;\r\n            if (name === property) {\r\n                cell = row.children[c];\r\n                cell.innerHTML = <string>newValue;\r\n            }\r\n        }\r\n        if (showItem) {\r\n            this.showItem(item, true);\r\n        }\r\n        // super.propertyChange(entity, property, newValue, oldValue);\r\n    }\r\n\r\n    public sort(column: Column) {\r\n        if (this.sortColumn === column) {\r\n            if (this.direction === 1) {\r\n                this.direction = -1;\r\n                column.$element.classList.remove('asc');\r\n                column.$element.classList.add('desc');\r\n            } else {\r\n                this.direction = 1;\r\n                column.$element.classList.remove('desc');\r\n                column.$element.classList.add('asc');\r\n            }\r\n        } else {\r\n            if (this.sortColumn !== null) {\r\n                this.sortColumn.$element.classList.remove('desc');\r\n                this.sortColumn.$element.classList.remove('asc');\r\n            }\r\n            this.sortColumn = column;\r\n            this.sortColumn.$element.classList.add('asc');\r\n            this.direction = 1;\r\n        }\r\n        let that = this;\r\n        let sort = function (a: BridgeElement, b: BridgeElement) {\r\n            return that.sorting(a, b);\r\n        };\r\n        this.showedItems.sort(sort);\r\n        let len: number = this.showedItems.length;\r\n        let body = this.$bodysection;\r\n        let i = 0;\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            if (i !== Table.indexOfChild(item)) {\r\n                break;\r\n            }\r\n            i = i + 1;\r\n        }\r\n        while (body.children.length > i) {\r\n            body.removeChild(body.children.item(body.children.length - 1));\r\n        }\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            body.appendChild(item.gui);\r\n            i = i + 1;\r\n        }\r\n\r\n        //      body.removeChild(item.gui);\r\n        //      body.remove\r\n    }\r\n\r\n    public sorting(a: BridgeElement, b: BridgeElement): number {\r\n        let path: string[] = this.sortColumn.attribute.split('.');\r\n        let itemA = a.model.prop;\r\n        let itemB = b.model.prop;\r\n        let check = this.sortColumn.attribute;\r\n        for (let p = 0; p < path.length; p++) {\r\n            check = path[p];\r\n            if (itemA[check]) {\r\n                itemA = itemA[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n            if (itemB[check]) {\r\n                itemB = itemB[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n        if (itemA !== itemB) {\r\n            if (this.direction === 1) {\r\n                return (itemA < itemB) ? -1 : 1;\r\n            }\r\n            return (itemA < itemB) ? 1 : -1;\r\n\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    // Searching\r\n    public search(origSearchText: string): void {\r\n        if (!origSearchText) {\r\n            origSearchText = '';\r\n        }\r\n        let searchText: string = origSearchText.trim().toLowerCase();\r\n        if (searchText === this.lastSearchText && searchText !== '') {\r\n            return; // <==== nothing to be done\r\n        }\r\n        let oldSearch: string = this.lastSearchText;\r\n        this.lastSearchText = searchText;\r\n\r\n        this.parseSearchArray();\r\n        if (searchText !== '' && oldSearch !== null && searchText.indexOf(oldSearch) >= 0 && searchText.indexOf('|') < 0) {\r\n            this.searchArray(this.showedItems);\r\n        } else {\r\n            this.searchSet(this.items);\r\n        }\r\n        this.refreshCounter();\r\n    }\r\n\r\n    public refreshCounter() {\r\n        if (this.countColumn) {\r\n            this.countColumn.innerHTML = this.columns[this.countColumnPos].label + ' (' + this.showedItems.length + ')';\r\n        }\r\n        // var countElement = document.getElementById('talkCount');\r\n        //  if (countElement) {\r\n        //     var txt = (this.showedItems.size() > 0 && searchText.length > 0 ) ? this.options.TEXT_SEARCHLIST : this.options.TEXT_SEARCHFULLLIST;\r\n        //     countElement.innerHTML = txt.replace(\"%LEN%\", this.root['children'].length).replace(\"%COUNT%\", this.showedItems.size()).replace(\"%SEARCH%\", origSearchText);\r\n        // }\r\n        // if (this.countColumn) {\r\n        //     this.countColu1mn.innerHTML = this.countColumn[\"label\"] + \" (\" + this.showedItems.size() + \")\";\r\n        // }\r\n    }\r\n\r\n    public parseSearchArray() {\r\n        let pos: number = 0;\r\n        let split: Array<string> = [];\r\n        let quote: boolean = false;\r\n        for (let i: number = 0; i < this.lastSearchText.length; i++) {\r\n            if ((this.lastSearchText.charAt(i) === ' ') && !quote) {\r\n                let txt = this.lastSearchText.substring(pos, i).trim();\r\n                if (txt.length > 0) {\r\n                    split.push(txt);\r\n                }\r\n                pos = i + 1;\r\n            } else if (this.lastSearchText.charAt(i) === '\\\"') {\r\n                if (quote) {\r\n                    let txt = this.lastSearchText.substring(pos, i).trim();\r\n                    if (txt.length > 0) {\r\n                        split.push(txt);\r\n                    }\r\n                    pos = i + 1;\r\n                } else {\r\n                    pos = i + 1;\r\n                }\r\n                quote = !quote;\r\n            }\r\n        }\r\n        if (pos < this.lastSearchText.length) {\r\n            split.push(this.lastSearchText.substring(pos, this.lastSearchText.length).trim());\r\n        }\r\n        this.searchText = split;\r\n        return split;\r\n    }\r\n\r\n    public searchArray(root: Array<BridgeElement>) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let i: number = 0; i < root.length; i++) {\r\n            let item: BridgeElement = root[i];\r\n            this.showItem(item, this.searching(item));\r\n        }\r\n    }\r\n\r\n    public searchSet(root: BridgeElement[]) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let item of root) {\r\n            let child: BridgeElement = <BridgeElement>item;\r\n            this.showItem(child, this.searching(child));\r\n        }\r\n    }\r\n\r\n    public showItem(item: BridgeElement, visible: boolean) {\r\n        if (visible) {\r\n            this.showedItems.push(item);\r\n            this.$bodysection.appendChild(item.gui);\r\n        } else if (item.gui && item.gui.parentElement) {\r\n            this.$bodysection.removeChild(item.gui);\r\n        }\r\n    }\r\n\r\n    public searching(item: BridgeElement): boolean {\r\n        let fullText: string = '';\r\n        for (let i: number = 0; i < this.searchColumns.length; i++) {\r\n            fullText = fullText + ' ' + item.model.getValue(this.searchColumns[i]);\r\n        }\r\n        fullText = fullText.trim().toLowerCase();\r\n        for (let z: number = 0; z < this.searchText.length; z++) {\r\n            if ('' !== this.searchText[z]) {\r\n                let orSplit: Array<string>;\r\n                if (this.searchText[z].indexOf('|') > 0) {\r\n                    orSplit = this.searchText[z].split('|');\r\n                } else {\r\n                    orSplit = [this.searchText[z]];\r\n                }\r\n                let o: number = 0;\r\n                for (; o < orSplit.length; o++) {\r\n                    let pos: number = orSplit[o].indexOf(':');\r\n                    if (orSplit[o].indexOf('#') === 0 && pos > 1) {\r\n                        // if (searchProperties.contains(propString)) {\r\n                        let value: string = orSplit[o].substring(pos + 1);\r\n                        let column: string = orSplit[o].substring(1, pos - 1);\r\n                        let dataValue: Object = item.model.getValue(column);\r\n                        if (dataValue) {\r\n                            if (dataValue.toString().toLowerCase().indexOf(value) >= 0) {\r\n                                // Search for simple Property\r\n                                break;\r\n                            }\r\n                        }\r\n                    } else if (orSplit[o].length > 1 && orSplit[o].indexOf('-') === 0) {\r\n                        if (fullText.indexOf(orSplit[o].substring(1)) < 0) {\r\n                            break;\r\n                        }\r\n                    } else if (fullText.indexOf(orSplit[o]) >= 0) {\r\n                        // his search word is found in full text\r\n                        break;\r\n                    }\r\n                }\r\n                if (o === orSplit.length) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public getColumn(): Column[] {\r\n        return this.columns;\r\n    }\r\n\r\n    public updateElement(property: string, value: string): void {\r\n        // first clear all elements inside the table:\r\n        for (let item of this.items) {\r\n            if (item instanceof BridgeElement) {\r\n                (<BridgeElement>item).model.removeListener(this);\r\n            }\r\n        }\r\n\r\n        this.items = [];\r\n        this.itemsIds = {};\r\n\r\n        // load all entitys that match the property\r\n        if (this.property !== undefined) {\r\n            let items = this.$owner.getItems();\r\n            for (let j in items) {\r\n                if (items.hasOwnProperty(j)) {\r\n                    let item = items[j];\r\n                    if (item instanceof Data) {\r\n                        if (property === j) {\r\n                            // if (property == item.property) {\r\n                            let i = new BridgeElement(<Data>item);\r\n                            this.items.push(i);\r\n                            this.itemsIds[item.id] = i;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            this.redrawAllElements();\r\n        }\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        if (this.$owner !== null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    protected redrawAllElements() {\r\n        let children: HTMLCollection = this.$bodysection.children;\r\n        // remove old children\r\n        for (let i = 0; i < children.length; i++) {\r\n            let child = children.item(i);\r\n            // remove child\r\n            this.$bodysection.removeChild(child);\r\n        }\r\n\r\n        // load new children\r\n        for (let obj of this.items) {\r\n            // register listeners\r\n            obj.model.addListener(this);\r\n            // create tr\r\n            let row = this.createRow(obj);\r\n            this.$bodysection.appendChild(row);\r\n            this.cells[obj.id] = row;\r\n        }\r\n    }\r\n\r\n    private parseData(column: any): Column {\r\n        let col = new Column();\r\n        col.label = column.label || column.id;\r\n        col.attribute = column.attribute || column.label || column.id;\r\n        col.$element = document.createElement('th');\r\n        col.$element.innerHTML = col.label;\r\n        col.$element.draggable = true;\r\n\r\n        // resize Header\r\n        col.$resize = document.createElement('div');\r\n        col.$resize.classList.add('resize');\r\n        col.$element.appendChild(col.$resize);\r\n\r\n        return col;\r\n    }\r\n\r\n    private createRow(data: BridgeElement): HTMLTableRowElement {\r\n        let tr: HTMLTableRowElement = document.createElement('tr');\r\n\r\n        for (let id of this.columns) {\r\n            let td: HTMLTableDataCellElement = document.createElement('td');\r\n            tr.appendChild(td);\r\n            td.innerHTML = data.model.getValue(id.attribute);\r\n        }\r\n        return tr;\r\n    }\r\n\r\n    private addHeaderInfo(col: Column) {\r\n        let element: HTMLTableCellElement = col.$element;\r\n        let that = this;\r\n        element.classList.add('sort');\r\n        element.addEventListener('click',\r\n            function () {\r\n                that.sort(col);\r\n            },\r\n            false);\r\n    }\r\n\r\n    private columnDragEvent(type: string, e: DragEvent) {\r\n        if (type === 'dragstart') {\r\n            // Target (this) element is the source node.\r\n            this.moveElement.$element.style.opacity = '0.4';\r\n            e.dataTransfer.effectAllowed = 'move';\r\n            e.dataTransfer.setData('text/json', JSON.stringify(Util.toJson(this.moveElement)));\r\n        } else if (type === 'dragenter') {\r\n            // TO Nothing\r\n        } else if (type === 'dragleave') {\r\n            this.moveElement.$element.classList.remove('over');\r\n        } else if (type === 'dragover') {\r\n            if (e.preventDefault) {\r\n                e.preventDefault(); // Necessary. Allows us to drop.\r\n            }\r\n            for (let c = 0; c < this.columns.length; c++) {\r\n                if (this.columns[c].$element === e.target) {\r\n                    this.dragColumn = this.columns[c];\r\n                    this.dragPos = c;\r\n                    this.columns[c].$element.classList.add('over');\r\n                } else {\r\n                    this.columns[c].$element.classList.remove('over');\r\n                }\r\n            }\r\n            if (e.target === this.tableOption) {\r\n                this.tableOption.classList.add('over');\r\n                this.dragPos = this.columns.length;\r\n            } else {\r\n                this.tableOption.classList.remove('over');\r\n            }\r\n            e.dataTransfer.dropEffect = 'move';  // See the section on the DataTransfer object.\r\n        } else if (type === 'drop') {\r\n            // this / e.target is current target element.\r\n            if (e.stopPropagation) {\r\n                e.stopPropagation(); // stops the browser from redirecting.\r\n            }\r\n            if (this.movePos === this.dragPos) {\r\n                return;\r\n            }\r\n            // movePos -> dragPos\r\n            // See the section on the DataTransfer object.\r\n            // DataModel\r\n            this.columns.splice(this.movePos, 1);\r\n            if (this.movePos >= this.dragPos) {\r\n                this.columns.splice(this.dragPos, 0, this.moveElement);\r\n            } else {\r\n                this.columns.splice(this.dragPos - 1, 0, this.moveElement);\r\n            }\r\n\r\n            // Header Line\r\n            let line: HTMLElement = this.moveElement.$element.parentElement;\r\n            line.removeChild(this.moveElement.$element);\r\n            if (this.dragPos < this.columns.length) {\r\n                line.insertBefore(this.moveElement.$element, this.dragColumn.$element);\r\n            } else {\r\n                line.insertBefore(this.moveElement.$element, this.tableOption);\r\n            }\r\n\r\n            let oldElement: Element;\r\n            let newElement: Element;\r\n\r\n            // Now all Childs\r\n            for (let i = 0; i < this.$bodysection.children.length; i++) {\r\n                // Each line\r\n                line = <HTMLElement>this.$bodysection.children.item(i);\r\n                oldElement = line.children.item(this.movePos);\r\n                newElement = line.children.item(this.dragPos);\r\n                line.removeChild(oldElement);\r\n                line.insertBefore(oldElement, newElement);\r\n            }\r\n        } else if (type === 'dragend') {\r\n            // this/e.target is the source node.\r\n            this.moveElement.$element.style.opacity = '1';\r\n            for (let i = 0; i < this.columns.length; i++) {\r\n                this.columns[i].$element.classList.remove('over');\r\n            }\r\n            this.tableOption.classList.remove('over');\r\n        }\r\n    }\r\n\r\n    private addOptionItem(label: string, parent: HTMLElement, sub: boolean): HTMLElement {\r\n        let labelControl;\r\n        if (label) {\r\n            labelControl = document.createElement('a');\r\n            labelControl.appendChild(document.createTextNode(label));\r\n            labelControl.href = 'javascript:void(0);';\r\n            parent.appendChild(labelControl);\r\n        }\r\n        if (sub) {\r\n            let context = document.createElement('div');\r\n            context.classList.add('dropdown-content');\r\n            context.style.setProperty('position', 'absolute');\r\n            parent.appendChild(context);\r\n\r\n            /* When the user clicks on the button,\r\n             toggle between hiding and showing the dropdown content */\r\n            parent.addEventListener(\r\n                'click',\r\n                function () {\r\n                    context.classList.toggle('show');\r\n                },\r\n                false);\r\n            return context;\r\n        }\r\n        return labelControl;\r\n    }\r\n\r\n    private registerEvents(events: string[]) {\r\n        let that = this;\r\n        for (let i = 0; i < events.length; i++) {\r\n            this.$view.addEventListener(events[i], function (evt) {\r\n                return that.tableEvent(events[i], evt);\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\nclass Column {\r\n    label: string;\r\n    attribute: string;\r\n    $element: HTMLTableHeaderCellElement;\r\n    $resize: HTMLDivElement;\r\n    visible: boolean;\r\n}\r\n","import { AutoComplete } from './AutoComplete';\r\nimport { BR } from './BR';\r\nimport { Div } from './Div';\r\nimport { Label } from './Label';\r\n\r\nexport * from './Node';\r\nexport * from './Class';\r\nexport * from './SO';\r\nexport * from './Symbol';\r\n\r\nexport * from './BR';\r\nexport * from './Button';\r\nexport * from './Div';\r\nexport * from './Form';\r\nexport * from './Input';\r\nexport * from './Label';\r\nexport * from './Table';\r\nexport * from './HTML';\r\nexport * from './Dice';\r\nexport * from './AutoComplete';\r\nexport * from './Attribute';\r\nexport * from './Method';\r\nexport * from './ClazzProperty';\r\n\r\nnew AutoComplete();\r\nnew BR();\r\nnew Div();\r\nnew Label();\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class AddNode implements EventHandler {\r\n\r\n    public MIN_SIZE_TO_ADD_NODE: number = 30;\r\n    public MIN_SIZE_TO_ADD_TEXT: number = 10;\r\n    private graph: Graph;\r\n    private svgRect: SVGSVGElement;\r\n    private svgGroupAddNode: SVGSVGElement;\r\n    private svgTextAddNode: SVGSVGElement;\r\n    private svgTextRectAddNode: SVGSVGElement;\r\n    private isRectDrawing: boolean;\r\n    private isDrawToLeft: boolean;\r\n    private isDrawToTop: boolean;\r\n    private isBigEnoughForAddNode: boolean;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(AddNode.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(AddNode.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!this.canHandle()) {\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element.id !== 'RootElement') {\r\n            return false;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element.id === 'RootElement') {\r\n                    this.start(event, element);\r\n\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mousemove':\r\n                this.drawRect(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.removeRect();\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.addNode();\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawRect(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isRectDrawing) {\r\n            return;\r\n        }\r\n\r\n        evt.stopPropagation();\r\n\r\n        let width = Util.getEventX(evt) - this.x;\r\n        let height = Util.getEventY(evt) - this.y;\r\n\r\n        // rectangle is in a negative area, drawn to upper case. not possibble with svg\r\n        if (width < 0) {\r\n            this.isDrawToLeft = true;\r\n            width *= -1;\r\n        } else {\r\n            this.isDrawToLeft = false;\r\n        }\r\n\r\n        if (height < 0) {\r\n            this.isDrawToTop = true;\r\n            height *= -1;\r\n        } else {\r\n            this.isDrawToTop = false;\r\n        }\r\n\r\n        if (width > this.MIN_SIZE_TO_ADD_NODE && height > this.MIN_SIZE_TO_ADD_NODE) {\r\n            this.isBigEnoughForAddNode = true;\r\n        } else {\r\n            this.isBigEnoughForAddNode = false;\r\n        }\r\n\r\n        this.graph.root.style.cursor = 'pointer';\r\n\r\n        // if line wasnt draw\r\n        if (!this.svgRect) {\r\n\r\n            let rectAddNode = Util.createShape({\r\n                tag: 'rect',\r\n                id: 'addNodeRect',\r\n                x: this.x,\r\n                y: this.y,\r\n                width: 1,\r\n                height: 1,\r\n                class: 'SVGAddNode'\r\n            });\r\n\r\n            let group = Util.createShape({ tag: 'g', id: 'groupAddNode' });\r\n            group.appendChild(rectAddNode);\r\n\r\n            this.graph.root.appendChild(group);\r\n            this.svgRect = rectAddNode;\r\n            this.svgGroupAddNode = group;\r\n        }\r\n        else {\r\n\r\n            let svgRectBBox = this.svgRect.getBBox();\r\n\r\n            // if rect is big enough, show text as helper\r\n            if ((svgRectBBox.width > this.MIN_SIZE_TO_ADD_TEXT\r\n                || svgRectBBox.height > this.MIN_SIZE_TO_ADD_TEXT) && !this.svgTextAddNode) {\r\n\r\n                let textAddNode = Util.createShape({\r\n                    tag: 'text',\r\n                    x: this.x,\r\n                    y: this.y - 5,\r\n                    'font-family': 'Verdana',\r\n                    'font-size': 12,\r\n                    fill: 'black'\r\n                });\r\n                textAddNode.textContent = 'Hold on and move to create a new class';\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n\r\n\r\n                // get correct size of text node\r\n                let sizeClientRect: ClientRect = textAddNode.getBoundingClientRect();\r\n\r\n                let rectBackgroundForText = Util.createShape({\r\n                    tag: 'rect',\r\n                    x: this.x,\r\n                    y: this.y - sizeClientRect.height,\r\n                    width: sizeClientRect.width,\r\n                    height: sizeClientRect.height,\r\n                    fill: '#DDD',\r\n                    'stroke-width': 0\r\n                });\r\n\r\n                this.svgTextRectAddNode = rectBackgroundForText;\r\n                this.svgTextAddNode = textAddNode;\r\n                this.svgGroupAddNode.appendChild(rectBackgroundForText);\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n            }\r\n\r\n            if (this.isDrawToLeft) {\r\n                this.svgRect.setAttributeNS(null, 'x', '' + Util.getEventX(evt));\r\n            }\r\n\r\n            if (this.isDrawToTop) {\r\n                this.svgRect.setAttributeNS(null, 'y', '' + Util.getEventY(evt));\r\n            }\r\n\r\n            // set width and height\r\n            this.svgRect.setAttributeNS(null, 'width', width.toString());\r\n            this.svgRect.setAttributeNS(null, 'height', height.toString());\r\n\r\n            // set color\r\n            if (this.isBigEnoughForAddNode) {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode-ready');\r\n\r\n                // draw text\r\n            }\r\n            else {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeRect(): void {\r\n        this.isRectDrawing = false;\r\n        this.isBigEnoughForAddNode = false;\r\n\r\n        this.graph.root.style.cursor = 'default';\r\n\r\n        if (this.svgGroupAddNode) {\r\n            this.graph.root.removeChild(this.svgGroupAddNode);\r\n            this.svgGroupAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgRect) {\r\n            this.svgRect = undefined;\r\n        }\r\n\r\n        if (this.svgTextAddNode) {\r\n            this.svgTextAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgTextRectAddNode) {\r\n            this.svgTextRectAddNode = undefined;\r\n        }\r\n    }\r\n\r\n    private addNode(): void {\r\n\r\n        if (!this.isBigEnoughForAddNode) {\r\n            this.removeRect();\r\n            return;\r\n        }\r\n\r\n        this.removeRect();\r\n        let node = this.graph.addElementWithValues('Class', { x: this.x, y: this.y });\r\n        this.graph.drawElement(node);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isRectDrawing) {\r\n            return;\r\n        }\r\n        this.isRectDrawing = true;\r\n\r\n        this.x = Util.getEventX(evt);\r\n        this.y = Util.getEventY(evt);\r\n    }\r\n\r\n}\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement, Point } from '../elements/BaseElements';\r\nimport { GraphModel } from '../elements/Model';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Control } from '../Control';\r\nimport { Util } from '../util';\r\n\r\nexport class Drag implements EventHandler {\r\n\r\n    private element: DiagramElement;\r\n    private svgElement: SVGSVGElement;\r\n    private dragging = false;\r\n    private reinsert = false;\r\n    private mouseOffset = new Point();\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        if (!this.canHandle()) {\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if ((!this.dragging) && (element.id !== 'RootElement')) {\r\n                    this.element = element;\r\n                    this.svgElement = <SVGSVGElement>element.$view;\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mouseup':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n\r\n                break;\r\n            case 'mousemove':\r\n                if (this.dragging) {\r\n                    this.drag(event, element);\r\n                }\r\n                break;\r\n            case 'mouseleave':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Drag.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Drag.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private reset() {\r\n        this.dragging = false;\r\n        this.svgElement.style.cursor = 'pointer';\r\n\r\n        /*  WORKAROUND\r\n            Chrome got problem with the Node.appendChild() method.\r\n            Sometimes it works, sometimes not.\r\n            So the background is, in the drag method will the current element be appended\r\n            to front of the svg root.\r\n            If this happend, the click event won't fire.\r\n            So it will be fired manually.\r\n            This problem occurs only in chrome.\r\n        */\r\n        if (Util.isChrome()) {\r\n            let clickEvt = Util.createCustomEvent('click');\r\n            this.svgElement.dispatchEvent(clickEvt);\r\n        }\r\n    }\r\n\r\n    private start(evt: Event | any, element: Control) {\r\n\r\n        this.dragging = true;\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n        this.reinsert = true;\r\n\r\n        this.svgElement.style.cursor = 'move';\r\n    }\r\n\r\n    private drag(evt: Event | any, element: DiagramElement) {\r\n\r\n        if (this.reinsert) {\r\n            if (this.element.id !== 'RootElement') {\r\n                // nesseccary to set the dragged object on top of svg children\r\n                this.graph.root.appendChild(this.svgElement);\r\n            }\r\n\r\n            let dragEvent = Util.createCustomEvent('drag');\r\n            element.$view.dispatchEvent(dragEvent);\r\n        }\r\n        this.reinsert = false;\r\n\r\n        evt.stopPropagation();\r\n\r\n        const translation = this.svgElement.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        const sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        const transX = sx + evt.clientX - this.mouseOffset.x;\r\n        const transY = sy + evt.clientY - this.mouseOffset.y;\r\n        this.svgElement.setAttributeNS(null, 'transform', 'translate(' + transX + ' ' + transY + ')');\r\n        this.element.getPos().addNum(transX - sx, transY - sy);\r\n\r\n        if (this.element instanceof Node) {\r\n            (<Node>this.element).redrawEdges();\r\n        }\r\n\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n\r\n\r\n        // resize svg root\r\n        let maxX = this.element.getPos().x + this.element.getSize().x;\r\n        let maxY = this.element.getPos().y + this.element.getSize().y;\r\n\r\n        let domRectRoot = this.graph.root.getBoundingClientRect();\r\n        if(!domRectRoot){\r\n            return;\r\n        }\r\n\r\n        if(maxX > domRectRoot.width){\r\n            this.graph.root.setAttributeNS(null, 'width', '' + maxX);\r\n        }\r\n        \r\n        if(maxY > domRectRoot.height){\r\n            this.graph.root.setAttributeNS(null, 'height', '' + maxY);\r\n        }\r\n    }\r\n}\r\n","import PropertyChangeSupport from '../PropertyChangeSupport';\r\nimport Data from '../Data';\r\nimport {Adapter} from '../Adapter';\r\nimport ClazzProperty from '../elements/nodes/ClazzProperty';\r\n\r\nexport class GraphListener implements PropertyChangeSupport {\r\n    private $owner: ClazzProperty;\r\n\r\n    constructor(owner: ClazzProperty) {\r\n        this.$owner = owner;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        let adapter = this.$owner.getRoot().getAdapter();\r\n        if (adapter) {\r\n            // messages.add(\"{\\\"class\\\":\\\"de.uniks.networkparser.test.model.House\\\",\\\"id\\\":\\\"H1\\\",\\\"rem\\\":{\\\"floor\\\":4},\\\"upd\\\":{\\\"floor\\\":42}}\");\r\n            let myId =  this.$owner.$owner.getId();\r\n            if (myId && myId.length > 0) {\r\n                let pos = myId.indexOf(':');\r\n                if (pos > 0) {\r\n                    myId = myId.substring(0, pos).trim();\r\n                }\r\n            }\r\n            let myName = this.$owner.getName();\r\n            let remJson = {};\r\n            remJson[myName] = oldValue;\r\n            let updJson = {};\r\n            updJson[myName] = newValue;\r\n            let json = {};\r\n            json['id'] = myId;\r\n            json['rem'] = remJson;\r\n            json['upd'] = updJson;\r\n            let message = JSON.stringify(json);\r\n            (<Adapter> adapter).update(message);\r\n        }\r\n    }\r\n}\r\n","import {Graph} from '../elements/';\r\nimport {EventHandler, EventBus} from '../EventBus';\r\nimport {DiagramElement} from '../elements/';\r\nimport {Util} from '../util';\r\n\r\nexport class ImportFile implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(ImportFile.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(ImportFile.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        let type: string = typeof event;\r\n        if (type !== 'DragEvent') {\r\n            return false;\r\n        }\r\n        let evt: DragEvent = <DragEvent>event;\r\n        if (evt.type === 'dragover') {\r\n            this.handleDragOver(evt);\r\n        } else if (evt.type === 'dragleave') {\r\n            if (this.graph.$view !== evt.target) {\r\n                return false;\r\n            }\r\n            this.setBoardStyle('dragleave');\r\n        } else if (evt.type === 'drop') {\r\n            this.handleLoadFile(evt);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public setBoardStyle(typ: string): boolean {\r\n        let b = this.graph.$view;\r\n        Util.removeClass(b, 'Error');\r\n        Util.removeClass(b, 'Ok');\r\n        Util.removeClass(b, 'Add');\r\n        if (typ === 'dragleave') {\r\n            if (b['errorText']) {\r\n                b.removeChild(b['errorText']);\r\n                b['errorText'] = null;\r\n            }\r\n            return true;\r\n        }\r\n        Util.addClass(b, typ);\r\n        if (typ === 'Error') {\r\n            if (!b['errorText']) {\r\n                b['errorText'] = Util.create({tag: 'div', style: 'margin-top: 30%', value: 'NO TEXTFILE'});\r\n                b.appendChild(b['errorText']);\r\n            }\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private handleLoadFile(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n\r\n        let files = evt.dataTransfer.files; // FileList object.\r\n\r\n        if (files.length > 1) {\r\n            evt.dataTransfer.dropEffect = 'none';\r\n            return;\r\n        }\r\n\r\n        // files is a FileList of File objects. List some properties.\r\n        let reader  = new FileReader();\r\n        let output = [];\r\n        let htmlResult = '';\r\n        let that = this;\r\n        for (let i = 0, f; f = files[i]; i++) {\r\n            reader.onload = function(event) {\r\n                htmlResult = event.target['result'];\r\n                console.log('fileContent: ' + htmlResult);\r\n\r\n                // CHANGE TO INTERNAL OBJECT\r\n                if (that.graph) {\r\n                    that.graph.import(htmlResult);\r\n                }\r\n            };\r\n            reader.readAsText(f);\r\n        }\r\n        this.setBoardStyle('dragleave');\r\n    }\r\n\r\n    private handleDragOver(evt: DragEvent): void {\r\n        let error: boolean = true, n: string, f;\r\n        let files = evt.dataTransfer.files;\r\n        // process all File objects\r\n        if (files && files.length > 0) {\r\n            for (let i: number = 0; i < files.length; i += 1) {\r\n                f = files[i];\r\n                if (f.type.indexOf('text') === 0) {\r\n                    error = false;\r\n                } else if (f.type === '') {\r\n                    n = f.name.toLowerCase();\r\n                    if (n.indexOf('json', n.length - 4) !== -1) {\r\n                        error = false;\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            let items = evt.dataTransfer.items;\r\n            if (items && items.length > 0) {\r\n                for (let z = 0; z < items.length; z ++) {\r\n                    if (items[z].type === '' || items[z].type === 'text/plain') {\r\n                        error = false;\r\n                    }\r\n                }\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.\r\n        if (error) {\r\n            this.dragStyler(evt, 'Error');\r\n        } else if (evt.ctrlKey) {\r\n            this.dragStyler(evt, 'Add');\r\n        } else {\r\n            this.dragStyler(evt, 'Ok');\r\n        }\r\n        /* //evt.target['className'] += ' diagramLoadFile';\r\n        '//console.log('handDragOver');*/\r\n    }\r\n\r\n    private dragStyler(event: Event, typ: string) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n        this.setBoardStyle(typ);\r\n    }\r\n\r\n    private handleDragLeave(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n        evt.dataTransfer.dropEffect = 'link'; // Explicitly show this is a copy.\r\n        evt.target['className'] = 'diagram';\r\n        console.log('handDragLeave');\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Class } from '../elements/nodes/Class';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Association } from '../elements/index';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class NewEdge implements EventHandler {\r\n    private graph: Graph;\r\n    private svgLine: SVGSVGElement;\r\n    private isEdgeDrawing: boolean;\r\n    private sourceNode: Node;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    private lastTargetNode: Node;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(NewEdge.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(NewEdge.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!((<KeyboardEvent>event).ctrlKey || EventBus.isHandlerActiveOrFree('NewEdge', true))) {\r\n            this.removeLine();\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element instanceof Node) {\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n\r\n            case 'mousemove':\r\n                this.drawEdge(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.setNewEdgeToNode(event);\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default: break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawEdge(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        let lineToX = Util.getEventX(evt);\r\n        let lineToy = Util.getEventY(evt);\r\n\r\n        let path = `M${this.x} ${this.y} L${lineToX} ${lineToy}`;\r\n        // if line wasnt draw\r\n        if (!this.svgLine) {\r\n\r\n            let attr = {\r\n                tag: 'path',\r\n                id: 'newEdgePath',\r\n                d: path,\r\n                class: 'SVGEdge'\r\n            };\r\n\r\n            let shape = Util.createShape(attr);\r\n            this.svgLine = shape;\r\n\r\n            this.graph.root.appendChild(shape);\r\n            this.graph.root.appendChild(this.sourceNode.$view);\r\n        }\r\n        else {\r\n\r\n            // set new L path\r\n            this.svgLine.setAttributeNS(null, 'd', path);\r\n\r\n            // get node from position\r\n            let targetNode = this.graph.$graphModel.getNodeByPosition(Util.getEventX(evt), Util.getEventY(evt));\r\n\r\n            // if some targetnode is available, so highlight the node\r\n            if (targetNode) {\r\n\r\n                // reset the last one\r\n                if (this.lastTargetNode && this.lastTargetNode.id !== targetNode.id) {\r\n                    this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n                }\r\n\r\n                this.lastTargetNode = targetNode;\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz-drawedge');\r\n            }\r\n            else if (this.lastTargetNode) {\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeLine(): void {\r\n        this.isEdgeDrawing = false;\r\n\r\n        if (this.svgLine) {\r\n            this.graph.root.removeChild(this.svgLine);\r\n            this.svgLine = null;\r\n        }\r\n\r\n        if (this.lastTargetNode) {\r\n            this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n        }\r\n    }\r\n\r\n    private setNewEdgeToNode(event: Event | any): void {\r\n        // get node from position\r\n        let targetNode = this.graph.$graphModel\r\n            .getNodeByPosition(Util.getEventX(event), Util.getEventY(event));\r\n\r\n        if (!targetNode) {\r\n            this.removeLine();\r\n\r\n            return;\r\n        }\r\n\r\n        this.removeLine();\r\n        let edgeType = this.sourceNode.$defaulEdgeType || 'Association';\r\n\r\n        let jsonData = {\r\n            type: edgeType,\r\n            source: this.sourceNode.id,\r\n            target: targetNode.id\r\n        };\r\n\r\n        let newEdge = this.graph.$graphModel.addEdge(<any>jsonData, true);\r\n        this.graph.drawElement(newEdge);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        this.isEdgeDrawing = true;\r\n        this.sourceNode = element as Class;\r\n\r\n        this.x = this.sourceNode.getPos().x + (this.sourceNode.getSize().x / 2);\r\n        this.y = this.sourceNode.getPos().y + (this.sourceNode.getSize().y / 2);\r\n\r\n        // TODO: get this into util or select\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Node } from '../elements/nodes';\r\nimport { Association } from '../elements/edges';\r\nimport { Util } from '../util';\r\nimport { SymbolLibary } from '../elements/nodes/Symbol';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\nimport Attribute from '../elements/nodes/Attribute';\r\n\r\nexport class Select implements EventHandler {\r\n\r\n    private deleteShape: SVGSVGElement;\r\n    private addEdgeShape: SVGSVGElement;\r\n    private copyNodeShape: SVGSVGElement;\r\n    private graph: Graph;\r\n    private padding = 5;\r\n\r\n    private lastSelectedNode: Element;\r\n    private lastSelectedEdge: Element;\r\n\r\n    private isDragged: boolean;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.deleteShape = SymbolLibary.drawSVG({ type: 'Basket', background: true, id: 'trashcan', tooltip: 'Delete class' });\r\n        this.copyNodeShape = SymbolLibary.drawSVG({ type: 'Copynode', background: true, id: 'copyNode', tooltip: 'Copy class' });\r\n        this.addEdgeShape = SymbolLibary.drawSVG({ type: 'Edgeicon', background: true, id: 'addEdge', tooltip: 'Click and drag to connect this class' });\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        let x = Util.getEventX(event);\r\n        let y = Util.getEventY(event);\r\n\r\n        event.stopPropagation();\r\n        if (event.type === 'drag') {\r\n            this.isDragged = true;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            if (element instanceof Node) {\r\n                this.lastSelectedNode = <Element>element.$view;\r\n            }\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n        }\r\n\r\n        if (event.target['id'] === 'background' || element === this.graph.$graphModel) {\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let e = <Node>element;\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.graph.root.appendChild(this.addEdgeShape);\r\n            this.graph.root.appendChild(this.copyNodeShape);\r\n            this.graph.root.appendChild(element.$view);\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'visible');\r\n\r\n            let x = (e.getPos().x + e.getSize().x) + 5;\r\n            let y = e.getPos().y;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y + this.padding})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.copyNodeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 40 + this.padding})`);\r\n            this.copyNodeShape.onclick = (evt) => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let copyClass = (element).copy();\r\n                copyClass.withPos(nextFreePosition.x, nextFreePosition.y);\r\n                this.graph.drawElement(copyClass);\r\n            };\r\n\r\n            this.addEdgeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 80 + this.padding})`);\r\n            this.addEdgeShape.onmousedown = function () {\r\n                EventBus.setActiveHandler('NewEdge');\r\n                element.$view.dispatchEvent(Util.createCustomEvent('mousedown'));\r\n            };\r\n        }\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let clazz = <Node>element;\r\n\r\n            if (Util.isChrome()) {\r\n                if (this.lastSelectedNode && element.id === this.lastSelectedNode.id && !this.isDragged) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            this.isDragged = false;\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            this.lastSelectedNode = <Element>element.$view;\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete class');\r\n\r\n            // draw textbox to edit clazz in one line\r\n            let divInlineEdit = document.createElement('div');\r\n            divInlineEdit.id = 'inlineEdit';\r\n            divInlineEdit.style.position = 'absolute';\r\n            divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n            divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n            divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n            divInlineEdit.style.zIndex = '42';\r\n\r\n            let inputText = document.createElement('input');\r\n            inputText.type = 'text';\r\n            inputText.style.width = '100%';\r\n            inputText.placeholder = 'Add properties, edit label';\r\n\r\n            divInlineEdit.appendChild(inputText);\r\n            document.body.appendChild(divInlineEdit);\r\n\r\n            inputText.addEventListener('focusout', (evt) => {\r\n\r\n                if (Util.isChrome()) {\r\n                    // only if input is empty, remove the inline edit function\r\n                    if ((!inputText.value || inputText.value.length === 0) && (!this.lastSelectedNode || element.id !== this.lastSelectedNode.id)) {\r\n                        this.removeLastInlineEdit();\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                // only if input is empty, remove the inline edit function\r\n                if ((!inputText.value || inputText.value.length === 0)) {\r\n                    this.removeLastInlineEdit();\r\n                }\r\n            });\r\n\r\n            let g = this.graph;\r\n            let propertyTypes: string[] = ['boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'short', 'String', 'void'];\r\n            inputText.addEventListener('keydown', function (evt) {\r\n\r\n                let keyCode = (<any>evt).which;\r\n                let inputValue = <any>inputText.value;\r\n\r\n                if (Util.endsWith(inputValue, ':') && !document.getElementById('selectPropertyType')) {\r\n                    let selectType = document.createElement('select');\r\n                    selectType.id = 'selectPropertyType';\r\n                    selectType.style.width = '100%';\r\n\r\n                    for (let type of propertyTypes) {\r\n                        let selectOption = document.createElement('option');\r\n                        selectOption.value = type;\r\n                        selectOption.innerHTML = type;\r\n                        selectType.appendChild(selectOption);\r\n                    }\r\n\r\n                    selectType.addEventListener('change', function (evt) {\r\n                        let inputValueSplitted = inputValue.split(':');\r\n                        let selectedPropertyType = selectType.options[selectType.selectedIndex].value;\r\n\r\n                        if (inputValueSplitted.length >= 1) {\r\n                            inputText.value = inputValueSplitted[0].trim() + ' : ' + selectedPropertyType;\r\n                            inputText.focus();\r\n                        }\r\n                    });\r\n\r\n                    divInlineEdit.appendChild(selectType);\r\n                }\r\n                else if (!Util.includes(inputValue, ':')) {\r\n                    let selectType = document.getElementById('selectPropertyType');\r\n\r\n                    if (selectType) {\r\n                        selectType.remove();\r\n                    }\r\n                }\r\n\r\n                if (keyCode !== 13) {\r\n                    return;\r\n                }\r\n\r\n                // attribute\r\n                if ((Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) === false) {\r\n                    if (Util.includes(inputValue, ':')) {\r\n                        clazz.addAttribute(inputValue.trim());\r\n                        clazz.reDraw();\r\n                    } else if (Util.includes(inputValue, '=') ) {\r\n                        let attr: Attribute = null;\r\n                        let name = inputValue.substring(0, inputValue.indexOf('=')).trim();\r\n                        for (let child of clazz.getAttributes() ) {\r\n                            if ( name === child.getName()) {\r\n                                attr = child;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (attr) {\r\n                            attr.updateValue(inputValue.substring(inputValue.indexOf('=') + 1).trim());\r\n                        }\r\n                        clazz.reDraw();\r\n                    }\r\n                }\r\n\r\n                // method\r\n                else if (Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) {\r\n                    clazz.addMethod(inputValue.trim());\r\n                    clazz.reDraw();\r\n                }\r\n                // label\r\n                else if (inputValue.trim().split(' ').length === 1 && inputValue.trim().length > 0) {\r\n                    clazz.updateLabel(inputValue.trim());\r\n                }\r\n\r\n                // reset size\r\n                divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n                divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n                divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n\r\n                inputText.value = '';\r\n\r\n                // remove combobox to select type of property\r\n                let selectType = document.getElementById('selectPropertyType');\r\n\r\n                if (selectType) {\r\n                    selectType.remove();\r\n                }\r\n\r\n                // TODO: reload propertiespanel. not working!\r\n                // event wont dispatch\r\n                // let customEvt = Util.createCustomEvent(EventBus.RELOADPROPERTIES);\r\n                // element.$view.dispatchEvent(customEvt);\r\n            });\r\n\r\n            (<any>divInlineEdit.children[0]).focus();\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Association) {\r\n            this.graph.root.appendChild(element.$view);\r\n            this.graph.root.appendChild(element.$sNode.$view);\r\n            this.graph.root.appendChild(element.$tNode.$view);\r\n\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete edge');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            let edge = <Association>element;\r\n            this.lastSelectedEdge = edge.$view;\r\n\r\n            Util.addClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Select.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Select.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private setTooltipOfShape(shape: SVGSVGElement, tooltip: string): void {\r\n        if (!shape || !shape.hasChildNodes()) {\r\n            return;\r\n        }\r\n\r\n        let titleElement = <SVGSVGElement>shape.childNodes[0];\r\n        if (!titleElement || titleElement.tagName !== 'title') {\r\n            return;\r\n        }\r\n\r\n        titleElement.textContent = tooltip;\r\n    }\r\n\r\n    private resetLastSelectedElements() {\r\n        // reset the last one\r\n        if (this.lastSelectedNode) {\r\n            Util.removeClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.lastSelectedNode = undefined;\r\n        }\r\n\r\n        if (this.lastSelectedEdge) {\r\n            Util.removeClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n            this.lastSelectedEdge = undefined;\r\n        }\r\n\r\n        this.removeLastInlineEdit();\r\n    }\r\n\r\n    private removeLastInlineEdit(): void {\r\n        // remove last inline edit of clazz\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n\r\n            // its not supported in internet explorer\r\n            // lastInlineEdit.remove();\r\n        }\r\n    }\r\n\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\n\r\nexport class Zoom implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n    }\r\n\r\n    public handle(e: any, element: DiagramElement): boolean {\r\n        let delta = e.deltaY || e.wheelDeltaY || -e.wheelDelta;\r\n        let d = 1 + (delta / 1000);\r\n\r\n        let values = this.graph.root.getAttribute('viewBox').split(' ');\r\n        const newViewBox = `${values[0]} ${values[1]} ${parseInt(values[2]) * d} ${parseInt(values[3]) * d}`;\r\n        this.graph.root.setAttribute('viewBox', newViewBox);\r\n\r\n        e.preventDefault();\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Zoom.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Zoom.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n}\r\n","export * from './Drag';\r\nexport * from './Select';\r\nexport * from './Zoom';\r\nexport * from './NewEdge';\r\nexport * from './ImportFile';\r\nexport * from './AddNode';\r\n","import { Association } from '../elements/edges';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport Layout from './Layout';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\n\r\nexport class DagreLayout implements Layout {\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        if (!window['dagre']) {\r\n            return;\r\n        }\r\n        let model = graph.$graphModel;\r\n        let g = new window['dagre'].graphlib.Graph();\r\n\r\n        g.setGraph({ marginx: 100, marginy: 20 }).setDefaultEdgeLabel(function () {\r\n            return {};\r\n        });\r\n\r\n        for (let node of model.nodes) {\r\n            g.setNode(node.id, { width: node.getSize().x, height: node.getSize().y });\r\n        }\r\n\r\n        for (let edge of model.edges) {\r\n            g.setEdge(edge.$sNode.id, edge.$tNode.id);\r\n        }\r\n\r\n        window['dagre'].layout(g);\r\n\r\n        g.nodes().forEach(function (nodeId: string) {\r\n            for (let node of model.nodes) {\r\n                if (node.id === nodeId) {\r\n                    node.withPos(g.node(nodeId).x - g.node(nodeId).width / 2, g.node(nodeId).y - g.node(nodeId).height / 2);\r\n                }\r\n            }\r\n        });\r\n        g.edges().forEach(function (e: any) {\r\n            for (let edge of model.edges) {\r\n                if (edge.$sNode.id === e.v && edge.$tNode.id === e.w) {\r\n                    let size = g.edge(e).points.length;\r\n                    edge.clearPoints();\r\n                    for (let i = 0; i < size; i++) {\r\n                        let point: SVGPoint = g.edge(e).points[i];\r\n                        edge.addPoint(point.x, point.y);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n}\r\n","import {DiagramElement} from '../elements/BaseElements';\r\nimport Layout from './Layout';\r\nimport {Graph} from '../elements/Graph';\r\nimport {Association} from '../elements/edges/Association';\r\nimport {Node} from '../elements/nodes/Node';\r\nimport {Control} from '../Control';\r\n\r\nexport class LayoutGraphMin {\r\n    public nodes: Object = {};\r\n    public edges: Array<Object> = [];\r\n    public outEdges: Object = {};\r\n    public inEdges: Object = {};\r\n    public dummyNodes: Array<LayoutGraphNode> = [];\r\n    public dummyEdges: Object = {};\r\n    public count: number = 0;\r\n    public minRank: number = Number.POSITIVE_INFINITY;\r\n    public maxRank: number = 0;\r\n    public maxHeight: number = 0;\r\n    public maxWidth: number = 0;\r\n    public ranksep: number = 0;\r\n    public edgesLabel: Array<Object> = [];\r\n\r\n    public nodeCount(): number {\r\n        return this.count;\r\n    }\r\n\r\n    public node(id: string) {\r\n        return this.nodes[id];\r\n    }\r\n\r\n    public setNode(id: string, n: LayoutGraphNode) {\r\n        if (n && !this.nodes[id]) {\r\n            this.nodes[id] = n;\r\n            this.count = this.count + 1;\r\n        } else if (!n && this.nodes[id]) {\r\n            delete this.nodes[id];\r\n        }\r\n    }\r\n}\r\n\r\nexport class LayoutGraphNode {\r\n    public id: string;\r\n    public width: number;\r\n    public height: number;\r\n    public x: number;\r\n    public y: number;\r\n    public edgeObj: LayoutGraphEdge;\r\n    public rank: number;\r\n\r\n    constructor(id: string, width: number, height: number, x: number, y: number) {\r\n        this.id = id;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n\r\nexport class LayoutGraphEdge {\r\n    public source: string;\r\n    public target: string;\r\n}\r\n\r\n// \t\t\t\t######################################################### DagreGraph #########################################################\r\nexport class DagreLayoutMin implements Layout {\r\n    public static EDGE_KEY_DELIM = '\\x01';\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        let g, layoutNode, nodes, newEdge, edges;\r\n        let i, n, x, y, sId, tId, split = DagreLayoutMin.EDGE_KEY_DELIM;\r\n        let e: Association;\r\n\r\n        nodes = node['nodes'];\r\n        edges = node['edges'];\r\n        g = new LayoutGraphMin();\r\n\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            g.setNode(n.id, new LayoutGraphNode(n.id, n.getSize().x, n.getSize().y, n.getPos().x, n.getPos().y));\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            sId = this.getNodeId(e.$sNode);\r\n            tId = this.getNodeId(e.$tNode);\r\n            if (sId > tId) {\r\n                let tmp = tId;\r\n                tId = sId;\r\n                sId = tmp;\r\n            }\r\n            let idAB = sId + split + tId + split;\r\n            let idBA = tId + split + sId + split;\r\n            if (sId !== tId && g.edgesLabel.indexOf(idAB) < 0 && g.edgesLabel.indexOf(idBA) < 0) {\r\n                newEdge = {source: sId, target: tId, minlen: 1, weight: 1};\r\n                g.edges.push(newEdge);\r\n                g.edgesLabel.push(idAB);\r\n                // In Edges\r\n                if (!g.inEdges[tId]) {\r\n                    g.inEdges[tId] = [];\r\n                }\r\n                g.inEdges[tId].push(newEdge);\r\n\r\n                // Out Edges\r\n                if (!g.outEdges[sId]) {\r\n                    g.outEdges[sId] = [];\r\n                }\r\n                g.outEdges[sId].push(newEdge);\r\n            }\r\n        }\r\n        this.layouting(g);\r\n        // Set the layouting back\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            layoutNode = g.node(n.id);\r\n            x = n.getPos().x;\r\n            y = n.getPos().y;\r\n            if (x < 1 && y < 1) {\r\n                n.withPos(Math.ceil(layoutNode.x), Math.ceil(layoutNode.y));\r\n            }\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            // OBSOLETE method:  e.calc(graph.canvas);\r\n        }\r\n        graph.draw();\r\n    }\r\n\r\n    public getNodeId(node: Control): string {\r\n        if (node.$owner) {\r\n            return this.getNodeId(node.$owner) || node.id;\r\n        }\r\n        return node.id;\r\n    }\r\n\r\n    public layouting(g: LayoutGraphMin) {\r\n        this.longestPath(g);\r\n        this.normalizeRanks(g);\r\n        this.normalizeEdge(g);\r\n        // this.setSimpleOrder(g);\r\n        this.order(g);\r\n        g.ranksep = 25;\r\n        // remove Dummy\r\n        this.removeDummy(g);\r\n        this.position(g);\r\n    }\r\n\r\n    public setSimpleOrder(g: LayoutGraphMin) {\r\n        let i, n;\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            n.order = n.rank;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Applies heuristics to minimize edge crossings in the graph and sets the best\r\n     * order solution as an order attribute on each node.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Graph must be DAG\r\n     *    2. Graph nodes must be objects with a \"rank\" attribute\r\n     *    3. Graph edges must have the \"weight\" attribute\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Graph nodes will have an \"order\" attribute based on the results of the\r\n     *       algorithm.\r\n     */\r\n    public order(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        let visited = {};\r\n        let node, n, order, i;\r\n        for (i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (n in g.nodes) {\r\n            if (visited[n]) {\r\n                continue;\r\n            }\r\n            visited[n] = true;\r\n            node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank].push(n);\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                g.nodes[layering[order][n]].order = parseInt(n);\r\n            }\r\n        }\r\n        // Fix resolve conflict\r\n        for (order in layering) {\r\n            if (layering[order].length > 1) {\r\n                for (n in layering[order]) {\r\n                    if (layering[order].hasOwnProperty(n) === false) {\r\n                        continue;\r\n                    }\r\n                    let name = layering[order][n];\r\n                    let sum = 0;\r\n                    let weight = 1;\r\n                    let edges = g.dummyEdges[name];\r\n                    if (edges) {\r\n                        for (i in edges) {\r\n                            if (edges.hasOwnProperty(i) === false) {\r\n                                continue;\r\n                            }\r\n                            let edge = edges[i];\r\n                            let nodeU = g.node(edge.target);\r\n                            sum = sum + (edge.weight * nodeU.order);\r\n                            weight = weight + edge.weight;\r\n                        }\r\n                    }\r\n                    g.node(name).barycenter = sum / weight;\r\n                    g.node(name).weight = weight;\r\n                }\r\n            } else if (layering[order].length > 0) {\r\n                for (n in layering[order]) {\r\n                    let name = layering[order][n];\r\n                    g.node(name).barycenter = 1;\r\n                    g.node(name).weight = 1;\r\n                }\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                let node = g.nodes[layering[order][n]];\r\n                node.order = parseInt(n) + node.barycenter * node.weight;\r\n                if (isNaN(node.order)) {\r\n                    console.log('ERROR');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public removeDummy(g: LayoutGraphMin) {\r\n        for (let z in g.dummyNodes) {\r\n            let node = g.dummyNodes[z];\r\n            g.setNode(node.id, null);\r\n        }\r\n        g.dummyNodes = [];\r\n        g.dummyEdges = {};\r\n    }\r\n\r\n    /*\r\n     * Breaks any long edges in the graph into short segments that span 1 layer\r\n     * each. This operation is undoable with the denormalize function.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. The input graph is a DAG.\r\n     *    2. Each node in the graph has a \"rank\" property.\r\n     *\r\n     * Post-condition:\r\n     *\r\n     *    1. All edges in the graph have a length of 1.\r\n     *    2. Dummy nodes are added where edges have been split into segments.\r\n     *    3. The graph is augmented with a \"dummyChains\" attribute which contains\r\n     *       the first dummy in each chain of dummy nodes produced.\r\n     */\r\n    public normalizeEdge(g: LayoutGraphMin): void {\r\n        let i: number = 1;\r\n        for (let id in g.edges) {\r\n            let e: LayoutGraphEdge = <LayoutGraphEdge>g.edges[id];\r\n            let v: string = e.source;\r\n            let vRank = g.node(v).rank;\r\n            const w: string = e.target;\r\n            const wRank: number = g.node(w).rank;\r\n            let name: string;\r\n\r\n            if (wRank === vRank + 1) {\r\n                continue;\r\n            }\r\n\r\n            let dummy;\r\n            for (vRank = vRank + 1; vRank < wRank; ++vRank) {\r\n                name = '_d' + e.source + e.target + (i++);\r\n                let newEdge = {source: v, target: name, minlen: 1, weight: 1};\r\n                dummy = new LayoutGraphNode(name, 0, 0, 0, 0);\r\n                dummy.edgeObj = e;\r\n                dummy.rank = vRank;\r\n                // Dummy Edges\r\n                if (!g.dummyEdges[v]) {\r\n                    g.dummyEdges[v] = [];\r\n                }\r\n                g.dummyEdges[v].push(newEdge);\r\n\r\n                g.dummyNodes.push(dummy);\r\n                g.setNode(dummy.id, dummy);\r\n                v = name;\r\n            }\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Initializes ranks for the input graph using the longest path algorithm. This\r\n     * algorithm scales well and is fast in practice, it yields rather poor\r\n     * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\r\n     * ranks wide and leaving edges longer than necessary. However, due to its\r\n     * speed, this algorithm is good for getting an initial ranking that can be fed\r\n     * into other algorithms.\r\n     *\r\n     * This algorithm does not normalize layers because it will be used by other\r\n     * algorithms in most cases. If using this algorithm directly, be sure to\r\n     * run normalize at the end.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Input graph is a DAG.\r\n     *    2. Input graph node labels can be assigned properties.\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Each node will be assign an (unnormalized) \"rank\" property.\r\n     */\r\n    public longestPath(g: LayoutGraphMin) {\r\n        let i, n, visited = [];\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            visited.push(i);\r\n            n.rank = this.findAllPaths(g, n, 0, visited);\r\n            g.minRank = Math.min(g.minRank, n.rank);\r\n        }\r\n    }\r\n\r\n    public findAllPaths(g: LayoutGraphMin, n: Node, currentCost: number, path: Array<String>) {\r\n        let min: number = 0;\r\n        let id: string;\r\n        let z: number;\r\n        let target;\r\n        if (g.outEdges[n.id]) {\r\n            for (z = 0; z < g.outEdges[n.id].length; z++) {\r\n                id = g.outEdges[n.id][z].target;\r\n                target = g.nodes[id];\r\n                if (path[id]) {\r\n                    min = Math.min(min, target.rank);\r\n                } else if (path.indexOf(id) < 0) {\r\n                    min = Math.min(min, this.findAllPaths(g, target, currentCost - 2, path));\r\n                } else {\r\n                    min = currentCost;\r\n                }\r\n            }\r\n            return min;\r\n        }\r\n        return currentCost;\r\n    }\r\n\r\n    /*\r\n     * Adjusts the ranks for all nodes in the graph such that all nodes v have\r\n     * rank(v) >= 0 and at least one node w has rank(w) = 0.\r\n     */\r\n    public normalizeRanks(g: LayoutGraphMin) {\r\n        let min = g.minRank;\r\n        let value;\r\n        g.maxRank = Number.NEGATIVE_INFINITY;\r\n        g.maxHeight = 0;\r\n        g.maxWidth = 0;\r\n        for (let i in g.nodes) {\r\n            let node = g.nodes[i];\r\n            if (node.rank !== undefined) {\r\n                node.rank -= min;\r\n                value = Math.abs(node.rank);\r\n                if (value > g.maxRank) {\r\n                    g.maxRank = value;\r\n                }\r\n                g.maxHeight = Math.max(g.maxHeight, node.height);\r\n                g.maxWidth = Math.max(g.maxWidth, node.width);\r\n            }\r\n        }\r\n    }\r\n\r\n    public position(g: LayoutGraphMin) {\r\n        this.positionY(g);\r\n        let list = this.positionX(g);\r\n        for (let i in list) {\r\n            for (let pos in list[i]) {\r\n                if (list[i].hasOwnProperty(pos) === false) {\r\n                    continue;\r\n                }\r\n                if (g.node(list[i][pos])) {\r\n                    g.node(list[i][pos]).x = parseInt(pos) * g.maxWidth;\r\n                }\r\n            }\r\n\r\n        }\r\n    }\r\n\r\n    public positionY(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        let rankSep = g.ranksep;\r\n        let prevY = 0;\r\n        for (let layer in layering) {\r\n            let maxHeight = g.maxHeight;\r\n            for (let v in layering[layer]) {\r\n                if (layering[layer].hasOwnProperty(v) === false) {\r\n                    continue;\r\n                }\r\n                let id = layering[layer][v];\r\n                g.nodes[id].y = prevY + maxHeight / 2;\r\n            }\r\n            prevY += maxHeight + rankSep;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\r\n     * function will produce a matrix with the ids of each node.\r\n     */\r\n    public buildLayerMatrix(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        for (let i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (let n in g.nodes) {\r\n            let node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank][node.order] = n;\r\n            }\r\n        }\r\n        return layering;\r\n    }\r\n\r\n    public positionX(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        return layering;\r\n    }\r\n}\r\n","import { Point } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport Layout from './Layout';\r\n\r\nexport class Random implements Layout {\r\n\r\n  public layout(graph: Graph) {\r\n\r\n    let model = graph.$graphModel;\r\n\r\n    if (model.nodes) {\r\n      for (let node of model.nodes) {\r\n        let pos: Point = node.getPos();\r\n        if (pos.x === 0 && pos.y === 0) {\r\n          let x = Util.getRandomInt(0, graph.canvasSize.width);\r\n          let y = Util.getRandomInt(0, graph.canvasSize.height);\r\n          node.withPos(x, y);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","export * from './DagreLayout';\r\nexport * from './Random';\r\nexport * from './DagreLayoutMin';\r\n\r\nimport {DagreLayout} from './DagreLayout';\r\nimport {DagreLayoutMin} from './DagreLayoutMin';\r\nimport {Random} from './Random';\r\nnew DagreLayout();\r\nnew DagreLayoutMin();\r\nnew Random();\r\n","import {VirtualKeyBoard} from './VirtualKeyBoard';\r\n\r\nexport {Point} from './elements/BaseElements';\r\nexport {Bridge, DelegateAdapter} from './Bridge';\r\nexport {Graph} from './elements/Graph';\r\nexport * from './elements/nodes';\r\nexport * from './elements/edges';\r\nexport * from './adapters';\r\nexport * from './UML';\r\nimport {Point} from './elements/BaseElements';\r\nimport {Graph} from './elements/Graph';\r\nimport {ClassEditor} from './elements/ClassEditor';\r\nimport {Bridge} from './Bridge';\r\nimport {Util} from './util';\r\nimport * as nodes  from './elements/nodes';\r\nimport * as edges from './elements/edges';\r\nimport {ScrumBoard} from './ScrumBoard';\r\n\r\nif (!window['Point']) {\r\n    window['Point'] = Point;\r\n    window['Graph'] = Graph;\r\n    window['bridge'] = new Bridge();\r\n    window['Util'] = Util;\r\n    window['Class'] = nodes.Class;\r\n    window['Association'] = edges.Association;\r\n    window['SymbolLibary'] = nodes.SymbolLibary;\r\n    window['ClassEditor'] = ClassEditor;\r\n    window['VirtualKeyBoard'] = VirtualKeyBoard;\r\n    window['ScrumBoard'] = ScrumBoard;\r\n}\r\n","'use strict';\r\nimport { CSS } from './CSS';\r\nimport { Node } from './elements/nodes/Node';\r\nimport { DiagramElement, Point } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport class Util {\r\n\r\n    public static isAutoSave: boolean;\r\n\r\n    static getRandomInt(min: number, max: number): number {\r\n        return Math.floor(Math.random() * (max - min + 1)) + min;\r\n    }\r\n\r\n    static createShape(attrs: any): SVGSVGElement {\r\n        let xmlns = attrs.xmlns || 'http://www.w3.org/2000/svg';\r\n        let shape = document.createElementNS(xmlns, attrs.tag);\r\n\r\n        for (let attr in attrs) {\r\n            if (!attrs.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr !== 'tag') {\r\n                shape.setAttribute(attr, attrs[attr]);\r\n\r\n            }\r\n        }\r\n        return <SVGSVGElement><any>shape;\r\n    }\r\n\r\n    static toPascalCase(value: string): string {\r\n        value = value.charAt(0).toUpperCase() + value.substring(1).toLowerCase();\r\n        return value;\r\n    }\r\n\r\n    static isSVG(tag: string): boolean {\r\n        let i,\r\n            list = ['svg', 'path', 'polygon', 'polyline', 'line', 'title', 'rect', 'filter', 'feGaussianBlur', 'feOffset', 'feBlend', 'linearGradient', 'stop', 'text', 'symbol', 'textPath', 'defs', 'fegaussianblur', 'feoffset', 'feblend', 'circle', 'ellipse', 'g'];\r\n        for (i = 0; i < list.length; i += 1) {\r\n            if (list[i] === tag) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    static createHTML(node: any): HTMLElement {\r\n        return <HTMLElement>this.create(node);\r\n    }\r\n    static create(node: any): Element {\r\n        let style, item, xmlns, key, tag, k;\r\n        if (document.createElementNS && (this.isSVG(node.tag) || node.xmlns)) {\r\n            if (node.xmlns) {\r\n                xmlns = node.xmlns;\r\n            } else {\r\n                xmlns = 'http://www.w3.org/2000/svg';\r\n            }\r\n            if (node.tag === 'img' && xmlns) {\r\n                item = document.createElementNS(xmlns, 'image');\r\n                item.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\r\n                item.setAttributeNS('http://www.w3.org/1999/xlink', 'href', node.src);\r\n            } else {\r\n                item = document.createElementNS(xmlns, node.tag);\r\n            }\r\n        } else {\r\n            item = document.createElement(node.tag);\r\n        }\r\n        tag = node.tag.toLowerCase();\r\n        for (key in node) {\r\n            if (!node.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            k = key.toLowerCase();\r\n            if (node[key] === null) {\r\n                continue;\r\n            }\r\n            if (k === 'tag' || k.charAt(0) === '$' || k === '$graphModel') {\r\n                continue;\r\n            }\r\n            if (k.charAt(0) === '#') {\r\n                item[k.substring(1)] = node[key];\r\n                continue;\r\n            }\r\n            if (k === 'rotate') {\r\n                item.setAttribute('transform', 'rotate(' + node[key] + ',' + node.$graphModel.x + ',' + node.$graphModel.y + ')');\r\n                continue;\r\n            }\r\n            if (k === 'value') {\r\n                if (!node[key]) {\r\n                    continue;\r\n                }\r\n                if (tag !== 'input') {\r\n                    if (tag === 'text') {// SVG\r\n                        item.appendChild(document.createTextNode(node[key]));\r\n                    } else {\r\n                        item.innerHTML = node[key];\r\n                    }\r\n                } else {\r\n                    item[key] = node[key];\r\n                }\r\n                continue;\r\n            }\r\n            if (k.indexOf('on') === 0) {\r\n                this.bind(item, k.substring(2), node[key]);\r\n                continue;\r\n            }\r\n            if (k.indexOf('-') >= 0) {\r\n                item.style[key] = node[key];\r\n            } else {\r\n                if (k === 'style' && typeof (node[key]) === 'object') {\r\n                    for (style in node[key]) {\r\n                        if (!node[key].hasOwnProperty(style)) {\r\n                            continue;\r\n                        }\r\n                        if (node[key][style]) {\r\n                            if ('transform' === style) {\r\n                                item.style.transform = node[key][style];\r\n                                item.style.msTransform = item.style.MozTransform = item.style.WebkitTransform = item.style.OTransform = node[key][style];\r\n                            } else {\r\n                                item.style[style] = node[key][style];\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    item.setAttribute(key, node[key]);\r\n                }\r\n            }\r\n        }\r\n        if (node.$parent) {\r\n            node.$parent.appendChild(item);\r\n        }\r\n        if (node.$graphModel) {\r\n            item.$graphModel = node.$graphModel;\r\n        }\r\n        return item;\r\n    }\r\n\r\n    static setSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttribute('width', value);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.setAttribute('height', value);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setAttributeSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttributeNS(null, 'width', value);\r\n        value = Util.getValue(height);\r\n        item.setAttributeNS(null, 'height', value);\r\n    }\r\n\r\n    static setStyleSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setPos(item: any, x: number, y: number): void {\r\n        if (item.x && item.x.baseVal) {\r\n            item.style.left = x + 'px';\r\n            item.style.top = y + 'px';\r\n        } else {\r\n            item.x = x;\r\n            item.y = y;\r\n        }\r\n    }\r\n\r\n    static getValue(value: string | number): number {\r\n        return parseInt(('0' + value).replace('px', ''), 10);\r\n    }\r\n\r\n    static isIE(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('.net') > -1;\r\n    }\r\n\r\n    static isEdge(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('edge') > -1;\r\n    }\r\n\r\n    static isFireFox(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n    }\r\n\r\n    static isSafari(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        return navigator.userAgent.toLowerCase().indexOf('safari') > -1 && !isEdge;\r\n    }\r\n\r\n    static isOpera(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('opera') > -1;\r\n    }\r\n\r\n    static isChrome(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        let isSafari = Util.isSafari();\r\n        return navigator.userAgent.toLowerCase().indexOf('chrome') > -1 && !isEdge && isSafari;\r\n    }\r\n\r\n    static getEventX(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetX'] : event.layerX;\r\n    }\r\n\r\n    static getEventY(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetY'] : event.layerY;\r\n    }\r\n\r\n    static getNumber(str: string): number {\r\n        return parseInt((str || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    static getStyle(styleProp: string): CSS {\r\n        let i, style, diff, current, ref, el = document.createElement('div'), css;\r\n        document.body.appendChild(el);\r\n        css = new CSS(styleProp);\r\n        ref = new CSS(styleProp, el).css;\r\n        style = window.getComputedStyle(el, null);\r\n        el.className = styleProp;\r\n        current = new CSS(styleProp, el).css;\r\n        diff = Util.getNumber(style.getPropertyValue('border-width'));\r\n        for (i in current) {\r\n            if (!current.hasOwnProperty(i)) {\r\n                continue;\r\n            }\r\n            if (i === 'width' || i === 'height') {\r\n                if (Util.getNumber(current[i]) !== 0 && Util.getNumber(current[i]) + diff * 2 !== Util.getNumber(ref[i])) {\r\n                    css.add(i, current[i]);\r\n                }\r\n            } else if (current[i] !== ref[i]) {\r\n                css.add(i, current[i]);\r\n            }\r\n        }\r\n        document.body.removeChild(el);\r\n        return css;\r\n    }\r\n\r\n    static sizeOf(item: string | any, node?: Node): ClientRect {\r\n        let board;\r\n        let rect: ClientRect;\r\n        let addBoard: boolean;\r\n        if (!item) {\r\n            return undefined;\r\n        }\r\n        if (node) {\r\n            board = node.$owner.$view;\r\n            addBoard = false;\r\n        }\r\n\r\n        if (!board) {\r\n            addBoard = true;\r\n            board = Util.createShape({ tag: 'svg', id: 'root', width: 200, height: 200 });\r\n            document.body.appendChild(board);\r\n        }\r\n        if (board.tagName === 'svg') {\r\n            if (typeof item === 'string') {\r\n                item = Util.create({ tag: 'text', $font: true, value: item });\r\n                item.setAttribute('width', '5px');\r\n            }\r\n        } else if (typeof item === 'string') {\r\n            item = document.createTextNode(item);\r\n        }\r\n        board.appendChild(item);\r\n        rect = item.getBoundingClientRect();\r\n        board.removeChild(item);\r\n\r\n        if (addBoard) {\r\n            document.body.removeChild(board);\r\n        }\r\n        return rect;\r\n    }\r\n\r\n    static getColor(style: string, defaultColor?: string) {\r\n        if (style) {\r\n            if (style.toLowerCase() === 'create') {\r\n                return '#008000';\r\n            }\r\n            if (style.toLowerCase() === 'nac') {\r\n                return '#FE3E3E';\r\n            }\r\n            if (style.indexOf('#') === 0) {\r\n                return style;\r\n            }\r\n        }\r\n        if (defaultColor) {\r\n            return defaultColor;\r\n        }\r\n        return '#000';\r\n    }\r\n\r\n    public static utf8$to$b64(str: string): string {\r\n        return window.btoa(encodeURIComponent(str));\r\n    }\r\n\r\n    public static showSVG(control: DiagramElement) {\r\n        let svg = Util.create({\r\n            tag: 'svg',\r\n            style: { left: control.getPos().x, top: control.getPos().y, position: 'absolute' }\r\n        });\r\n        let child = control.getSVG();\r\n        if (child) {\r\n            svg.appendChild(child);\r\n        }\r\n        Util.setSize(svg, control.getSize().x, control.getSize().y);\r\n        document.body.appendChild(svg);\r\n    }\r\n\r\n    public static toJson(ref: JSON | Object): Object {\r\n        let result = {};\r\n        return Util.copy(result, ref, false, false);\r\n    }\r\n\r\n    public static initControl(parent: Control, control: Control, type: string, id: string, json: JSON | Object) {\r\n        if (typeof control.init === 'function') {\r\n            control.init(parent, type, id);\r\n        }\r\n        if (typeof control.load === 'function') {\r\n            control.load(json);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * copy One Json into another\r\n     * @function\r\n     * @param ref reference Json\r\n     * @param src source Json\r\n     * @param full all attributes include privet $\r\n     * @param replace set the original reference or copy it\r\n     * @returns ref\r\n     * @name copy\r\n     */\r\n    public static copy(ref: JSON | Object, src: JSON | Object, full: boolean, replace: boolean) {\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (replace) {\r\n                        ref[i] = src[i];\r\n                        continue;\r\n                    }\r\n                    if (!ref[i]) {\r\n                        if (src[i] instanceof Array) {\r\n                            ref[i] = [];\r\n                        } else {\r\n                            ref[i] = {};\r\n                        }\r\n                    }\r\n                    Util.copy(ref[i], src[i], full, false);\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref[i] = src[i];\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    public static xmlstringify(text: string): string {\r\n        text = text.replace('<', '&lt;');\r\n        text = text.replace('>', '&gt;');\r\n        return text;\r\n    }\r\n\r\n    public static toXML(ref: JSON | Object | any, src: JSON | Object | any, full: boolean, doc: Document): any {\r\n        let name;\r\n        if (!ref) {\r\n            name = src.constructor.name;\r\n            doc = document.implementation.createDocument(null, name, null);\r\n            ref = doc.childNodes[0];\r\n        }\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (!ref.getAttribute(i)) {\r\n                        if (src[i] instanceof Array) {\r\n                            for (let c in src[i]) {\r\n                                if (!src[i].hasOwnProperty(c)) {\r\n                                    continue;\r\n                                }\r\n                                name = src[i][c].constructor.name;\r\n                                let child = doc.createElement(name);\r\n                                ref.appendChild(child);\r\n                                Util.toXML(child, src[i][c], full, doc);\r\n                            }\r\n                        } else {\r\n                            name = src[i].constructor.name;\r\n                            let child = doc.createElement(name);\r\n                            ref.appendChild(child);\r\n                            Util.toXML(child, src[i], full, doc);\r\n                        }\r\n                    } else {\r\n                        Util.toXML(ref.getAttribute(i), src[i], full, doc);\r\n                    }\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref.setAttribute(i, src[i]);\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    static Range(min: Point, max: Point, x: number, y: number) {\r\n        max.x = Math.max(max.x, x);\r\n        max.y = Math.max(max.y, y);\r\n        min.x = Math.min(min.x, x);\r\n        min.y = Math.min(min.y, y);\r\n    }\r\n\r\n    public static getPosition(m: number, n: number, entity: DiagramElement, refCenter: Point) {\r\n        let t, p = [], list, distance = [], min = 999999999, position, i, step = 15;\r\n        let pos: Point = entity.getPos();\r\n        let size: Point = entity.getSize();\r\n        list = [Point.LEFT, Point.RIGHT];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = this.getLRPosition(m, n, entity, list[i]);\r\n            if (t.y >= pos.y && t.y <= (pos.y + size.y + 1)) {\r\n                t.y += (entity['$' + list[i]] * step);\r\n                if (t.y > (pos.y + size.y)) {\r\n                    // Alternative\r\n                    t = Util.getUDPosition(m, n, entity, Point.DOWN, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        list = [Point.UP, Point.DOWN];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = Util.getUDPosition(m, n, entity, list[i]);\r\n            if (t.x >= pos.x && t.x <= (pos.x + size.x + 1)) {\r\n                t.x += (entity['$' + list[i]] * step);\r\n                if (t.x > (pos.x + size.x)) {\r\n                    // Alternative\r\n                    t = this.getLRPosition(m, n, entity, Point.RIGHT, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        for (i = 0; i < p.length; i += 1) {\r\n            if (distance[i] < min) {\r\n                min = distance[i];\r\n                position = p[i];\r\n            }\r\n        }\r\n        return position;\r\n    }\r\n\r\n    public static getUDPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let x, y: number = pos.y;\r\n        if (p === Point.DOWN) {\r\n            y += size.y;\r\n        }\r\n        x = (y - n) / m;\r\n        if (step) {\r\n            x += e['$' + p] * step;\r\n            if (x < pos.x) {\r\n                x = pos.x;\r\n            } else if (x > (pos.x + size.x)) {\r\n                x = pos.x + size.x;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static getLRPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let y: number, x: number = pos.x;\r\n        if (p === Point.RIGHT) {\r\n            x += size.x;\r\n        }\r\n        y = m * x + n;\r\n        if (step) {\r\n            y += e['$' + p] * step;\r\n            if (y < pos.y) {\r\n                y = pos.y;\r\n            } else if (y > (pos.y + size.y)) {\r\n                y = pos.y + size.y;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static hasClass(element: Element, cls: string) {\r\n        let className = element.getAttribute('class');\r\n        return className.indexOf(cls) > 0;\r\n    }\r\n    public static addClass(element: Element, cls: string) {\r\n        if (!Util.hasClass(element, cls)) {\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className + ' ' + cls);\r\n        }\r\n    }\r\n    public static removeClass(element: Element, cls: string) {\r\n        if (Util.hasClass(element, cls)) {\r\n            let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className.replace(reg, ' ').trim());\r\n        }\r\n    }\r\n\r\n    public static startsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.startsWith) {\r\n            return s.indexOf(searchS) === 0;\r\n        }\r\n\r\n        return s.startsWith(searchS);\r\n    }\r\n\r\n    public static endsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.endsWith) {\r\n            let lastIndex = s.lastIndexOf(searchS);\r\n            return lastIndex !== -1 && lastIndex === (s.length - 1);\r\n        }\r\n\r\n        return s.endsWith(searchS);\r\n    }\r\n\r\n    public static includes(s: string, searchS: string): boolean {\r\n        if (!String.prototype.includes) {\r\n            let idx = s.indexOf(searchS);\r\n            return idx > -1;\r\n        }\r\n        if (s === null) {\r\n            return false;\r\n        }\r\n\r\n        return s.includes(searchS);\r\n    }\r\n\r\n    public static isParentOfChild(parent: Element, child: Element): boolean {\r\n\r\n        if (!parent || !child) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isIE()) {\r\n            let children = parent.childNodes;\r\n            // let found = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                let childItem = children[i];\r\n                if (childItem === child) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        return parent.contains(child);\r\n    }\r\n\r\n    public static createCustomEvent(type: string, params?: any): CustomEvent {\r\n        let evt: CustomEvent;\r\n\r\n        if (typeof window['CustomEvent'] !== 'function') {\r\n            params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n            evt = document.createEvent('CustomEvent');\r\n            evt.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\r\n            return evt;\r\n        }\r\n\r\n        evt = new CustomEvent(type);\r\n\r\n        return evt;\r\n    }\r\n\r\n    public static saveToLocalStorage(model: any): boolean {\r\n        if (!this.isAutoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isLocalStorageSupported()) {\r\n            if (model) {\r\n                if (model.$isLoading) {\r\n                    return false;\r\n                }\r\n                let jsonObj = Util.toJson(model);\r\n                let data = JSON.stringify(jsonObj, null, '\\t');\r\n                localStorage.setItem('diagram', data);\r\n            } else {\r\n                localStorage.removeItem('diagram');\r\n            }\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static getDiagramFromLocalStorage(): string {\r\n        if (Util.isLocalStorageSupported()) {\r\n            return localStorage.getItem('diagram');\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    public static isLocalStorageSupported(): boolean {\r\n        if (this.isEdge()) {\r\n            return false;\r\n        }\r\n        return localStorage !== undefined;\r\n    }\r\n}\r\n"],"sourceRoot":""}
Severity: Minor
Found in doc/diagram.js.map by fixme

FIXME found
Open

{"version":3,"sources":["webpack://DiagramJS/webpack/bootstrap","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Adapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Bridge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/BridgeElement.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/CSS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Control.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Data.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventBus.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/JSEPS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Palette.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertiesPanel.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertyBinder.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/RGBColor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/SVGConverter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/ScrumBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Toolbar.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/UML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/VirtualKeyBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/JavaAdapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/BaseElements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/ClassEditor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Graph.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Model.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregate.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Association.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Composition.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Generalisation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Implements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Attribute.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/AutoComplete.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/BR.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Button.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Class.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/ClazzProperty.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Dice.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Div.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Form.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/HTML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/InfoText.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Input.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Label.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Method.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Node.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/SO.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/StereoType.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Symbol.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Table.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/AddNode.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Drag.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/GraphListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/ImportFile.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/NewEdge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Select.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Zoom.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayout.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayoutMin.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/Random.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/main.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/util.ts"],"names":[],"mappings":"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","file":"diagram.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./main.ts\");\n","export abstract class Adapter {\r\n    public id: string = null;\r\n\r\n    abstract update(evt: Object): boolean;\r\n}\r\n","'use strict';\r\n\r\nimport * as controls from './elements/nodes';\r\nimport * as adapters from './adapters';\r\nimport Data from './Data';\r\nimport {Control} from './Control';\r\nimport {Adapter} from './Adapter';\r\nimport {Graph} from './elements';\r\nimport {Util} from './util';\r\nimport {Point} from './elements';\r\n\r\nexport class Bridge extends Control {\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public static version: string = '0.42.01.1601007-1739';\r\n    private controlFactory: Object = {};\r\n    private adapterFactory: Object = {};\r\n    private controls: Object = {};\r\n    private adapters: Object = {};\r\n    private items: Object = {};\r\n    private controlNo: number = 1;\r\n    private online: boolean = true;\r\n    private language: string = navigator.language.toUpperCase();\r\n    private toolBar: HTMLElement;\r\n\r\n    constructor(viewRoot?: HTMLElement) {\r\n        super();\r\n        let i;\r\n\r\n        if (viewRoot) {\r\n            this.$view = viewRoot;\r\n        }\r\n\r\n        let keys: string[] = Object.keys(adapters);\r\n        for (i = 0; i < keys.length; i++) {\r\n            let child = adapters[keys[i]];\r\n            if (child && child.id) {\r\n                this.adapterFactory[child.id.toLowerCase()] = child;\r\n            }\r\n        }\r\n\r\n        keys = Object.keys(controls);\r\n        for (i = 0; i < keys.length; i++) {\r\n            this.addControl(controls[keys[i]]);\r\n        }\r\n        this.addControl(Graph);\r\n\r\n        let that = this;\r\n        window.addEventListener('load', function () {\r\n            let updateOnlineStatus = function updateOnlineStatus() {\r\n                that.setOnline(navigator.onLine);\r\n            };\r\n            window.addEventListener('online', updateOnlineStatus);\r\n            window.addEventListener('offline', updateOnlineStatus);\r\n        });\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public setOnline(value: boolean) {\r\n        this.online = value;\r\n        if (this.toolBar.children[0]) {\r\n            this.toolBar.children[0].className = value ? 'online' : 'offline';\r\n        }\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addToolbar(): boolean {\r\n        if (this.toolBar) {\r\n            return false;\r\n        }\r\n        this.toolBar = document.createElement('div');\r\n        this.toolBar.className = 'onlineStatus';\r\n        let child = document.createElement('div');\r\n        child.className = 'online';\r\n        this.toolBar.appendChild(child);\r\n        child = document.createElement('div');\r\n        child.className = 'lang';\r\n        child.innerHTML = this.language;\r\n        this.toolBar.appendChild(child);\r\n\r\n        let body: HTMLElement = document.getElementsByTagName('body')[0];\r\n        body.insertBefore(this.toolBar, body.firstChild);\r\n        // Refresh Online Status\r\n        this.setOnline(this.online);\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addListener = function (listener: any) {\r\n        this.listener.push(listener);\r\n    };\r\n\r\n    public addControl(control: any) {\r\n        if (control && control.name) {\r\n            this.controlFactory[control.name.toLowerCase()] = control;\r\n        }\r\n    }\r\n\r\n    public getId(): string {\r\n        return 'control' + (this.controlNo++);\r\n    }\r\n\r\n    public adapterUpdate(message: string) {\r\n        let keys: string[] = Object.keys(this.adapters);\r\n        if (keys.length > 0) {\r\n            let i;\r\n            for (i = 0; i < keys.length; i++) {\r\n                let adapterList = this.adapters[keys[i]];\r\n                if (adapterList instanceof Adapter) {\r\n                    adapterList.update(message);\r\n                } else {\r\n                    for (let adapter of adapterList) {\r\n                        adapter.update(message);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        let config = {}, className: string, id: string;\r\n        if (typeof(json) === 'string') {\r\n            // Only a String\r\n            config['id'] = '' + json;\r\n            let item = document.getElementById(config['id']);\r\n            let className: string;\r\n            if (item) {\r\n                className = item.getAttribute('class');\r\n                if (!className) {\r\n                    className = item.getAttribute('classname') || '';\r\n                }\r\n                // Found Element and now config Data element\r\n                if (item.getAttribute('property')) {\r\n                    if (this.hasItem(item.getAttribute('property'))) {\r\n                        let data = this.getItem(item.getAttribute('property'));\r\n                        for (let key in data.prop) {\r\n                            if (item.getAttribute(key)) {\r\n                                data.setValue(key, item.getAttribute(key));\r\n                            }\r\n                        }\r\n                        if (item.getAttribute('property')) {\r\n                            // TODO: FIXME!!!\r\n                            // data.property = item.getAttribute(\"property\");\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                className = '' + json;\r\n            }\r\n            className = className.toLowerCase();\r\n            config['className'] = className;\r\n        } else {\r\n            config = <JSON>json;\r\n        }\r\n        // Config validate\r\n        if (!config['id']) {\r\n            config['id'] = this.getId();\r\n        }\r\n        // Backup for Old Graph\r\n        if (!config['className'] && (config['type'] === 'clazzdiagram' || config['type'] === 'objectdiagram')) {\r\n            config['className'] = 'graph';\r\n        }\r\n\r\n        className = config['className'] || config['class'];\r\n        className = className.toLocaleLowerCase();\r\n        id = config['id'];\r\n\r\n        // Check For Control or Data\r\n        if ((config['prop'] || config['upd'] || config['rem']) && this.controls[id] === null) {\r\n            // Its Data\r\n            let newData = !this.hasItem(config['id']);\r\n            let item: Data = this.getItem(config['id']);\r\n            // TODO: FIXME!!!\r\n            // if (id && className && !item.property) {\r\n            //      item.property = className;\r\n            // }\r\n            if (newData) {\r\n                for (let i in this.controls) {\r\n                    if (this.controls.hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    this.controls[i].addItem(this, item);\r\n                }\r\n            }\r\n            // Add all Values to item\r\n            item.addProperties(config);\r\n            // Bridge.addProperties(config['prop'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return item;\r\n        }\r\n\r\n        let control;\r\n        if (this.controls[id]) {\r\n            control = this.controls[id];\r\n            control.initControl(json);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return control;\r\n        }\r\n\r\n        if (typeof(this.controlFactory[className]) === 'object' || typeof(this.controlFactory[className]) === 'function') {\r\n            let obj = this.controlFactory[className];\r\n            control = new obj(json);\r\n            Util.initControl(owner || this, control, config['property'], id, json);\r\n\r\n            if (control.id) {\r\n                this.controls[control.id] = control;\r\n            } else {\r\n                this.controls[id] = control;\r\n            }\r\n\r\n            // create DataObject and register this control as listener to it\r\n            // let obj = {id:id};\r\n            // let data: Data = this.load(obj);\r\n            // data.addListener(this);\r\n\r\n            // Try to Show\r\n            if (typeof control.getSVG === 'function' && typeof control.getSize === 'function') {\r\n                let size: Point = control.getSize();\r\n\r\n                let svg = Util.createShape({\r\n                    tag: 'svg',\r\n                    id: 'root',\r\n                    width: size.x,\r\n                    height: size.y\r\n                });\r\n\r\n                let view = control.getSVG();\r\n                svg.appendChild(view);\r\n                document.getElementsByTagName('body')[0].appendChild(svg);\r\n            }\r\n            return control;\r\n        }\r\n        return null;\r\n        // bridge.load('{class:table, columns:[{id:'firstname'}, {id:'lastname'}]}');\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n\r\n        if (this.items[id] !== undefined) {\r\n            return true;\r\n        }\r\n        id = id.split('.')[0];\r\n        return (this.items[id] !== undefined);\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return this.items;\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        let item = this.items[id];\r\n        if (!item) {\r\n            id = id.split('.')[0];\r\n            item = this.items[id];\r\n            if (!item) {\r\n                item = new Data();\r\n                item.id = id;\r\n                this.items[id] = item;\r\n            }\r\n        }\r\n        return item;\r\n    }\r\n\r\n    /**\r\n     * Method for executing user input -> Event\r\n     * @param object\r\n     * @param attribute\r\n     * @param oldValue\r\n     * @param newValue\r\n     * @returns {boolean}\r\n     */\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        alert('Bridge.setValue: oldVal:' + oldValue + ', newVal: ' +  + newValue + ', attribute: ' + attribute + ', object: ' + JSON.stringify(object));\r\n        let obj: Data;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n\r\n        } else if (object instanceof Data) {\r\n            obj = object;\r\n            id = object.id;\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = <Data>object;\r\n            id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return false;\r\n        }\r\n        if (obj) {\r\n            // Execute Update to Data\r\n            obj.setValue(attribute, newValue);\r\n            // Could be done here, but currently is done at this.execueChange..:\r\n            // obj[attribute] = value;\r\n        }\r\n\r\n        /*let tmp = {'id': id};\r\n        if (typeof(newValue) !== 'undefined' && newValue !== null) {\r\n            let upd = {};\r\n            upd[attribute] = newValue;\r\n            tmp['upd'] = upd;\r\n        }\r\n        if (typeof(oldValue) !== 'undefined' && oldValue !== null) {\r\n            let rem = {};\r\n            rem[attribute] = oldValue;\r\n            tmp['rem'] = rem;\r\n        }*/\r\n        // this.load(tmp);\r\n        return true;\r\n    }\r\n\r\n    public getValue(object: Object, attribute: string): any {\r\n        let obj: Object;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = object;\r\n            // id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return;\r\n        }\r\n        if (obj) {\r\n            if (obj.hasOwnProperty(attribute)) {\r\n                return obj[attribute];\r\n            } else if (obj instanceof Data) {\r\n                return (<Data>obj).getValue(attribute);\r\n            } else {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    public getNumber(object: Object, attribute: string, defaultValue: number = 0): number {\r\n        let res = <number>this.getValue(object, attribute);\r\n        if (typeof res === 'number') {\r\n            return res;\r\n        } else if (typeof res === 'string') {\r\n            // check whether res is a number\r\n            let value = Number(res);\r\n            if (value || value === 0) {\r\n                return value;\r\n            }\r\n        }\r\n        return defaultValue;\r\n    }\r\n\r\n    getControl(controlId: string) {\r\n        return this.controls[controlId];\r\n    }\r\n\r\n    public registerListener(eventType: string, control: Control, callBackfunction: string): Control {\r\n        if (typeof control === 'string') {\r\n            control = this.getControl(<string>control);\r\n        }\r\n        if (!control) {\r\n            return null;\r\n        }\r\n        if (eventType) {\r\n            eventType = eventType.toLowerCase();\r\n        }\r\n        control.registerListenerOnHTMLObject(eventType);\r\n        if (callBackfunction) {\r\n            let adapter: DelegateAdapter = new DelegateAdapter();\r\n            adapter.callBackfunction = callBackfunction;\r\n            adapter.id = control.getId();\r\n            this.addAdapter(adapter, eventType);\r\n        }\r\n        return control;\r\n    }\r\n\r\n    public addAdapter(adapter: Adapter | string, eventType: string): Adapter {\r\n        if (!eventType) {\r\n            eventType = '';\r\n        }\r\n        let result: Adapter;\r\n        if (adapter instanceof String) {\r\n            let obj = this.adapterFactory[adapter.toLowerCase()];\r\n            result = new obj();\r\n        } else {\r\n            result = <Adapter>adapter;\r\n        }\r\n        let handlers = this.adapters[eventType];\r\n\r\n        if (handlers === null || handlers === undefined) {\r\n            handlers = [];\r\n            this.adapters[eventType] = handlers;\r\n        }\r\n        handlers.push(result);\r\n        return result;\r\n    }\r\n\r\n    public fireEvent(evt: Event): void {\r\n        let handlers = this.adapters[''];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n        handlers = this.adapters[evt['eventType']];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport class DelegateAdapter extends Adapter {\r\n    adapter: Adapter;\r\n    callBackfunction: string;\r\n\r\n    update(evt: Event): boolean {\r\n        if (this.adapter) {\r\n            this.adapter.update(evt);\r\n            return true;\r\n        } else if (this.callBackfunction) {\r\n            return this.executeFunction(this.callBackfunction, evt);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public setAdapter(adapter: Adapter): boolean {\r\n        this.adapter = adapter;\r\n        return true;\r\n    }\r\n\r\n    private executeFunction(strValue: string, evt: Event): boolean {\r\n        let scope = window;\r\n        let scopeSplit = strValue.split('.');\r\n        for (let i = 0; i < scopeSplit.length - 1; i++) {\r\n            scope = scope[scopeSplit[i]];\r\n            if (scope === undefined) {\r\n                return false;\r\n            }\r\n        }\r\n        let fn: any = scope[scopeSplit[scopeSplit.length - 1]];\r\n        if (typeof fn === 'function') {\r\n            fn.call(scope);\r\n            return true;\r\n        } else {\r\n            window['callBack1'].update(evt);\r\n\r\n        }\r\n        return false;\r\n    }\r\n}\r\n","'use strict';\r\nimport Data from './Data';\r\n\r\nexport default class BridgeElement {\r\n    private static elementSet: BridgeElement[] = [];\r\n    public model: Data;\r\n    public id: string;\r\n    public gui: HTMLElement;\r\n\r\n    constructor(model: Data) {\r\n        this.model = model;\r\n        this.id = model.id;\r\n        BridgeElement.elementSet.push(this);\r\n    }\r\n}\r\n","import {Util} from './util';\r\n\r\n// \t\t\t\t######################################################### CSS #########################################################\r\nexport class CSS {\r\n    public css: Object;\r\n    private name: string;\r\n\r\n    constructor(name: string, item?: any) {\r\n        let i, value, border: string, prop, el;\r\n        this.name = name;\r\n        this.css = {};\r\n        if (!item) {\r\n            return;\r\n        }\r\n\r\n        el = window.getComputedStyle(item, null);\r\n        border = el.getPropertyValue('border');\r\n        for (i in el) {\r\n            prop = i;\r\n            value = el.getPropertyValue(prop);\r\n            if (value && value !== '') {\r\n                // optimize CSS\r\n                if (border) {\r\n                    if (prop === 'border-bottom' || prop === 'border-right' || prop === 'border-top' || prop === 'border-left') {\r\n                        if (value !== border) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-color' || prop === 'border-bottom-color' || prop === 'border-right-color' || prop === 'border-top-color' || prop === 'border-left-color') {\r\n                        if (border.substring(border.length - value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-width') {\r\n                        if (border.substring(0, value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else {\r\n                        this.css[prop] = value;\r\n                    }\r\n                } else {\r\n                    this.css[prop] = value;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public static getStdDef() {\r\n        let child, def = Util.create({tag: 'defs'});\r\n\r\n        child = Util.create({tag: 'filter', id: 'drop-shadow'});\r\n        child.appendChild(Util.create({tag: 'feGaussianBlur', 'in': 'SourceAlpha', result: 'blur-out', stdDeviation: 2}));\r\n        child.appendChild(Util.create({tag: 'feOffset', 'in': 'blur-out', dx: 2, dy: 2}));\r\n        child.appendChild(Util.create({tag: 'feBlend', 'in': 'SourceGraphic', mode: 'normal'}));\r\n        def.appendChild(child);\r\n        child = Util.create({tag: 'linearGradient', id: 'reflect', x1: 0, x2: 0, y1: '50%', y2: 0, spreadMethod: 'reflect'});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#aaa', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#eee', offset: '100%'}));\r\n        def.appendChild(child);\r\n\r\n        child = Util.create({tag: 'linearGradient', id: 'classelement', x1: 0, x2: '100%', y1: '100%', y2: 0});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#fff', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#d3d3d3', offset: 1}));\r\n        def.appendChild(child);\r\n\r\n        return def;\r\n    }\r\n\r\n    public static getSubstring(str: string, search: string, startChar: string, endChar: string, splitter: string): any {\r\n        let pos, end, count = 0, array = [];\r\n        pos = str.indexOf(search);\r\n        if (pos > 0) {\r\n            end = str.indexOf(startChar, pos);\r\n            pos = end + 1;\r\n            if (end > 0) {\r\n                while (end < str.length) {\r\n                    if (str.charAt(end) === startChar) {\r\n                        count += 1;\r\n                    }\r\n                    if (str.charAt(end) === endChar) {\r\n                        count -= 1;\r\n                        if (count === 0) {\r\n                            if (splitter && pos !== end) {\r\n                                array.push(str.substring(pos, end).trim());\r\n                            }\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (str.charAt(end) === splitter && count === 1) {\r\n                        array.push(str.substring(pos, end).trim());\r\n                        pos = end + 1;\r\n                    }\r\n\r\n                    end += 1;\r\n                }\r\n                if (splitter) {\r\n                    return array;\r\n                }\r\n                return str.substring(pos, end);\r\n            }\r\n            return str.substring(pos);\r\n        }\r\n        return '';\r\n    }\r\n\r\n    public static addStyle(board: SVGElement, styleName: any) {\r\n        let defs, style: any, css;\r\n        if (styleName.baseVal || styleName.baseVal === '') {\r\n            styleName = styleName.baseVal;\r\n        }\r\n        if (!styleName) {\r\n            return;\r\n        }\r\n        defs = CSS.getDefs(board);\r\n        if (defs.getElementsByTagName('style').length > 0) {\r\n            style = defs.getElementsByTagName('style')[0];\r\n        } else {\r\n            style = Util.create({tag: 'style'});\r\n            style.item = {};\r\n            defs.appendChild(style);\r\n        }\r\n        if (!style.item[styleName]) {\r\n            css = Util.getStyle(styleName);\r\n            style.item[styleName] = css;\r\n            style.innerHTML = style.innerHTML + '\\n.' + styleName + css.getSVGString(board);\r\n        }\r\n    }\r\n\r\n    public static addStyles(board: SVGElement, item: any) {\r\n        if (!item) {\r\n            return;\r\n        }\r\n        let items, i, className: any = item.className;\r\n\r\n        if (className) {\r\n            if (className.baseVal || className.baseVal === '') {\r\n                className = className.baseVal;\r\n            }\r\n        }\r\n        if (className) {\r\n            items = className.split(' ');\r\n            for (i = 0; i < items.length; i += 1) {\r\n                CSS.addStyle(board, items[i].trim());\r\n            }\r\n        }\r\n        for (i = 0; i < item.childNodes.length; i += 1) {\r\n            this.addStyles(board, item.childNodes[i]);\r\n        }\r\n    }\r\n\r\n    public static getDefs(board: SVGElement) {\r\n        let defs;\r\n        if (board.getElementsByTagName('defs').length < 1) {\r\n            defs = Util.create({tag: 'defs'});\r\n            board.insertBefore(defs, board.childNodes[0]);\r\n        } else {\r\n            defs = board.getElementsByTagName('defs')[0];\r\n        }\r\n        return defs;\r\n    }\r\n\r\n    public add(key: string, value: string) {\r\n        this.css[key] = value;\r\n    }\r\n\r\n    public get(key: string): any {\r\n        let i;\r\n        for (i in this.css) {\r\n            if (i === key) {\r\n                return this.css[key];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public getNumber(key: string) {\r\n        return parseInt((this.get(key) || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    public getSVGString(board: SVGElement) {\r\n        let str, pos, style, defs, value, filter, z;\r\n        str = '{';\r\n        for (style in this.css) {\r\n            if (!this.css.hasOwnProperty(style)) {\r\n                continue;\r\n            }\r\n            if (style === 'border') {\r\n                pos = this.css[style].indexOf(' ');\r\n                str = str + 'stroke-width: ' + this.css[style].substring(0, pos) + ';';\r\n                pos = this.css[style].indexOf(' ', pos + 1);\r\n                str = str + 'stroke:' + this.css[style].substring(pos) + ';';\r\n            } else if (style === 'background-color') {\r\n                str = str + 'fill: ' + this.css[style] + ';';\r\n            } else if (style === 'background') {\r\n                value = CSS.getSubstring(this.css[style], 'linear-gradient', '(', ')', ',');\r\n                if (value.length > 0) {\r\n                    defs = CSS.getDefs(board);\r\n                    if (value[0] === '45deg') {\r\n                        pos = 1;\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '100%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                    } else {\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '0%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                        pos = 0;\r\n                    }\r\n                    defs.appendChild(filter);\r\n                    while (pos < value.length) {\r\n                        value[pos] = value[pos].trim();\r\n                        z = value[pos].lastIndexOf(' ');\r\n                        filter.appendChild(Util.create({\r\n                            tag: 'stop',\r\n                            'offset': value[pos].substring(z + 1),\r\n                            style: {'stop-color': value[pos].substring(0, z)}\r\n                        }));\r\n                        pos += 1;\r\n                    }\r\n                    str = str + 'fill: url(#' + this.name + ');';\r\n                    continue;\r\n                }\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n                // box-shadow: inset 0 3px 4px #888;\r\n// \t\t\t\t<defs>\r\n// \t\t\t\t\t<filter id='drop-shadow'>\r\n// \t\t\t\t\t\t<feGaussianBlur in='SourceAlpha' result='blur-out' stdDeviation='2'></feGaussianBlur>\r\n// \t\t\t\t\t\t<feOffset in='blur-out' dx='2' dy='2'></feOffset>\r\n// \t\t\t\t\t\t<feBlend in='SourceGraphic' mode='normal'></feBlend>\r\n// \t\t\t\t\t</filter>\r\n// \t\t\t\t</defs>\r\n            } else {\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n            }\r\n        }\r\n        str = str + '}';\r\n        return str;\r\n    }\r\n}\r\n","import {Bridge} from './Bridge';\r\nimport Data from './Data';\r\nimport EventListener from './EventListener';\r\n\r\nexport abstract class Control {\r\n    public $owner: Control;\r\n    /**\r\n     *\r\n     */\r\n    public property: string;\r\n    public id: string;\r\n    public $view: Element;\r\n    public $viewData: Data = null;\r\n\r\n    protected $model: Data;\r\n    protected $viewListener: EventListenerOrEventListenerObject;\r\n\r\n    /**\r\n     * The properties, we want to listen to\r\n     */\r\n    // static defaultProperties: string[] = [];\r\n\r\n    // public getProperties(): string[] {\r\n    //     return this.properties;\r\n    // }\r\n\r\n    constructor() {\r\n        // e.g. this.properties.push(\"key\");\r\n        // this.properties.push(\"property\");\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data: Data = new Data();\r\n        if (oldData) {\r\n            oldData.removeListener(this);\r\n            const keys: string[] = oldData.getKeys();\r\n            for (let i = 0; i < keys.length; i++) {\r\n                let attr = keys[i];\r\n                if (this.$view) {\r\n                    if (this.$view[attr] === null) {\r\n                        continue;\r\n                    }\r\n                    data.setValue(attr, this.$view[attr]);\r\n                } else {\r\n                    data.setValue(attr, null);\r\n                }\r\n            }\r\n        }\r\n        data.addListener(this);\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     *  Set the new HTMLElement and attach listener to it.\r\n     *  Also remove Listeners from old one and return the old one, if present.\r\n     * @param element\r\n     * @returns The previous Element\r\n     */\r\n    public setView(element: Element): Element {\r\n        let oldElement: Element = null;\r\n        if (this.$view) {\r\n            oldElement = this.$view;\r\n            if (this.$viewListener) {\r\n                oldElement.removeEventListener('change', this.$viewListener);\r\n            }\r\n        }\r\n        this.$view = element;\r\n\r\n        if (this.$viewListener) {\r\n            element.addEventListener('change', this.$viewListener);\r\n        }\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n        return element;\r\n    }\r\n\r\n    public init(owner: Control, property ?: string, id ?: string): Control {\r\n        if (!this.$owner) {\r\n            this.$owner = owner;\r\n        }\r\n        if (!this.id) {\r\n            this.id = id;\r\n        }\r\n        if (!this.property) {\r\n            this.property = this.generateID(property, id);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public createEventListener(): EventListener {\r\n        return new EventListener();\r\n    }\r\n\r\n    public getRoot(): Control {\r\n        if (this.$owner) {\r\n            return this.$owner.getRoot();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return null;\r\n    }\r\n\r\n    public initControl(data: any): void {\r\n        if (this.$view === null || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (data.hasOwnProperty('prop')) {\r\n            for (let key in data.prop) {\r\n                let oldValue = this.$viewData.getValue(key);\r\n                if (this.$view) {\r\n                    this.updateElement(key, oldValue, data.prop[key]);\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        let hasRem = data.hasOwnProperty('rem');\r\n        let removed: any[] = [];\r\n        if (data.hasOwnProperty('upd')) {\r\n            for (let key in data.upd) {\r\n                let oldValue;\r\n                let newValue = data.upd[key];\r\n                let entity;\r\n                const temp = false;\r\n                if (temp) {\r\n//                if (newValue == this.getViewData().getValue(key)) {\r\n                    // new Value assertEquals old value, so we don't need to change anything..\r\n                    // delete data.rem[key];\r\n                    if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                        removed.push(data.rem[key]);\r\n                    }\r\n                    continue;\r\n                }\r\n                if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                    // if there's a rem, the oldValue from rem will be used and expected to be right..\r\n                    oldValue = data.rem[key];\r\n                    if (this.$model && this.$model.getValue(key) === oldValue) {\r\n                        entity = this.$model;\r\n//                    } else if (oldValue == this.getViewData().getValue(key)) {\r\n//                        $graphModel = this.getViewData();\r\n                    }\r\n                    delete data.rem[key];\r\n\r\n                    if (entity === null) {\r\n                        continue;\r\n                    }\r\n                }\r\n                if (entity) {\r\n                    if (!hasRem) {\r\n                        if (entity === this.$model) {\r\n                            oldValue = this.$model.getValue(key);\r\n                        } else {\r\n//                           oldValue = this.getViewData().getValue(key);\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (this.$model) {\r\n                        // try to get the oldValue directly from the $graphModel...\r\n                        oldValue = this.$model.getValue(key);\r\n                        entity = this.$model;\r\n                    }\r\n                    if (oldValue === null) {\r\n                        // if there was no data in the entity, we try to get oldValue from the $view\r\n//                        oldValue = this.getViewData().getValue(key);\r\n//                        entity = this.getViewData();\r\n                    }\r\n                }\r\n\r\n                //  || oldValue !== this.$viewData.getValue(key)\r\n                if (newValue === oldValue) {\r\n                    // no match, so update should be wrong...\r\n                    continue;\r\n                }\r\n                const viewDataOldValue = this.$viewData.getValue(key);\r\n                if (entity === this.$viewData) {\r\n\r\n                    // this.getViewData().setValue(key, newValue);\r\n                    if (this.$view) {\r\n                        this.updateElement(key, viewDataOldValue, newValue);\r\n                    }\r\n                } else {\r\n                    this.updateElement(key, viewDataOldValue, newValue);\r\n                }\r\n                this.getRoot().setValue(entity, key, newValue, oldValue);\r\n            }\r\n            // this.saveViewInData();\r\n        }\r\n        if (hasRem) {\r\n            for (let key in data.rem) {\r\n                if (removed.hasOwnProperty(key)) {\r\n                    continue;\r\n                }\r\n                let oldValue;\r\n//                    this.getViewData().getValue(key);\r\n//                if (oldValue != data.rem[key] || data.upd !== undefined && (data.upd[key] == oldValue || this.getViewData().getValue(key) == data.upd[key])) {\r\n                // if rem is invalid, or if the change is already applied, don't do anything..\r\n                //                  continue;\r\n                //            }\r\n                // delete this.$viewData.getValue(key);\r\n                // this.saveViewInData();\r\n                this.updateElement(key, null, null);\r\n                // this.$view.removeAttribute(key);\r\n                if (this.$model) {\r\n//                    this.getRoot().setValue(this.$graphModel, key, this.getViewData().getValue(key), oldValue);\r\n                }\r\n            }\r\n        }\r\n        if (this.property) {\r\n            // Add listener to Input field:\r\n            this.$view['onchange'] = ((ev: Event) => {\r\n                    this.controlChanged(ev);\r\n                }\r\n            );\r\n        }\r\n//        this.saveViewInData();\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        return null;\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n        return false;\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return new Object();\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue ?: Object): boolean {\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Is called when a object, that the Control is listening to, changes its value.\r\n     * @param entity\r\n     * @param property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        if (oldValue === newValue || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (oldValue === this.$viewData.getValue(property)) {\r\n            return;\r\n        }\r\n        // Set NewData to ViewData and Fire PC\r\n        this.$viewData.setValue(property, newValue);\r\n\r\n//\r\n//\r\n//         // if (entity == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.entity) {\r\n//                 alert(\"entity = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.entity.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.entity, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the entity is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"entity = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n// >>>>>>> addOldFunctions\r\n        if (this.$viewData) {\r\n            this.$viewData.setValue(property, newValue);\r\n        }\r\n        if (this.$model) {\r\n            this.$model.setValue(property, newValue);\r\n        }\r\n        this.updateElement(property, oldValue, newValue);\r\n    }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            // Do Nothing\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  Update GUI Element\r\n     * @param {string} property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        if (this.$view && this.$view.hasAttribute(property)) {\r\n            this.$view.setAttribute(property, newValue);\r\n        }\r\n    }\r\n\r\n//        if (oldValue == newValue) {\r\n//            return;\r\n//        }\r\n//        if (oldValue == this.$viewData.getValue(property)) {\r\n//            return;\r\n//        }\r\n//        // Set NewData to ViewData and Fire PC\r\n//        this.$viewData.setValue(property, newValue);\r\n//\r\n//\r\n//\r\n//         // if ($graphModel == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.$graphModel) {\r\n//                 alert(\"$graphModel = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.$graphModel.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.$graphModel, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the $graphModel is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"$graphModel = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n\r\n    public getId(): string {\r\n        return this.id;\r\n    }\r\n\r\n    public load(json: JSON | Object, owner ?: Control): any {\r\n        // Do Nothing\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.property || entity.hasProperty(this.property)) {\r\n                entity.addListener(this, this.property);\r\n                this.$model = entity;\r\n            }\r\n        }\r\n    }\r\n\r\n    public appendChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.appendChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].appendChild(child.$view);\r\n        }\r\n    }\r\n\r\n    public removeChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.removeChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].removeChild(child.$view);\r\n        }\r\n    }\r\n\r\n    /*\r\n     Property looks like: 't1.talk'\r\n     */\r\n    public setProperty(property: string): void {\r\n        if (!this.property) {\r\n            return;\r\n        }\r\n        let objId = property.split('.')[0];\r\n        let object = null;\r\n        if (this.$owner.hasItem(objId)) {\r\n            object = this.$owner.getItem(objId);\r\n        }\r\n\r\n        // remove listener on old object\r\n        if (this.$model) {\r\n            // this.$graphModel.removeListener(this);\r\n            this.$model.removeListener(this, this.lastProperty);\r\n        }\r\n        this.property = property;\r\n\r\n        // add listener to object..\r\n        if (object) {\r\n            object.addListener(this, this.lastProperty);\r\n            this.$model = object;\r\n            this.updateElement(this.lastProperty, this.$viewData.getValue(this.lastProperty), object.prop[this.lastProperty]);\r\n        }\r\n    }\r\n\r\n    public registerListenerOnHTMLObject(eventType: string): boolean {\r\n        return this.registerEventListener(eventType, <HTMLElement>this.$view);\r\n    }\r\n\r\n    // Normal Event HTML-Event\r\n    // Eventtype:string,\r\n    // id:string of Control\r\n    public fireEvent(evt: Event): void {\r\n        // Do Nothing\r\n    }\r\n\r\n    public isClosed(): boolean {\r\n        return this['closed'];\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        if (this.isClosed()) {\r\n            return this.$owner.getShowed();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * the id of the Data object, that contains the properties of the view\r\n     * @returns {string}\r\n     */\r\n    protected getControlDataID() {\r\n        return this.id + '_data';\r\n    }\r\n\r\n    protected generateID(property ?: string, id ?: string): string {\r\n        if (property) {\r\n            return property;\r\n        }\r\n        if (id) {\r\n            // will generate a data Object suitable for the Control..\r\n            // must be overridden, if the changeEvent shouldn't listen on value...\r\n//            return id + '.' + this.getStandardProperty();//+ \"_data\"\r\n            return id + '.' + '_data';\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected updateViewData() {\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n        const keys: string[] = this.$viewData.getKeys();\r\n        for (let i = 0; i < keys.length; i++) {\r\n            let attr = keys[i];\r\n            if (this.$view[attr] === null) {\r\n                continue;\r\n            }\r\n            this.$viewData.setValue(attr, this.$view[attr]);\r\n        }\r\n    }\r\n\r\n    protected registerEventListener(eventType: string, htmlElement: HTMLElement): boolean {\r\n        if (!htmlElement) {\r\n            return false;\r\n        }\r\n        if (htmlElement instanceof HTMLElement === false) {\r\n            return false;\r\n        }\r\n        let control = this;\r\n        let listener = (t: any) => {\r\n            t.eventType = eventType;\r\n            t.id = control.id;\r\n            control.$owner.fireEvent(t);\r\n        };\r\n        htmlElement.addEventListener(eventType, listener);\r\n        return true;\r\n    }\r\n\r\n    get lastProperty(): string {\r\n        if (!this.property) {\r\n            return '';\r\n        }\r\n        let arr: string[] = this.property.split('.');\r\n        return arr[arr.length - 1];\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\n\r\nexport default class Data {\r\n    public prop = {};\r\n    id: string;\r\n    // $listener: Control[] = [];\r\n    $listener: Object = {};\r\n\r\n    private static nullCheck(property: string): string {\r\n        if (property === undefined || property === null) {\r\n            property = '';\r\n        }\r\n        return property;\r\n    }\r\n    public getKeys(): string[] {\r\n        return Object.keys(this.prop);\r\n    }\r\n\r\n    public addProperties(values: Object) {\r\n        if (!values) {\r\n            return;\r\n        }\r\n        if (values['prop']) {\r\n            let prop = values['prop'];\r\n            for (let property in prop) {\r\n                if (prop.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (prop[property] !== null && '' !== prop[property]) {\r\n                    this.setValue(property, prop[property]);\r\n                }\r\n            }\r\n        } else {\r\n            let upd = values['upd'] || {};\r\n            let rem = values['rem'] || {};\r\n\r\n            for (let property in upd) {\r\n                if (upd.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (rem.hasOwnProperty(property) === false) {\r\n                    this.setValue(property, upd[property]);\r\n                } else {\r\n                    // if we have a rem, we wan't to check, if its a valid change (teh old value is the value in rem)\r\n                    if (this.getValue(property) === rem[property]) {\r\n                        this.setValue(property, upd[property]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getValue(attribute: string) {\r\n        return this.prop[attribute];\r\n    }\r\n\r\n    public setValue(attribute: string, newValue: any): void {\r\n        let oldValue = this.prop[attribute];\r\n        if (oldValue === newValue && newValue !== null) {\r\n            return;\r\n        }\r\n        this.prop[attribute] = newValue;\r\n        this.firePropertyChange(attribute, oldValue, newValue);\r\n    }\r\n\r\n    public addTo(attribute: string, newValue: any): boolean {\r\n        let add: boolean;\r\n        if (this.prop[attribute]) {\r\n            if (this.prop[attribute].contains(newValue) === false) {\r\n                add = true;\r\n            }\r\n        } else {\r\n            this.prop[attribute] = [];\r\n            add = true;\r\n        }\r\n        if (add) {\r\n            this.prop[attribute].push(newValue);\r\n            this.firePropertyChange(attribute, null, newValue);\r\n        }\r\n        return add;\r\n    }\r\n\r\n    public removeFrom(attribute: string, newValue: any): boolean {\r\n        if (!this.prop[attribute]) {\r\n            return true;\r\n        }\r\n        let pos: number = this.prop[attribute].indexOf(newValue);\r\n        if (pos < 0) {\r\n            return true;\r\n        }\r\n        this.prop[attribute].splice(pos, 1);\r\n        this.firePropertyChange(attribute, newValue, null);\r\n        return true;\r\n    }\r\n\r\n    public addListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(property);\r\n        if (!listeners) {\r\n            listeners = [];\r\n            this.$listener[Data.nullCheck(property)] = listeners;\r\n        }\r\n        listeners.push(control);\r\n    }\r\n\r\n    public removeListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners = this.getListeners(property);\r\n        if (listeners === null) {\r\n            return;\r\n        }\r\n        let pos = listeners.indexOf(control);\r\n        if (pos >= 0) {\r\n            listeners.splice(pos, 1);\r\n        }\r\n        if (listeners.length === 0 && Data.nullCheck(property) !== '') {\r\n            // only remove, if it's not the default listener list...\r\n            delete this.$listener[property];\r\n        }\r\n    }\r\n\r\n    public hasProperty(property: string): boolean {\r\n        return this.prop.hasOwnProperty(property);\r\n    }\r\n\r\n    public addFrom(attribute: string, oldData: Data): void {\r\n        if (oldData) {\r\n            this.setValue(attribute, oldData.getValue(attribute));\r\n        } else {\r\n            this.setValue(attribute, null);\r\n        }\r\n    }\r\n\r\n    public removeKey(key: string): any {\r\n        if (this.hasProperty(key)) {\r\n            const oldValue = this.prop[key];\r\n            delete this.prop[key];\r\n            return oldValue;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected getListeners(property: string): PropertyChangeSupport[] {\r\n        property = Data.nullCheck(property);\r\n        return this.$listener[property];\r\n    }\r\n\r\n    protected firePropertyChange(attribute: string, oldValue: Object, newValue: Object) {\r\n        attribute = Data.nullCheck(attribute);\r\n        // at first fire for the given property\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(attribute);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n        // now we need to fire the Listeners that wan't to listen to everything\r\n        listeners = this.getListeners(null);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport interface EventHandler {\r\n    canHandle(): boolean;\r\n    handle(event: Event, element: DiagramElement): boolean;\r\n    setActive(active: boolean): void;\r\n}\r\n\r\nexport class EventBus {\r\n    public static CREATE: string = 'Create';\r\n    public static EDITOR: string = 'Editor';\r\n    public static OPENPROPERTIES: string = 'openProperties';\r\n    public static RELOADPROPERTIES: string = 'reloadProperties';\r\n    public static ELEMENTMOUSEDOWN: string = 'ELEMENT:MOUSEDOWN';\r\n    public static ELEMENTMOUSEUP: string = 'ELEMENT:MOUSEUP';\r\n    public static ELEMENTMOUSELEAVE: string = 'ELEMENT:MOUSELEAVE';\r\n    public static ELEMENTMOUSEMOVE: string = 'ELEMENT:MOUSEMOVE';\r\n    public static ELEMENTMOUSEWHEEL: string = 'ELEMENT:MOUSEWHEEL';\r\n    public static ELEMENTCLICK: string = 'ELEMENT:CLICK';\r\n    public static ELEMENTDBLCLICK: string = 'ELEMENT:DBLCLICK';\r\n    public static ELEMENTDRAG: string = 'ELEMENT:DRAG';\r\n    public static ELEMENTDRAGOVER: string = 'ELEMENT:DRAGOVER';\r\n    public static ELEMENTDROP: string = 'ELEMENT:DROP';\r\n    public static ELEMENTDRAGLEAVE: string = 'ELEMENT:DRAGLEAVE';\r\n\r\n    public static EVENTS: string[] = [\r\n        EventBus.CREATE,\r\n        EventBus.EDITOR,\r\n        EventBus.OPENPROPERTIES,\r\n        EventBus.RELOADPROPERTIES,\r\n        EventBus.ELEMENTMOUSEDOWN,\r\n        EventBus.ELEMENTMOUSEUP,\r\n        EventBus.ELEMENTMOUSELEAVE,\r\n        EventBus.ELEMENTMOUSEMOVE,\r\n        EventBus.ELEMENTMOUSEWHEEL,\r\n        EventBus.ELEMENTCLICK,\r\n        EventBus.ELEMENTDRAG,\r\n        EventBus.ELEMENTDBLCLICK,\r\n        EventBus.ELEMENTDRAGOVER,\r\n        EventBus.ELEMENTDROP,\r\n        EventBus.ELEMENTDRAGLEAVE,\r\n    ];\r\n\r\n    private static handlers = {};\r\n\r\n    private static $activeHandler: string = '';\r\n\r\n    public static setActiveHandler(handler: string): void {\r\n        this.$activeHandler = handler;\r\n    }\r\n\r\n    public static isHandlerActiveOrFree(handler: string, notEmpty?: boolean): boolean {\r\n        if (notEmpty) {\r\n            return this.$activeHandler === handler;\r\n        }\r\n        return this.$activeHandler === handler || this.$activeHandler === '' || this.$activeHandler === undefined;\r\n    }\r\n\r\n    public static isAnyHandlerActive(): boolean {\r\n        return !(this.$activeHandler === '' || this.$activeHandler === undefined);\r\n    }\r\n\r\n    public static releaseActiveHandler(): void {\r\n        this.$activeHandler = '';\r\n    }\r\n\r\n    public static getActiveHandler(): string {\r\n        return this.$activeHandler;\r\n    }\r\n\r\n    static register(control: Control, view: Element) {\r\n        let events: string[];\r\n        if (typeof control['getEvents'] === 'function') {\r\n            events = control['getEvents']();\r\n        }\r\n\r\n        if (!events || !view) {\r\n            return;\r\n        }\r\n        for (let event of events) {\r\n            this.registerEvent(view, event, control);\r\n        }\r\n    }\r\n\r\n    static registerEvent(view: Element, event: string, control?: any) {\r\n        const pos: number = event.indexOf(':');\r\n        if (pos > 0) {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        } else {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        }\r\n    }\r\n\r\n    public static publish(element: DiagramElement, evt: Event) {\r\n        let handlers = EventBus.handlers[evt.type];\r\n        if (handlers) {\r\n            for (let handler of handlers) {\r\n                handler.handle(evt, element);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static subscribe(handler: EventHandler, ...eventTypes: string[]) {\r\n        for (let event of eventTypes) {\r\n            let handlers = EventBus.handlers[event];\r\n            if (handlers === null || handlers === undefined) {\r\n                handlers = [];\r\n                EventBus.handlers[event] = handlers;\r\n            }\r\n            handlers.push(handler);\r\n        }\r\n    }\r\n}\r\n","import SimpleEvent from './Event';\r\n\r\nexport default class EventListener {\r\n    private $onUpdate: Function;\r\n\r\n    get onUpdate(): Function {\r\n        return this.$onUpdate;\r\n    }\r\n\r\n    set onUpdate(value: Function) {\r\n        this.$onUpdate = value;\r\n    }\r\n\r\n    update(event: SimpleEvent) {\r\n        this.$onUpdate(event);\r\n    }\r\n}\r\n","// ################################## jsEPS ####################################################\r\nimport {SVGConverter} from './SVGConverter';\r\n\r\nexport class JSEPS {\r\n    private max: number;\r\n    private min: number;\r\n    private inverting: boolean;\r\n    private output: string[];\r\n    private font: number;\r\n\r\n    constructor(options: any) {\r\n        this.max = 0;\r\n        this.min = 999;\r\n        let hasInverting = typeof (options.inverting);\r\n        this.inverting = (options && hasInverting !== 'undefined' ? options.inverting : true);\r\n        this.output = ['%!PS-Adobe-3.0 EPSF-3.0', '1 setlinewidth'];\r\n        this.out('/FSD {findfont exch scalefont def} bind def % In the document prolog: define');\r\n        this.out('/SMS {setfont moveto show} bind def % some useful procedures');\r\n        this.out('/MS {moveto show} bind def');\r\n        this.out('/F1  10  /Helvetica  FSD % At the start of the script: set up');\r\n        this.font = 1;\r\n    }\r\n\r\n    public out(value: string) {this.output.push(value); }\r\n    public rect(x: number, y: number, width: number, height: number, style: string) {\r\n        y = y + (this.inverting ? height : 0);\r\n        if (style && style.indexOf('fill:url(#classelement);') >= 0) {\r\n            this.out('gsave 0.93 0.93 0.93 setrgbcolor newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectfill grestore');\r\n        } else {\r\n            this.out('newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectstroke');\r\n        }\r\n    }\r\n    public setFillColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public y(value: number) {this.max = Math.max(this.max, value); this.min = Math.min(this.min, value); return this.inverting ? '%y(' + value + ')' : value; }\r\n    public getType(): string {\r\n        return 'application/postscript';\r\n    }\r\n\r\n    public getData(): string {\r\n        let t, end, url, text, typ = 'application/postscript', a = document.createElement('a'), data = '', pos, i;\r\n        for (i = 0; i < this.output.length; i += 1) {\r\n            text = this.output[i];\r\n            if (this.inverting) {\r\n                while ((pos = text.indexOf('%y')) >= 0) {\r\n                    end = text.indexOf(')', pos);\r\n                    t = this.max - parseInt(text.substring(pos + 3, end), 10);\r\n                    text = text.substring(0, pos) + t + text.substring(end + 1);\r\n                }\r\n            }\r\n            data = data + text + '\\r\\n';\r\n        }\r\n        return data;\r\n    }\r\n\r\n    public setDrawColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public ellipse(cx: number, cy: number, rx: number, ry: number, colorMode: string) {/*FIXME*/}\r\n    public circle(cx: number, cy: number, r: number, colorMode: string) {/*FIXME*/}\r\n    public setTextColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public text(x: number, y: number, text: string) {this.out('(' + text.replace('&lt;', '<').replace('&gt;', '>') + ') ' + x + ' ' + this.y(y) + ' F1 SMS'); }\r\n    public lineto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' lineto'); this.out('stroke'); }\r\n    public moveto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' moveto'); }\r\n    public line(x1: number, y1: number, x2: number, y2: number) {this.out('newpath ' + x1 + ' ' + this.y(y1) + ' moveto ' + x2 + ' ' + this.y(y2) + ' lineto stroke'); }\r\n    public setLineWidth(value: string) {this.out(value + ' setlinewidth'); }\r\n    public setFont(value: string) {this.out('/F' + (this.font += 1) + ' 10 /' + value + ' FSD'); }\r\n}\r\n","import { Graph } from './elements/Graph';\r\n\r\n/*const buttons = {\r\n    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    clazz: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n};\r\n*/\r\nexport default class Palette {\r\n\r\n    private graph: Graph;\r\n    private palette: Element;\r\n    private root: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n        let div = document.createElement('div');\r\n        div.className = 'palette';\r\n        div.id = 'palette';\r\n        this.root = div;\r\n        this.palette = div;\r\n        for (let key in graph.nodeFactory) {\r\n            let element = graph.nodeFactory[key];\r\n            let control = new element();\r\n            let icon = control.getToolBarIcon();\r\n            if (icon) {\r\n                let button = <HTMLButtonElement>document.createElement('button');\r\n                button.className = 'add' + key + 'Btn';\r\n                button.innerHTML = icon.outerHTML;\r\n                button.onclick = e => {\r\n                    let nextFreePosition = this.graph.getNextFreePosition();\r\n                    // let node = this.graph.addElementWithValues(graph.nodeFactory[key], {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    let node = this.graph.addElementWithValues(key, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    this.graph.drawElement(node);\r\n                };\r\n                this.palette.appendChild(button);\r\n            }\r\n        }\r\n        // this.graph.nodeFactory\r\n//        this.addButtons();\r\n    }\r\n\r\n    public show() {\r\n        document.body.appendChild(this.root);\r\n    }\r\n\r\n    private addButtons() {\r\n        /*for (let btn in buttons) {\r\n            let button = <HTMLButtonElement>document.createElement('button');\r\n            button.className = 'add' + btn + 'Btn';\r\n            button.innerHTML = buttons[btn];\r\n            button.onclick = e => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let node = this.graph.addElementWithValues(btn, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                this.graph.drawElement(node);\r\n            };\r\n            this.palette.appendChild(button);\r\n        }*/\r\n    }\r\n}\r\n","import {Graph} from './elements/Graph';\r\nimport * as edges from './elements/edges';\r\nimport {EventBus, EventHandler} from './EventBus';\r\nimport {DiagramElement} from './elements/BaseElements';\r\nimport {Util} from './util';\r\n\r\nexport class PanelGroup implements EventHandler {\r\n    private graph: Graph;\r\n    private selectedElement: DiagramElement;\r\n    private clearPanel: Panel;\r\n    private generatePanel: Panel;\r\n    private propertiesMasterPanel: HTMLDivElement;\r\n    private propertiesContent: HTMLDivElement;\r\n    private propHeaderLabel: HTMLDivElement;\r\n    private propHeaderButton: HTMLButtonElement;\r\n    private selectedPanel: Panel;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.clearPanel = new ClearPanel(this);\r\n        this.generatePanel = new GeneratePanel(this);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        this.handleOpenProperties(event, element);\r\n\r\n        if (event.type === EventBus.RELOADPROPERTIES\r\n            && this.selectedElement && element.id === this.selectedElement.id) {\r\n            this.handleEvent(event, element);\r\n        }\r\n\r\n        // the same element was clicked. do nothing\r\n        if (this.selectedElement && this.selectedElement.id === element.id) {\r\n            return true;\r\n        }\r\n        if (element.id === 'RootElement') {\r\n            this.setActivePanel(this.clearPanel);\r\n        }\r\n        if (element.id === 'GenerateProp') {\r\n            this.setActivePanel(this.generatePanel);\r\n        }\r\n        this.selectedElement = element;\r\n\r\n        return true;\r\n    }\r\n\r\n    public getGraph(): Graph {\r\n        return this.graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(PanelGroup.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(PanelGroup.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n     public handleEvent(event: any, element: any) {\r\n        // DO NOTHING\r\n    }\r\n\r\n    public show() {\r\n        // main div to display any properties, class, edge, etc.\r\n        this.propertiesMasterPanel = document.createElement('div');\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n\r\n        this.propertiesContent = document.createElement('div');\r\n        this.propertiesContent.className = 'properties-hidden';\r\n\r\n        this.propHeaderLabel = document.createElement('div');\r\n        this.propHeaderLabel.style.display = 'inherit';\r\n        this.propHeaderLabel.style.cursor = 'pointer';\r\n        this.propHeaderLabel.onclick = e => this.toogleProperties(e);\r\n\r\n        // button to display and hide the properties of e.g. a class\r\n        this.propHeaderButton = document.createElement('button');\r\n        this.propHeaderButton.className = 'btnHideProp';\r\n        this.propHeaderButton.style.cssFloat = 'right';\r\n        this.propHeaderButton.onclick = e => this.toogleProperties(e);\r\n\r\n        let propertiesHeader = document.createElement('div');\r\n        propertiesHeader.style.display = 'inline';\r\n        propertiesHeader.appendChild(this.propHeaderLabel);\r\n        propertiesHeader.appendChild(this.propHeaderButton);\r\n\r\n        this.propertiesMasterPanel.appendChild(propertiesHeader);\r\n        this.propertiesMasterPanel.appendChild(this.propertiesContent);\r\n        document.body.appendChild(this.propertiesMasterPanel);\r\n\r\n        this.setActivePanel(this.clearPanel);\r\n    }\r\n\r\n    public setActivePanel(panel: Panel) {\r\n        this.selectedPanel = panel;\r\n        this.propHeaderLabel.innerHTML = panel.getHeaderText();\r\n        if (this.propertiesContent) {\r\n            while (this.propertiesContent.hasChildNodes()) {\r\n                this.propertiesContent.removeChild(this.propertiesContent.childNodes[0]);\r\n            }\r\n        }\r\n        panel.show();\r\n\r\n        panel.showFirstTab();\r\n        if (panel !== this.clearPanel) {\r\n            this.showProperties(null);\r\n        } else {\r\n            this.hideProperties(null);\r\n        }\r\n    }\r\n\r\n    public getProperiesContent(): HTMLDivElement {\r\n        return this.propertiesContent;\r\n    }\r\n\r\n    private handleOpenProperties(event: Event, element: DiagramElement) {\r\n        if (event.type === 'dblclick') {\r\n            this.showProperties(event);\r\n        }\r\n    }\r\n\r\n    private showProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Show\r\n        this.propHeaderButton.innerHTML = '&#8897;';\r\n        this.propHeaderButton.title = 'Hide properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel';\r\n        this.propertiesContent.className = 'properties';\r\n    }\r\n\r\n    private toogleProperties(evt: Event): void {\r\n        if (this.propHeaderButton.title === 'Show properties') {\r\n            this.showProperties(evt);\r\n        } else {\r\n            this.hideProperties(evt);\r\n        }\r\n    }\r\n\r\n    private hideProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Hide\r\n        this.propHeaderButton.innerHTML = '&#8896;';\r\n        this.propHeaderButton.title = 'Show properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n        this.propertiesContent.className = 'properties-hidden';\r\n    }\r\n}\r\n\r\nexport abstract class Panel {\r\n    protected divPropertiesPanel: HTMLDivElement;\r\n    protected divPropertiesTabbedPanel: HTMLDivElement;\r\n    protected element: any;\r\n    protected group: PanelGroup;\r\n    private panelItem: PanelItem[] = [];\r\n\r\n    constructor(group: PanelGroup, element: any) {\r\n        // get the properties content panel\r\n        this.divPropertiesPanel = document.createElement('div');\r\n        this.element = element;\r\n        this.group = group;\r\n\r\n        this.divPropertiesTabbedPanel = document.createElement('div');\r\n        this.divPropertiesTabbedPanel.className = 'tabbedpane';\r\n\r\n        // add tabbed panel\r\n        this.divPropertiesPanel.appendChild(this.divPropertiesTabbedPanel);\r\n    }\r\n\r\n    public show(): void {\r\n        let propertiesContent: HTMLDivElement = this.group.getProperiesContent();\r\n        if (this.panelItem.length > 1) {\r\n            propertiesContent.appendChild(this.getPropertiesTabbedPanel());\r\n        }\r\n\r\n        propertiesContent.appendChild(this.getPropertiesPanel());\r\n    }\r\n\r\n    public getPropertiesTabbedPanel(): HTMLDivElement {\r\n        return this.divPropertiesTabbedPanel;\r\n    }\r\n\r\n    public getPropertiesPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return '';\r\n    }\r\n\r\n    public showFirstTab(): void {\r\n        if (this.panelItem.length > 0) {\r\n            this.openTab(this.panelItem[0]);\r\n        }\r\n    }\r\n\r\n    protected createTabElement(tabText: string, tabValue: string, item: PanelItem): PanelItem {\r\n        let tabElementBtn = document.createElement('button');\r\n        tabElementBtn.className = 'tablinks';\r\n        tabElementBtn.innerText = tabText;\r\n        tabElementBtn.value = tabValue;\r\n\r\n        if (item === null) {\r\n            item = new PanelItem(this);\r\n        }\r\n        item.withButton(tabElementBtn);\r\n\r\n        tabElementBtn.onclick = () => this.openTab(item);\r\n        this.divPropertiesTabbedPanel.appendChild(tabElementBtn);\r\n        this.panelItem.push(item);\r\n        return item;\r\n    }\r\n\r\n    protected openTab(panelItem: PanelItem): void {\r\n        for (let key in this.panelItem) {\r\n            let child = this.panelItem[key];\r\n            if (child !== panelItem) {\r\n                 child.deactive();\r\n            }\r\n        }\r\n        panelItem.active();\r\n        // hide other tabcontent\r\n        if (this.divPropertiesPanel) {\r\n            while (this.divPropertiesPanel.hasChildNodes()) {\r\n                this.divPropertiesPanel.removeChild(this.divPropertiesPanel.childNodes[0]);\r\n            }\r\n        }\r\n\r\n        // ADD\r\n        if (panelItem.getContent()) {\r\n            this.divPropertiesPanel.appendChild(panelItem.getContent());\r\n        }\r\n    }\r\n}\r\n\r\nexport class GeneratePanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n\r\n        let item: PanelItem = this.createTabElement('General', 'General', null);\r\n\r\n        // Workspace and generate code stuff\r\n        let inputGenerateWorkspace: HTMLInputElement =  <HTMLInputElement> Util.createHTML({tag: 'input', id: 'workspace', type: 'text', placeholder: 'Type your Folder for generated code...', value: 'src/main/java', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Folder:', inputGenerateWorkspace);\r\n\r\n        let inputGeneratePackage: HTMLInputElement = <HTMLInputElement> Util.createHTML({tag: 'input', id: 'package', type: 'text', placeholder: 'Type your workspace for generated code...', value: '', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Package:', inputGeneratePackage);\r\n\r\n        let options = document.createElement('div');\r\n        options.style.textAlign = 'center';\r\n        options.style.margin = '3';\r\n        options.style.padding = '5';\r\n\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(options);\r\n\r\n        options.style.borderStyle = 'groove';\r\n        options.style.borderRadius = '10px';\r\n\r\n        let btnGenerate = document.createElement('button');\r\n        btnGenerate.textContent = 'Generate';\r\n        btnGenerate.title = 'Generate code into your workspace';\r\n        btnGenerate.className = 'OptionElement';\r\n\r\n        let that = this;\r\n        btnGenerate.onclick = () => {\r\n            let workspace = inputGeneratePackage.value;\r\n            if (workspace.length === 0) {\r\n                alert('No workspace set.\\nEnter first your workspace');\r\n                inputGeneratePackage.focus();\r\n                return;\r\n            }\r\n            that.group.getGraph().generate(workspace, inputGenerateWorkspace.value);\r\n        };\r\n        options.appendChild(btnGenerate);\r\n        options.appendChild(document.createElement('hr'));\r\n        options.appendChild(document.createElement('br'));\r\n\r\n        let btnAutoLayout = Util.createHTML({tag: 'button', className: 'OptionElement', value: 'Auto Layout', style: {marginRight: '10px'}, onclick: () => {\r\n                that.group.getGraph().layout();\r\n            }});\r\n\r\n        options.appendChild(btnAutoLayout);\r\n\r\n        // delete all nodes\r\n        let btnDeleteAll = document.createElement('button');\r\n        btnDeleteAll.className = 'OptionElement';\r\n        btnDeleteAll.textContent = 'Delete All';\r\n        btnDeleteAll.title = 'Delete all nodes from diagram';\r\n\r\n        btnDeleteAll.onclick = () => {\r\n            let confirmDelete = confirm('All classes will be deleted!');\r\n            if (!confirmDelete) {\r\n                return;\r\n            }\r\n            that.group.getGraph().$graphModel.removeAllElements();\r\n        };\r\n        btnDeleteAll.style.marginRight = '10px';\r\n        options.appendChild(btnDeleteAll);\r\n\r\n        // export stuff\r\n        let exportTypes: string[] = ['Export', 'HTML', 'JSON', 'PDF', 'PNG', 'SVG'];\r\n        let selectExport = document.createElement('select');\r\n\r\n        exportTypes.forEach(type => {\r\n            if (!(!window['jsPDF'] && type === 'PDF')) {\r\n                let option = document.createElement('option');\r\n                option.value = type;\r\n                option.textContent = type;\r\n                selectExport.appendChild(option);\r\n            }\r\n        });\r\n\r\n        selectExport.onchange = (evt) => {\r\n            let selectedExportType = selectExport.options[selectExport.selectedIndex].value;\r\n            selectExport.selectedIndex = 0;\r\n            that.group.getGraph().saveAs(selectedExportType);\r\n        };\r\n        selectExport.className = 'OptionElement';\r\n        options.appendChild(selectExport);\r\n        options.appendChild(document.createElement('br'));\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Properties';\r\n    }\r\n\r\n}\r\n\r\nexport class ClearPanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Select any element to see its properties';\r\n    }\r\n}\r\n\r\nexport class PanelItem {\r\n    protected panel: Panel;\r\n    protected label: string;\r\n    protected button: HTMLButtonElement;\r\n    protected content: HTMLDivElement = <HTMLDivElement>Util.create({tag: 'div', className: 'tabContent'});\r\n\r\n    constructor(panel: Panel, label?: string) {\r\n        this.panel = panel;\r\n        this.label = label;\r\n    }\r\n\r\n    public active(): void {\r\n        if (this.getButton()) {\r\n            this.getButton().className += ' active';\r\n        }\r\n    }\r\n\r\n    public deactive(): void {\r\n        if (this.getButton()) {\r\n            Util.removeClass(this.getButton(), 'active');\r\n        }\r\n    }\r\n\r\n    public withButton(button: HTMLButtonElement): PanelItem {\r\n        this.button = button;\r\n        return this;\r\n    }\r\n\r\n    public withContent(element: HTMLElement): PanelItem {\r\n        this.content.appendChild(element);\r\n        return this;\r\n    }\r\n\r\n    public withInput(labelText: string, element: HTMLElement): PanelItem {\r\n        let group: HTMLDivElement = <HTMLDivElement> Util.createHTML({tag: 'div'});\r\n        let label = Util.createHTML({tag: 'label', for: element.id, value: labelText});\r\n        group.appendChild(label);\r\n        group.appendChild(element);\r\n\r\n        this.content.appendChild(group);\r\n        return this;\r\n    }\r\n\r\n    public getButton(): HTMLButtonElement {\r\n        return this.button;\r\n    }\r\n\r\n    public getContent(): HTMLDivElement {\r\n        return this.content;\r\n    }\r\n\r\n   public getHeader(): string {\r\n        return this.label;\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\nimport Data from './Data';\r\n\r\nexport class PropertyBinder implements PropertyChangeSupport {\r\n    private propertyClass1: string;\r\n    private propertyClass2: string;\r\n    private data1: Data;\r\n    private data2: Data;\r\n    // works like a lock\r\n    private applyingChange: boolean = false;\r\n\r\n    constructor(data1: Data, data2: Data, propertyClass1: string, propertyClass2: string) {\r\n        this.data1 = data1;\r\n        this.data2 = data2;\r\n        this.propertyClass1 = propertyClass1;\r\n        this.propertyClass2 = propertyClass2;\r\n    }\r\n    static bind(data1: Data, data2: Data, property1: string, property2: string) {\r\n        if (!data1 || !data2 || !property1) {\r\n            console.error('NullValue!!');\r\n            return null;\r\n        }\r\n        const propertyBinder = new PropertyBinder(data1, data2, property1, property2);\r\n        propertyBinder.bind();\r\n        return propertyBinder;\r\n    }\r\n\r\n    propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        if (!this.applyingChange) {\r\n            this.applyingChange = true;\r\n            if (entity === this.data1) {\r\n                // fire to data2\r\n                this.data2.setValue(this.propertyClass2, newValue);\r\n            } else if (entity === this.data2) {\r\n                // fire to data1\r\n                this.data1.setValue(this.propertyClass1, newValue);\r\n            }\r\n            this.applyingChange = false;\r\n        }\r\n    }\r\n\r\n    protected bind() {\r\n        // public addListener(control: Control, property?: string)\r\n        // todo: set value immediately\r\n        this.data1.setValue(this.propertyClass1, this.data2.getValue(this.propertyClass2));\r\n\r\n        this.data1.addListener(this, this.propertyClass1);\r\n        this.data2.addListener(this, this.propertyClass2);\r\n    }\r\n\r\n    protected unbind() {\r\n        // public addListener(control: Control, property?: string)\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n    }\r\n}\r\n","// ################################## RGBColor ####################################################\r\nexport class RGBColor {\r\n    public  ok: boolean;\r\n    public r: number;\r\n    public g: number;\r\n    public b: number;\r\n\r\n    constructor(value: string) {\r\n        this.ok = false;\r\n        if (value === 'none') {\r\n            return;\r\n        }\r\n        let computedColor, div = document.createElement('div');\r\n        div.style.backgroundColor = value;\r\n        document.body.appendChild(div);\r\n        computedColor = window.getComputedStyle(div).backgroundColor;\r\n        // cleanup temporary div.\r\n        document.body.removeChild(div);\r\n        this.convert(computedColor);\r\n    }\r\n    public convert(value: any) {\r\n        let values, regex = /rgb *\\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\\)/;\r\n        values = regex.exec(value);\r\n        this.r = parseInt(values[1], 10);\r\n        this.g = parseInt(values[2], 10);\r\n        this.b = parseInt(values[3], 10);\r\n        this.ok = true;\r\n    }\r\n\r\n    public toRGB(): string {return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; }\r\n    public toHex(): string {\r\n        return '#' + (this.r + 0x10000).toString(16).substring(3).toUpperCase() + (this.g + 0x10000).toString(16).substring(3).toUpperCase() + (this.b + 0x10000).toString(16).substring(3).toUpperCase();\r\n    }\r\n}\r\n","/*\r\n NetworkParser\r\n Copyright (c) 2011 - 2014, Stefan Lindel\r\n All rights reserved.\r\n\r\n Licensed under the EUPL, Version 1.1 or (as soon they\r\n will be approved by the European Commission) subsequent\r\n versions of the EUPL (the \"Licence\");\r\n You may not use this work except in compliance with the Licence.\r\n You may obtain a copy of the Licence at:\r\n\r\n http://ec.europa.eu/idabc/eupl5\r\n\r\n Unless required by applicable law or agreed to in\r\n writing, software distributed under the Licence is\r\n distributed on an \"AS IS\" basis,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\r\n express or implied.\r\n See the Licence for the specific language governing\r\n permissions and limitations under the Licence.\r\n*/\r\nimport {RGBColor} from './RGBColor';\r\nimport {JSEPS} from \"./JSEPS\";\r\n\r\nconst epsSvgAttr = {\r\n    // allowed attributes. all others are removed from the preview.\r\n    g: ['stroke', 'fill', 'stroke-width'],\r\n    line: ['x1', 'y1', 'x2', 'y2', 'stroke', 'stroke-width'],\r\n    rect: ['x', 'y', 'width', 'height', 'stroke', 'fill', 'stroke-width'],\r\n    ellipse: ['cx', 'cy', 'rx', 'ry', 'stroke', 'fill', 'stroke-width'],\r\n    circle: ['cx', 'cy', 'r', 'stroke', 'fill', 'stroke-width'],\r\n    text: ['x', 'y', 'font-size', 'font-family', 'text-anchor', 'font-weight', 'font-style', 'fill'],\r\n    path: ['']\r\n};\r\nexport class SVGConverter {\r\n    private k: number;\r\n    private remove: boolean;\r\n    private target: any;\r\n\r\n    constructor(element: any, target: any, options: any) {\r\n        this.k = 1.0;\r\n        let hasScale = typeof (options.scale), hasRemoveInvalid = typeof (options.removeInvalid);\r\n        this.k = (options && hasScale !== 'undefined' ? options.scale : 1.0);\r\n        this.remove = (options && hasRemoveInvalid !== 'undefined' ? options.removeInvalid : false);\r\n        this.target = target;\r\n        this.parse(element);\r\n    }\r\n\r\n    public parse(element: any) {\r\n        let el, i, n, colorMode, hasFillColor, fillRGB, fillColor, strokeColor, strokeRGB, fontType, pdfFontSize, x, y,\r\n            box, xOffset;\r\n        if (!element) {\r\n            return;\r\n        }\r\n        if (typeof element === 'string') {\r\n            el = document.createElement('div');\r\n            el.innerHTML = element;\r\n            element = el.childNodes[0];\r\n        }\r\n        for (i = 0; i < element.children.length; i += 1) {\r\n            n = element.children[i];\r\n            colorMode = null;\r\n            hasFillColor = false;\r\n            if ('g,line,rect,ellipse,circle,text'.indexOf(n.tagName) >= 0) {\r\n                fillColor = n.getAttribute('fill');\r\n                if (fillColor) {\r\n                    fillRGB = new RGBColor(fillColor);\r\n                    if (fillRGB.ok) {\r\n                        hasFillColor = true;\r\n                        colorMode = 'F';\r\n                    }\r\n                }\r\n            }\r\n            if ('g,line,rect,ellipse,circle'.indexOf(n.tagName) >= 0) {\r\n                if (hasFillColor) {\r\n                    this.target.setFillColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                }\r\n                strokeColor = n.getAttribute('stroke');\r\n                if (n.hasAttribute('stroke-width')) {\r\n                    this.target.setLineWidth(this.attr(n, 'stroke-width'));\r\n                }\r\n                if (strokeColor) {\r\n                    strokeRGB = new RGBColor(strokeColor);\r\n                    if (strokeRGB.ok) {\r\n                        this.target.setDrawColor(strokeRGB.r, strokeRGB.g, strokeRGB.b);\r\n                        if (colorMode === 'F') {\r\n                            colorMode = 'FD';\r\n                        } else if (!hasFillColor) {\r\n                            colorMode = 'S';\r\n                        }\r\n                    } else {\r\n                        colorMode = null;\r\n                    }\r\n                }\r\n            }\r\n            // console.log(\"write \"+n.tagName);\r\n            switch (n.tagName.toLowerCase()) {\r\n                case 'svg':\r\n                case 'a':\r\n                case 'g':\r\n                    this.parse(n);\r\n                    break;\r\n                case 'line':\r\n                    this.target.line(this.attr(n, 'x1'), this.attr(n, 'y1'), this.attr(n, 'x2'), this.attr(n, 'y2'));\r\n                    break;\r\n                case 'rect':\r\n                    this.target.rect(this.attr(n, 'x'), this.attr(n, 'y'), this.attr(n, 'width'), this.attr(n, 'height'), n.getAttribute('style'));\r\n                    break;\r\n                case 'ellipse':\r\n                    this.target.ellipse(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'rx'), this.attr(n, 'ry'), colorMode);\r\n                    break;\r\n                case 'circle':\r\n                    this.target.circle(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'r'), colorMode);\r\n                    break;\r\n                case 'text':\r\n                    if (n.hasAttribute('font-family')) {\r\n                        switch (n.getAttribute('font-family').toLowerCase()) {\r\n                            case 'serif':\r\n                                this.target.setFont('times');\r\n                                break;\r\n                            case 'monospace':\r\n                                this.target.setFont('courier');\r\n                                break;\r\n                            default:\r\n                                n.getAttribute('font-family', 'sans-serif');\r\n                                this.target.setFont('Helvetica');\r\n                        }\r\n                    }\r\n                    if (hasFillColor) {\r\n                        this.target.setTextColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                    }\r\n                    if (this.target instanceof JSEPS) {\r\n                        this.target.text(this.attr(n, 'x'), this.attr(n, 'y'), n.innerHTML);\r\n                        break;\r\n                    }\r\n                    fontType = '';\r\n                    if (n.hasAttribute('font-weight')) {\r\n                        if (n.getAttribute('font-weight') === 'bold') {\r\n                            fontType = 'bold';\r\n                        }\r\n                    }\r\n                    if (n.hasAttribute('font-style')) {\r\n                        if (n.getAttribute('font-style') === 'italic') {\r\n                            fontType += 'italic';\r\n                        }\r\n                    }\r\n                    this.target.setFontType(fontType);\r\n                    pdfFontSize = 16;\r\n                    if (n.hasAttribute('font-size')) {\r\n                        pdfFontSize = parseInt(n.getAttribute('font-size'), 10);\r\n                    }\r\n                    box = n.getBBox();\r\n                    // FIXME: use more accurate positioning!!\r\n                    x = this.attr(n, 'x');\r\n                    y = this.attr(n, 'y');\r\n                    xOffset = 0;\r\n                    if (n.hasAttribute('text-anchor')) {\r\n                        switch (n.getAttribute('text-anchor')) {\r\n                            case 'end':\r\n                                xOffset = box.width;\r\n                                break;\r\n                            case 'middle':\r\n                                xOffset = box.width / 2;\r\n                                break;\r\n                            case 'start':\r\n                                break;\r\n                            case 'default':\r\n                                n.getAttribute('text-anchor', 'start');\r\n                                break;\r\n                        }\r\n                        x = x - (xOffset * this.k);\r\n                    }\r\n                    this.target.setFontSize(pdfFontSize).text(x, y, n.innerHTML);\r\n                    break;\r\n                default:\r\n                    if (this.remove) {\r\n                        console.log('cant translate to target:', n);\r\n                        element.removeChild(n);\r\n                        i -= 1;\r\n                    }\r\n            }\r\n        }\r\n    }\r\n\r\n    public attr(node: any, name: string) {\r\n        return this.k * parseInt(node.getAttribute(name), 10);\r\n    }\r\n}\r\n","import {Control} from './Control';\r\n\r\nexport class ScrumBoard extends Control {\r\n    public static cards = [0, 0.5, 1, 2, 3, 5, 8, 13, 20, 40, 100, '?', 'Coffee'];\r\n    private $selected: HTMLDivElement;\r\n    private $board: HTMLDivElement;\r\n\r\n    constructor() {\r\n        super();\r\n        this.redraw();\r\n    }\r\n\r\n    public redraw(): void {\r\n        if (this.$board) {\r\n            while (this.$board.children.length > 0 ) {\r\n                this.$board.removeChild(this.$board.children[0]);\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('div');\r\n            this.$selected = document.createElement('div');\r\n            this.$board = document.createElement('div');\r\n            this.$view.appendChild(this.$board);\r\n            this.$view.appendChild(this.$selected);\r\n        }\r\n        this.$view.className = 'ScrumBoard';\r\n        for ( let i = 0; i < ScrumBoard.cards.length; i++) {\r\n            let card = document.createElement('div');\r\n            card.className = 'ScrumCard';\r\n            card.innerHTML = <string>ScrumBoard.cards[i];\r\n            card['pokervalue'] = <string>ScrumBoard.cards[i];\r\n            card.onclick = e => {\r\n                this.onClick(<HTMLDivElement>e.target);\r\n            };\r\n            this.$board.appendChild(card);\r\n        }\r\n    }\r\n\r\n    public getSVG() {\r\n        this.redraw();\r\n        return this.$view;\r\n    }\r\n\r\n    public onClick(target: HTMLDivElement): void {\r\n        console.log(target['pokervalue']);\r\n\r\n        while (this.$selected.children.length > 0 ) {\r\n            this.$selected.removeChild(this.$selected.children[0]);\r\n        }\r\n        let card = document.createElement('div');\r\n        card.className = 'ScrumCard';\r\n        card['pokervalue'] = target['pokervalue'];\r\n        card.onclick = e => {\r\n            this.onShow(<HTMLDivElement>e.target);\r\n        };\r\n        this.$selected.appendChild(card);\r\n        this.$board['style']['display'] = 'none';\r\n    }\r\n\r\n    public onShow(target: HTMLDivElement): void {\r\n        target.innerHTML = target['pokervalue'];\r\n    }\r\n}\r\n","import {Graph} from './main';\r\nimport {SymbolLibary} from './elements/nodes/Symbol';\r\nimport {EventBus} from './EventBus';\r\n\r\nexport class Toolbar {\r\n\r\n    private graph: Graph;\r\n    private mainDiv: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public show(): void {\r\n        if (this.mainDiv) {\r\n            return;\r\n        }\r\n\r\n        this.mainDiv = document.createElement('div');\r\n        this.mainDiv.className = 'toolbar';\r\n\r\n        let h1Logo = document.createElement('h1');\r\n        h1Logo.className = 'logo';\r\n        h1Logo.textContent = 'DiagramJS';\r\n\r\n        let node = {type: 'Hamburger', property: 'HTML', width: 24, height: 24, id: 'GenerateProp'};\r\n        let hamburger = SymbolLibary.draw( node);\r\n        EventBus.registerEvent(hamburger, 'click', node);\r\n        this.mainDiv.appendChild(hamburger);\r\n\r\n        this.mainDiv.appendChild(h1Logo);\r\n        document.body.appendChild(this.mainDiv);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 06.03.2017.\r\n */\r\nimport Data from './Data';\r\n\r\n// export default class Data {\r\n//    public values = {};\r\n//    id: string;\r\n//    $listener: Control[] = [];\r\n//    property: string;\r\nexport namespace UML {\r\n    export class Clazz extends Data {\r\n        public static NAME: string = 'name';\r\n        public static ATTRIBUTES: string = 'attributes';\r\n        public static METHODS: string = 'methods';\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Clazz';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n\r\n        public getAttributes() {\r\n            return this.prop[Clazz.ATTRIBUTES];\r\n        }\r\n\r\n        public addToAttributes(newValue: string) {\r\n            this.addTo(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n\r\n        public removeFromAttributes(newValue: string) {\r\n            this.removeFrom(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n    }\r\n\r\n    export class Attribute extends Data {\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Attribute';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n    }\r\n\r\n    export class Methods extends Data {\r\n\r\n    }\r\n}\r\n\r\nwindow['UML'] = UML;\r\n","import {Control} from './Control';\r\n\r\nexport class VirtualKeyBoard extends Control {\r\n    constructor(data: any) {\r\n        super();\r\n        if (!data) {\r\n            data = this.getDefault();\r\n        }\r\n        let board = document.createElement('div');\r\n        this.$viewData = data;\r\n\r\n        for (let type in data) {\r\n            if (type === 'normal') {\r\n                for (let line in data[type]) {\r\n                    let lineBoard = document.createElement('div');\r\n                    lineBoard.className = 'vkLine';\r\n                    for (let key in data[type][line]) {\r\n                        let btn: HTMLButtonElement = document.createElement('button');\r\n                        let keyTag = data[type][line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                        btn.ontouchend = () => {this.action(btn); };\r\n                        btn.onclick = () => {this.action(btn); };\r\n                        lineBoard.appendChild(btn);\r\n                    }\r\n                    board.appendChild(lineBoard);\r\n                }\r\n            }\r\n        }\r\n        this.$view = board;\r\n    }\r\n\r\n    public action(btn: HTMLButtonElement) {\r\n        if (btn['key'] === '{Shift}') {\r\n            if ( btn.className === 'vkbuttonAction') {\r\n                let keys = this.$viewData['normal'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                    }\r\n                }\r\n            } else if ( btn.className === 'vkbutton') {\r\n                let keys = this.$viewData['shift'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbuttonAction');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        alert(btn);\r\n    }\r\n\r\n    public getDefault(): any {\r\n        let format = {\r\n            normal: [\r\n                ['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '?', '´', '{Bksp}'],\r\n                ['{Tab}', 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+'],\r\n                ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '#', '{enter}'],\r\n                ['{Shift}', '<', 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n// '{left}', '{up}', '{down}','{right}', '{Cancel}']\r\n            ],\r\n            shift: [\r\n                ['°', '!', '\"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '`', '{Bksp}'],\r\n                ['{Tab}', 'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', 'O', 'P', 'Ü', '*'],\r\n                ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', '\\'', '{enter}'],\r\n                ['{Shift}', '>', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n            ]\r\n        };\r\n        return format;\r\n    }\r\n\r\n    public getBoard() {\r\n        return this.$view;\r\n    }\r\n\r\n    private setButtonValue(keyTag: string, btn: HTMLButtonElement, shiftClass: string) {\r\n        btn.className = 'vkbutton';\r\n        btn['key'] = keyTag;\r\n        btn['type'] = 'normal';\r\n        if (keyTag.substring(0, 1) === '{') {\r\n            if (keyTag === '{Bksp}') {\r\n                btn.innerHTML = 'Bksp';\r\n            } else if (keyTag === '{Tab}') {\r\n                btn.innerHTML = '&#8677; Tab';\r\n            } else if (keyTag === '{enter}') {\r\n                btn.innerHTML = 'enter';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Shift}') {\r\n                btn.innerHTML = 'Shift';\r\n                btn.className = shiftClass;\r\n            } else if (keyTag === '{Accept}') {\r\n                btn.innerHTML = 'Accept';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Alt}') {\r\n                btn.innerHTML = 'Alt';\r\n            } else if (keyTag === '{Space}') {\r\n                btn.innerHTML = '&nbsp;';\r\n                btn.className = 'vkbuttonSpace';\r\n            } else if (keyTag === '{left}') {\r\n                btn.innerHTML = '&#8592';\r\n            } else if (keyTag === '{right}') {\r\n                btn.innerHTML = '&#8594;';\r\n            } else if (keyTag === '{up}') {\r\n                btn.innerHTML = '&#8593;';\r\n            } else if (keyTag === '{down}') {\r\n                btn.innerHTML = '&#8595;';\r\n            } else if (keyTag === '{Cancel}') {\r\n                btn.innerHTML = 'Cancel';\r\n                btn.className = 'vkbuttonAction';\r\n            }\r\n        } else {\r\n            btn.innerHTML = keyTag;\r\n        }\r\n    }\r\n}\r\n","import {Adapter} from '../Adapter';\r\n\r\nexport class JavaAdapter extends Adapter {\r\n    constructor() {\r\n        super();\r\n        this.id = 'JavaAdapter';\r\n    }\r\n    update(evt: Object): boolean {\r\n        if (this.isActive()) {\r\n            window['JavaBridge'].executeChange(evt);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public isActive(): boolean {\r\n        return window['JavaBridge'];\r\n    }\r\n}\r\n","export * from './JavaAdapter';\r\n","import { Util } from '../util';\r\nimport { Control } from '../Control';\r\n\r\nexport interface Size {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\ninterface GraphElement {\r\n    getSize(): Point;\r\n\r\n    getPos(): Point;\r\n\r\n    getCenter(): Point;\r\n\r\n    getSVG(): Element;\r\n\r\n    getCanvas(): Element;\r\n\r\n    getEvents(): string[];\r\n\r\n    withPos(x: number, y: number): GraphElement;\r\n\r\n    load(data: any): any;\r\n\r\n    getToolBarIcon(): Element;\r\n\r\n    loadProperties(properties: any): void;\r\n}\r\n\r\nexport abstract class DiagramElement extends Control implements GraphElement {\r\n\r\n    protected $isDraggable: boolean = true;\r\n    protected $labelHeight = 25;\r\n    protected $labelFontSize = 14;\r\n    private $pos: Point = new Point();\r\n    private $size: Point = new Point();\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getPos(): Point {\r\n        return this.$pos;\r\n    }\r\n\r\n    public getSize(): Point {\r\n        return this.$size;\r\n    }\r\n\r\n    public getCenter(): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        return new Point(pos.x + size.x / 2, pos.y + size.y / 2);\r\n    }\r\n\r\n    public getCenterPosition(p: string): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let offset = this['$' + p];\r\n        let center = this.getCenter();\r\n        if (p === Point.DOWN) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y + size.y, Point.DOWN);\r\n        }\r\n        if (p === Point.UP) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y, Point.UP);\r\n        }\r\n        if (p === Point.LEFT) {\r\n            return new Point(pos.x, Math.min(center.y + offset, pos.y + size.y), Point.LEFT);\r\n        }\r\n        if (p === Point.RIGHT) {\r\n            return new Point(pos.x + size.x, Math.min(center.y + offset, pos.y + size.y), Point.RIGHT);\r\n        }\r\n        return new Point();\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getCanvas(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return null;\r\n    }\r\n\r\n    public getAlreadyDisplayingSVG(): Element {\r\n        return document.getElementById(this.id) || this.getSVG();\r\n    }\r\n\r\n    public load(data: any) {\r\n        // Do Nothing\r\n    }\r\n\r\n    public withPos(x: number, y: number): GraphElement {\r\n        if (x && y) {\r\n            this.$pos = new Point(x, y);\r\n        } else {\r\n            if (typeof (x) !== 'undefined' && x !== null) {\r\n                this.$pos.x = x;\r\n            }\r\n            if (typeof (y) !== 'undefined' && y !== null) {\r\n                this.$pos.y = y;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public withSize(width: number, height: number): DiagramElement {\r\n        if (width && height) {\r\n            this.$size = new Point(width, height);\r\n        } else {\r\n            if (typeof (width) !== 'undefined' && width !== null) {\r\n                this.$size.x = width;\r\n            }\r\n            if (typeof (height) !== 'undefined' && height !== null) {\r\n                this.$size.y = height;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        // FIXME if (this.status === 'close') {\r\n        // if (!this.$owner.isClosed()) {\r\n        //        return this;\r\n        //    }\r\n        // }\r\n        return super.getShowed();\r\n    }\r\n\r\n    public loadProperties(properties: any) {\r\n        // DO Nothing\r\n    }\r\n\r\n    protected createShape(attrs: any): Element {\r\n        return Util.createShape(attrs);\r\n    }\r\n}\r\n\r\nexport class Point {\r\n    public static UP: string = 'UP';\r\n    public static LEFT: string = 'LEFT';\r\n    public static RIGHT: string = 'RIGHT';\r\n    public static DOWN: string = 'DOWN';\r\n    x: number = 0;\r\n    y: number = 0;\r\n\r\n    //    pos:string = '';\r\n\r\n    constructor(x?: number, y?: number, pos?: string) {\r\n        this.x = Math.ceil(x || 0);\r\n        this.y = Math.ceil(y || 0);\r\n        if (pos) {\r\n            this['pos'] = pos;\r\n        }\r\n    }\r\n\r\n    public add(pos: Point) {\r\n        this.x += pos.x;\r\n        this.y += pos.y;\r\n        return this;\r\n    }\r\n\r\n    public getPosition(): string {\r\n        if (!this['pos']) {\r\n            return '';\r\n        }\r\n        return this['pos'];\r\n    }\r\n\r\n    public addNum(x: number, y: number) {\r\n        this.x += x;\r\n        this.y += y;\r\n        return this;\r\n    }\r\n\r\n    public sum(pos: Point) {\r\n        let sum = new Point(this.x, this.y);\r\n        sum.add(pos);\r\n        return sum;\r\n    }\r\n\r\n    public center(posA: Point, posB: Point) {\r\n        let count = 0;\r\n        if (posA) {\r\n            this.x += posA.x;\r\n            this.y += posA.y;\r\n            count++;\r\n        }\r\n        if (posB) {\r\n            this.x += posB.x;\r\n            this.y += posB.y;\r\n            count++;\r\n        }\r\n        if (count > 0) {\r\n            this.x = (this.x / count);\r\n            this.y = (this.y / count);\r\n        }\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        return this.x < 1 && this.y < 1;\r\n    }\r\n\r\n    public size(posA: Point, posB: Point) {\r\n        let x1 = 0, x2 = 0, y1 = 0, y2 = 0;\r\n        if (posA) {\r\n            x1 = posA.x;\r\n            y1 = posA.y;\r\n        }\r\n        if (posB) {\r\n            x2 = posB.x;\r\n            y2 = posB.y;\r\n        }\r\n        if (x1 > x2) {\r\n            this.x = x1 - x2;\r\n        } else {\r\n            this.x = x2 - x1;\r\n        }\r\n        if (y1 > y2) {\r\n            this.y = y1 - y2;\r\n        } else {\r\n            this.y = y2 - y1;\r\n        }\r\n    }\r\n}\r\n\r\n// \t\t\t\t######################################################### Line #########################################################\r\nexport class Line extends DiagramElement {\r\n    public static FORMAT = { SOLID: 'SOLID', DOTTED: 'DOTTED', PATH: 'PATH' };\r\n    public source: Point;\r\n    public target: Point;\r\n    public color: string;\r\n    public lineType: string;\r\n    private path: string;\r\n    private angle: Number;\r\n\r\n    constructor(lineType: string) {\r\n        super();\r\n        this.lineType = lineType;\r\n    }\r\n\r\n    public getTyp(): string {\r\n        return 'SVG';\r\n    }\r\n\r\n    public getPos() {\r\n        let pos = new Point();\r\n        pos.center(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public getSize() {\r\n        let pos = new Point();\r\n        pos.size(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public withColor(color: string): Line {\r\n        this.color = color;\r\n        return this;\r\n    }\r\n\r\n    public withSize(x: number, y: number): DiagramElement {\r\n        return this;\r\n    }\r\n\r\n    public withPath(path: Array<Point>, close: boolean, angle?: any): Line {\r\n        let i: number, d: string = 'M' + path[0].x + ' ' + path[0].y;\r\n        this.lineType = Line.FORMAT.PATH; // It is a Path not a Line\r\n        for (i = 1; i < path.length; i += 1) {\r\n            d = d + 'L ' + path[i].x + ' ' + path[i].y;\r\n        }\r\n        if (close) {\r\n            d = d + ' Z';\r\n            this.target = path[0];\r\n        } else {\r\n            this.target = path[path.length - 1];\r\n        }\r\n        this.path = d;\r\n        if (angle instanceof Number) {\r\n            this.angle = angle;\r\n        } else if (angle) {\r\n            // var lineangle, start = path[0], end = path[path.length - 1];\r\n            // lineangle = Math.atan2(end.y - start.y, end.x - start.x);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): SVGGElement {\r\n        if (this.lineType === 'PATH') {\r\n            return <SVGGElement>Util.create({\r\n                tag: 'path',\r\n                'd': this.path,\r\n                'fill': this.color,\r\n                stroke: '#000',\r\n                'stroke-width': '1px'\r\n            });\r\n        }\r\n        let line: SVGGElement = <SVGGElement>Util.create({\r\n            tag: 'line',\r\n            'x1': this.source.x,\r\n            'y1': this.source.y,\r\n            'x2': this.target.x,\r\n            'y2': this.target.y,\r\n            'stroke': Util.getColor(this.color)\r\n        });\r\n        if (this.lineType && this.lineType.toLowerCase() === 'dotted') {\r\n            line.setAttribute('stroke-miterlimit', '4');\r\n            line.setAttribute('stroke-dasharray', '1,1');\r\n        }\r\n        return line;\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport Options from '../Options';\r\nimport {JavaAdapter} from '../adapters';\r\n\r\nexport class ClassEditor extends Graph {\r\n    private adapter: JavaAdapter;\r\n    constructor(json: any, options: Options) {\r\n        if (!options ) {\r\n            options = {};\r\n        }\r\n        options.canvas = options.canvas || 'canvas';\r\n        // options.origin = options.origin || new Point(150, 45);\r\n//            layout: \"DagreLayout\",\r\n        options.autoSave = options.autoSave || true;\r\n        if (!options.features) {\r\n            options.features = {\r\n                drag: true,\r\n                editor: true,\r\n                palette: true,\r\n                select: true,\r\n                zoom: true,\r\n                toolbar: true,\r\n                import: true,\r\n                properties: true,\r\n                addnode: true,\r\n                newedge: true\r\n            };\r\n        }\r\n        super(json, options);\r\n    }\r\n\r\n    public setBoardStyle(value: string) {\r\n        console.log(value);\r\n        this.importFile.setBoardStyle(value);\r\n    }\r\n\r\n    public registerListener(): void {\r\n        this.adapter = new JavaAdapter();\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return this.adapter;\r\n    }\r\n}\r\n","import * as edges from './edges';\r\nimport { Association } from './edges';\r\nimport * as nodes from './nodes';\r\nimport * as layouts from '../layouts';\r\nimport Layout from '../layouts/Layout';\r\nimport { GraphModel } from './Model';\r\nimport { Point, Size } from './BaseElements';\r\nimport { Util } from '../util';\r\nimport { Control } from '../Control';\r\nimport Data from '../Data';\r\nimport { EventBus } from '../EventBus';\r\nimport { AddNode, Drag, NewEdge, Select, Zoom } from '../handlers';\r\nimport Options from '../Options';\r\nimport { ImportFile } from '../handlers/ImportFile';\r\nimport { CSS } from '../CSS';\r\nimport { DiagramElement } from './index';\r\nimport { Toolbar } from '../Toolbar';\r\nimport {JSEPS} from '../JSEPS';\r\nimport {SVGConverter} from '../SVGConverter';\r\nimport Palette from '../Palette';\r\nimport {PanelGroup} from '../PropertiesPanel';\r\n\r\nexport class Graph extends Control {\r\n    // canvas: HTMLElement;\r\n    root: SVGElement;\r\n    $graphModel: GraphModel;\r\n    options: Options;\r\n    canvasSize: Size;\r\n    nodeFactory: Object;\r\n    edgeFactory: Object;\r\n    layoutFactory: Object;\r\n    protected importFile: ImportFile;\r\n    private currentlayout: Layout;\r\n    // private layerToolBar: SVGSVGElement;\r\n    // https://stackoverflow.com/questions/15181452/how-to-save-export-inline-svg-styled-with-css-from-browser-to-image-file\r\n    private containerElements = ['svg', 'g'];\r\n    private relevantStyles = {\r\n        'rect': ['fill', 'stroke', 'stroke-width'],\r\n        'path': ['fill', 'stroke', 'stroke-width', 'opacity'],\r\n        'circle': ['fill', 'stroke', 'stroke-width'],\r\n        'line': ['stroke', 'stroke-width'],\r\n        'text': ['fill', 'font-size', 'text-anchor', 'font-family'],\r\n        'polygon': ['stroke', 'fill']\r\n    };\r\n\r\n    constructor(json: any, options: Options) {\r\n        super();\r\n        json = json || {};\r\n        if (json['data']) {\r\n            options = json['options'];\r\n            json = json['data'];\r\n            this.id = json['id'];\r\n        }\r\n        this.options = options || {features: { drag: true}};\r\n        if (json['init']) {\r\n            return;\r\n        }\r\n        if (!this.options.origin) {\r\n            this.options.origin = new Point(150, 45);\r\n        }\r\n        if (!this.options.style) {\r\n            // Style can be classic or modern\r\n            this.options.style = 'classic';\r\n        }\r\n        if (this.options.autoSave) {\r\n            Util.isAutoSave = options.autoSave;\r\n        }\r\n\r\n        this.initFactories();\r\n        this.initCanvas();\r\n        this.initFeatures(this.options.features);\r\n\r\n        // load previous session, if user wants it\r\n        // otherwise load the json data\r\n        if (!this.lookupInLocalStorage()) {\r\n            this.load(json);\r\n        }\r\n\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    public lookupInLocalStorage(): boolean {\r\n        if (!this.options.autoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (!Util.isLocalStorageSupported()) {\r\n            return false;\r\n        }\r\n        let diagram = Util.getDiagramFromLocalStorage();\r\n        if (diagram && diagram.length > 0) {\r\n            if (confirm('Restore previous session?')) {\r\n                let jsonData: JSON = JSON.parse(diagram);\r\n                this.load(jsonData);\r\n                this.layout();\r\n                return true;\r\n            } else {\r\n                Util.saveToLocalStorage( null);\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public fitSizeOnNodes(): void {\r\n        let maxWidth: number = 0;\r\n        let maxHeight: number = 0;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            let nodePos = node.getPos();\r\n            let nodeSize = node.getSize();\r\n            let nodeWidestPosX = nodePos.x + nodeSize.x;\r\n            let nodeWidestPosY = nodePos.y + nodeSize.y;\r\n\r\n            if (nodeWidestPosX > maxWidth) {\r\n                maxWidth = nodeWidestPosX;\r\n            }\r\n\r\n            if (nodeWidestPosY > maxHeight) {\r\n                maxHeight = nodeWidestPosY;\r\n            }\r\n        }\r\n\r\n        this.root.setAttributeNS(null, 'width', '' + (maxWidth + 100));\r\n        this.root.setAttributeNS(null, 'height', '' + (maxHeight + 50));\r\n    }\r\n\r\n    public saveAs(typ: string) {\r\n        typ = typ.toLowerCase();\r\n\r\n        // shrink size of graph to minimum. only to show up nodes\r\n        const currentSize = this.getRootSize();\r\n        this.fitSizeOnNodes();\r\n\r\n        if (typ === 'svg') {\r\n            this.exportSvg();\r\n        } else if (typ === 'png') {\r\n            this.exportPng();\r\n        } else if (typ === 'html') {\r\n            this.exportHtml();\r\n\r\n        } else if (typ === 'pdf') {\r\n            this.exportPdf();\r\n            // } else if (typ === 'eps') {\r\n            // this.ExportEPS();\r\n        }\r\n        else if (typ === 'json') {\r\n            this.exportJson();\r\n        }\r\n\r\n        // set the size back to default\r\n        this.root.setAttributeNS(null, 'width', '' + currentSize.width);\r\n        this.root.setAttributeNS(null, 'height', '' + currentSize.height);\r\n    }\r\n\r\n    /**\r\n     * generates a blob file and makes it available for download.\r\n     * @param type type of file\r\n     * @param data raw data\r\n     * @param name name of download file\r\n     */\r\n    public save(type: string, data: any, name: string, context: string) {\r\n        if (window['java']) {\r\n            window['java'].export(type, data, name, context);\r\n            return;\r\n        }\r\n        let a = document.createElement('a');\r\n        a.href = window.URL.createObjectURL(new Blob([data], { type: context }));\r\n        a.download = name;\r\n        document.body.appendChild(a);\r\n        a.click();\r\n        document.body.removeChild(a);\r\n    }\r\n\r\n    /** Exports the diagram as svg. */\r\n    public exportSvg(): void {\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        this.save('svg', this.serializeXmlNode(wellFormatedSvgDom), 'class_diagram.svg', 'image/svg+xml');\r\n    }\r\n\r\n    /** Exports the diagram as html. */\r\n    public exportHtml(): void {\r\n        let htmlFacade = '<html><head><title>DiagramJS - Classdiagram</title></head><body>$content</body></html>';\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        let svgAsXml = this.serializeXmlNode(wellFormatedSvgDom);\r\n\r\n        let htmlResult = htmlFacade.replace('$content', svgAsXml);\r\n\r\n        this.save('html', htmlResult, 'class_diagram.htm', 'text/plain');\r\n    }\r\n\r\n    /** Exports the diagram as json. */\r\n    public exportJson(): void {\r\n        let type = 'text/plain';\r\n        let jsonObj = Util.toJson(this.$graphModel);\r\n        let data = JSON.stringify(jsonObj, null, '\\t');\r\n\r\n        this.save('json', data, 'class_diagram.json', type);\r\n    }\r\n\r\n    /** Exports the diagram as pdf. */\r\n    public exportPdf(): void {\r\n        if (!window['jsPDF']) {\r\n            console.log('jspdf n.a.');\r\n            return;\r\n        }\r\n        let type = 'image/svg+xml';\r\n        let converter, pdf = new window['jsPDF']('l', 'px', [this.$graphModel.getSize().x, this.$graphModel.getSize().y]);\r\n        converter = new SVGConverter(this.$view, pdf, {removeInvalid: false});\r\n        pdf.save('Download.pdf');\r\n/*        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let canvas, context, a, image = new Image();\r\n        let size = this.getRootSize();\r\n\r\n        // create the loaded img source into a canvas. to generate a picture. then place this picture in the pdf\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            let pdf = new window['jsPDF']();\r\n\r\n            pdf.addImage(canvas.toDataURL('image/jpeg'), 'jpeg', 15, 40, 180, 160);\r\n            pdf.save('class_diagram.pdf');\r\n\r\n        };\r\n\r\n        image.src = url;\r\n        */\r\n    }\r\n\r\n    public import(data: string): void {\r\n        let rootElement = this.$graphModel.$view;\r\n        while (rootElement.hasChildNodes()) {\r\n            rootElement.removeChild(rootElement.firstChild);\r\n        }\r\n\r\n        while (this.$view.hasChildNodes()) {\r\n            this.$view.removeChild(this.$view.firstChild);\r\n        }\r\n\r\n        this.clearModel();\r\n        let jsonData = JSON.parse(data);\r\n        this.load(jsonData);\r\n        this.layout();\r\n    }\r\n\r\n    public exportEPS(): void {\r\n          let converter, doc = new JSEPS({inverting: true});\r\n            converter = new SVGConverter(this.$view, doc, {removeInvalid: false});\r\n            this.save('eps', doc.getData(), 'diagram.eps', doc.getType());\r\n    }\r\n\r\n    /** Exports the diagram as png. */\r\n    public exportPng(): void {\r\n        let canvas, context, a, image = new Image();\r\n        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let typ = 'image/svg+xml';\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let size = this.getRootSize();\r\n\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            a = document.createElement('a');\r\n            a.download = 'class_diagram.png';\r\n            a.href = canvas.toDataURL('image/png');\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            document.body.removeChild(a);\r\n        };\r\n\r\n        image.src = url;\r\n\r\n    }\r\n\r\n    public getSvgWithStyleAttributes(): Node {\r\n        let oDOM = this.$graphModel.$view.cloneNode(true);\r\n        this.readElement(oDOM, this.$graphModel.$view);\r\n\r\n        return oDOM;\r\n    }\r\n\r\n    public serializeXmlNode(xmlNode: any) {\r\n        if (window['XMLSerializer'] !== undefined) {\r\n            return (new window['XMLSerializer']()).serializeToString(xmlNode);\r\n        }\r\n        if (xmlNode.xml !== undefined) {\r\n            return xmlNode.xml;\r\n        }\r\n        return xmlNode.outerHTML;\r\n    }\r\n\r\n    public getRootSize(): Size {\r\n        let width: number;\r\n        let height: number;\r\n        width = +this.root.getAttribute('width');\r\n        height = +this.root.getAttribute('height');\r\n\r\n        return { width: width, height: height };\r\n    }\r\n\r\n        // Graph.prototype.ExportEPS = function () {\r\n        //     var converter, doc = new svgConverter.jsEPS({inverting: true});\r\n        //     converter = new svgConverter(this.board, doc, {removeInvalid: false});\r\n        //     doc.save();\r\n        // };\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        this.$graphModel = new GraphModel();\r\n        this.$graphModel.init(this);\r\n        this.$graphModel.load(json);\r\n    }\r\n\r\n    public clearModel(): void {\r\n        this.$graphModel.removeAllElements();\r\n        this.clearSvgRoot();\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.layout();\r\n        return this;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        return;\r\n    }\r\n\r\n    public getNextFreePosition(): Point {\r\n\r\n        if (!this.$graphModel) {\r\n            return new Point(50, 50);\r\n        }\r\n\r\n        let point = new Point(0, 50);\r\n\r\n        let maxX = 0;\r\n        let minX = 9000;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            maxX = Math.max(maxX, node.getPos().x);\r\n            minX = Math.min(minX, node.getPos().x);\r\n        }\r\n\r\n        if (minX > 170) {\r\n            point.x = 10;\r\n        }\r\n        else {\r\n            point.x = maxX + 200;\r\n        }\r\n\r\n        return point;\r\n    }\r\n\r\n    public addElement(type: string, dontDraw?: boolean): boolean {\r\n        let success = this.$graphModel.addElement(type);\r\n        if (success === true) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return success;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues?: Object, layout?: boolean, dontDraw?: boolean): DiagramElement {\r\n        let element = this.$graphModel.addElementWithValues(type, optionalValues);\r\n        if (element && layout) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public layout(dontDraw?: boolean): Graph {\r\n        this.getLayout().layout(this, this.$graphModel);\r\n\r\n        if (dontDraw) {\r\n            return this;\r\n        }\r\n\r\n        this.draw();\r\n        return this;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTDRAGOVER, EventBus.ELEMENTDRAGLEAVE, EventBus.ELEMENTDROP];\r\n    }\r\n\r\n    public draw() {\r\n        this.clearSvgRoot();\r\n        let model = this.$graphModel;\r\n        let root = this.root;\r\n        let max: Point = new Point();\r\n        if (this.options) {\r\n            max.x = this.options.minWidth || 0;\r\n            max.y = this.options.minHeight || 0;\r\n        }\r\n\r\n        for (let node of model.nodes) {\r\n            let svg = node.getSVG();\r\n            EventBus.register(node, svg);\r\n            root.appendChild(svg);\r\n\r\n            let temp: number;\r\n            temp = node.getPos().x + node.getSize().x;\r\n            if (temp > max.x) {\r\n                max.x = temp;\r\n            }\r\n            temp = node.getPos().y + node.getSize().y;\r\n            if (temp > max.y) {\r\n                max.y = temp;\r\n            }\r\n\r\n        }\r\n        Util.setAttributeSize(this.root, max.x + 60, max.y + 40);\r\n\r\n        for (let edge of model.edges) {\r\n            let svg = edge.getSVG();\r\n            EventBus.register(edge, svg);\r\n            root.appendChild(svg);\r\n        }\r\n    }\r\n\r\n    public getNode(id: string) {\r\n        return this.$graphModel.getNodeById(id);\r\n    }\r\n\r\n    public drawElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let svg = element.getSVG();\r\n        this.root.appendChild(svg);\r\n\r\n        // actualize root width size, if neccessary\r\n        // get current width of root\r\n        let rootSize = this.getRootSize();\r\n        let newWidth = element.getPos().x + element.getSize().x + 40;\r\n        let newHeight = element.getPos().y + element.getSize().y;\r\n\r\n        if (rootSize.width < newWidth) {\r\n            this.root.setAttributeNS(null, 'width', '' + newWidth);\r\n        }\r\n\r\n        if (rootSize.height < newHeight) {\r\n            this.root.setAttributeNS(null, 'height', '' + newHeight);\r\n        }\r\n\r\n        // draw edge\r\n        if (element instanceof Association) {\r\n            let edge = <Association>element;\r\n            edge.redraw(edge.$sNode);\r\n            let srcSvg = element.$sNode.getAlreadyDisplayingSVG();\r\n            let targetSvg = element.$tNode.getAlreadyDisplayingSVG();\r\n\r\n            this.root.appendChild(srcSvg);\r\n            this.root.appendChild(targetSvg);\r\n        }\r\n\r\n        EventBus.register(element, svg);\r\n    }\r\n\r\n    public removeElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let alreadyDisplayingSvg = element.getAlreadyDisplayingSVG();\r\n        if (Util.isParentOfChild(this.root, alreadyDisplayingSvg)) {\r\n            this.root.removeChild(alreadyDisplayingSvg);\r\n        }\r\n    }\r\n\r\n    public generate(packageName: string, path?: string) {\r\n        this.$graphModel.package = packageName;\r\n        this.$graphModel.genPath = path;\r\n\r\n        let data, result = Util.toJson(this.$graphModel);\r\n        data = JSON.stringify(result, null, '\\t');\r\n        if (window['java'] && typeof window['java'].generate === 'function') {\r\n            window['java'].generate(data);\r\n        }\r\n    }\r\n// REFACTORING dd\r\n    private readElement(parent: any, origData: any): void {\r\n        let children = parent.childNodes;\r\n        let origChildDat = origData.childNodes;\r\n\r\n        for (let cd = 0; cd < children.length; cd++) {\r\n            let child = children[cd];\r\n\r\n            let tagName = child.tagName;\r\n            if (this.containerElements.indexOf(tagName) !== -1) {\r\n                this.readElement(child, origChildDat[cd]);\r\n            } else if (tagName in this.relevantStyles) {\r\n                let styleDef = window.getComputedStyle(origChildDat[cd]);\r\n\r\n                let styleString = '';\r\n                for (let st = 0; st < this.relevantStyles[tagName].length; st++) {\r\n                    styleString += this.relevantStyles[tagName][st] + ':' + styleDef.getPropertyValue(this.relevantStyles[tagName][st]) + '; ';\r\n                }\r\n\r\n                child.setAttribute('style', styleString);\r\n            }\r\n        }\r\n    }\r\n\r\n    private createPattern(): Element {\r\n        const defs = Util.createShape({ tag: 'defs' });\r\n        const pattern = Util.createShape({\r\n            tag: 'pattern',\r\n            id: 'raster',\r\n            patternUnits: 'userSpaceOnUse',\r\n            width: 40,\r\n            height: 40\r\n        });\r\n        const path = 'M0 4 L0 0 L4 0 M36 0 L40 0 L40 4 M40 36 L40 40 L36 40 M4 40 L0 40 L0 36';\r\n        const cross = Util.createShape({\r\n            tag: 'path',\r\n            d: path,\r\n            stroke: '#DDD',\r\n            'stroke-width': 1,\r\n            fill: 'none'\r\n        });\r\n\r\n        const rect = Util.createShape({\r\n            tag: 'rect',\r\n            x: 0,\r\n            y: 0,\r\n            width: 40,\r\n            height: 40,\r\n            fill: 'none'\r\n        });\r\n        pattern.appendChild(rect);\r\n        pattern.appendChild(cross);\r\n        defs.appendChild(pattern);\r\n        return defs;\r\n    }\r\n\r\n    private clearSvgRoot() {\r\n        const root = this.root;\r\n        this.$graphModel.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n        while (root.firstChild) {\r\n            root.removeChild(root.firstChild);\r\n        }\r\n\r\n        root.appendChild(this.createPattern());\r\n        let fillValue = 'none';\r\n        if (this.options.raster) {\r\n            fillValue = 'url(#raster)';\r\n        }\r\n        let background = Util.createShape({\r\n            tag: 'rect',\r\n            id: 'background',\r\n            width: 5000,\r\n            height: 5000,\r\n            x: 0,\r\n            y: 0,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: fillValue\r\n        });\r\n        root.appendChild(background);\r\n\r\n        // delete inline Edit, if exists\r\n        let inlineEdit = document.getElementById('inlineEdit');\r\n        if (inlineEdit && document.body.contains(inlineEdit)) {\r\n            document.body.removeChild(inlineEdit);\r\n        }\r\n    }\r\n\r\n    private getLayout(): Layout {\r\n        if (this.currentlayout) {\r\n            return this.currentlayout;\r\n        }\r\n\r\n        let layout = this.options.layout || '';\r\n        if (this.layoutFactory[layout]) {\r\n            this.currentlayout = new this.layoutFactory[layout]();\r\n        } else {\r\n            this.currentlayout = new layouts.DagreLayout();\r\n        }\r\n\r\n        return this.currentlayout;\r\n    }\r\n\r\n    private initFactories() {\r\n\r\n        let noder = nodes;\r\n        this.nodeFactory = {};\r\n        for (let id in noder) {\r\n            if (noder.hasOwnProperty(id) === true) {\r\n                this.nodeFactory[id] = noder[id];\r\n            }\r\n        }\r\n\r\n        let edger = edges;\r\n        this.edgeFactory = {};\r\n        for (let id in edger) {\r\n            if (edger.hasOwnProperty(id) === true) {\r\n                this.edgeFactory[id] = edger[id];\r\n            }\r\n        }\r\n\r\n        let layouter = layouts;\r\n        this.layoutFactory = {};\r\n        for (let id in layouter) {\r\n            if (layouter.hasOwnProperty(id) === true) {\r\n                this.layoutFactory[id] = layouter[id];\r\n            }\r\n        }\r\n    }\r\n\r\n    private initCanvas() {\r\n        if (this.options.canvas) {\r\n            this.$view = document.getElementById(this.options.canvas);\r\n        }\r\n        if (!this.$view) {\r\n            this.$view = document.createElement('div');\r\n            this.$view.setAttribute('class', 'diagram');\r\n            document.body.appendChild(this.$view);\r\n        }\r\n    }\r\n\r\n    private initFeatures(features: any) {\r\n\r\n        if (features) {\r\n            if (features.newedge) {\r\n                EventBus.subscribe(new NewEdge(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            this.importFile = new ImportFile(this);\r\n            if (features.import) {\r\n                EventBus.subscribe(this.importFile, 'dragover', 'dragleave', 'drop');\r\n            }\r\n            if (features.zoom) {\r\n                let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n                EventBus.subscribe(new Zoom(this), mousewheel);\r\n            }\r\n            if (features.drag) {\r\n                EventBus.subscribe(new Drag(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            if (features.select) {\r\n                EventBus.subscribe(new Select(this), 'click', 'drag');\r\n            }\r\n            if (features.palette) {\r\n                new Palette(this).show();\r\n            }\r\n            if (features.toolbar) {\r\n                new Toolbar(this).show();\r\n            }\r\n            if (features.properties) {\r\n                let propertyPanel = new PanelGroup(this);\r\n                // let dispatcher = new PropertiesDispatcher(this);\r\n                EventBus.subscribe(propertyPanel, 'dblclick', 'click', EventBus.RELOADPROPERTIES);\r\n                propertyPanel.show();\r\n            }\r\n            if (features.addnode) {\r\n                EventBus.subscribe(new AddNode(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n        }\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport {DiagramElement, Point} from './BaseElements';\r\nimport {Association} from './edges';\r\nimport {Node} from './nodes';\r\nimport {Control} from '../Control';\r\nimport {Util} from '../util';\r\nimport {EventBus} from '../EventBus';\r\n\r\nexport class GraphModel extends DiagramElement {\r\n    nodes: Node[] = [];\r\n    edges: Association[] = [];\r\n    package: string;\r\n    genPath: string;\r\n    $isLoading: boolean;\r\n\r\n    public load(data?: any) {\r\n\r\n        this.$isLoading = true;\r\n        data = data || {};\r\n        this.property = data.type || data.property || 'classdiagram';\r\n        this.id = 'RootElement';\r\n        if (data.nodes) {\r\n            for (let node of data.nodes) {\r\n                this.addNode(node);\r\n            }\r\n        }\r\n        if (data.edges) {\r\n            for (let edge of data.edges) {\r\n                this.addEdge(edge);\r\n            }\r\n        }\r\n\r\n        this.$isLoading = false;\r\n    }\r\n\r\n    public getNodeByPosition(x: number, y: number): Node {\r\n        for (let node of this.nodes) {\r\n            let posOfNode: Point = (<Node>node).getPos();\r\n            let sizeOfNode: Point = (<Node>node).getSize();\r\n\r\n            if ((posOfNode.x <= x && (posOfNode.x + sizeOfNode.x) >= x)\r\n                && (posOfNode.y <= y && (posOfNode.y + sizeOfNode.y) >= y)) {\r\n                return node;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.initCanvas();\r\n        return this;\r\n    }\r\n\r\n    public addElement(type: string): boolean {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n        if (element) {\r\n            Util.saveToLocalStorage(this);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues: Object): DiagramElement {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n\r\n        // position\r\n        if (optionalValues) {\r\n            if (optionalValues.hasOwnProperty('x') && optionalValues.hasOwnProperty('y')) {\r\n                let x = optionalValues['x'];\r\n                let y = optionalValues['y'];\r\n                element.withPos(x, y);\r\n            }\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return element;\r\n    }\r\n\r\n    public removeAllElements(): void {\r\n\r\n        let nodesLength = this.nodes.length;\r\n        for (let i = 0; i < nodesLength; i++) {\r\n            this.removeElement(this.nodes[0].id);\r\n        }\r\n\r\n        this.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n    }\r\n\r\n    public removeElement(id: string): boolean {\r\n\r\n        let element = this.getDiagramElementById(id);\r\n        if (!element) {\r\n            return false;\r\n        }\r\n\r\n        (<Graph>this.$owner).removeElement(element);\r\n\r\n        if (element instanceof Node) {\r\n\r\n            let idxOfNode = this.nodes.indexOf(element);\r\n            if (idxOfNode > -1) {\r\n                this.nodes.splice(idxOfNode, 1);\r\n            }\r\n\r\n            while (element.$edges.length > 0) {\r\n                this.removeElement(element.$edges[0].id);\r\n            }\r\n\r\n            element.$edges = [];\r\n        }\r\n        else if (element instanceof Association) {\r\n\r\n            let idxOfEdge = this.edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                this.edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from source\r\n            idxOfEdge = element.$sNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$sNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from target\r\n            idxOfEdge = element.$tNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$tNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return true;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        const size = 10;\r\n        const path = `M${-size} 0 L${+size} 0 M0 ${-size} L0 ${+size}`;\r\n\r\n        const attr = {\r\n            tag: 'path',\r\n            id: 'origin',\r\n            d: path,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: 'none'\r\n        };\r\n        let shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: 0 - size,\r\n            y: 0 - size / 1.5,\r\n            'text-anchor': 'end',\r\n            'font-family': 'Verdana',\r\n            'font-size': '9',\r\n            fill: '#999'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = '(0, 0)';\r\n\r\n        let group = this.createShape({tag: 'g'});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEUP, EventBus.ELEMENTMOUSELEAVE, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTMOUSEWHEEL, EventBus.ELEMENTCLICK, EventBus.ELEMENTDRAG];\r\n    }\r\n\r\n    public getNewId(prefix?: string): string {\r\n        let id = (prefix ? prefix.toLowerCase() + '-' : '') + Math.floor(Math.random() * 100000);\r\n        return id;\r\n    }\r\n\r\n    public getEdgeById(id: string): Association {\r\n        for (let edge of this.edges) {\r\n            if (edge.id === id) {\r\n                return edge;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    public getDiagramElementById(id: string): DiagramElement {\r\n\r\n        return this.getNodeById(id) || this.getEdgeById(id);\r\n    }\r\n\r\n    /**\r\n     * Add an edge with data in json file. Optional you can say, that the edge should have\r\n     * the points of source node and target node.\r\n     * @param edge information about edge in json\r\n     * @param withPosOfNodes optional. set points to line of source and target node\r\n     */\r\n    public addEdge(edge: any, withPosOfNodes?: boolean): Association {\r\n\r\n        // lookup in factoryedges and check if the edge type realy exists\r\n        if (edge && edge.type) {\r\n            const graph = (<Graph>this.$owner);\r\n            let typeExists = false;\r\n            for (let edgeType in graph.edgeFactory) {\r\n                if (edgeType === edge.type) {\r\n                    typeExists = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!typeExists) {\r\n                edge.type = 'Association';\r\n            }\r\n        }\r\n\r\n        let type = edge.type || 'Association';\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n\r\n        let newEdge = <Association>this.createElement(type, id, edge);\r\n        newEdge.type = type;\r\n\r\n        let source: Node;\r\n        let sourceAsString: string = edge.source.id || edge.source;\r\n        if (sourceAsString) {\r\n            source = this.getNodeById(sourceAsString);\r\n            if (!source) {\r\n                let nodeID = edge.source;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                source = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                source.init(this);\r\n            }\r\n        }\r\n\r\n        let target: Node;\r\n        let targetAsString: string = edge.target.id || edge.target;\r\n        if (targetAsString) {\r\n            target = this.getNodeById(targetAsString);\r\n            if (!target) {\r\n                let nodeID = edge.target;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                target = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                target.init(this);\r\n            }\r\n        }\r\n\r\n        newEdge.withItem(source, target);\r\n\r\n        if (withPosOfNodes) {\r\n            let srcX = source.getPos().x + (source.getSize().x / 2);\r\n            let srcY = source.getPos().y + (source.getSize().y / 2);\r\n\r\n            let targetX = target.getPos().x + (target.getSize().x / 2);\r\n            let targetY = target.getPos().y + (target.getSize().y / 2);\r\n\r\n            newEdge.addPoint(srcX, srcY);\r\n            newEdge.addPoint(targetX, targetY);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public createElement(type: string, id: string, data: Object): DiagramElement {\r\n        const graph = <Graph>this.$owner;\r\n        let element: DiagramElement;\r\n        if (graph.nodeFactory[type]) {\r\n            element = new graph.nodeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.nodes.push(<Node>element);\r\n        }\r\n        if (graph.edgeFactory[type]) {\r\n            element = new graph.edgeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.edges.push(<Association>element);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public getNodeById(id: string): Node {\r\n        for (let node of this.nodes) {\r\n            if (node.id === id) {\r\n                return node;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    private initCanvas() {\r\n        const graph = <Graph>this.$owner;\r\n        graph.canvasSize = {width: graph.$view.clientWidth, height: graph.$view.clientHeight};\r\n        graph.root = Util.createShape({\r\n            tag: 'svg',\r\n            id: 'root',\r\n            width: graph.canvasSize.width,\r\n            height: graph.canvasSize.height\r\n            // FIXME,viewBox: `${this.$graph.options.origin.x * -1} ${this.$graph.options.origin.y * -1} ${this.$graph.canvasSize.width} ${this.$graph.canvasSize.height}`\r\n        });\r\n        this.$view = graph.root;\r\n        graph.$view.appendChild(graph.root);\r\n\r\n        let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    private addNode(node: Node): Node {\r\n        let type = node['type'] || node.property || 'Node';\r\n        type = Util.toPascalCase(type);\r\n        let id = node['id'] || node['name'] || this.getNewId(type);\r\n\r\n        return <Node>this.createElement(type, id, node);\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction } from './index';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\n\r\nexport abstract class Aggregate extends Association {\r\n\r\n    protected $diamond: Element;\r\n\r\n    public getSVG(): Element {\r\n\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled diamond\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n        };\r\n\r\n        this.$diamond = this.createShape(attr);\r\n\r\n        group.appendChild(this.$diamond);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint: Point = this.$points[0];\r\n        let direction: Direction = Direction.Down;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if (this.$sNode.id === startNode.id || this.$points.length == 2) {\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$diamond.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint: Point, direction: Direction): string {\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                path = `M${startX} ${startY} L${startX + 6} ${startY + 10} L${startX} ${startY + 20} L${startX - 6} ${startY + 10} Z`;\r\n                startPoint.y = startPoint.y+20;\r\n                break;\r\n            case Direction.Right:\r\n                path = `M${startX} ${startY} L${startX - 10} ${startY + 6} L${startX - 20} ${startY} L${startX - 10} ${startY - 6} Z`;\r\n                startPoint.x = startPoint.x-20;\r\n                break;\r\n            case Direction.Left:\r\n                path = `M${startX} ${startY} L${startX + 10} ${startY - 6} L${startX + 20} ${startY} L${startX + 10} ${startY + 6} Z`;\r\n                startPoint.x = startPoint.x+20;\r\n                break;\r\n            case Direction.Down:\r\n                path = `M${startX} ${startY} L${startX - 6} ${startY - 10} L${startX} ${startY - 20} L${startX + 6} ${startY - 10} Z`;\r\n                startPoint.y = startPoint.y-20;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Aggregation extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'white');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { DiagramElement, Line, Point } from '../BaseElements';\r\nimport { Node } from '../nodes';\r\nimport { InfoText } from '../nodes/InfoText';\r\nimport { Util } from '../../util';\r\nimport { EventBus } from '../../EventBus';\r\nimport * as edges from '../edges';\r\nimport { Graph } from '../Graph';\r\n\r\nexport const enum Direction {\r\n    Up, Down, Left, Right\r\n}\r\n\r\nexport class Association extends DiagramElement {\r\n    public source: string;\r\n    public target: string;\r\n    public type: string;\r\n    public $sNode: Node;\r\n    public $tNode: Node;\r\n    public lineStyle: string;\r\n    public $points: Point[] = [];\r\n    public $pathSvg: Element;\r\n    public $pathWideSvg: Element;\r\n    public info: InfoText;\r\n    public sourceInfo: InfoText;\r\n    public targetInfo: InfoText;\r\n    $m: number;\r\n    $n: number;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super();\r\n\r\n        this.withData(data);\r\n    }\r\n\r\n    public withData(data: JSON | string | Object | any): Association {\r\n\r\n        if (!data) {\r\n            return this;\r\n        }\r\n        let srcInfo;\r\n        let trgInfo;\r\n\r\n        if (data.source && typeof data.source !== 'string') {\r\n            srcInfo = data.source;\r\n        }\r\n        else if (data.sourceInfo && typeof data.sourceInfo !== 'string') {\r\n            srcInfo = data.sourceInfo;\r\n        }\r\n\r\n        if (srcInfo) {\r\n            this.sourceInfo = new InfoText(srcInfo);\r\n            this.sourceInfo.$owner = this;\r\n        }\r\n\r\n        if (data.target && typeof data.target !== 'string') {\r\n            trgInfo = data.target;\r\n        }\r\n        else if (data.targetInfo && typeof data.targetInfo !== 'string') {\r\n            trgInfo = data.targetInfo;\r\n        }\r\n\r\n        if (trgInfo) {\r\n            this.targetInfo = new InfoText(trgInfo);\r\n            this.targetInfo.$owner = this;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    public updateSrcCardinality(cardinality: string): void {\r\n        this.sourceInfo = this.updateCardinality(this.$sNode, this.sourceInfo, cardinality);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetCardinality(cardinality: string): void {\r\n        this.targetInfo = this.updateCardinality(this.$tNode, this.targetInfo, cardinality);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateSrcProperty(property: string): void {\r\n        this.sourceInfo = this.updateProperty(this.$sNode, this.sourceInfo, property);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetProperty(property: string): void {\r\n        this.targetInfo = this.updateProperty(this.$tNode, this.targetInfo, property);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public withItem(source: Node, target: Node): Association {\r\n        source.$edges.push(this);\r\n        target.$edges.push(this);\r\n        this.$sNode = source;\r\n        this.$tNode = target;\r\n        this.source = source.id;\r\n        this.target = target.id;\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let group = Util.createShape({ tag: 'g', id: this.id, class: 'SVGEdge' });\r\n\r\n        let path: string = this.getPath();\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'none'\r\n        };\r\n        let pathLine = this.createShape(attr);\r\n\r\n        //attr['style'] = 'stroke-width:20;opacity:0;width:20;height:20';\r\n        let extendedPathLine = Util.createShape(attr);\r\n\r\n        group.appendChild(extendedPathLine);\r\n        group.appendChild(pathLine);\r\n\r\n        if (this.sourceInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.sourceInfo.getSVG());\r\n        }\r\n        if (this.targetInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.targetInfo.getSVG());\r\n        }\r\n\r\n        this.$pathWideSvg = extendedPathLine;\r\n        this.$pathSvg = pathLine;\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.EDITOR, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    public convertEdge(type: string, newId: string, redraw?: boolean): Association {\r\n        if (!edges[type]) {\r\n            return this;\r\n        }\r\n\r\n        let newEdge: Association = new edges[type]();\r\n        newEdge.withItem(this.$sNode, this.$tNode);\r\n        newEdge.id = newId;\r\n        newEdge.type = type;\r\n        newEdge.lineStyle = this.lineStyle;\r\n        newEdge.$owner = this.$owner;\r\n\r\n        if (this.sourceInfo) {\r\n            newEdge.sourceInfo = new InfoText({ property: this.sourceInfo.property, cardinality: this.sourceInfo.cardinality });\r\n            newEdge.sourceInfo.$owner = newEdge;\r\n        }\r\n\r\n        if (this.targetInfo) {\r\n            newEdge.targetInfo = new InfoText({ property: this.targetInfo.property, cardinality: this.targetInfo.cardinality });\r\n            newEdge.targetInfo.$owner = newEdge;\r\n        }\r\n\r\n        this.$points.forEach(point => {\r\n            newEdge.addPoint(point.x, point.y);\r\n        });\r\n\r\n        let graph = <Graph>this.getRoot();\r\n        if (!graph) {\r\n            return this;\r\n        }\r\n\r\n        // update model. insert the edge exact on the same index, like the old edge\r\n        let idx = graph.$graphModel.edges.indexOf(this);\r\n        graph.$graphModel.removeElement(this.id);\r\n        if (idx > -1) {\r\n            graph.$graphModel.edges.splice(idx, 0, newEdge);\r\n        }\r\n        else {\r\n            graph.$graphModel.edges.push(newEdge);\r\n        }\r\n\r\n        if (!redraw) {\r\n            return newEdge;\r\n        }\r\n\r\n        let svgRoot: Element;\r\n        if (graph) {\r\n            svgRoot = graph.root;\r\n        }\r\n        else {\r\n            svgRoot = document.getElementById('root');\r\n        }\r\n        let newEdgeSvg = newEdge.getSVG();\r\n\r\n        // update graph\r\n        graph.removeElement(this);\r\n        svgRoot.appendChild(newEdgeSvg);\r\n\r\n        // redraw the edge from both sides to get the correct display\r\n        // if the type is edge, so the path can be redraw.\r\n        // if not, so the inherited class redraw the path with his own logic\r\n\r\n        let dontDrawPath: boolean = (type !== 'Edge');\r\n        newEdge.redraw(newEdge.$sNode, dontDrawPath);\r\n        newEdge.redraw(newEdge.$tNode, dontDrawPath);\r\n\r\n        EventBus.register(newEdge, newEdgeSvg);\r\n\r\n        this.sourceInfo = undefined;\r\n        this.targetInfo = undefined;\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n        // redraw the first point\r\n        // check which point is the near to startnode\r\n        let endPoint: Point;\r\n        let recalcPoint: Point;\r\n        let endPointIdx: number;\r\n\r\n        if (this.$sNode.id === startNode.id) {\r\n            recalcPoint = this.$points[0];\r\n            endPointIdx = 1;\r\n        } else if (this.$tNode.id === startNode.id) {\r\n            recalcPoint = this.$points[this.$points.length - 1];\r\n            endPointIdx = this.$points.length - 2;\r\n        }\r\n\r\n        endPoint = this.$points[endPointIdx];\r\n\r\n        // calculate and set new position of point to redraw\r\n        this.calcIntersection(startNode, recalcPoint, endPoint);\r\n\r\n        // remove the 2nd point next to startnode, if the node was dragged upper the point\r\n        if (this.$points.length > 2 && this.$tNode.id === startNode.id && endPoint.y > (startNode.getPos().y + (startNode.getSize().y / 2))) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$tNode.id === startNode.id && this.$points.length === 2) {\r\n            this.calcIntersection(this.$sNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (this.$points.length > 2 && this.$sNode.id === startNode.id && (startNode.getPos().y + (startNode.getSize().y / 2) > endPoint.y)) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$sNode.id === startNode.id && this.$points.length === 2) {\r\n\r\n            this.calcIntersection(this.$tNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (!dontDrawPoints) {\r\n            this.redrawPointsAndInfo();\r\n        }\r\n    }\r\n\r\n    public getPath(): string {\r\n\r\n        if (this.$points.length === 0) {\r\n            return '';\r\n        }\r\n\r\n        let path: string = 'M';\r\n        for (let i = 0; i < this.$points.length; i++) {\r\n            let point: Point = this.$points[i];\r\n            if (i > 0) {\r\n                path += 'L';\r\n            }\r\n            path += Math.floor(point.x) + ' ' + Math.floor(point.y) + ' ';\r\n        }\r\n\r\n        return path;\r\n    }\r\n    public calcInfoPosNew(infoTxt: InfoText, node: Node): Point {\r\n\r\n        if (!infoTxt || !node) {\r\n            return null;\r\n        }\r\n\r\n        // 1. step: get direction\r\n        let startPoint: Point;\r\n        let nextToStartPoint: Point;\r\n        if (this.$sNode.id === node.id) {\r\n            startPoint = this.$points[0];\r\n            nextToStartPoint = this.$points[1];\r\n        }\r\n        else if (this.$tNode.id === node.id) {\r\n            startPoint = this.$points[this.$points.length - 1];\r\n            nextToStartPoint = this.$points[this.$points.length - 2];\r\n        }\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(node, startPoint);\r\n\r\n        let x: number;\r\n        let y: number;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                break;\r\n            case Direction.Right:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x - (infoTxt.getSize().x) - 5;\r\n                break;\r\n            case Direction.Left:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x + 5;\r\n                break;\r\n            case Direction.Down:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        // assign calculated position to infotext\r\n        return new Point(x, y);\r\n    }\r\n\r\n    public clearPoints(): any {\r\n        this.$points = [];\r\n        this.$points = [];\r\n    }\r\n\r\n    public addPoint(x: number, y: number): Point[] {\r\n        this.$points.push(new Point(x, y));\r\n\r\n        return this.$points;\r\n    }\r\n\r\n    protected redrawPointsAndInfo(): void {\r\n        // redraw the edge with the new position\r\n        let path: string = this.getPath();\r\n        this.$pathSvg.setAttributeNS(null, 'd', path);\r\n        this.$pathWideSvg.setAttributeNS(null, 'd', path);\r\n\r\n        this.redrawSourceInfo();\r\n        this.redrawTargetInfo();\r\n    }\r\n\r\n    protected redrawSourceInfo() {\r\n        if (this.sourceInfo) {\r\n            let newPosOfSrc = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.redrawFromEdge(newPosOfSrc);\r\n        }\r\n    }\r\n\r\n    protected redrawTargetInfo() {\r\n        if (this.targetInfo) {\r\n            let newPosOfTarget = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.redrawFromEdge(newPosOfTarget);\r\n        }\r\n    }\r\n\r\n    protected getDirectionOfPointToNode(node: Node, pointNearNode: Point): Direction {\r\n        /*\r\n            Example to calculate the direction of nearest point to Node\r\n\r\n            node\r\n         x1_ _ _ _\r\n          |       |\r\n          |       |. pointNearNode\r\n          |       |\r\n          |_ _ _ x2\r\n\r\n          the calculation would return Direction.Left\r\n        */\r\n\r\n        let x1: Point = node.getPos();\r\n        let x2: Point = new Point((x1.x + node.getSize().x), (x1.y + node.getSize().y));\r\n        let direction: Direction = Direction.Down;\r\n\r\n        if (x1.y >= pointNearNode.y) {\r\n            direction = Direction.Down;\r\n        }\r\n        if (x2.y <= pointNearNode.y) {\r\n            direction = Direction.Up;\r\n        }\r\n        if (x1.x >= pointNearNode.x) {\r\n            direction = Direction.Right;\r\n        }\r\n        if (x2.x <= pointNearNode.x) {\r\n            direction = Direction.Left;\r\n        }\r\n\r\n        return direction;\r\n    }\r\n\r\n    private updateCardinality(node: Node, infoText: InfoText, cardinality: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'cardinality': cardinality });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.cardinality = cardinality;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateCardinality(cardinality);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private updateProperty(node: Node, infoText: InfoText, property: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'property': property });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.property = property;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateProperty(property);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private calcIntersection(startNode: Node, recalcPoint: Point, endPoint: Point): Point {\r\n\r\n        // https://www.mathelounge.de/21534/schnittpunkt-einer-linie-mit-den-randern-eines-rechtecks\r\n        let h = startNode.getSize().y;\r\n        let w = startNode.getSize().x;\r\n\r\n        let x1: number = startNode.getPos().x + (w / 2);\r\n        let y1: number = startNode.getPos().y + (h / 2);\r\n\r\n        let x2: number = endPoint.x;\r\n        let y2: number = endPoint.y;\r\n\r\n        let newX: number = recalcPoint.x;\r\n        let newY: number = recalcPoint.y;\r\n\r\n        if (x2 > x1) {\r\n            newX = x1 + (w / 2);\r\n        }\r\n        else if (x2 < x1) {\r\n            newX = x1 - (w / 2);\r\n        }\r\n        else {\r\n            newX = x1;\r\n        }\r\n\r\n        if ((x2 - x1) !== 0) {\r\n            newY = ((y2 - y1) / (x2 - x1) * (newX - x1)) + y1;\r\n        }\r\n        else {\r\n            if (y1 > y2) {\r\n                newY = startNode.getPos().y;\r\n            }\r\n            else {\r\n                newY = startNode.getPos().y + h;\r\n            }\r\n        }\r\n\r\n        // if the statement is not true, so the intersection is at the horizontal line\r\n        if (!((y1 - (h / 2) <= newY) && newY <= y1 + (h / 2))) {\r\n\r\n            if (y2 > y1) {\r\n                newY = y1 + (h / 2);\r\n            }\r\n            else {\r\n                newY = y1 - (h / 2);\r\n            }\r\n\r\n            if ((x2 - x1) !== 0) {\r\n                let tmp = ((y2 - y1) / (x2 - x1));\r\n                newX = (newY + (tmp * x1) - y1) / tmp;\r\n            }\r\n            else {\r\n                newX = x1;\r\n            }\r\n        }\r\n\r\n        recalcPoint.x = Math.ceil(newX);\r\n        recalcPoint.y = Math.ceil(newY);\r\n\r\n        return null;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Composition extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'black');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { Association } from './Association';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\nimport { Direction } from '../index';\r\n\r\nexport class Generalisation extends Association {\r\n\r\n    public $TARGET_ELEMENT_HEIGHT : number = 12;\r\n    protected $targetElement: Element;\r\n\r\n    public getSVG(): Element {\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction : Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled arrow\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'white'\r\n          };\r\n\r\n        this.$targetElement = this.createShape(attr);\r\n\r\n        group.appendChild(this.$targetElement);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean) : void {\r\n\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint : Point = this.$points[0];\r\n        let direction : Direction = Direction.Up;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if(this.$sNode.id === startNode.id || this.$points.length == 2){\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$targetElement.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint : Point, direction : Direction) : string{\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch(direction){\r\n            case Direction.Up:\r\n            path = `M${startX} ${startY+3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y+12;\r\n            break;\r\n            case Direction.Right:\r\n            path = `M${startX-3} ${startY} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x-12;\r\n            break;\r\n            case Direction.Left:\r\n            path = `M${startX+3} ${startY} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x+12;\r\n            break;\r\n            case Direction.Down:\r\n            path = `M${startX} ${startY-3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y-12;\r\n            break;\r\n            default :\r\n            break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n\r\n}\r\n","import { Generalisation } from './Generalisation';\r\n\r\nexport class Implements extends Generalisation {\r\n\r\n    public getSVG(): Element {\r\n        let group = super.getSVG();\r\n\r\n        this.$pathSvg.setAttributeNS(null, 'stroke-dasharray', '3, 3');\r\n\r\n        return group;\r\n    }\r\n}\r\n","export * from './Association';\r\nexport * from './Aggregate';\r\nexport * from './Aggregation';\r\nexport * from './Composition';\r\nexport * from './Generalisation';\r\nexport * from './Implements';","export * from './edges';\r\nexport * from './nodes';\r\nexport * from './BaseElements';\r\nexport * from './Graph';\r\nexport * from './Model';\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Attribute extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 28.06.2017.\r\n */\r\nimport {Control} from \"../../Control\";\r\n\r\nexport class AutoComplete extends Control {\r\n    private $inputField:HTMLInputElement;\r\n    private $dataList:HTMLDataListElement;\r\n    private $selected:HTMLSelectElement;\r\n    private $items:HTMLDivElement;\r\n    private isMultiple:boolean;\r\n\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        let div:HTMLDivElement = document.createElement('div');\r\n        this.$view = div;\r\n        this.$inputField = document.createElement('input');\r\n        this.$dataList = document.createElement(\"datalist\");\r\n        this.$dataList.id = \"data_\"+this.id;\r\n        this.$inputField.setAttribute(\"list\", \"data_\"+this.id);\r\n        if(data[\"value\"]) {\r\n            let values = data[\"value\"];\r\n            this.isMultiple = data[\"multiple\"] != null;\r\n            let option:HTMLOptionElement;\r\n            if(this.isMultiple) {\r\n                this.$selected = document.createElement(\"select\");\r\n                this.$selected.className = \"hide\";\r\n                this.$selected.multiple = true;\r\n\r\n                this.$selected.id = this.id;\r\n                this.$items = document.createElement(\"div\");\r\n                this.$items.className = \"selectedList\";\r\n                div.appendChild(this.$items);\r\n                this.$inputField.className = \"selectedInput\";\r\n                div.appendChild(this.$selected);\r\n                this.$view[\"style\"].setProperty(\"float\", \"left\");\r\n                let that = this;\r\n                this.$inputField.oninput = function(){that.onChange();}\r\n            } else {\r\n                this.$inputField.id = this.id;\r\n            }\r\n            for (let attr in values) {\r\n                if (!values.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                option = document.createElement(\"option\");\r\n                option.value = values[attr];\r\n                this.$dataList.appendChild(option);\r\n                if(this.isMultiple) {\r\n                    option = document.createElement(\"option\");\r\n                    option.value = values[attr];\r\n                    option.innerHTML = values[attr];\r\n                    this.$selected.appendChild(option);\r\n                }\r\n        }\r\n\r\n            div.appendChild(this.$inputField);\r\n            div.appendChild(this.$dataList);\r\n        }\r\n\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n            if(this.isMultiple) {\r\n                div.appendChild(this.$selected);\r\n            }\r\n        }\r\n\r\n        parent.appendChild(this);\r\n    }\r\n\r\n    public onChange() : void {\r\n        let textValue:string = this.$inputField.value;\r\n        if(textValue.length<1) {\r\n            return;\r\n        }\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == textValue) {\r\n                if(item.selected == false) {\r\n                    item.selected = true;\r\n                    item.defaultSelected = true;\r\n                    let test = document.createElement(\"li\");\r\n                    let that = this;\r\n                    test.onclick = function() {that.onDelete(item.value, test);};\r\n                    test.className = \"selectedItem\";\r\n                    test.innerHTML = item.value;\r\n                    this.$items.appendChild(test);\r\n                    this.$inputField.value = \"\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n    public onDelete(value:string, selectedItem:HTMLLIElement) : void {\r\n        this.$items.removeChild(selectedItem);\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == value ) {\r\n                if(item.selected) {\r\n                    item.selected = false;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","import {Control} from '../../Control';\r\n\r\nexport class BR extends Control {\r\n    public load(json: JSON): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('br');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            this.$view.setAttribute(attr, data[attr]);\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\nexport class Button extends Control {\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        this.$view = document.createElement('button');\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\nimport { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\nimport { Size } from '../index';\r\nimport ClazzProperty from './ClazzProperty';\r\nimport {SymbolLibary} from './Symbol';\r\nimport {StereoType} from './StereoType';\r\nimport {GraphListener} from '../../handlers/GraphListener';\r\n\r\nexport class Class extends Node {\r\n    public attributes: Attribute[] = [];\r\n    public methods: Method[] = [];\r\n    public modifier: string;\r\n    public stereoType: string;\r\n\r\n    protected $attrHeight = 25;\r\n    protected $attrFontSize = 12;\r\n    protected $labelView: Element;\r\n\r\n    constructor(json: JSON | string | Object | any) {\r\n        super(json);\r\n        return this;\r\n    }\r\n\r\n    public load(json?: any) {\r\n        if (!json) {\r\n            json = {};\r\n        }\r\n        let y = this.$labelHeight;\r\n        let labelObj = json.name || json.id || ('New ' + this.property);\r\n\r\n        let width: number = 150;\r\n        width = Math.max(width, Util.sizeOf(labelObj).width + 60);\r\n\r\n        if (json['attributes']) {\r\n            for (let attr of json['attributes']) {\r\n\r\n                let attrObj = new Attribute(attr);\r\n                attrObj.$owner = this;\r\n                this.attributes.push(attrObj);\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(attrObj.toString()).width);\r\n                let listener = new GraphListener(attrObj);\r\n                attrObj.$data.addListener(listener);\r\n            }\r\n        }\r\n        if (json['stereotype']) {\r\n            this.stereoType = json['stereotype'];\r\n        }\r\n        if (json['methods']) {\r\n            for (let method of json['methods']) {\r\n\r\n                let methodObj = new Method(method);\r\n                methodObj.$owner = this;\r\n                this.methods.push(methodObj);\r\n\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(methodObj.toString()).width);\r\n            }\r\n            y += this.$attrHeight;\r\n        }\r\n        this.withSize(width, y);\r\n    }\r\n\r\n    public getAttributes(): Attribute[] {\r\n        return this.attributes;\r\n    }\r\n\r\n    public getMethods(): Method[] {\r\n        return this.methods;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        let icon = SymbolLibary.draw({type: 'Class', property: 'HTML', width: '50', height: '50', transform: 'translate(-26,-21)'});\r\n        return icon;\r\n        // let group = this.createShape(\r\n//    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n//    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos: Point = this.getPos();\r\n        const size: Point = this.getSize();\r\n\r\n        let group = this.createShape({ tag: 'g', id: this.id, class: 'SVGClazz', transform: 'translate(0 0)' });\r\n\r\n        if (this.stereoType) {\r\n            let type = new StereoType(this.stereoType, pos.x, pos.y);\r\n            group.appendChild(type.getSVG());\r\n        }\r\n\r\n        // Full Shape\r\n        let options = null;\r\n        let style;\r\n        let clazzName;\r\n        if (this.$owner['options']) {\r\n            let options = this.$owner['options'];\r\n            if (options) {\r\n                style = options.style;\r\n            }\r\n        }\r\n        // = = = Background = = =\r\n        if (style === 'modern') {\r\n            clazzName = 'ClazzHeader';\r\n        }\r\n        clazzName = 'ClazzHeader';\r\n        const nodeShape = this.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            height: size.y,\r\n            width: size.x,\r\n            rx: 5,\r\n            ry: 5,\r\n            fill: 'none',\r\n            stroke: 'black',\r\n            'stroke-width': 1\r\n        });\r\n        if (clazzName) {\r\n            nodeShape.setAttribute('className', clazzName);\r\n            let styleHeader = Util.getStyle('ClazzHeader');\r\n            // headerHeight = styleHeader.getNumber('height');\r\n        }\r\n\r\n        // = = = LABEL = = =\r\n        let label = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y + this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': this.$labelFontSize,\r\n            fill: 'black'\r\n        });\r\n        label.textContent = this.id;\r\n        this.$labelView = label;\r\n\r\n        group.appendChild(nodeShape);\r\n        group.appendChild(label);\r\n\r\n        // = = = ATTRIBUTES = = =\r\n        if (this.attributes.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorLabelAttr = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight,\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight,\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorLabelAttr);\r\n\r\n            let groupOfAttributes = this.createShape({ tag: 'g', id: (this.id + 'Attributes') });\r\n            groupOfAttributes.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzAttribute');\r\n            group.appendChild(groupOfAttributes);\r\n\r\n            let y = pos.y + this.$labelHeight + this.$attrHeight / 2;\r\n            for (let attr of this.attributes) {\r\n\r\n                let attrSvg = attr.getSVG();\r\n                attr.$owner = this;\r\n\r\n                attrSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                attrSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfAttributes.appendChild(attrSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        // = = = METHODS = = =\r\n        let height = this.attributes.length * this.$attrHeight;\r\n        let y = pos.y + this.$labelHeight + height + this.$attrHeight / 2;\r\n        if (this.methods.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorAttrMethods = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorAttrMethods);\r\n\r\n            let groupOfMethods = this.createShape({ tag: 'g', id: (this.id + 'Methods') });\r\n            groupOfMethods.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzMethod');\r\n            group.appendChild(groupOfMethods);\r\n\r\n            y += this.$attrHeight / 2;\r\n            for (let method of this.methods) {\r\n\r\n                let methodSvg = method.getSVG();\r\n                method.$owner = this;\r\n\r\n                methodSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                methodSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfMethods.appendChild(methodSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        this.$view = group;\r\n        return group;\r\n    }\r\n\r\n    public copy(): Class {\r\n        let copy: Class;\r\n        copy = <Class>super.copy();\r\n\r\n        // copy label\r\n        copy.id = this.id + 'Copy';\r\n\r\n        // copy attributes\r\n        this.attributes.forEach(attr => {\r\n            copy.attributes.push(new Attribute(attr.toString()));\r\n        });\r\n        // copy methods\r\n        this.methods.forEach(method => {\r\n            copy.methods.push(new Method(method.toString()));\r\n        });\r\n        copy.reCalcSize();\r\n\r\n        return copy;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTCLICK,\r\n                EventBus.ELEMENTDRAG, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES, EventBus.RELOADPROPERTIES];\r\n    }\r\n\r\n    public addProperty(value: string, type: string): any {\r\n        if (!this[type] || !value || value.length === 0) {\r\n            return;\r\n        }\r\n\r\n        let extractedValue;\r\n        if (type === 'attributes') {\r\n            extractedValue = new Attribute(value);\r\n        }\r\n        else if (type === 'methods') {\r\n            extractedValue = new Method(value);\r\n        }\r\n\r\n        for (let valueOfType of this[type]) {\r\n            if (valueOfType.toString() === extractedValue.toString()) {\r\n                alert(extractedValue.toString() + ' already exists.');\r\n                extractedValue = undefined;\r\n                return;\r\n            }\r\n        }\r\n\r\n        this[type].push(extractedValue);\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        return extractedValue;\r\n    }\r\n\r\n    public addAttribute(value: string): Attribute {\r\n        return this.addProperty(value, 'attributes');\r\n    }\r\n\r\n    public addAttributeObj(attr: Attribute): Attribute[] {\r\n        this.attributes.push(attr);\r\n        return this.getAttributes();\r\n    }\r\n\r\n    public addMethodObj(method: Method): Method[] {\r\n        this.methods.push(method);\r\n        return this.getMethods();\r\n    }\r\n\r\n    public addMethod(value: string): Method {\r\n        return this.addProperty(value, 'methods');\r\n    }\r\n\r\n    public removeAttribute(attr: Attribute): void {\r\n        let idx = this.attributes.indexOf(attr);\r\n        this.attributes.splice(idx, 1);\r\n    }\r\n\r\n    public removeMethod(method: Method): void {\r\n        let idx = this.methods.indexOf(method);\r\n        this.methods.splice(idx, 1);\r\n    }\r\n\r\n    public removeProperty(property: ClazzProperty): void {\r\n\r\n        if (property instanceof Attribute) {\r\n            this.removeAttribute(<Attribute>property);\r\n        }\r\n\r\n        if (property instanceof Method) {\r\n            this.removeMethod(<Method>property);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n        let hasSizeChanged: [boolean, Size] = this.hasSizeChanged();\r\n\r\n        if (drawOnlyIfSizeChanged) {\r\n            if (!hasSizeChanged[0]) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n\r\n        // redraw only this clazz\r\n        this.$owner.$view.removeChild(this.$view);\r\n        let newSvg = this.getSVG();\r\n        this.$owner.$view.appendChild(newSvg);\r\n        this.$view = newSvg;\r\n        EventBus.register(this, newSvg);\r\n\r\n        this.redrawEdges();\r\n    }\r\n\r\n    public hasSizeChanged(): [boolean, Size] {\r\n        let oldSize = { width: this.getSize().x, height: this.getSize().y };\r\n        let newSize = this.reCalcSize();\r\n\r\n        // size doenst changed, so nothing to redraw\r\n        if (oldSize.width === newSize.width && oldSize.height === newSize.height) {\r\n            return [false, newSize];\r\n        }\r\n\r\n        return [true, newSize];\r\n    }\r\n\r\n    public updateLabel(newLabel: string): void {\r\n        if (this.$labelView) {\r\n            this.$labelView.textContent = newLabel;\r\n        }\r\n\r\n        // update label in all edges\r\n        this.$edges.forEach(edge => {\r\n            if (this.id === edge.$sNode.id) {\r\n                edge.source = newLabel;\r\n            }\r\n            else if (this.id === edge.$tNode.id) {\r\n                edge.target = newLabel;\r\n            }\r\n        });\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        this.reDraw(true);\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.modifier = modifier;\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reCalcSize(): Size {\r\n        // label\r\n        let newWidth = 150;\r\n        newWidth = Math.max(newWidth, Util.sizeOf(this.id).width + 30);\r\n\r\n        // attributes\r\n        this.attributes.forEach(attrEl => {\r\n\r\n            let widthOfAttr;\r\n            if (attrEl.$view) {\r\n                widthOfAttr = attrEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfAttr = Util.sizeOf(attrEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfAttr + 15);\r\n        });\r\n\r\n        // methods\r\n        this.methods.forEach(methodEl => {\r\n            let widthOfMethod;\r\n            if (methodEl.$view) {\r\n                widthOfMethod = methodEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfMethod = Util.sizeOf(methodEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfMethod + 15);\r\n        });\r\n\r\n        // TODO: height has to be calculated by font-size\r\n        this.getSize().x = newWidth;\r\n        this.getSize().y = this.$labelHeight + ((this.attributes.length + this.methods.length) * this.$attrHeight)\r\n            + this.$attrHeight;\r\n\r\n        let newSize = { width: newWidth, height: this.getSize().y };\r\n\r\n        return newSize;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    private getModernStyle(): Element {\r\n        let width, height, id, size, z, item, rect, g, board, styleHeader, headerHeight, x, y;\r\n        board = this.getRoot()['board'];\r\n        styleHeader = Util.getStyle('ClazzHeader');\r\n        headerHeight = styleHeader.getNumber('height');\r\n        width = 0;\r\n        height = 10 + headerHeight;\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].getType().toLowerCase() === 'objectdiagram') {\r\n            id = this.id.charAt(0).toLowerCase() + this.id.slice(1);\r\n            item = 'Object';\r\n        } else {\r\n            id = this.id;\r\n            item = 'Class';\r\n            if (this['counter']) {\r\n                id += ' (' + this['counter'] + ')';\r\n            }\r\n        }\r\n        g = Util.create({tag: 'g', model: this});\r\n        size = Util.sizeOf(id, this);\r\n        width = Math.max(width, size.width);\r\n        if (this.attributes && this.attributes.length > 0) {\r\n            height = height + this.attributes.length * 25;\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.attributes[z], this).width);\r\n            }\r\n        } else {\r\n            height += 20;\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            height = height + this.methods.length * 25;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.methods[z], this).width);\r\n            }\r\n        }\r\n        width += 20;\r\n\r\n        let pos = this.getPos();\r\n        y = pos.y;\r\n        x = pos.x;\r\n\r\n        rect = {\r\n            tag: 'rect',\r\n            'width': width,\r\n            'height': height,\r\n            'x': x,\r\n            'y': y,\r\n            'class': item + ' draggable',\r\n            'fill': 'none'\r\n        };\r\n        g.appendChild(Util.create(rect));\r\n        g.appendChild(Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            'x': x,\r\n            'y': y,\r\n            height: headerHeight,\r\n            'width': width,\r\n            'class': 'ClazzHeader'\r\n        }));\r\n\r\n        item = Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'class': 'InfoText',\r\n            'text-anchor': 'right',\r\n            'x': x + width / 2 - size.width / 2,\r\n            'y': y + (headerHeight / 2) + (size.height / 2),\r\n            'width': size.width\r\n        });\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].type.toLowerCase() === 'objectdiagram') {\r\n            item.setAttribute('text-decoration', 'underline');\r\n        }\r\n        item.appendChild(document.createTextNode(id));\r\n\r\n        g.appendChild(item);\r\n        g.appendChild(Util.create({\r\n            tag: 'line',\r\n            x1: x,\r\n            y1: y + headerHeight,\r\n            x2: x + width,\r\n            y2: y + headerHeight,\r\n            stroke: '#000'\r\n        }));\r\n        y += headerHeight + 20;\r\n\r\n        if (this.attributes) {\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': (x + 10),\r\n                    'y': y,\r\n                    value: this.attributes[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n            if (this.attributes.length > 0) {\r\n                y -= 10;\r\n            }\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            g.appendChild(Util.create({tag: 'line', x1: x, y1: y, x2: x + width, y2: y, stroke: '#000'}));\r\n            y += 20;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': x + 10,\r\n                    'y': y,\r\n                    value: this.methods[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n        }\r\n        return g;\r\n    }\r\n}\r\n","import {Util} from '../../util';\r\nimport {DiagramElement} from '../BaseElements';\r\nimport Data from '../../Data';\r\n\r\nexport default class ClazzProperty extends DiagramElement {\r\n\r\n    // Public (+)\r\n    // Private (-)\r\n    // Protected (#)\r\n    // Package (~)\r\n\r\n    public $data = new Data();\r\n//    public modifier: string = '+';\r\n//    public name: string;\r\n//    public type: string;\r\n//    public value: string;\r\n\r\n    constructor(data: any | JSON) {\r\n        super();\r\n        this.$data.setValue('modifier', '+');\r\n        this.$data.setValue('name', null);\r\n        this.$data.setValue('type', null);\r\n        this.$data.setValue('value', null);\r\n        this.extractData(data);\r\n    }\r\n\r\n    public update(data: any | JSON): void {\r\n        this.extractData(data);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.$data.setValue('modifier', modifier);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateType(type: string): void {\r\n        this.$data.setValue('type', type);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateValue(value: string): void {\r\n        this.$data.setValue('value', value);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateName(name: string): void {\r\n        this.$data.setValue('name', name);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public getName(): string {\r\n        return this.$data.getValue('name');\r\n    }\r\n\r\n    public getModifier(): string {\r\n        return this.$data.getValue('modifier');\r\n    }\r\n\r\n    public getType(): string {\r\n        return this.$data.getValue('type');\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let attrText = {\r\n            tag: 'text',\r\n            'text-anchor': 'start',\r\n            'alignment-baseline': 'middle',\r\n        };\r\n\r\n        let attrSvg = Util.createShape(attrText);\r\n        attrSvg.textContent = this.toString();\r\n\r\n        this.$view = attrSvg;\r\n\r\n        return attrSvg;\r\n    }\r\n\r\n    public toString(): string {\r\n        let value = this.$data.getValue('value');\r\n        let result = this.$data.getValue('modifier') + ' ';\r\n        result += this.$data.getValue('name') + ' : ';\r\n        result += this.$data.getValue('type');\r\n        if (value && value.length > 0) {\r\n            result += ' = ' + this.$data.getValue('value');\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.$data.setValue('type', data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.$data.setValue('name', data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.$data.setValue('modifier', data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n\r\n            // e.g. name : string or name:string\r\n            let dataSplitted = data.split(':');\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                let name;\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.$data.setValue('modifier', firstChar);\r\n                    name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                }\r\n                else {\r\n                    name = modifierAndNameSplitted;\r\n                }\r\n                // delete whitespaces in name\r\n                name = name.replace(/ /g, '_');\r\n\r\n                this.$data.setValue('name', name);\r\n                let type = dataSplitted[1].trim() || 'String';\r\n\r\n                // if the type was entered with a small begin letter\r\n                if (type.toLowerCase() === 'string') {\r\n                    type = 'String';\r\n                }\r\n                // delete whitespaces in type\r\n                type = type.replace(/ /g, '_');\r\n                this.$data.setValue('type',  type);\r\n            } else {\r\n                dataSplitted = data.split('=');\r\n                if (dataSplitted && dataSplitted.length === 2) {\r\n                    // modifer (and or) name\r\n                    let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                    // first char is +, - or #\r\n                    let firstChar = modifierAndNameSplitted[0];\r\n                    let name;\r\n                    if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                        this.$data.setValue('modifier', firstChar);\r\n                        name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                    }\r\n                    else {\r\n                        name = modifierAndNameSplitted;\r\n                    }\r\n                    // delete whitespaces in name\r\n                    name = name.replace(/ /g, '_');\r\n\r\n                    this.$data.setValue('name', name);\r\n                    let value = dataSplitted[1].trim() || '\"\"';\r\n                    this.$data.setValue('value', value);\r\n                    this.$data.setValue('type', typeof value);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected updateTextOfView() {\r\n        if (this.$view) {\r\n            this.$view.textContent = this.toString();\r\n        }\r\n        if (this.$owner) {\r\n            Util.saveToLocalStorage(this.$owner.$owner);\r\n        }\r\n    }\r\n}\r\n","import {Node} from \"./Node\";\r\n/**\r\n * Created by Stefan on 29.03.2017.\r\n */\r\n\r\nexport class Dice extends Node {\r\n    private value: number;\r\n    private max: number = 6;\r\n    private $animation: SVGElement;\r\n    private $zoom: number = 0.6;\r\n    private $border: number = 0.2;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super(data);\r\n        this.withSize(100, 100);\r\n    }\r\n\r\n    public setNumber(number: number) {\r\n        this.value = number;\r\n        this.refresh();\r\n    }\r\n\r\n    public refresh() {\r\n        if (this.$view) {\r\n            this.reset();\r\n            let group = this.createPointValue();\r\n            if (group) {\r\n                this.$view.appendChild(group);\r\n            }\r\n        }\r\n    }\r\n\r\n    public reset() {\r\n        if (this.$view) {\r\n            while (this.$view.children.length > 1) {\r\n                if(this.$view.children.item(this.$view.children.length - 1).tagName!== \"animateTransform\") {\r\n                    console.log(this.$view.children.item(this.$view.children.length - 1));\r\n                    this.$view.removeChild(this.$view.children.item(this.$view.children.length - 1));\r\n                }else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let dice: SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x + size.x * this.$border,\r\n            y: pos.y + size.y * this.$border,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y * this.$zoom,\r\n            width: size.x * this.$zoom,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        dice.appendChild(this.createShape(attr));\r\n\r\n        let group = this.createPointValue();\r\n        if (group) {\r\n            dice.appendChild(group);\r\n        }\r\n\r\n        this.$view = dice;\r\n        return dice;\r\n    }\r\n\r\n    public animationTimeout(newValues: number[]) {\r\n        if(newValues.length>0) {\r\n            let newValue = newValues.shift();\r\n            this.setNumber(newValue);\r\n            let that=this;\r\n            setTimeout(function() {that.animationTimeout(newValues)}, 100);\r\n        }\r\n    }\r\n\r\n    public roll() {\r\n        this.startAnimation();\r\n        let values:number[]=[];\r\n        let i:number;\r\n        for(i=1;i<this.max;i++) {\r\n            values.push(i);\r\n        }\r\n        for(i=this.max;i>0;i--) {\r\n            values.push(i);\r\n        }\r\n        let that=this;\r\n        values.push( Math.floor(Math.random() * this.max)+1 );\r\n        setTimeout(function() {that.animationTimeout(values)}, 100);\r\n    }\r\n    public startAnimation() {\r\n        if(this.$animation) {\r\n            return;\r\n        }\r\n        let center = this.getPos().x+this.getSize().x /2;\r\n        const attr = {\r\n            tag: 'animateTransform',\r\n            attributeType: \"xml\",\r\n            attributeName:\"transform\",\r\n            type:\"rotate\",\r\n            dur: \"1s\",\r\n            repeatCount:\"1\",\r\n            from:\"0 \"+center+\" \"+center,\r\n            to:\"360 \"+center+\" \"+center\r\n        };\r\n        this.$animation = <SVGElement>this.createShape(attr);\r\n        this.$view.appendChild(this.$animation);\r\n    }\r\n\r\n    public stopAnimation() {\r\n        if(this.$animation) {\r\n            this.$view.removeChild(this.$animation);\r\n            this.$animation = null;\r\n        }\r\n    }\r\n\r\n    public createPointValue() :SVGElement {\r\n        if (this.value == 1) {\r\n           return this.getCircle(2, 2);\r\n        } else if (this.value == 2) {\r\n            return this.getCircle(1, 1, 3, 3);\r\n        } else if (this.value == 3) {\r\n            return this.getCircle(1, 1, 2, 2, 3, 3);\r\n        } else if (this.value == 4) {\r\n            return this.getCircle(1, 1, 1, 3, 3, 1, 3, 3);\r\n        } else if (this.value == 5) {\r\n            return this.getCircle(1, 1, 1, 3, 2, 2, 3, 1, 3, 3);\r\n        } else if (this.value == 6) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 7) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 2, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 8) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 9) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private getCircle(...values:number[]) : SVGElement {\r\n        if (values.length % 2 > 0) {\r\n            return null;\r\n        }\r\n        let size = this.getSize();\r\n        let pos = this.getPos();\r\n        //FIXME let group:SVGElement = <SVGElement>this.createShape({tag: 'g', transform: 'translate(0 0)', height: size.y, width: size.x});\r\n        let group:SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n\r\n\r\n        for (let i: number = 0; i < values.length; i += 2) {\r\n            group.appendChild(this.createCircle(values[i], values[i + 1]));\r\n        }\r\n        return group;\r\n    }\r\n    private createCircle(x:number, y:number) : SVGElement {\r\n        let size = this.getSize();\r\n        let radius = size.x / 10*this.$zoom;\r\n        let border = size.y*this.$border;\r\n        let zoom = size.y*this.$zoom;\r\n        const attr = {\r\n            tag: 'circle',\r\n            r : radius,\r\n            cx: (size.x*this.$zoom * x) / 4 + border,\r\n            cy: (size.y*this.$zoom * y) / 4 + border,\r\n            stroke:\"black\",\r\n            \"stroke-width\":\"3\",\r\n            fill:\"red\",\r\n            style: 'fill:black;stroke:black;stroke-width:2'\r\n        };\r\n        return <SVGElement>this.createShape(attr);\r\n    }\r\n}","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\n\r\nexport class Div extends Control {\r\n    private className: string;\r\n\r\n    public load(data:JSON|any): any {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = <string>data;\r\n        } else {\r\n            id = data.id;\r\n            this.className = data.class;\r\n            this.property = data.property;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let div: HTMLElement = document.getElementById(id);\r\n\r\n        if (!this.property) {\r\n            // if(inputField){\r\n            // TODO disuss how to decide, which property we should listen on...\r\n            // this.property = id;\r\n            this.property = div.getAttribute('Property');\r\n            // }\r\n        }\r\n\r\n        if (div instanceof HTMLDivElement) {\r\n            this.$view = div;\r\n        } else {\r\n            if (!div) {\r\n                this.$view = document.createElement('div');\r\n                this.$view.setAttribute('id', this.id);\r\n                this.$view.setAttribute('property', this.property);\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists+\r\n        if (data.hasOwnProperty('property')) {\r\n            this.setProperty(data['property']);\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        this.$model = entity;\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.className || entity.hasProperty(this.className)) {\r\n                if (entity.id === this.property.split('.')[0]) {\r\n                    entity.addListener(this, this.className);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        this.$view.innerHTML = <string>newValue;\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Form extends Control {\r\n    // private applyingChange: boolean = false;\r\n    private children: Object = {};\r\n    // private property: string = \"\";\r\n\r\n    /**\r\n     * Data should look like the following json:\r\n     *\r\n     * <pre>{\r\n     *      id: \"t1\",\r\n     *      control: \"form\",\r\n     *      elements: [\r\n     *          {id: \"inputField1\", property: \"talk\"},\r\n     *          {id: \"inputField2\", property: \"room\"}\r\n     *      ]\r\n     * }</pre>\r\n     * @param data\r\n     */\r\n    public load(data: any) {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let form: HTMLElement = document.getElementById(id);\r\n\r\n        if (form instanceof HTMLFormElement) {\r\n            this.$view = form;\r\n            if (this.$view.hasAttribute('property')) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            if (!form) {\r\n                this.$view = document.createElement('form');\r\n                this.$view.setAttribute('id', this.id);\r\n\r\n                if (data.hasOwnProperty('property')) {\r\n                    this.property = data['property'];\r\n                }\r\n\r\n                // add all the attributes to the form element\r\n                for (let attr in data) {\r\n                    if (data.hasOwnProperty(attr) === false) {\r\n                        continue;\r\n                    }\r\n                    if (attr === 'elements') {\r\n                        continue;\r\n                    }\r\n                    this.$view.setAttribute(attr, data[attr]);\r\n                }\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists\r\n        let objId = this.property;\r\n        let hasItem = this.$owner.hasItem(objId);\r\n        if (hasItem) {\r\n            let item = this.$owner.getItem(objId);\r\n            item.addListener(this);\r\n            this.$model = item;\r\n        }\r\n\r\n        // now create all the sub input controls\r\n        for (let field of data.elements) {\r\n            // this.createField(field);\r\n            if (field.hasOwnProperty('property')) {\r\n                let property = field['property'];\r\n                property = this.property + '.' + property;\r\n                field['property'] = property;\r\n            }\r\n            if (!field.hasOwnProperty('class')) {\r\n                field['class'] = 'input';\r\n            }\r\n\r\n            // let the Bridge load the subControl\r\n            let control: Control = this.$owner.load(field, this);\r\n\r\n            // add subControl to children\r\n            this.children[control.getId()] = control;\r\n        }\r\n\r\n    }\r\n\r\n    public setProperty(id: string): void {\r\n        this.property = id;\r\n        let keys: string[] = Object.keys(this.children);\r\n        for (let k = 0; k < keys.length; k++) {\r\n            let key = keys[k];\r\n            let childControl = this.children[key];\r\n            // only set Property, if there is a Property defined before\r\n            if (childControl.property) {\r\n                childControl.setProperty(this.property + '.' + childControl.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object,  oldValue?: Object): boolean {\r\n        if (this.$owner != null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    /**\r\n     * Here we create the form elements and put all the attributes to them in order for the Control only having to load\r\n     * the data were appending here. Alternative would be loading with the bridge and afterwards setting\r\n     * the owner to the form instead of the body..\r\n     * @param field\r\n     */\r\n    /*private createField(field: Object) {\r\n     let control = 'input';\r\n     if (field.hasOwnProperty('class')) {\r\n     control = field['class'];\r\n     }\r\n     let input = document.createElement(control);\r\n     input.setAttribute('class', control);\r\n     let id: string;\r\n     if (!field.hasOwnProperty('id')) {\r\n     // TODO: not the best solution for generating unique id's for forms...\r\n     id = this.$owner.getId();\r\n     field['id'] = id;\r\n     }\r\n     if (field.hasOwnProperty('property')) {\r\n     let property = field['property'];\r\n     property = this.id + '.' + property;\r\n     input.setAttribute('property', property);\r\n     }\r\n     for (let attr in field) {\r\n     if (attr === 'property' || attr === 'class' || !field.hasOwnProperty(attr)) {\r\n     continue;\r\n     }\r\n     input.setAttribute(attr, field[attr]);\r\n     }\r\n\r\n     this.$viewElement.appendChild(input);\r\n\r\n     let newcontrol: Control = this.$owner.load(field['id']);\r\n     this.children[newcontrol.getId()] = newcontrol;\r\n     }*/\r\n}\r\n","/**\r\n * Created by Stefan on 01.03.2017.\r\n */\r\nimport {Control} from '../../Control';\r\n\r\nexport class HTML extends Control {\r\n    constructor(data: JSON|Object|any) {\r\n        super();\r\n\r\n        let id: string;\r\n        let tag: string;\r\n\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            data = {};\r\n        } else if (data) {\r\n            id = data.id;\r\n        }\r\n        if (id) {\r\n            this.id = id;\r\n            this.$view = document.getElementById(id);\r\n        }\r\n        if (!this.$view) {\r\n            if (data) {\r\n                tag = data['tag'] || 'div';\r\n            } else {\r\n                tag = 'div';\r\n            }\r\n            this.$view = document.createElement(tag);\r\n            let parent = document.getElementsByTagName('body')[0];\r\n            parent.appendChild(this.$view);\r\n        }\r\n        if (!parent) {\r\n            return;\r\n        }\r\n        this.writeAttribute(data, this.$view);\r\n    }\r\n\r\n    private writeAttribute(properties: Object, entity?: any) {\r\n        let lowKey;\r\n        if (!entity) {\r\n            lowKey = properties['tag'] || 'div';\r\n            entity = document.createElement(lowKey);\r\n        }\r\n        for (let key in properties) {\r\n            if (!properties.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            lowKey = key.toLowerCase();\r\n            if (properties[key] === null) {\r\n                entity.setAttribute(key, '');\r\n                continue;\r\n            }\r\n\r\n            if (lowKey === 'tag' || lowKey.charAt(0) === '$' || lowKey === '$graphModel' || lowKey === 'class') {\r\n                continue;\r\n            }\r\n            if (lowKey === 'children') {\r\n                if (Array.isArray(properties[key])) {\r\n                    for (let item in properties[key]) {\r\n                        if (properties[key].hasOwnProperty(item) === false) {\r\n                            continue;\r\n                        }\r\n                        let child = this.writeAttribute(item);\r\n                        if (child) {\r\n                            entity.appendChild(child);\r\n                        }\r\n                    }\r\n                } else {\r\n                    let child = this.writeAttribute(properties[key]);\r\n                    if (child) {\r\n                        entity.appendChild(child);\r\n                    }\r\n                }\r\n                continue;\r\n            }\r\n            entity[key] = properties[key];\r\n        }\r\n        return entity;\r\n    }\r\n}\r\n","import { Point } from '../BaseElements';\r\nimport { Util } from '../../util';\r\nimport { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\n\r\nexport class InfoText extends Node {\r\n\r\n    public cardinality: string = '';\r\n    private $heightOfOneTextItem: number;\r\n    private $cardinalitySvg: Element;\r\n    private $propertySvg: Element;\r\n    private $rectBackground: Element;\r\n\r\n    constructor(info: any) {\r\n        super(info);\r\n        if (typeof (info) === 'string') {\r\n            this.id = info;\r\n        } else {\r\n            if (info.property) {\r\n                this.property = info.property;\r\n            }\r\n            if (info.cardinality) {\r\n                this.cardinality = info.cardinality;\r\n            }\r\n        }\r\n        this.$isDraggable = true;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n    }\r\n\r\n    public updateCardinality(cardinality: string): void {\r\n        this.cardinality = cardinality;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (this.$rectBackground) {\r\n            this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n            this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n        }\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((cardinality.length === 0 && this.property.length > 0) || !this.$cardinalitySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$cardinalitySvg) {\r\n            this.$cardinalitySvg.textContent = cardinality;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.property.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    public updateProperty(property: string): void {\r\n        this.property = property;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((property.length === 0 && this.cardinality.length > 0) || !this.$propertySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$propertySvg) {\r\n            this.$propertySvg.textContent = property;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.cardinality.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos: Point = this.getPos();\r\n        let group = Util.create({ tag: 'g', class: 'SVGEdgeInfo', transform: 'translate(0, 0)' });\r\n\r\n        // append rect as background for text items\r\n        this.$rectBackground = Util.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y - this.$heightOfOneTextItem + 3,\r\n            width: this.getSize().x,\r\n            height: this.getSize().y,\r\n            fill: '#DDD',\r\n            'stroke-width': 0,\r\n            rx: '5',\r\n            ry: '5'\r\n        });\r\n        group.appendChild(this.$rectBackground);\r\n\r\n        let y = pos.y;\r\n        if (this.property) {\r\n            // property\r\n            this.$propertySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$propertySvg.textContent = this.property;\r\n            group.appendChild(this.$propertySvg);\r\n\r\n            y += this.$heightOfOneTextItem;\r\n        }\r\n\r\n        // cardinality\r\n        if (this.cardinality) {\r\n            this.$cardinalitySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$cardinalitySvg.textContent = this.cardinality;\r\n            group.appendChild(this.$cardinalitySvg);\r\n        }\r\n\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        let cardinalityAvailable = this.cardinality && this.cardinality.length > 0;\r\n        let propertyAvailable = this.property && this.property.length > 0;\r\n\r\n        return !propertyAvailable && !cardinalityAvailable;\r\n    }\r\n\r\n    public redrawFromEdge(newPos: Point): void {\r\n\r\n        if (!newPos) {\r\n            return;\r\n        }\r\n\r\n        let oldPos = this.getPos();\r\n\r\n        // get difference between new and the old position\r\n        let diffPos = new Point();\r\n        diffPos.x = newPos.x - oldPos.x;\r\n        diffPos.y = newPos.y - oldPos.y;\r\n\r\n        // get translate information\r\n        let translation = this.$view.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        let sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        // set new traslation values\r\n        let newTransX = (sx + diffPos.x);\r\n        let newTransY = (sy + diffPos.y);\r\n        this.$view.setAttributeNS(null, 'transform', 'translate(' + newTransX + ' ' + newTransY + ')');\r\n\r\n        // set new position of svg\r\n        this.getPos().x = newPos.x;\r\n        this.getPos().y = newPos.y;\r\n    }\r\n\r\n    public getText(): string {\r\n        let infoTxt: string = '';\r\n\r\n        if (this.property) {\r\n            infoTxt = this.property;\r\n        }\r\n        if (this.cardinality) {\r\n            if (infoTxt.length > 0) {\r\n                infoTxt += '\\n';\r\n            }\r\n            infoTxt += this.cardinality;\r\n        }\r\n\r\n        return infoTxt;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    private calcSize(): Point {\r\n        let text: string = this.getText();\r\n        let items: Array<string> = text.split('\\n');\r\n\r\n        let maxSize = new Point(0, 0);\r\n        if (text.length === 0) {\r\n            return maxSize;\r\n        }\r\n\r\n        for (let i = 0; i < items.length; i += 1) {\r\n            // calculate size\r\n            let sizeOfText: ClientRect = Util.sizeOf(items[i]);\r\n            maxSize.x = Math.max(maxSize.x, sizeOfText.width);\r\n            maxSize.y += sizeOfText.height;\r\n\r\n            this.$heightOfOneTextItem = sizeOfText.height;\r\n        }\r\n\r\n        return maxSize;\r\n    }\r\n    private resetAllSvgElements() {\r\n        this.$cardinalitySvg = undefined;\r\n        this.$view = undefined;\r\n        this.$propertySvg = undefined;\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\nimport {PropertyBinder} from '../../PropertyBinder';\r\n\r\nexport class Input extends Control {\r\n    private type: string;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data = super.initViewDataProperties(oldData);\r\n        if ('checkbox' === this.type || 'radio' === this.type) {\r\n            data.addFrom('checked', oldData);\r\n        }\r\n        data.addFrom('value', oldData);\r\n        data.addFrom('type', oldData);\r\n        return data;\r\n    }\r\n\r\n    public load(data: any) {\r\n        let id: string;\r\n        let inputField: HTMLElement;\r\n        let useData: boolean;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            useData = true;\r\n        } else {\r\n            id = data.id;\r\n            if (data.type) {\r\n                this.setType(data['type']);\r\n            } else {\r\n                this.setType('text');\r\n            }\r\n            if (data.hasOwnProperty('property')) {\r\n                this.setProperty(data['property']);\r\n            }\r\n            useData = false;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n\r\n        inputField = document.getElementById(id);\r\n\r\n        if (useData) {\r\n            if (inputField) {\r\n                // TODO disuss how to decide, which property we should listen on...\r\n                // this.property = id;\r\n                if (inputField.hasAttribute('Property')) {\r\n                    this.setProperty(inputField.getAttribute('Property'));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (inputField instanceof HTMLInputElement) {\r\n            this.setView(inputField);\r\n            this.type = inputField.type;\r\n            // useData = false;\r\n        } else {\r\n            if (!inputField) {\r\n                this.setView(document.createElement('input'));\r\n                this.$viewData = this.initViewDataProperties(this.$viewData);\r\n                // append viewListener\r\n                // this.$view.addEventListener('change', this.$viewListener);\r\n                if (typeof(data) !== 'string') {\r\n                    for (let attr in data) {\r\n                        if (data.hasOwnProperty(attr) === false) {\r\n                            continue;\r\n                        }\r\n                        // this.$view[attr] = data[attr];\r\n                        this.$viewData.setValue(attr, data[attr]);\r\n                    }\r\n                } else {\r\n                    if (this.type) {\r\n                        this.$view.setAttribute('type', this.type);\r\n                    }\r\n                    if (data.hasOwnProperty('class')) {\r\n                        this.$view.setAttribute('class', data['class']);\r\n                    }\r\n                    this.$view.setAttribute('id', this.id);\r\n                    this.$view.setAttribute('property', this.property);\r\n                }\r\n\r\n                if (data.value) {\r\n                    // if theres a value at the control, we want to change the model to the new value\r\n                    if (this.$model) {\r\n                        this.$model.setValue(this.lastProperty, data.value);\r\n                    }\r\n                }\r\n                if (this.$model) {\r\n                    PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                }\r\n\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (this.property && entity) {\r\n            if (entity.id === this.property.split('.')[0]) {\r\n                this.$model = entity;\r\n                PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                // entity.addListener(this, this.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n    // TODO FIXME protected updateElement(property: string, value: string) {\r\n    //     if (this.$view instanceof HTMLInputElement) {\r\n    //         if (value != null) {\r\n    //             if(property == this.lastProperty) {\r\n    //                 (<HTMLInputElement>this.$view)[this.getStandardProperty()] = value;\r\n    //             } else {\r\n    //                 // this.getRoot().setValue(this, property, value, (<HTMLInputElement>this.$view)[property]);\r\n    //                 (<HTMLInputElement>this.$view)[property] = value;\r\n    //             }\r\n    //         } else {\r\n    //             delete (<HTMLInputElement>this.$view)[property];\r\n    //         }\r\n    //     }\r\n    // }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            super.controlChanged(ev);\r\n        }\r\n// <<<<<<< HEAD\r\n//             let newVal = element[this.getStandardProperty()];\r\n//             if (this.isKeyOnly()) {\r\n//                 // we expect, element[this.lastProperty] to be boolean:\r\n//                 if (!newVal) {\r\n//                     newVal = null;\r\n//                 }\r\n//             } else {\r\n//             }\r\n        // let $graphModel;\r\n        // let value;\r\n        /*if (this.$graphModel) {\r\n            $graphModel = this.$graphModel;\r\n            value = this.$graphModel.getValue(this.lastProperty);\r\n        } else {\r\n            $graphModel = this;\r\n            if (this.$view) {\r\n                value = this.$view[this.lastProperty];\r\n            }\r\n        }*/\r\n        // this.$model.setValue(this.lastProperty, newVal);\r\n        // this.propertyChange(this.$graphModel,this.lastProperty, this.$graphModel.getValue(this.lastProperty), newVal);\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n// =======\r\n        // let newVal = element[this.lastProperty];\r\n        // if (this.isKeyOnly()) {\r\n        //     // we expect, element[this.lastProperty] to be boolean:\r\n        //     if (!newVal) {\r\n        //         newVal = null;\r\n        //     }\r\n        // } else {\r\n        // }\r\n        // let $graphModel;\r\n        // let value;\r\n\r\n        // $graphModel = this.getViewData();\r\n        // if (this.$graphModel) {\r\n        //     $graphModel = this.$graphModel;\r\n        //     value = this.$graphModel.getValue(this.lastProperty);\r\n        // } else {\r\n        //     $graphModel = this;\r\n        //     if (this.$view) {\r\n        //         value = this.$view[this.lastProperty];\r\n        //     }\r\n        // }\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n//            this.saveViewInData();\r\n// >>>>>>> addOldFunctions\r\n//         } else {\r\n//             console.log('value does not match the pattern...');\r\n//         }\r\n    }\r\n\r\n    public setType(type: string): void {\r\n        let oldValue: string = this.type;\r\n        if (oldValue === type) {\r\n            return;\r\n        }\r\n        if (type === 'radio') {\r\n            this.$viewData.setValue('checked', null);\r\n        } else {\r\n            this.$viewData.removeKey('checked');\r\n        }\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\n\r\nexport class Label extends Control {\r\n    public load(data: JSON): any {\r\n        this.createControl(this.$owner, data);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('label');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr === 'textContent') {\r\n                this.$view.textContent = data['textContent'];\r\n            } else {\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Method extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.updateType(data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.updateType(data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.updateType(data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n            // e.g. setName() : string or name:string\r\n            let dataSplitted = data.split(':');\r\n\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }\r\n                else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType(dataSplitted[1].trim() || 'void');\r\n            }\r\n            // set default return type of void\r\n            else {\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = data.trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }  else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType('void');\r\n            }\r\n        }\r\n\r\n        if (Util.includes(this.$data.getValue('name'), '(') && !Util.includes(this.$data.getValue('name'), ')') === false) {\r\n            this.$data.setValue('name', this.$data.getValue('name') + '()');\r\n        }\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\nimport {Association} from '../edges';\r\nimport { GraphModel } from '..';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\n\r\nexport class Node extends DiagramElement {\r\n    public $edges: Association[] = [];\r\n    public $minWidth: number = 150;\r\n    public $minheight: number = 25;\r\n    public $defaulEdgeType: string;\r\n\r\n    constructor(data: JSON|string|Object|any) {\r\n        super();\r\n\r\n        // default size\r\n        this.withSize(this.$minWidth, this.$minheight);\r\n\r\n        if (data) {\r\n            if (data['x'] && data['y']) {\r\n                this.withPos(data['x'], data['y']);\r\n            }\r\n            if (data['width'] || data['height']) {\r\n                this.withSize(data['width'], data['height']);\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos = this.getPos();\r\n        const size = this.getSize();\r\n\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x - size.x / 2,\r\n            y: pos.y - size.y / 2,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y,\r\n            width: size.x,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        const shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'middle',\r\n            'font-family': 'Verdana',\r\n            'font-size': '14',\r\n            fill: 'black'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = this.id;\r\n\r\n        let group = this.createShape({tag: 'g', id: this.id});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public copy(): Node {\r\n        let copy: Node;\r\n        // create new id\r\n        let model = <GraphModel>this.$owner || <GraphModel>this.getRoot();\r\n        if (model) {\r\n            let type = this.property || Node.name;\r\n            let newId = model.getNewId(type);\r\n            copy = <Node>model.createElement(type, newId, null);\r\n            copy.withSize(this.getSize().x, this.getSize().y);\r\n            copy.$owner = model;\r\n        } else {\r\n            copy.id = this.id + '-copy';\r\n            copy.$owner = this.getRoot();\r\n        }\r\n        return copy;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n// EMPTY\r\n    }\r\n    public addAttribute(value: string): Attribute {\r\n        return null;\r\n    }\r\n    public getAttributes(): Attribute[] {\r\n        return null;\r\n    }\r\n    public addMethod(value: string): Method {\r\n        return null;\r\n    }\r\n    public updateLabel(newLabel: string): void {\r\n// EMPTY\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\n\r\nexport class SO extends DiagramElement {\r\n    public static create(element: Object) {\r\n        let result: SO = new SO();\r\n        for (let key in element) {\r\n            if (element.hasOwnProperty(key) === false) {\r\n                continue;\r\n            }\r\n            result.withKeyValue(key, element[key]);\r\n\r\n        }\r\n        return result;\r\n    }\r\n\r\n    public withKeyValue(key: string, value: any): SO {\r\n        if (key === 'typ') {\r\n            this.property = value;\r\n        } else if (key === 'x') {\r\n            this.withPos(value, null);\r\n        } else if (key === 'y') {\r\n            this.withPos(null, value);\r\n        } else if (key === 'width') {\r\n            this.withSize(value, null);\r\n        } else if (key === 'height') {\r\n            this.withSize(null, value);\r\n        } else {\r\n            this[key] = value;\r\n        }\r\n        return this;\r\n    }\r\n}\r\n","import {Point} from '../BaseElements';\r\nimport {Node} from './Node';\r\n\r\nexport class StereoType extends Node {\r\n\r\n    protected stereoType: string;\r\n\r\n    constructor (type: string, x: number, y: number) {\r\n        super('');\r\n        this.withPos(x, y);\r\n        this.setStereoType(type);\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        let pos: Point = this.getPos();\r\n        let size: Point = this.getSize();\r\n\r\n               // = = = STEREOTYPE = = =\r\n        let stereoType = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y - this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': 10,\r\n            'font-weight': 'bold',\r\n            fill: 'black'\r\n        });\r\n        stereoType.textContent = this.stereoType;\r\n\r\n        this.$view = stereoType;\r\n        return stereoType;\r\n    }\r\n\r\n    public setStereoType(value: string): void {\r\n        this.stereoType = '<<' + value + '>>';\r\n    }\r\n\r\n    public getStereoType(): string {\r\n        return this.stereoType;\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { SO } from './SO';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport { Util } from '../../util';\r\n\r\nexport class Symbol extends Node {\r\n    public $heightMax: number = 0;\r\n    public $heightMin: number = 0;\r\n\r\n    constructor(typ: string) {\r\n        super(typ);\r\n    }\r\n\r\n    public draw(typ?: string): SVGElement {\r\n        return SymbolLibary.draw(this);\r\n    }\r\n}\r\n\r\n// \t\t\t\t###################################################### SymbolLibary ####################################################################################\r\n// Example Items\r\n// {tag: 'path', d: ''}\r\n// {tag: 'rect', width:46, height:34}\r\n// {tag: 'ellipse', width:23, height:4}\r\n// {tag: 'line', x1:650, y1:-286, x2:650, y2:-252}\r\n// {tag: 'circle', r:5, x:12, y:0}\r\n// {tag: 'image', height: 30, width: 50, content$src: hallo}\r\n// {tag: 'text', 'text-anchor': 'left', x: '10'}\r\nexport class SymbolLibary {\r\n\r\n    public static drawSVG(node: any): SVGSVGElement {\r\n        // const lib = new SymbolLibary();\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            const parent = SO.create(node);\r\n            parent['property'] = 'SVG';\r\n            symbol = fn(parent);\r\n            // symbol = fn.apply(lib, parent);\r\n\r\n            return SymbolLibary.createGroup(parent, symbol);\r\n        }\r\n        return symbol;\r\n    }\r\n\r\n    public static draw(node: any, parent?: Object): SVGElement {\r\n        // Node is Symbol or simple Object\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            if (!(node instanceof DiagramElement)) {\r\n                node = SO.create(node);\r\n                if (!node.property) {\r\n                    node.property = 'SVG';\r\n                }\r\n            }\r\n            symbol = fn.apply(this, [node]);\r\n            if (!parent) {\r\n                return SymbolLibary.createGroup(node, symbol);\r\n            }\r\n            return SymbolLibary.createGroup(node, symbol);\r\n        } else if (node.property) {\r\n            symbol = new Symbol(node.property);\r\n            symbol.init(node);\r\n            let pos = node.getPos();\r\n            let size = node.getSize();\r\n            symbol.withPos(pos.x, pos.y);\r\n            symbol.withSize(size.x, size.y);\r\n            symbol['value'] = node['value'];\r\n            parent = node['$parent'];\r\n            return SymbolLibary.draw(symbol, parent);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public static upFirstChar(txt: string): string {\r\n        return txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase();\r\n    }\r\n\r\n    public static isSymbolName(typ: string): boolean {\r\n        let fn = SymbolLibary['draw' + SymbolLibary.upFirstChar(typ)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static isSymbol(node: Symbol) {\r\n        let fn = SymbolLibary[SymbolLibary.getName(node)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static getName(node: any): string {\r\n        if (node['type']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['type']);\r\n        }\r\n        if (node.property) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node.property);\r\n        }\r\n        if (node['src']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['src']);\r\n        }\r\n        return 'drawNode';\r\n    }\r\n\r\n    /*FIXME   public static createImage(node: Symbol, $graphModel:Node) {\r\n           let n, img: HTMLElement;\r\n           // node.$graphModel = node;\r\n           if (SymbolLibary.isSymbol(node)) {\r\n               return SymbolLibary.draw(null, node);\r\n           }\r\n           n = {tag: 'img', $graphModel: node, src: node['src']};\r\n           let size = node.getSize();\r\n           if (size.isEmpty() === false) {\r\n               n['width'] = size.x;\r\n               n['height'] = size.y;\r\n           } else {\r\n               n['xmlns'] = 'http://www.w3.org/1999/xhtml';\r\n           }\r\n           img = Util.create(n);\r\n           if (size.isEmpty()) {\r\n               $graphModel.appendImage(img);\r\n               return null;\r\n           }\r\n           return img;\r\n       }*/\r\n\r\n    public static createGroup(node: DiagramElement, group: any) {\r\n        let func, y: number, z: number, box, item: Element, transform, i, offsetX = 0, offsetY = 0;\r\n        let svg: any;\r\n        if (node.property.toUpperCase() === 'HTML') {\r\n            let so = {\r\n                tag: 'svg',\r\n                style: { left: (group.x | 0) + node.getPos().x, top: (group.y | 0) + node.getPos().y, position: 'absolute' }\r\n            };\r\n            if (node['transform']) {\r\n                so['transform'] = node['transform'];\r\n            }\r\n            svg = Util.create(so);\r\n        } else {\r\n            svg = Util.create({ tag: 'g' });\r\n            transform = 'translate(' + group.getPos().x + ' ' + group.getPos().y + ')';\r\n            if (group.scale) {\r\n                transform += ' scale(' + group.scale + ')';\r\n            }\r\n            if (group.rotate) {\r\n                transform += ' rotate(' + group.rotate + ')';\r\n            }\r\n            svg.setAttribute('transform', transform);\r\n            if (group['id']) {\r\n                svg.id = group['id'];\r\n            }\r\n        }\r\n\r\n        if (node['tooltip']) {\r\n            const tooltipTitleAttr = {\r\n                tag: 'title'\r\n            };\r\n            let tooltipTitle = Util.createShape(tooltipTitleAttr);\r\n            tooltipTitle.textContent = node['tooltip'];\r\n            svg.appendChild(tooltipTitle);\r\n        }\r\n\r\n        if (node['background']) {\r\n            const attrCircle = {\r\n                tag: 'circle',\r\n                cx: 20,\r\n                cy: 20,\r\n                r: 17,\r\n                stroke: '#888',\r\n                'stroke-width': 0,\r\n                fill: '#DDD'\r\n            };\r\n            svg.appendChild(Util.create(attrCircle));\r\n        }\r\n\r\n        for (i = 0; i < group.items.length; i += 1) {\r\n            svg.appendChild(Util.create(group.items[i]));\r\n        }\r\n        let elements = node['elements'];\r\n        Util.setSize(svg, group.width + node.getSize().x, group.height + node.getSize().y);\r\n        node['$heightMin'] = node.getSize().y;\r\n        if (elements) {\r\n            for (i = 0; i < elements.length; i += 1) {\r\n                if (!elements[i] && elements[i].length < 1) {\r\n                    elements.splice(i, 1);\r\n                    i -= 1;\r\n                }\r\n            }\r\n            box = Util.create({ tag: 'g' });\r\n            // Calculate new Height\r\n            let c: number;\r\n            z = 0;\r\n            for (c = 0; c < elements.length; c += 1) {\r\n                if (typeof elements[c] === 'string') {\r\n                    z += 1;\r\n                } else {\r\n                    z += elements[c].length;\r\n                }\r\n            }\r\n            z = z * 25 + 6;\r\n            box.appendChild(Util.create({\r\n                tag: 'rect',\r\n                rx: 0,\r\n                x: offsetX,\r\n                y: (offsetY + 28),\r\n                width: 70,\r\n                height: z,\r\n                stroke: '#000',\r\n                fill: '#fff',\r\n                opacity: '0.7'\r\n            }));\r\n            node['$heightMax'] = z + node['$heightMin'];\r\n\r\n            svg['elements'] = elements;\r\n            if (node['type'] === 'DropDown') {\r\n                svg['activ'] = Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': 60,\r\n                    'x': (10 + offsetX),\r\n                    'y': 20,\r\n                    value: node['activText']\r\n                });\r\n                svg.appendChild(svg.activ);\r\n            }\r\n\r\n            y = offsetY + 46;\r\n            // 46 -28 = 18\r\n\r\n            func = function (event: Event) {\r\n                if (svg.activ) {\r\n                    svg.activ.textContent = (<any>event.currentTarget).value;\r\n                }\r\n            };\r\n            let txt: string;\r\n            let textClass = 'SVGTEXT';\r\n            for (z = 0; z < elements.length; z += 1) {\r\n                if (typeof elements[z] === 'string') {\r\n                    txt = elements[z];\r\n                } else {\r\n                    item = this.addText(y, offsetX, box, elements[z][0], 'SVGTEXT');\r\n                    y += 26;\r\n                    for (c = 1; c < elements[z].length; c += 1) {\r\n                        item = this.addText(y, offsetX, box, '* ' + elements[z][c], 'SVGTEXTITEM');\r\n\r\n                        item['value'] = elements[z];\r\n                        if (node['action']) {\r\n                            item['onclick'] = node['action'];\r\n                        } else {\r\n                            item['onclick'] = func;\r\n                        }\r\n                        y += 26;\r\n                    }\r\n                    txt = elements[z];\r\n                    let subBox = Util.create({\r\n                        tag: 'rect',\r\n                        rx: 0,\r\n                        x: offsetX,\r\n                        y: (offsetY + 28),\r\n                        width: 60,\r\n                        height: z,\r\n                        stroke: '#000',\r\n                        fill: '#fff',\r\n                        opacity: '0.7'\r\n                    });\r\n                    continue;\r\n                }\r\n                // let txt = elements[z];\r\n                item = this.addText(y, offsetX, box, txt, textClass);\r\n\r\n                item['value'] = elements[z];\r\n                if (node['action']) {\r\n                    item['onclick'] = node['action'];\r\n                } else {\r\n                    item['onclick'] = func;\r\n                }\r\n                y += 26;\r\n            }\r\n            svg.choicebox = box;\r\n        }\r\n        svg.tool = node;\r\n        svg.onclick = function () {\r\n            if (svg.status === 'close') {\r\n                svg.open();\r\n            } else {\r\n                svg.close();\r\n            }\r\n        };\r\n        svg.close = function () {\r\n            if (svg.status === 'open' && svg.choicebox) {\r\n                this.removeChild(svg.choicebox);\r\n            }\r\n            svg.status = 'close';\r\n            svg.tool.$size.height = svg.tool.heightMin;\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x, g.tool.height + g.tool.y);\r\n            Util.setSize(svg, svg.tool.$size.x, svg.tool.$size.y);\r\n        };\r\n        svg.open = function () {\r\n            if (this.tagName === 'svg') {\r\n                return;\r\n            }\r\n            if (svg.status === 'close' && svg.choicebox) {\r\n                this.appendChild(svg.choicebox);\r\n            }\r\n            svg.status = 'open';\r\n            svg.tool.$size.height = svg.tool.heightMax;\r\n            Util.setSize(svg, svg.tool.width, svg.tool.height);\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x + 10, g.tool.height + g.tool.y + 10);\r\n        };\r\n        svg.close();\r\n        return svg;\r\n    }\r\n\r\n    public static addChild(parent: SVGElement, json: JSON | Element): void {\r\n        let item: Element;\r\n        if ((<any>json).offsetLeft) {\r\n            item = <Element>json;\r\n        } else {\r\n            item = Util.create(json);\r\n        }\r\n        item.setAttribute('class', 'draggable');\r\n        parent.appendChild(item);\r\n    }\r\n\r\n    public static all(node: any): void {\r\n        SymbolLibary.drawSmiley(node);\r\n        SymbolLibary.drawDatabase(node);\r\n        SymbolLibary.drawLetter(node);\r\n        SymbolLibary.drawMobilephone(node);\r\n        SymbolLibary.drawWall(node);\r\n        SymbolLibary.drawActor(node);\r\n        SymbolLibary.drawLamp(node);\r\n        SymbolLibary.drawArrow(node);\r\n        SymbolLibary.drawButton(node);\r\n        SymbolLibary.drawDropdown(node);\r\n        SymbolLibary.drawClassicon(node);\r\n        SymbolLibary.drawClassWithEdgeicon(node);\r\n    }\r\n\r\n    public static drawHamburger(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'circle', r: 10, fill: '#ccc', cx: 12, cy: 12, 'stroke-width': 1, stroke: 'black'},\r\n                { tag: 'path', d: 'M 8,7 H 16 M 8,12 H 16 M 8,17 H 16', stroke: 'black', fill: 'none' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawSmiley(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'path', d: 'm49.01774,25.64542a24.5001,24.5 0 1 1 -49.0001,0a24.5001,24.5 0 1 1 49.0001,0z', stroke: 'black', fill: 'none' }, { tag: 'path', d: 'm8,31.5c16,20 32,0.3 32,0.3' },\r\n                { tag: 'path', d: 'm19.15,20.32a1.74,2.52 0 1 1 -3.49,0a1.74,2.52 0 1 1 3.49,0z' },\r\n                { tag: 'path', d: 'm33,20.32a1.74,2.52 0 1 1 -3.48,0a1.74,2.52 0 1 1 3.48,0z' },\r\n                { tag: 'path', d: 'm5.57,31.65c3.39,0.91 4.03,-2.20 4.03,-2.20' },\r\n                { tag: 'path', d: 'm43,32c-3,0.91 -4,-2.20 -4.04,-2.20' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDatabase(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 40,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,-6.26 25.03,-6.26 25.03,0l0,25.82c0,6.26 -25.03,6.26 -25.03,0l0,-25.82z',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLetter(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 17,\r\n            items: [\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1,1l22,0l0,14l-22,0l0,-14z' },\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1.06,1.14l10.94,6.81l10.91,-6.91' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMobilephone(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 4.2 0.5 15.61 0c 2 0 3.7 1.65 3.7 3.7l 0 41.6c 0 2-1.65 3.7-3.7 3.7l-15.6 0c-2 0-3.7-1.6-3.7-3.7l 0-41.6c 0-2 1.6-3.7 3.7-3.7z',\r\n                    fill: 'none',\r\n                    stroke: 'black'\r\n                },\r\n                { tag: 'path', d: 'm 12.5 2.73a 0.5 0.5 0 1 1-1 0 0.5 0.5 0 1 1 1 0z' },\r\n                { tag: 'path', d: 'm 14 46a 2 2 0 1 1-4 0 2 2 0 1 1 4 0z' },\r\n                { tag: 'path', d: 'm 8 5 7 0' },\r\n                { tag: 'path', d: 'm 1.63 7.54 20.73 0 0 34-20.73 0z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawWall(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'path', d: 'm26,45.44l-5,3.56l-21,-9l0,-36.41l5,-3.56l20.96,9l-0,36.4z' },\r\n                {\r\n                    tag: 'path',\r\n                    stroke: 'white',\r\n                    d: 'm2.21,11l18.34,7.91m-14.46,-12.57l0,6.3m8.2,21.74l0,6.35m-8.6,-10l0,6.351m4.1,-10.67l0,6.3m4.8,-10.2l0,6.3m-8.87,-10.23l0,6.35m4.78,-10.22l0,6.35m-8,14.5l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m0,-13l0,34m-18.23,-41.84l18.3,8m0,0.11l5,-3.57'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawActor(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'line', stroke: '#000', x1: '12', y1: '10', x2: '12', y2: '30' },\r\n                { tag: 'circle', stroke: '#000', cy: '5', cx: '12', r: '5' },\r\n                { tag: 'line', stroke: '#000', y2: '18', x2: '25', y1: '18', x1: '0' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '5', y1: '30', x1: '12' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '20', y1: '30', x1: '12' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLamp(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 22.47 10.58c-6.57 0-11.89 5.17-11.89 11.54 0 2.35 0.74 4.54 2 6.36 2 4 4.36 5.63 4.42 10.4l 11.15 0c 0.12-4.9 2.5-6.8 4.43-10.4 1.39-1.5 1.8-4.5 1.8-6.4 0-6.4-5.3-11.5-11.9-11.5z',\r\n                    fill: 'white',\r\n                    stroke: 'black'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 40 8 0c 0.58 0 1 0.5 1 1 0 0.6-0.5 1-1 1l-8 0c-0.6 0-1-0.47-1-1 0-0.58 0.47-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 42.7 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 45.3 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                { tag: 'path', d: 'm 19.5 48c 0.37 0.8 1 1.3 1.9 1.7 0.6 0.3 1.5 0.3 2 0 0.8-0.3 1.4-0.8 1.9-1.8z' },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 6 37.5 4.2-4c 0.3-0.3 0.8-0.3 1 0 0.3 0.3 0.3 0.8 0 1.1l-4.2 4c-0.3 0.3-0.8 0.3-1.1 0-0.3-0.3-0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 39 37.56-4.15-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 38 23 5.8 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.8 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 1.3 23 6 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.9 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 34.75 11.2 4-4.1c 0.3-0.3 0.3-0.8 0-1-0.3-0.3-0.8-0.3-1 0l-4 4.1c-0.3 0.3-0.3 0.8 0 1 0.3 0.3 0.8 0.3 1 0z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 11.23 10-4-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 21.64 1.3 0 5.8c 0 0.4 0.3 0.8 0.8 0.8 0.4 0 0.8-0.3 0.8-0.8l 0-5.8c 0-0.4-0.3-0.8-0.8-0.8-0.4 0-0.8 0.3-0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 26.1 24.3c-0.5 0-1 0.2-1.3 0.4-1.1 0.6-2 3-2.27 3.5-0.26-0.69-1.14-2.9-2.2-3.5-0.7-0.4-2-0.7-2.5 0-0.6 0.8 0.2 2.2 0.9 2.9 1 0.9 3.9 0.9 3.9 0.9 0 0 0 0 0 0 0.54 0 2.8 0 3.7-0.9 0.7-0.7 1.5-2 0.9-2.9-0.2-0.3-0.7-0.4-1.2-0.4z'\r\n                },\r\n                { tag: 'path', d: 'm 22.5 28.57 0 10.7' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawStop(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 30,\r\n            height: 30,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: '#FFF',\r\n                    'stroke-width': '2',\r\n                    stroke: '#B00',\r\n                    d: 'm 6,6 a 14,14 0 1 0 0.06,-0.06 z m 0,0 20,21'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMin(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    d: 'm 0,0 19,0 0,19 -19,0 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 13,-0.04'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawArrow(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 10,\r\n            height: 9,\r\n            rotate: node['rotate'],\r\n            items: [\r\n                { tag: 'path', fill: '#000', stroke: '#000', d: 'M 0,0 10,4 0,9 z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMax(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    'stroke-dashoffset': 2,\r\n                    'stroke-dasharray': '4.8,4.8',\r\n                    d: 'm 0,0 4.91187,0 5.44643,0 9.11886,0 0,19.47716 -19.47716,0 0,-15.88809 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 6,0.006 0.02,5 0.01,-11 -0.03,6.02 c 2,-0.01 4,-0.002 6,0.01'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawButton(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight, btnValue;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        btnValue = node['value'] || '';\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: 60,\r\n            height: 28,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 8,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    filter: 'url(#drop-shadow)',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                { tag: 'text', $font: true, x: 10, y: 18, fill: 'black', value: btnValue, 'class': 'hand' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDropdown(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 0,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth - 20,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 2,\r\n                    x: btnWidth - 20,\r\n                    y: 0,\r\n                    width: 20,\r\n                    height: 28,\r\n                    stroke: '#000',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    style: 'fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1',\r\n                    d: 'm ' + (btnWidth - 15) + ',13 10,0 L ' + (btnWidth - 10) + ',20 z'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassicon(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.19999l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm25.68807,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.2l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                { tag: 'line', x1: 11, y1: 7, x2: 25, y2: 7, stroke: '#000' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassWithEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M2,10 20,10 20,35 2,35 Z M2,17 20,17 M20,10 28,5 28,9 M 28.5,4.7 24,4',\r\n                    style: 'fill:none;stroke:#000000;transform:scale(0.8);'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClass(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: '100%',\r\n            height: '100%',\r\n            items: [\r\n                { tag: 'rect', width: 50, height: 40, x: 0, y: 0, 'stroke-width': 2, stroke: 'black', fill: 'none'},\r\n                { tag: 'rect', width: 50, height: 12, x: 0, y: 18, 'stroke-width': 1, stroke: 'black', fill: 'none'},\r\n                { tag: 'text', x: 27, y: 14, 'text-anchor': 'middle', 'font-size': 11, value: 'Class'},\r\n                { tag: 'text', x: 5, y: 24, 'font-size': 5, value: '+ field: type'},\r\n                { tag: 'text', x: 5, y: 36, 'font-size': 5, value: '+ method(type)'}\r\n            ]\r\n        });\r\n    }\r\n/*\r\n<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n    <g>\r\n    <text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text>\r\n        <text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>\r\n*/\r\n\r\n    public static drawEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M10,30 30,10 M19,10 30,10 30,21',\r\n                    style: 'fill:none;stroke:#555;stroke-width:2;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawCopynode(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M5 5 L15 5 L15 20 L5 20 Z M5 10 L15 10',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M8 2 L18 2 L18 17 L8 17 Z M8 7 L18 7'\r\n                        + 'M11 4.5 L15 4.5 '\r\n                        + 'M10 10 L16 10 '\r\n                        + 'M10 13 L16 13 ',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawBasket(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M12 12 L18 12 L18 11 L22 11 L22 12 L28 12 L28 14 L27 14 L27 29 L13 29 L13 14 L12 14 Z M13 14 L27 14 M20 17 L20 26 M17 16 L17 27 M23 16 L23 27',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawPencil(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M6 20 L12 23 L33 23 L33 17 L12 17 Z M30 17 L30 23 M12 17 L12 23 M15 19 L28 19 M15 21 L28 21',\r\n                    stroke: '#000',\r\n                    'stroke-width': 1,\r\n                    fill: 'white'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    private static addText(y: number, offsetX: number, box: Element, text: string, textClass: string): Element {\r\n        let item: Element;\r\n        box.appendChild(Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'text-anchor': 'left',\r\n            width: 70,\r\n            x: 10,\r\n            y: y,\r\n            class: textClass,\r\n            value: text,\r\n            eventValue: text\r\n        }));\r\n        if (textClass === 'SVGTEXT') {\r\n            textClass = 'SVGChoiceText';\r\n        } else {\r\n            textClass = 'SVGChoice';\r\n        }\r\n\r\n        item = Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            x: offsetX,\r\n            y: y - 18,\r\n            width: 70,\r\n            height: 24,\r\n            stroke: 'none',\r\n            class: textClass,\r\n        });\r\n        item['eventValue'] = text;\r\n        box.appendChild(item);\r\n        return item;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n}\r\n","import {Control} from '../../Control';\r\nimport BridgeElement from '../../BridgeElement';\r\nimport Data from '../../Data';\r\nimport {Util} from '../../util';\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Table extends Control {\r\n    protected items: BridgeElement[] = [];\r\n    private columns: Column[] = [];\r\n    private cells: Object = {};\r\n    private $bodysection: HTMLTableSectionElement;\r\n    private $headersection: HTMLTableSectionElement;\r\n    private showedItems: Array<BridgeElement> = [];\r\n    // BridgeElements:\r\n    private itemsIds: Object = {};\r\n    private countElement: HTMLElement;\r\n    private countColumn: HTMLElement;\r\n    private countColumnPos: number;\r\n    private resultColumn: string;\r\n    private lastSearchText: string;\r\n    private searchColumns: Array<string> = [];\r\n    private searchText: Array<string> = [];\r\n    private sortColumn: Column;\r\n    private direction: number;\r\n    private moveElement: Column = null;\r\n    private isDrag: boolean = false;\r\n    private moveTimeStamp: number;\r\n    private moveX: number;\r\n    private movePos: number;\r\n    private dragColumn: Column;\r\n    private dragPos: number;\r\n    private tableOption: HTMLTableHeaderCellElement;\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    private static indexOfChild(item: BridgeElement) {\r\n        let i: number = 0;\r\n        let child: Node = item.gui;\r\n        while ((child = child.previousSibling) !== null) {\r\n            i++;\r\n        }\r\n        return i;\r\n    }\r\n\r\n    public load(data: any): void {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n            if (data.property) {\r\n                this.property = data.property;\r\n            }\r\n\r\n            if (data.searchColumns) {\r\n                let search: Array<string> = [];\r\n                if (typeof(data.searchColumns) === 'string') {\r\n                    search = data.searchColumns.split(' ');\r\n                } else {\r\n                    search = data.searchColumns;\r\n                }\r\n                for (let z: number = 0; z < search.length; z++) {\r\n                    let item = search[z].trim();\r\n                    if (item.length > 0) {\r\n                        if (this.searchColumns.indexOf(item) < 0) {\r\n                            this.searchColumns.push(item);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        if (this.$view) {\r\n            // Must be an Update\r\n            if (data['columns']) {\r\n                // It is a json must add all things and generate HTML\r\n                for (let i in data['columns']) {\r\n                    if (data['columns'].hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    let col = this.parseData(data['columns'][i]);\r\n                    this.addHeaderInfo(col);\r\n                    this.columns.push(col);\r\n                    this.tableOption.parentElement.insertBefore(col.$element, this.tableOption);\r\n                }\r\n                for (let i in this.showedItems) {\r\n                    let item: BridgeElement = this.showedItems[i];\r\n                    let cell;\r\n                    // Now Add some Children\r\n                    while (item.gui.children.length < this.columns.length) {\r\n                        cell = document.createElement('td');\r\n                        item.gui.appendChild(cell);\r\n                    }\r\n                    // Now Remove Some Children\r\n                    while (item.gui.children.length > this.columns.length) {\r\n                        item.gui.removeChild(item.gui.children[item.gui.children.length - 1]);\r\n                    }\r\n                    for (let c: number = 0; c < this.columns.length; c++) {\r\n                        let name = this.columns[c].attribute;\r\n                        // let count = this.columns.length;\r\n                        cell = item.gui.children[c];\r\n                        cell.innerHTML = item.model.getValue(name);\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n\r\n        this.$view = document.getElementById(id);\r\n        let headerrow: HTMLTableRowElement;\r\n        if (this.$view) {\r\n            if (!this.property) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('table');\r\n            this.$owner.appendChild(this);\r\n        }\r\n        if (!this.$bodysection) {\r\n            // add tbody element if missing\r\n            this.$bodysection = document.createElement('tbody');\r\n            this.$view.appendChild(this.$bodysection);\r\n        }\r\n        if (data['classname']) {\r\n            this.$view.className = data['classname'];\r\n        } else {\r\n            this.$view.className = 'mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp';\r\n        }\r\n\r\n        this.id = id;\r\n        this.$view.id = id;\r\n        this.$view.setAttribute('type', this.constructor['name'].toLowerCase());\r\n        let counter = 0;\r\n        for (let c = 0; c < this.$view.children.length; c++) {\r\n            let row: HTMLTableRowElement = <HTMLTableRowElement>this.$view.children[c];\r\n            if (row instanceof HTMLTableSectionElement) {\r\n                if (row.tagName === 'THEAD') {\r\n                    headerrow = row;\r\n                    // Its a thead\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingHeader(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                } else {\r\n                    // Its a tbody\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingData(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                }\r\n            } else {\r\n                // fallback, if there are no thead and tbody...\r\n                if (counter === 0) {\r\n                    headerrow = row;\r\n                    this.parsingHeader(row);\r\n                } else {\r\n                    this.parsingData(row);\r\n                }\r\n            }\r\n            counter++;\r\n        }\r\n        if (!headerrow || !this.$headersection) {\r\n            if (!this.$headersection) {\r\n                // find eventually existing thead\r\n                let header = this.$view.getElementsByTagName('thead');\r\n                if (header.length === 0) {\r\n                    this.$headersection = document.createElement('thead');\r\n                    this.$view.appendChild(this.$headersection);\r\n                } else {\r\n                    // take first thead element\r\n                    this.$headersection = <HTMLTableSectionElement>header.item(0);\r\n                }\r\n            }\r\n            if (!headerrow) {\r\n                headerrow = document.createElement('tr');\r\n                this.$headersection.appendChild(headerrow);\r\n            }\r\n        }\r\n\r\n        if (data['columns']) {\r\n            // It is a json must add all things and generate HTML\r\n            for (let i in data['columns']) {\r\n                if (data['columns'].hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                let col = this.parseData(data['columns'][i]);\r\n                this.addHeaderInfo(col);\r\n                this.columns.push(col);\r\n                headerrow.appendChild(col.$element);\r\n            }\r\n            this.tableOption = document.createElement('th');\r\n            this.tableOption.classList.add('tableOption');\r\n            headerrow.appendChild(this.tableOption);\r\n            let context: HTMLElement = this.addOptionItem(null, this.tableOption, true);\r\n            let contentChild: HTMLElement = this.addOptionItem('show', context, true);\r\n            // let simpleLink: HTMLElement = this.addOptionItem('show', contentChild, false);\r\n            this.addOptionItem('show', contentChild, false);\r\n        }\r\n        this.registerEvents(['mousemove', 'mousedown', 'mouseup', 'resize', 'dragstart', 'dragover', 'drop', 'dragend']);\r\n\r\n        // Check for SearchBar\r\n        // if(data[\"searchproperty\"]){\r\n        // Create Full Row\r\n        let searchBar = document.createElement('tr');\r\n        let cell = document.createElement('td');\r\n        cell.setAttribute('colspan', '' + (this.columns.length));\r\n        searchBar.appendChild(cell);\r\n\r\n        let search = document.createElement('input');\r\n        search.className = 'search';\r\n        let that = this;\r\n        search.addEventListener('keyup', function (evt) {\r\n            that.search(evt.target['value']);\r\n        });\r\n\r\n        cell.appendChild(search);\r\n        if (this.resultColumn) {\r\n            if (this.resultColumn.indexOf('#') !== 0) {\r\n                this.countElement = document.createElement('div');\r\n                searchBar.appendChild(this.countElement);\r\n            } else {\r\n                for (let z: number = 0; z < this.$headersection.children.length; z++) {\r\n                    if (this.$headersection.children[z].innerHTML === this.resultColumn) {\r\n                        this.countColumn = <HTMLElement> this.$headersection.children[z];\r\n                        this.countColumnPos = z;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        let first = this.$headersection.children.item(0);\r\n        this.$headersection.insertBefore(searchBar, first);\r\n\r\n        this.updateElement(this.property, null);\r\n\r\n        // now update those elements, that were not loaded currently\r\n    }\r\n\r\n    public tableEvent(type: string, e: Event) {\r\n        let button: number = 0;\r\n        let eventX: number = 0;\r\n        if (e instanceof MouseEvent) {\r\n            button = e.buttons;\r\n            eventX = e.pageX;\r\n        }\r\n        if (type === 'mouseup') {\r\n            this.moveElement = null;\r\n        } else if (type === 'mousedown' || type === 'resize') {\r\n            // End to Resize\r\n            this.moveElement = null;\r\n            if (button === 1) {\r\n                let c: number;\r\n                for (c = 0; c < this.columns.length; c++) {\r\n                    if (this.columns[c].$resize === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = false;\r\n                        break;\r\n                    } else if (this.columns[c].$element === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = true;\r\n                    }\r\n                }\r\n                this.moveTimeStamp = e.timeStamp;\r\n                this.moveX = eventX;\r\n            } else {\r\n                this.moveTimeStamp = 0;\r\n            }\r\n        } else if (type === 'mousemove') {\r\n            if (button === 1 && this.moveElement) {\r\n                if (this.moveTimeStamp && e.timeStamp - this.moveTimeStamp < 2000) {\r\n                    if (this.isDrag) {\r\n                        // FIXME\r\n                    } else {\r\n                        let x = eventX - this.moveX;\r\n                        let width = this.moveElement.$element.offsetWidth;\r\n                        this.moveElement.$element.width = '' + (width + x);\r\n                        e.stopPropagation();\r\n                    }\r\n                }\r\n                this.moveX = eventX;\r\n                this.moveTimeStamp = e.timeStamp;\r\n            }\r\n        } else if (this.isDrag) {\r\n            this.columnDragEvent(type, <DragEvent> e);\r\n        }\r\n    }\r\n\r\n    public parsingHeader(row: HTMLTableRowElement) {\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let column: HTMLTableHeaderCellElement = <HTMLTableHeaderCellElement>row.children[i];\r\n            let id = column.innerHTML.trim();\r\n            let col: Column = null;\r\n            for (let c in this.columns) {\r\n                if (this.columns.hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                if (this.columns[c].label === id) {\r\n                    col = this.columns[c];\r\n                    col.$element = column;\r\n                    break;\r\n                }\r\n            }\r\n            if (col === null) {\r\n                col = new Column();\r\n                col.label = id;\r\n                col.attribute = column.getAttribute('attribute');\r\n                col.$element = column;\r\n                this.columns.push(col);\r\n            }\r\n            this.addHeaderInfo(col);\r\n        }\r\n    }\r\n\r\n    public parsingData(row: HTMLTableRowElement) {\r\n        let id = row.getAttribute('id');\r\n        let item: Data = this.$owner.getItem(id);\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let cell: HTMLTableCellElement = <HTMLTableCellElement>row.children[i];\r\n            let colAttribute = this.columns[i].attribute;\r\n            if (colAttribute.indexOf('\\.') < 0) {\r\n                item[colAttribute] = cell.innerHTML.trim();\r\n            }\r\n        }\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: Object, newValue: Object) {\r\n        if (entity) {\r\n            // Check for Show\r\n            if (this.property && !entity.hasProperty(property)) {\r\n                return;\r\n            }\r\n        }\r\n        if (entity.id === undefined) {\r\n            return;\r\n        }\r\n        let item: BridgeElement = <BridgeElement>this.itemsIds[entity.id];\r\n        let row: HTMLTableRowElement;\r\n        if (!item) {\r\n            item = new BridgeElement(entity);\r\n            this.items.push(item);\r\n            this.itemsIds[entity.id] = item;\r\n        }\r\n        row = this.cells[entity.id];\r\n        if (row) {\r\n            item.gui = row;\r\n        }\r\n        if (this.searching(item) === false) {\r\n            return;\r\n        }\r\n        let cell;\r\n        let showItem = false;\r\n\r\n        if (!row) {\r\n            showItem = true;\r\n            row = document.createElement('tr');\r\n            let count = this.columns.length;\r\n            for (let i = 0; i < count; i++) {\r\n                cell = document.createElement('td');\r\n                row.appendChild(cell);\r\n            }\r\n            this.cells[entity.id] = row;\r\n            item.gui = row;\r\n        }\r\n        for (let c: number = 0; c < this.columns.length; c++) {\r\n            let name = this.columns[c].attribute;\r\n            if (name === property) {\r\n                cell = row.children[c];\r\n                cell.innerHTML = <string>newValue;\r\n            }\r\n        }\r\n        if (showItem) {\r\n            this.showItem(item, true);\r\n        }\r\n        // super.propertyChange(entity, property, newValue, oldValue);\r\n    }\r\n\r\n    public sort(column: Column) {\r\n        if (this.sortColumn === column) {\r\n            if (this.direction === 1) {\r\n                this.direction = -1;\r\n                column.$element.classList.remove('asc');\r\n                column.$element.classList.add('desc');\r\n            } else {\r\n                this.direction = 1;\r\n                column.$element.classList.remove('desc');\r\n                column.$element.classList.add('asc');\r\n            }\r\n        } else {\r\n            if (this.sortColumn !== null) {\r\n                this.sortColumn.$element.classList.remove('desc');\r\n                this.sortColumn.$element.classList.remove('asc');\r\n            }\r\n            this.sortColumn = column;\r\n            this.sortColumn.$element.classList.add('asc');\r\n            this.direction = 1;\r\n        }\r\n        let that = this;\r\n        let sort = function (a: BridgeElement, b: BridgeElement) {\r\n            return that.sorting(a, b);\r\n        };\r\n        this.showedItems.sort(sort);\r\n        let len: number = this.showedItems.length;\r\n        let body = this.$bodysection;\r\n        let i = 0;\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            if (i !== Table.indexOfChild(item)) {\r\n                break;\r\n            }\r\n            i = i + 1;\r\n        }\r\n        while (body.children.length > i) {\r\n            body.removeChild(body.children.item(body.children.length - 1));\r\n        }\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            body.appendChild(item.gui);\r\n            i = i + 1;\r\n        }\r\n\r\n        //      body.removeChild(item.gui);\r\n        //      body.remove\r\n    }\r\n\r\n    public sorting(a: BridgeElement, b: BridgeElement): number {\r\n        let path: string[] = this.sortColumn.attribute.split('.');\r\n        let itemA = a.model.prop;\r\n        let itemB = b.model.prop;\r\n        let check = this.sortColumn.attribute;\r\n        for (let p = 0; p < path.length; p++) {\r\n            check = path[p];\r\n            if (itemA[check]) {\r\n                itemA = itemA[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n            if (itemB[check]) {\r\n                itemB = itemB[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n        if (itemA !== itemB) {\r\n            if (this.direction === 1) {\r\n                return (itemA < itemB) ? -1 : 1;\r\n            }\r\n            return (itemA < itemB) ? 1 : -1;\r\n\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    // Searching\r\n    public search(origSearchText: string): void {\r\n        if (!origSearchText) {\r\n            origSearchText = '';\r\n        }\r\n        let searchText: string = origSearchText.trim().toLowerCase();\r\n        if (searchText === this.lastSearchText && searchText !== '') {\r\n            return; // <==== nothing to be done\r\n        }\r\n        let oldSearch: string = this.lastSearchText;\r\n        this.lastSearchText = searchText;\r\n\r\n        this.parseSearchArray();\r\n        if (searchText !== '' && oldSearch !== null && searchText.indexOf(oldSearch) >= 0 && searchText.indexOf('|') < 0) {\r\n            this.searchArray(this.showedItems);\r\n        } else {\r\n            this.searchSet(this.items);\r\n        }\r\n        this.refreshCounter();\r\n    }\r\n\r\n    public refreshCounter() {\r\n        if (this.countColumn) {\r\n            this.countColumn.innerHTML = this.columns[this.countColumnPos].label + ' (' + this.showedItems.length + ')';\r\n        }\r\n        // var countElement = document.getElementById('talkCount');\r\n        //  if (countElement) {\r\n        //     var txt = (this.showedItems.size() > 0 && searchText.length > 0 ) ? this.options.TEXT_SEARCHLIST : this.options.TEXT_SEARCHFULLLIST;\r\n        //     countElement.innerHTML = txt.replace(\"%LEN%\", this.root['children'].length).replace(\"%COUNT%\", this.showedItems.size()).replace(\"%SEARCH%\", origSearchText);\r\n        // }\r\n        // if (this.countColumn) {\r\n        //     this.countColu1mn.innerHTML = this.countColumn[\"label\"] + \" (\" + this.showedItems.size() + \")\";\r\n        // }\r\n    }\r\n\r\n    public parseSearchArray() {\r\n        let pos: number = 0;\r\n        let split: Array<string> = [];\r\n        let quote: boolean = false;\r\n        for (let i: number = 0; i < this.lastSearchText.length; i++) {\r\n            if ((this.lastSearchText.charAt(i) === ' ') && !quote) {\r\n                let txt = this.lastSearchText.substring(pos, i).trim();\r\n                if (txt.length > 0) {\r\n                    split.push(txt);\r\n                }\r\n                pos = i + 1;\r\n            } else if (this.lastSearchText.charAt(i) === '\\\"') {\r\n                if (quote) {\r\n                    let txt = this.lastSearchText.substring(pos, i).trim();\r\n                    if (txt.length > 0) {\r\n                        split.push(txt);\r\n                    }\r\n                    pos = i + 1;\r\n                } else {\r\n                    pos = i + 1;\r\n                }\r\n                quote = !quote;\r\n            }\r\n        }\r\n        if (pos < this.lastSearchText.length) {\r\n            split.push(this.lastSearchText.substring(pos, this.lastSearchText.length).trim());\r\n        }\r\n        this.searchText = split;\r\n        return split;\r\n    }\r\n\r\n    public searchArray(root: Array<BridgeElement>) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let i: number = 0; i < root.length; i++) {\r\n            let item: BridgeElement = root[i];\r\n            this.showItem(item, this.searching(item));\r\n        }\r\n    }\r\n\r\n    public searchSet(root: BridgeElement[]) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let item of root) {\r\n            let child: BridgeElement = <BridgeElement>item;\r\n            this.showItem(child, this.searching(child));\r\n        }\r\n    }\r\n\r\n    public showItem(item: BridgeElement, visible: boolean) {\r\n        if (visible) {\r\n            this.showedItems.push(item);\r\n            this.$bodysection.appendChild(item.gui);\r\n        } else if (item.gui && item.gui.parentElement) {\r\n            this.$bodysection.removeChild(item.gui);\r\n        }\r\n    }\r\n\r\n    public searching(item: BridgeElement): boolean {\r\n        let fullText: string = '';\r\n        for (let i: number = 0; i < this.searchColumns.length; i++) {\r\n            fullText = fullText + ' ' + item.model.getValue(this.searchColumns[i]);\r\n        }\r\n        fullText = fullText.trim().toLowerCase();\r\n        for (let z: number = 0; z < this.searchText.length; z++) {\r\n            if ('' !== this.searchText[z]) {\r\n                let orSplit: Array<string>;\r\n                if (this.searchText[z].indexOf('|') > 0) {\r\n                    orSplit = this.searchText[z].split('|');\r\n                } else {\r\n                    orSplit = [this.searchText[z]];\r\n                }\r\n                let o: number = 0;\r\n                for (; o < orSplit.length; o++) {\r\n                    let pos: number = orSplit[o].indexOf(':');\r\n                    if (orSplit[o].indexOf('#') === 0 && pos > 1) {\r\n                        // if (searchProperties.contains(propString)) {\r\n                        let value: string = orSplit[o].substring(pos + 1);\r\n                        let column: string = orSplit[o].substring(1, pos - 1);\r\n                        let dataValue: Object = item.model.getValue(column);\r\n                        if (dataValue) {\r\n                            if (dataValue.toString().toLowerCase().indexOf(value) >= 0) {\r\n                                // Search for simple Property\r\n                                break;\r\n                            }\r\n                        }\r\n                    } else if (orSplit[o].length > 1 && orSplit[o].indexOf('-') === 0) {\r\n                        if (fullText.indexOf(orSplit[o].substring(1)) < 0) {\r\n                            break;\r\n                        }\r\n                    } else if (fullText.indexOf(orSplit[o]) >= 0) {\r\n                        // his search word is found in full text\r\n                        break;\r\n                    }\r\n                }\r\n                if (o === orSplit.length) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public getColumn(): Column[] {\r\n        return this.columns;\r\n    }\r\n\r\n    public updateElement(property: string, value: string): void {\r\n        // first clear all elements inside the table:\r\n        for (let item of this.items) {\r\n            if (item instanceof BridgeElement) {\r\n                (<BridgeElement>item).model.removeListener(this);\r\n            }\r\n        }\r\n\r\n        this.items = [];\r\n        this.itemsIds = {};\r\n\r\n        // load all entitys that match the property\r\n        if (this.property !== undefined) {\r\n            let items = this.$owner.getItems();\r\n            for (let j in items) {\r\n                if (items.hasOwnProperty(j)) {\r\n                    let item = items[j];\r\n                    if (item instanceof Data) {\r\n                        if (property === j) {\r\n                            // if (property == item.property) {\r\n                            let i = new BridgeElement(<Data>item);\r\n                            this.items.push(i);\r\n                            this.itemsIds[item.id] = i;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            this.redrawAllElements();\r\n        }\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        if (this.$owner !== null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    protected redrawAllElements() {\r\n        let children: HTMLCollection = this.$bodysection.children;\r\n        // remove old children\r\n        for (let i = 0; i < children.length; i++) {\r\n            let child = children.item(i);\r\n            // remove child\r\n            this.$bodysection.removeChild(child);\r\n        }\r\n\r\n        // load new children\r\n        for (let obj of this.items) {\r\n            // register listeners\r\n            obj.model.addListener(this);\r\n            // create tr\r\n            let row = this.createRow(obj);\r\n            this.$bodysection.appendChild(row);\r\n            this.cells[obj.id] = row;\r\n        }\r\n    }\r\n\r\n    private parseData(column: any): Column {\r\n        let col = new Column();\r\n        col.label = column.label || column.id;\r\n        col.attribute = column.attribute || column.label || column.id;\r\n        col.$element = document.createElement('th');\r\n        col.$element.innerHTML = col.label;\r\n        col.$element.draggable = true;\r\n\r\n        // resize Header\r\n        col.$resize = document.createElement('div');\r\n        col.$resize.classList.add('resize');\r\n        col.$element.appendChild(col.$resize);\r\n\r\n        return col;\r\n    }\r\n\r\n    private createRow(data: BridgeElement): HTMLTableRowElement {\r\n        let tr: HTMLTableRowElement = document.createElement('tr');\r\n\r\n        for (let id of this.columns) {\r\n            let td: HTMLTableDataCellElement = document.createElement('td');\r\n            tr.appendChild(td);\r\n            td.innerHTML = data.model.getValue(id.attribute);\r\n        }\r\n        return tr;\r\n    }\r\n\r\n    private addHeaderInfo(col: Column) {\r\n        let element: HTMLTableCellElement = col.$element;\r\n        let that = this;\r\n        element.classList.add('sort');\r\n        element.addEventListener('click',\r\n            function () {\r\n                that.sort(col);\r\n            },\r\n            false);\r\n    }\r\n\r\n    private columnDragEvent(type: string, e: DragEvent) {\r\n        if (type === 'dragstart') {\r\n            // Target (this) element is the source node.\r\n            this.moveElement.$element.style.opacity = '0.4';\r\n            e.dataTransfer.effectAllowed = 'move';\r\n            e.dataTransfer.setData('text/json', JSON.stringify(Util.toJson(this.moveElement)));\r\n        } else if (type === 'dragenter') {\r\n            // TO Nothing\r\n        } else if (type === 'dragleave') {\r\n            this.moveElement.$element.classList.remove('over');\r\n        } else if (type === 'dragover') {\r\n            if (e.preventDefault) {\r\n                e.preventDefault(); // Necessary. Allows us to drop.\r\n            }\r\n            for (let c = 0; c < this.columns.length; c++) {\r\n                if (this.columns[c].$element === e.target) {\r\n                    this.dragColumn = this.columns[c];\r\n                    this.dragPos = c;\r\n                    this.columns[c].$element.classList.add('over');\r\n                } else {\r\n                    this.columns[c].$element.classList.remove('over');\r\n                }\r\n            }\r\n            if (e.target === this.tableOption) {\r\n                this.tableOption.classList.add('over');\r\n                this.dragPos = this.columns.length;\r\n            } else {\r\n                this.tableOption.classList.remove('over');\r\n            }\r\n            e.dataTransfer.dropEffect = 'move';  // See the section on the DataTransfer object.\r\n        } else if (type === 'drop') {\r\n            // this / e.target is current target element.\r\n            if (e.stopPropagation) {\r\n                e.stopPropagation(); // stops the browser from redirecting.\r\n            }\r\n            if (this.movePos === this.dragPos) {\r\n                return;\r\n            }\r\n            // movePos -> dragPos\r\n            // See the section on the DataTransfer object.\r\n            // DataModel\r\n            this.columns.splice(this.movePos, 1);\r\n            if (this.movePos >= this.dragPos) {\r\n                this.columns.splice(this.dragPos, 0, this.moveElement);\r\n            } else {\r\n                this.columns.splice(this.dragPos - 1, 0, this.moveElement);\r\n            }\r\n\r\n            // Header Line\r\n            let line: HTMLElement = this.moveElement.$element.parentElement;\r\n            line.removeChild(this.moveElement.$element);\r\n            if (this.dragPos < this.columns.length) {\r\n                line.insertBefore(this.moveElement.$element, this.dragColumn.$element);\r\n            } else {\r\n                line.insertBefore(this.moveElement.$element, this.tableOption);\r\n            }\r\n\r\n            let oldElement: Element;\r\n            let newElement: Element;\r\n\r\n            // Now all Childs\r\n            for (let i = 0; i < this.$bodysection.children.length; i++) {\r\n                // Each line\r\n                line = <HTMLElement>this.$bodysection.children.item(i);\r\n                oldElement = line.children.item(this.movePos);\r\n                newElement = line.children.item(this.dragPos);\r\n                line.removeChild(oldElement);\r\n                line.insertBefore(oldElement, newElement);\r\n            }\r\n        } else if (type === 'dragend') {\r\n            // this/e.target is the source node.\r\n            this.moveElement.$element.style.opacity = '1';\r\n            for (let i = 0; i < this.columns.length; i++) {\r\n                this.columns[i].$element.classList.remove('over');\r\n            }\r\n            this.tableOption.classList.remove('over');\r\n        }\r\n    }\r\n\r\n    private addOptionItem(label: string, parent: HTMLElement, sub: boolean): HTMLElement {\r\n        let labelControl;\r\n        if (label) {\r\n            labelControl = document.createElement('a');\r\n            labelControl.appendChild(document.createTextNode(label));\r\n            labelControl.href = 'javascript:void(0);';\r\n            parent.appendChild(labelControl);\r\n        }\r\n        if (sub) {\r\n            let context = document.createElement('div');\r\n            context.classList.add('dropdown-content');\r\n            context.style.setProperty('position', 'absolute');\r\n            parent.appendChild(context);\r\n\r\n            /* When the user clicks on the button,\r\n             toggle between hiding and showing the dropdown content */\r\n            parent.addEventListener(\r\n                'click',\r\n                function () {\r\n                    context.classList.toggle('show');\r\n                },\r\n                false);\r\n            return context;\r\n        }\r\n        return labelControl;\r\n    }\r\n\r\n    private registerEvents(events: string[]) {\r\n        let that = this;\r\n        for (let i = 0; i < events.length; i++) {\r\n            this.$view.addEventListener(events[i], function (evt) {\r\n                return that.tableEvent(events[i], evt);\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\nclass Column {\r\n    label: string;\r\n    attribute: string;\r\n    $element: HTMLTableHeaderCellElement;\r\n    $resize: HTMLDivElement;\r\n    visible: boolean;\r\n}\r\n","import { AutoComplete } from './AutoComplete';\r\nimport { BR } from './BR';\r\nimport { Div } from './Div';\r\nimport { Label } from './Label';\r\n\r\nexport * from './Node';\r\nexport * from './Class';\r\nexport * from './SO';\r\nexport * from './Symbol';\r\n\r\nexport * from './BR';\r\nexport * from './Button';\r\nexport * from './Div';\r\nexport * from './Form';\r\nexport * from './Input';\r\nexport * from './Label';\r\nexport * from './Table';\r\nexport * from './HTML';\r\nexport * from './Dice';\r\nexport * from './AutoComplete';\r\nexport * from './Attribute';\r\nexport * from './Method';\r\nexport * from './ClazzProperty';\r\n\r\nnew AutoComplete();\r\nnew BR();\r\nnew Div();\r\nnew Label();\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class AddNode implements EventHandler {\r\n\r\n    public MIN_SIZE_TO_ADD_NODE: number = 30;\r\n    public MIN_SIZE_TO_ADD_TEXT: number = 10;\r\n    private graph: Graph;\r\n    private svgRect: SVGSVGElement;\r\n    private svgGroupAddNode: SVGSVGElement;\r\n    private svgTextAddNode: SVGSVGElement;\r\n    private svgTextRectAddNode: SVGSVGElement;\r\n    private isRectDrawing: boolean;\r\n    private isDrawToLeft: boolean;\r\n    private isDrawToTop: boolean;\r\n    private isBigEnoughForAddNode: boolean;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(AddNode.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(AddNode.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!this.canHandle()) {\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element.id !== 'RootElement') {\r\n            return false;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element.id === 'RootElement') {\r\n                    this.start(event, element);\r\n\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mousemove':\r\n                this.drawRect(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.removeRect();\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.addNode();\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawRect(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isRectDrawing) {\r\n            return;\r\n        }\r\n\r\n        evt.stopPropagation();\r\n\r\n        let width = Util.getEventX(evt) - this.x;\r\n        let height = Util.getEventY(evt) - this.y;\r\n\r\n        // rectangle is in a negative area, drawn to upper case. not possibble with svg\r\n        if (width < 0) {\r\n            this.isDrawToLeft = true;\r\n            width *= -1;\r\n        } else {\r\n            this.isDrawToLeft = false;\r\n        }\r\n\r\n        if (height < 0) {\r\n            this.isDrawToTop = true;\r\n            height *= -1;\r\n        } else {\r\n            this.isDrawToTop = false;\r\n        }\r\n\r\n        if (width > this.MIN_SIZE_TO_ADD_NODE && height > this.MIN_SIZE_TO_ADD_NODE) {\r\n            this.isBigEnoughForAddNode = true;\r\n        } else {\r\n            this.isBigEnoughForAddNode = false;\r\n        }\r\n\r\n        this.graph.root.style.cursor = 'pointer';\r\n\r\n        // if line wasnt draw\r\n        if (!this.svgRect) {\r\n\r\n            let rectAddNode = Util.createShape({\r\n                tag: 'rect',\r\n                id: 'addNodeRect',\r\n                x: this.x,\r\n                y: this.y,\r\n                width: 1,\r\n                height: 1,\r\n                class: 'SVGAddNode'\r\n            });\r\n\r\n            let group = Util.createShape({ tag: 'g', id: 'groupAddNode' });\r\n            group.appendChild(rectAddNode);\r\n\r\n            this.graph.root.appendChild(group);\r\n            this.svgRect = rectAddNode;\r\n            this.svgGroupAddNode = group;\r\n        }\r\n        else {\r\n\r\n            let svgRectBBox = this.svgRect.getBBox();\r\n\r\n            // if rect is big enough, show text as helper\r\n            if ((svgRectBBox.width > this.MIN_SIZE_TO_ADD_TEXT\r\n                || svgRectBBox.height > this.MIN_SIZE_TO_ADD_TEXT) && !this.svgTextAddNode) {\r\n\r\n                let textAddNode = Util.createShape({\r\n                    tag: 'text',\r\n                    x: this.x,\r\n                    y: this.y - 5,\r\n                    'font-family': 'Verdana',\r\n                    'font-size': 12,\r\n                    fill: 'black'\r\n                });\r\n                textAddNode.textContent = 'Hold on and move to create a new class';\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n\r\n\r\n                // get correct size of text node\r\n                let sizeClientRect: ClientRect = textAddNode.getBoundingClientRect();\r\n\r\n                let rectBackgroundForText = Util.createShape({\r\n                    tag: 'rect',\r\n                    x: this.x,\r\n                    y: this.y - sizeClientRect.height,\r\n                    width: sizeClientRect.width,\r\n                    height: sizeClientRect.height,\r\n                    fill: '#DDD',\r\n                    'stroke-width': 0\r\n                });\r\n\r\n                this.svgTextRectAddNode = rectBackgroundForText;\r\n                this.svgTextAddNode = textAddNode;\r\n                this.svgGroupAddNode.appendChild(rectBackgroundForText);\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n            }\r\n\r\n            if (this.isDrawToLeft) {\r\n                this.svgRect.setAttributeNS(null, 'x', '' + Util.getEventX(evt));\r\n            }\r\n\r\n            if (this.isDrawToTop) {\r\n                this.svgRect.setAttributeNS(null, 'y', '' + Util.getEventY(evt));\r\n            }\r\n\r\n            // set width and height\r\n            this.svgRect.setAttributeNS(null, 'width', width.toString());\r\n            this.svgRect.setAttributeNS(null, 'height', height.toString());\r\n\r\n            // set color\r\n            if (this.isBigEnoughForAddNode) {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode-ready');\r\n\r\n                // draw text\r\n            }\r\n            else {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeRect(): void {\r\n        this.isRectDrawing = false;\r\n        this.isBigEnoughForAddNode = false;\r\n\r\n        this.graph.root.style.cursor = 'default';\r\n\r\n        if (this.svgGroupAddNode) {\r\n            this.graph.root.removeChild(this.svgGroupAddNode);\r\n            this.svgGroupAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgRect) {\r\n            this.svgRect = undefined;\r\n        }\r\n\r\n        if (this.svgTextAddNode) {\r\n            this.svgTextAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgTextRectAddNode) {\r\n            this.svgTextRectAddNode = undefined;\r\n        }\r\n    }\r\n\r\n    private addNode(): void {\r\n\r\n        if (!this.isBigEnoughForAddNode) {\r\n            this.removeRect();\r\n            return;\r\n        }\r\n\r\n        this.removeRect();\r\n        let node = this.graph.addElementWithValues('Class', { x: this.x, y: this.y });\r\n        this.graph.drawElement(node);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isRectDrawing) {\r\n            return;\r\n        }\r\n        this.isRectDrawing = true;\r\n\r\n        this.x = Util.getEventX(evt);\r\n        this.y = Util.getEventY(evt);\r\n    }\r\n\r\n}\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement, Point } from '../elements/BaseElements';\r\nimport { GraphModel } from '../elements/Model';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Control } from '../Control';\r\nimport { Util } from '../util';\r\n\r\nexport class Drag implements EventHandler {\r\n\r\n    private element: DiagramElement;\r\n    private svgElement: SVGSVGElement;\r\n    private dragging = false;\r\n    private reinsert = false;\r\n    private mouseOffset = new Point();\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        if (!this.canHandle()) {\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if ((!this.dragging) && (element.id !== 'RootElement')) {\r\n                    this.element = element;\r\n                    this.svgElement = <SVGSVGElement>element.$view;\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mouseup':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n\r\n                break;\r\n            case 'mousemove':\r\n                if (this.dragging) {\r\n                    this.drag(event, element);\r\n                }\r\n                break;\r\n            case 'mouseleave':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Drag.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Drag.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private reset() {\r\n        this.dragging = false;\r\n        this.svgElement.style.cursor = 'pointer';\r\n\r\n        /*  WORKAROUND\r\n            Chrome got problem with the Node.appendChild() method.\r\n            Sometimes it works, sometimes not.\r\n            So the background is, in the drag method will the current element be appended\r\n            to front of the svg root.\r\n            If this happend, the click event won't fire.\r\n            So it will be fired manually.\r\n            This problem occurs only in chrome.\r\n        */\r\n        if (Util.isChrome()) {\r\n            let clickEvt = Util.createCustomEvent('click');\r\n            this.svgElement.dispatchEvent(clickEvt);\r\n        }\r\n    }\r\n\r\n    private start(evt: Event | any, element: Control) {\r\n\r\n        this.dragging = true;\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n        this.reinsert = true;\r\n\r\n        this.svgElement.style.cursor = 'move';\r\n    }\r\n\r\n    private drag(evt: Event | any, element: DiagramElement) {\r\n\r\n        if (this.reinsert) {\r\n            if (this.element.id !== 'RootElement') {\r\n                // nesseccary to set the dragged object on top of svg children\r\n                this.graph.root.appendChild(this.svgElement);\r\n            }\r\n\r\n            let dragEvent = Util.createCustomEvent('drag');\r\n            element.$view.dispatchEvent(dragEvent);\r\n        }\r\n        this.reinsert = false;\r\n\r\n        evt.stopPropagation();\r\n\r\n        const translation = this.svgElement.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        const sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        const transX = sx + evt.clientX - this.mouseOffset.x;\r\n        const transY = sy + evt.clientY - this.mouseOffset.y;\r\n        this.svgElement.setAttributeNS(null, 'transform', 'translate(' + transX + ' ' + transY + ')');\r\n        this.element.getPos().addNum(transX - sx, transY - sy);\r\n\r\n        if (this.element instanceof Node) {\r\n            (<Node>this.element).redrawEdges();\r\n        }\r\n\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n\r\n\r\n        // resize svg root\r\n        let maxX = this.element.getPos().x + this.element.getSize().x;\r\n        let maxY = this.element.getPos().y + this.element.getSize().y;\r\n\r\n        let domRectRoot = this.graph.root.getBoundingClientRect();\r\n        if(!domRectRoot){\r\n            return;\r\n        }\r\n\r\n        if(maxX > domRectRoot.width){\r\n            this.graph.root.setAttributeNS(null, 'width', '' + maxX);\r\n        }\r\n        \r\n        if(maxY > domRectRoot.height){\r\n            this.graph.root.setAttributeNS(null, 'height', '' + maxY);\r\n        }\r\n    }\r\n}\r\n","import PropertyChangeSupport from '../PropertyChangeSupport';\r\nimport Data from '../Data';\r\nimport {Adapter} from '../Adapter';\r\nimport ClazzProperty from '../elements/nodes/ClazzProperty';\r\n\r\nexport class GraphListener implements PropertyChangeSupport {\r\n    private $owner: ClazzProperty;\r\n\r\n    constructor(owner: ClazzProperty) {\r\n        this.$owner = owner;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        let adapter = this.$owner.getRoot().getAdapter();\r\n        if (adapter) {\r\n            // messages.add(\"{\\\"class\\\":\\\"de.uniks.networkparser.test.model.House\\\",\\\"id\\\":\\\"H1\\\",\\\"rem\\\":{\\\"floor\\\":4},\\\"upd\\\":{\\\"floor\\\":42}}\");\r\n            let myId =  this.$owner.$owner.getId();\r\n            if (myId && myId.length > 0) {\r\n                let pos = myId.indexOf(':');\r\n                if (pos > 0) {\r\n                    myId = myId.substring(0, pos).trim();\r\n                }\r\n            }\r\n            let myName = this.$owner.getName();\r\n            let remJson = {};\r\n            remJson[myName] = oldValue;\r\n            let updJson = {};\r\n            updJson[myName] = newValue;\r\n            let json = {};\r\n            json['id'] = myId;\r\n            json['rem'] = remJson;\r\n            json['upd'] = updJson;\r\n            let message = JSON.stringify(json);\r\n            (<Adapter> adapter).update(message);\r\n        }\r\n    }\r\n}\r\n","import {Graph} from '../elements/';\r\nimport {EventHandler, EventBus} from '../EventBus';\r\nimport {DiagramElement} from '../elements/';\r\nimport {Util} from '../util';\r\n\r\nexport class ImportFile implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(ImportFile.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(ImportFile.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        let type: string = typeof event;\r\n        if (type !== 'DragEvent') {\r\n            return false;\r\n        }\r\n        let evt: DragEvent = <DragEvent>event;\r\n        if (evt.type === 'dragover') {\r\n            this.handleDragOver(evt);\r\n        } else if (evt.type === 'dragleave') {\r\n            if (this.graph.$view !== evt.target) {\r\n                return false;\r\n            }\r\n            this.setBoardStyle('dragleave');\r\n        } else if (evt.type === 'drop') {\r\n            this.handleLoadFile(evt);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public setBoardStyle(typ: string): boolean {\r\n        let b = this.graph.$view;\r\n        Util.removeClass(b, 'Error');\r\n        Util.removeClass(b, 'Ok');\r\n        Util.removeClass(b, 'Add');\r\n        if (typ === 'dragleave') {\r\n            if (b['errorText']) {\r\n                b.removeChild(b['errorText']);\r\n                b['errorText'] = null;\r\n            }\r\n            return true;\r\n        }\r\n        Util.addClass(b, typ);\r\n        if (typ === 'Error') {\r\n            if (!b['errorText']) {\r\n                b['errorText'] = Util.create({tag: 'div', style: 'margin-top: 30%', value: 'NO TEXTFILE'});\r\n                b.appendChild(b['errorText']);\r\n            }\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private handleLoadFile(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n\r\n        let files = evt.dataTransfer.files; // FileList object.\r\n\r\n        if (files.length > 1) {\r\n            evt.dataTransfer.dropEffect = 'none';\r\n            return;\r\n        }\r\n\r\n        // files is a FileList of File objects. List some properties.\r\n        let reader  = new FileReader();\r\n        let output = [];\r\n        let htmlResult = '';\r\n        let that = this;\r\n        for (let i = 0, f; f = files[i]; i++) {\r\n            reader.onload = function(event) {\r\n                htmlResult = event.target['result'];\r\n                console.log('fileContent: ' + htmlResult);\r\n\r\n                // CHANGE TO INTERNAL OBJECT\r\n                if (that.graph) {\r\n                    that.graph.import(htmlResult);\r\n                }\r\n            };\r\n            reader.readAsText(f);\r\n        }\r\n        this.setBoardStyle('dragleave');\r\n    }\r\n\r\n    private handleDragOver(evt: DragEvent): void {\r\n        let error: boolean = true, n: string, f;\r\n        let files = evt.dataTransfer.files;\r\n        // process all File objects\r\n        if (files && files.length > 0) {\r\n            for (let i: number = 0; i < files.length; i += 1) {\r\n                f = files[i];\r\n                if (f.type.indexOf('text') === 0) {\r\n                    error = false;\r\n                } else if (f.type === '') {\r\n                    n = f.name.toLowerCase();\r\n                    if (n.indexOf('json', n.length - 4) !== -1) {\r\n                        error = false;\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            let items = evt.dataTransfer.items;\r\n            if (items && items.length > 0) {\r\n                for (let z = 0; z < items.length; z ++) {\r\n                    if (items[z].type === '' || items[z].type === 'text/plain') {\r\n                        error = false;\r\n                    }\r\n                }\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.\r\n        if (error) {\r\n            this.dragStyler(evt, 'Error');\r\n        } else if (evt.ctrlKey) {\r\n            this.dragStyler(evt, 'Add');\r\n        } else {\r\n            this.dragStyler(evt, 'Ok');\r\n        }\r\n        /* //evt.target['className'] += ' diagramLoadFile';\r\n        '//console.log('handDragOver');*/\r\n    }\r\n\r\n    private dragStyler(event: Event, typ: string) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n        this.setBoardStyle(typ);\r\n    }\r\n\r\n    private handleDragLeave(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n        evt.dataTransfer.dropEffect = 'link'; // Explicitly show this is a copy.\r\n        evt.target['className'] = 'diagram';\r\n        console.log('handDragLeave');\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Class } from '../elements/nodes/Class';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Association } from '../elements/index';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class NewEdge implements EventHandler {\r\n    private graph: Graph;\r\n    private svgLine: SVGSVGElement;\r\n    private isEdgeDrawing: boolean;\r\n    private sourceNode: Node;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    private lastTargetNode: Node;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(NewEdge.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(NewEdge.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!((<KeyboardEvent>event).ctrlKey || EventBus.isHandlerActiveOrFree('NewEdge', true))) {\r\n            this.removeLine();\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element instanceof Node) {\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n\r\n            case 'mousemove':\r\n                this.drawEdge(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.setNewEdgeToNode(event);\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default: break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawEdge(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        let lineToX = Util.getEventX(evt);\r\n        let lineToy = Util.getEventY(evt);\r\n\r\n        let path = `M${this.x} ${this.y} L${lineToX} ${lineToy}`;\r\n        // if line wasnt draw\r\n        if (!this.svgLine) {\r\n\r\n            let attr = {\r\n                tag: 'path',\r\n                id: 'newEdgePath',\r\n                d: path,\r\n                class: 'SVGEdge'\r\n            };\r\n\r\n            let shape = Util.createShape(attr);\r\n            this.svgLine = shape;\r\n\r\n            this.graph.root.appendChild(shape);\r\n            this.graph.root.appendChild(this.sourceNode.$view);\r\n        }\r\n        else {\r\n\r\n            // set new L path\r\n            this.svgLine.setAttributeNS(null, 'd', path);\r\n\r\n            // get node from position\r\n            let targetNode = this.graph.$graphModel.getNodeByPosition(Util.getEventX(evt), Util.getEventY(evt));\r\n\r\n            // if some targetnode is available, so highlight the node\r\n            if (targetNode) {\r\n\r\n                // reset the last one\r\n                if (this.lastTargetNode && this.lastTargetNode.id !== targetNode.id) {\r\n                    this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n                }\r\n\r\n                this.lastTargetNode = targetNode;\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz-drawedge');\r\n            }\r\n            else if (this.lastTargetNode) {\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeLine(): void {\r\n        this.isEdgeDrawing = false;\r\n\r\n        if (this.svgLine) {\r\n            this.graph.root.removeChild(this.svgLine);\r\n            this.svgLine = null;\r\n        }\r\n\r\n        if (this.lastTargetNode) {\r\n            this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n        }\r\n    }\r\n\r\n    private setNewEdgeToNode(event: Event | any): void {\r\n        // get node from position\r\n        let targetNode = this.graph.$graphModel\r\n            .getNodeByPosition(Util.getEventX(event), Util.getEventY(event));\r\n\r\n        if (!targetNode) {\r\n            this.removeLine();\r\n\r\n            return;\r\n        }\r\n\r\n        this.removeLine();\r\n        let edgeType = this.sourceNode.$defaulEdgeType || 'Association';\r\n\r\n        let jsonData = {\r\n            type: edgeType,\r\n            source: this.sourceNode.id,\r\n            target: targetNode.id\r\n        };\r\n\r\n        let newEdge = this.graph.$graphModel.addEdge(<any>jsonData, true);\r\n        this.graph.drawElement(newEdge);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        this.isEdgeDrawing = true;\r\n        this.sourceNode = element as Class;\r\n\r\n        this.x = this.sourceNode.getPos().x + (this.sourceNode.getSize().x / 2);\r\n        this.y = this.sourceNode.getPos().y + (this.sourceNode.getSize().y / 2);\r\n\r\n        // TODO: get this into util or select\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Node } from '../elements/nodes';\r\nimport { Association } from '../elements/edges';\r\nimport { Util } from '../util';\r\nimport { SymbolLibary } from '../elements/nodes/Symbol';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\nimport Attribute from '../elements/nodes/Attribute';\r\n\r\nexport class Select implements EventHandler {\r\n\r\n    private deleteShape: SVGSVGElement;\r\n    private addEdgeShape: SVGSVGElement;\r\n    private copyNodeShape: SVGSVGElement;\r\n    private graph: Graph;\r\n    private padding = 5;\r\n\r\n    private lastSelectedNode: Element;\r\n    private lastSelectedEdge: Element;\r\n\r\n    private isDragged: boolean;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.deleteShape = SymbolLibary.drawSVG({ type: 'Basket', background: true, id: 'trashcan', tooltip: 'Delete class' });\r\n        this.copyNodeShape = SymbolLibary.drawSVG({ type: 'Copynode', background: true, id: 'copyNode', tooltip: 'Copy class' });\r\n        this.addEdgeShape = SymbolLibary.drawSVG({ type: 'Edgeicon', background: true, id: 'addEdge', tooltip: 'Click and drag to connect this class' });\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        let x = Util.getEventX(event);\r\n        let y = Util.getEventY(event);\r\n\r\n        event.stopPropagation();\r\n        if (event.type === 'drag') {\r\n            this.isDragged = true;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            if (element instanceof Node) {\r\n                this.lastSelectedNode = <Element>element.$view;\r\n            }\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n        }\r\n\r\n        if (event.target['id'] === 'background' || element === this.graph.$graphModel) {\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let e = <Node>element;\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.graph.root.appendChild(this.addEdgeShape);\r\n            this.graph.root.appendChild(this.copyNodeShape);\r\n            this.graph.root.appendChild(element.$view);\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'visible');\r\n\r\n            let x = (e.getPos().x + e.getSize().x) + 5;\r\n            let y = e.getPos().y;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y + this.padding})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.copyNodeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 40 + this.padding})`);\r\n            this.copyNodeShape.onclick = (evt) => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let copyClass = (element).copy();\r\n                copyClass.withPos(nextFreePosition.x, nextFreePosition.y);\r\n                this.graph.drawElement(copyClass);\r\n            };\r\n\r\n            this.addEdgeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 80 + this.padding})`);\r\n            this.addEdgeShape.onmousedown = function () {\r\n                EventBus.setActiveHandler('NewEdge');\r\n                element.$view.dispatchEvent(Util.createCustomEvent('mousedown'));\r\n            };\r\n        }\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let clazz = <Node>element;\r\n\r\n            if (Util.isChrome()) {\r\n                if (this.lastSelectedNode && element.id === this.lastSelectedNode.id && !this.isDragged) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            this.isDragged = false;\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            this.lastSelectedNode = <Element>element.$view;\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete class');\r\n\r\n            // draw textbox to edit clazz in one line\r\n            let divInlineEdit = document.createElement('div');\r\n            divInlineEdit.id = 'inlineEdit';\r\n            divInlineEdit.style.position = 'absolute';\r\n            divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n            divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n            divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n            divInlineEdit.style.zIndex = '42';\r\n\r\n            let inputText = document.createElement('input');\r\n            inputText.type = 'text';\r\n            inputText.style.width = '100%';\r\n            inputText.placeholder = 'Add properties, edit label';\r\n\r\n            divInlineEdit.appendChild(inputText);\r\n            document.body.appendChild(divInlineEdit);\r\n\r\n            inputText.addEventListener('focusout', (evt) => {\r\n\r\n                if (Util.isChrome()) {\r\n                    // only if input is empty, remove the inline edit function\r\n                    if ((!inputText.value || inputText.value.length === 0) && (!this.lastSelectedNode || element.id !== this.lastSelectedNode.id)) {\r\n                        this.removeLastInlineEdit();\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                // only if input is empty, remove the inline edit function\r\n                if ((!inputText.value || inputText.value.length === 0)) {\r\n                    this.removeLastInlineEdit();\r\n                }\r\n            });\r\n\r\n            let g = this.graph;\r\n            let propertyTypes: string[] = ['boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'short', 'String', 'void'];\r\n            inputText.addEventListener('keydown', function (evt) {\r\n\r\n                let keyCode = (<any>evt).which;\r\n                let inputValue = <any>inputText.value;\r\n\r\n                if (Util.endsWith(inputValue, ':') && !document.getElementById('selectPropertyType')) {\r\n                    let selectType = document.createElement('select');\r\n                    selectType.id = 'selectPropertyType';\r\n                    selectType.style.width = '100%';\r\n\r\n                    for (let type of propertyTypes) {\r\n                        let selectOption = document.createElement('option');\r\n                        selectOption.value = type;\r\n                        selectOption.innerHTML = type;\r\n                        selectType.appendChild(selectOption);\r\n                    }\r\n\r\n                    selectType.addEventListener('change', function (evt) {\r\n                        let inputValueSplitted = inputValue.split(':');\r\n                        let selectedPropertyType = selectType.options[selectType.selectedIndex].value;\r\n\r\n                        if (inputValueSplitted.length >= 1) {\r\n                            inputText.value = inputValueSplitted[0].trim() + ' : ' + selectedPropertyType;\r\n                            inputText.focus();\r\n                        }\r\n                    });\r\n\r\n                    divInlineEdit.appendChild(selectType);\r\n                }\r\n                else if (!Util.includes(inputValue, ':')) {\r\n                    let selectType = document.getElementById('selectPropertyType');\r\n\r\n                    if (selectType) {\r\n                        selectType.remove();\r\n                    }\r\n                }\r\n\r\n                if (keyCode !== 13) {\r\n                    return;\r\n                }\r\n\r\n                // attribute\r\n                if ((Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) === false) {\r\n                    if (Util.includes(inputValue, ':')) {\r\n                        clazz.addAttribute(inputValue.trim());\r\n                        clazz.reDraw();\r\n                    } else if (Util.includes(inputValue, '=') ) {\r\n                        let attr: Attribute = null;\r\n                        let name = inputValue.substring(0, inputValue.indexOf('=')).trim();\r\n                        for (let child of clazz.getAttributes() ) {\r\n                            if ( name === child.getName()) {\r\n                                attr = child;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (attr) {\r\n                            attr.updateValue(inputValue.substring(inputValue.indexOf('=') + 1).trim());\r\n                        }\r\n                        clazz.reDraw();\r\n                    }\r\n                }\r\n\r\n                // method\r\n                else if (Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) {\r\n                    clazz.addMethod(inputValue.trim());\r\n                    clazz.reDraw();\r\n                }\r\n                // label\r\n                else if (inputValue.trim().split(' ').length === 1 && inputValue.trim().length > 0) {\r\n                    clazz.updateLabel(inputValue.trim());\r\n                }\r\n\r\n                // reset size\r\n                divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n                divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n                divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n\r\n                inputText.value = '';\r\n\r\n                // remove combobox to select type of property\r\n                let selectType = document.getElementById('selectPropertyType');\r\n\r\n                if (selectType) {\r\n                    selectType.remove();\r\n                }\r\n\r\n                // TODO: reload propertiespanel. not working!\r\n                // event wont dispatch\r\n                // let customEvt = Util.createCustomEvent(EventBus.RELOADPROPERTIES);\r\n                // element.$view.dispatchEvent(customEvt);\r\n            });\r\n\r\n            (<any>divInlineEdit.children[0]).focus();\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Association) {\r\n            this.graph.root.appendChild(element.$view);\r\n            this.graph.root.appendChild(element.$sNode.$view);\r\n            this.graph.root.appendChild(element.$tNode.$view);\r\n\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete edge');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            let edge = <Association>element;\r\n            this.lastSelectedEdge = edge.$view;\r\n\r\n            Util.addClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Select.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Select.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private setTooltipOfShape(shape: SVGSVGElement, tooltip: string): void {\r\n        if (!shape || !shape.hasChildNodes()) {\r\n            return;\r\n        }\r\n\r\n        let titleElement = <SVGSVGElement>shape.childNodes[0];\r\n        if (!titleElement || titleElement.tagName !== 'title') {\r\n            return;\r\n        }\r\n\r\n        titleElement.textContent = tooltip;\r\n    }\r\n\r\n    private resetLastSelectedElements() {\r\n        // reset the last one\r\n        if (this.lastSelectedNode) {\r\n            Util.removeClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.lastSelectedNode = undefined;\r\n        }\r\n\r\n        if (this.lastSelectedEdge) {\r\n            Util.removeClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n            this.lastSelectedEdge = undefined;\r\n        }\r\n\r\n        this.removeLastInlineEdit();\r\n    }\r\n\r\n    private removeLastInlineEdit(): void {\r\n        // remove last inline edit of clazz\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n\r\n            // its not supported in internet explorer\r\n            // lastInlineEdit.remove();\r\n        }\r\n    }\r\n\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\n\r\nexport class Zoom implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n    }\r\n\r\n    public handle(e: any, element: DiagramElement): boolean {\r\n        let delta = e.deltaY || e.wheelDeltaY || -e.wheelDelta;\r\n        let d = 1 + (delta / 1000);\r\n\r\n        let values = this.graph.root.getAttribute('viewBox').split(' ');\r\n        const newViewBox = `${values[0]} ${values[1]} ${parseInt(values[2]) * d} ${parseInt(values[3]) * d}`;\r\n        this.graph.root.setAttribute('viewBox', newViewBox);\r\n\r\n        e.preventDefault();\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Zoom.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Zoom.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n}\r\n","export * from './Drag';\r\nexport * from './Select';\r\nexport * from './Zoom';\r\nexport * from './NewEdge';\r\nexport * from './ImportFile';\r\nexport * from './AddNode';\r\n","import { Association } from '../elements/edges';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport Layout from './Layout';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\n\r\nexport class DagreLayout implements Layout {\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        if (!window['dagre']) {\r\n            return;\r\n        }\r\n        let model = graph.$graphModel;\r\n        let g = new window['dagre'].graphlib.Graph();\r\n\r\n        g.setGraph({ marginx: 100, marginy: 20 }).setDefaultEdgeLabel(function () {\r\n            return {};\r\n        });\r\n\r\n        for (let node of model.nodes) {\r\n            g.setNode(node.id, { width: node.getSize().x, height: node.getSize().y });\r\n        }\r\n\r\n        for (let edge of model.edges) {\r\n            g.setEdge(edge.$sNode.id, edge.$tNode.id);\r\n        }\r\n\r\n        window['dagre'].layout(g);\r\n\r\n        g.nodes().forEach(function (nodeId: string) {\r\n            for (let node of model.nodes) {\r\n                if (node.id === nodeId) {\r\n                    node.withPos(g.node(nodeId).x - g.node(nodeId).width / 2, g.node(nodeId).y - g.node(nodeId).height / 2);\r\n                }\r\n            }\r\n        });\r\n        g.edges().forEach(function (e: any) {\r\n            for (let edge of model.edges) {\r\n                if (edge.$sNode.id === e.v && edge.$tNode.id === e.w) {\r\n                    let size = g.edge(e).points.length;\r\n                    edge.clearPoints();\r\n                    for (let i = 0; i < size; i++) {\r\n                        let point: SVGPoint = g.edge(e).points[i];\r\n                        edge.addPoint(point.x, point.y);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n}\r\n","import {DiagramElement} from '../elements/BaseElements';\r\nimport Layout from './Layout';\r\nimport {Graph} from '../elements/Graph';\r\nimport {Association} from '../elements/edges/Association';\r\nimport {Node} from '../elements/nodes/Node';\r\nimport {Control} from '../Control';\r\n\r\nexport class LayoutGraphMin {\r\n    public nodes: Object = {};\r\n    public edges: Array<Object> = [];\r\n    public outEdges: Object = {};\r\n    public inEdges: Object = {};\r\n    public dummyNodes: Array<LayoutGraphNode> = [];\r\n    public dummyEdges: Object = {};\r\n    public count: number = 0;\r\n    public minRank: number = Number.POSITIVE_INFINITY;\r\n    public maxRank: number = 0;\r\n    public maxHeight: number = 0;\r\n    public maxWidth: number = 0;\r\n    public ranksep: number = 0;\r\n    public edgesLabel: Array<Object> = [];\r\n\r\n    public nodeCount(): number {\r\n        return this.count;\r\n    }\r\n\r\n    public node(id: string) {\r\n        return this.nodes[id];\r\n    }\r\n\r\n    public setNode(id: string, n: LayoutGraphNode) {\r\n        if (n && !this.nodes[id]) {\r\n            this.nodes[id] = n;\r\n            this.count = this.count + 1;\r\n        } else if (!n && this.nodes[id]) {\r\n            delete this.nodes[id];\r\n        }\r\n    }\r\n}\r\n\r\nexport class LayoutGraphNode {\r\n    public id: string;\r\n    public width: number;\r\n    public height: number;\r\n    public x: number;\r\n    public y: number;\r\n    public edgeObj: LayoutGraphEdge;\r\n    public rank: number;\r\n\r\n    constructor(id: string, width: number, height: number, x: number, y: number) {\r\n        this.id = id;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n\r\nexport class LayoutGraphEdge {\r\n    public source: string;\r\n    public target: string;\r\n}\r\n\r\n// \t\t\t\t######################################################### DagreGraph #########################################################\r\nexport class DagreLayoutMin implements Layout {\r\n    public static EDGE_KEY_DELIM = '\\x01';\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        let g, layoutNode, nodes, newEdge, edges;\r\n        let i, n, x, y, sId, tId, split = DagreLayoutMin.EDGE_KEY_DELIM;\r\n        let e: Association;\r\n\r\n        nodes = node['nodes'];\r\n        edges = node['edges'];\r\n        g = new LayoutGraphMin();\r\n\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            g.setNode(n.id, new LayoutGraphNode(n.id, n.getSize().x, n.getSize().y, n.getPos().x, n.getPos().y));\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            sId = this.getNodeId(e.$sNode);\r\n            tId = this.getNodeId(e.$tNode);\r\n            if (sId > tId) {\r\n                let tmp = tId;\r\n                tId = sId;\r\n                sId = tmp;\r\n            }\r\n            let idAB = sId + split + tId + split;\r\n            let idBA = tId + split + sId + split;\r\n            if (sId !== tId && g.edgesLabel.indexOf(idAB) < 0 && g.edgesLabel.indexOf(idBA) < 0) {\r\n                newEdge = {source: sId, target: tId, minlen: 1, weight: 1};\r\n                g.edges.push(newEdge);\r\n                g.edgesLabel.push(idAB);\r\n                // In Edges\r\n                if (!g.inEdges[tId]) {\r\n                    g.inEdges[tId] = [];\r\n                }\r\n                g.inEdges[tId].push(newEdge);\r\n\r\n                // Out Edges\r\n                if (!g.outEdges[sId]) {\r\n                    g.outEdges[sId] = [];\r\n                }\r\n                g.outEdges[sId].push(newEdge);\r\n            }\r\n        }\r\n        this.layouting(g);\r\n        // Set the layouting back\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            layoutNode = g.node(n.id);\r\n            x = n.getPos().x;\r\n            y = n.getPos().y;\r\n            if (x < 1 && y < 1) {\r\n                n.withPos(Math.ceil(layoutNode.x), Math.ceil(layoutNode.y));\r\n            }\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            // OBSOLETE method:  e.calc(graph.canvas);\r\n        }\r\n        graph.draw();\r\n    }\r\n\r\n    public getNodeId(node: Control): string {\r\n        if (node.$owner) {\r\n            return this.getNodeId(node.$owner) || node.id;\r\n        }\r\n        return node.id;\r\n    }\r\n\r\n    public layouting(g: LayoutGraphMin) {\r\n        this.longestPath(g);\r\n        this.normalizeRanks(g);\r\n        this.normalizeEdge(g);\r\n        // this.setSimpleOrder(g);\r\n        this.order(g);\r\n        g.ranksep = 25;\r\n        // remove Dummy\r\n        this.removeDummy(g);\r\n        this.position(g);\r\n    }\r\n\r\n    public setSimpleOrder(g: LayoutGraphMin) {\r\n        let i, n;\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            n.order = n.rank;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Applies heuristics to minimize edge crossings in the graph and sets the best\r\n     * order solution as an order attribute on each node.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Graph must be DAG\r\n     *    2. Graph nodes must be objects with a \"rank\" attribute\r\n     *    3. Graph edges must have the \"weight\" attribute\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Graph nodes will have an \"order\" attribute based on the results of the\r\n     *       algorithm.\r\n     */\r\n    public order(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        let visited = {};\r\n        let node, n, order, i;\r\n        for (i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (n in g.nodes) {\r\n            if (visited[n]) {\r\n                continue;\r\n            }\r\n            visited[n] = true;\r\n            node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank].push(n);\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                g.nodes[layering[order][n]].order = parseInt(n);\r\n            }\r\n        }\r\n        // Fix resolve conflict\r\n        for (order in layering) {\r\n            if (layering[order].length > 1) {\r\n                for (n in layering[order]) {\r\n                    if (layering[order].hasOwnProperty(n) === false) {\r\n                        continue;\r\n                    }\r\n                    let name = layering[order][n];\r\n                    let sum = 0;\r\n                    let weight = 1;\r\n                    let edges = g.dummyEdges[name];\r\n                    if (edges) {\r\n                        for (i in edges) {\r\n                            if (edges.hasOwnProperty(i) === false) {\r\n                                continue;\r\n                            }\r\n                            let edge = edges[i];\r\n                            let nodeU = g.node(edge.target);\r\n                            sum = sum + (edge.weight * nodeU.order);\r\n                            weight = weight + edge.weight;\r\n                        }\r\n                    }\r\n                    g.node(name).barycenter = sum / weight;\r\n                    g.node(name).weight = weight;\r\n                }\r\n            } else if (layering[order].length > 0) {\r\n                for (n in layering[order]) {\r\n                    let name = layering[order][n];\r\n                    g.node(name).barycenter = 1;\r\n                    g.node(name).weight = 1;\r\n                }\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                let node = g.nodes[layering[order][n]];\r\n                node.order = parseInt(n) + node.barycenter * node.weight;\r\n                if (isNaN(node.order)) {\r\n                    console.log('ERROR');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public removeDummy(g: LayoutGraphMin) {\r\n        for (let z in g.dummyNodes) {\r\n            let node = g.dummyNodes[z];\r\n            g.setNode(node.id, null);\r\n        }\r\n        g.dummyNodes = [];\r\n        g.dummyEdges = {};\r\n    }\r\n\r\n    /*\r\n     * Breaks any long edges in the graph into short segments that span 1 layer\r\n     * each. This operation is undoable with the denormalize function.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. The input graph is a DAG.\r\n     *    2. Each node in the graph has a \"rank\" property.\r\n     *\r\n     * Post-condition:\r\n     *\r\n     *    1. All edges in the graph have a length of 1.\r\n     *    2. Dummy nodes are added where edges have been split into segments.\r\n     *    3. The graph is augmented with a \"dummyChains\" attribute which contains\r\n     *       the first dummy in each chain of dummy nodes produced.\r\n     */\r\n    public normalizeEdge(g: LayoutGraphMin): void {\r\n        let i: number = 1;\r\n        for (let id in g.edges) {\r\n            let e: LayoutGraphEdge = <LayoutGraphEdge>g.edges[id];\r\n            let v: string = e.source;\r\n            let vRank = g.node(v).rank;\r\n            const w: string = e.target;\r\n            const wRank: number = g.node(w).rank;\r\n            let name: string;\r\n\r\n            if (wRank === vRank + 1) {\r\n                continue;\r\n            }\r\n\r\n            let dummy;\r\n            for (vRank = vRank + 1; vRank < wRank; ++vRank) {\r\n                name = '_d' + e.source + e.target + (i++);\r\n                let newEdge = {source: v, target: name, minlen: 1, weight: 1};\r\n                dummy = new LayoutGraphNode(name, 0, 0, 0, 0);\r\n                dummy.edgeObj = e;\r\n                dummy.rank = vRank;\r\n                // Dummy Edges\r\n                if (!g.dummyEdges[v]) {\r\n                    g.dummyEdges[v] = [];\r\n                }\r\n                g.dummyEdges[v].push(newEdge);\r\n\r\n                g.dummyNodes.push(dummy);\r\n                g.setNode(dummy.id, dummy);\r\n                v = name;\r\n            }\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Initializes ranks for the input graph using the longest path algorithm. This\r\n     * algorithm scales well and is fast in practice, it yields rather poor\r\n     * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\r\n     * ranks wide and leaving edges longer than necessary. However, due to its\r\n     * speed, this algorithm is good for getting an initial ranking that can be fed\r\n     * into other algorithms.\r\n     *\r\n     * This algorithm does not normalize layers because it will be used by other\r\n     * algorithms in most cases. If using this algorithm directly, be sure to\r\n     * run normalize at the end.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Input graph is a DAG.\r\n     *    2. Input graph node labels can be assigned properties.\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Each node will be assign an (unnormalized) \"rank\" property.\r\n     */\r\n    public longestPath(g: LayoutGraphMin) {\r\n        let i, n, visited = [];\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            visited.push(i);\r\n            n.rank = this.findAllPaths(g, n, 0, visited);\r\n            g.minRank = Math.min(g.minRank, n.rank);\r\n        }\r\n    }\r\n\r\n    public findAllPaths(g: LayoutGraphMin, n: Node, currentCost: number, path: Array<String>) {\r\n        let min: number = 0;\r\n        let id: string;\r\n        let z: number;\r\n        let target;\r\n        if (g.outEdges[n.id]) {\r\n            for (z = 0; z < g.outEdges[n.id].length; z++) {\r\n                id = g.outEdges[n.id][z].target;\r\n                target = g.nodes[id];\r\n                if (path[id]) {\r\n                    min = Math.min(min, target.rank);\r\n                } else if (path.indexOf(id) < 0) {\r\n                    min = Math.min(min, this.findAllPaths(g, target, currentCost - 2, path));\r\n                } else {\r\n                    min = currentCost;\r\n                }\r\n            }\r\n            return min;\r\n        }\r\n        return currentCost;\r\n    }\r\n\r\n    /*\r\n     * Adjusts the ranks for all nodes in the graph such that all nodes v have\r\n     * rank(v) >= 0 and at least one node w has rank(w) = 0.\r\n     */\r\n    public normalizeRanks(g: LayoutGraphMin) {\r\n        let min = g.minRank;\r\n        let value;\r\n        g.maxRank = Number.NEGATIVE_INFINITY;\r\n        g.maxHeight = 0;\r\n        g.maxWidth = 0;\r\n        for (let i in g.nodes) {\r\n            let node = g.nodes[i];\r\n            if (node.rank !== undefined) {\r\n                node.rank -= min;\r\n                value = Math.abs(node.rank);\r\n                if (value > g.maxRank) {\r\n                    g.maxRank = value;\r\n                }\r\n                g.maxHeight = Math.max(g.maxHeight, node.height);\r\n                g.maxWidth = Math.max(g.maxWidth, node.width);\r\n            }\r\n        }\r\n    }\r\n\r\n    public position(g: LayoutGraphMin) {\r\n        this.positionY(g);\r\n        let list = this.positionX(g);\r\n        for (let i in list) {\r\n            for (let pos in list[i]) {\r\n                if (list[i].hasOwnProperty(pos) === false) {\r\n                    continue;\r\n                }\r\n                if (g.node(list[i][pos])) {\r\n                    g.node(list[i][pos]).x = parseInt(pos) * g.maxWidth;\r\n                }\r\n            }\r\n\r\n        }\r\n    }\r\n\r\n    public positionY(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        let rankSep = g.ranksep;\r\n        let prevY = 0;\r\n        for (let layer in layering) {\r\n            let maxHeight = g.maxHeight;\r\n            for (let v in layering[layer]) {\r\n                if (layering[layer].hasOwnProperty(v) === false) {\r\n                    continue;\r\n                }\r\n                let id = layering[layer][v];\r\n                g.nodes[id].y = prevY + maxHeight / 2;\r\n            }\r\n            prevY += maxHeight + rankSep;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\r\n     * function will produce a matrix with the ids of each node.\r\n     */\r\n    public buildLayerMatrix(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        for (let i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (let n in g.nodes) {\r\n            let node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank][node.order] = n;\r\n            }\r\n        }\r\n        return layering;\r\n    }\r\n\r\n    public positionX(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        return layering;\r\n    }\r\n}\r\n","import { Point } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport Layout from './Layout';\r\n\r\nexport class Random implements Layout {\r\n\r\n  public layout(graph: Graph) {\r\n\r\n    let model = graph.$graphModel;\r\n\r\n    if (model.nodes) {\r\n      for (let node of model.nodes) {\r\n        let pos: Point = node.getPos();\r\n        if (pos.x === 0 && pos.y === 0) {\r\n          let x = Util.getRandomInt(0, graph.canvasSize.width);\r\n          let y = Util.getRandomInt(0, graph.canvasSize.height);\r\n          node.withPos(x, y);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","export * from './DagreLayout';\r\nexport * from './Random';\r\nexport * from './DagreLayoutMin';\r\n\r\nimport {DagreLayout} from './DagreLayout';\r\nimport {DagreLayoutMin} from './DagreLayoutMin';\r\nimport {Random} from './Random';\r\nnew DagreLayout();\r\nnew DagreLayoutMin();\r\nnew Random();\r\n","import {VirtualKeyBoard} from './VirtualKeyBoard';\r\n\r\nexport {Point} from './elements/BaseElements';\r\nexport {Bridge, DelegateAdapter} from './Bridge';\r\nexport {Graph} from './elements/Graph';\r\nexport * from './elements/nodes';\r\nexport * from './elements/edges';\r\nexport * from './adapters';\r\nexport * from './UML';\r\nimport {Point} from './elements/BaseElements';\r\nimport {Graph} from './elements/Graph';\r\nimport {ClassEditor} from './elements/ClassEditor';\r\nimport {Bridge} from './Bridge';\r\nimport {Util} from './util';\r\nimport * as nodes  from './elements/nodes';\r\nimport * as edges from './elements/edges';\r\nimport {ScrumBoard} from './ScrumBoard';\r\n\r\nif (!window['Point']) {\r\n    window['Point'] = Point;\r\n    window['Graph'] = Graph;\r\n    window['bridge'] = new Bridge();\r\n    window['Util'] = Util;\r\n    window['Class'] = nodes.Class;\r\n    window['Association'] = edges.Association;\r\n    window['SymbolLibary'] = nodes.SymbolLibary;\r\n    window['ClassEditor'] = ClassEditor;\r\n    window['VirtualKeyBoard'] = VirtualKeyBoard;\r\n    window['ScrumBoard'] = ScrumBoard;\r\n}\r\n","'use strict';\r\nimport { CSS } from './CSS';\r\nimport { Node } from './elements/nodes/Node';\r\nimport { DiagramElement, Point } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport class Util {\r\n\r\n    public static isAutoSave: boolean;\r\n\r\n    static getRandomInt(min: number, max: number): number {\r\n        return Math.floor(Math.random() * (max - min + 1)) + min;\r\n    }\r\n\r\n    static createShape(attrs: any): SVGSVGElement {\r\n        let xmlns = attrs.xmlns || 'http://www.w3.org/2000/svg';\r\n        let shape = document.createElementNS(xmlns, attrs.tag);\r\n\r\n        for (let attr in attrs) {\r\n            if (!attrs.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr !== 'tag') {\r\n                shape.setAttribute(attr, attrs[attr]);\r\n\r\n            }\r\n        }\r\n        return <SVGSVGElement><any>shape;\r\n    }\r\n\r\n    static toPascalCase(value: string): string {\r\n        value = value.charAt(0).toUpperCase() + value.substring(1).toLowerCase();\r\n        return value;\r\n    }\r\n\r\n    static isSVG(tag: string): boolean {\r\n        let i,\r\n            list = ['svg', 'path', 'polygon', 'polyline', 'line', 'title', 'rect', 'filter', 'feGaussianBlur', 'feOffset', 'feBlend', 'linearGradient', 'stop', 'text', 'symbol', 'textPath', 'defs', 'fegaussianblur', 'feoffset', 'feblend', 'circle', 'ellipse', 'g'];\r\n        for (i = 0; i < list.length; i += 1) {\r\n            if (list[i] === tag) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    static createHTML(node: any): HTMLElement {\r\n        return <HTMLElement>this.create(node);\r\n    }\r\n    static create(node: any): Element {\r\n        let style, item, xmlns, key, tag, k;\r\n        if (document.createElementNS && (this.isSVG(node.tag) || node.xmlns)) {\r\n            if (node.xmlns) {\r\n                xmlns = node.xmlns;\r\n            } else {\r\n                xmlns = 'http://www.w3.org/2000/svg';\r\n            }\r\n            if (node.tag === 'img' && xmlns) {\r\n                item = document.createElementNS(xmlns, 'image');\r\n                item.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\r\n                item.setAttributeNS('http://www.w3.org/1999/xlink', 'href', node.src);\r\n            } else {\r\n                item = document.createElementNS(xmlns, node.tag);\r\n            }\r\n        } else {\r\n            item = document.createElement(node.tag);\r\n        }\r\n        tag = node.tag.toLowerCase();\r\n        for (key in node) {\r\n            if (!node.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            k = key.toLowerCase();\r\n            if (node[key] === null) {\r\n                continue;\r\n            }\r\n            if (k === 'tag' || k.charAt(0) === '$' || k === '$graphModel') {\r\n                continue;\r\n            }\r\n            if (k.charAt(0) === '#') {\r\n                item[k.substring(1)] = node[key];\r\n                continue;\r\n            }\r\n            if (k === 'rotate') {\r\n                item.setAttribute('transform', 'rotate(' + node[key] + ',' + node.$graphModel.x + ',' + node.$graphModel.y + ')');\r\n                continue;\r\n            }\r\n            if (k === 'value') {\r\n                if (!node[key]) {\r\n                    continue;\r\n                }\r\n                if (tag !== 'input') {\r\n                    if (tag === 'text') {// SVG\r\n                        item.appendChild(document.createTextNode(node[key]));\r\n                    } else {\r\n                        item.innerHTML = node[key];\r\n                    }\r\n                } else {\r\n                    item[key] = node[key];\r\n                }\r\n                continue;\r\n            }\r\n            if (k.indexOf('on') === 0) {\r\n                this.bind(item, k.substring(2), node[key]);\r\n                continue;\r\n            }\r\n            if (k.indexOf('-') >= 0) {\r\n                item.style[key] = node[key];\r\n            } else {\r\n                if (k === 'style' && typeof (node[key]) === 'object') {\r\n                    for (style in node[key]) {\r\n                        if (!node[key].hasOwnProperty(style)) {\r\n                            continue;\r\n                        }\r\n                        if (node[key][style]) {\r\n                            if ('transform' === style) {\r\n                                item.style.transform = node[key][style];\r\n                                item.style.msTransform = item.style.MozTransform = item.style.WebkitTransform = item.style.OTransform = node[key][style];\r\n                            } else {\r\n                                item.style[style] = node[key][style];\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    item.setAttribute(key, node[key]);\r\n                }\r\n            }\r\n        }\r\n        if (node.$parent) {\r\n            node.$parent.appendChild(item);\r\n        }\r\n        if (node.$graphModel) {\r\n            item.$graphModel = node.$graphModel;\r\n        }\r\n        return item;\r\n    }\r\n\r\n    static setSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttribute('width', value);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.setAttribute('height', value);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setAttributeSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttributeNS(null, 'width', value);\r\n        value = Util.getValue(height);\r\n        item.setAttributeNS(null, 'height', value);\r\n    }\r\n\r\n    static setStyleSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setPos(item: any, x: number, y: number): void {\r\n        if (item.x && item.x.baseVal) {\r\n            item.style.left = x + 'px';\r\n            item.style.top = y + 'px';\r\n        } else {\r\n            item.x = x;\r\n            item.y = y;\r\n        }\r\n    }\r\n\r\n    static getValue(value: string | number): number {\r\n        return parseInt(('0' + value).replace('px', ''), 10);\r\n    }\r\n\r\n    static isIE(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('.net') > -1;\r\n    }\r\n\r\n    static isEdge(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('edge') > -1;\r\n    }\r\n\r\n    static isFireFox(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n    }\r\n\r\n    static isSafari(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        return navigator.userAgent.toLowerCase().indexOf('safari') > -1 && !isEdge;\r\n    }\r\n\r\n    static isOpera(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('opera') > -1;\r\n    }\r\n\r\n    static isChrome(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        let isSafari = Util.isSafari();\r\n        return navigator.userAgent.toLowerCase().indexOf('chrome') > -1 && !isEdge && isSafari;\r\n    }\r\n\r\n    static getEventX(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetX'] : event.layerX;\r\n    }\r\n\r\n    static getEventY(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetY'] : event.layerY;\r\n    }\r\n\r\n    static getNumber(str: string): number {\r\n        return parseInt((str || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    static getStyle(styleProp: string): CSS {\r\n        let i, style, diff, current, ref, el = document.createElement('div'), css;\r\n        document.body.appendChild(el);\r\n        css = new CSS(styleProp);\r\n        ref = new CSS(styleProp, el).css;\r\n        style = window.getComputedStyle(el, null);\r\n        el.className = styleProp;\r\n        current = new CSS(styleProp, el).css;\r\n        diff = Util.getNumber(style.getPropertyValue('border-width'));\r\n        for (i in current) {\r\n            if (!current.hasOwnProperty(i)) {\r\n                continue;\r\n            }\r\n            if (i === 'width' || i === 'height') {\r\n                if (Util.getNumber(current[i]) !== 0 && Util.getNumber(current[i]) + diff * 2 !== Util.getNumber(ref[i])) {\r\n                    css.add(i, current[i]);\r\n                }\r\n            } else if (current[i] !== ref[i]) {\r\n                css.add(i, current[i]);\r\n            }\r\n        }\r\n        document.body.removeChild(el);\r\n        return css;\r\n    }\r\n\r\n    static sizeOf(item: string | any, node?: Node): ClientRect {\r\n        let board;\r\n        let rect: ClientRect;\r\n        let addBoard: boolean;\r\n        if (!item) {\r\n            return undefined;\r\n        }\r\n        if (node) {\r\n            board = node.$owner.$view;\r\n            addBoard = false;\r\n        }\r\n\r\n        if (!board) {\r\n            addBoard = true;\r\n            board = Util.createShape({ tag: 'svg', id: 'root', width: 200, height: 200 });\r\n            document.body.appendChild(board);\r\n        }\r\n        if (board.tagName === 'svg') {\r\n            if (typeof item === 'string') {\r\n                item = Util.create({ tag: 'text', $font: true, value: item });\r\n                item.setAttribute('width', '5px');\r\n            }\r\n        } else if (typeof item === 'string') {\r\n            item = document.createTextNode(item);\r\n        }\r\n        board.appendChild(item);\r\n        rect = item.getBoundingClientRect();\r\n        board.removeChild(item);\r\n\r\n        if (addBoard) {\r\n            document.body.removeChild(board);\r\n        }\r\n        return rect;\r\n    }\r\n\r\n    static getColor(style: string, defaultColor?: string) {\r\n        if (style) {\r\n            if (style.toLowerCase() === 'create') {\r\n                return '#008000';\r\n            }\r\n            if (style.toLowerCase() === 'nac') {\r\n                return '#FE3E3E';\r\n            }\r\n            if (style.indexOf('#') === 0) {\r\n                return style;\r\n            }\r\n        }\r\n        if (defaultColor) {\r\n            return defaultColor;\r\n        }\r\n        return '#000';\r\n    }\r\n\r\n    public static utf8$to$b64(str: string): string {\r\n        return window.btoa(encodeURIComponent(str));\r\n    }\r\n\r\n    public static showSVG(control: DiagramElement) {\r\n        let svg = Util.create({\r\n            tag: 'svg',\r\n            style: { left: control.getPos().x, top: control.getPos().y, position: 'absolute' }\r\n        });\r\n        let child = control.getSVG();\r\n        if (child) {\r\n            svg.appendChild(child);\r\n        }\r\n        Util.setSize(svg, control.getSize().x, control.getSize().y);\r\n        document.body.appendChild(svg);\r\n    }\r\n\r\n    public static toJson(ref: JSON | Object): Object {\r\n        let result = {};\r\n        return Util.copy(result, ref, false, false);\r\n    }\r\n\r\n    public static initControl(parent: Control, control: Control, type: string, id: string, json: JSON | Object) {\r\n        if (typeof control.init === 'function') {\r\n            control.init(parent, type, id);\r\n        }\r\n        if (typeof control.load === 'function') {\r\n            control.load(json);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * copy One Json into another\r\n     * @function\r\n     * @param ref reference Json\r\n     * @param src source Json\r\n     * @param full all attributes include privet $\r\n     * @param replace set the original reference or copy it\r\n     * @returns ref\r\n     * @name copy\r\n     */\r\n    public static copy(ref: JSON | Object, src: JSON | Object, full: boolean, replace: boolean) {\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (replace) {\r\n                        ref[i] = src[i];\r\n                        continue;\r\n                    }\r\n                    if (!ref[i]) {\r\n                        if (src[i] instanceof Array) {\r\n                            ref[i] = [];\r\n                        } else {\r\n                            ref[i] = {};\r\n                        }\r\n                    }\r\n                    Util.copy(ref[i], src[i], full, false);\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref[i] = src[i];\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    public static xmlstringify(text: string): string {\r\n        text = text.replace('<', '&lt;');\r\n        text = text.replace('>', '&gt;');\r\n        return text;\r\n    }\r\n\r\n    public static toXML(ref: JSON | Object | any, src: JSON | Object | any, full: boolean, doc: Document): any {\r\n        let name;\r\n        if (!ref) {\r\n            name = src.constructor.name;\r\n            doc = document.implementation.createDocument(null, name, null);\r\n            ref = doc.childNodes[0];\r\n        }\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (!ref.getAttribute(i)) {\r\n                        if (src[i] instanceof Array) {\r\n                            for (let c in src[i]) {\r\n                                if (!src[i].hasOwnProperty(c)) {\r\n                                    continue;\r\n                                }\r\n                                name = src[i][c].constructor.name;\r\n                                let child = doc.createElement(name);\r\n                                ref.appendChild(child);\r\n                                Util.toXML(child, src[i][c], full, doc);\r\n                            }\r\n                        } else {\r\n                            name = src[i].constructor.name;\r\n                            let child = doc.createElement(name);\r\n                            ref.appendChild(child);\r\n                            Util.toXML(child, src[i], full, doc);\r\n                        }\r\n                    } else {\r\n                        Util.toXML(ref.getAttribute(i), src[i], full, doc);\r\n                    }\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref.setAttribute(i, src[i]);\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    static Range(min: Point, max: Point, x: number, y: number) {\r\n        max.x = Math.max(max.x, x);\r\n        max.y = Math.max(max.y, y);\r\n        min.x = Math.min(min.x, x);\r\n        min.y = Math.min(min.y, y);\r\n    }\r\n\r\n    public static getPosition(m: number, n: number, entity: DiagramElement, refCenter: Point) {\r\n        let t, p = [], list, distance = [], min = 999999999, position, i, step = 15;\r\n        let pos: Point = entity.getPos();\r\n        let size: Point = entity.getSize();\r\n        list = [Point.LEFT, Point.RIGHT];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = this.getLRPosition(m, n, entity, list[i]);\r\n            if (t.y >= pos.y && t.y <= (pos.y + size.y + 1)) {\r\n                t.y += (entity['$' + list[i]] * step);\r\n                if (t.y > (pos.y + size.y)) {\r\n                    // Alternative\r\n                    t = Util.getUDPosition(m, n, entity, Point.DOWN, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        list = [Point.UP, Point.DOWN];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = Util.getUDPosition(m, n, entity, list[i]);\r\n            if (t.x >= pos.x && t.x <= (pos.x + size.x + 1)) {\r\n                t.x += (entity['$' + list[i]] * step);\r\n                if (t.x > (pos.x + size.x)) {\r\n                    // Alternative\r\n                    t = this.getLRPosition(m, n, entity, Point.RIGHT, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        for (i = 0; i < p.length; i += 1) {\r\n            if (distance[i] < min) {\r\n                min = distance[i];\r\n                position = p[i];\r\n            }\r\n        }\r\n        return position;\r\n    }\r\n\r\n    public static getUDPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let x, y: number = pos.y;\r\n        if (p === Point.DOWN) {\r\n            y += size.y;\r\n        }\r\n        x = (y - n) / m;\r\n        if (step) {\r\n            x += e['$' + p] * step;\r\n            if (x < pos.x) {\r\n                x = pos.x;\r\n            } else if (x > (pos.x + size.x)) {\r\n                x = pos.x + size.x;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static getLRPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let y: number, x: number = pos.x;\r\n        if (p === Point.RIGHT) {\r\n            x += size.x;\r\n        }\r\n        y = m * x + n;\r\n        if (step) {\r\n            y += e['$' + p] * step;\r\n            if (y < pos.y) {\r\n                y = pos.y;\r\n            } else if (y > (pos.y + size.y)) {\r\n                y = pos.y + size.y;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static hasClass(element: Element, cls: string) {\r\n        let className = element.getAttribute('class');\r\n        return className.indexOf(cls) > 0;\r\n    }\r\n    public static addClass(element: Element, cls: string) {\r\n        if (!Util.hasClass(element, cls)) {\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className + ' ' + cls);\r\n        }\r\n    }\r\n    public static removeClass(element: Element, cls: string) {\r\n        if (Util.hasClass(element, cls)) {\r\n            let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className.replace(reg, ' ').trim());\r\n        }\r\n    }\r\n\r\n    public static startsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.startsWith) {\r\n            return s.indexOf(searchS) === 0;\r\n        }\r\n\r\n        return s.startsWith(searchS);\r\n    }\r\n\r\n    public static endsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.endsWith) {\r\n            let lastIndex = s.lastIndexOf(searchS);\r\n            return lastIndex !== -1 && lastIndex === (s.length - 1);\r\n        }\r\n\r\n        return s.endsWith(searchS);\r\n    }\r\n\r\n    public static includes(s: string, searchS: string): boolean {\r\n        if (!String.prototype.includes) {\r\n            let idx = s.indexOf(searchS);\r\n            return idx > -1;\r\n        }\r\n        if (s === null) {\r\n            return false;\r\n        }\r\n\r\n        return s.includes(searchS);\r\n    }\r\n\r\n    public static isParentOfChild(parent: Element, child: Element): boolean {\r\n\r\n        if (!parent || !child) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isIE()) {\r\n            let children = parent.childNodes;\r\n            // let found = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                let childItem = children[i];\r\n                if (childItem === child) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        return parent.contains(child);\r\n    }\r\n\r\n    public static createCustomEvent(type: string, params?: any): CustomEvent {\r\n        let evt: CustomEvent;\r\n\r\n        if (typeof window['CustomEvent'] !== 'function') {\r\n            params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n            evt = document.createEvent('CustomEvent');\r\n            evt.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\r\n            return evt;\r\n        }\r\n\r\n        evt = new CustomEvent(type);\r\n\r\n        return evt;\r\n    }\r\n\r\n    public static saveToLocalStorage(model: any): boolean {\r\n        if (!this.isAutoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isLocalStorageSupported()) {\r\n            if (model) {\r\n                if (model.$isLoading) {\r\n                    return false;\r\n                }\r\n                let jsonObj = Util.toJson(model);\r\n                let data = JSON.stringify(jsonObj, null, '\\t');\r\n                localStorage.setItem('diagram', data);\r\n            } else {\r\n                localStorage.removeItem('diagram');\r\n            }\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static getDiagramFromLocalStorage(): string {\r\n        if (Util.isLocalStorageSupported()) {\r\n            return localStorage.getItem('diagram');\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    public static isLocalStorageSupported(): boolean {\r\n        if (this.isEdge()) {\r\n            return false;\r\n        }\r\n        return localStorage !== undefined;\r\n    }\r\n}\r\n"],"sourceRoot":""}
Severity: Minor
Found in doc/diagram.js.map by fixme

FIXME found
Open

{"version":3,"sources":["webpack://DiagramJS/webpack/bootstrap","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Adapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Bridge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/BridgeElement.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/CSS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Control.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Data.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventBus.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/JSEPS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Palette.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertiesPanel.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertyBinder.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/RGBColor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/SVGConverter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/ScrumBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Toolbar.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/UML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/VirtualKeyBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/JavaAdapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/BaseElements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/ClassEditor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Graph.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Model.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregate.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Association.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Composition.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Generalisation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Implements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Attribute.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/AutoComplete.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/BR.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Button.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Class.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/ClazzProperty.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Dice.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Div.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Form.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/HTML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/InfoText.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Input.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Label.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Method.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Node.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/SO.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/StereoType.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Symbol.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Table.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/AddNode.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Drag.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/GraphListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/ImportFile.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/NewEdge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Select.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Zoom.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayout.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayoutMin.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/Random.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/main.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/util.ts"],"names":[],"mappings":"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","file":"diagram.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./main.ts\");\n","export abstract class Adapter {\r\n    public id: string = null;\r\n\r\n    abstract update(evt: Object): boolean;\r\n}\r\n","'use strict';\r\n\r\nimport * as controls from './elements/nodes';\r\nimport * as adapters from './adapters';\r\nimport Data from './Data';\r\nimport {Control} from './Control';\r\nimport {Adapter} from './Adapter';\r\nimport {Graph} from './elements';\r\nimport {Util} from './util';\r\nimport {Point} from './elements';\r\n\r\nexport class Bridge extends Control {\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public static version: string = '0.42.01.1601007-1739';\r\n    private controlFactory: Object = {};\r\n    private adapterFactory: Object = {};\r\n    private controls: Object = {};\r\n    private adapters: Object = {};\r\n    private items: Object = {};\r\n    private controlNo: number = 1;\r\n    private online: boolean = true;\r\n    private language: string = navigator.language.toUpperCase();\r\n    private toolBar: HTMLElement;\r\n\r\n    constructor(viewRoot?: HTMLElement) {\r\n        super();\r\n        let i;\r\n\r\n        if (viewRoot) {\r\n            this.$view = viewRoot;\r\n        }\r\n\r\n        let keys: string[] = Object.keys(adapters);\r\n        for (i = 0; i < keys.length; i++) {\r\n            let child = adapters[keys[i]];\r\n            if (child && child.id) {\r\n                this.adapterFactory[child.id.toLowerCase()] = child;\r\n            }\r\n        }\r\n\r\n        keys = Object.keys(controls);\r\n        for (i = 0; i < keys.length; i++) {\r\n            this.addControl(controls[keys[i]]);\r\n        }\r\n        this.addControl(Graph);\r\n\r\n        let that = this;\r\n        window.addEventListener('load', function () {\r\n            let updateOnlineStatus = function updateOnlineStatus() {\r\n                that.setOnline(navigator.onLine);\r\n            };\r\n            window.addEventListener('online', updateOnlineStatus);\r\n            window.addEventListener('offline', updateOnlineStatus);\r\n        });\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public setOnline(value: boolean) {\r\n        this.online = value;\r\n        if (this.toolBar.children[0]) {\r\n            this.toolBar.children[0].className = value ? 'online' : 'offline';\r\n        }\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addToolbar(): boolean {\r\n        if (this.toolBar) {\r\n            return false;\r\n        }\r\n        this.toolBar = document.createElement('div');\r\n        this.toolBar.className = 'onlineStatus';\r\n        let child = document.createElement('div');\r\n        child.className = 'online';\r\n        this.toolBar.appendChild(child);\r\n        child = document.createElement('div');\r\n        child.className = 'lang';\r\n        child.innerHTML = this.language;\r\n        this.toolBar.appendChild(child);\r\n\r\n        let body: HTMLElement = document.getElementsByTagName('body')[0];\r\n        body.insertBefore(this.toolBar, body.firstChild);\r\n        // Refresh Online Status\r\n        this.setOnline(this.online);\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addListener = function (listener: any) {\r\n        this.listener.push(listener);\r\n    };\r\n\r\n    public addControl(control: any) {\r\n        if (control && control.name) {\r\n            this.controlFactory[control.name.toLowerCase()] = control;\r\n        }\r\n    }\r\n\r\n    public getId(): string {\r\n        return 'control' + (this.controlNo++);\r\n    }\r\n\r\n    public adapterUpdate(message: string) {\r\n        let keys: string[] = Object.keys(this.adapters);\r\n        if (keys.length > 0) {\r\n            let i;\r\n            for (i = 0; i < keys.length; i++) {\r\n                let adapterList = this.adapters[keys[i]];\r\n                if (adapterList instanceof Adapter) {\r\n                    adapterList.update(message);\r\n                } else {\r\n                    for (let adapter of adapterList) {\r\n                        adapter.update(message);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        let config = {}, className: string, id: string;\r\n        if (typeof(json) === 'string') {\r\n            // Only a String\r\n            config['id'] = '' + json;\r\n            let item = document.getElementById(config['id']);\r\n            let className: string;\r\n            if (item) {\r\n                className = item.getAttribute('class');\r\n                if (!className) {\r\n                    className = item.getAttribute('classname') || '';\r\n                }\r\n                // Found Element and now config Data element\r\n                if (item.getAttribute('property')) {\r\n                    if (this.hasItem(item.getAttribute('property'))) {\r\n                        let data = this.getItem(item.getAttribute('property'));\r\n                        for (let key in data.prop) {\r\n                            if (item.getAttribute(key)) {\r\n                                data.setValue(key, item.getAttribute(key));\r\n                            }\r\n                        }\r\n                        if (item.getAttribute('property')) {\r\n                            // TODO: FIXME!!!\r\n                            // data.property = item.getAttribute(\"property\");\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                className = '' + json;\r\n            }\r\n            className = className.toLowerCase();\r\n            config['className'] = className;\r\n        } else {\r\n            config = <JSON>json;\r\n        }\r\n        // Config validate\r\n        if (!config['id']) {\r\n            config['id'] = this.getId();\r\n        }\r\n        // Backup for Old Graph\r\n        if (!config['className'] && (config['type'] === 'clazzdiagram' || config['type'] === 'objectdiagram')) {\r\n            config['className'] = 'graph';\r\n        }\r\n\r\n        className = config['className'] || config['class'];\r\n        className = className.toLocaleLowerCase();\r\n        id = config['id'];\r\n\r\n        // Check For Control or Data\r\n        if ((config['prop'] || config['upd'] || config['rem']) && this.controls[id] === null) {\r\n            // Its Data\r\n            let newData = !this.hasItem(config['id']);\r\n            let item: Data = this.getItem(config['id']);\r\n            // TODO: FIXME!!!\r\n            // if (id && className && !item.property) {\r\n            //      item.property = className;\r\n            // }\r\n            if (newData) {\r\n                for (let i in this.controls) {\r\n                    if (this.controls.hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    this.controls[i].addItem(this, item);\r\n                }\r\n            }\r\n            // Add all Values to item\r\n            item.addProperties(config);\r\n            // Bridge.addProperties(config['prop'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return item;\r\n        }\r\n\r\n        let control;\r\n        if (this.controls[id]) {\r\n            control = this.controls[id];\r\n            control.initControl(json);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return control;\r\n        }\r\n\r\n        if (typeof(this.controlFactory[className]) === 'object' || typeof(this.controlFactory[className]) === 'function') {\r\n            let obj = this.controlFactory[className];\r\n            control = new obj(json);\r\n            Util.initControl(owner || this, control, config['property'], id, json);\r\n\r\n            if (control.id) {\r\n                this.controls[control.id] = control;\r\n            } else {\r\n                this.controls[id] = control;\r\n            }\r\n\r\n            // create DataObject and register this control as listener to it\r\n            // let obj = {id:id};\r\n            // let data: Data = this.load(obj);\r\n            // data.addListener(this);\r\n\r\n            // Try to Show\r\n            if (typeof control.getSVG === 'function' && typeof control.getSize === 'function') {\r\n                let size: Point = control.getSize();\r\n\r\n                let svg = Util.createShape({\r\n                    tag: 'svg',\r\n                    id: 'root',\r\n                    width: size.x,\r\n                    height: size.y\r\n                });\r\n\r\n                let view = control.getSVG();\r\n                svg.appendChild(view);\r\n                document.getElementsByTagName('body')[0].appendChild(svg);\r\n            }\r\n            return control;\r\n        }\r\n        return null;\r\n        // bridge.load('{class:table, columns:[{id:'firstname'}, {id:'lastname'}]}');\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n\r\n        if (this.items[id] !== undefined) {\r\n            return true;\r\n        }\r\n        id = id.split('.')[0];\r\n        return (this.items[id] !== undefined);\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return this.items;\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        let item = this.items[id];\r\n        if (!item) {\r\n            id = id.split('.')[0];\r\n            item = this.items[id];\r\n            if (!item) {\r\n                item = new Data();\r\n                item.id = id;\r\n                this.items[id] = item;\r\n            }\r\n        }\r\n        return item;\r\n    }\r\n\r\n    /**\r\n     * Method for executing user input -> Event\r\n     * @param object\r\n     * @param attribute\r\n     * @param oldValue\r\n     * @param newValue\r\n     * @returns {boolean}\r\n     */\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        alert('Bridge.setValue: oldVal:' + oldValue + ', newVal: ' +  + newValue + ', attribute: ' + attribute + ', object: ' + JSON.stringify(object));\r\n        let obj: Data;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n\r\n        } else if (object instanceof Data) {\r\n            obj = object;\r\n            id = object.id;\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = <Data>object;\r\n            id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return false;\r\n        }\r\n        if (obj) {\r\n            // Execute Update to Data\r\n            obj.setValue(attribute, newValue);\r\n            // Could be done here, but currently is done at this.execueChange..:\r\n            // obj[attribute] = value;\r\n        }\r\n\r\n        /*let tmp = {'id': id};\r\n        if (typeof(newValue) !== 'undefined' && newValue !== null) {\r\n            let upd = {};\r\n            upd[attribute] = newValue;\r\n            tmp['upd'] = upd;\r\n        }\r\n        if (typeof(oldValue) !== 'undefined' && oldValue !== null) {\r\n            let rem = {};\r\n            rem[attribute] = oldValue;\r\n            tmp['rem'] = rem;\r\n        }*/\r\n        // this.load(tmp);\r\n        return true;\r\n    }\r\n\r\n    public getValue(object: Object, attribute: string): any {\r\n        let obj: Object;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = object;\r\n            // id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return;\r\n        }\r\n        if (obj) {\r\n            if (obj.hasOwnProperty(attribute)) {\r\n                return obj[attribute];\r\n            } else if (obj instanceof Data) {\r\n                return (<Data>obj).getValue(attribute);\r\n            } else {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    public getNumber(object: Object, attribute: string, defaultValue: number = 0): number {\r\n        let res = <number>this.getValue(object, attribute);\r\n        if (typeof res === 'number') {\r\n            return res;\r\n        } else if (typeof res === 'string') {\r\n            // check whether res is a number\r\n            let value = Number(res);\r\n            if (value || value === 0) {\r\n                return value;\r\n            }\r\n        }\r\n        return defaultValue;\r\n    }\r\n\r\n    getControl(controlId: string) {\r\n        return this.controls[controlId];\r\n    }\r\n\r\n    public registerListener(eventType: string, control: Control, callBackfunction: string): Control {\r\n        if (typeof control === 'string') {\r\n            control = this.getControl(<string>control);\r\n        }\r\n        if (!control) {\r\n            return null;\r\n        }\r\n        if (eventType) {\r\n            eventType = eventType.toLowerCase();\r\n        }\r\n        control.registerListenerOnHTMLObject(eventType);\r\n        if (callBackfunction) {\r\n            let adapter: DelegateAdapter = new DelegateAdapter();\r\n            adapter.callBackfunction = callBackfunction;\r\n            adapter.id = control.getId();\r\n            this.addAdapter(adapter, eventType);\r\n        }\r\n        return control;\r\n    }\r\n\r\n    public addAdapter(adapter: Adapter | string, eventType: string): Adapter {\r\n        if (!eventType) {\r\n            eventType = '';\r\n        }\r\n        let result: Adapter;\r\n        if (adapter instanceof String) {\r\n            let obj = this.adapterFactory[adapter.toLowerCase()];\r\n            result = new obj();\r\n        } else {\r\n            result = <Adapter>adapter;\r\n        }\r\n        let handlers = this.adapters[eventType];\r\n\r\n        if (handlers === null || handlers === undefined) {\r\n            handlers = [];\r\n            this.adapters[eventType] = handlers;\r\n        }\r\n        handlers.push(result);\r\n        return result;\r\n    }\r\n\r\n    public fireEvent(evt: Event): void {\r\n        let handlers = this.adapters[''];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n        handlers = this.adapters[evt['eventType']];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport class DelegateAdapter extends Adapter {\r\n    adapter: Adapter;\r\n    callBackfunction: string;\r\n\r\n    update(evt: Event): boolean {\r\n        if (this.adapter) {\r\n            this.adapter.update(evt);\r\n            return true;\r\n        } else if (this.callBackfunction) {\r\n            return this.executeFunction(this.callBackfunction, evt);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public setAdapter(adapter: Adapter): boolean {\r\n        this.adapter = adapter;\r\n        return true;\r\n    }\r\n\r\n    private executeFunction(strValue: string, evt: Event): boolean {\r\n        let scope = window;\r\n        let scopeSplit = strValue.split('.');\r\n        for (let i = 0; i < scopeSplit.length - 1; i++) {\r\n            scope = scope[scopeSplit[i]];\r\n            if (scope === undefined) {\r\n                return false;\r\n            }\r\n        }\r\n        let fn: any = scope[scopeSplit[scopeSplit.length - 1]];\r\n        if (typeof fn === 'function') {\r\n            fn.call(scope);\r\n            return true;\r\n        } else {\r\n            window['callBack1'].update(evt);\r\n\r\n        }\r\n        return false;\r\n    }\r\n}\r\n","'use strict';\r\nimport Data from './Data';\r\n\r\nexport default class BridgeElement {\r\n    private static elementSet: BridgeElement[] = [];\r\n    public model: Data;\r\n    public id: string;\r\n    public gui: HTMLElement;\r\n\r\n    constructor(model: Data) {\r\n        this.model = model;\r\n        this.id = model.id;\r\n        BridgeElement.elementSet.push(this);\r\n    }\r\n}\r\n","import {Util} from './util';\r\n\r\n// \t\t\t\t######################################################### CSS #########################################################\r\nexport class CSS {\r\n    public css: Object;\r\n    private name: string;\r\n\r\n    constructor(name: string, item?: any) {\r\n        let i, value, border: string, prop, el;\r\n        this.name = name;\r\n        this.css = {};\r\n        if (!item) {\r\n            return;\r\n        }\r\n\r\n        el = window.getComputedStyle(item, null);\r\n        border = el.getPropertyValue('border');\r\n        for (i in el) {\r\n            prop = i;\r\n            value = el.getPropertyValue(prop);\r\n            if (value && value !== '') {\r\n                // optimize CSS\r\n                if (border) {\r\n                    if (prop === 'border-bottom' || prop === 'border-right' || prop === 'border-top' || prop === 'border-left') {\r\n                        if (value !== border) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-color' || prop === 'border-bottom-color' || prop === 'border-right-color' || prop === 'border-top-color' || prop === 'border-left-color') {\r\n                        if (border.substring(border.length - value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-width') {\r\n                        if (border.substring(0, value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else {\r\n                        this.css[prop] = value;\r\n                    }\r\n                } else {\r\n                    this.css[prop] = value;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public static getStdDef() {\r\n        let child, def = Util.create({tag: 'defs'});\r\n\r\n        child = Util.create({tag: 'filter', id: 'drop-shadow'});\r\n        child.appendChild(Util.create({tag: 'feGaussianBlur', 'in': 'SourceAlpha', result: 'blur-out', stdDeviation: 2}));\r\n        child.appendChild(Util.create({tag: 'feOffset', 'in': 'blur-out', dx: 2, dy: 2}));\r\n        child.appendChild(Util.create({tag: 'feBlend', 'in': 'SourceGraphic', mode: 'normal'}));\r\n        def.appendChild(child);\r\n        child = Util.create({tag: 'linearGradient', id: 'reflect', x1: 0, x2: 0, y1: '50%', y2: 0, spreadMethod: 'reflect'});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#aaa', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#eee', offset: '100%'}));\r\n        def.appendChild(child);\r\n\r\n        child = Util.create({tag: 'linearGradient', id: 'classelement', x1: 0, x2: '100%', y1: '100%', y2: 0});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#fff', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#d3d3d3', offset: 1}));\r\n        def.appendChild(child);\r\n\r\n        return def;\r\n    }\r\n\r\n    public static getSubstring(str: string, search: string, startChar: string, endChar: string, splitter: string): any {\r\n        let pos, end, count = 0, array = [];\r\n        pos = str.indexOf(search);\r\n        if (pos > 0) {\r\n            end = str.indexOf(startChar, pos);\r\n            pos = end + 1;\r\n            if (end > 0) {\r\n                while (end < str.length) {\r\n                    if (str.charAt(end) === startChar) {\r\n                        count += 1;\r\n                    }\r\n                    if (str.charAt(end) === endChar) {\r\n                        count -= 1;\r\n                        if (count === 0) {\r\n                            if (splitter && pos !== end) {\r\n                                array.push(str.substring(pos, end).trim());\r\n                            }\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (str.charAt(end) === splitter && count === 1) {\r\n                        array.push(str.substring(pos, end).trim());\r\n                        pos = end + 1;\r\n                    }\r\n\r\n                    end += 1;\r\n                }\r\n                if (splitter) {\r\n                    return array;\r\n                }\r\n                return str.substring(pos, end);\r\n            }\r\n            return str.substring(pos);\r\n        }\r\n        return '';\r\n    }\r\n\r\n    public static addStyle(board: SVGElement, styleName: any) {\r\n        let defs, style: any, css;\r\n        if (styleName.baseVal || styleName.baseVal === '') {\r\n            styleName = styleName.baseVal;\r\n        }\r\n        if (!styleName) {\r\n            return;\r\n        }\r\n        defs = CSS.getDefs(board);\r\n        if (defs.getElementsByTagName('style').length > 0) {\r\n            style = defs.getElementsByTagName('style')[0];\r\n        } else {\r\n            style = Util.create({tag: 'style'});\r\n            style.item = {};\r\n            defs.appendChild(style);\r\n        }\r\n        if (!style.item[styleName]) {\r\n            css = Util.getStyle(styleName);\r\n            style.item[styleName] = css;\r\n            style.innerHTML = style.innerHTML + '\\n.' + styleName + css.getSVGString(board);\r\n        }\r\n    }\r\n\r\n    public static addStyles(board: SVGElement, item: any) {\r\n        if (!item) {\r\n            return;\r\n        }\r\n        let items, i, className: any = item.className;\r\n\r\n        if (className) {\r\n            if (className.baseVal || className.baseVal === '') {\r\n                className = className.baseVal;\r\n            }\r\n        }\r\n        if (className) {\r\n            items = className.split(' ');\r\n            for (i = 0; i < items.length; i += 1) {\r\n                CSS.addStyle(board, items[i].trim());\r\n            }\r\n        }\r\n        for (i = 0; i < item.childNodes.length; i += 1) {\r\n            this.addStyles(board, item.childNodes[i]);\r\n        }\r\n    }\r\n\r\n    public static getDefs(board: SVGElement) {\r\n        let defs;\r\n        if (board.getElementsByTagName('defs').length < 1) {\r\n            defs = Util.create({tag: 'defs'});\r\n            board.insertBefore(defs, board.childNodes[0]);\r\n        } else {\r\n            defs = board.getElementsByTagName('defs')[0];\r\n        }\r\n        return defs;\r\n    }\r\n\r\n    public add(key: string, value: string) {\r\n        this.css[key] = value;\r\n    }\r\n\r\n    public get(key: string): any {\r\n        let i;\r\n        for (i in this.css) {\r\n            if (i === key) {\r\n                return this.css[key];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public getNumber(key: string) {\r\n        return parseInt((this.get(key) || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    public getSVGString(board: SVGElement) {\r\n        let str, pos, style, defs, value, filter, z;\r\n        str = '{';\r\n        for (style in this.css) {\r\n            if (!this.css.hasOwnProperty(style)) {\r\n                continue;\r\n            }\r\n            if (style === 'border') {\r\n                pos = this.css[style].indexOf(' ');\r\n                str = str + 'stroke-width: ' + this.css[style].substring(0, pos) + ';';\r\n                pos = this.css[style].indexOf(' ', pos + 1);\r\n                str = str + 'stroke:' + this.css[style].substring(pos) + ';';\r\n            } else if (style === 'background-color') {\r\n                str = str + 'fill: ' + this.css[style] + ';';\r\n            } else if (style === 'background') {\r\n                value = CSS.getSubstring(this.css[style], 'linear-gradient', '(', ')', ',');\r\n                if (value.length > 0) {\r\n                    defs = CSS.getDefs(board);\r\n                    if (value[0] === '45deg') {\r\n                        pos = 1;\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '100%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                    } else {\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '0%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                        pos = 0;\r\n                    }\r\n                    defs.appendChild(filter);\r\n                    while (pos < value.length) {\r\n                        value[pos] = value[pos].trim();\r\n                        z = value[pos].lastIndexOf(' ');\r\n                        filter.appendChild(Util.create({\r\n                            tag: 'stop',\r\n                            'offset': value[pos].substring(z + 1),\r\n                            style: {'stop-color': value[pos].substring(0, z)}\r\n                        }));\r\n                        pos += 1;\r\n                    }\r\n                    str = str + 'fill: url(#' + this.name + ');';\r\n                    continue;\r\n                }\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n                // box-shadow: inset 0 3px 4px #888;\r\n// \t\t\t\t<defs>\r\n// \t\t\t\t\t<filter id='drop-shadow'>\r\n// \t\t\t\t\t\t<feGaussianBlur in='SourceAlpha' result='blur-out' stdDeviation='2'></feGaussianBlur>\r\n// \t\t\t\t\t\t<feOffset in='blur-out' dx='2' dy='2'></feOffset>\r\n// \t\t\t\t\t\t<feBlend in='SourceGraphic' mode='normal'></feBlend>\r\n// \t\t\t\t\t</filter>\r\n// \t\t\t\t</defs>\r\n            } else {\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n            }\r\n        }\r\n        str = str + '}';\r\n        return str;\r\n    }\r\n}\r\n","import {Bridge} from './Bridge';\r\nimport Data from './Data';\r\nimport EventListener from './EventListener';\r\n\r\nexport abstract class Control {\r\n    public $owner: Control;\r\n    /**\r\n     *\r\n     */\r\n    public property: string;\r\n    public id: string;\r\n    public $view: Element;\r\n    public $viewData: Data = null;\r\n\r\n    protected $model: Data;\r\n    protected $viewListener: EventListenerOrEventListenerObject;\r\n\r\n    /**\r\n     * The properties, we want to listen to\r\n     */\r\n    // static defaultProperties: string[] = [];\r\n\r\n    // public getProperties(): string[] {\r\n    //     return this.properties;\r\n    // }\r\n\r\n    constructor() {\r\n        // e.g. this.properties.push(\"key\");\r\n        // this.properties.push(\"property\");\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data: Data = new Data();\r\n        if (oldData) {\r\n            oldData.removeListener(this);\r\n            const keys: string[] = oldData.getKeys();\r\n            for (let i = 0; i < keys.length; i++) {\r\n                let attr = keys[i];\r\n                if (this.$view) {\r\n                    if (this.$view[attr] === null) {\r\n                        continue;\r\n                    }\r\n                    data.setValue(attr, this.$view[attr]);\r\n                } else {\r\n                    data.setValue(attr, null);\r\n                }\r\n            }\r\n        }\r\n        data.addListener(this);\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     *  Set the new HTMLElement and attach listener to it.\r\n     *  Also remove Listeners from old one and return the old one, if present.\r\n     * @param element\r\n     * @returns The previous Element\r\n     */\r\n    public setView(element: Element): Element {\r\n        let oldElement: Element = null;\r\n        if (this.$view) {\r\n            oldElement = this.$view;\r\n            if (this.$viewListener) {\r\n                oldElement.removeEventListener('change', this.$viewListener);\r\n            }\r\n        }\r\n        this.$view = element;\r\n\r\n        if (this.$viewListener) {\r\n            element.addEventListener('change', this.$viewListener);\r\n        }\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n        return element;\r\n    }\r\n\r\n    public init(owner: Control, property ?: string, id ?: string): Control {\r\n        if (!this.$owner) {\r\n            this.$owner = owner;\r\n        }\r\n        if (!this.id) {\r\n            this.id = id;\r\n        }\r\n        if (!this.property) {\r\n            this.property = this.generateID(property, id);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public createEventListener(): EventListener {\r\n        return new EventListener();\r\n    }\r\n\r\n    public getRoot(): Control {\r\n        if (this.$owner) {\r\n            return this.$owner.getRoot();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return null;\r\n    }\r\n\r\n    public initControl(data: any): void {\r\n        if (this.$view === null || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (data.hasOwnProperty('prop')) {\r\n            for (let key in data.prop) {\r\n                let oldValue = this.$viewData.getValue(key);\r\n                if (this.$view) {\r\n                    this.updateElement(key, oldValue, data.prop[key]);\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        let hasRem = data.hasOwnProperty('rem');\r\n        let removed: any[] = [];\r\n        if (data.hasOwnProperty('upd')) {\r\n            for (let key in data.upd) {\r\n                let oldValue;\r\n                let newValue = data.upd[key];\r\n                let entity;\r\n                const temp = false;\r\n                if (temp) {\r\n//                if (newValue == this.getViewData().getValue(key)) {\r\n                    // new Value assertEquals old value, so we don't need to change anything..\r\n                    // delete data.rem[key];\r\n                    if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                        removed.push(data.rem[key]);\r\n                    }\r\n                    continue;\r\n                }\r\n                if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                    // if there's a rem, the oldValue from rem will be used and expected to be right..\r\n                    oldValue = data.rem[key];\r\n                    if (this.$model && this.$model.getValue(key) === oldValue) {\r\n                        entity = this.$model;\r\n//                    } else if (oldValue == this.getViewData().getValue(key)) {\r\n//                        $graphModel = this.getViewData();\r\n                    }\r\n                    delete data.rem[key];\r\n\r\n                    if (entity === null) {\r\n                        continue;\r\n                    }\r\n                }\r\n                if (entity) {\r\n                    if (!hasRem) {\r\n                        if (entity === this.$model) {\r\n                            oldValue = this.$model.getValue(key);\r\n                        } else {\r\n//                           oldValue = this.getViewData().getValue(key);\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (this.$model) {\r\n                        // try to get the oldValue directly from the $graphModel...\r\n                        oldValue = this.$model.getValue(key);\r\n                        entity = this.$model;\r\n                    }\r\n                    if (oldValue === null) {\r\n                        // if there was no data in the entity, we try to get oldValue from the $view\r\n//                        oldValue = this.getViewData().getValue(key);\r\n//                        entity = this.getViewData();\r\n                    }\r\n                }\r\n\r\n                //  || oldValue !== this.$viewData.getValue(key)\r\n                if (newValue === oldValue) {\r\n                    // no match, so update should be wrong...\r\n                    continue;\r\n                }\r\n                const viewDataOldValue = this.$viewData.getValue(key);\r\n                if (entity === this.$viewData) {\r\n\r\n                    // this.getViewData().setValue(key, newValue);\r\n                    if (this.$view) {\r\n                        this.updateElement(key, viewDataOldValue, newValue);\r\n                    }\r\n                } else {\r\n                    this.updateElement(key, viewDataOldValue, newValue);\r\n                }\r\n                this.getRoot().setValue(entity, key, newValue, oldValue);\r\n            }\r\n            // this.saveViewInData();\r\n        }\r\n        if (hasRem) {\r\n            for (let key in data.rem) {\r\n                if (removed.hasOwnProperty(key)) {\r\n                    continue;\r\n                }\r\n                let oldValue;\r\n//                    this.getViewData().getValue(key);\r\n//                if (oldValue != data.rem[key] || data.upd !== undefined && (data.upd[key] == oldValue || this.getViewData().getValue(key) == data.upd[key])) {\r\n                // if rem is invalid, or if the change is already applied, don't do anything..\r\n                //                  continue;\r\n                //            }\r\n                // delete this.$viewData.getValue(key);\r\n                // this.saveViewInData();\r\n                this.updateElement(key, null, null);\r\n                // this.$view.removeAttribute(key);\r\n                if (this.$model) {\r\n//                    this.getRoot().setValue(this.$graphModel, key, this.getViewData().getValue(key), oldValue);\r\n                }\r\n            }\r\n        }\r\n        if (this.property) {\r\n            // Add listener to Input field:\r\n            this.$view['onchange'] = ((ev: Event) => {\r\n                    this.controlChanged(ev);\r\n                }\r\n            );\r\n        }\r\n//        this.saveViewInData();\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        return null;\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n        return false;\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return new Object();\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue ?: Object): boolean {\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Is called when a object, that the Control is listening to, changes its value.\r\n     * @param entity\r\n     * @param property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        if (oldValue === newValue || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (oldValue === this.$viewData.getValue(property)) {\r\n            return;\r\n        }\r\n        // Set NewData to ViewData and Fire PC\r\n        this.$viewData.setValue(property, newValue);\r\n\r\n//\r\n//\r\n//         // if (entity == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.entity) {\r\n//                 alert(\"entity = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.entity.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.entity, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the entity is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"entity = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n// >>>>>>> addOldFunctions\r\n        if (this.$viewData) {\r\n            this.$viewData.setValue(property, newValue);\r\n        }\r\n        if (this.$model) {\r\n            this.$model.setValue(property, newValue);\r\n        }\r\n        this.updateElement(property, oldValue, newValue);\r\n    }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            // Do Nothing\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  Update GUI Element\r\n     * @param {string} property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        if (this.$view && this.$view.hasAttribute(property)) {\r\n            this.$view.setAttribute(property, newValue);\r\n        }\r\n    }\r\n\r\n//        if (oldValue == newValue) {\r\n//            return;\r\n//        }\r\n//        if (oldValue == this.$viewData.getValue(property)) {\r\n//            return;\r\n//        }\r\n//        // Set NewData to ViewData and Fire PC\r\n//        this.$viewData.setValue(property, newValue);\r\n//\r\n//\r\n//\r\n//         // if ($graphModel == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.$graphModel) {\r\n//                 alert(\"$graphModel = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.$graphModel.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.$graphModel, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the $graphModel is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"$graphModel = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n\r\n    public getId(): string {\r\n        return this.id;\r\n    }\r\n\r\n    public load(json: JSON | Object, owner ?: Control): any {\r\n        // Do Nothing\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.property || entity.hasProperty(this.property)) {\r\n                entity.addListener(this, this.property);\r\n                this.$model = entity;\r\n            }\r\n        }\r\n    }\r\n\r\n    public appendChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.appendChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].appendChild(child.$view);\r\n        }\r\n    }\r\n\r\n    public removeChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.removeChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].removeChild(child.$view);\r\n        }\r\n    }\r\n\r\n    /*\r\n     Property looks like: 't1.talk'\r\n     */\r\n    public setProperty(property: string): void {\r\n        if (!this.property) {\r\n            return;\r\n        }\r\n        let objId = property.split('.')[0];\r\n        let object = null;\r\n        if (this.$owner.hasItem(objId)) {\r\n            object = this.$owner.getItem(objId);\r\n        }\r\n\r\n        // remove listener on old object\r\n        if (this.$model) {\r\n            // this.$graphModel.removeListener(this);\r\n            this.$model.removeListener(this, this.lastProperty);\r\n        }\r\n        this.property = property;\r\n\r\n        // add listener to object..\r\n        if (object) {\r\n            object.addListener(this, this.lastProperty);\r\n            this.$model = object;\r\n            this.updateElement(this.lastProperty, this.$viewData.getValue(this.lastProperty), object.prop[this.lastProperty]);\r\n        }\r\n    }\r\n\r\n    public registerListenerOnHTMLObject(eventType: string): boolean {\r\n        return this.registerEventListener(eventType, <HTMLElement>this.$view);\r\n    }\r\n\r\n    // Normal Event HTML-Event\r\n    // Eventtype:string,\r\n    // id:string of Control\r\n    public fireEvent(evt: Event): void {\r\n        // Do Nothing\r\n    }\r\n\r\n    public isClosed(): boolean {\r\n        return this['closed'];\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        if (this.isClosed()) {\r\n            return this.$owner.getShowed();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * the id of the Data object, that contains the properties of the view\r\n     * @returns {string}\r\n     */\r\n    protected getControlDataID() {\r\n        return this.id + '_data';\r\n    }\r\n\r\n    protected generateID(property ?: string, id ?: string): string {\r\n        if (property) {\r\n            return property;\r\n        }\r\n        if (id) {\r\n            // will generate a data Object suitable for the Control..\r\n            // must be overridden, if the changeEvent shouldn't listen on value...\r\n//            return id + '.' + this.getStandardProperty();//+ \"_data\"\r\n            return id + '.' + '_data';\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected updateViewData() {\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n        const keys: string[] = this.$viewData.getKeys();\r\n        for (let i = 0; i < keys.length; i++) {\r\n            let attr = keys[i];\r\n            if (this.$view[attr] === null) {\r\n                continue;\r\n            }\r\n            this.$viewData.setValue(attr, this.$view[attr]);\r\n        }\r\n    }\r\n\r\n    protected registerEventListener(eventType: string, htmlElement: HTMLElement): boolean {\r\n        if (!htmlElement) {\r\n            return false;\r\n        }\r\n        if (htmlElement instanceof HTMLElement === false) {\r\n            return false;\r\n        }\r\n        let control = this;\r\n        let listener = (t: any) => {\r\n            t.eventType = eventType;\r\n            t.id = control.id;\r\n            control.$owner.fireEvent(t);\r\n        };\r\n        htmlElement.addEventListener(eventType, listener);\r\n        return true;\r\n    }\r\n\r\n    get lastProperty(): string {\r\n        if (!this.property) {\r\n            return '';\r\n        }\r\n        let arr: string[] = this.property.split('.');\r\n        return arr[arr.length - 1];\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\n\r\nexport default class Data {\r\n    public prop = {};\r\n    id: string;\r\n    // $listener: Control[] = [];\r\n    $listener: Object = {};\r\n\r\n    private static nullCheck(property: string): string {\r\n        if (property === undefined || property === null) {\r\n            property = '';\r\n        }\r\n        return property;\r\n    }\r\n    public getKeys(): string[] {\r\n        return Object.keys(this.prop);\r\n    }\r\n\r\n    public addProperties(values: Object) {\r\n        if (!values) {\r\n            return;\r\n        }\r\n        if (values['prop']) {\r\n            let prop = values['prop'];\r\n            for (let property in prop) {\r\n                if (prop.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (prop[property] !== null && '' !== prop[property]) {\r\n                    this.setValue(property, prop[property]);\r\n                }\r\n            }\r\n        } else {\r\n            let upd = values['upd'] || {};\r\n            let rem = values['rem'] || {};\r\n\r\n            for (let property in upd) {\r\n                if (upd.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (rem.hasOwnProperty(property) === false) {\r\n                    this.setValue(property, upd[property]);\r\n                } else {\r\n                    // if we have a rem, we wan't to check, if its a valid change (teh old value is the value in rem)\r\n                    if (this.getValue(property) === rem[property]) {\r\n                        this.setValue(property, upd[property]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getValue(attribute: string) {\r\n        return this.prop[attribute];\r\n    }\r\n\r\n    public setValue(attribute: string, newValue: any): void {\r\n        let oldValue = this.prop[attribute];\r\n        if (oldValue === newValue && newValue !== null) {\r\n            return;\r\n        }\r\n        this.prop[attribute] = newValue;\r\n        this.firePropertyChange(attribute, oldValue, newValue);\r\n    }\r\n\r\n    public addTo(attribute: string, newValue: any): boolean {\r\n        let add: boolean;\r\n        if (this.prop[attribute]) {\r\n            if (this.prop[attribute].contains(newValue) === false) {\r\n                add = true;\r\n            }\r\n        } else {\r\n            this.prop[attribute] = [];\r\n            add = true;\r\n        }\r\n        if (add) {\r\n            this.prop[attribute].push(newValue);\r\n            this.firePropertyChange(attribute, null, newValue);\r\n        }\r\n        return add;\r\n    }\r\n\r\n    public removeFrom(attribute: string, newValue: any): boolean {\r\n        if (!this.prop[attribute]) {\r\n            return true;\r\n        }\r\n        let pos: number = this.prop[attribute].indexOf(newValue);\r\n        if (pos < 0) {\r\n            return true;\r\n        }\r\n        this.prop[attribute].splice(pos, 1);\r\n        this.firePropertyChange(attribute, newValue, null);\r\n        return true;\r\n    }\r\n\r\n    public addListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(property);\r\n        if (!listeners) {\r\n            listeners = [];\r\n            this.$listener[Data.nullCheck(property)] = listeners;\r\n        }\r\n        listeners.push(control);\r\n    }\r\n\r\n    public removeListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners = this.getListeners(property);\r\n        if (listeners === null) {\r\n            return;\r\n        }\r\n        let pos = listeners.indexOf(control);\r\n        if (pos >= 0) {\r\n            listeners.splice(pos, 1);\r\n        }\r\n        if (listeners.length === 0 && Data.nullCheck(property) !== '') {\r\n            // only remove, if it's not the default listener list...\r\n            delete this.$listener[property];\r\n        }\r\n    }\r\n\r\n    public hasProperty(property: string): boolean {\r\n        return this.prop.hasOwnProperty(property);\r\n    }\r\n\r\n    public addFrom(attribute: string, oldData: Data): void {\r\n        if (oldData) {\r\n            this.setValue(attribute, oldData.getValue(attribute));\r\n        } else {\r\n            this.setValue(attribute, null);\r\n        }\r\n    }\r\n\r\n    public removeKey(key: string): any {\r\n        if (this.hasProperty(key)) {\r\n            const oldValue = this.prop[key];\r\n            delete this.prop[key];\r\n            return oldValue;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected getListeners(property: string): PropertyChangeSupport[] {\r\n        property = Data.nullCheck(property);\r\n        return this.$listener[property];\r\n    }\r\n\r\n    protected firePropertyChange(attribute: string, oldValue: Object, newValue: Object) {\r\n        attribute = Data.nullCheck(attribute);\r\n        // at first fire for the given property\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(attribute);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n        // now we need to fire the Listeners that wan't to listen to everything\r\n        listeners = this.getListeners(null);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport interface EventHandler {\r\n    canHandle(): boolean;\r\n    handle(event: Event, element: DiagramElement): boolean;\r\n    setActive(active: boolean): void;\r\n}\r\n\r\nexport class EventBus {\r\n    public static CREATE: string = 'Create';\r\n    public static EDITOR: string = 'Editor';\r\n    public static OPENPROPERTIES: string = 'openProperties';\r\n    public static RELOADPROPERTIES: string = 'reloadProperties';\r\n    public static ELEMENTMOUSEDOWN: string = 'ELEMENT:MOUSEDOWN';\r\n    public static ELEMENTMOUSEUP: string = 'ELEMENT:MOUSEUP';\r\n    public static ELEMENTMOUSELEAVE: string = 'ELEMENT:MOUSELEAVE';\r\n    public static ELEMENTMOUSEMOVE: string = 'ELEMENT:MOUSEMOVE';\r\n    public static ELEMENTMOUSEWHEEL: string = 'ELEMENT:MOUSEWHEEL';\r\n    public static ELEMENTCLICK: string = 'ELEMENT:CLICK';\r\n    public static ELEMENTDBLCLICK: string = 'ELEMENT:DBLCLICK';\r\n    public static ELEMENTDRAG: string = 'ELEMENT:DRAG';\r\n    public static ELEMENTDRAGOVER: string = 'ELEMENT:DRAGOVER';\r\n    public static ELEMENTDROP: string = 'ELEMENT:DROP';\r\n    public static ELEMENTDRAGLEAVE: string = 'ELEMENT:DRAGLEAVE';\r\n\r\n    public static EVENTS: string[] = [\r\n        EventBus.CREATE,\r\n        EventBus.EDITOR,\r\n        EventBus.OPENPROPERTIES,\r\n        EventBus.RELOADPROPERTIES,\r\n        EventBus.ELEMENTMOUSEDOWN,\r\n        EventBus.ELEMENTMOUSEUP,\r\n        EventBus.ELEMENTMOUSELEAVE,\r\n        EventBus.ELEMENTMOUSEMOVE,\r\n        EventBus.ELEMENTMOUSEWHEEL,\r\n        EventBus.ELEMENTCLICK,\r\n        EventBus.ELEMENTDRAG,\r\n        EventBus.ELEMENTDBLCLICK,\r\n        EventBus.ELEMENTDRAGOVER,\r\n        EventBus.ELEMENTDROP,\r\n        EventBus.ELEMENTDRAGLEAVE,\r\n    ];\r\n\r\n    private static handlers = {};\r\n\r\n    private static $activeHandler: string = '';\r\n\r\n    public static setActiveHandler(handler: string): void {\r\n        this.$activeHandler = handler;\r\n    }\r\n\r\n    public static isHandlerActiveOrFree(handler: string, notEmpty?: boolean): boolean {\r\n        if (notEmpty) {\r\n            return this.$activeHandler === handler;\r\n        }\r\n        return this.$activeHandler === handler || this.$activeHandler === '' || this.$activeHandler === undefined;\r\n    }\r\n\r\n    public static isAnyHandlerActive(): boolean {\r\n        return !(this.$activeHandler === '' || this.$activeHandler === undefined);\r\n    }\r\n\r\n    public static releaseActiveHandler(): void {\r\n        this.$activeHandler = '';\r\n    }\r\n\r\n    public static getActiveHandler(): string {\r\n        return this.$activeHandler;\r\n    }\r\n\r\n    static register(control: Control, view: Element) {\r\n        let events: string[];\r\n        if (typeof control['getEvents'] === 'function') {\r\n            events = control['getEvents']();\r\n        }\r\n\r\n        if (!events || !view) {\r\n            return;\r\n        }\r\n        for (let event of events) {\r\n            this.registerEvent(view, event, control);\r\n        }\r\n    }\r\n\r\n    static registerEvent(view: Element, event: string, control?: any) {\r\n        const pos: number = event.indexOf(':');\r\n        if (pos > 0) {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        } else {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        }\r\n    }\r\n\r\n    public static publish(element: DiagramElement, evt: Event) {\r\n        let handlers = EventBus.handlers[evt.type];\r\n        if (handlers) {\r\n            for (let handler of handlers) {\r\n                handler.handle(evt, element);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static subscribe(handler: EventHandler, ...eventTypes: string[]) {\r\n        for (let event of eventTypes) {\r\n            let handlers = EventBus.handlers[event];\r\n            if (handlers === null || handlers === undefined) {\r\n                handlers = [];\r\n                EventBus.handlers[event] = handlers;\r\n            }\r\n            handlers.push(handler);\r\n        }\r\n    }\r\n}\r\n","import SimpleEvent from './Event';\r\n\r\nexport default class EventListener {\r\n    private $onUpdate: Function;\r\n\r\n    get onUpdate(): Function {\r\n        return this.$onUpdate;\r\n    }\r\n\r\n    set onUpdate(value: Function) {\r\n        this.$onUpdate = value;\r\n    }\r\n\r\n    update(event: SimpleEvent) {\r\n        this.$onUpdate(event);\r\n    }\r\n}\r\n","// ################################## jsEPS ####################################################\r\nimport {SVGConverter} from './SVGConverter';\r\n\r\nexport class JSEPS {\r\n    private max: number;\r\n    private min: number;\r\n    private inverting: boolean;\r\n    private output: string[];\r\n    private font: number;\r\n\r\n    constructor(options: any) {\r\n        this.max = 0;\r\n        this.min = 999;\r\n        let hasInverting = typeof (options.inverting);\r\n        this.inverting = (options && hasInverting !== 'undefined' ? options.inverting : true);\r\n        this.output = ['%!PS-Adobe-3.0 EPSF-3.0', '1 setlinewidth'];\r\n        this.out('/FSD {findfont exch scalefont def} bind def % In the document prolog: define');\r\n        this.out('/SMS {setfont moveto show} bind def % some useful procedures');\r\n        this.out('/MS {moveto show} bind def');\r\n        this.out('/F1  10  /Helvetica  FSD % At the start of the script: set up');\r\n        this.font = 1;\r\n    }\r\n\r\n    public out(value: string) {this.output.push(value); }\r\n    public rect(x: number, y: number, width: number, height: number, style: string) {\r\n        y = y + (this.inverting ? height : 0);\r\n        if (style && style.indexOf('fill:url(#classelement);') >= 0) {\r\n            this.out('gsave 0.93 0.93 0.93 setrgbcolor newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectfill grestore');\r\n        } else {\r\n            this.out('newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectstroke');\r\n        }\r\n    }\r\n    public setFillColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public y(value: number) {this.max = Math.max(this.max, value); this.min = Math.min(this.min, value); return this.inverting ? '%y(' + value + ')' : value; }\r\n    public getType(): string {\r\n        return 'application/postscript';\r\n    }\r\n\r\n    public getData(): string {\r\n        let t, end, url, text, typ = 'application/postscript', a = document.createElement('a'), data = '', pos, i;\r\n        for (i = 0; i < this.output.length; i += 1) {\r\n            text = this.output[i];\r\n            if (this.inverting) {\r\n                while ((pos = text.indexOf('%y')) >= 0) {\r\n                    end = text.indexOf(')', pos);\r\n                    t = this.max - parseInt(text.substring(pos + 3, end), 10);\r\n                    text = text.substring(0, pos) + t + text.substring(end + 1);\r\n                }\r\n            }\r\n            data = data + text + '\\r\\n';\r\n        }\r\n        return data;\r\n    }\r\n\r\n    public setDrawColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public ellipse(cx: number, cy: number, rx: number, ry: number, colorMode: string) {/*FIXME*/}\r\n    public circle(cx: number, cy: number, r: number, colorMode: string) {/*FIXME*/}\r\n    public setTextColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public text(x: number, y: number, text: string) {this.out('(' + text.replace('&lt;', '<').replace('&gt;', '>') + ') ' + x + ' ' + this.y(y) + ' F1 SMS'); }\r\n    public lineto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' lineto'); this.out('stroke'); }\r\n    public moveto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' moveto'); }\r\n    public line(x1: number, y1: number, x2: number, y2: number) {this.out('newpath ' + x1 + ' ' + this.y(y1) + ' moveto ' + x2 + ' ' + this.y(y2) + ' lineto stroke'); }\r\n    public setLineWidth(value: string) {this.out(value + ' setlinewidth'); }\r\n    public setFont(value: string) {this.out('/F' + (this.font += 1) + ' 10 /' + value + ' FSD'); }\r\n}\r\n","import { Graph } from './elements/Graph';\r\n\r\n/*const buttons = {\r\n    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    clazz: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n};\r\n*/\r\nexport default class Palette {\r\n\r\n    private graph: Graph;\r\n    private palette: Element;\r\n    private root: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n        let div = document.createElement('div');\r\n        div.className = 'palette';\r\n        div.id = 'palette';\r\n        this.root = div;\r\n        this.palette = div;\r\n        for (let key in graph.nodeFactory) {\r\n            let element = graph.nodeFactory[key];\r\n            let control = new element();\r\n            let icon = control.getToolBarIcon();\r\n            if (icon) {\r\n                let button = <HTMLButtonElement>document.createElement('button');\r\n                button.className = 'add' + key + 'Btn';\r\n                button.innerHTML = icon.outerHTML;\r\n                button.onclick = e => {\r\n                    let nextFreePosition = this.graph.getNextFreePosition();\r\n                    // let node = this.graph.addElementWithValues(graph.nodeFactory[key], {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    let node = this.graph.addElementWithValues(key, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    this.graph.drawElement(node);\r\n                };\r\n                this.palette.appendChild(button);\r\n            }\r\n        }\r\n        // this.graph.nodeFactory\r\n//        this.addButtons();\r\n    }\r\n\r\n    public show() {\r\n        document.body.appendChild(this.root);\r\n    }\r\n\r\n    private addButtons() {\r\n        /*for (let btn in buttons) {\r\n            let button = <HTMLButtonElement>document.createElement('button');\r\n            button.className = 'add' + btn + 'Btn';\r\n            button.innerHTML = buttons[btn];\r\n            button.onclick = e => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let node = this.graph.addElementWithValues(btn, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                this.graph.drawElement(node);\r\n            };\r\n            this.palette.appendChild(button);\r\n        }*/\r\n    }\r\n}\r\n","import {Graph} from './elements/Graph';\r\nimport * as edges from './elements/edges';\r\nimport {EventBus, EventHandler} from './EventBus';\r\nimport {DiagramElement} from './elements/BaseElements';\r\nimport {Util} from './util';\r\n\r\nexport class PanelGroup implements EventHandler {\r\n    private graph: Graph;\r\n    private selectedElement: DiagramElement;\r\n    private clearPanel: Panel;\r\n    private generatePanel: Panel;\r\n    private propertiesMasterPanel: HTMLDivElement;\r\n    private propertiesContent: HTMLDivElement;\r\n    private propHeaderLabel: HTMLDivElement;\r\n    private propHeaderButton: HTMLButtonElement;\r\n    private selectedPanel: Panel;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.clearPanel = new ClearPanel(this);\r\n        this.generatePanel = new GeneratePanel(this);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        this.handleOpenProperties(event, element);\r\n\r\n        if (event.type === EventBus.RELOADPROPERTIES\r\n            && this.selectedElement && element.id === this.selectedElement.id) {\r\n            this.handleEvent(event, element);\r\n        }\r\n\r\n        // the same element was clicked. do nothing\r\n        if (this.selectedElement && this.selectedElement.id === element.id) {\r\n            return true;\r\n        }\r\n        if (element.id === 'RootElement') {\r\n            this.setActivePanel(this.clearPanel);\r\n        }\r\n        if (element.id === 'GenerateProp') {\r\n            this.setActivePanel(this.generatePanel);\r\n        }\r\n        this.selectedElement = element;\r\n\r\n        return true;\r\n    }\r\n\r\n    public getGraph(): Graph {\r\n        return this.graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(PanelGroup.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(PanelGroup.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n     public handleEvent(event: any, element: any) {\r\n        // DO NOTHING\r\n    }\r\n\r\n    public show() {\r\n        // main div to display any properties, class, edge, etc.\r\n        this.propertiesMasterPanel = document.createElement('div');\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n\r\n        this.propertiesContent = document.createElement('div');\r\n        this.propertiesContent.className = 'properties-hidden';\r\n\r\n        this.propHeaderLabel = document.createElement('div');\r\n        this.propHeaderLabel.style.display = 'inherit';\r\n        this.propHeaderLabel.style.cursor = 'pointer';\r\n        this.propHeaderLabel.onclick = e => this.toogleProperties(e);\r\n\r\n        // button to display and hide the properties of e.g. a class\r\n        this.propHeaderButton = document.createElement('button');\r\n        this.propHeaderButton.className = 'btnHideProp';\r\n        this.propHeaderButton.style.cssFloat = 'right';\r\n        this.propHeaderButton.onclick = e => this.toogleProperties(e);\r\n\r\n        let propertiesHeader = document.createElement('div');\r\n        propertiesHeader.style.display = 'inline';\r\n        propertiesHeader.appendChild(this.propHeaderLabel);\r\n        propertiesHeader.appendChild(this.propHeaderButton);\r\n\r\n        this.propertiesMasterPanel.appendChild(propertiesHeader);\r\n        this.propertiesMasterPanel.appendChild(this.propertiesContent);\r\n        document.body.appendChild(this.propertiesMasterPanel);\r\n\r\n        this.setActivePanel(this.clearPanel);\r\n    }\r\n\r\n    public setActivePanel(panel: Panel) {\r\n        this.selectedPanel = panel;\r\n        this.propHeaderLabel.innerHTML = panel.getHeaderText();\r\n        if (this.propertiesContent) {\r\n            while (this.propertiesContent.hasChildNodes()) {\r\n                this.propertiesContent.removeChild(this.propertiesContent.childNodes[0]);\r\n            }\r\n        }\r\n        panel.show();\r\n\r\n        panel.showFirstTab();\r\n        if (panel !== this.clearPanel) {\r\n            this.showProperties(null);\r\n        } else {\r\n            this.hideProperties(null);\r\n        }\r\n    }\r\n\r\n    public getProperiesContent(): HTMLDivElement {\r\n        return this.propertiesContent;\r\n    }\r\n\r\n    private handleOpenProperties(event: Event, element: DiagramElement) {\r\n        if (event.type === 'dblclick') {\r\n            this.showProperties(event);\r\n        }\r\n    }\r\n\r\n    private showProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Show\r\n        this.propHeaderButton.innerHTML = '&#8897;';\r\n        this.propHeaderButton.title = 'Hide properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel';\r\n        this.propertiesContent.className = 'properties';\r\n    }\r\n\r\n    private toogleProperties(evt: Event): void {\r\n        if (this.propHeaderButton.title === 'Show properties') {\r\n            this.showProperties(evt);\r\n        } else {\r\n            this.hideProperties(evt);\r\n        }\r\n    }\r\n\r\n    private hideProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Hide\r\n        this.propHeaderButton.innerHTML = '&#8896;';\r\n        this.propHeaderButton.title = 'Show properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n        this.propertiesContent.className = 'properties-hidden';\r\n    }\r\n}\r\n\r\nexport abstract class Panel {\r\n    protected divPropertiesPanel: HTMLDivElement;\r\n    protected divPropertiesTabbedPanel: HTMLDivElement;\r\n    protected element: any;\r\n    protected group: PanelGroup;\r\n    private panelItem: PanelItem[] = [];\r\n\r\n    constructor(group: PanelGroup, element: any) {\r\n        // get the properties content panel\r\n        this.divPropertiesPanel = document.createElement('div');\r\n        this.element = element;\r\n        this.group = group;\r\n\r\n        this.divPropertiesTabbedPanel = document.createElement('div');\r\n        this.divPropertiesTabbedPanel.className = 'tabbedpane';\r\n\r\n        // add tabbed panel\r\n        this.divPropertiesPanel.appendChild(this.divPropertiesTabbedPanel);\r\n    }\r\n\r\n    public show(): void {\r\n        let propertiesContent: HTMLDivElement = this.group.getProperiesContent();\r\n        if (this.panelItem.length > 1) {\r\n            propertiesContent.appendChild(this.getPropertiesTabbedPanel());\r\n        }\r\n\r\n        propertiesContent.appendChild(this.getPropertiesPanel());\r\n    }\r\n\r\n    public getPropertiesTabbedPanel(): HTMLDivElement {\r\n        return this.divPropertiesTabbedPanel;\r\n    }\r\n\r\n    public getPropertiesPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return '';\r\n    }\r\n\r\n    public showFirstTab(): void {\r\n        if (this.panelItem.length > 0) {\r\n            this.openTab(this.panelItem[0]);\r\n        }\r\n    }\r\n\r\n    protected createTabElement(tabText: string, tabValue: string, item: PanelItem): PanelItem {\r\n        let tabElementBtn = document.createElement('button');\r\n        tabElementBtn.className = 'tablinks';\r\n        tabElementBtn.innerText = tabText;\r\n        tabElementBtn.value = tabValue;\r\n\r\n        if (item === null) {\r\n            item = new PanelItem(this);\r\n        }\r\n        item.withButton(tabElementBtn);\r\n\r\n        tabElementBtn.onclick = () => this.openTab(item);\r\n        this.divPropertiesTabbedPanel.appendChild(tabElementBtn);\r\n        this.panelItem.push(item);\r\n        return item;\r\n    }\r\n\r\n    protected openTab(panelItem: PanelItem): void {\r\n        for (let key in this.panelItem) {\r\n            let child = this.panelItem[key];\r\n            if (child !== panelItem) {\r\n                 child.deactive();\r\n            }\r\n        }\r\n        panelItem.active();\r\n        // hide other tabcontent\r\n        if (this.divPropertiesPanel) {\r\n            while (this.divPropertiesPanel.hasChildNodes()) {\r\n                this.divPropertiesPanel.removeChild(this.divPropertiesPanel.childNodes[0]);\r\n            }\r\n        }\r\n\r\n        // ADD\r\n        if (panelItem.getContent()) {\r\n            this.divPropertiesPanel.appendChild(panelItem.getContent());\r\n        }\r\n    }\r\n}\r\n\r\nexport class GeneratePanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n\r\n        let item: PanelItem = this.createTabElement('General', 'General', null);\r\n\r\n        // Workspace and generate code stuff\r\n        let inputGenerateWorkspace: HTMLInputElement =  <HTMLInputElement> Util.createHTML({tag: 'input', id: 'workspace', type: 'text', placeholder: 'Type your Folder for generated code...', value: 'src/main/java', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Folder:', inputGenerateWorkspace);\r\n\r\n        let inputGeneratePackage: HTMLInputElement = <HTMLInputElement> Util.createHTML({tag: 'input', id: 'package', type: 'text', placeholder: 'Type your workspace for generated code...', value: '', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Package:', inputGeneratePackage);\r\n\r\n        let options = document.createElement('div');\r\n        options.style.textAlign = 'center';\r\n        options.style.margin = '3';\r\n        options.style.padding = '5';\r\n\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(options);\r\n\r\n        options.style.borderStyle = 'groove';\r\n        options.style.borderRadius = '10px';\r\n\r\n        let btnGenerate = document.createElement('button');\r\n        btnGenerate.textContent = 'Generate';\r\n        btnGenerate.title = 'Generate code into your workspace';\r\n        btnGenerate.className = 'OptionElement';\r\n\r\n        let that = this;\r\n        btnGenerate.onclick = () => {\r\n            let workspace = inputGeneratePackage.value;\r\n            if (workspace.length === 0) {\r\n                alert('No workspace set.\\nEnter first your workspace');\r\n                inputGeneratePackage.focus();\r\n                return;\r\n            }\r\n            that.group.getGraph().generate(workspace, inputGenerateWorkspace.value);\r\n        };\r\n        options.appendChild(btnGenerate);\r\n        options.appendChild(document.createElement('hr'));\r\n        options.appendChild(document.createElement('br'));\r\n\r\n        let btnAutoLayout = Util.createHTML({tag: 'button', className: 'OptionElement', value: 'Auto Layout', style: {marginRight: '10px'}, onclick: () => {\r\n                that.group.getGraph().layout();\r\n            }});\r\n\r\n        options.appendChild(btnAutoLayout);\r\n\r\n        // delete all nodes\r\n        let btnDeleteAll = document.createElement('button');\r\n        btnDeleteAll.className = 'OptionElement';\r\n        btnDeleteAll.textContent = 'Delete All';\r\n        btnDeleteAll.title = 'Delete all nodes from diagram';\r\n\r\n        btnDeleteAll.onclick = () => {\r\n            let confirmDelete = confirm('All classes will be deleted!');\r\n            if (!confirmDelete) {\r\n                return;\r\n            }\r\n            that.group.getGraph().$graphModel.removeAllElements();\r\n        };\r\n        btnDeleteAll.style.marginRight = '10px';\r\n        options.appendChild(btnDeleteAll);\r\n\r\n        // export stuff\r\n        let exportTypes: string[] = ['Export', 'HTML', 'JSON', 'PDF', 'PNG', 'SVG'];\r\n        let selectExport = document.createElement('select');\r\n\r\n        exportTypes.forEach(type => {\r\n            if (!(!window['jsPDF'] && type === 'PDF')) {\r\n                let option = document.createElement('option');\r\n                option.value = type;\r\n                option.textContent = type;\r\n                selectExport.appendChild(option);\r\n            }\r\n        });\r\n\r\n        selectExport.onchange = (evt) => {\r\n            let selectedExportType = selectExport.options[selectExport.selectedIndex].value;\r\n            selectExport.selectedIndex = 0;\r\n            that.group.getGraph().saveAs(selectedExportType);\r\n        };\r\n        selectExport.className = 'OptionElement';\r\n        options.appendChild(selectExport);\r\n        options.appendChild(document.createElement('br'));\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Properties';\r\n    }\r\n\r\n}\r\n\r\nexport class ClearPanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Select any element to see its properties';\r\n    }\r\n}\r\n\r\nexport class PanelItem {\r\n    protected panel: Panel;\r\n    protected label: string;\r\n    protected button: HTMLButtonElement;\r\n    protected content: HTMLDivElement = <HTMLDivElement>Util.create({tag: 'div', className: 'tabContent'});\r\n\r\n    constructor(panel: Panel, label?: string) {\r\n        this.panel = panel;\r\n        this.label = label;\r\n    }\r\n\r\n    public active(): void {\r\n        if (this.getButton()) {\r\n            this.getButton().className += ' active';\r\n        }\r\n    }\r\n\r\n    public deactive(): void {\r\n        if (this.getButton()) {\r\n            Util.removeClass(this.getButton(), 'active');\r\n        }\r\n    }\r\n\r\n    public withButton(button: HTMLButtonElement): PanelItem {\r\n        this.button = button;\r\n        return this;\r\n    }\r\n\r\n    public withContent(element: HTMLElement): PanelItem {\r\n        this.content.appendChild(element);\r\n        return this;\r\n    }\r\n\r\n    public withInput(labelText: string, element: HTMLElement): PanelItem {\r\n        let group: HTMLDivElement = <HTMLDivElement> Util.createHTML({tag: 'div'});\r\n        let label = Util.createHTML({tag: 'label', for: element.id, value: labelText});\r\n        group.appendChild(label);\r\n        group.appendChild(element);\r\n\r\n        this.content.appendChild(group);\r\n        return this;\r\n    }\r\n\r\n    public getButton(): HTMLButtonElement {\r\n        return this.button;\r\n    }\r\n\r\n    public getContent(): HTMLDivElement {\r\n        return this.content;\r\n    }\r\n\r\n   public getHeader(): string {\r\n        return this.label;\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\nimport Data from './Data';\r\n\r\nexport class PropertyBinder implements PropertyChangeSupport {\r\n    private propertyClass1: string;\r\n    private propertyClass2: string;\r\n    private data1: Data;\r\n    private data2: Data;\r\n    // works like a lock\r\n    private applyingChange: boolean = false;\r\n\r\n    constructor(data1: Data, data2: Data, propertyClass1: string, propertyClass2: string) {\r\n        this.data1 = data1;\r\n        this.data2 = data2;\r\n        this.propertyClass1 = propertyClass1;\r\n        this.propertyClass2 = propertyClass2;\r\n    }\r\n    static bind(data1: Data, data2: Data, property1: string, property2: string) {\r\n        if (!data1 || !data2 || !property1) {\r\n            console.error('NullValue!!');\r\n            return null;\r\n        }\r\n        const propertyBinder = new PropertyBinder(data1, data2, property1, property2);\r\n        propertyBinder.bind();\r\n        return propertyBinder;\r\n    }\r\n\r\n    propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        if (!this.applyingChange) {\r\n            this.applyingChange = true;\r\n            if (entity === this.data1) {\r\n                // fire to data2\r\n                this.data2.setValue(this.propertyClass2, newValue);\r\n            } else if (entity === this.data2) {\r\n                // fire to data1\r\n                this.data1.setValue(this.propertyClass1, newValue);\r\n            }\r\n            this.applyingChange = false;\r\n        }\r\n    }\r\n\r\n    protected bind() {\r\n        // public addListener(control: Control, property?: string)\r\n        // todo: set value immediately\r\n        this.data1.setValue(this.propertyClass1, this.data2.getValue(this.propertyClass2));\r\n\r\n        this.data1.addListener(this, this.propertyClass1);\r\n        this.data2.addListener(this, this.propertyClass2);\r\n    }\r\n\r\n    protected unbind() {\r\n        // public addListener(control: Control, property?: string)\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n    }\r\n}\r\n","// ################################## RGBColor ####################################################\r\nexport class RGBColor {\r\n    public  ok: boolean;\r\n    public r: number;\r\n    public g: number;\r\n    public b: number;\r\n\r\n    constructor(value: string) {\r\n        this.ok = false;\r\n        if (value === 'none') {\r\n            return;\r\n        }\r\n        let computedColor, div = document.createElement('div');\r\n        div.style.backgroundColor = value;\r\n        document.body.appendChild(div);\r\n        computedColor = window.getComputedStyle(div).backgroundColor;\r\n        // cleanup temporary div.\r\n        document.body.removeChild(div);\r\n        this.convert(computedColor);\r\n    }\r\n    public convert(value: any) {\r\n        let values, regex = /rgb *\\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\\)/;\r\n        values = regex.exec(value);\r\n        this.r = parseInt(values[1], 10);\r\n        this.g = parseInt(values[2], 10);\r\n        this.b = parseInt(values[3], 10);\r\n        this.ok = true;\r\n    }\r\n\r\n    public toRGB(): string {return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; }\r\n    public toHex(): string {\r\n        return '#' + (this.r + 0x10000).toString(16).substring(3).toUpperCase() + (this.g + 0x10000).toString(16).substring(3).toUpperCase() + (this.b + 0x10000).toString(16).substring(3).toUpperCase();\r\n    }\r\n}\r\n","/*\r\n NetworkParser\r\n Copyright (c) 2011 - 2014, Stefan Lindel\r\n All rights reserved.\r\n\r\n Licensed under the EUPL, Version 1.1 or (as soon they\r\n will be approved by the European Commission) subsequent\r\n versions of the EUPL (the \"Licence\");\r\n You may not use this work except in compliance with the Licence.\r\n You may obtain a copy of the Licence at:\r\n\r\n http://ec.europa.eu/idabc/eupl5\r\n\r\n Unless required by applicable law or agreed to in\r\n writing, software distributed under the Licence is\r\n distributed on an \"AS IS\" basis,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\r\n express or implied.\r\n See the Licence for the specific language governing\r\n permissions and limitations under the Licence.\r\n*/\r\nimport {RGBColor} from './RGBColor';\r\nimport {JSEPS} from \"./JSEPS\";\r\n\r\nconst epsSvgAttr = {\r\n    // allowed attributes. all others are removed from the preview.\r\n    g: ['stroke', 'fill', 'stroke-width'],\r\n    line: ['x1', 'y1', 'x2', 'y2', 'stroke', 'stroke-width'],\r\n    rect: ['x', 'y', 'width', 'height', 'stroke', 'fill', 'stroke-width'],\r\n    ellipse: ['cx', 'cy', 'rx', 'ry', 'stroke', 'fill', 'stroke-width'],\r\n    circle: ['cx', 'cy', 'r', 'stroke', 'fill', 'stroke-width'],\r\n    text: ['x', 'y', 'font-size', 'font-family', 'text-anchor', 'font-weight', 'font-style', 'fill'],\r\n    path: ['']\r\n};\r\nexport class SVGConverter {\r\n    private k: number;\r\n    private remove: boolean;\r\n    private target: any;\r\n\r\n    constructor(element: any, target: any, options: any) {\r\n        this.k = 1.0;\r\n        let hasScale = typeof (options.scale), hasRemoveInvalid = typeof (options.removeInvalid);\r\n        this.k = (options && hasScale !== 'undefined' ? options.scale : 1.0);\r\n        this.remove = (options && hasRemoveInvalid !== 'undefined' ? options.removeInvalid : false);\r\n        this.target = target;\r\n        this.parse(element);\r\n    }\r\n\r\n    public parse(element: any) {\r\n        let el, i, n, colorMode, hasFillColor, fillRGB, fillColor, strokeColor, strokeRGB, fontType, pdfFontSize, x, y,\r\n            box, xOffset;\r\n        if (!element) {\r\n            return;\r\n        }\r\n        if (typeof element === 'string') {\r\n            el = document.createElement('div');\r\n            el.innerHTML = element;\r\n            element = el.childNodes[0];\r\n        }\r\n        for (i = 0; i < element.children.length; i += 1) {\r\n            n = element.children[i];\r\n            colorMode = null;\r\n            hasFillColor = false;\r\n            if ('g,line,rect,ellipse,circle,text'.indexOf(n.tagName) >= 0) {\r\n                fillColor = n.getAttribute('fill');\r\n                if (fillColor) {\r\n                    fillRGB = new RGBColor(fillColor);\r\n                    if (fillRGB.ok) {\r\n                        hasFillColor = true;\r\n                        colorMode = 'F';\r\n                    }\r\n                }\r\n            }\r\n            if ('g,line,rect,ellipse,circle'.indexOf(n.tagName) >= 0) {\r\n                if (hasFillColor) {\r\n                    this.target.setFillColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                }\r\n                strokeColor = n.getAttribute('stroke');\r\n                if (n.hasAttribute('stroke-width')) {\r\n                    this.target.setLineWidth(this.attr(n, 'stroke-width'));\r\n                }\r\n                if (strokeColor) {\r\n                    strokeRGB = new RGBColor(strokeColor);\r\n                    if (strokeRGB.ok) {\r\n                        this.target.setDrawColor(strokeRGB.r, strokeRGB.g, strokeRGB.b);\r\n                        if (colorMode === 'F') {\r\n                            colorMode = 'FD';\r\n                        } else if (!hasFillColor) {\r\n                            colorMode = 'S';\r\n                        }\r\n                    } else {\r\n                        colorMode = null;\r\n                    }\r\n                }\r\n            }\r\n            // console.log(\"write \"+n.tagName);\r\n            switch (n.tagName.toLowerCase()) {\r\n                case 'svg':\r\n                case 'a':\r\n                case 'g':\r\n                    this.parse(n);\r\n                    break;\r\n                case 'line':\r\n                    this.target.line(this.attr(n, 'x1'), this.attr(n, 'y1'), this.attr(n, 'x2'), this.attr(n, 'y2'));\r\n                    break;\r\n                case 'rect':\r\n                    this.target.rect(this.attr(n, 'x'), this.attr(n, 'y'), this.attr(n, 'width'), this.attr(n, 'height'), n.getAttribute('style'));\r\n                    break;\r\n                case 'ellipse':\r\n                    this.target.ellipse(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'rx'), this.attr(n, 'ry'), colorMode);\r\n                    break;\r\n                case 'circle':\r\n                    this.target.circle(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'r'), colorMode);\r\n                    break;\r\n                case 'text':\r\n                    if (n.hasAttribute('font-family')) {\r\n                        switch (n.getAttribute('font-family').toLowerCase()) {\r\n                            case 'serif':\r\n                                this.target.setFont('times');\r\n                                break;\r\n                            case 'monospace':\r\n                                this.target.setFont('courier');\r\n                                break;\r\n                            default:\r\n                                n.getAttribute('font-family', 'sans-serif');\r\n                                this.target.setFont('Helvetica');\r\n                        }\r\n                    }\r\n                    if (hasFillColor) {\r\n                        this.target.setTextColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                    }\r\n                    if (this.target instanceof JSEPS) {\r\n                        this.target.text(this.attr(n, 'x'), this.attr(n, 'y'), n.innerHTML);\r\n                        break;\r\n                    }\r\n                    fontType = '';\r\n                    if (n.hasAttribute('font-weight')) {\r\n                        if (n.getAttribute('font-weight') === 'bold') {\r\n                            fontType = 'bold';\r\n                        }\r\n                    }\r\n                    if (n.hasAttribute('font-style')) {\r\n                        if (n.getAttribute('font-style') === 'italic') {\r\n                            fontType += 'italic';\r\n                        }\r\n                    }\r\n                    this.target.setFontType(fontType);\r\n                    pdfFontSize = 16;\r\n                    if (n.hasAttribute('font-size')) {\r\n                        pdfFontSize = parseInt(n.getAttribute('font-size'), 10);\r\n                    }\r\n                    box = n.getBBox();\r\n                    // FIXME: use more accurate positioning!!\r\n                    x = this.attr(n, 'x');\r\n                    y = this.attr(n, 'y');\r\n                    xOffset = 0;\r\n                    if (n.hasAttribute('text-anchor')) {\r\n                        switch (n.getAttribute('text-anchor')) {\r\n                            case 'end':\r\n                                xOffset = box.width;\r\n                                break;\r\n                            case 'middle':\r\n                                xOffset = box.width / 2;\r\n                                break;\r\n                            case 'start':\r\n                                break;\r\n                            case 'default':\r\n                                n.getAttribute('text-anchor', 'start');\r\n                                break;\r\n                        }\r\n                        x = x - (xOffset * this.k);\r\n                    }\r\n                    this.target.setFontSize(pdfFontSize).text(x, y, n.innerHTML);\r\n                    break;\r\n                default:\r\n                    if (this.remove) {\r\n                        console.log('cant translate to target:', n);\r\n                        element.removeChild(n);\r\n                        i -= 1;\r\n                    }\r\n            }\r\n        }\r\n    }\r\n\r\n    public attr(node: any, name: string) {\r\n        return this.k * parseInt(node.getAttribute(name), 10);\r\n    }\r\n}\r\n","import {Control} from './Control';\r\n\r\nexport class ScrumBoard extends Control {\r\n    public static cards = [0, 0.5, 1, 2, 3, 5, 8, 13, 20, 40, 100, '?', 'Coffee'];\r\n    private $selected: HTMLDivElement;\r\n    private $board: HTMLDivElement;\r\n\r\n    constructor() {\r\n        super();\r\n        this.redraw();\r\n    }\r\n\r\n    public redraw(): void {\r\n        if (this.$board) {\r\n            while (this.$board.children.length > 0 ) {\r\n                this.$board.removeChild(this.$board.children[0]);\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('div');\r\n            this.$selected = document.createElement('div');\r\n            this.$board = document.createElement('div');\r\n            this.$view.appendChild(this.$board);\r\n            this.$view.appendChild(this.$selected);\r\n        }\r\n        this.$view.className = 'ScrumBoard';\r\n        for ( let i = 0; i < ScrumBoard.cards.length; i++) {\r\n            let card = document.createElement('div');\r\n            card.className = 'ScrumCard';\r\n            card.innerHTML = <string>ScrumBoard.cards[i];\r\n            card['pokervalue'] = <string>ScrumBoard.cards[i];\r\n            card.onclick = e => {\r\n                this.onClick(<HTMLDivElement>e.target);\r\n            };\r\n            this.$board.appendChild(card);\r\n        }\r\n    }\r\n\r\n    public getSVG() {\r\n        this.redraw();\r\n        return this.$view;\r\n    }\r\n\r\n    public onClick(target: HTMLDivElement): void {\r\n        console.log(target['pokervalue']);\r\n\r\n        while (this.$selected.children.length > 0 ) {\r\n            this.$selected.removeChild(this.$selected.children[0]);\r\n        }\r\n        let card = document.createElement('div');\r\n        card.className = 'ScrumCard';\r\n        card['pokervalue'] = target['pokervalue'];\r\n        card.onclick = e => {\r\n            this.onShow(<HTMLDivElement>e.target);\r\n        };\r\n        this.$selected.appendChild(card);\r\n        this.$board['style']['display'] = 'none';\r\n    }\r\n\r\n    public onShow(target: HTMLDivElement): void {\r\n        target.innerHTML = target['pokervalue'];\r\n    }\r\n}\r\n","import {Graph} from './main';\r\nimport {SymbolLibary} from './elements/nodes/Symbol';\r\nimport {EventBus} from './EventBus';\r\n\r\nexport class Toolbar {\r\n\r\n    private graph: Graph;\r\n    private mainDiv: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public show(): void {\r\n        if (this.mainDiv) {\r\n            return;\r\n        }\r\n\r\n        this.mainDiv = document.createElement('div');\r\n        this.mainDiv.className = 'toolbar';\r\n\r\n        let h1Logo = document.createElement('h1');\r\n        h1Logo.className = 'logo';\r\n        h1Logo.textContent = 'DiagramJS';\r\n\r\n        let node = {type: 'Hamburger', property: 'HTML', width: 24, height: 24, id: 'GenerateProp'};\r\n        let hamburger = SymbolLibary.draw( node);\r\n        EventBus.registerEvent(hamburger, 'click', node);\r\n        this.mainDiv.appendChild(hamburger);\r\n\r\n        this.mainDiv.appendChild(h1Logo);\r\n        document.body.appendChild(this.mainDiv);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 06.03.2017.\r\n */\r\nimport Data from './Data';\r\n\r\n// export default class Data {\r\n//    public values = {};\r\n//    id: string;\r\n//    $listener: Control[] = [];\r\n//    property: string;\r\nexport namespace UML {\r\n    export class Clazz extends Data {\r\n        public static NAME: string = 'name';\r\n        public static ATTRIBUTES: string = 'attributes';\r\n        public static METHODS: string = 'methods';\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Clazz';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n\r\n        public getAttributes() {\r\n            return this.prop[Clazz.ATTRIBUTES];\r\n        }\r\n\r\n        public addToAttributes(newValue: string) {\r\n            this.addTo(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n\r\n        public removeFromAttributes(newValue: string) {\r\n            this.removeFrom(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n    }\r\n\r\n    export class Attribute extends Data {\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Attribute';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n    }\r\n\r\n    export class Methods extends Data {\r\n\r\n    }\r\n}\r\n\r\nwindow['UML'] = UML;\r\n","import {Control} from './Control';\r\n\r\nexport class VirtualKeyBoard extends Control {\r\n    constructor(data: any) {\r\n        super();\r\n        if (!data) {\r\n            data = this.getDefault();\r\n        }\r\n        let board = document.createElement('div');\r\n        this.$viewData = data;\r\n\r\n        for (let type in data) {\r\n            if (type === 'normal') {\r\n                for (let line in data[type]) {\r\n                    let lineBoard = document.createElement('div');\r\n                    lineBoard.className = 'vkLine';\r\n                    for (let key in data[type][line]) {\r\n                        let btn: HTMLButtonElement = document.createElement('button');\r\n                        let keyTag = data[type][line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                        btn.ontouchend = () => {this.action(btn); };\r\n                        btn.onclick = () => {this.action(btn); };\r\n                        lineBoard.appendChild(btn);\r\n                    }\r\n                    board.appendChild(lineBoard);\r\n                }\r\n            }\r\n        }\r\n        this.$view = board;\r\n    }\r\n\r\n    public action(btn: HTMLButtonElement) {\r\n        if (btn['key'] === '{Shift}') {\r\n            if ( btn.className === 'vkbuttonAction') {\r\n                let keys = this.$viewData['normal'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                    }\r\n                }\r\n            } else if ( btn.className === 'vkbutton') {\r\n                let keys = this.$viewData['shift'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbuttonAction');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        alert(btn);\r\n    }\r\n\r\n    public getDefault(): any {\r\n        let format = {\r\n            normal: [\r\n                ['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '?', '´', '{Bksp}'],\r\n                ['{Tab}', 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+'],\r\n                ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '#', '{enter}'],\r\n                ['{Shift}', '<', 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n// '{left}', '{up}', '{down}','{right}', '{Cancel}']\r\n            ],\r\n            shift: [\r\n                ['°', '!', '\"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '`', '{Bksp}'],\r\n                ['{Tab}', 'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', 'O', 'P', 'Ü', '*'],\r\n                ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', '\\'', '{enter}'],\r\n                ['{Shift}', '>', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n            ]\r\n        };\r\n        return format;\r\n    }\r\n\r\n    public getBoard() {\r\n        return this.$view;\r\n    }\r\n\r\n    private setButtonValue(keyTag: string, btn: HTMLButtonElement, shiftClass: string) {\r\n        btn.className = 'vkbutton';\r\n        btn['key'] = keyTag;\r\n        btn['type'] = 'normal';\r\n        if (keyTag.substring(0, 1) === '{') {\r\n            if (keyTag === '{Bksp}') {\r\n                btn.innerHTML = 'Bksp';\r\n            } else if (keyTag === '{Tab}') {\r\n                btn.innerHTML = '&#8677; Tab';\r\n            } else if (keyTag === '{enter}') {\r\n                btn.innerHTML = 'enter';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Shift}') {\r\n                btn.innerHTML = 'Shift';\r\n                btn.className = shiftClass;\r\n            } else if (keyTag === '{Accept}') {\r\n                btn.innerHTML = 'Accept';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Alt}') {\r\n                btn.innerHTML = 'Alt';\r\n            } else if (keyTag === '{Space}') {\r\n                btn.innerHTML = '&nbsp;';\r\n                btn.className = 'vkbuttonSpace';\r\n            } else if (keyTag === '{left}') {\r\n                btn.innerHTML = '&#8592';\r\n            } else if (keyTag === '{right}') {\r\n                btn.innerHTML = '&#8594;';\r\n            } else if (keyTag === '{up}') {\r\n                btn.innerHTML = '&#8593;';\r\n            } else if (keyTag === '{down}') {\r\n                btn.innerHTML = '&#8595;';\r\n            } else if (keyTag === '{Cancel}') {\r\n                btn.innerHTML = 'Cancel';\r\n                btn.className = 'vkbuttonAction';\r\n            }\r\n        } else {\r\n            btn.innerHTML = keyTag;\r\n        }\r\n    }\r\n}\r\n","import {Adapter} from '../Adapter';\r\n\r\nexport class JavaAdapter extends Adapter {\r\n    constructor() {\r\n        super();\r\n        this.id = 'JavaAdapter';\r\n    }\r\n    update(evt: Object): boolean {\r\n        if (this.isActive()) {\r\n            window['JavaBridge'].executeChange(evt);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public isActive(): boolean {\r\n        return window['JavaBridge'];\r\n    }\r\n}\r\n","export * from './JavaAdapter';\r\n","import { Util } from '../util';\r\nimport { Control } from '../Control';\r\n\r\nexport interface Size {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\ninterface GraphElement {\r\n    getSize(): Point;\r\n\r\n    getPos(): Point;\r\n\r\n    getCenter(): Point;\r\n\r\n    getSVG(): Element;\r\n\r\n    getCanvas(): Element;\r\n\r\n    getEvents(): string[];\r\n\r\n    withPos(x: number, y: number): GraphElement;\r\n\r\n    load(data: any): any;\r\n\r\n    getToolBarIcon(): Element;\r\n\r\n    loadProperties(properties: any): void;\r\n}\r\n\r\nexport abstract class DiagramElement extends Control implements GraphElement {\r\n\r\n    protected $isDraggable: boolean = true;\r\n    protected $labelHeight = 25;\r\n    protected $labelFontSize = 14;\r\n    private $pos: Point = new Point();\r\n    private $size: Point = new Point();\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getPos(): Point {\r\n        return this.$pos;\r\n    }\r\n\r\n    public getSize(): Point {\r\n        return this.$size;\r\n    }\r\n\r\n    public getCenter(): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        return new Point(pos.x + size.x / 2, pos.y + size.y / 2);\r\n    }\r\n\r\n    public getCenterPosition(p: string): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let offset = this['$' + p];\r\n        let center = this.getCenter();\r\n        if (p === Point.DOWN) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y + size.y, Point.DOWN);\r\n        }\r\n        if (p === Point.UP) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y, Point.UP);\r\n        }\r\n        if (p === Point.LEFT) {\r\n            return new Point(pos.x, Math.min(center.y + offset, pos.y + size.y), Point.LEFT);\r\n        }\r\n        if (p === Point.RIGHT) {\r\n            return new Point(pos.x + size.x, Math.min(center.y + offset, pos.y + size.y), Point.RIGHT);\r\n        }\r\n        return new Point();\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getCanvas(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return null;\r\n    }\r\n\r\n    public getAlreadyDisplayingSVG(): Element {\r\n        return document.getElementById(this.id) || this.getSVG();\r\n    }\r\n\r\n    public load(data: any) {\r\n        // Do Nothing\r\n    }\r\n\r\n    public withPos(x: number, y: number): GraphElement {\r\n        if (x && y) {\r\n            this.$pos = new Point(x, y);\r\n        } else {\r\n            if (typeof (x) !== 'undefined' && x !== null) {\r\n                this.$pos.x = x;\r\n            }\r\n            if (typeof (y) !== 'undefined' && y !== null) {\r\n                this.$pos.y = y;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public withSize(width: number, height: number): DiagramElement {\r\n        if (width && height) {\r\n            this.$size = new Point(width, height);\r\n        } else {\r\n            if (typeof (width) !== 'undefined' && width !== null) {\r\n                this.$size.x = width;\r\n            }\r\n            if (typeof (height) !== 'undefined' && height !== null) {\r\n                this.$size.y = height;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        // FIXME if (this.status === 'close') {\r\n        // if (!this.$owner.isClosed()) {\r\n        //        return this;\r\n        //    }\r\n        // }\r\n        return super.getShowed();\r\n    }\r\n\r\n    public loadProperties(properties: any) {\r\n        // DO Nothing\r\n    }\r\n\r\n    protected createShape(attrs: any): Element {\r\n        return Util.createShape(attrs);\r\n    }\r\n}\r\n\r\nexport class Point {\r\n    public static UP: string = 'UP';\r\n    public static LEFT: string = 'LEFT';\r\n    public static RIGHT: string = 'RIGHT';\r\n    public static DOWN: string = 'DOWN';\r\n    x: number = 0;\r\n    y: number = 0;\r\n\r\n    //    pos:string = '';\r\n\r\n    constructor(x?: number, y?: number, pos?: string) {\r\n        this.x = Math.ceil(x || 0);\r\n        this.y = Math.ceil(y || 0);\r\n        if (pos) {\r\n            this['pos'] = pos;\r\n        }\r\n    }\r\n\r\n    public add(pos: Point) {\r\n        this.x += pos.x;\r\n        this.y += pos.y;\r\n        return this;\r\n    }\r\n\r\n    public getPosition(): string {\r\n        if (!this['pos']) {\r\n            return '';\r\n        }\r\n        return this['pos'];\r\n    }\r\n\r\n    public addNum(x: number, y: number) {\r\n        this.x += x;\r\n        this.y += y;\r\n        return this;\r\n    }\r\n\r\n    public sum(pos: Point) {\r\n        let sum = new Point(this.x, this.y);\r\n        sum.add(pos);\r\n        return sum;\r\n    }\r\n\r\n    public center(posA: Point, posB: Point) {\r\n        let count = 0;\r\n        if (posA) {\r\n            this.x += posA.x;\r\n            this.y += posA.y;\r\n            count++;\r\n        }\r\n        if (posB) {\r\n            this.x += posB.x;\r\n            this.y += posB.y;\r\n            count++;\r\n        }\r\n        if (count > 0) {\r\n            this.x = (this.x / count);\r\n            this.y = (this.y / count);\r\n        }\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        return this.x < 1 && this.y < 1;\r\n    }\r\n\r\n    public size(posA: Point, posB: Point) {\r\n        let x1 = 0, x2 = 0, y1 = 0, y2 = 0;\r\n        if (posA) {\r\n            x1 = posA.x;\r\n            y1 = posA.y;\r\n        }\r\n        if (posB) {\r\n            x2 = posB.x;\r\n            y2 = posB.y;\r\n        }\r\n        if (x1 > x2) {\r\n            this.x = x1 - x2;\r\n        } else {\r\n            this.x = x2 - x1;\r\n        }\r\n        if (y1 > y2) {\r\n            this.y = y1 - y2;\r\n        } else {\r\n            this.y = y2 - y1;\r\n        }\r\n    }\r\n}\r\n\r\n// \t\t\t\t######################################################### Line #########################################################\r\nexport class Line extends DiagramElement {\r\n    public static FORMAT = { SOLID: 'SOLID', DOTTED: 'DOTTED', PATH: 'PATH' };\r\n    public source: Point;\r\n    public target: Point;\r\n    public color: string;\r\n    public lineType: string;\r\n    private path: string;\r\n    private angle: Number;\r\n\r\n    constructor(lineType: string) {\r\n        super();\r\n        this.lineType = lineType;\r\n    }\r\n\r\n    public getTyp(): string {\r\n        return 'SVG';\r\n    }\r\n\r\n    public getPos() {\r\n        let pos = new Point();\r\n        pos.center(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public getSize() {\r\n        let pos = new Point();\r\n        pos.size(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public withColor(color: string): Line {\r\n        this.color = color;\r\n        return this;\r\n    }\r\n\r\n    public withSize(x: number, y: number): DiagramElement {\r\n        return this;\r\n    }\r\n\r\n    public withPath(path: Array<Point>, close: boolean, angle?: any): Line {\r\n        let i: number, d: string = 'M' + path[0].x + ' ' + path[0].y;\r\n        this.lineType = Line.FORMAT.PATH; // It is a Path not a Line\r\n        for (i = 1; i < path.length; i += 1) {\r\n            d = d + 'L ' + path[i].x + ' ' + path[i].y;\r\n        }\r\n        if (close) {\r\n            d = d + ' Z';\r\n            this.target = path[0];\r\n        } else {\r\n            this.target = path[path.length - 1];\r\n        }\r\n        this.path = d;\r\n        if (angle instanceof Number) {\r\n            this.angle = angle;\r\n        } else if (angle) {\r\n            // var lineangle, start = path[0], end = path[path.length - 1];\r\n            // lineangle = Math.atan2(end.y - start.y, end.x - start.x);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): SVGGElement {\r\n        if (this.lineType === 'PATH') {\r\n            return <SVGGElement>Util.create({\r\n                tag: 'path',\r\n                'd': this.path,\r\n                'fill': this.color,\r\n                stroke: '#000',\r\n                'stroke-width': '1px'\r\n            });\r\n        }\r\n        let line: SVGGElement = <SVGGElement>Util.create({\r\n            tag: 'line',\r\n            'x1': this.source.x,\r\n            'y1': this.source.y,\r\n            'x2': this.target.x,\r\n            'y2': this.target.y,\r\n            'stroke': Util.getColor(this.color)\r\n        });\r\n        if (this.lineType && this.lineType.toLowerCase() === 'dotted') {\r\n            line.setAttribute('stroke-miterlimit', '4');\r\n            line.setAttribute('stroke-dasharray', '1,1');\r\n        }\r\n        return line;\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport Options from '../Options';\r\nimport {JavaAdapter} from '../adapters';\r\n\r\nexport class ClassEditor extends Graph {\r\n    private adapter: JavaAdapter;\r\n    constructor(json: any, options: Options) {\r\n        if (!options ) {\r\n            options = {};\r\n        }\r\n        options.canvas = options.canvas || 'canvas';\r\n        // options.origin = options.origin || new Point(150, 45);\r\n//            layout: \"DagreLayout\",\r\n        options.autoSave = options.autoSave || true;\r\n        if (!options.features) {\r\n            options.features = {\r\n                drag: true,\r\n                editor: true,\r\n                palette: true,\r\n                select: true,\r\n                zoom: true,\r\n                toolbar: true,\r\n                import: true,\r\n                properties: true,\r\n                addnode: true,\r\n                newedge: true\r\n            };\r\n        }\r\n        super(json, options);\r\n    }\r\n\r\n    public setBoardStyle(value: string) {\r\n        console.log(value);\r\n        this.importFile.setBoardStyle(value);\r\n    }\r\n\r\n    public registerListener(): void {\r\n        this.adapter = new JavaAdapter();\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return this.adapter;\r\n    }\r\n}\r\n","import * as edges from './edges';\r\nimport { Association } from './edges';\r\nimport * as nodes from './nodes';\r\nimport * as layouts from '../layouts';\r\nimport Layout from '../layouts/Layout';\r\nimport { GraphModel } from './Model';\r\nimport { Point, Size } from './BaseElements';\r\nimport { Util } from '../util';\r\nimport { Control } from '../Control';\r\nimport Data from '../Data';\r\nimport { EventBus } from '../EventBus';\r\nimport { AddNode, Drag, NewEdge, Select, Zoom } from '../handlers';\r\nimport Options from '../Options';\r\nimport { ImportFile } from '../handlers/ImportFile';\r\nimport { CSS } from '../CSS';\r\nimport { DiagramElement } from './index';\r\nimport { Toolbar } from '../Toolbar';\r\nimport {JSEPS} from '../JSEPS';\r\nimport {SVGConverter} from '../SVGConverter';\r\nimport Palette from '../Palette';\r\nimport {PanelGroup} from '../PropertiesPanel';\r\n\r\nexport class Graph extends Control {\r\n    // canvas: HTMLElement;\r\n    root: SVGElement;\r\n    $graphModel: GraphModel;\r\n    options: Options;\r\n    canvasSize: Size;\r\n    nodeFactory: Object;\r\n    edgeFactory: Object;\r\n    layoutFactory: Object;\r\n    protected importFile: ImportFile;\r\n    private currentlayout: Layout;\r\n    // private layerToolBar: SVGSVGElement;\r\n    // https://stackoverflow.com/questions/15181452/how-to-save-export-inline-svg-styled-with-css-from-browser-to-image-file\r\n    private containerElements = ['svg', 'g'];\r\n    private relevantStyles = {\r\n        'rect': ['fill', 'stroke', 'stroke-width'],\r\n        'path': ['fill', 'stroke', 'stroke-width', 'opacity'],\r\n        'circle': ['fill', 'stroke', 'stroke-width'],\r\n        'line': ['stroke', 'stroke-width'],\r\n        'text': ['fill', 'font-size', 'text-anchor', 'font-family'],\r\n        'polygon': ['stroke', 'fill']\r\n    };\r\n\r\n    constructor(json: any, options: Options) {\r\n        super();\r\n        json = json || {};\r\n        if (json['data']) {\r\n            options = json['options'];\r\n            json = json['data'];\r\n            this.id = json['id'];\r\n        }\r\n        this.options = options || {features: { drag: true}};\r\n        if (json['init']) {\r\n            return;\r\n        }\r\n        if (!this.options.origin) {\r\n            this.options.origin = new Point(150, 45);\r\n        }\r\n        if (!this.options.style) {\r\n            // Style can be classic or modern\r\n            this.options.style = 'classic';\r\n        }\r\n        if (this.options.autoSave) {\r\n            Util.isAutoSave = options.autoSave;\r\n        }\r\n\r\n        this.initFactories();\r\n        this.initCanvas();\r\n        this.initFeatures(this.options.features);\r\n\r\n        // load previous session, if user wants it\r\n        // otherwise load the json data\r\n        if (!this.lookupInLocalStorage()) {\r\n            this.load(json);\r\n        }\r\n\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    public lookupInLocalStorage(): boolean {\r\n        if (!this.options.autoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (!Util.isLocalStorageSupported()) {\r\n            return false;\r\n        }\r\n        let diagram = Util.getDiagramFromLocalStorage();\r\n        if (diagram && diagram.length > 0) {\r\n            if (confirm('Restore previous session?')) {\r\n                let jsonData: JSON = JSON.parse(diagram);\r\n                this.load(jsonData);\r\n                this.layout();\r\n                return true;\r\n            } else {\r\n                Util.saveToLocalStorage( null);\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public fitSizeOnNodes(): void {\r\n        let maxWidth: number = 0;\r\n        let maxHeight: number = 0;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            let nodePos = node.getPos();\r\n            let nodeSize = node.getSize();\r\n            let nodeWidestPosX = nodePos.x + nodeSize.x;\r\n            let nodeWidestPosY = nodePos.y + nodeSize.y;\r\n\r\n            if (nodeWidestPosX > maxWidth) {\r\n                maxWidth = nodeWidestPosX;\r\n            }\r\n\r\n            if (nodeWidestPosY > maxHeight) {\r\n                maxHeight = nodeWidestPosY;\r\n            }\r\n        }\r\n\r\n        this.root.setAttributeNS(null, 'width', '' + (maxWidth + 100));\r\n        this.root.setAttributeNS(null, 'height', '' + (maxHeight + 50));\r\n    }\r\n\r\n    public saveAs(typ: string) {\r\n        typ = typ.toLowerCase();\r\n\r\n        // shrink size of graph to minimum. only to show up nodes\r\n        const currentSize = this.getRootSize();\r\n        this.fitSizeOnNodes();\r\n\r\n        if (typ === 'svg') {\r\n            this.exportSvg();\r\n        } else if (typ === 'png') {\r\n            this.exportPng();\r\n        } else if (typ === 'html') {\r\n            this.exportHtml();\r\n\r\n        } else if (typ === 'pdf') {\r\n            this.exportPdf();\r\n            // } else if (typ === 'eps') {\r\n            // this.ExportEPS();\r\n        }\r\n        else if (typ === 'json') {\r\n            this.exportJson();\r\n        }\r\n\r\n        // set the size back to default\r\n        this.root.setAttributeNS(null, 'width', '' + currentSize.width);\r\n        this.root.setAttributeNS(null, 'height', '' + currentSize.height);\r\n    }\r\n\r\n    /**\r\n     * generates a blob file and makes it available for download.\r\n     * @param type type of file\r\n     * @param data raw data\r\n     * @param name name of download file\r\n     */\r\n    public save(type: string, data: any, name: string, context: string) {\r\n        if (window['java']) {\r\n            window['java'].export(type, data, name, context);\r\n            return;\r\n        }\r\n        let a = document.createElement('a');\r\n        a.href = window.URL.createObjectURL(new Blob([data], { type: context }));\r\n        a.download = name;\r\n        document.body.appendChild(a);\r\n        a.click();\r\n        document.body.removeChild(a);\r\n    }\r\n\r\n    /** Exports the diagram as svg. */\r\n    public exportSvg(): void {\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        this.save('svg', this.serializeXmlNode(wellFormatedSvgDom), 'class_diagram.svg', 'image/svg+xml');\r\n    }\r\n\r\n    /** Exports the diagram as html. */\r\n    public exportHtml(): void {\r\n        let htmlFacade = '<html><head><title>DiagramJS - Classdiagram</title></head><body>$content</body></html>';\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        let svgAsXml = this.serializeXmlNode(wellFormatedSvgDom);\r\n\r\n        let htmlResult = htmlFacade.replace('$content', svgAsXml);\r\n\r\n        this.save('html', htmlResult, 'class_diagram.htm', 'text/plain');\r\n    }\r\n\r\n    /** Exports the diagram as json. */\r\n    public exportJson(): void {\r\n        let type = 'text/plain';\r\n        let jsonObj = Util.toJson(this.$graphModel);\r\n        let data = JSON.stringify(jsonObj, null, '\\t');\r\n\r\n        this.save('json', data, 'class_diagram.json', type);\r\n    }\r\n\r\n    /** Exports the diagram as pdf. */\r\n    public exportPdf(): void {\r\n        if (!window['jsPDF']) {\r\n            console.log('jspdf n.a.');\r\n            return;\r\n        }\r\n        let type = 'image/svg+xml';\r\n        let converter, pdf = new window['jsPDF']('l', 'px', [this.$graphModel.getSize().x, this.$graphModel.getSize().y]);\r\n        converter = new SVGConverter(this.$view, pdf, {removeInvalid: false});\r\n        pdf.save('Download.pdf');\r\n/*        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let canvas, context, a, image = new Image();\r\n        let size = this.getRootSize();\r\n\r\n        // create the loaded img source into a canvas. to generate a picture. then place this picture in the pdf\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            let pdf = new window['jsPDF']();\r\n\r\n            pdf.addImage(canvas.toDataURL('image/jpeg'), 'jpeg', 15, 40, 180, 160);\r\n            pdf.save('class_diagram.pdf');\r\n\r\n        };\r\n\r\n        image.src = url;\r\n        */\r\n    }\r\n\r\n    public import(data: string): void {\r\n        let rootElement = this.$graphModel.$view;\r\n        while (rootElement.hasChildNodes()) {\r\n            rootElement.removeChild(rootElement.firstChild);\r\n        }\r\n\r\n        while (this.$view.hasChildNodes()) {\r\n            this.$view.removeChild(this.$view.firstChild);\r\n        }\r\n\r\n        this.clearModel();\r\n        let jsonData = JSON.parse(data);\r\n        this.load(jsonData);\r\n        this.layout();\r\n    }\r\n\r\n    public exportEPS(): void {\r\n          let converter, doc = new JSEPS({inverting: true});\r\n            converter = new SVGConverter(this.$view, doc, {removeInvalid: false});\r\n            this.save('eps', doc.getData(), 'diagram.eps', doc.getType());\r\n    }\r\n\r\n    /** Exports the diagram as png. */\r\n    public exportPng(): void {\r\n        let canvas, context, a, image = new Image();\r\n        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let typ = 'image/svg+xml';\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let size = this.getRootSize();\r\n\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            a = document.createElement('a');\r\n            a.download = 'class_diagram.png';\r\n            a.href = canvas.toDataURL('image/png');\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            document.body.removeChild(a);\r\n        };\r\n\r\n        image.src = url;\r\n\r\n    }\r\n\r\n    public getSvgWithStyleAttributes(): Node {\r\n        let oDOM = this.$graphModel.$view.cloneNode(true);\r\n        this.readElement(oDOM, this.$graphModel.$view);\r\n\r\n        return oDOM;\r\n    }\r\n\r\n    public serializeXmlNode(xmlNode: any) {\r\n        if (window['XMLSerializer'] !== undefined) {\r\n            return (new window['XMLSerializer']()).serializeToString(xmlNode);\r\n        }\r\n        if (xmlNode.xml !== undefined) {\r\n            return xmlNode.xml;\r\n        }\r\n        return xmlNode.outerHTML;\r\n    }\r\n\r\n    public getRootSize(): Size {\r\n        let width: number;\r\n        let height: number;\r\n        width = +this.root.getAttribute('width');\r\n        height = +this.root.getAttribute('height');\r\n\r\n        return { width: width, height: height };\r\n    }\r\n\r\n        // Graph.prototype.ExportEPS = function () {\r\n        //     var converter, doc = new svgConverter.jsEPS({inverting: true});\r\n        //     converter = new svgConverter(this.board, doc, {removeInvalid: false});\r\n        //     doc.save();\r\n        // };\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        this.$graphModel = new GraphModel();\r\n        this.$graphModel.init(this);\r\n        this.$graphModel.load(json);\r\n    }\r\n\r\n    public clearModel(): void {\r\n        this.$graphModel.removeAllElements();\r\n        this.clearSvgRoot();\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.layout();\r\n        return this;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        return;\r\n    }\r\n\r\n    public getNextFreePosition(): Point {\r\n\r\n        if (!this.$graphModel) {\r\n            return new Point(50, 50);\r\n        }\r\n\r\n        let point = new Point(0, 50);\r\n\r\n        let maxX = 0;\r\n        let minX = 9000;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            maxX = Math.max(maxX, node.getPos().x);\r\n            minX = Math.min(minX, node.getPos().x);\r\n        }\r\n\r\n        if (minX > 170) {\r\n            point.x = 10;\r\n        }\r\n        else {\r\n            point.x = maxX + 200;\r\n        }\r\n\r\n        return point;\r\n    }\r\n\r\n    public addElement(type: string, dontDraw?: boolean): boolean {\r\n        let success = this.$graphModel.addElement(type);\r\n        if (success === true) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return success;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues?: Object, layout?: boolean, dontDraw?: boolean): DiagramElement {\r\n        let element = this.$graphModel.addElementWithValues(type, optionalValues);\r\n        if (element && layout) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public layout(dontDraw?: boolean): Graph {\r\n        this.getLayout().layout(this, this.$graphModel);\r\n\r\n        if (dontDraw) {\r\n            return this;\r\n        }\r\n\r\n        this.draw();\r\n        return this;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTDRAGOVER, EventBus.ELEMENTDRAGLEAVE, EventBus.ELEMENTDROP];\r\n    }\r\n\r\n    public draw() {\r\n        this.clearSvgRoot();\r\n        let model = this.$graphModel;\r\n        let root = this.root;\r\n        let max: Point = new Point();\r\n        if (this.options) {\r\n            max.x = this.options.minWidth || 0;\r\n            max.y = this.options.minHeight || 0;\r\n        }\r\n\r\n        for (let node of model.nodes) {\r\n            let svg = node.getSVG();\r\n            EventBus.register(node, svg);\r\n            root.appendChild(svg);\r\n\r\n            let temp: number;\r\n            temp = node.getPos().x + node.getSize().x;\r\n            if (temp > max.x) {\r\n                max.x = temp;\r\n            }\r\n            temp = node.getPos().y + node.getSize().y;\r\n            if (temp > max.y) {\r\n                max.y = temp;\r\n            }\r\n\r\n        }\r\n        Util.setAttributeSize(this.root, max.x + 60, max.y + 40);\r\n\r\n        for (let edge of model.edges) {\r\n            let svg = edge.getSVG();\r\n            EventBus.register(edge, svg);\r\n            root.appendChild(svg);\r\n        }\r\n    }\r\n\r\n    public getNode(id: string) {\r\n        return this.$graphModel.getNodeById(id);\r\n    }\r\n\r\n    public drawElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let svg = element.getSVG();\r\n        this.root.appendChild(svg);\r\n\r\n        // actualize root width size, if neccessary\r\n        // get current width of root\r\n        let rootSize = this.getRootSize();\r\n        let newWidth = element.getPos().x + element.getSize().x + 40;\r\n        let newHeight = element.getPos().y + element.getSize().y;\r\n\r\n        if (rootSize.width < newWidth) {\r\n            this.root.setAttributeNS(null, 'width', '' + newWidth);\r\n        }\r\n\r\n        if (rootSize.height < newHeight) {\r\n            this.root.setAttributeNS(null, 'height', '' + newHeight);\r\n        }\r\n\r\n        // draw edge\r\n        if (element instanceof Association) {\r\n            let edge = <Association>element;\r\n            edge.redraw(edge.$sNode);\r\n            let srcSvg = element.$sNode.getAlreadyDisplayingSVG();\r\n            let targetSvg = element.$tNode.getAlreadyDisplayingSVG();\r\n\r\n            this.root.appendChild(srcSvg);\r\n            this.root.appendChild(targetSvg);\r\n        }\r\n\r\n        EventBus.register(element, svg);\r\n    }\r\n\r\n    public removeElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let alreadyDisplayingSvg = element.getAlreadyDisplayingSVG();\r\n        if (Util.isParentOfChild(this.root, alreadyDisplayingSvg)) {\r\n            this.root.removeChild(alreadyDisplayingSvg);\r\n        }\r\n    }\r\n\r\n    public generate(packageName: string, path?: string) {\r\n        this.$graphModel.package = packageName;\r\n        this.$graphModel.genPath = path;\r\n\r\n        let data, result = Util.toJson(this.$graphModel);\r\n        data = JSON.stringify(result, null, '\\t');\r\n        if (window['java'] && typeof window['java'].generate === 'function') {\r\n            window['java'].generate(data);\r\n        }\r\n    }\r\n// REFACTORING dd\r\n    private readElement(parent: any, origData: any): void {\r\n        let children = parent.childNodes;\r\n        let origChildDat = origData.childNodes;\r\n\r\n        for (let cd = 0; cd < children.length; cd++) {\r\n            let child = children[cd];\r\n\r\n            let tagName = child.tagName;\r\n            if (this.containerElements.indexOf(tagName) !== -1) {\r\n                this.readElement(child, origChildDat[cd]);\r\n            } else if (tagName in this.relevantStyles) {\r\n                let styleDef = window.getComputedStyle(origChildDat[cd]);\r\n\r\n                let styleString = '';\r\n                for (let st = 0; st < this.relevantStyles[tagName].length; st++) {\r\n                    styleString += this.relevantStyles[tagName][st] + ':' + styleDef.getPropertyValue(this.relevantStyles[tagName][st]) + '; ';\r\n                }\r\n\r\n                child.setAttribute('style', styleString);\r\n            }\r\n        }\r\n    }\r\n\r\n    private createPattern(): Element {\r\n        const defs = Util.createShape({ tag: 'defs' });\r\n        const pattern = Util.createShape({\r\n            tag: 'pattern',\r\n            id: 'raster',\r\n            patternUnits: 'userSpaceOnUse',\r\n            width: 40,\r\n            height: 40\r\n        });\r\n        const path = 'M0 4 L0 0 L4 0 M36 0 L40 0 L40 4 M40 36 L40 40 L36 40 M4 40 L0 40 L0 36';\r\n        const cross = Util.createShape({\r\n            tag: 'path',\r\n            d: path,\r\n            stroke: '#DDD',\r\n            'stroke-width': 1,\r\n            fill: 'none'\r\n        });\r\n\r\n        const rect = Util.createShape({\r\n            tag: 'rect',\r\n            x: 0,\r\n            y: 0,\r\n            width: 40,\r\n            height: 40,\r\n            fill: 'none'\r\n        });\r\n        pattern.appendChild(rect);\r\n        pattern.appendChild(cross);\r\n        defs.appendChild(pattern);\r\n        return defs;\r\n    }\r\n\r\n    private clearSvgRoot() {\r\n        const root = this.root;\r\n        this.$graphModel.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n        while (root.firstChild) {\r\n            root.removeChild(root.firstChild);\r\n        }\r\n\r\n        root.appendChild(this.createPattern());\r\n        let fillValue = 'none';\r\n        if (this.options.raster) {\r\n            fillValue = 'url(#raster)';\r\n        }\r\n        let background = Util.createShape({\r\n            tag: 'rect',\r\n            id: 'background',\r\n            width: 5000,\r\n            height: 5000,\r\n            x: 0,\r\n            y: 0,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: fillValue\r\n        });\r\n        root.appendChild(background);\r\n\r\n        // delete inline Edit, if exists\r\n        let inlineEdit = document.getElementById('inlineEdit');\r\n        if (inlineEdit && document.body.contains(inlineEdit)) {\r\n            document.body.removeChild(inlineEdit);\r\n        }\r\n    }\r\n\r\n    private getLayout(): Layout {\r\n        if (this.currentlayout) {\r\n            return this.currentlayout;\r\n        }\r\n\r\n        let layout = this.options.layout || '';\r\n        if (this.layoutFactory[layout]) {\r\n            this.currentlayout = new this.layoutFactory[layout]();\r\n        } else {\r\n            this.currentlayout = new layouts.DagreLayout();\r\n        }\r\n\r\n        return this.currentlayout;\r\n    }\r\n\r\n    private initFactories() {\r\n\r\n        let noder = nodes;\r\n        this.nodeFactory = {};\r\n        for (let id in noder) {\r\n            if (noder.hasOwnProperty(id) === true) {\r\n                this.nodeFactory[id] = noder[id];\r\n            }\r\n        }\r\n\r\n        let edger = edges;\r\n        this.edgeFactory = {};\r\n        for (let id in edger) {\r\n            if (edger.hasOwnProperty(id) === true) {\r\n                this.edgeFactory[id] = edger[id];\r\n            }\r\n        }\r\n\r\n        let layouter = layouts;\r\n        this.layoutFactory = {};\r\n        for (let id in layouter) {\r\n            if (layouter.hasOwnProperty(id) === true) {\r\n                this.layoutFactory[id] = layouter[id];\r\n            }\r\n        }\r\n    }\r\n\r\n    private initCanvas() {\r\n        if (this.options.canvas) {\r\n            this.$view = document.getElementById(this.options.canvas);\r\n        }\r\n        if (!this.$view) {\r\n            this.$view = document.createElement('div');\r\n            this.$view.setAttribute('class', 'diagram');\r\n            document.body.appendChild(this.$view);\r\n        }\r\n    }\r\n\r\n    private initFeatures(features: any) {\r\n\r\n        if (features) {\r\n            if (features.newedge) {\r\n                EventBus.subscribe(new NewEdge(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            this.importFile = new ImportFile(this);\r\n            if (features.import) {\r\n                EventBus.subscribe(this.importFile, 'dragover', 'dragleave', 'drop');\r\n            }\r\n            if (features.zoom) {\r\n                let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n                EventBus.subscribe(new Zoom(this), mousewheel);\r\n            }\r\n            if (features.drag) {\r\n                EventBus.subscribe(new Drag(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            if (features.select) {\r\n                EventBus.subscribe(new Select(this), 'click', 'drag');\r\n            }\r\n            if (features.palette) {\r\n                new Palette(this).show();\r\n            }\r\n            if (features.toolbar) {\r\n                new Toolbar(this).show();\r\n            }\r\n            if (features.properties) {\r\n                let propertyPanel = new PanelGroup(this);\r\n                // let dispatcher = new PropertiesDispatcher(this);\r\n                EventBus.subscribe(propertyPanel, 'dblclick', 'click', EventBus.RELOADPROPERTIES);\r\n                propertyPanel.show();\r\n            }\r\n            if (features.addnode) {\r\n                EventBus.subscribe(new AddNode(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n        }\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport {DiagramElement, Point} from './BaseElements';\r\nimport {Association} from './edges';\r\nimport {Node} from './nodes';\r\nimport {Control} from '../Control';\r\nimport {Util} from '../util';\r\nimport {EventBus} from '../EventBus';\r\n\r\nexport class GraphModel extends DiagramElement {\r\n    nodes: Node[] = [];\r\n    edges: Association[] = [];\r\n    package: string;\r\n    genPath: string;\r\n    $isLoading: boolean;\r\n\r\n    public load(data?: any) {\r\n\r\n        this.$isLoading = true;\r\n        data = data || {};\r\n        this.property = data.type || data.property || 'classdiagram';\r\n        this.id = 'RootElement';\r\n        if (data.nodes) {\r\n            for (let node of data.nodes) {\r\n                this.addNode(node);\r\n            }\r\n        }\r\n        if (data.edges) {\r\n            for (let edge of data.edges) {\r\n                this.addEdge(edge);\r\n            }\r\n        }\r\n\r\n        this.$isLoading = false;\r\n    }\r\n\r\n    public getNodeByPosition(x: number, y: number): Node {\r\n        for (let node of this.nodes) {\r\n            let posOfNode: Point = (<Node>node).getPos();\r\n            let sizeOfNode: Point = (<Node>node).getSize();\r\n\r\n            if ((posOfNode.x <= x && (posOfNode.x + sizeOfNode.x) >= x)\r\n                && (posOfNode.y <= y && (posOfNode.y + sizeOfNode.y) >= y)) {\r\n                return node;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.initCanvas();\r\n        return this;\r\n    }\r\n\r\n    public addElement(type: string): boolean {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n        if (element) {\r\n            Util.saveToLocalStorage(this);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues: Object): DiagramElement {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n\r\n        // position\r\n        if (optionalValues) {\r\n            if (optionalValues.hasOwnProperty('x') && optionalValues.hasOwnProperty('y')) {\r\n                let x = optionalValues['x'];\r\n                let y = optionalValues['y'];\r\n                element.withPos(x, y);\r\n            }\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return element;\r\n    }\r\n\r\n    public removeAllElements(): void {\r\n\r\n        let nodesLength = this.nodes.length;\r\n        for (let i = 0; i < nodesLength; i++) {\r\n            this.removeElement(this.nodes[0].id);\r\n        }\r\n\r\n        this.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n    }\r\n\r\n    public removeElement(id: string): boolean {\r\n\r\n        let element = this.getDiagramElementById(id);\r\n        if (!element) {\r\n            return false;\r\n        }\r\n\r\n        (<Graph>this.$owner).removeElement(element);\r\n\r\n        if (element instanceof Node) {\r\n\r\n            let idxOfNode = this.nodes.indexOf(element);\r\n            if (idxOfNode > -1) {\r\n                this.nodes.splice(idxOfNode, 1);\r\n            }\r\n\r\n            while (element.$edges.length > 0) {\r\n                this.removeElement(element.$edges[0].id);\r\n            }\r\n\r\n            element.$edges = [];\r\n        }\r\n        else if (element instanceof Association) {\r\n\r\n            let idxOfEdge = this.edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                this.edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from source\r\n            idxOfEdge = element.$sNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$sNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from target\r\n            idxOfEdge = element.$tNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$tNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return true;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        const size = 10;\r\n        const path = `M${-size} 0 L${+size} 0 M0 ${-size} L0 ${+size}`;\r\n\r\n        const attr = {\r\n            tag: 'path',\r\n            id: 'origin',\r\n            d: path,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: 'none'\r\n        };\r\n        let shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: 0 - size,\r\n            y: 0 - size / 1.5,\r\n            'text-anchor': 'end',\r\n            'font-family': 'Verdana',\r\n            'font-size': '9',\r\n            fill: '#999'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = '(0, 0)';\r\n\r\n        let group = this.createShape({tag: 'g'});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEUP, EventBus.ELEMENTMOUSELEAVE, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTMOUSEWHEEL, EventBus.ELEMENTCLICK, EventBus.ELEMENTDRAG];\r\n    }\r\n\r\n    public getNewId(prefix?: string): string {\r\n        let id = (prefix ? prefix.toLowerCase() + '-' : '') + Math.floor(Math.random() * 100000);\r\n        return id;\r\n    }\r\n\r\n    public getEdgeById(id: string): Association {\r\n        for (let edge of this.edges) {\r\n            if (edge.id === id) {\r\n                return edge;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    public getDiagramElementById(id: string): DiagramElement {\r\n\r\n        return this.getNodeById(id) || this.getEdgeById(id);\r\n    }\r\n\r\n    /**\r\n     * Add an edge with data in json file. Optional you can say, that the edge should have\r\n     * the points of source node and target node.\r\n     * @param edge information about edge in json\r\n     * @param withPosOfNodes optional. set points to line of source and target node\r\n     */\r\n    public addEdge(edge: any, withPosOfNodes?: boolean): Association {\r\n\r\n        // lookup in factoryedges and check if the edge type realy exists\r\n        if (edge && edge.type) {\r\n            const graph = (<Graph>this.$owner);\r\n            let typeExists = false;\r\n            for (let edgeType in graph.edgeFactory) {\r\n                if (edgeType === edge.type) {\r\n                    typeExists = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!typeExists) {\r\n                edge.type = 'Association';\r\n            }\r\n        }\r\n\r\n        let type = edge.type || 'Association';\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n\r\n        let newEdge = <Association>this.createElement(type, id, edge);\r\n        newEdge.type = type;\r\n\r\n        let source: Node;\r\n        let sourceAsString: string = edge.source.id || edge.source;\r\n        if (sourceAsString) {\r\n            source = this.getNodeById(sourceAsString);\r\n            if (!source) {\r\n                let nodeID = edge.source;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                source = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                source.init(this);\r\n            }\r\n        }\r\n\r\n        let target: Node;\r\n        let targetAsString: string = edge.target.id || edge.target;\r\n        if (targetAsString) {\r\n            target = this.getNodeById(targetAsString);\r\n            if (!target) {\r\n                let nodeID = edge.target;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                target = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                target.init(this);\r\n            }\r\n        }\r\n\r\n        newEdge.withItem(source, target);\r\n\r\n        if (withPosOfNodes) {\r\n            let srcX = source.getPos().x + (source.getSize().x / 2);\r\n            let srcY = source.getPos().y + (source.getSize().y / 2);\r\n\r\n            let targetX = target.getPos().x + (target.getSize().x / 2);\r\n            let targetY = target.getPos().y + (target.getSize().y / 2);\r\n\r\n            newEdge.addPoint(srcX, srcY);\r\n            newEdge.addPoint(targetX, targetY);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public createElement(type: string, id: string, data: Object): DiagramElement {\r\n        const graph = <Graph>this.$owner;\r\n        let element: DiagramElement;\r\n        if (graph.nodeFactory[type]) {\r\n            element = new graph.nodeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.nodes.push(<Node>element);\r\n        }\r\n        if (graph.edgeFactory[type]) {\r\n            element = new graph.edgeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.edges.push(<Association>element);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public getNodeById(id: string): Node {\r\n        for (let node of this.nodes) {\r\n            if (node.id === id) {\r\n                return node;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    private initCanvas() {\r\n        const graph = <Graph>this.$owner;\r\n        graph.canvasSize = {width: graph.$view.clientWidth, height: graph.$view.clientHeight};\r\n        graph.root = Util.createShape({\r\n            tag: 'svg',\r\n            id: 'root',\r\n            width: graph.canvasSize.width,\r\n            height: graph.canvasSize.height\r\n            // FIXME,viewBox: `${this.$graph.options.origin.x * -1} ${this.$graph.options.origin.y * -1} ${this.$graph.canvasSize.width} ${this.$graph.canvasSize.height}`\r\n        });\r\n        this.$view = graph.root;\r\n        graph.$view.appendChild(graph.root);\r\n\r\n        let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    private addNode(node: Node): Node {\r\n        let type = node['type'] || node.property || 'Node';\r\n        type = Util.toPascalCase(type);\r\n        let id = node['id'] || node['name'] || this.getNewId(type);\r\n\r\n        return <Node>this.createElement(type, id, node);\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction } from './index';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\n\r\nexport abstract class Aggregate extends Association {\r\n\r\n    protected $diamond: Element;\r\n\r\n    public getSVG(): Element {\r\n\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled diamond\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n        };\r\n\r\n        this.$diamond = this.createShape(attr);\r\n\r\n        group.appendChild(this.$diamond);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint: Point = this.$points[0];\r\n        let direction: Direction = Direction.Down;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if (this.$sNode.id === startNode.id || this.$points.length == 2) {\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$diamond.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint: Point, direction: Direction): string {\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                path = `M${startX} ${startY} L${startX + 6} ${startY + 10} L${startX} ${startY + 20} L${startX - 6} ${startY + 10} Z`;\r\n                startPoint.y = startPoint.y+20;\r\n                break;\r\n            case Direction.Right:\r\n                path = `M${startX} ${startY} L${startX - 10} ${startY + 6} L${startX - 20} ${startY} L${startX - 10} ${startY - 6} Z`;\r\n                startPoint.x = startPoint.x-20;\r\n                break;\r\n            case Direction.Left:\r\n                path = `M${startX} ${startY} L${startX + 10} ${startY - 6} L${startX + 20} ${startY} L${startX + 10} ${startY + 6} Z`;\r\n                startPoint.x = startPoint.x+20;\r\n                break;\r\n            case Direction.Down:\r\n                path = `M${startX} ${startY} L${startX - 6} ${startY - 10} L${startX} ${startY - 20} L${startX + 6} ${startY - 10} Z`;\r\n                startPoint.y = startPoint.y-20;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Aggregation extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'white');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { DiagramElement, Line, Point } from '../BaseElements';\r\nimport { Node } from '../nodes';\r\nimport { InfoText } from '../nodes/InfoText';\r\nimport { Util } from '../../util';\r\nimport { EventBus } from '../../EventBus';\r\nimport * as edges from '../edges';\r\nimport { Graph } from '../Graph';\r\n\r\nexport const enum Direction {\r\n    Up, Down, Left, Right\r\n}\r\n\r\nexport class Association extends DiagramElement {\r\n    public source: string;\r\n    public target: string;\r\n    public type: string;\r\n    public $sNode: Node;\r\n    public $tNode: Node;\r\n    public lineStyle: string;\r\n    public $points: Point[] = [];\r\n    public $pathSvg: Element;\r\n    public $pathWideSvg: Element;\r\n    public info: InfoText;\r\n    public sourceInfo: InfoText;\r\n    public targetInfo: InfoText;\r\n    $m: number;\r\n    $n: number;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super();\r\n\r\n        this.withData(data);\r\n    }\r\n\r\n    public withData(data: JSON | string | Object | any): Association {\r\n\r\n        if (!data) {\r\n            return this;\r\n        }\r\n        let srcInfo;\r\n        let trgInfo;\r\n\r\n        if (data.source && typeof data.source !== 'string') {\r\n            srcInfo = data.source;\r\n        }\r\n        else if (data.sourceInfo && typeof data.sourceInfo !== 'string') {\r\n            srcInfo = data.sourceInfo;\r\n        }\r\n\r\n        if (srcInfo) {\r\n            this.sourceInfo = new InfoText(srcInfo);\r\n            this.sourceInfo.$owner = this;\r\n        }\r\n\r\n        if (data.target && typeof data.target !== 'string') {\r\n            trgInfo = data.target;\r\n        }\r\n        else if (data.targetInfo && typeof data.targetInfo !== 'string') {\r\n            trgInfo = data.targetInfo;\r\n        }\r\n\r\n        if (trgInfo) {\r\n            this.targetInfo = new InfoText(trgInfo);\r\n            this.targetInfo.$owner = this;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    public updateSrcCardinality(cardinality: string): void {\r\n        this.sourceInfo = this.updateCardinality(this.$sNode, this.sourceInfo, cardinality);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetCardinality(cardinality: string): void {\r\n        this.targetInfo = this.updateCardinality(this.$tNode, this.targetInfo, cardinality);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateSrcProperty(property: string): void {\r\n        this.sourceInfo = this.updateProperty(this.$sNode, this.sourceInfo, property);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetProperty(property: string): void {\r\n        this.targetInfo = this.updateProperty(this.$tNode, this.targetInfo, property);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public withItem(source: Node, target: Node): Association {\r\n        source.$edges.push(this);\r\n        target.$edges.push(this);\r\n        this.$sNode = source;\r\n        this.$tNode = target;\r\n        this.source = source.id;\r\n        this.target = target.id;\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let group = Util.createShape({ tag: 'g', id: this.id, class: 'SVGEdge' });\r\n\r\n        let path: string = this.getPath();\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'none'\r\n        };\r\n        let pathLine = this.createShape(attr);\r\n\r\n        //attr['style'] = 'stroke-width:20;opacity:0;width:20;height:20';\r\n        let extendedPathLine = Util.createShape(attr);\r\n\r\n        group.appendChild(extendedPathLine);\r\n        group.appendChild(pathLine);\r\n\r\n        if (this.sourceInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.sourceInfo.getSVG());\r\n        }\r\n        if (this.targetInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.targetInfo.getSVG());\r\n        }\r\n\r\n        this.$pathWideSvg = extendedPathLine;\r\n        this.$pathSvg = pathLine;\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.EDITOR, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    public convertEdge(type: string, newId: string, redraw?: boolean): Association {\r\n        if (!edges[type]) {\r\n            return this;\r\n        }\r\n\r\n        let newEdge: Association = new edges[type]();\r\n        newEdge.withItem(this.$sNode, this.$tNode);\r\n        newEdge.id = newId;\r\n        newEdge.type = type;\r\n        newEdge.lineStyle = this.lineStyle;\r\n        newEdge.$owner = this.$owner;\r\n\r\n        if (this.sourceInfo) {\r\n            newEdge.sourceInfo = new InfoText({ property: this.sourceInfo.property, cardinality: this.sourceInfo.cardinality });\r\n            newEdge.sourceInfo.$owner = newEdge;\r\n        }\r\n\r\n        if (this.targetInfo) {\r\n            newEdge.targetInfo = new InfoText({ property: this.targetInfo.property, cardinality: this.targetInfo.cardinality });\r\n            newEdge.targetInfo.$owner = newEdge;\r\n        }\r\n\r\n        this.$points.forEach(point => {\r\n            newEdge.addPoint(point.x, point.y);\r\n        });\r\n\r\n        let graph = <Graph>this.getRoot();\r\n        if (!graph) {\r\n            return this;\r\n        }\r\n\r\n        // update model. insert the edge exact on the same index, like the old edge\r\n        let idx = graph.$graphModel.edges.indexOf(this);\r\n        graph.$graphModel.removeElement(this.id);\r\n        if (idx > -1) {\r\n            graph.$graphModel.edges.splice(idx, 0, newEdge);\r\n        }\r\n        else {\r\n            graph.$graphModel.edges.push(newEdge);\r\n        }\r\n\r\n        if (!redraw) {\r\n            return newEdge;\r\n        }\r\n\r\n        let svgRoot: Element;\r\n        if (graph) {\r\n            svgRoot = graph.root;\r\n        }\r\n        else {\r\n            svgRoot = document.getElementById('root');\r\n        }\r\n        let newEdgeSvg = newEdge.getSVG();\r\n\r\n        // update graph\r\n        graph.removeElement(this);\r\n        svgRoot.appendChild(newEdgeSvg);\r\n\r\n        // redraw the edge from both sides to get the correct display\r\n        // if the type is edge, so the path can be redraw.\r\n        // if not, so the inherited class redraw the path with his own logic\r\n\r\n        let dontDrawPath: boolean = (type !== 'Edge');\r\n        newEdge.redraw(newEdge.$sNode, dontDrawPath);\r\n        newEdge.redraw(newEdge.$tNode, dontDrawPath);\r\n\r\n        EventBus.register(newEdge, newEdgeSvg);\r\n\r\n        this.sourceInfo = undefined;\r\n        this.targetInfo = undefined;\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n        // redraw the first point\r\n        // check which point is the near to startnode\r\n        let endPoint: Point;\r\n        let recalcPoint: Point;\r\n        let endPointIdx: number;\r\n\r\n        if (this.$sNode.id === startNode.id) {\r\n            recalcPoint = this.$points[0];\r\n            endPointIdx = 1;\r\n        } else if (this.$tNode.id === startNode.id) {\r\n            recalcPoint = this.$points[this.$points.length - 1];\r\n            endPointIdx = this.$points.length - 2;\r\n        }\r\n\r\n        endPoint = this.$points[endPointIdx];\r\n\r\n        // calculate and set new position of point to redraw\r\n        this.calcIntersection(startNode, recalcPoint, endPoint);\r\n\r\n        // remove the 2nd point next to startnode, if the node was dragged upper the point\r\n        if (this.$points.length > 2 && this.$tNode.id === startNode.id && endPoint.y > (startNode.getPos().y + (startNode.getSize().y / 2))) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$tNode.id === startNode.id && this.$points.length === 2) {\r\n            this.calcIntersection(this.$sNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (this.$points.length > 2 && this.$sNode.id === startNode.id && (startNode.getPos().y + (startNode.getSize().y / 2) > endPoint.y)) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$sNode.id === startNode.id && this.$points.length === 2) {\r\n\r\n            this.calcIntersection(this.$tNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (!dontDrawPoints) {\r\n            this.redrawPointsAndInfo();\r\n        }\r\n    }\r\n\r\n    public getPath(): string {\r\n\r\n        if (this.$points.length === 0) {\r\n            return '';\r\n        }\r\n\r\n        let path: string = 'M';\r\n        for (let i = 0; i < this.$points.length; i++) {\r\n            let point: Point = this.$points[i];\r\n            if (i > 0) {\r\n                path += 'L';\r\n            }\r\n            path += Math.floor(point.x) + ' ' + Math.floor(point.y) + ' ';\r\n        }\r\n\r\n        return path;\r\n    }\r\n    public calcInfoPosNew(infoTxt: InfoText, node: Node): Point {\r\n\r\n        if (!infoTxt || !node) {\r\n            return null;\r\n        }\r\n\r\n        // 1. step: get direction\r\n        let startPoint: Point;\r\n        let nextToStartPoint: Point;\r\n        if (this.$sNode.id === node.id) {\r\n            startPoint = this.$points[0];\r\n            nextToStartPoint = this.$points[1];\r\n        }\r\n        else if (this.$tNode.id === node.id) {\r\n            startPoint = this.$points[this.$points.length - 1];\r\n            nextToStartPoint = this.$points[this.$points.length - 2];\r\n        }\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(node, startPoint);\r\n\r\n        let x: number;\r\n        let y: number;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                break;\r\n            case Direction.Right:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x - (infoTxt.getSize().x) - 5;\r\n                break;\r\n            case Direction.Left:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x + 5;\r\n                break;\r\n            case Direction.Down:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        // assign calculated position to infotext\r\n        return new Point(x, y);\r\n    }\r\n\r\n    public clearPoints(): any {\r\n        this.$points = [];\r\n        this.$points = [];\r\n    }\r\n\r\n    public addPoint(x: number, y: number): Point[] {\r\n        this.$points.push(new Point(x, y));\r\n\r\n        return this.$points;\r\n    }\r\n\r\n    protected redrawPointsAndInfo(): void {\r\n        // redraw the edge with the new position\r\n        let path: string = this.getPath();\r\n        this.$pathSvg.setAttributeNS(null, 'd', path);\r\n        this.$pathWideSvg.setAttributeNS(null, 'd', path);\r\n\r\n        this.redrawSourceInfo();\r\n        this.redrawTargetInfo();\r\n    }\r\n\r\n    protected redrawSourceInfo() {\r\n        if (this.sourceInfo) {\r\n            let newPosOfSrc = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.redrawFromEdge(newPosOfSrc);\r\n        }\r\n    }\r\n\r\n    protected redrawTargetInfo() {\r\n        if (this.targetInfo) {\r\n            let newPosOfTarget = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.redrawFromEdge(newPosOfTarget);\r\n        }\r\n    }\r\n\r\n    protected getDirectionOfPointToNode(node: Node, pointNearNode: Point): Direction {\r\n        /*\r\n            Example to calculate the direction of nearest point to Node\r\n\r\n            node\r\n         x1_ _ _ _\r\n          |       |\r\n          |       |. pointNearNode\r\n          |       |\r\n          |_ _ _ x2\r\n\r\n          the calculation would return Direction.Left\r\n        */\r\n\r\n        let x1: Point = node.getPos();\r\n        let x2: Point = new Point((x1.x + node.getSize().x), (x1.y + node.getSize().y));\r\n        let direction: Direction = Direction.Down;\r\n\r\n        if (x1.y >= pointNearNode.y) {\r\n            direction = Direction.Down;\r\n        }\r\n        if (x2.y <= pointNearNode.y) {\r\n            direction = Direction.Up;\r\n        }\r\n        if (x1.x >= pointNearNode.x) {\r\n            direction = Direction.Right;\r\n        }\r\n        if (x2.x <= pointNearNode.x) {\r\n            direction = Direction.Left;\r\n        }\r\n\r\n        return direction;\r\n    }\r\n\r\n    private updateCardinality(node: Node, infoText: InfoText, cardinality: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'cardinality': cardinality });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.cardinality = cardinality;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateCardinality(cardinality);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private updateProperty(node: Node, infoText: InfoText, property: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'property': property });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.property = property;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateProperty(property);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private calcIntersection(startNode: Node, recalcPoint: Point, endPoint: Point): Point {\r\n\r\n        // https://www.mathelounge.de/21534/schnittpunkt-einer-linie-mit-den-randern-eines-rechtecks\r\n        let h = startNode.getSize().y;\r\n        let w = startNode.getSize().x;\r\n\r\n        let x1: number = startNode.getPos().x + (w / 2);\r\n        let y1: number = startNode.getPos().y + (h / 2);\r\n\r\n        let x2: number = endPoint.x;\r\n        let y2: number = endPoint.y;\r\n\r\n        let newX: number = recalcPoint.x;\r\n        let newY: number = recalcPoint.y;\r\n\r\n        if (x2 > x1) {\r\n            newX = x1 + (w / 2);\r\n        }\r\n        else if (x2 < x1) {\r\n            newX = x1 - (w / 2);\r\n        }\r\n        else {\r\n            newX = x1;\r\n        }\r\n\r\n        if ((x2 - x1) !== 0) {\r\n            newY = ((y2 - y1) / (x2 - x1) * (newX - x1)) + y1;\r\n        }\r\n        else {\r\n            if (y1 > y2) {\r\n                newY = startNode.getPos().y;\r\n            }\r\n            else {\r\n                newY = startNode.getPos().y + h;\r\n            }\r\n        }\r\n\r\n        // if the statement is not true, so the intersection is at the horizontal line\r\n        if (!((y1 - (h / 2) <= newY) && newY <= y1 + (h / 2))) {\r\n\r\n            if (y2 > y1) {\r\n                newY = y1 + (h / 2);\r\n            }\r\n            else {\r\n                newY = y1 - (h / 2);\r\n            }\r\n\r\n            if ((x2 - x1) !== 0) {\r\n                let tmp = ((y2 - y1) / (x2 - x1));\r\n                newX = (newY + (tmp * x1) - y1) / tmp;\r\n            }\r\n            else {\r\n                newX = x1;\r\n            }\r\n        }\r\n\r\n        recalcPoint.x = Math.ceil(newX);\r\n        recalcPoint.y = Math.ceil(newY);\r\n\r\n        return null;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Composition extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'black');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { Association } from './Association';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\nimport { Direction } from '../index';\r\n\r\nexport class Generalisation extends Association {\r\n\r\n    public $TARGET_ELEMENT_HEIGHT : number = 12;\r\n    protected $targetElement: Element;\r\n\r\n    public getSVG(): Element {\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction : Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled arrow\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'white'\r\n          };\r\n\r\n        this.$targetElement = this.createShape(attr);\r\n\r\n        group.appendChild(this.$targetElement);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean) : void {\r\n\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint : Point = this.$points[0];\r\n        let direction : Direction = Direction.Up;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if(this.$sNode.id === startNode.id || this.$points.length == 2){\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$targetElement.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint : Point, direction : Direction) : string{\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch(direction){\r\n            case Direction.Up:\r\n            path = `M${startX} ${startY+3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y+12;\r\n            break;\r\n            case Direction.Right:\r\n            path = `M${startX-3} ${startY} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x-12;\r\n            break;\r\n            case Direction.Left:\r\n            path = `M${startX+3} ${startY} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x+12;\r\n            break;\r\n            case Direction.Down:\r\n            path = `M${startX} ${startY-3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y-12;\r\n            break;\r\n            default :\r\n            break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n\r\n}\r\n","import { Generalisation } from './Generalisation';\r\n\r\nexport class Implements extends Generalisation {\r\n\r\n    public getSVG(): Element {\r\n        let group = super.getSVG();\r\n\r\n        this.$pathSvg.setAttributeNS(null, 'stroke-dasharray', '3, 3');\r\n\r\n        return group;\r\n    }\r\n}\r\n","export * from './Association';\r\nexport * from './Aggregate';\r\nexport * from './Aggregation';\r\nexport * from './Composition';\r\nexport * from './Generalisation';\r\nexport * from './Implements';","export * from './edges';\r\nexport * from './nodes';\r\nexport * from './BaseElements';\r\nexport * from './Graph';\r\nexport * from './Model';\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Attribute extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 28.06.2017.\r\n */\r\nimport {Control} from \"../../Control\";\r\n\r\nexport class AutoComplete extends Control {\r\n    private $inputField:HTMLInputElement;\r\n    private $dataList:HTMLDataListElement;\r\n    private $selected:HTMLSelectElement;\r\n    private $items:HTMLDivElement;\r\n    private isMultiple:boolean;\r\n\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        let div:HTMLDivElement = document.createElement('div');\r\n        this.$view = div;\r\n        this.$inputField = document.createElement('input');\r\n        this.$dataList = document.createElement(\"datalist\");\r\n        this.$dataList.id = \"data_\"+this.id;\r\n        this.$inputField.setAttribute(\"list\", \"data_\"+this.id);\r\n        if(data[\"value\"]) {\r\n            let values = data[\"value\"];\r\n            this.isMultiple = data[\"multiple\"] != null;\r\n            let option:HTMLOptionElement;\r\n            if(this.isMultiple) {\r\n                this.$selected = document.createElement(\"select\");\r\n                this.$selected.className = \"hide\";\r\n                this.$selected.multiple = true;\r\n\r\n                this.$selected.id = this.id;\r\n                this.$items = document.createElement(\"div\");\r\n                this.$items.className = \"selectedList\";\r\n                div.appendChild(this.$items);\r\n                this.$inputField.className = \"selectedInput\";\r\n                div.appendChild(this.$selected);\r\n                this.$view[\"style\"].setProperty(\"float\", \"left\");\r\n                let that = this;\r\n                this.$inputField.oninput = function(){that.onChange();}\r\n            } else {\r\n                this.$inputField.id = this.id;\r\n            }\r\n            for (let attr in values) {\r\n                if (!values.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                option = document.createElement(\"option\");\r\n                option.value = values[attr];\r\n                this.$dataList.appendChild(option);\r\n                if(this.isMultiple) {\r\n                    option = document.createElement(\"option\");\r\n                    option.value = values[attr];\r\n                    option.innerHTML = values[attr];\r\n                    this.$selected.appendChild(option);\r\n                }\r\n        }\r\n\r\n            div.appendChild(this.$inputField);\r\n            div.appendChild(this.$dataList);\r\n        }\r\n\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n            if(this.isMultiple) {\r\n                div.appendChild(this.$selected);\r\n            }\r\n        }\r\n\r\n        parent.appendChild(this);\r\n    }\r\n\r\n    public onChange() : void {\r\n        let textValue:string = this.$inputField.value;\r\n        if(textValue.length<1) {\r\n            return;\r\n        }\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == textValue) {\r\n                if(item.selected == false) {\r\n                    item.selected = true;\r\n                    item.defaultSelected = true;\r\n                    let test = document.createElement(\"li\");\r\n                    let that = this;\r\n                    test.onclick = function() {that.onDelete(item.value, test);};\r\n                    test.className = \"selectedItem\";\r\n                    test.innerHTML = item.value;\r\n                    this.$items.appendChild(test);\r\n                    this.$inputField.value = \"\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n    public onDelete(value:string, selectedItem:HTMLLIElement) : void {\r\n        this.$items.removeChild(selectedItem);\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == value ) {\r\n                if(item.selected) {\r\n                    item.selected = false;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","import {Control} from '../../Control';\r\n\r\nexport class BR extends Control {\r\n    public load(json: JSON): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('br');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            this.$view.setAttribute(attr, data[attr]);\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\nexport class Button extends Control {\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        this.$view = document.createElement('button');\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\nimport { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\nimport { Size } from '../index';\r\nimport ClazzProperty from './ClazzProperty';\r\nimport {SymbolLibary} from './Symbol';\r\nimport {StereoType} from './StereoType';\r\nimport {GraphListener} from '../../handlers/GraphListener';\r\n\r\nexport class Class extends Node {\r\n    public attributes: Attribute[] = [];\r\n    public methods: Method[] = [];\r\n    public modifier: string;\r\n    public stereoType: string;\r\n\r\n    protected $attrHeight = 25;\r\n    protected $attrFontSize = 12;\r\n    protected $labelView: Element;\r\n\r\n    constructor(json: JSON | string | Object | any) {\r\n        super(json);\r\n        return this;\r\n    }\r\n\r\n    public load(json?: any) {\r\n        if (!json) {\r\n            json = {};\r\n        }\r\n        let y = this.$labelHeight;\r\n        let labelObj = json.name || json.id || ('New ' + this.property);\r\n\r\n        let width: number = 150;\r\n        width = Math.max(width, Util.sizeOf(labelObj).width + 60);\r\n\r\n        if (json['attributes']) {\r\n            for (let attr of json['attributes']) {\r\n\r\n                let attrObj = new Attribute(attr);\r\n                attrObj.$owner = this;\r\n                this.attributes.push(attrObj);\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(attrObj.toString()).width);\r\n                let listener = new GraphListener(attrObj);\r\n                attrObj.$data.addListener(listener);\r\n            }\r\n        }\r\n        if (json['stereotype']) {\r\n            this.stereoType = json['stereotype'];\r\n        }\r\n        if (json['methods']) {\r\n            for (let method of json['methods']) {\r\n\r\n                let methodObj = new Method(method);\r\n                methodObj.$owner = this;\r\n                this.methods.push(methodObj);\r\n\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(methodObj.toString()).width);\r\n            }\r\n            y += this.$attrHeight;\r\n        }\r\n        this.withSize(width, y);\r\n    }\r\n\r\n    public getAttributes(): Attribute[] {\r\n        return this.attributes;\r\n    }\r\n\r\n    public getMethods(): Method[] {\r\n        return this.methods;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        let icon = SymbolLibary.draw({type: 'Class', property: 'HTML', width: '50', height: '50', transform: 'translate(-26,-21)'});\r\n        return icon;\r\n        // let group = this.createShape(\r\n//    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n//    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos: Point = this.getPos();\r\n        const size: Point = this.getSize();\r\n\r\n        let group = this.createShape({ tag: 'g', id: this.id, class: 'SVGClazz', transform: 'translate(0 0)' });\r\n\r\n        if (this.stereoType) {\r\n            let type = new StereoType(this.stereoType, pos.x, pos.y);\r\n            group.appendChild(type.getSVG());\r\n        }\r\n\r\n        // Full Shape\r\n        let options = null;\r\n        let style;\r\n        let clazzName;\r\n        if (this.$owner['options']) {\r\n            let options = this.$owner['options'];\r\n            if (options) {\r\n                style = options.style;\r\n            }\r\n        }\r\n        // = = = Background = = =\r\n        if (style === 'modern') {\r\n            clazzName = 'ClazzHeader';\r\n        }\r\n        clazzName = 'ClazzHeader';\r\n        const nodeShape = this.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            height: size.y,\r\n            width: size.x,\r\n            rx: 5,\r\n            ry: 5,\r\n            fill: 'none',\r\n            stroke: 'black',\r\n            'stroke-width': 1\r\n        });\r\n        if (clazzName) {\r\n            nodeShape.setAttribute('className', clazzName);\r\n            let styleHeader = Util.getStyle('ClazzHeader');\r\n            // headerHeight = styleHeader.getNumber('height');\r\n        }\r\n\r\n        // = = = LABEL = = =\r\n        let label = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y + this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': this.$labelFontSize,\r\n            fill: 'black'\r\n        });\r\n        label.textContent = this.id;\r\n        this.$labelView = label;\r\n\r\n        group.appendChild(nodeShape);\r\n        group.appendChild(label);\r\n\r\n        // = = = ATTRIBUTES = = =\r\n        if (this.attributes.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorLabelAttr = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight,\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight,\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorLabelAttr);\r\n\r\n            let groupOfAttributes = this.createShape({ tag: 'g', id: (this.id + 'Attributes') });\r\n            groupOfAttributes.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzAttribute');\r\n            group.appendChild(groupOfAttributes);\r\n\r\n            let y = pos.y + this.$labelHeight + this.$attrHeight / 2;\r\n            for (let attr of this.attributes) {\r\n\r\n                let attrSvg = attr.getSVG();\r\n                attr.$owner = this;\r\n\r\n                attrSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                attrSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfAttributes.appendChild(attrSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        // = = = METHODS = = =\r\n        let height = this.attributes.length * this.$attrHeight;\r\n        let y = pos.y + this.$labelHeight + height + this.$attrHeight / 2;\r\n        if (this.methods.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorAttrMethods = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorAttrMethods);\r\n\r\n            let groupOfMethods = this.createShape({ tag: 'g', id: (this.id + 'Methods') });\r\n            groupOfMethods.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzMethod');\r\n            group.appendChild(groupOfMethods);\r\n\r\n            y += this.$attrHeight / 2;\r\n            for (let method of this.methods) {\r\n\r\n                let methodSvg = method.getSVG();\r\n                method.$owner = this;\r\n\r\n                methodSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                methodSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfMethods.appendChild(methodSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        this.$view = group;\r\n        return group;\r\n    }\r\n\r\n    public copy(): Class {\r\n        let copy: Class;\r\n        copy = <Class>super.copy();\r\n\r\n        // copy label\r\n        copy.id = this.id + 'Copy';\r\n\r\n        // copy attributes\r\n        this.attributes.forEach(attr => {\r\n            copy.attributes.push(new Attribute(attr.toString()));\r\n        });\r\n        // copy methods\r\n        this.methods.forEach(method => {\r\n            copy.methods.push(new Method(method.toString()));\r\n        });\r\n        copy.reCalcSize();\r\n\r\n        return copy;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTCLICK,\r\n                EventBus.ELEMENTDRAG, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES, EventBus.RELOADPROPERTIES];\r\n    }\r\n\r\n    public addProperty(value: string, type: string): any {\r\n        if (!this[type] || !value || value.length === 0) {\r\n            return;\r\n        }\r\n\r\n        let extractedValue;\r\n        if (type === 'attributes') {\r\n            extractedValue = new Attribute(value);\r\n        }\r\n        else if (type === 'methods') {\r\n            extractedValue = new Method(value);\r\n        }\r\n\r\n        for (let valueOfType of this[type]) {\r\n            if (valueOfType.toString() === extractedValue.toString()) {\r\n                alert(extractedValue.toString() + ' already exists.');\r\n                extractedValue = undefined;\r\n                return;\r\n            }\r\n        }\r\n\r\n        this[type].push(extractedValue);\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        return extractedValue;\r\n    }\r\n\r\n    public addAttribute(value: string): Attribute {\r\n        return this.addProperty(value, 'attributes');\r\n    }\r\n\r\n    public addAttributeObj(attr: Attribute): Attribute[] {\r\n        this.attributes.push(attr);\r\n        return this.getAttributes();\r\n    }\r\n\r\n    public addMethodObj(method: Method): Method[] {\r\n        this.methods.push(method);\r\n        return this.getMethods();\r\n    }\r\n\r\n    public addMethod(value: string): Method {\r\n        return this.addProperty(value, 'methods');\r\n    }\r\n\r\n    public removeAttribute(attr: Attribute): void {\r\n        let idx = this.attributes.indexOf(attr);\r\n        this.attributes.splice(idx, 1);\r\n    }\r\n\r\n    public removeMethod(method: Method): void {\r\n        let idx = this.methods.indexOf(method);\r\n        this.methods.splice(idx, 1);\r\n    }\r\n\r\n    public removeProperty(property: ClazzProperty): void {\r\n\r\n        if (property instanceof Attribute) {\r\n            this.removeAttribute(<Attribute>property);\r\n        }\r\n\r\n        if (property instanceof Method) {\r\n            this.removeMethod(<Method>property);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n        let hasSizeChanged: [boolean, Size] = this.hasSizeChanged();\r\n\r\n        if (drawOnlyIfSizeChanged) {\r\n            if (!hasSizeChanged[0]) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n\r\n        // redraw only this clazz\r\n        this.$owner.$view.removeChild(this.$view);\r\n        let newSvg = this.getSVG();\r\n        this.$owner.$view.appendChild(newSvg);\r\n        this.$view = newSvg;\r\n        EventBus.register(this, newSvg);\r\n\r\n        this.redrawEdges();\r\n    }\r\n\r\n    public hasSizeChanged(): [boolean, Size] {\r\n        let oldSize = { width: this.getSize().x, height: this.getSize().y };\r\n        let newSize = this.reCalcSize();\r\n\r\n        // size doenst changed, so nothing to redraw\r\n        if (oldSize.width === newSize.width && oldSize.height === newSize.height) {\r\n            return [false, newSize];\r\n        }\r\n\r\n        return [true, newSize];\r\n    }\r\n\r\n    public updateLabel(newLabel: string): void {\r\n        if (this.$labelView) {\r\n            this.$labelView.textContent = newLabel;\r\n        }\r\n\r\n        // update label in all edges\r\n        this.$edges.forEach(edge => {\r\n            if (this.id === edge.$sNode.id) {\r\n                edge.source = newLabel;\r\n            }\r\n            else if (this.id === edge.$tNode.id) {\r\n                edge.target = newLabel;\r\n            }\r\n        });\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        this.reDraw(true);\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.modifier = modifier;\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reCalcSize(): Size {\r\n        // label\r\n        let newWidth = 150;\r\n        newWidth = Math.max(newWidth, Util.sizeOf(this.id).width + 30);\r\n\r\n        // attributes\r\n        this.attributes.forEach(attrEl => {\r\n\r\n            let widthOfAttr;\r\n            if (attrEl.$view) {\r\n                widthOfAttr = attrEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfAttr = Util.sizeOf(attrEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfAttr + 15);\r\n        });\r\n\r\n        // methods\r\n        this.methods.forEach(methodEl => {\r\n            let widthOfMethod;\r\n            if (methodEl.$view) {\r\n                widthOfMethod = methodEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfMethod = Util.sizeOf(methodEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfMethod + 15);\r\n        });\r\n\r\n        // TODO: height has to be calculated by font-size\r\n        this.getSize().x = newWidth;\r\n        this.getSize().y = this.$labelHeight + ((this.attributes.length + this.methods.length) * this.$attrHeight)\r\n            + this.$attrHeight;\r\n\r\n        let newSize = { width: newWidth, height: this.getSize().y };\r\n\r\n        return newSize;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    private getModernStyle(): Element {\r\n        let width, height, id, size, z, item, rect, g, board, styleHeader, headerHeight, x, y;\r\n        board = this.getRoot()['board'];\r\n        styleHeader = Util.getStyle('ClazzHeader');\r\n        headerHeight = styleHeader.getNumber('height');\r\n        width = 0;\r\n        height = 10 + headerHeight;\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].getType().toLowerCase() === 'objectdiagram') {\r\n            id = this.id.charAt(0).toLowerCase() + this.id.slice(1);\r\n            item = 'Object';\r\n        } else {\r\n            id = this.id;\r\n            item = 'Class';\r\n            if (this['counter']) {\r\n                id += ' (' + this['counter'] + ')';\r\n            }\r\n        }\r\n        g = Util.create({tag: 'g', model: this});\r\n        size = Util.sizeOf(id, this);\r\n        width = Math.max(width, size.width);\r\n        if (this.attributes && this.attributes.length > 0) {\r\n            height = height + this.attributes.length * 25;\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.attributes[z], this).width);\r\n            }\r\n        } else {\r\n            height += 20;\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            height = height + this.methods.length * 25;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.methods[z], this).width);\r\n            }\r\n        }\r\n        width += 20;\r\n\r\n        let pos = this.getPos();\r\n        y = pos.y;\r\n        x = pos.x;\r\n\r\n        rect = {\r\n            tag: 'rect',\r\n            'width': width,\r\n            'height': height,\r\n            'x': x,\r\n            'y': y,\r\n            'class': item + ' draggable',\r\n            'fill': 'none'\r\n        };\r\n        g.appendChild(Util.create(rect));\r\n        g.appendChild(Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            'x': x,\r\n            'y': y,\r\n            height: headerHeight,\r\n            'width': width,\r\n            'class': 'ClazzHeader'\r\n        }));\r\n\r\n        item = Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'class': 'InfoText',\r\n            'text-anchor': 'right',\r\n            'x': x + width / 2 - size.width / 2,\r\n            'y': y + (headerHeight / 2) + (size.height / 2),\r\n            'width': size.width\r\n        });\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].type.toLowerCase() === 'objectdiagram') {\r\n            item.setAttribute('text-decoration', 'underline');\r\n        }\r\n        item.appendChild(document.createTextNode(id));\r\n\r\n        g.appendChild(item);\r\n        g.appendChild(Util.create({\r\n            tag: 'line',\r\n            x1: x,\r\n            y1: y + headerHeight,\r\n            x2: x + width,\r\n            y2: y + headerHeight,\r\n            stroke: '#000'\r\n        }));\r\n        y += headerHeight + 20;\r\n\r\n        if (this.attributes) {\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': (x + 10),\r\n                    'y': y,\r\n                    value: this.attributes[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n            if (this.attributes.length > 0) {\r\n                y -= 10;\r\n            }\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            g.appendChild(Util.create({tag: 'line', x1: x, y1: y, x2: x + width, y2: y, stroke: '#000'}));\r\n            y += 20;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': x + 10,\r\n                    'y': y,\r\n                    value: this.methods[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n        }\r\n        return g;\r\n    }\r\n}\r\n","import {Util} from '../../util';\r\nimport {DiagramElement} from '../BaseElements';\r\nimport Data from '../../Data';\r\n\r\nexport default class ClazzProperty extends DiagramElement {\r\n\r\n    // Public (+)\r\n    // Private (-)\r\n    // Protected (#)\r\n    // Package (~)\r\n\r\n    public $data = new Data();\r\n//    public modifier: string = '+';\r\n//    public name: string;\r\n//    public type: string;\r\n//    public value: string;\r\n\r\n    constructor(data: any | JSON) {\r\n        super();\r\n        this.$data.setValue('modifier', '+');\r\n        this.$data.setValue('name', null);\r\n        this.$data.setValue('type', null);\r\n        this.$data.setValue('value', null);\r\n        this.extractData(data);\r\n    }\r\n\r\n    public update(data: any | JSON): void {\r\n        this.extractData(data);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.$data.setValue('modifier', modifier);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateType(type: string): void {\r\n        this.$data.setValue('type', type);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateValue(value: string): void {\r\n        this.$data.setValue('value', value);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateName(name: string): void {\r\n        this.$data.setValue('name', name);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public getName(): string {\r\n        return this.$data.getValue('name');\r\n    }\r\n\r\n    public getModifier(): string {\r\n        return this.$data.getValue('modifier');\r\n    }\r\n\r\n    public getType(): string {\r\n        return this.$data.getValue('type');\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let attrText = {\r\n            tag: 'text',\r\n            'text-anchor': 'start',\r\n            'alignment-baseline': 'middle',\r\n        };\r\n\r\n        let attrSvg = Util.createShape(attrText);\r\n        attrSvg.textContent = this.toString();\r\n\r\n        this.$view = attrSvg;\r\n\r\n        return attrSvg;\r\n    }\r\n\r\n    public toString(): string {\r\n        let value = this.$data.getValue('value');\r\n        let result = this.$data.getValue('modifier') + ' ';\r\n        result += this.$data.getValue('name') + ' : ';\r\n        result += this.$data.getValue('type');\r\n        if (value && value.length > 0) {\r\n            result += ' = ' + this.$data.getValue('value');\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.$data.setValue('type', data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.$data.setValue('name', data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.$data.setValue('modifier', data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n\r\n            // e.g. name : string or name:string\r\n            let dataSplitted = data.split(':');\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                let name;\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.$data.setValue('modifier', firstChar);\r\n                    name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                }\r\n                else {\r\n                    name = modifierAndNameSplitted;\r\n                }\r\n                // delete whitespaces in name\r\n                name = name.replace(/ /g, '_');\r\n\r\n                this.$data.setValue('name', name);\r\n                let type = dataSplitted[1].trim() || 'String';\r\n\r\n                // if the type was entered with a small begin letter\r\n                if (type.toLowerCase() === 'string') {\r\n                    type = 'String';\r\n                }\r\n                // delete whitespaces in type\r\n                type = type.replace(/ /g, '_');\r\n                this.$data.setValue('type',  type);\r\n            } else {\r\n                dataSplitted = data.split('=');\r\n                if (dataSplitted && dataSplitted.length === 2) {\r\n                    // modifer (and or) name\r\n                    let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                    // first char is +, - or #\r\n                    let firstChar = modifierAndNameSplitted[0];\r\n                    let name;\r\n                    if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                        this.$data.setValue('modifier', firstChar);\r\n                        name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                    }\r\n                    else {\r\n                        name = modifierAndNameSplitted;\r\n                    }\r\n                    // delete whitespaces in name\r\n                    name = name.replace(/ /g, '_');\r\n\r\n                    this.$data.setValue('name', name);\r\n                    let value = dataSplitted[1].trim() || '\"\"';\r\n                    this.$data.setValue('value', value);\r\n                    this.$data.setValue('type', typeof value);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected updateTextOfView() {\r\n        if (this.$view) {\r\n            this.$view.textContent = this.toString();\r\n        }\r\n        if (this.$owner) {\r\n            Util.saveToLocalStorage(this.$owner.$owner);\r\n        }\r\n    }\r\n}\r\n","import {Node} from \"./Node\";\r\n/**\r\n * Created by Stefan on 29.03.2017.\r\n */\r\n\r\nexport class Dice extends Node {\r\n    private value: number;\r\n    private max: number = 6;\r\n    private $animation: SVGElement;\r\n    private $zoom: number = 0.6;\r\n    private $border: number = 0.2;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super(data);\r\n        this.withSize(100, 100);\r\n    }\r\n\r\n    public setNumber(number: number) {\r\n        this.value = number;\r\n        this.refresh();\r\n    }\r\n\r\n    public refresh() {\r\n        if (this.$view) {\r\n            this.reset();\r\n            let group = this.createPointValue();\r\n            if (group) {\r\n                this.$view.appendChild(group);\r\n            }\r\n        }\r\n    }\r\n\r\n    public reset() {\r\n        if (this.$view) {\r\n            while (this.$view.children.length > 1) {\r\n                if(this.$view.children.item(this.$view.children.length - 1).tagName!== \"animateTransform\") {\r\n                    console.log(this.$view.children.item(this.$view.children.length - 1));\r\n                    this.$view.removeChild(this.$view.children.item(this.$view.children.length - 1));\r\n                }else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let dice: SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x + size.x * this.$border,\r\n            y: pos.y + size.y * this.$border,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y * this.$zoom,\r\n            width: size.x * this.$zoom,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        dice.appendChild(this.createShape(attr));\r\n\r\n        let group = this.createPointValue();\r\n        if (group) {\r\n            dice.appendChild(group);\r\n        }\r\n\r\n        this.$view = dice;\r\n        return dice;\r\n    }\r\n\r\n    public animationTimeout(newValues: number[]) {\r\n        if(newValues.length>0) {\r\n            let newValue = newValues.shift();\r\n            this.setNumber(newValue);\r\n            let that=this;\r\n            setTimeout(function() {that.animationTimeout(newValues)}, 100);\r\n        }\r\n    }\r\n\r\n    public roll() {\r\n        this.startAnimation();\r\n        let values:number[]=[];\r\n        let i:number;\r\n        for(i=1;i<this.max;i++) {\r\n            values.push(i);\r\n        }\r\n        for(i=this.max;i>0;i--) {\r\n            values.push(i);\r\n        }\r\n        let that=this;\r\n        values.push( Math.floor(Math.random() * this.max)+1 );\r\n        setTimeout(function() {that.animationTimeout(values)}, 100);\r\n    }\r\n    public startAnimation() {\r\n        if(this.$animation) {\r\n            return;\r\n        }\r\n        let center = this.getPos().x+this.getSize().x /2;\r\n        const attr = {\r\n            tag: 'animateTransform',\r\n            attributeType: \"xml\",\r\n            attributeName:\"transform\",\r\n            type:\"rotate\",\r\n            dur: \"1s\",\r\n            repeatCount:\"1\",\r\n            from:\"0 \"+center+\" \"+center,\r\n            to:\"360 \"+center+\" \"+center\r\n        };\r\n        this.$animation = <SVGElement>this.createShape(attr);\r\n        this.$view.appendChild(this.$animation);\r\n    }\r\n\r\n    public stopAnimation() {\r\n        if(this.$animation) {\r\n            this.$view.removeChild(this.$animation);\r\n            this.$animation = null;\r\n        }\r\n    }\r\n\r\n    public createPointValue() :SVGElement {\r\n        if (this.value == 1) {\r\n           return this.getCircle(2, 2);\r\n        } else if (this.value == 2) {\r\n            return this.getCircle(1, 1, 3, 3);\r\n        } else if (this.value == 3) {\r\n            return this.getCircle(1, 1, 2, 2, 3, 3);\r\n        } else if (this.value == 4) {\r\n            return this.getCircle(1, 1, 1, 3, 3, 1, 3, 3);\r\n        } else if (this.value == 5) {\r\n            return this.getCircle(1, 1, 1, 3, 2, 2, 3, 1, 3, 3);\r\n        } else if (this.value == 6) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 7) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 2, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 8) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 9) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private getCircle(...values:number[]) : SVGElement {\r\n        if (values.length % 2 > 0) {\r\n            return null;\r\n        }\r\n        let size = this.getSize();\r\n        let pos = this.getPos();\r\n        //FIXME let group:SVGElement = <SVGElement>this.createShape({tag: 'g', transform: 'translate(0 0)', height: size.y, width: size.x});\r\n        let group:SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n\r\n\r\n        for (let i: number = 0; i < values.length; i += 2) {\r\n            group.appendChild(this.createCircle(values[i], values[i + 1]));\r\n        }\r\n        return group;\r\n    }\r\n    private createCircle(x:number, y:number) : SVGElement {\r\n        let size = this.getSize();\r\n        let radius = size.x / 10*this.$zoom;\r\n        let border = size.y*this.$border;\r\n        let zoom = size.y*this.$zoom;\r\n        const attr = {\r\n            tag: 'circle',\r\n            r : radius,\r\n            cx: (size.x*this.$zoom * x) / 4 + border,\r\n            cy: (size.y*this.$zoom * y) / 4 + border,\r\n            stroke:\"black\",\r\n            \"stroke-width\":\"3\",\r\n            fill:\"red\",\r\n            style: 'fill:black;stroke:black;stroke-width:2'\r\n        };\r\n        return <SVGElement>this.createShape(attr);\r\n    }\r\n}","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\n\r\nexport class Div extends Control {\r\n    private className: string;\r\n\r\n    public load(data:JSON|any): any {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = <string>data;\r\n        } else {\r\n            id = data.id;\r\n            this.className = data.class;\r\n            this.property = data.property;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let div: HTMLElement = document.getElementById(id);\r\n\r\n        if (!this.property) {\r\n            // if(inputField){\r\n            // TODO disuss how to decide, which property we should listen on...\r\n            // this.property = id;\r\n            this.property = div.getAttribute('Property');\r\n            // }\r\n        }\r\n\r\n        if (div instanceof HTMLDivElement) {\r\n            this.$view = div;\r\n        } else {\r\n            if (!div) {\r\n                this.$view = document.createElement('div');\r\n                this.$view.setAttribute('id', this.id);\r\n                this.$view.setAttribute('property', this.property);\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists+\r\n        if (data.hasOwnProperty('property')) {\r\n            this.setProperty(data['property']);\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        this.$model = entity;\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.className || entity.hasProperty(this.className)) {\r\n                if (entity.id === this.property.split('.')[0]) {\r\n                    entity.addListener(this, this.className);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        this.$view.innerHTML = <string>newValue;\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Form extends Control {\r\n    // private applyingChange: boolean = false;\r\n    private children: Object = {};\r\n    // private property: string = \"\";\r\n\r\n    /**\r\n     * Data should look like the following json:\r\n     *\r\n     * <pre>{\r\n     *      id: \"t1\",\r\n     *      control: \"form\",\r\n     *      elements: [\r\n     *          {id: \"inputField1\", property: \"talk\"},\r\n     *          {id: \"inputField2\", property: \"room\"}\r\n     *      ]\r\n     * }</pre>\r\n     * @param data\r\n     */\r\n    public load(data: any) {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let form: HTMLElement = document.getElementById(id);\r\n\r\n        if (form instanceof HTMLFormElement) {\r\n            this.$view = form;\r\n            if (this.$view.hasAttribute('property')) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            if (!form) {\r\n                this.$view = document.createElement('form');\r\n                this.$view.setAttribute('id', this.id);\r\n\r\n                if (data.hasOwnProperty('property')) {\r\n                    this.property = data['property'];\r\n                }\r\n\r\n                // add all the attributes to the form element\r\n                for (let attr in data) {\r\n                    if (data.hasOwnProperty(attr) === false) {\r\n                        continue;\r\n                    }\r\n                    if (attr === 'elements') {\r\n                        continue;\r\n                    }\r\n                    this.$view.setAttribute(attr, data[attr]);\r\n                }\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists\r\n        let objId = this.property;\r\n        let hasItem = this.$owner.hasItem(objId);\r\n        if (hasItem) {\r\n            let item = this.$owner.getItem(objId);\r\n            item.addListener(this);\r\n            this.$model = item;\r\n        }\r\n\r\n        // now create all the sub input controls\r\n        for (let field of data.elements) {\r\n            // this.createField(field);\r\n            if (field.hasOwnProperty('property')) {\r\n                let property = field['property'];\r\n                property = this.property + '.' + property;\r\n                field['property'] = property;\r\n            }\r\n            if (!field.hasOwnProperty('class')) {\r\n                field['class'] = 'input';\r\n            }\r\n\r\n            // let the Bridge load the subControl\r\n            let control: Control = this.$owner.load(field, this);\r\n\r\n            // add subControl to children\r\n            this.children[control.getId()] = control;\r\n        }\r\n\r\n    }\r\n\r\n    public setProperty(id: string): void {\r\n        this.property = id;\r\n        let keys: string[] = Object.keys(this.children);\r\n        for (let k = 0; k < keys.length; k++) {\r\n            let key = keys[k];\r\n            let childControl = this.children[key];\r\n            // only set Property, if there is a Property defined before\r\n            if (childControl.property) {\r\n                childControl.setProperty(this.property + '.' + childControl.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object,  oldValue?: Object): boolean {\r\n        if (this.$owner != null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    /**\r\n     * Here we create the form elements and put all the attributes to them in order for the Control only having to load\r\n     * the data were appending here. Alternative would be loading with the bridge and afterwards setting\r\n     * the owner to the form instead of the body..\r\n     * @param field\r\n     */\r\n    /*private createField(field: Object) {\r\n     let control = 'input';\r\n     if (field.hasOwnProperty('class')) {\r\n     control = field['class'];\r\n     }\r\n     let input = document.createElement(control);\r\n     input.setAttribute('class', control);\r\n     let id: string;\r\n     if (!field.hasOwnProperty('id')) {\r\n     // TODO: not the best solution for generating unique id's for forms...\r\n     id = this.$owner.getId();\r\n     field['id'] = id;\r\n     }\r\n     if (field.hasOwnProperty('property')) {\r\n     let property = field['property'];\r\n     property = this.id + '.' + property;\r\n     input.setAttribute('property', property);\r\n     }\r\n     for (let attr in field) {\r\n     if (attr === 'property' || attr === 'class' || !field.hasOwnProperty(attr)) {\r\n     continue;\r\n     }\r\n     input.setAttribute(attr, field[attr]);\r\n     }\r\n\r\n     this.$viewElement.appendChild(input);\r\n\r\n     let newcontrol: Control = this.$owner.load(field['id']);\r\n     this.children[newcontrol.getId()] = newcontrol;\r\n     }*/\r\n}\r\n","/**\r\n * Created by Stefan on 01.03.2017.\r\n */\r\nimport {Control} from '../../Control';\r\n\r\nexport class HTML extends Control {\r\n    constructor(data: JSON|Object|any) {\r\n        super();\r\n\r\n        let id: string;\r\n        let tag: string;\r\n\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            data = {};\r\n        } else if (data) {\r\n            id = data.id;\r\n        }\r\n        if (id) {\r\n            this.id = id;\r\n            this.$view = document.getElementById(id);\r\n        }\r\n        if (!this.$view) {\r\n            if (data) {\r\n                tag = data['tag'] || 'div';\r\n            } else {\r\n                tag = 'div';\r\n            }\r\n            this.$view = document.createElement(tag);\r\n            let parent = document.getElementsByTagName('body')[0];\r\n            parent.appendChild(this.$view);\r\n        }\r\n        if (!parent) {\r\n            return;\r\n        }\r\n        this.writeAttribute(data, this.$view);\r\n    }\r\n\r\n    private writeAttribute(properties: Object, entity?: any) {\r\n        let lowKey;\r\n        if (!entity) {\r\n            lowKey = properties['tag'] || 'div';\r\n            entity = document.createElement(lowKey);\r\n        }\r\n        for (let key in properties) {\r\n            if (!properties.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            lowKey = key.toLowerCase();\r\n            if (properties[key] === null) {\r\n                entity.setAttribute(key, '');\r\n                continue;\r\n            }\r\n\r\n            if (lowKey === 'tag' || lowKey.charAt(0) === '$' || lowKey === '$graphModel' || lowKey === 'class') {\r\n                continue;\r\n            }\r\n            if (lowKey === 'children') {\r\n                if (Array.isArray(properties[key])) {\r\n                    for (let item in properties[key]) {\r\n                        if (properties[key].hasOwnProperty(item) === false) {\r\n                            continue;\r\n                        }\r\n                        let child = this.writeAttribute(item);\r\n                        if (child) {\r\n                            entity.appendChild(child);\r\n                        }\r\n                    }\r\n                } else {\r\n                    let child = this.writeAttribute(properties[key]);\r\n                    if (child) {\r\n                        entity.appendChild(child);\r\n                    }\r\n                }\r\n                continue;\r\n            }\r\n            entity[key] = properties[key];\r\n        }\r\n        return entity;\r\n    }\r\n}\r\n","import { Point } from '../BaseElements';\r\nimport { Util } from '../../util';\r\nimport { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\n\r\nexport class InfoText extends Node {\r\n\r\n    public cardinality: string = '';\r\n    private $heightOfOneTextItem: number;\r\n    private $cardinalitySvg: Element;\r\n    private $propertySvg: Element;\r\n    private $rectBackground: Element;\r\n\r\n    constructor(info: any) {\r\n        super(info);\r\n        if (typeof (info) === 'string') {\r\n            this.id = info;\r\n        } else {\r\n            if (info.property) {\r\n                this.property = info.property;\r\n            }\r\n            if (info.cardinality) {\r\n                this.cardinality = info.cardinality;\r\n            }\r\n        }\r\n        this.$isDraggable = true;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n    }\r\n\r\n    public updateCardinality(cardinality: string): void {\r\n        this.cardinality = cardinality;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (this.$rectBackground) {\r\n            this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n            this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n        }\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((cardinality.length === 0 && this.property.length > 0) || !this.$cardinalitySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$cardinalitySvg) {\r\n            this.$cardinalitySvg.textContent = cardinality;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.property.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    public updateProperty(property: string): void {\r\n        this.property = property;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((property.length === 0 && this.cardinality.length > 0) || !this.$propertySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$propertySvg) {\r\n            this.$propertySvg.textContent = property;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.cardinality.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos: Point = this.getPos();\r\n        let group = Util.create({ tag: 'g', class: 'SVGEdgeInfo', transform: 'translate(0, 0)' });\r\n\r\n        // append rect as background for text items\r\n        this.$rectBackground = Util.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y - this.$heightOfOneTextItem + 3,\r\n            width: this.getSize().x,\r\n            height: this.getSize().y,\r\n            fill: '#DDD',\r\n            'stroke-width': 0,\r\n            rx: '5',\r\n            ry: '5'\r\n        });\r\n        group.appendChild(this.$rectBackground);\r\n\r\n        let y = pos.y;\r\n        if (this.property) {\r\n            // property\r\n            this.$propertySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$propertySvg.textContent = this.property;\r\n            group.appendChild(this.$propertySvg);\r\n\r\n            y += this.$heightOfOneTextItem;\r\n        }\r\n\r\n        // cardinality\r\n        if (this.cardinality) {\r\n            this.$cardinalitySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$cardinalitySvg.textContent = this.cardinality;\r\n            group.appendChild(this.$cardinalitySvg);\r\n        }\r\n\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        let cardinalityAvailable = this.cardinality && this.cardinality.length > 0;\r\n        let propertyAvailable = this.property && this.property.length > 0;\r\n\r\n        return !propertyAvailable && !cardinalityAvailable;\r\n    }\r\n\r\n    public redrawFromEdge(newPos: Point): void {\r\n\r\n        if (!newPos) {\r\n            return;\r\n        }\r\n\r\n        let oldPos = this.getPos();\r\n\r\n        // get difference between new and the old position\r\n        let diffPos = new Point();\r\n        diffPos.x = newPos.x - oldPos.x;\r\n        diffPos.y = newPos.y - oldPos.y;\r\n\r\n        // get translate information\r\n        let translation = this.$view.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        let sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        // set new traslation values\r\n        let newTransX = (sx + diffPos.x);\r\n        let newTransY = (sy + diffPos.y);\r\n        this.$view.setAttributeNS(null, 'transform', 'translate(' + newTransX + ' ' + newTransY + ')');\r\n\r\n        // set new position of svg\r\n        this.getPos().x = newPos.x;\r\n        this.getPos().y = newPos.y;\r\n    }\r\n\r\n    public getText(): string {\r\n        let infoTxt: string = '';\r\n\r\n        if (this.property) {\r\n            infoTxt = this.property;\r\n        }\r\n        if (this.cardinality) {\r\n            if (infoTxt.length > 0) {\r\n                infoTxt += '\\n';\r\n            }\r\n            infoTxt += this.cardinality;\r\n        }\r\n\r\n        return infoTxt;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    private calcSize(): Point {\r\n        let text: string = this.getText();\r\n        let items: Array<string> = text.split('\\n');\r\n\r\n        let maxSize = new Point(0, 0);\r\n        if (text.length === 0) {\r\n            return maxSize;\r\n        }\r\n\r\n        for (let i = 0; i < items.length; i += 1) {\r\n            // calculate size\r\n            let sizeOfText: ClientRect = Util.sizeOf(items[i]);\r\n            maxSize.x = Math.max(maxSize.x, sizeOfText.width);\r\n            maxSize.y += sizeOfText.height;\r\n\r\n            this.$heightOfOneTextItem = sizeOfText.height;\r\n        }\r\n\r\n        return maxSize;\r\n    }\r\n    private resetAllSvgElements() {\r\n        this.$cardinalitySvg = undefined;\r\n        this.$view = undefined;\r\n        this.$propertySvg = undefined;\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\nimport {PropertyBinder} from '../../PropertyBinder';\r\n\r\nexport class Input extends Control {\r\n    private type: string;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data = super.initViewDataProperties(oldData);\r\n        if ('checkbox' === this.type || 'radio' === this.type) {\r\n            data.addFrom('checked', oldData);\r\n        }\r\n        data.addFrom('value', oldData);\r\n        data.addFrom('type', oldData);\r\n        return data;\r\n    }\r\n\r\n    public load(data: any) {\r\n        let id: string;\r\n        let inputField: HTMLElement;\r\n        let useData: boolean;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            useData = true;\r\n        } else {\r\n            id = data.id;\r\n            if (data.type) {\r\n                this.setType(data['type']);\r\n            } else {\r\n                this.setType('text');\r\n            }\r\n            if (data.hasOwnProperty('property')) {\r\n                this.setProperty(data['property']);\r\n            }\r\n            useData = false;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n\r\n        inputField = document.getElementById(id);\r\n\r\n        if (useData) {\r\n            if (inputField) {\r\n                // TODO disuss how to decide, which property we should listen on...\r\n                // this.property = id;\r\n                if (inputField.hasAttribute('Property')) {\r\n                    this.setProperty(inputField.getAttribute('Property'));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (inputField instanceof HTMLInputElement) {\r\n            this.setView(inputField);\r\n            this.type = inputField.type;\r\n            // useData = false;\r\n        } else {\r\n            if (!inputField) {\r\n                this.setView(document.createElement('input'));\r\n                this.$viewData = this.initViewDataProperties(this.$viewData);\r\n                // append viewListener\r\n                // this.$view.addEventListener('change', this.$viewListener);\r\n                if (typeof(data) !== 'string') {\r\n                    for (let attr in data) {\r\n                        if (data.hasOwnProperty(attr) === false) {\r\n                            continue;\r\n                        }\r\n                        // this.$view[attr] = data[attr];\r\n                        this.$viewData.setValue(attr, data[attr]);\r\n                    }\r\n                } else {\r\n                    if (this.type) {\r\n                        this.$view.setAttribute('type', this.type);\r\n                    }\r\n                    if (data.hasOwnProperty('class')) {\r\n                        this.$view.setAttribute('class', data['class']);\r\n                    }\r\n                    this.$view.setAttribute('id', this.id);\r\n                    this.$view.setAttribute('property', this.property);\r\n                }\r\n\r\n                if (data.value) {\r\n                    // if theres a value at the control, we want to change the model to the new value\r\n                    if (this.$model) {\r\n                        this.$model.setValue(this.lastProperty, data.value);\r\n                    }\r\n                }\r\n                if (this.$model) {\r\n                    PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                }\r\n\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (this.property && entity) {\r\n            if (entity.id === this.property.split('.')[0]) {\r\n                this.$model = entity;\r\n                PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                // entity.addListener(this, this.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n    // TODO FIXME protected updateElement(property: string, value: string) {\r\n    //     if (this.$view instanceof HTMLInputElement) {\r\n    //         if (value != null) {\r\n    //             if(property == this.lastProperty) {\r\n    //                 (<HTMLInputElement>this.$view)[this.getStandardProperty()] = value;\r\n    //             } else {\r\n    //                 // this.getRoot().setValue(this, property, value, (<HTMLInputElement>this.$view)[property]);\r\n    //                 (<HTMLInputElement>this.$view)[property] = value;\r\n    //             }\r\n    //         } else {\r\n    //             delete (<HTMLInputElement>this.$view)[property];\r\n    //         }\r\n    //     }\r\n    // }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            super.controlChanged(ev);\r\n        }\r\n// <<<<<<< HEAD\r\n//             let newVal = element[this.getStandardProperty()];\r\n//             if (this.isKeyOnly()) {\r\n//                 // we expect, element[this.lastProperty] to be boolean:\r\n//                 if (!newVal) {\r\n//                     newVal = null;\r\n//                 }\r\n//             } else {\r\n//             }\r\n        // let $graphModel;\r\n        // let value;\r\n        /*if (this.$graphModel) {\r\n            $graphModel = this.$graphModel;\r\n            value = this.$graphModel.getValue(this.lastProperty);\r\n        } else {\r\n            $graphModel = this;\r\n            if (this.$view) {\r\n                value = this.$view[this.lastProperty];\r\n            }\r\n        }*/\r\n        // this.$model.setValue(this.lastProperty, newVal);\r\n        // this.propertyChange(this.$graphModel,this.lastProperty, this.$graphModel.getValue(this.lastProperty), newVal);\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n// =======\r\n        // let newVal = element[this.lastProperty];\r\n        // if (this.isKeyOnly()) {\r\n        //     // we expect, element[this.lastProperty] to be boolean:\r\n        //     if (!newVal) {\r\n        //         newVal = null;\r\n        //     }\r\n        // } else {\r\n        // }\r\n        // let $graphModel;\r\n        // let value;\r\n\r\n        // $graphModel = this.getViewData();\r\n        // if (this.$graphModel) {\r\n        //     $graphModel = this.$graphModel;\r\n        //     value = this.$graphModel.getValue(this.lastProperty);\r\n        // } else {\r\n        //     $graphModel = this;\r\n        //     if (this.$view) {\r\n        //         value = this.$view[this.lastProperty];\r\n        //     }\r\n        // }\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n//            this.saveViewInData();\r\n// >>>>>>> addOldFunctions\r\n//         } else {\r\n//             console.log('value does not match the pattern...');\r\n//         }\r\n    }\r\n\r\n    public setType(type: string): void {\r\n        let oldValue: string = this.type;\r\n        if (oldValue === type) {\r\n            return;\r\n        }\r\n        if (type === 'radio') {\r\n            this.$viewData.setValue('checked', null);\r\n        } else {\r\n            this.$viewData.removeKey('checked');\r\n        }\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\n\r\nexport class Label extends Control {\r\n    public load(data: JSON): any {\r\n        this.createControl(this.$owner, data);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('label');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr === 'textContent') {\r\n                this.$view.textContent = data['textContent'];\r\n            } else {\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Method extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.updateType(data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.updateType(data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.updateType(data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n            // e.g. setName() : string or name:string\r\n            let dataSplitted = data.split(':');\r\n\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }\r\n                else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType(dataSplitted[1].trim() || 'void');\r\n            }\r\n            // set default return type of void\r\n            else {\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = data.trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }  else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType('void');\r\n            }\r\n        }\r\n\r\n        if (Util.includes(this.$data.getValue('name'), '(') && !Util.includes(this.$data.getValue('name'), ')') === false) {\r\n            this.$data.setValue('name', this.$data.getValue('name') + '()');\r\n        }\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\nimport {Association} from '../edges';\r\nimport { GraphModel } from '..';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\n\r\nexport class Node extends DiagramElement {\r\n    public $edges: Association[] = [];\r\n    public $minWidth: number = 150;\r\n    public $minheight: number = 25;\r\n    public $defaulEdgeType: string;\r\n\r\n    constructor(data: JSON|string|Object|any) {\r\n        super();\r\n\r\n        // default size\r\n        this.withSize(this.$minWidth, this.$minheight);\r\n\r\n        if (data) {\r\n            if (data['x'] && data['y']) {\r\n                this.withPos(data['x'], data['y']);\r\n            }\r\n            if (data['width'] || data['height']) {\r\n                this.withSize(data['width'], data['height']);\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos = this.getPos();\r\n        const size = this.getSize();\r\n\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x - size.x / 2,\r\n            y: pos.y - size.y / 2,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y,\r\n            width: size.x,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        const shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'middle',\r\n            'font-family': 'Verdana',\r\n            'font-size': '14',\r\n            fill: 'black'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = this.id;\r\n\r\n        let group = this.createShape({tag: 'g', id: this.id});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public copy(): Node {\r\n        let copy: Node;\r\n        // create new id\r\n        let model = <GraphModel>this.$owner || <GraphModel>this.getRoot();\r\n        if (model) {\r\n            let type = this.property || Node.name;\r\n            let newId = model.getNewId(type);\r\n            copy = <Node>model.createElement(type, newId, null);\r\n            copy.withSize(this.getSize().x, this.getSize().y);\r\n            copy.$owner = model;\r\n        } else {\r\n            copy.id = this.id + '-copy';\r\n            copy.$owner = this.getRoot();\r\n        }\r\n        return copy;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n// EMPTY\r\n    }\r\n    public addAttribute(value: string): Attribute {\r\n        return null;\r\n    }\r\n    public getAttributes(): Attribute[] {\r\n        return null;\r\n    }\r\n    public addMethod(value: string): Method {\r\n        return null;\r\n    }\r\n    public updateLabel(newLabel: string): void {\r\n// EMPTY\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\n\r\nexport class SO extends DiagramElement {\r\n    public static create(element: Object) {\r\n        let result: SO = new SO();\r\n        for (let key in element) {\r\n            if (element.hasOwnProperty(key) === false) {\r\n                continue;\r\n            }\r\n            result.withKeyValue(key, element[key]);\r\n\r\n        }\r\n        return result;\r\n    }\r\n\r\n    public withKeyValue(key: string, value: any): SO {\r\n        if (key === 'typ') {\r\n            this.property = value;\r\n        } else if (key === 'x') {\r\n            this.withPos(value, null);\r\n        } else if (key === 'y') {\r\n            this.withPos(null, value);\r\n        } else if (key === 'width') {\r\n            this.withSize(value, null);\r\n        } else if (key === 'height') {\r\n            this.withSize(null, value);\r\n        } else {\r\n            this[key] = value;\r\n        }\r\n        return this;\r\n    }\r\n}\r\n","import {Point} from '../BaseElements';\r\nimport {Node} from './Node';\r\n\r\nexport class StereoType extends Node {\r\n\r\n    protected stereoType: string;\r\n\r\n    constructor (type: string, x: number, y: number) {\r\n        super('');\r\n        this.withPos(x, y);\r\n        this.setStereoType(type);\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        let pos: Point = this.getPos();\r\n        let size: Point = this.getSize();\r\n\r\n               // = = = STEREOTYPE = = =\r\n        let stereoType = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y - this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': 10,\r\n            'font-weight': 'bold',\r\n            fill: 'black'\r\n        });\r\n        stereoType.textContent = this.stereoType;\r\n\r\n        this.$view = stereoType;\r\n        return stereoType;\r\n    }\r\n\r\n    public setStereoType(value: string): void {\r\n        this.stereoType = '<<' + value + '>>';\r\n    }\r\n\r\n    public getStereoType(): string {\r\n        return this.stereoType;\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { SO } from './SO';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport { Util } from '../../util';\r\n\r\nexport class Symbol extends Node {\r\n    public $heightMax: number = 0;\r\n    public $heightMin: number = 0;\r\n\r\n    constructor(typ: string) {\r\n        super(typ);\r\n    }\r\n\r\n    public draw(typ?: string): SVGElement {\r\n        return SymbolLibary.draw(this);\r\n    }\r\n}\r\n\r\n// \t\t\t\t###################################################### SymbolLibary ####################################################################################\r\n// Example Items\r\n// {tag: 'path', d: ''}\r\n// {tag: 'rect', width:46, height:34}\r\n// {tag: 'ellipse', width:23, height:4}\r\n// {tag: 'line', x1:650, y1:-286, x2:650, y2:-252}\r\n// {tag: 'circle', r:5, x:12, y:0}\r\n// {tag: 'image', height: 30, width: 50, content$src: hallo}\r\n// {tag: 'text', 'text-anchor': 'left', x: '10'}\r\nexport class SymbolLibary {\r\n\r\n    public static drawSVG(node: any): SVGSVGElement {\r\n        // const lib = new SymbolLibary();\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            const parent = SO.create(node);\r\n            parent['property'] = 'SVG';\r\n            symbol = fn(parent);\r\n            // symbol = fn.apply(lib, parent);\r\n\r\n            return SymbolLibary.createGroup(parent, symbol);\r\n        }\r\n        return symbol;\r\n    }\r\n\r\n    public static draw(node: any, parent?: Object): SVGElement {\r\n        // Node is Symbol or simple Object\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            if (!(node instanceof DiagramElement)) {\r\n                node = SO.create(node);\r\n                if (!node.property) {\r\n                    node.property = 'SVG';\r\n                }\r\n            }\r\n            symbol = fn.apply(this, [node]);\r\n            if (!parent) {\r\n                return SymbolLibary.createGroup(node, symbol);\r\n            }\r\n            return SymbolLibary.createGroup(node, symbol);\r\n        } else if (node.property) {\r\n            symbol = new Symbol(node.property);\r\n            symbol.init(node);\r\n            let pos = node.getPos();\r\n            let size = node.getSize();\r\n            symbol.withPos(pos.x, pos.y);\r\n            symbol.withSize(size.x, size.y);\r\n            symbol['value'] = node['value'];\r\n            parent = node['$parent'];\r\n            return SymbolLibary.draw(symbol, parent);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public static upFirstChar(txt: string): string {\r\n        return txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase();\r\n    }\r\n\r\n    public static isSymbolName(typ: string): boolean {\r\n        let fn = SymbolLibary['draw' + SymbolLibary.upFirstChar(typ)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static isSymbol(node: Symbol) {\r\n        let fn = SymbolLibary[SymbolLibary.getName(node)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static getName(node: any): string {\r\n        if (node['type']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['type']);\r\n        }\r\n        if (node.property) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node.property);\r\n        }\r\n        if (node['src']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['src']);\r\n        }\r\n        return 'drawNode';\r\n    }\r\n\r\n    /*FIXME   public static createImage(node: Symbol, $graphModel:Node) {\r\n           let n, img: HTMLElement;\r\n           // node.$graphModel = node;\r\n           if (SymbolLibary.isSymbol(node)) {\r\n               return SymbolLibary.draw(null, node);\r\n           }\r\n           n = {tag: 'img', $graphModel: node, src: node['src']};\r\n           let size = node.getSize();\r\n           if (size.isEmpty() === false) {\r\n               n['width'] = size.x;\r\n               n['height'] = size.y;\r\n           } else {\r\n               n['xmlns'] = 'http://www.w3.org/1999/xhtml';\r\n           }\r\n           img = Util.create(n);\r\n           if (size.isEmpty()) {\r\n               $graphModel.appendImage(img);\r\n               return null;\r\n           }\r\n           return img;\r\n       }*/\r\n\r\n    public static createGroup(node: DiagramElement, group: any) {\r\n        let func, y: number, z: number, box, item: Element, transform, i, offsetX = 0, offsetY = 0;\r\n        let svg: any;\r\n        if (node.property.toUpperCase() === 'HTML') {\r\n            let so = {\r\n                tag: 'svg',\r\n                style: { left: (group.x | 0) + node.getPos().x, top: (group.y | 0) + node.getPos().y, position: 'absolute' }\r\n            };\r\n            if (node['transform']) {\r\n                so['transform'] = node['transform'];\r\n            }\r\n            svg = Util.create(so);\r\n        } else {\r\n            svg = Util.create({ tag: 'g' });\r\n            transform = 'translate(' + group.getPos().x + ' ' + group.getPos().y + ')';\r\n            if (group.scale) {\r\n                transform += ' scale(' + group.scale + ')';\r\n            }\r\n            if (group.rotate) {\r\n                transform += ' rotate(' + group.rotate + ')';\r\n            }\r\n            svg.setAttribute('transform', transform);\r\n            if (group['id']) {\r\n                svg.id = group['id'];\r\n            }\r\n        }\r\n\r\n        if (node['tooltip']) {\r\n            const tooltipTitleAttr = {\r\n                tag: 'title'\r\n            };\r\n            let tooltipTitle = Util.createShape(tooltipTitleAttr);\r\n            tooltipTitle.textContent = node['tooltip'];\r\n            svg.appendChild(tooltipTitle);\r\n        }\r\n\r\n        if (node['background']) {\r\n            const attrCircle = {\r\n                tag: 'circle',\r\n                cx: 20,\r\n                cy: 20,\r\n                r: 17,\r\n                stroke: '#888',\r\n                'stroke-width': 0,\r\n                fill: '#DDD'\r\n            };\r\n            svg.appendChild(Util.create(attrCircle));\r\n        }\r\n\r\n        for (i = 0; i < group.items.length; i += 1) {\r\n            svg.appendChild(Util.create(group.items[i]));\r\n        }\r\n        let elements = node['elements'];\r\n        Util.setSize(svg, group.width + node.getSize().x, group.height + node.getSize().y);\r\n        node['$heightMin'] = node.getSize().y;\r\n        if (elements) {\r\n            for (i = 0; i < elements.length; i += 1) {\r\n                if (!elements[i] && elements[i].length < 1) {\r\n                    elements.splice(i, 1);\r\n                    i -= 1;\r\n                }\r\n            }\r\n            box = Util.create({ tag: 'g' });\r\n            // Calculate new Height\r\n            let c: number;\r\n            z = 0;\r\n            for (c = 0; c < elements.length; c += 1) {\r\n                if (typeof elements[c] === 'string') {\r\n                    z += 1;\r\n                } else {\r\n                    z += elements[c].length;\r\n                }\r\n            }\r\n            z = z * 25 + 6;\r\n            box.appendChild(Util.create({\r\n                tag: 'rect',\r\n                rx: 0,\r\n                x: offsetX,\r\n                y: (offsetY + 28),\r\n                width: 70,\r\n                height: z,\r\n                stroke: '#000',\r\n                fill: '#fff',\r\n                opacity: '0.7'\r\n            }));\r\n            node['$heightMax'] = z + node['$heightMin'];\r\n\r\n            svg['elements'] = elements;\r\n            if (node['type'] === 'DropDown') {\r\n                svg['activ'] = Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': 60,\r\n                    'x': (10 + offsetX),\r\n                    'y': 20,\r\n                    value: node['activText']\r\n                });\r\n                svg.appendChild(svg.activ);\r\n            }\r\n\r\n            y = offsetY + 46;\r\n            // 46 -28 = 18\r\n\r\n            func = function (event: Event) {\r\n                if (svg.activ) {\r\n                    svg.activ.textContent = (<any>event.currentTarget).value;\r\n                }\r\n            };\r\n            let txt: string;\r\n            let textClass = 'SVGTEXT';\r\n            for (z = 0; z < elements.length; z += 1) {\r\n                if (typeof elements[z] === 'string') {\r\n                    txt = elements[z];\r\n                } else {\r\n                    item = this.addText(y, offsetX, box, elements[z][0], 'SVGTEXT');\r\n                    y += 26;\r\n                    for (c = 1; c < elements[z].length; c += 1) {\r\n                        item = this.addText(y, offsetX, box, '* ' + elements[z][c], 'SVGTEXTITEM');\r\n\r\n                        item['value'] = elements[z];\r\n                        if (node['action']) {\r\n                            item['onclick'] = node['action'];\r\n                        } else {\r\n                            item['onclick'] = func;\r\n                        }\r\n                        y += 26;\r\n                    }\r\n                    txt = elements[z];\r\n                    let subBox = Util.create({\r\n                        tag: 'rect',\r\n                        rx: 0,\r\n                        x: offsetX,\r\n                        y: (offsetY + 28),\r\n                        width: 60,\r\n                        height: z,\r\n                        stroke: '#000',\r\n                        fill: '#fff',\r\n                        opacity: '0.7'\r\n                    });\r\n                    continue;\r\n                }\r\n                // let txt = elements[z];\r\n                item = this.addText(y, offsetX, box, txt, textClass);\r\n\r\n                item['value'] = elements[z];\r\n                if (node['action']) {\r\n                    item['onclick'] = node['action'];\r\n                } else {\r\n                    item['onclick'] = func;\r\n                }\r\n                y += 26;\r\n            }\r\n            svg.choicebox = box;\r\n        }\r\n        svg.tool = node;\r\n        svg.onclick = function () {\r\n            if (svg.status === 'close') {\r\n                svg.open();\r\n            } else {\r\n                svg.close();\r\n            }\r\n        };\r\n        svg.close = function () {\r\n            if (svg.status === 'open' && svg.choicebox) {\r\n                this.removeChild(svg.choicebox);\r\n            }\r\n            svg.status = 'close';\r\n            svg.tool.$size.height = svg.tool.heightMin;\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x, g.tool.height + g.tool.y);\r\n            Util.setSize(svg, svg.tool.$size.x, svg.tool.$size.y);\r\n        };\r\n        svg.open = function () {\r\n            if (this.tagName === 'svg') {\r\n                return;\r\n            }\r\n            if (svg.status === 'close' && svg.choicebox) {\r\n                this.appendChild(svg.choicebox);\r\n            }\r\n            svg.status = 'open';\r\n            svg.tool.$size.height = svg.tool.heightMax;\r\n            Util.setSize(svg, svg.tool.width, svg.tool.height);\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x + 10, g.tool.height + g.tool.y + 10);\r\n        };\r\n        svg.close();\r\n        return svg;\r\n    }\r\n\r\n    public static addChild(parent: SVGElement, json: JSON | Element): void {\r\n        let item: Element;\r\n        if ((<any>json).offsetLeft) {\r\n            item = <Element>json;\r\n        } else {\r\n            item = Util.create(json);\r\n        }\r\n        item.setAttribute('class', 'draggable');\r\n        parent.appendChild(item);\r\n    }\r\n\r\n    public static all(node: any): void {\r\n        SymbolLibary.drawSmiley(node);\r\n        SymbolLibary.drawDatabase(node);\r\n        SymbolLibary.drawLetter(node);\r\n        SymbolLibary.drawMobilephone(node);\r\n        SymbolLibary.drawWall(node);\r\n        SymbolLibary.drawActor(node);\r\n        SymbolLibary.drawLamp(node);\r\n        SymbolLibary.drawArrow(node);\r\n        SymbolLibary.drawButton(node);\r\n        SymbolLibary.drawDropdown(node);\r\n        SymbolLibary.drawClassicon(node);\r\n        SymbolLibary.drawClassWithEdgeicon(node);\r\n    }\r\n\r\n    public static drawHamburger(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'circle', r: 10, fill: '#ccc', cx: 12, cy: 12, 'stroke-width': 1, stroke: 'black'},\r\n                { tag: 'path', d: 'M 8,7 H 16 M 8,12 H 16 M 8,17 H 16', stroke: 'black', fill: 'none' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawSmiley(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'path', d: 'm49.01774,25.64542a24.5001,24.5 0 1 1 -49.0001,0a24.5001,24.5 0 1 1 49.0001,0z', stroke: 'black', fill: 'none' }, { tag: 'path', d: 'm8,31.5c16,20 32,0.3 32,0.3' },\r\n                { tag: 'path', d: 'm19.15,20.32a1.74,2.52 0 1 1 -3.49,0a1.74,2.52 0 1 1 3.49,0z' },\r\n                { tag: 'path', d: 'm33,20.32a1.74,2.52 0 1 1 -3.48,0a1.74,2.52 0 1 1 3.48,0z' },\r\n                { tag: 'path', d: 'm5.57,31.65c3.39,0.91 4.03,-2.20 4.03,-2.20' },\r\n                { tag: 'path', d: 'm43,32c-3,0.91 -4,-2.20 -4.04,-2.20' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDatabase(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 40,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,-6.26 25.03,-6.26 25.03,0l0,25.82c0,6.26 -25.03,6.26 -25.03,0l0,-25.82z',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLetter(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 17,\r\n            items: [\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1,1l22,0l0,14l-22,0l0,-14z' },\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1.06,1.14l10.94,6.81l10.91,-6.91' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMobilephone(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 4.2 0.5 15.61 0c 2 0 3.7 1.65 3.7 3.7l 0 41.6c 0 2-1.65 3.7-3.7 3.7l-15.6 0c-2 0-3.7-1.6-3.7-3.7l 0-41.6c 0-2 1.6-3.7 3.7-3.7z',\r\n                    fill: 'none',\r\n                    stroke: 'black'\r\n                },\r\n                { tag: 'path', d: 'm 12.5 2.73a 0.5 0.5 0 1 1-1 0 0.5 0.5 0 1 1 1 0z' },\r\n                { tag: 'path', d: 'm 14 46a 2 2 0 1 1-4 0 2 2 0 1 1 4 0z' },\r\n                { tag: 'path', d: 'm 8 5 7 0' },\r\n                { tag: 'path', d: 'm 1.63 7.54 20.73 0 0 34-20.73 0z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawWall(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'path', d: 'm26,45.44l-5,3.56l-21,-9l0,-36.41l5,-3.56l20.96,9l-0,36.4z' },\r\n                {\r\n                    tag: 'path',\r\n                    stroke: 'white',\r\n                    d: 'm2.21,11l18.34,7.91m-14.46,-12.57l0,6.3m8.2,21.74l0,6.35m-8.6,-10l0,6.351m4.1,-10.67l0,6.3m4.8,-10.2l0,6.3m-8.87,-10.23l0,6.35m4.78,-10.22l0,6.35m-8,14.5l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m0,-13l0,34m-18.23,-41.84l18.3,8m0,0.11l5,-3.57'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawActor(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'line', stroke: '#000', x1: '12', y1: '10', x2: '12', y2: '30' },\r\n                { tag: 'circle', stroke: '#000', cy: '5', cx: '12', r: '5' },\r\n                { tag: 'line', stroke: '#000', y2: '18', x2: '25', y1: '18', x1: '0' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '5', y1: '30', x1: '12' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '20', y1: '30', x1: '12' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLamp(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 22.47 10.58c-6.57 0-11.89 5.17-11.89 11.54 0 2.35 0.74 4.54 2 6.36 2 4 4.36 5.63 4.42 10.4l 11.15 0c 0.12-4.9 2.5-6.8 4.43-10.4 1.39-1.5 1.8-4.5 1.8-6.4 0-6.4-5.3-11.5-11.9-11.5z',\r\n                    fill: 'white',\r\n                    stroke: 'black'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 40 8 0c 0.58 0 1 0.5 1 1 0 0.6-0.5 1-1 1l-8 0c-0.6 0-1-0.47-1-1 0-0.58 0.47-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 42.7 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 45.3 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                { tag: 'path', d: 'm 19.5 48c 0.37 0.8 1 1.3 1.9 1.7 0.6 0.3 1.5 0.3 2 0 0.8-0.3 1.4-0.8 1.9-1.8z' },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 6 37.5 4.2-4c 0.3-0.3 0.8-0.3 1 0 0.3 0.3 0.3 0.8 0 1.1l-4.2 4c-0.3 0.3-0.8 0.3-1.1 0-0.3-0.3-0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 39 37.56-4.15-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 38 23 5.8 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.8 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 1.3 23 6 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.9 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 34.75 11.2 4-4.1c 0.3-0.3 0.3-0.8 0-1-0.3-0.3-0.8-0.3-1 0l-4 4.1c-0.3 0.3-0.3 0.8 0 1 0.3 0.3 0.8 0.3 1 0z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 11.23 10-4-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 21.64 1.3 0 5.8c 0 0.4 0.3 0.8 0.8 0.8 0.4 0 0.8-0.3 0.8-0.8l 0-5.8c 0-0.4-0.3-0.8-0.8-0.8-0.4 0-0.8 0.3-0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 26.1 24.3c-0.5 0-1 0.2-1.3 0.4-1.1 0.6-2 3-2.27 3.5-0.26-0.69-1.14-2.9-2.2-3.5-0.7-0.4-2-0.7-2.5 0-0.6 0.8 0.2 2.2 0.9 2.9 1 0.9 3.9 0.9 3.9 0.9 0 0 0 0 0 0 0.54 0 2.8 0 3.7-0.9 0.7-0.7 1.5-2 0.9-2.9-0.2-0.3-0.7-0.4-1.2-0.4z'\r\n                },\r\n                { tag: 'path', d: 'm 22.5 28.57 0 10.7' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawStop(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 30,\r\n            height: 30,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: '#FFF',\r\n                    'stroke-width': '2',\r\n                    stroke: '#B00',\r\n                    d: 'm 6,6 a 14,14 0 1 0 0.06,-0.06 z m 0,0 20,21'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMin(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    d: 'm 0,0 19,0 0,19 -19,0 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 13,-0.04'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawArrow(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 10,\r\n            height: 9,\r\n            rotate: node['rotate'],\r\n            items: [\r\n                { tag: 'path', fill: '#000', stroke: '#000', d: 'M 0,0 10,4 0,9 z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMax(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    'stroke-dashoffset': 2,\r\n                    'stroke-dasharray': '4.8,4.8',\r\n                    d: 'm 0,0 4.91187,0 5.44643,0 9.11886,0 0,19.47716 -19.47716,0 0,-15.88809 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 6,0.006 0.02,5 0.01,-11 -0.03,6.02 c 2,-0.01 4,-0.002 6,0.01'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawButton(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight, btnValue;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        btnValue = node['value'] || '';\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: 60,\r\n            height: 28,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 8,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    filter: 'url(#drop-shadow)',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                { tag: 'text', $font: true, x: 10, y: 18, fill: 'black', value: btnValue, 'class': 'hand' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDropdown(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 0,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth - 20,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 2,\r\n                    x: btnWidth - 20,\r\n                    y: 0,\r\n                    width: 20,\r\n                    height: 28,\r\n                    stroke: '#000',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    style: 'fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1',\r\n                    d: 'm ' + (btnWidth - 15) + ',13 10,0 L ' + (btnWidth - 10) + ',20 z'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassicon(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.19999l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm25.68807,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.2l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                { tag: 'line', x1: 11, y1: 7, x2: 25, y2: 7, stroke: '#000' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassWithEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M2,10 20,10 20,35 2,35 Z M2,17 20,17 M20,10 28,5 28,9 M 28.5,4.7 24,4',\r\n                    style: 'fill:none;stroke:#000000;transform:scale(0.8);'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClass(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: '100%',\r\n            height: '100%',\r\n            items: [\r\n                { tag: 'rect', width: 50, height: 40, x: 0, y: 0, 'stroke-width': 2, stroke: 'black', fill: 'none'},\r\n                { tag: 'rect', width: 50, height: 12, x: 0, y: 18, 'stroke-width': 1, stroke: 'black', fill: 'none'},\r\n                { tag: 'text', x: 27, y: 14, 'text-anchor': 'middle', 'font-size': 11, value: 'Class'},\r\n                { tag: 'text', x: 5, y: 24, 'font-size': 5, value: '+ field: type'},\r\n                { tag: 'text', x: 5, y: 36, 'font-size': 5, value: '+ method(type)'}\r\n            ]\r\n        });\r\n    }\r\n/*\r\n<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n    <g>\r\n    <text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text>\r\n        <text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>\r\n*/\r\n\r\n    public static drawEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M10,30 30,10 M19,10 30,10 30,21',\r\n                    style: 'fill:none;stroke:#555;stroke-width:2;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawCopynode(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M5 5 L15 5 L15 20 L5 20 Z M5 10 L15 10',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M8 2 L18 2 L18 17 L8 17 Z M8 7 L18 7'\r\n                        + 'M11 4.5 L15 4.5 '\r\n                        + 'M10 10 L16 10 '\r\n                        + 'M10 13 L16 13 ',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawBasket(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M12 12 L18 12 L18 11 L22 11 L22 12 L28 12 L28 14 L27 14 L27 29 L13 29 L13 14 L12 14 Z M13 14 L27 14 M20 17 L20 26 M17 16 L17 27 M23 16 L23 27',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawPencil(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M6 20 L12 23 L33 23 L33 17 L12 17 Z M30 17 L30 23 M12 17 L12 23 M15 19 L28 19 M15 21 L28 21',\r\n                    stroke: '#000',\r\n                    'stroke-width': 1,\r\n                    fill: 'white'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    private static addText(y: number, offsetX: number, box: Element, text: string, textClass: string): Element {\r\n        let item: Element;\r\n        box.appendChild(Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'text-anchor': 'left',\r\n            width: 70,\r\n            x: 10,\r\n            y: y,\r\n            class: textClass,\r\n            value: text,\r\n            eventValue: text\r\n        }));\r\n        if (textClass === 'SVGTEXT') {\r\n            textClass = 'SVGChoiceText';\r\n        } else {\r\n            textClass = 'SVGChoice';\r\n        }\r\n\r\n        item = Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            x: offsetX,\r\n            y: y - 18,\r\n            width: 70,\r\n            height: 24,\r\n            stroke: 'none',\r\n            class: textClass,\r\n        });\r\n        item['eventValue'] = text;\r\n        box.appendChild(item);\r\n        return item;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n}\r\n","import {Control} from '../../Control';\r\nimport BridgeElement from '../../BridgeElement';\r\nimport Data from '../../Data';\r\nimport {Util} from '../../util';\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Table extends Control {\r\n    protected items: BridgeElement[] = [];\r\n    private columns: Column[] = [];\r\n    private cells: Object = {};\r\n    private $bodysection: HTMLTableSectionElement;\r\n    private $headersection: HTMLTableSectionElement;\r\n    private showedItems: Array<BridgeElement> = [];\r\n    // BridgeElements:\r\n    private itemsIds: Object = {};\r\n    private countElement: HTMLElement;\r\n    private countColumn: HTMLElement;\r\n    private countColumnPos: number;\r\n    private resultColumn: string;\r\n    private lastSearchText: string;\r\n    private searchColumns: Array<string> = [];\r\n    private searchText: Array<string> = [];\r\n    private sortColumn: Column;\r\n    private direction: number;\r\n    private moveElement: Column = null;\r\n    private isDrag: boolean = false;\r\n    private moveTimeStamp: number;\r\n    private moveX: number;\r\n    private movePos: number;\r\n    private dragColumn: Column;\r\n    private dragPos: number;\r\n    private tableOption: HTMLTableHeaderCellElement;\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    private static indexOfChild(item: BridgeElement) {\r\n        let i: number = 0;\r\n        let child: Node = item.gui;\r\n        while ((child = child.previousSibling) !== null) {\r\n            i++;\r\n        }\r\n        return i;\r\n    }\r\n\r\n    public load(data: any): void {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n            if (data.property) {\r\n                this.property = data.property;\r\n            }\r\n\r\n            if (data.searchColumns) {\r\n                let search: Array<string> = [];\r\n                if (typeof(data.searchColumns) === 'string') {\r\n                    search = data.searchColumns.split(' ');\r\n                } else {\r\n                    search = data.searchColumns;\r\n                }\r\n                for (let z: number = 0; z < search.length; z++) {\r\n                    let item = search[z].trim();\r\n                    if (item.length > 0) {\r\n                        if (this.searchColumns.indexOf(item) < 0) {\r\n                            this.searchColumns.push(item);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        if (this.$view) {\r\n            // Must be an Update\r\n            if (data['columns']) {\r\n                // It is a json must add all things and generate HTML\r\n                for (let i in data['columns']) {\r\n                    if (data['columns'].hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    let col = this.parseData(data['columns'][i]);\r\n                    this.addHeaderInfo(col);\r\n                    this.columns.push(col);\r\n                    this.tableOption.parentElement.insertBefore(col.$element, this.tableOption);\r\n                }\r\n                for (let i in this.showedItems) {\r\n                    let item: BridgeElement = this.showedItems[i];\r\n                    let cell;\r\n                    // Now Add some Children\r\n                    while (item.gui.children.length < this.columns.length) {\r\n                        cell = document.createElement('td');\r\n                        item.gui.appendChild(cell);\r\n                    }\r\n                    // Now Remove Some Children\r\n                    while (item.gui.children.length > this.columns.length) {\r\n                        item.gui.removeChild(item.gui.children[item.gui.children.length - 1]);\r\n                    }\r\n                    for (let c: number = 0; c < this.columns.length; c++) {\r\n                        let name = this.columns[c].attribute;\r\n                        // let count = this.columns.length;\r\n                        cell = item.gui.children[c];\r\n                        cell.innerHTML = item.model.getValue(name);\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n\r\n        this.$view = document.getElementById(id);\r\n        let headerrow: HTMLTableRowElement;\r\n        if (this.$view) {\r\n            if (!this.property) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('table');\r\n            this.$owner.appendChild(this);\r\n        }\r\n        if (!this.$bodysection) {\r\n            // add tbody element if missing\r\n            this.$bodysection = document.createElement('tbody');\r\n            this.$view.appendChild(this.$bodysection);\r\n        }\r\n        if (data['classname']) {\r\n            this.$view.className = data['classname'];\r\n        } else {\r\n            this.$view.className = 'mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp';\r\n        }\r\n\r\n        this.id = id;\r\n        this.$view.id = id;\r\n        this.$view.setAttribute('type', this.constructor['name'].toLowerCase());\r\n        let counter = 0;\r\n        for (let c = 0; c < this.$view.children.length; c++) {\r\n            let row: HTMLTableRowElement = <HTMLTableRowElement>this.$view.children[c];\r\n            if (row instanceof HTMLTableSectionElement) {\r\n                if (row.tagName === 'THEAD') {\r\n                    headerrow = row;\r\n                    // Its a thead\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingHeader(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                } else {\r\n                    // Its a tbody\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingData(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                }\r\n            } else {\r\n                // fallback, if there are no thead and tbody...\r\n                if (counter === 0) {\r\n                    headerrow = row;\r\n                    this.parsingHeader(row);\r\n                } else {\r\n                    this.parsingData(row);\r\n                }\r\n            }\r\n            counter++;\r\n        }\r\n        if (!headerrow || !this.$headersection) {\r\n            if (!this.$headersection) {\r\n                // find eventually existing thead\r\n                let header = this.$view.getElementsByTagName('thead');\r\n                if (header.length === 0) {\r\n                    this.$headersection = document.createElement('thead');\r\n                    this.$view.appendChild(this.$headersection);\r\n                } else {\r\n                    // take first thead element\r\n                    this.$headersection = <HTMLTableSectionElement>header.item(0);\r\n                }\r\n            }\r\n            if (!headerrow) {\r\n                headerrow = document.createElement('tr');\r\n                this.$headersection.appendChild(headerrow);\r\n            }\r\n        }\r\n\r\n        if (data['columns']) {\r\n            // It is a json must add all things and generate HTML\r\n            for (let i in data['columns']) {\r\n                if (data['columns'].hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                let col = this.parseData(data['columns'][i]);\r\n                this.addHeaderInfo(col);\r\n                this.columns.push(col);\r\n                headerrow.appendChild(col.$element);\r\n            }\r\n            this.tableOption = document.createElement('th');\r\n            this.tableOption.classList.add('tableOption');\r\n            headerrow.appendChild(this.tableOption);\r\n            let context: HTMLElement = this.addOptionItem(null, this.tableOption, true);\r\n            let contentChild: HTMLElement = this.addOptionItem('show', context, true);\r\n            // let simpleLink: HTMLElement = this.addOptionItem('show', contentChild, false);\r\n            this.addOptionItem('show', contentChild, false);\r\n        }\r\n        this.registerEvents(['mousemove', 'mousedown', 'mouseup', 'resize', 'dragstart', 'dragover', 'drop', 'dragend']);\r\n\r\n        // Check for SearchBar\r\n        // if(data[\"searchproperty\"]){\r\n        // Create Full Row\r\n        let searchBar = document.createElement('tr');\r\n        let cell = document.createElement('td');\r\n        cell.setAttribute('colspan', '' + (this.columns.length));\r\n        searchBar.appendChild(cell);\r\n\r\n        let search = document.createElement('input');\r\n        search.className = 'search';\r\n        let that = this;\r\n        search.addEventListener('keyup', function (evt) {\r\n            that.search(evt.target['value']);\r\n        });\r\n\r\n        cell.appendChild(search);\r\n        if (this.resultColumn) {\r\n            if (this.resultColumn.indexOf('#') !== 0) {\r\n                this.countElement = document.createElement('div');\r\n                searchBar.appendChild(this.countElement);\r\n            } else {\r\n                for (let z: number = 0; z < this.$headersection.children.length; z++) {\r\n                    if (this.$headersection.children[z].innerHTML === this.resultColumn) {\r\n                        this.countColumn = <HTMLElement> this.$headersection.children[z];\r\n                        this.countColumnPos = z;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        let first = this.$headersection.children.item(0);\r\n        this.$headersection.insertBefore(searchBar, first);\r\n\r\n        this.updateElement(this.property, null);\r\n\r\n        // now update those elements, that were not loaded currently\r\n    }\r\n\r\n    public tableEvent(type: string, e: Event) {\r\n        let button: number = 0;\r\n        let eventX: number = 0;\r\n        if (e instanceof MouseEvent) {\r\n            button = e.buttons;\r\n            eventX = e.pageX;\r\n        }\r\n        if (type === 'mouseup') {\r\n            this.moveElement = null;\r\n        } else if (type === 'mousedown' || type === 'resize') {\r\n            // End to Resize\r\n            this.moveElement = null;\r\n            if (button === 1) {\r\n                let c: number;\r\n                for (c = 0; c < this.columns.length; c++) {\r\n                    if (this.columns[c].$resize === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = false;\r\n                        break;\r\n                    } else if (this.columns[c].$element === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = true;\r\n                    }\r\n                }\r\n                this.moveTimeStamp = e.timeStamp;\r\n                this.moveX = eventX;\r\n            } else {\r\n                this.moveTimeStamp = 0;\r\n            }\r\n        } else if (type === 'mousemove') {\r\n            if (button === 1 && this.moveElement) {\r\n                if (this.moveTimeStamp && e.timeStamp - this.moveTimeStamp < 2000) {\r\n                    if (this.isDrag) {\r\n                        // FIXME\r\n                    } else {\r\n                        let x = eventX - this.moveX;\r\n                        let width = this.moveElement.$element.offsetWidth;\r\n                        this.moveElement.$element.width = '' + (width + x);\r\n                        e.stopPropagation();\r\n                    }\r\n                }\r\n                this.moveX = eventX;\r\n                this.moveTimeStamp = e.timeStamp;\r\n            }\r\n        } else if (this.isDrag) {\r\n            this.columnDragEvent(type, <DragEvent> e);\r\n        }\r\n    }\r\n\r\n    public parsingHeader(row: HTMLTableRowElement) {\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let column: HTMLTableHeaderCellElement = <HTMLTableHeaderCellElement>row.children[i];\r\n            let id = column.innerHTML.trim();\r\n            let col: Column = null;\r\n            for (let c in this.columns) {\r\n                if (this.columns.hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                if (this.columns[c].label === id) {\r\n                    col = this.columns[c];\r\n                    col.$element = column;\r\n                    break;\r\n                }\r\n            }\r\n            if (col === null) {\r\n                col = new Column();\r\n                col.label = id;\r\n                col.attribute = column.getAttribute('attribute');\r\n                col.$element = column;\r\n                this.columns.push(col);\r\n            }\r\n            this.addHeaderInfo(col);\r\n        }\r\n    }\r\n\r\n    public parsingData(row: HTMLTableRowElement) {\r\n        let id = row.getAttribute('id');\r\n        let item: Data = this.$owner.getItem(id);\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let cell: HTMLTableCellElement = <HTMLTableCellElement>row.children[i];\r\n            let colAttribute = this.columns[i].attribute;\r\n            if (colAttribute.indexOf('\\.') < 0) {\r\n                item[colAttribute] = cell.innerHTML.trim();\r\n            }\r\n        }\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: Object, newValue: Object) {\r\n        if (entity) {\r\n            // Check for Show\r\n            if (this.property && !entity.hasProperty(property)) {\r\n                return;\r\n            }\r\n        }\r\n        if (entity.id === undefined) {\r\n            return;\r\n        }\r\n        let item: BridgeElement = <BridgeElement>this.itemsIds[entity.id];\r\n        let row: HTMLTableRowElement;\r\n        if (!item) {\r\n            item = new BridgeElement(entity);\r\n            this.items.push(item);\r\n            this.itemsIds[entity.id] = item;\r\n        }\r\n        row = this.cells[entity.id];\r\n        if (row) {\r\n            item.gui = row;\r\n        }\r\n        if (this.searching(item) === false) {\r\n            return;\r\n        }\r\n        let cell;\r\n        let showItem = false;\r\n\r\n        if (!row) {\r\n            showItem = true;\r\n            row = document.createElement('tr');\r\n            let count = this.columns.length;\r\n            for (let i = 0; i < count; i++) {\r\n                cell = document.createElement('td');\r\n                row.appendChild(cell);\r\n            }\r\n            this.cells[entity.id] = row;\r\n            item.gui = row;\r\n        }\r\n        for (let c: number = 0; c < this.columns.length; c++) {\r\n            let name = this.columns[c].attribute;\r\n            if (name === property) {\r\n                cell = row.children[c];\r\n                cell.innerHTML = <string>newValue;\r\n            }\r\n        }\r\n        if (showItem) {\r\n            this.showItem(item, true);\r\n        }\r\n        // super.propertyChange(entity, property, newValue, oldValue);\r\n    }\r\n\r\n    public sort(column: Column) {\r\n        if (this.sortColumn === column) {\r\n            if (this.direction === 1) {\r\n                this.direction = -1;\r\n                column.$element.classList.remove('asc');\r\n                column.$element.classList.add('desc');\r\n            } else {\r\n                this.direction = 1;\r\n                column.$element.classList.remove('desc');\r\n                column.$element.classList.add('asc');\r\n            }\r\n        } else {\r\n            if (this.sortColumn !== null) {\r\n                this.sortColumn.$element.classList.remove('desc');\r\n                this.sortColumn.$element.classList.remove('asc');\r\n            }\r\n            this.sortColumn = column;\r\n            this.sortColumn.$element.classList.add('asc');\r\n            this.direction = 1;\r\n        }\r\n        let that = this;\r\n        let sort = function (a: BridgeElement, b: BridgeElement) {\r\n            return that.sorting(a, b);\r\n        };\r\n        this.showedItems.sort(sort);\r\n        let len: number = this.showedItems.length;\r\n        let body = this.$bodysection;\r\n        let i = 0;\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            if (i !== Table.indexOfChild(item)) {\r\n                break;\r\n            }\r\n            i = i + 1;\r\n        }\r\n        while (body.children.length > i) {\r\n            body.removeChild(body.children.item(body.children.length - 1));\r\n        }\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            body.appendChild(item.gui);\r\n            i = i + 1;\r\n        }\r\n\r\n        //      body.removeChild(item.gui);\r\n        //      body.remove\r\n    }\r\n\r\n    public sorting(a: BridgeElement, b: BridgeElement): number {\r\n        let path: string[] = this.sortColumn.attribute.split('.');\r\n        let itemA = a.model.prop;\r\n        let itemB = b.model.prop;\r\n        let check = this.sortColumn.attribute;\r\n        for (let p = 0; p < path.length; p++) {\r\n            check = path[p];\r\n            if (itemA[check]) {\r\n                itemA = itemA[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n            if (itemB[check]) {\r\n                itemB = itemB[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n        if (itemA !== itemB) {\r\n            if (this.direction === 1) {\r\n                return (itemA < itemB) ? -1 : 1;\r\n            }\r\n            return (itemA < itemB) ? 1 : -1;\r\n\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    // Searching\r\n    public search(origSearchText: string): void {\r\n        if (!origSearchText) {\r\n            origSearchText = '';\r\n        }\r\n        let searchText: string = origSearchText.trim().toLowerCase();\r\n        if (searchText === this.lastSearchText && searchText !== '') {\r\n            return; // <==== nothing to be done\r\n        }\r\n        let oldSearch: string = this.lastSearchText;\r\n        this.lastSearchText = searchText;\r\n\r\n        this.parseSearchArray();\r\n        if (searchText !== '' && oldSearch !== null && searchText.indexOf(oldSearch) >= 0 && searchText.indexOf('|') < 0) {\r\n            this.searchArray(this.showedItems);\r\n        } else {\r\n            this.searchSet(this.items);\r\n        }\r\n        this.refreshCounter();\r\n    }\r\n\r\n    public refreshCounter() {\r\n        if (this.countColumn) {\r\n            this.countColumn.innerHTML = this.columns[this.countColumnPos].label + ' (' + this.showedItems.length + ')';\r\n        }\r\n        // var countElement = document.getElementById('talkCount');\r\n        //  if (countElement) {\r\n        //     var txt = (this.showedItems.size() > 0 && searchText.length > 0 ) ? this.options.TEXT_SEARCHLIST : this.options.TEXT_SEARCHFULLLIST;\r\n        //     countElement.innerHTML = txt.replace(\"%LEN%\", this.root['children'].length).replace(\"%COUNT%\", this.showedItems.size()).replace(\"%SEARCH%\", origSearchText);\r\n        // }\r\n        // if (this.countColumn) {\r\n        //     this.countColu1mn.innerHTML = this.countColumn[\"label\"] + \" (\" + this.showedItems.size() + \")\";\r\n        // }\r\n    }\r\n\r\n    public parseSearchArray() {\r\n        let pos: number = 0;\r\n        let split: Array<string> = [];\r\n        let quote: boolean = false;\r\n        for (let i: number = 0; i < this.lastSearchText.length; i++) {\r\n            if ((this.lastSearchText.charAt(i) === ' ') && !quote) {\r\n                let txt = this.lastSearchText.substring(pos, i).trim();\r\n                if (txt.length > 0) {\r\n                    split.push(txt);\r\n                }\r\n                pos = i + 1;\r\n            } else if (this.lastSearchText.charAt(i) === '\\\"') {\r\n                if (quote) {\r\n                    let txt = this.lastSearchText.substring(pos, i).trim();\r\n                    if (txt.length > 0) {\r\n                        split.push(txt);\r\n                    }\r\n                    pos = i + 1;\r\n                } else {\r\n                    pos = i + 1;\r\n                }\r\n                quote = !quote;\r\n            }\r\n        }\r\n        if (pos < this.lastSearchText.length) {\r\n            split.push(this.lastSearchText.substring(pos, this.lastSearchText.length).trim());\r\n        }\r\n        this.searchText = split;\r\n        return split;\r\n    }\r\n\r\n    public searchArray(root: Array<BridgeElement>) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let i: number = 0; i < root.length; i++) {\r\n            let item: BridgeElement = root[i];\r\n            this.showItem(item, this.searching(item));\r\n        }\r\n    }\r\n\r\n    public searchSet(root: BridgeElement[]) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let item of root) {\r\n            let child: BridgeElement = <BridgeElement>item;\r\n            this.showItem(child, this.searching(child));\r\n        }\r\n    }\r\n\r\n    public showItem(item: BridgeElement, visible: boolean) {\r\n        if (visible) {\r\n            this.showedItems.push(item);\r\n            this.$bodysection.appendChild(item.gui);\r\n        } else if (item.gui && item.gui.parentElement) {\r\n            this.$bodysection.removeChild(item.gui);\r\n        }\r\n    }\r\n\r\n    public searching(item: BridgeElement): boolean {\r\n        let fullText: string = '';\r\n        for (let i: number = 0; i < this.searchColumns.length; i++) {\r\n            fullText = fullText + ' ' + item.model.getValue(this.searchColumns[i]);\r\n        }\r\n        fullText = fullText.trim().toLowerCase();\r\n        for (let z: number = 0; z < this.searchText.length; z++) {\r\n            if ('' !== this.searchText[z]) {\r\n                let orSplit: Array<string>;\r\n                if (this.searchText[z].indexOf('|') > 0) {\r\n                    orSplit = this.searchText[z].split('|');\r\n                } else {\r\n                    orSplit = [this.searchText[z]];\r\n                }\r\n                let o: number = 0;\r\n                for (; o < orSplit.length; o++) {\r\n                    let pos: number = orSplit[o].indexOf(':');\r\n                    if (orSplit[o].indexOf('#') === 0 && pos > 1) {\r\n                        // if (searchProperties.contains(propString)) {\r\n                        let value: string = orSplit[o].substring(pos + 1);\r\n                        let column: string = orSplit[o].substring(1, pos - 1);\r\n                        let dataValue: Object = item.model.getValue(column);\r\n                        if (dataValue) {\r\n                            if (dataValue.toString().toLowerCase().indexOf(value) >= 0) {\r\n                                // Search for simple Property\r\n                                break;\r\n                            }\r\n                        }\r\n                    } else if (orSplit[o].length > 1 && orSplit[o].indexOf('-') === 0) {\r\n                        if (fullText.indexOf(orSplit[o].substring(1)) < 0) {\r\n                            break;\r\n                        }\r\n                    } else if (fullText.indexOf(orSplit[o]) >= 0) {\r\n                        // his search word is found in full text\r\n                        break;\r\n                    }\r\n                }\r\n                if (o === orSplit.length) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public getColumn(): Column[] {\r\n        return this.columns;\r\n    }\r\n\r\n    public updateElement(property: string, value: string): void {\r\n        // first clear all elements inside the table:\r\n        for (let item of this.items) {\r\n            if (item instanceof BridgeElement) {\r\n                (<BridgeElement>item).model.removeListener(this);\r\n            }\r\n        }\r\n\r\n        this.items = [];\r\n        this.itemsIds = {};\r\n\r\n        // load all entitys that match the property\r\n        if (this.property !== undefined) {\r\n            let items = this.$owner.getItems();\r\n            for (let j in items) {\r\n                if (items.hasOwnProperty(j)) {\r\n                    let item = items[j];\r\n                    if (item instanceof Data) {\r\n                        if (property === j) {\r\n                            // if (property == item.property) {\r\n                            let i = new BridgeElement(<Data>item);\r\n                            this.items.push(i);\r\n                            this.itemsIds[item.id] = i;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            this.redrawAllElements();\r\n        }\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        if (this.$owner !== null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    protected redrawAllElements() {\r\n        let children: HTMLCollection = this.$bodysection.children;\r\n        // remove old children\r\n        for (let i = 0; i < children.length; i++) {\r\n            let child = children.item(i);\r\n            // remove child\r\n            this.$bodysection.removeChild(child);\r\n        }\r\n\r\n        // load new children\r\n        for (let obj of this.items) {\r\n            // register listeners\r\n            obj.model.addListener(this);\r\n            // create tr\r\n            let row = this.createRow(obj);\r\n            this.$bodysection.appendChild(row);\r\n            this.cells[obj.id] = row;\r\n        }\r\n    }\r\n\r\n    private parseData(column: any): Column {\r\n        let col = new Column();\r\n        col.label = column.label || column.id;\r\n        col.attribute = column.attribute || column.label || column.id;\r\n        col.$element = document.createElement('th');\r\n        col.$element.innerHTML = col.label;\r\n        col.$element.draggable = true;\r\n\r\n        // resize Header\r\n        col.$resize = document.createElement('div');\r\n        col.$resize.classList.add('resize');\r\n        col.$element.appendChild(col.$resize);\r\n\r\n        return col;\r\n    }\r\n\r\n    private createRow(data: BridgeElement): HTMLTableRowElement {\r\n        let tr: HTMLTableRowElement = document.createElement('tr');\r\n\r\n        for (let id of this.columns) {\r\n            let td: HTMLTableDataCellElement = document.createElement('td');\r\n            tr.appendChild(td);\r\n            td.innerHTML = data.model.getValue(id.attribute);\r\n        }\r\n        return tr;\r\n    }\r\n\r\n    private addHeaderInfo(col: Column) {\r\n        let element: HTMLTableCellElement = col.$element;\r\n        let that = this;\r\n        element.classList.add('sort');\r\n        element.addEventListener('click',\r\n            function () {\r\n                that.sort(col);\r\n            },\r\n            false);\r\n    }\r\n\r\n    private columnDragEvent(type: string, e: DragEvent) {\r\n        if (type === 'dragstart') {\r\n            // Target (this) element is the source node.\r\n            this.moveElement.$element.style.opacity = '0.4';\r\n            e.dataTransfer.effectAllowed = 'move';\r\n            e.dataTransfer.setData('text/json', JSON.stringify(Util.toJson(this.moveElement)));\r\n        } else if (type === 'dragenter') {\r\n            // TO Nothing\r\n        } else if (type === 'dragleave') {\r\n            this.moveElement.$element.classList.remove('over');\r\n        } else if (type === 'dragover') {\r\n            if (e.preventDefault) {\r\n                e.preventDefault(); // Necessary. Allows us to drop.\r\n            }\r\n            for (let c = 0; c < this.columns.length; c++) {\r\n                if (this.columns[c].$element === e.target) {\r\n                    this.dragColumn = this.columns[c];\r\n                    this.dragPos = c;\r\n                    this.columns[c].$element.classList.add('over');\r\n                } else {\r\n                    this.columns[c].$element.classList.remove('over');\r\n                }\r\n            }\r\n            if (e.target === this.tableOption) {\r\n                this.tableOption.classList.add('over');\r\n                this.dragPos = this.columns.length;\r\n            } else {\r\n                this.tableOption.classList.remove('over');\r\n            }\r\n            e.dataTransfer.dropEffect = 'move';  // See the section on the DataTransfer object.\r\n        } else if (type === 'drop') {\r\n            // this / e.target is current target element.\r\n            if (e.stopPropagation) {\r\n                e.stopPropagation(); // stops the browser from redirecting.\r\n            }\r\n            if (this.movePos === this.dragPos) {\r\n                return;\r\n            }\r\n            // movePos -> dragPos\r\n            // See the section on the DataTransfer object.\r\n            // DataModel\r\n            this.columns.splice(this.movePos, 1);\r\n            if (this.movePos >= this.dragPos) {\r\n                this.columns.splice(this.dragPos, 0, this.moveElement);\r\n            } else {\r\n                this.columns.splice(this.dragPos - 1, 0, this.moveElement);\r\n            }\r\n\r\n            // Header Line\r\n            let line: HTMLElement = this.moveElement.$element.parentElement;\r\n            line.removeChild(this.moveElement.$element);\r\n            if (this.dragPos < this.columns.length) {\r\n                line.insertBefore(this.moveElement.$element, this.dragColumn.$element);\r\n            } else {\r\n                line.insertBefore(this.moveElement.$element, this.tableOption);\r\n            }\r\n\r\n            let oldElement: Element;\r\n            let newElement: Element;\r\n\r\n            // Now all Childs\r\n            for (let i = 0; i < this.$bodysection.children.length; i++) {\r\n                // Each line\r\n                line = <HTMLElement>this.$bodysection.children.item(i);\r\n                oldElement = line.children.item(this.movePos);\r\n                newElement = line.children.item(this.dragPos);\r\n                line.removeChild(oldElement);\r\n                line.insertBefore(oldElement, newElement);\r\n            }\r\n        } else if (type === 'dragend') {\r\n            // this/e.target is the source node.\r\n            this.moveElement.$element.style.opacity = '1';\r\n            for (let i = 0; i < this.columns.length; i++) {\r\n                this.columns[i].$element.classList.remove('over');\r\n            }\r\n            this.tableOption.classList.remove('over');\r\n        }\r\n    }\r\n\r\n    private addOptionItem(label: string, parent: HTMLElement, sub: boolean): HTMLElement {\r\n        let labelControl;\r\n        if (label) {\r\n            labelControl = document.createElement('a');\r\n            labelControl.appendChild(document.createTextNode(label));\r\n            labelControl.href = 'javascript:void(0);';\r\n            parent.appendChild(labelControl);\r\n        }\r\n        if (sub) {\r\n            let context = document.createElement('div');\r\n            context.classList.add('dropdown-content');\r\n            context.style.setProperty('position', 'absolute');\r\n            parent.appendChild(context);\r\n\r\n            /* When the user clicks on the button,\r\n             toggle between hiding and showing the dropdown content */\r\n            parent.addEventListener(\r\n                'click',\r\n                function () {\r\n                    context.classList.toggle('show');\r\n                },\r\n                false);\r\n            return context;\r\n        }\r\n        return labelControl;\r\n    }\r\n\r\n    private registerEvents(events: string[]) {\r\n        let that = this;\r\n        for (let i = 0; i < events.length; i++) {\r\n            this.$view.addEventListener(events[i], function (evt) {\r\n                return that.tableEvent(events[i], evt);\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\nclass Column {\r\n    label: string;\r\n    attribute: string;\r\n    $element: HTMLTableHeaderCellElement;\r\n    $resize: HTMLDivElement;\r\n    visible: boolean;\r\n}\r\n","import { AutoComplete } from './AutoComplete';\r\nimport { BR } from './BR';\r\nimport { Div } from './Div';\r\nimport { Label } from './Label';\r\n\r\nexport * from './Node';\r\nexport * from './Class';\r\nexport * from './SO';\r\nexport * from './Symbol';\r\n\r\nexport * from './BR';\r\nexport * from './Button';\r\nexport * from './Div';\r\nexport * from './Form';\r\nexport * from './Input';\r\nexport * from './Label';\r\nexport * from './Table';\r\nexport * from './HTML';\r\nexport * from './Dice';\r\nexport * from './AutoComplete';\r\nexport * from './Attribute';\r\nexport * from './Method';\r\nexport * from './ClazzProperty';\r\n\r\nnew AutoComplete();\r\nnew BR();\r\nnew Div();\r\nnew Label();\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class AddNode implements EventHandler {\r\n\r\n    public MIN_SIZE_TO_ADD_NODE: number = 30;\r\n    public MIN_SIZE_TO_ADD_TEXT: number = 10;\r\n    private graph: Graph;\r\n    private svgRect: SVGSVGElement;\r\n    private svgGroupAddNode: SVGSVGElement;\r\n    private svgTextAddNode: SVGSVGElement;\r\n    private svgTextRectAddNode: SVGSVGElement;\r\n    private isRectDrawing: boolean;\r\n    private isDrawToLeft: boolean;\r\n    private isDrawToTop: boolean;\r\n    private isBigEnoughForAddNode: boolean;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(AddNode.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(AddNode.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!this.canHandle()) {\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element.id !== 'RootElement') {\r\n            return false;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element.id === 'RootElement') {\r\n                    this.start(event, element);\r\n\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mousemove':\r\n                this.drawRect(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.removeRect();\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.addNode();\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawRect(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isRectDrawing) {\r\n            return;\r\n        }\r\n\r\n        evt.stopPropagation();\r\n\r\n        let width = Util.getEventX(evt) - this.x;\r\n        let height = Util.getEventY(evt) - this.y;\r\n\r\n        // rectangle is in a negative area, drawn to upper case. not possibble with svg\r\n        if (width < 0) {\r\n            this.isDrawToLeft = true;\r\n            width *= -1;\r\n        } else {\r\n            this.isDrawToLeft = false;\r\n        }\r\n\r\n        if (height < 0) {\r\n            this.isDrawToTop = true;\r\n            height *= -1;\r\n        } else {\r\n            this.isDrawToTop = false;\r\n        }\r\n\r\n        if (width > this.MIN_SIZE_TO_ADD_NODE && height > this.MIN_SIZE_TO_ADD_NODE) {\r\n            this.isBigEnoughForAddNode = true;\r\n        } else {\r\n            this.isBigEnoughForAddNode = false;\r\n        }\r\n\r\n        this.graph.root.style.cursor = 'pointer';\r\n\r\n        // if line wasnt draw\r\n        if (!this.svgRect) {\r\n\r\n            let rectAddNode = Util.createShape({\r\n                tag: 'rect',\r\n                id: 'addNodeRect',\r\n                x: this.x,\r\n                y: this.y,\r\n                width: 1,\r\n                height: 1,\r\n                class: 'SVGAddNode'\r\n            });\r\n\r\n            let group = Util.createShape({ tag: 'g', id: 'groupAddNode' });\r\n            group.appendChild(rectAddNode);\r\n\r\n            this.graph.root.appendChild(group);\r\n            this.svgRect = rectAddNode;\r\n            this.svgGroupAddNode = group;\r\n        }\r\n        else {\r\n\r\n            let svgRectBBox = this.svgRect.getBBox();\r\n\r\n            // if rect is big enough, show text as helper\r\n            if ((svgRectBBox.width > this.MIN_SIZE_TO_ADD_TEXT\r\n                || svgRectBBox.height > this.MIN_SIZE_TO_ADD_TEXT) && !this.svgTextAddNode) {\r\n\r\n                let textAddNode = Util.createShape({\r\n                    tag: 'text',\r\n                    x: this.x,\r\n                    y: this.y - 5,\r\n                    'font-family': 'Verdana',\r\n                    'font-size': 12,\r\n                    fill: 'black'\r\n                });\r\n                textAddNode.textContent = 'Hold on and move to create a new class';\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n\r\n\r\n                // get correct size of text node\r\n                let sizeClientRect: ClientRect = textAddNode.getBoundingClientRect();\r\n\r\n                let rectBackgroundForText = Util.createShape({\r\n                    tag: 'rect',\r\n                    x: this.x,\r\n                    y: this.y - sizeClientRect.height,\r\n                    width: sizeClientRect.width,\r\n                    height: sizeClientRect.height,\r\n                    fill: '#DDD',\r\n                    'stroke-width': 0\r\n                });\r\n\r\n                this.svgTextRectAddNode = rectBackgroundForText;\r\n                this.svgTextAddNode = textAddNode;\r\n                this.svgGroupAddNode.appendChild(rectBackgroundForText);\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n            }\r\n\r\n            if (this.isDrawToLeft) {\r\n                this.svgRect.setAttributeNS(null, 'x', '' + Util.getEventX(evt));\r\n            }\r\n\r\n            if (this.isDrawToTop) {\r\n                this.svgRect.setAttributeNS(null, 'y', '' + Util.getEventY(evt));\r\n            }\r\n\r\n            // set width and height\r\n            this.svgRect.setAttributeNS(null, 'width', width.toString());\r\n            this.svgRect.setAttributeNS(null, 'height', height.toString());\r\n\r\n            // set color\r\n            if (this.isBigEnoughForAddNode) {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode-ready');\r\n\r\n                // draw text\r\n            }\r\n            else {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeRect(): void {\r\n        this.isRectDrawing = false;\r\n        this.isBigEnoughForAddNode = false;\r\n\r\n        this.graph.root.style.cursor = 'default';\r\n\r\n        if (this.svgGroupAddNode) {\r\n            this.graph.root.removeChild(this.svgGroupAddNode);\r\n            this.svgGroupAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgRect) {\r\n            this.svgRect = undefined;\r\n        }\r\n\r\n        if (this.svgTextAddNode) {\r\n            this.svgTextAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgTextRectAddNode) {\r\n            this.svgTextRectAddNode = undefined;\r\n        }\r\n    }\r\n\r\n    private addNode(): void {\r\n\r\n        if (!this.isBigEnoughForAddNode) {\r\n            this.removeRect();\r\n            return;\r\n        }\r\n\r\n        this.removeRect();\r\n        let node = this.graph.addElementWithValues('Class', { x: this.x, y: this.y });\r\n        this.graph.drawElement(node);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isRectDrawing) {\r\n            return;\r\n        }\r\n        this.isRectDrawing = true;\r\n\r\n        this.x = Util.getEventX(evt);\r\n        this.y = Util.getEventY(evt);\r\n    }\r\n\r\n}\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement, Point } from '../elements/BaseElements';\r\nimport { GraphModel } from '../elements/Model';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Control } from '../Control';\r\nimport { Util } from '../util';\r\n\r\nexport class Drag implements EventHandler {\r\n\r\n    private element: DiagramElement;\r\n    private svgElement: SVGSVGElement;\r\n    private dragging = false;\r\n    private reinsert = false;\r\n    private mouseOffset = new Point();\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        if (!this.canHandle()) {\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if ((!this.dragging) && (element.id !== 'RootElement')) {\r\n                    this.element = element;\r\n                    this.svgElement = <SVGSVGElement>element.$view;\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mouseup':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n\r\n                break;\r\n            case 'mousemove':\r\n                if (this.dragging) {\r\n                    this.drag(event, element);\r\n                }\r\n                break;\r\n            case 'mouseleave':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Drag.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Drag.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private reset() {\r\n        this.dragging = false;\r\n        this.svgElement.style.cursor = 'pointer';\r\n\r\n        /*  WORKAROUND\r\n            Chrome got problem with the Node.appendChild() method.\r\n            Sometimes it works, sometimes not.\r\n            So the background is, in the drag method will the current element be appended\r\n            to front of the svg root.\r\n            If this happend, the click event won't fire.\r\n            So it will be fired manually.\r\n            This problem occurs only in chrome.\r\n        */\r\n        if (Util.isChrome()) {\r\n            let clickEvt = Util.createCustomEvent('click');\r\n            this.svgElement.dispatchEvent(clickEvt);\r\n        }\r\n    }\r\n\r\n    private start(evt: Event | any, element: Control) {\r\n\r\n        this.dragging = true;\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n        this.reinsert = true;\r\n\r\n        this.svgElement.style.cursor = 'move';\r\n    }\r\n\r\n    private drag(evt: Event | any, element: DiagramElement) {\r\n\r\n        if (this.reinsert) {\r\n            if (this.element.id !== 'RootElement') {\r\n                // nesseccary to set the dragged object on top of svg children\r\n                this.graph.root.appendChild(this.svgElement);\r\n            }\r\n\r\n            let dragEvent = Util.createCustomEvent('drag');\r\n            element.$view.dispatchEvent(dragEvent);\r\n        }\r\n        this.reinsert = false;\r\n\r\n        evt.stopPropagation();\r\n\r\n        const translation = this.svgElement.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        const sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        const transX = sx + evt.clientX - this.mouseOffset.x;\r\n        const transY = sy + evt.clientY - this.mouseOffset.y;\r\n        this.svgElement.setAttributeNS(null, 'transform', 'translate(' + transX + ' ' + transY + ')');\r\n        this.element.getPos().addNum(transX - sx, transY - sy);\r\n\r\n        if (this.element instanceof Node) {\r\n            (<Node>this.element).redrawEdges();\r\n        }\r\n\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n\r\n\r\n        // resize svg root\r\n        let maxX = this.element.getPos().x + this.element.getSize().x;\r\n        let maxY = this.element.getPos().y + this.element.getSize().y;\r\n\r\n        let domRectRoot = this.graph.root.getBoundingClientRect();\r\n        if(!domRectRoot){\r\n            return;\r\n        }\r\n\r\n        if(maxX > domRectRoot.width){\r\n            this.graph.root.setAttributeNS(null, 'width', '' + maxX);\r\n        }\r\n        \r\n        if(maxY > domRectRoot.height){\r\n            this.graph.root.setAttributeNS(null, 'height', '' + maxY);\r\n        }\r\n    }\r\n}\r\n","import PropertyChangeSupport from '../PropertyChangeSupport';\r\nimport Data from '../Data';\r\nimport {Adapter} from '../Adapter';\r\nimport ClazzProperty from '../elements/nodes/ClazzProperty';\r\n\r\nexport class GraphListener implements PropertyChangeSupport {\r\n    private $owner: ClazzProperty;\r\n\r\n    constructor(owner: ClazzProperty) {\r\n        this.$owner = owner;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        let adapter = this.$owner.getRoot().getAdapter();\r\n        if (adapter) {\r\n            // messages.add(\"{\\\"class\\\":\\\"de.uniks.networkparser.test.model.House\\\",\\\"id\\\":\\\"H1\\\",\\\"rem\\\":{\\\"floor\\\":4},\\\"upd\\\":{\\\"floor\\\":42}}\");\r\n            let myId =  this.$owner.$owner.getId();\r\n            if (myId && myId.length > 0) {\r\n                let pos = myId.indexOf(':');\r\n                if (pos > 0) {\r\n                    myId = myId.substring(0, pos).trim();\r\n                }\r\n            }\r\n            let myName = this.$owner.getName();\r\n            let remJson = {};\r\n            remJson[myName] = oldValue;\r\n            let updJson = {};\r\n            updJson[myName] = newValue;\r\n            let json = {};\r\n            json['id'] = myId;\r\n            json['rem'] = remJson;\r\n            json['upd'] = updJson;\r\n            let message = JSON.stringify(json);\r\n            (<Adapter> adapter).update(message);\r\n        }\r\n    }\r\n}\r\n","import {Graph} from '../elements/';\r\nimport {EventHandler, EventBus} from '../EventBus';\r\nimport {DiagramElement} from '../elements/';\r\nimport {Util} from '../util';\r\n\r\nexport class ImportFile implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(ImportFile.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(ImportFile.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        let type: string = typeof event;\r\n        if (type !== 'DragEvent') {\r\n            return false;\r\n        }\r\n        let evt: DragEvent = <DragEvent>event;\r\n        if (evt.type === 'dragover') {\r\n            this.handleDragOver(evt);\r\n        } else if (evt.type === 'dragleave') {\r\n            if (this.graph.$view !== evt.target) {\r\n                return false;\r\n            }\r\n            this.setBoardStyle('dragleave');\r\n        } else if (evt.type === 'drop') {\r\n            this.handleLoadFile(evt);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public setBoardStyle(typ: string): boolean {\r\n        let b = this.graph.$view;\r\n        Util.removeClass(b, 'Error');\r\n        Util.removeClass(b, 'Ok');\r\n        Util.removeClass(b, 'Add');\r\n        if (typ === 'dragleave') {\r\n            if (b['errorText']) {\r\n                b.removeChild(b['errorText']);\r\n                b['errorText'] = null;\r\n            }\r\n            return true;\r\n        }\r\n        Util.addClass(b, typ);\r\n        if (typ === 'Error') {\r\n            if (!b['errorText']) {\r\n                b['errorText'] = Util.create({tag: 'div', style: 'margin-top: 30%', value: 'NO TEXTFILE'});\r\n                b.appendChild(b['errorText']);\r\n            }\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private handleLoadFile(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n\r\n        let files = evt.dataTransfer.files; // FileList object.\r\n\r\n        if (files.length > 1) {\r\n            evt.dataTransfer.dropEffect = 'none';\r\n            return;\r\n        }\r\n\r\n        // files is a FileList of File objects. List some properties.\r\n        let reader  = new FileReader();\r\n        let output = [];\r\n        let htmlResult = '';\r\n        let that = this;\r\n        for (let i = 0, f; f = files[i]; i++) {\r\n            reader.onload = function(event) {\r\n                htmlResult = event.target['result'];\r\n                console.log('fileContent: ' + htmlResult);\r\n\r\n                // CHANGE TO INTERNAL OBJECT\r\n                if (that.graph) {\r\n                    that.graph.import(htmlResult);\r\n                }\r\n            };\r\n            reader.readAsText(f);\r\n        }\r\n        this.setBoardStyle('dragleave');\r\n    }\r\n\r\n    private handleDragOver(evt: DragEvent): void {\r\n        let error: boolean = true, n: string, f;\r\n        let files = evt.dataTransfer.files;\r\n        // process all File objects\r\n        if (files && files.length > 0) {\r\n            for (let i: number = 0; i < files.length; i += 1) {\r\n                f = files[i];\r\n                if (f.type.indexOf('text') === 0) {\r\n                    error = false;\r\n                } else if (f.type === '') {\r\n                    n = f.name.toLowerCase();\r\n                    if (n.indexOf('json', n.length - 4) !== -1) {\r\n                        error = false;\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            let items = evt.dataTransfer.items;\r\n            if (items && items.length > 0) {\r\n                for (let z = 0; z < items.length; z ++) {\r\n                    if (items[z].type === '' || items[z].type === 'text/plain') {\r\n                        error = false;\r\n                    }\r\n                }\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.\r\n        if (error) {\r\n            this.dragStyler(evt, 'Error');\r\n        } else if (evt.ctrlKey) {\r\n            this.dragStyler(evt, 'Add');\r\n        } else {\r\n            this.dragStyler(evt, 'Ok');\r\n        }\r\n        /* //evt.target['className'] += ' diagramLoadFile';\r\n        '//console.log('handDragOver');*/\r\n    }\r\n\r\n    private dragStyler(event: Event, typ: string) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n        this.setBoardStyle(typ);\r\n    }\r\n\r\n    private handleDragLeave(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n        evt.dataTransfer.dropEffect = 'link'; // Explicitly show this is a copy.\r\n        evt.target['className'] = 'diagram';\r\n        console.log('handDragLeave');\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Class } from '../elements/nodes/Class';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Association } from '../elements/index';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class NewEdge implements EventHandler {\r\n    private graph: Graph;\r\n    private svgLine: SVGSVGElement;\r\n    private isEdgeDrawing: boolean;\r\n    private sourceNode: Node;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    private lastTargetNode: Node;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(NewEdge.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(NewEdge.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!((<KeyboardEvent>event).ctrlKey || EventBus.isHandlerActiveOrFree('NewEdge', true))) {\r\n            this.removeLine();\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element instanceof Node) {\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n\r\n            case 'mousemove':\r\n                this.drawEdge(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.setNewEdgeToNode(event);\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default: break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawEdge(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        let lineToX = Util.getEventX(evt);\r\n        let lineToy = Util.getEventY(evt);\r\n\r\n        let path = `M${this.x} ${this.y} L${lineToX} ${lineToy}`;\r\n        // if line wasnt draw\r\n        if (!this.svgLine) {\r\n\r\n            let attr = {\r\n                tag: 'path',\r\n                id: 'newEdgePath',\r\n                d: path,\r\n                class: 'SVGEdge'\r\n            };\r\n\r\n            let shape = Util.createShape(attr);\r\n            this.svgLine = shape;\r\n\r\n            this.graph.root.appendChild(shape);\r\n            this.graph.root.appendChild(this.sourceNode.$view);\r\n        }\r\n        else {\r\n\r\n            // set new L path\r\n            this.svgLine.setAttributeNS(null, 'd', path);\r\n\r\n            // get node from position\r\n            let targetNode = this.graph.$graphModel.getNodeByPosition(Util.getEventX(evt), Util.getEventY(evt));\r\n\r\n            // if some targetnode is available, so highlight the node\r\n            if (targetNode) {\r\n\r\n                // reset the last one\r\n                if (this.lastTargetNode && this.lastTargetNode.id !== targetNode.id) {\r\n                    this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n                }\r\n\r\n                this.lastTargetNode = targetNode;\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz-drawedge');\r\n            }\r\n            else if (this.lastTargetNode) {\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeLine(): void {\r\n        this.isEdgeDrawing = false;\r\n\r\n        if (this.svgLine) {\r\n            this.graph.root.removeChild(this.svgLine);\r\n            this.svgLine = null;\r\n        }\r\n\r\n        if (this.lastTargetNode) {\r\n            this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n        }\r\n    }\r\n\r\n    private setNewEdgeToNode(event: Event | any): void {\r\n        // get node from position\r\n        let targetNode = this.graph.$graphModel\r\n            .getNodeByPosition(Util.getEventX(event), Util.getEventY(event));\r\n\r\n        if (!targetNode) {\r\n            this.removeLine();\r\n\r\n            return;\r\n        }\r\n\r\n        this.removeLine();\r\n        let edgeType = this.sourceNode.$defaulEdgeType || 'Association';\r\n\r\n        let jsonData = {\r\n            type: edgeType,\r\n            source: this.sourceNode.id,\r\n            target: targetNode.id\r\n        };\r\n\r\n        let newEdge = this.graph.$graphModel.addEdge(<any>jsonData, true);\r\n        this.graph.drawElement(newEdge);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        this.isEdgeDrawing = true;\r\n        this.sourceNode = element as Class;\r\n\r\n        this.x = this.sourceNode.getPos().x + (this.sourceNode.getSize().x / 2);\r\n        this.y = this.sourceNode.getPos().y + (this.sourceNode.getSize().y / 2);\r\n\r\n        // TODO: get this into util or select\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Node } from '../elements/nodes';\r\nimport { Association } from '../elements/edges';\r\nimport { Util } from '../util';\r\nimport { SymbolLibary } from '../elements/nodes/Symbol';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\nimport Attribute from '../elements/nodes/Attribute';\r\n\r\nexport class Select implements EventHandler {\r\n\r\n    private deleteShape: SVGSVGElement;\r\n    private addEdgeShape: SVGSVGElement;\r\n    private copyNodeShape: SVGSVGElement;\r\n    private graph: Graph;\r\n    private padding = 5;\r\n\r\n    private lastSelectedNode: Element;\r\n    private lastSelectedEdge: Element;\r\n\r\n    private isDragged: boolean;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.deleteShape = SymbolLibary.drawSVG({ type: 'Basket', background: true, id: 'trashcan', tooltip: 'Delete class' });\r\n        this.copyNodeShape = SymbolLibary.drawSVG({ type: 'Copynode', background: true, id: 'copyNode', tooltip: 'Copy class' });\r\n        this.addEdgeShape = SymbolLibary.drawSVG({ type: 'Edgeicon', background: true, id: 'addEdge', tooltip: 'Click and drag to connect this class' });\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        let x = Util.getEventX(event);\r\n        let y = Util.getEventY(event);\r\n\r\n        event.stopPropagation();\r\n        if (event.type === 'drag') {\r\n            this.isDragged = true;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            if (element instanceof Node) {\r\n                this.lastSelectedNode = <Element>element.$view;\r\n            }\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n        }\r\n\r\n        if (event.target['id'] === 'background' || element === this.graph.$graphModel) {\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let e = <Node>element;\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.graph.root.appendChild(this.addEdgeShape);\r\n            this.graph.root.appendChild(this.copyNodeShape);\r\n            this.graph.root.appendChild(element.$view);\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'visible');\r\n\r\n            let x = (e.getPos().x + e.getSize().x) + 5;\r\n            let y = e.getPos().y;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y + this.padding})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.copyNodeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 40 + this.padding})`);\r\n            this.copyNodeShape.onclick = (evt) => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let copyClass = (element).copy();\r\n                copyClass.withPos(nextFreePosition.x, nextFreePosition.y);\r\n                this.graph.drawElement(copyClass);\r\n            };\r\n\r\n            this.addEdgeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 80 + this.padding})`);\r\n            this.addEdgeShape.onmousedown = function () {\r\n                EventBus.setActiveHandler('NewEdge');\r\n                element.$view.dispatchEvent(Util.createCustomEvent('mousedown'));\r\n            };\r\n        }\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let clazz = <Node>element;\r\n\r\n            if (Util.isChrome()) {\r\n                if (this.lastSelectedNode && element.id === this.lastSelectedNode.id && !this.isDragged) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            this.isDragged = false;\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            this.lastSelectedNode = <Element>element.$view;\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete class');\r\n\r\n            // draw textbox to edit clazz in one line\r\n            let divInlineEdit = document.createElement('div');\r\n            divInlineEdit.id = 'inlineEdit';\r\n            divInlineEdit.style.position = 'absolute';\r\n            divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n            divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n            divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n            divInlineEdit.style.zIndex = '42';\r\n\r\n            let inputText = document.createElement('input');\r\n            inputText.type = 'text';\r\n            inputText.style.width = '100%';\r\n            inputText.placeholder = 'Add properties, edit label';\r\n\r\n            divInlineEdit.appendChild(inputText);\r\n            document.body.appendChild(divInlineEdit);\r\n\r\n            inputText.addEventListener('focusout', (evt) => {\r\n\r\n                if (Util.isChrome()) {\r\n                    // only if input is empty, remove the inline edit function\r\n                    if ((!inputText.value || inputText.value.length === 0) && (!this.lastSelectedNode || element.id !== this.lastSelectedNode.id)) {\r\n                        this.removeLastInlineEdit();\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                // only if input is empty, remove the inline edit function\r\n                if ((!inputText.value || inputText.value.length === 0)) {\r\n                    this.removeLastInlineEdit();\r\n                }\r\n            });\r\n\r\n            let g = this.graph;\r\n            let propertyTypes: string[] = ['boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'short', 'String', 'void'];\r\n            inputText.addEventListener('keydown', function (evt) {\r\n\r\n                let keyCode = (<any>evt).which;\r\n                let inputValue = <any>inputText.value;\r\n\r\n                if (Util.endsWith(inputValue, ':') && !document.getElementById('selectPropertyType')) {\r\n                    let selectType = document.createElement('select');\r\n                    selectType.id = 'selectPropertyType';\r\n                    selectType.style.width = '100%';\r\n\r\n                    for (let type of propertyTypes) {\r\n                        let selectOption = document.createElement('option');\r\n                        selectOption.value = type;\r\n                        selectOption.innerHTML = type;\r\n                        selectType.appendChild(selectOption);\r\n                    }\r\n\r\n                    selectType.addEventListener('change', function (evt) {\r\n                        let inputValueSplitted = inputValue.split(':');\r\n                        let selectedPropertyType = selectType.options[selectType.selectedIndex].value;\r\n\r\n                        if (inputValueSplitted.length >= 1) {\r\n                            inputText.value = inputValueSplitted[0].trim() + ' : ' + selectedPropertyType;\r\n                            inputText.focus();\r\n                        }\r\n                    });\r\n\r\n                    divInlineEdit.appendChild(selectType);\r\n                }\r\n                else if (!Util.includes(inputValue, ':')) {\r\n                    let selectType = document.getElementById('selectPropertyType');\r\n\r\n                    if (selectType) {\r\n                        selectType.remove();\r\n                    }\r\n                }\r\n\r\n                if (keyCode !== 13) {\r\n                    return;\r\n                }\r\n\r\n                // attribute\r\n                if ((Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) === false) {\r\n                    if (Util.includes(inputValue, ':')) {\r\n                        clazz.addAttribute(inputValue.trim());\r\n                        clazz.reDraw();\r\n                    } else if (Util.includes(inputValue, '=') ) {\r\n                        let attr: Attribute = null;\r\n                        let name = inputValue.substring(0, inputValue.indexOf('=')).trim();\r\n                        for (let child of clazz.getAttributes() ) {\r\n                            if ( name === child.getName()) {\r\n                                attr = child;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (attr) {\r\n                            attr.updateValue(inputValue.substring(inputValue.indexOf('=') + 1).trim());\r\n                        }\r\n                        clazz.reDraw();\r\n                    }\r\n                }\r\n\r\n                // method\r\n                else if (Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) {\r\n                    clazz.addMethod(inputValue.trim());\r\n                    clazz.reDraw();\r\n                }\r\n                // label\r\n                else if (inputValue.trim().split(' ').length === 1 && inputValue.trim().length > 0) {\r\n                    clazz.updateLabel(inputValue.trim());\r\n                }\r\n\r\n                // reset size\r\n                divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n                divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n                divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n\r\n                inputText.value = '';\r\n\r\n                // remove combobox to select type of property\r\n                let selectType = document.getElementById('selectPropertyType');\r\n\r\n                if (selectType) {\r\n                    selectType.remove();\r\n                }\r\n\r\n                // TODO: reload propertiespanel. not working!\r\n                // event wont dispatch\r\n                // let customEvt = Util.createCustomEvent(EventBus.RELOADPROPERTIES);\r\n                // element.$view.dispatchEvent(customEvt);\r\n            });\r\n\r\n            (<any>divInlineEdit.children[0]).focus();\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Association) {\r\n            this.graph.root.appendChild(element.$view);\r\n            this.graph.root.appendChild(element.$sNode.$view);\r\n            this.graph.root.appendChild(element.$tNode.$view);\r\n\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete edge');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            let edge = <Association>element;\r\n            this.lastSelectedEdge = edge.$view;\r\n\r\n            Util.addClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Select.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Select.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private setTooltipOfShape(shape: SVGSVGElement, tooltip: string): void {\r\n        if (!shape || !shape.hasChildNodes()) {\r\n            return;\r\n        }\r\n\r\n        let titleElement = <SVGSVGElement>shape.childNodes[0];\r\n        if (!titleElement || titleElement.tagName !== 'title') {\r\n            return;\r\n        }\r\n\r\n        titleElement.textContent = tooltip;\r\n    }\r\n\r\n    private resetLastSelectedElements() {\r\n        // reset the last one\r\n        if (this.lastSelectedNode) {\r\n            Util.removeClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.lastSelectedNode = undefined;\r\n        }\r\n\r\n        if (this.lastSelectedEdge) {\r\n            Util.removeClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n            this.lastSelectedEdge = undefined;\r\n        }\r\n\r\n        this.removeLastInlineEdit();\r\n    }\r\n\r\n    private removeLastInlineEdit(): void {\r\n        // remove last inline edit of clazz\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n\r\n            // its not supported in internet explorer\r\n            // lastInlineEdit.remove();\r\n        }\r\n    }\r\n\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\n\r\nexport class Zoom implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n    }\r\n\r\n    public handle(e: any, element: DiagramElement): boolean {\r\n        let delta = e.deltaY || e.wheelDeltaY || -e.wheelDelta;\r\n        let d = 1 + (delta / 1000);\r\n\r\n        let values = this.graph.root.getAttribute('viewBox').split(' ');\r\n        const newViewBox = `${values[0]} ${values[1]} ${parseInt(values[2]) * d} ${parseInt(values[3]) * d}`;\r\n        this.graph.root.setAttribute('viewBox', newViewBox);\r\n\r\n        e.preventDefault();\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Zoom.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Zoom.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n}\r\n","export * from './Drag';\r\nexport * from './Select';\r\nexport * from './Zoom';\r\nexport * from './NewEdge';\r\nexport * from './ImportFile';\r\nexport * from './AddNode';\r\n","import { Association } from '../elements/edges';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport Layout from './Layout';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\n\r\nexport class DagreLayout implements Layout {\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        if (!window['dagre']) {\r\n            return;\r\n        }\r\n        let model = graph.$graphModel;\r\n        let g = new window['dagre'].graphlib.Graph();\r\n\r\n        g.setGraph({ marginx: 100, marginy: 20 }).setDefaultEdgeLabel(function () {\r\n            return {};\r\n        });\r\n\r\n        for (let node of model.nodes) {\r\n            g.setNode(node.id, { width: node.getSize().x, height: node.getSize().y });\r\n        }\r\n\r\n        for (let edge of model.edges) {\r\n            g.setEdge(edge.$sNode.id, edge.$tNode.id);\r\n        }\r\n\r\n        window['dagre'].layout(g);\r\n\r\n        g.nodes().forEach(function (nodeId: string) {\r\n            for (let node of model.nodes) {\r\n                if (node.id === nodeId) {\r\n                    node.withPos(g.node(nodeId).x - g.node(nodeId).width / 2, g.node(nodeId).y - g.node(nodeId).height / 2);\r\n                }\r\n            }\r\n        });\r\n        g.edges().forEach(function (e: any) {\r\n            for (let edge of model.edges) {\r\n                if (edge.$sNode.id === e.v && edge.$tNode.id === e.w) {\r\n                    let size = g.edge(e).points.length;\r\n                    edge.clearPoints();\r\n                    for (let i = 0; i < size; i++) {\r\n                        let point: SVGPoint = g.edge(e).points[i];\r\n                        edge.addPoint(point.x, point.y);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n}\r\n","import {DiagramElement} from '../elements/BaseElements';\r\nimport Layout from './Layout';\r\nimport {Graph} from '../elements/Graph';\r\nimport {Association} from '../elements/edges/Association';\r\nimport {Node} from '../elements/nodes/Node';\r\nimport {Control} from '../Control';\r\n\r\nexport class LayoutGraphMin {\r\n    public nodes: Object = {};\r\n    public edges: Array<Object> = [];\r\n    public outEdges: Object = {};\r\n    public inEdges: Object = {};\r\n    public dummyNodes: Array<LayoutGraphNode> = [];\r\n    public dummyEdges: Object = {};\r\n    public count: number = 0;\r\n    public minRank: number = Number.POSITIVE_INFINITY;\r\n    public maxRank: number = 0;\r\n    public maxHeight: number = 0;\r\n    public maxWidth: number = 0;\r\n    public ranksep: number = 0;\r\n    public edgesLabel: Array<Object> = [];\r\n\r\n    public nodeCount(): number {\r\n        return this.count;\r\n    }\r\n\r\n    public node(id: string) {\r\n        return this.nodes[id];\r\n    }\r\n\r\n    public setNode(id: string, n: LayoutGraphNode) {\r\n        if (n && !this.nodes[id]) {\r\n            this.nodes[id] = n;\r\n            this.count = this.count + 1;\r\n        } else if (!n && this.nodes[id]) {\r\n            delete this.nodes[id];\r\n        }\r\n    }\r\n}\r\n\r\nexport class LayoutGraphNode {\r\n    public id: string;\r\n    public width: number;\r\n    public height: number;\r\n    public x: number;\r\n    public y: number;\r\n    public edgeObj: LayoutGraphEdge;\r\n    public rank: number;\r\n\r\n    constructor(id: string, width: number, height: number, x: number, y: number) {\r\n        this.id = id;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n\r\nexport class LayoutGraphEdge {\r\n    public source: string;\r\n    public target: string;\r\n}\r\n\r\n// \t\t\t\t######################################################### DagreGraph #########################################################\r\nexport class DagreLayoutMin implements Layout {\r\n    public static EDGE_KEY_DELIM = '\\x01';\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        let g, layoutNode, nodes, newEdge, edges;\r\n        let i, n, x, y, sId, tId, split = DagreLayoutMin.EDGE_KEY_DELIM;\r\n        let e: Association;\r\n\r\n        nodes = node['nodes'];\r\n        edges = node['edges'];\r\n        g = new LayoutGraphMin();\r\n\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            g.setNode(n.id, new LayoutGraphNode(n.id, n.getSize().x, n.getSize().y, n.getPos().x, n.getPos().y));\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            sId = this.getNodeId(e.$sNode);\r\n            tId = this.getNodeId(e.$tNode);\r\n            if (sId > tId) {\r\n                let tmp = tId;\r\n                tId = sId;\r\n                sId = tmp;\r\n            }\r\n            let idAB = sId + split + tId + split;\r\n            let idBA = tId + split + sId + split;\r\n            if (sId !== tId && g.edgesLabel.indexOf(idAB) < 0 && g.edgesLabel.indexOf(idBA) < 0) {\r\n                newEdge = {source: sId, target: tId, minlen: 1, weight: 1};\r\n                g.edges.push(newEdge);\r\n                g.edgesLabel.push(idAB);\r\n                // In Edges\r\n                if (!g.inEdges[tId]) {\r\n                    g.inEdges[tId] = [];\r\n                }\r\n                g.inEdges[tId].push(newEdge);\r\n\r\n                // Out Edges\r\n                if (!g.outEdges[sId]) {\r\n                    g.outEdges[sId] = [];\r\n                }\r\n                g.outEdges[sId].push(newEdge);\r\n            }\r\n        }\r\n        this.layouting(g);\r\n        // Set the layouting back\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            layoutNode = g.node(n.id);\r\n            x = n.getPos().x;\r\n            y = n.getPos().y;\r\n            if (x < 1 && y < 1) {\r\n                n.withPos(Math.ceil(layoutNode.x), Math.ceil(layoutNode.y));\r\n            }\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            // OBSOLETE method:  e.calc(graph.canvas);\r\n        }\r\n        graph.draw();\r\n    }\r\n\r\n    public getNodeId(node: Control): string {\r\n        if (node.$owner) {\r\n            return this.getNodeId(node.$owner) || node.id;\r\n        }\r\n        return node.id;\r\n    }\r\n\r\n    public layouting(g: LayoutGraphMin) {\r\n        this.longestPath(g);\r\n        this.normalizeRanks(g);\r\n        this.normalizeEdge(g);\r\n        // this.setSimpleOrder(g);\r\n        this.order(g);\r\n        g.ranksep = 25;\r\n        // remove Dummy\r\n        this.removeDummy(g);\r\n        this.position(g);\r\n    }\r\n\r\n    public setSimpleOrder(g: LayoutGraphMin) {\r\n        let i, n;\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            n.order = n.rank;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Applies heuristics to minimize edge crossings in the graph and sets the best\r\n     * order solution as an order attribute on each node.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Graph must be DAG\r\n     *    2. Graph nodes must be objects with a \"rank\" attribute\r\n     *    3. Graph edges must have the \"weight\" attribute\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Graph nodes will have an \"order\" attribute based on the results of the\r\n     *       algorithm.\r\n     */\r\n    public order(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        let visited = {};\r\n        let node, n, order, i;\r\n        for (i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (n in g.nodes) {\r\n            if (visited[n]) {\r\n                continue;\r\n            }\r\n            visited[n] = true;\r\n            node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank].push(n);\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                g.nodes[layering[order][n]].order = parseInt(n);\r\n            }\r\n        }\r\n        // Fix resolve conflict\r\n        for (order in layering) {\r\n            if (layering[order].length > 1) {\r\n                for (n in layering[order]) {\r\n                    if (layering[order].hasOwnProperty(n) === false) {\r\n                        continue;\r\n                    }\r\n                    let name = layering[order][n];\r\n                    let sum = 0;\r\n                    let weight = 1;\r\n                    let edges = g.dummyEdges[name];\r\n                    if (edges) {\r\n                        for (i in edges) {\r\n                            if (edges.hasOwnProperty(i) === false) {\r\n                                continue;\r\n                            }\r\n                            let edge = edges[i];\r\n                            let nodeU = g.node(edge.target);\r\n                            sum = sum + (edge.weight * nodeU.order);\r\n                            weight = weight + edge.weight;\r\n                        }\r\n                    }\r\n                    g.node(name).barycenter = sum / weight;\r\n                    g.node(name).weight = weight;\r\n                }\r\n            } else if (layering[order].length > 0) {\r\n                for (n in layering[order]) {\r\n                    let name = layering[order][n];\r\n                    g.node(name).barycenter = 1;\r\n                    g.node(name).weight = 1;\r\n                }\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                let node = g.nodes[layering[order][n]];\r\n                node.order = parseInt(n) + node.barycenter * node.weight;\r\n                if (isNaN(node.order)) {\r\n                    console.log('ERROR');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public removeDummy(g: LayoutGraphMin) {\r\n        for (let z in g.dummyNodes) {\r\n            let node = g.dummyNodes[z];\r\n            g.setNode(node.id, null);\r\n        }\r\n        g.dummyNodes = [];\r\n        g.dummyEdges = {};\r\n    }\r\n\r\n    /*\r\n     * Breaks any long edges in the graph into short segments that span 1 layer\r\n     * each. This operation is undoable with the denormalize function.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. The input graph is a DAG.\r\n     *    2. Each node in the graph has a \"rank\" property.\r\n     *\r\n     * Post-condition:\r\n     *\r\n     *    1. All edges in the graph have a length of 1.\r\n     *    2. Dummy nodes are added where edges have been split into segments.\r\n     *    3. The graph is augmented with a \"dummyChains\" attribute which contains\r\n     *       the first dummy in each chain of dummy nodes produced.\r\n     */\r\n    public normalizeEdge(g: LayoutGraphMin): void {\r\n        let i: number = 1;\r\n        for (let id in g.edges) {\r\n            let e: LayoutGraphEdge = <LayoutGraphEdge>g.edges[id];\r\n            let v: string = e.source;\r\n            let vRank = g.node(v).rank;\r\n            const w: string = e.target;\r\n            const wRank: number = g.node(w).rank;\r\n            let name: string;\r\n\r\n            if (wRank === vRank + 1) {\r\n                continue;\r\n            }\r\n\r\n            let dummy;\r\n            for (vRank = vRank + 1; vRank < wRank; ++vRank) {\r\n                name = '_d' + e.source + e.target + (i++);\r\n                let newEdge = {source: v, target: name, minlen: 1, weight: 1};\r\n                dummy = new LayoutGraphNode(name, 0, 0, 0, 0);\r\n                dummy.edgeObj = e;\r\n                dummy.rank = vRank;\r\n                // Dummy Edges\r\n                if (!g.dummyEdges[v]) {\r\n                    g.dummyEdges[v] = [];\r\n                }\r\n                g.dummyEdges[v].push(newEdge);\r\n\r\n                g.dummyNodes.push(dummy);\r\n                g.setNode(dummy.id, dummy);\r\n                v = name;\r\n            }\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Initializes ranks for the input graph using the longest path algorithm. This\r\n     * algorithm scales well and is fast in practice, it yields rather poor\r\n     * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\r\n     * ranks wide and leaving edges longer than necessary. However, due to its\r\n     * speed, this algorithm is good for getting an initial ranking that can be fed\r\n     * into other algorithms.\r\n     *\r\n     * This algorithm does not normalize layers because it will be used by other\r\n     * algorithms in most cases. If using this algorithm directly, be sure to\r\n     * run normalize at the end.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Input graph is a DAG.\r\n     *    2. Input graph node labels can be assigned properties.\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Each node will be assign an (unnormalized) \"rank\" property.\r\n     */\r\n    public longestPath(g: LayoutGraphMin) {\r\n        let i, n, visited = [];\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            visited.push(i);\r\n            n.rank = this.findAllPaths(g, n, 0, visited);\r\n            g.minRank = Math.min(g.minRank, n.rank);\r\n        }\r\n    }\r\n\r\n    public findAllPaths(g: LayoutGraphMin, n: Node, currentCost: number, path: Array<String>) {\r\n        let min: number = 0;\r\n        let id: string;\r\n        let z: number;\r\n        let target;\r\n        if (g.outEdges[n.id]) {\r\n            for (z = 0; z < g.outEdges[n.id].length; z++) {\r\n                id = g.outEdges[n.id][z].target;\r\n                target = g.nodes[id];\r\n                if (path[id]) {\r\n                    min = Math.min(min, target.rank);\r\n                } else if (path.indexOf(id) < 0) {\r\n                    min = Math.min(min, this.findAllPaths(g, target, currentCost - 2, path));\r\n                } else {\r\n                    min = currentCost;\r\n                }\r\n            }\r\n            return min;\r\n        }\r\n        return currentCost;\r\n    }\r\n\r\n    /*\r\n     * Adjusts the ranks for all nodes in the graph such that all nodes v have\r\n     * rank(v) >= 0 and at least one node w has rank(w) = 0.\r\n     */\r\n    public normalizeRanks(g: LayoutGraphMin) {\r\n        let min = g.minRank;\r\n        let value;\r\n        g.maxRank = Number.NEGATIVE_INFINITY;\r\n        g.maxHeight = 0;\r\n        g.maxWidth = 0;\r\n        for (let i in g.nodes) {\r\n            let node = g.nodes[i];\r\n            if (node.rank !== undefined) {\r\n                node.rank -= min;\r\n                value = Math.abs(node.rank);\r\n                if (value > g.maxRank) {\r\n                    g.maxRank = value;\r\n                }\r\n                g.maxHeight = Math.max(g.maxHeight, node.height);\r\n                g.maxWidth = Math.max(g.maxWidth, node.width);\r\n            }\r\n        }\r\n    }\r\n\r\n    public position(g: LayoutGraphMin) {\r\n        this.positionY(g);\r\n        let list = this.positionX(g);\r\n        for (let i in list) {\r\n            for (let pos in list[i]) {\r\n                if (list[i].hasOwnProperty(pos) === false) {\r\n                    continue;\r\n                }\r\n                if (g.node(list[i][pos])) {\r\n                    g.node(list[i][pos]).x = parseInt(pos) * g.maxWidth;\r\n                }\r\n            }\r\n\r\n        }\r\n    }\r\n\r\n    public positionY(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        let rankSep = g.ranksep;\r\n        let prevY = 0;\r\n        for (let layer in layering) {\r\n            let maxHeight = g.maxHeight;\r\n            for (let v in layering[layer]) {\r\n                if (layering[layer].hasOwnProperty(v) === false) {\r\n                    continue;\r\n                }\r\n                let id = layering[layer][v];\r\n                g.nodes[id].y = prevY + maxHeight / 2;\r\n            }\r\n            prevY += maxHeight + rankSep;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\r\n     * function will produce a matrix with the ids of each node.\r\n     */\r\n    public buildLayerMatrix(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        for (let i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (let n in g.nodes) {\r\n            let node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank][node.order] = n;\r\n            }\r\n        }\r\n        return layering;\r\n    }\r\n\r\n    public positionX(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        return layering;\r\n    }\r\n}\r\n","import { Point } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport Layout from './Layout';\r\n\r\nexport class Random implements Layout {\r\n\r\n  public layout(graph: Graph) {\r\n\r\n    let model = graph.$graphModel;\r\n\r\n    if (model.nodes) {\r\n      for (let node of model.nodes) {\r\n        let pos: Point = node.getPos();\r\n        if (pos.x === 0 && pos.y === 0) {\r\n          let x = Util.getRandomInt(0, graph.canvasSize.width);\r\n          let y = Util.getRandomInt(0, graph.canvasSize.height);\r\n          node.withPos(x, y);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","export * from './DagreLayout';\r\nexport * from './Random';\r\nexport * from './DagreLayoutMin';\r\n\r\nimport {DagreLayout} from './DagreLayout';\r\nimport {DagreLayoutMin} from './DagreLayoutMin';\r\nimport {Random} from './Random';\r\nnew DagreLayout();\r\nnew DagreLayoutMin();\r\nnew Random();\r\n","import {VirtualKeyBoard} from './VirtualKeyBoard';\r\n\r\nexport {Point} from './elements/BaseElements';\r\nexport {Bridge, DelegateAdapter} from './Bridge';\r\nexport {Graph} from './elements/Graph';\r\nexport * from './elements/nodes';\r\nexport * from './elements/edges';\r\nexport * from './adapters';\r\nexport * from './UML';\r\nimport {Point} from './elements/BaseElements';\r\nimport {Graph} from './elements/Graph';\r\nimport {ClassEditor} from './elements/ClassEditor';\r\nimport {Bridge} from './Bridge';\r\nimport {Util} from './util';\r\nimport * as nodes  from './elements/nodes';\r\nimport * as edges from './elements/edges';\r\nimport {ScrumBoard} from './ScrumBoard';\r\n\r\nif (!window['Point']) {\r\n    window['Point'] = Point;\r\n    window['Graph'] = Graph;\r\n    window['bridge'] = new Bridge();\r\n    window['Util'] = Util;\r\n    window['Class'] = nodes.Class;\r\n    window['Association'] = edges.Association;\r\n    window['SymbolLibary'] = nodes.SymbolLibary;\r\n    window['ClassEditor'] = ClassEditor;\r\n    window['VirtualKeyBoard'] = VirtualKeyBoard;\r\n    window['ScrumBoard'] = ScrumBoard;\r\n}\r\n","'use strict';\r\nimport { CSS } from './CSS';\r\nimport { Node } from './elements/nodes/Node';\r\nimport { DiagramElement, Point } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport class Util {\r\n\r\n    public static isAutoSave: boolean;\r\n\r\n    static getRandomInt(min: number, max: number): number {\r\n        return Math.floor(Math.random() * (max - min + 1)) + min;\r\n    }\r\n\r\n    static createShape(attrs: any): SVGSVGElement {\r\n        let xmlns = attrs.xmlns || 'http://www.w3.org/2000/svg';\r\n        let shape = document.createElementNS(xmlns, attrs.tag);\r\n\r\n        for (let attr in attrs) {\r\n            if (!attrs.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr !== 'tag') {\r\n                shape.setAttribute(attr, attrs[attr]);\r\n\r\n            }\r\n        }\r\n        return <SVGSVGElement><any>shape;\r\n    }\r\n\r\n    static toPascalCase(value: string): string {\r\n        value = value.charAt(0).toUpperCase() + value.substring(1).toLowerCase();\r\n        return value;\r\n    }\r\n\r\n    static isSVG(tag: string): boolean {\r\n        let i,\r\n            list = ['svg', 'path', 'polygon', 'polyline', 'line', 'title', 'rect', 'filter', 'feGaussianBlur', 'feOffset', 'feBlend', 'linearGradient', 'stop', 'text', 'symbol', 'textPath', 'defs', 'fegaussianblur', 'feoffset', 'feblend', 'circle', 'ellipse', 'g'];\r\n        for (i = 0; i < list.length; i += 1) {\r\n            if (list[i] === tag) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    static createHTML(node: any): HTMLElement {\r\n        return <HTMLElement>this.create(node);\r\n    }\r\n    static create(node: any): Element {\r\n        let style, item, xmlns, key, tag, k;\r\n        if (document.createElementNS && (this.isSVG(node.tag) || node.xmlns)) {\r\n            if (node.xmlns) {\r\n                xmlns = node.xmlns;\r\n            } else {\r\n                xmlns = 'http://www.w3.org/2000/svg';\r\n            }\r\n            if (node.tag === 'img' && xmlns) {\r\n                item = document.createElementNS(xmlns, 'image');\r\n                item.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\r\n                item.setAttributeNS('http://www.w3.org/1999/xlink', 'href', node.src);\r\n            } else {\r\n                item = document.createElementNS(xmlns, node.tag);\r\n            }\r\n        } else {\r\n            item = document.createElement(node.tag);\r\n        }\r\n        tag = node.tag.toLowerCase();\r\n        for (key in node) {\r\n            if (!node.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            k = key.toLowerCase();\r\n            if (node[key] === null) {\r\n                continue;\r\n            }\r\n            if (k === 'tag' || k.charAt(0) === '$' || k === '$graphModel') {\r\n                continue;\r\n            }\r\n            if (k.charAt(0) === '#') {\r\n                item[k.substring(1)] = node[key];\r\n                continue;\r\n            }\r\n            if (k === 'rotate') {\r\n                item.setAttribute('transform', 'rotate(' + node[key] + ',' + node.$graphModel.x + ',' + node.$graphModel.y + ')');\r\n                continue;\r\n            }\r\n            if (k === 'value') {\r\n                if (!node[key]) {\r\n                    continue;\r\n                }\r\n                if (tag !== 'input') {\r\n                    if (tag === 'text') {// SVG\r\n                        item.appendChild(document.createTextNode(node[key]));\r\n                    } else {\r\n                        item.innerHTML = node[key];\r\n                    }\r\n                } else {\r\n                    item[key] = node[key];\r\n                }\r\n                continue;\r\n            }\r\n            if (k.indexOf('on') === 0) {\r\n                this.bind(item, k.substring(2), node[key]);\r\n                continue;\r\n            }\r\n            if (k.indexOf('-') >= 0) {\r\n                item.style[key] = node[key];\r\n            } else {\r\n                if (k === 'style' && typeof (node[key]) === 'object') {\r\n                    for (style in node[key]) {\r\n                        if (!node[key].hasOwnProperty(style)) {\r\n                            continue;\r\n                        }\r\n                        if (node[key][style]) {\r\n                            if ('transform' === style) {\r\n                                item.style.transform = node[key][style];\r\n                                item.style.msTransform = item.style.MozTransform = item.style.WebkitTransform = item.style.OTransform = node[key][style];\r\n                            } else {\r\n                                item.style[style] = node[key][style];\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    item.setAttribute(key, node[key]);\r\n                }\r\n            }\r\n        }\r\n        if (node.$parent) {\r\n            node.$parent.appendChild(item);\r\n        }\r\n        if (node.$graphModel) {\r\n            item.$graphModel = node.$graphModel;\r\n        }\r\n        return item;\r\n    }\r\n\r\n    static setSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttribute('width', value);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.setAttribute('height', value);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setAttributeSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttributeNS(null, 'width', value);\r\n        value = Util.getValue(height);\r\n        item.setAttributeNS(null, 'height', value);\r\n    }\r\n\r\n    static setStyleSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setPos(item: any, x: number, y: number): void {\r\n        if (item.x && item.x.baseVal) {\r\n            item.style.left = x + 'px';\r\n            item.style.top = y + 'px';\r\n        } else {\r\n            item.x = x;\r\n            item.y = y;\r\n        }\r\n    }\r\n\r\n    static getValue(value: string | number): number {\r\n        return parseInt(('0' + value).replace('px', ''), 10);\r\n    }\r\n\r\n    static isIE(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('.net') > -1;\r\n    }\r\n\r\n    static isEdge(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('edge') > -1;\r\n    }\r\n\r\n    static isFireFox(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n    }\r\n\r\n    static isSafari(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        return navigator.userAgent.toLowerCase().indexOf('safari') > -1 && !isEdge;\r\n    }\r\n\r\n    static isOpera(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('opera') > -1;\r\n    }\r\n\r\n    static isChrome(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        let isSafari = Util.isSafari();\r\n        return navigator.userAgent.toLowerCase().indexOf('chrome') > -1 && !isEdge && isSafari;\r\n    }\r\n\r\n    static getEventX(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetX'] : event.layerX;\r\n    }\r\n\r\n    static getEventY(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetY'] : event.layerY;\r\n    }\r\n\r\n    static getNumber(str: string): number {\r\n        return parseInt((str || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    static getStyle(styleProp: string): CSS {\r\n        let i, style, diff, current, ref, el = document.createElement('div'), css;\r\n        document.body.appendChild(el);\r\n        css = new CSS(styleProp);\r\n        ref = new CSS(styleProp, el).css;\r\n        style = window.getComputedStyle(el, null);\r\n        el.className = styleProp;\r\n        current = new CSS(styleProp, el).css;\r\n        diff = Util.getNumber(style.getPropertyValue('border-width'));\r\n        for (i in current) {\r\n            if (!current.hasOwnProperty(i)) {\r\n                continue;\r\n            }\r\n            if (i === 'width' || i === 'height') {\r\n                if (Util.getNumber(current[i]) !== 0 && Util.getNumber(current[i]) + diff * 2 !== Util.getNumber(ref[i])) {\r\n                    css.add(i, current[i]);\r\n                }\r\n            } else if (current[i] !== ref[i]) {\r\n                css.add(i, current[i]);\r\n            }\r\n        }\r\n        document.body.removeChild(el);\r\n        return css;\r\n    }\r\n\r\n    static sizeOf(item: string | any, node?: Node): ClientRect {\r\n        let board;\r\n        let rect: ClientRect;\r\n        let addBoard: boolean;\r\n        if (!item) {\r\n            return undefined;\r\n        }\r\n        if (node) {\r\n            board = node.$owner.$view;\r\n            addBoard = false;\r\n        }\r\n\r\n        if (!board) {\r\n            addBoard = true;\r\n            board = Util.createShape({ tag: 'svg', id: 'root', width: 200, height: 200 });\r\n            document.body.appendChild(board);\r\n        }\r\n        if (board.tagName === 'svg') {\r\n            if (typeof item === 'string') {\r\n                item = Util.create({ tag: 'text', $font: true, value: item });\r\n                item.setAttribute('width', '5px');\r\n            }\r\n        } else if (typeof item === 'string') {\r\n            item = document.createTextNode(item);\r\n        }\r\n        board.appendChild(item);\r\n        rect = item.getBoundingClientRect();\r\n        board.removeChild(item);\r\n\r\n        if (addBoard) {\r\n            document.body.removeChild(board);\r\n        }\r\n        return rect;\r\n    }\r\n\r\n    static getColor(style: string, defaultColor?: string) {\r\n        if (style) {\r\n            if (style.toLowerCase() === 'create') {\r\n                return '#008000';\r\n            }\r\n            if (style.toLowerCase() === 'nac') {\r\n                return '#FE3E3E';\r\n            }\r\n            if (style.indexOf('#') === 0) {\r\n                return style;\r\n            }\r\n        }\r\n        if (defaultColor) {\r\n            return defaultColor;\r\n        }\r\n        return '#000';\r\n    }\r\n\r\n    public static utf8$to$b64(str: string): string {\r\n        return window.btoa(encodeURIComponent(str));\r\n    }\r\n\r\n    public static showSVG(control: DiagramElement) {\r\n        let svg = Util.create({\r\n            tag: 'svg',\r\n            style: { left: control.getPos().x, top: control.getPos().y, position: 'absolute' }\r\n        });\r\n        let child = control.getSVG();\r\n        if (child) {\r\n            svg.appendChild(child);\r\n        }\r\n        Util.setSize(svg, control.getSize().x, control.getSize().y);\r\n        document.body.appendChild(svg);\r\n    }\r\n\r\n    public static toJson(ref: JSON | Object): Object {\r\n        let result = {};\r\n        return Util.copy(result, ref, false, false);\r\n    }\r\n\r\n    public static initControl(parent: Control, control: Control, type: string, id: string, json: JSON | Object) {\r\n        if (typeof control.init === 'function') {\r\n            control.init(parent, type, id);\r\n        }\r\n        if (typeof control.load === 'function') {\r\n            control.load(json);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * copy One Json into another\r\n     * @function\r\n     * @param ref reference Json\r\n     * @param src source Json\r\n     * @param full all attributes include privet $\r\n     * @param replace set the original reference or copy it\r\n     * @returns ref\r\n     * @name copy\r\n     */\r\n    public static copy(ref: JSON | Object, src: JSON | Object, full: boolean, replace: boolean) {\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (replace) {\r\n                        ref[i] = src[i];\r\n                        continue;\r\n                    }\r\n                    if (!ref[i]) {\r\n                        if (src[i] instanceof Array) {\r\n                            ref[i] = [];\r\n                        } else {\r\n                            ref[i] = {};\r\n                        }\r\n                    }\r\n                    Util.copy(ref[i], src[i], full, false);\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref[i] = src[i];\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    public static xmlstringify(text: string): string {\r\n        text = text.replace('<', '&lt;');\r\n        text = text.replace('>', '&gt;');\r\n        return text;\r\n    }\r\n\r\n    public static toXML(ref: JSON | Object | any, src: JSON | Object | any, full: boolean, doc: Document): any {\r\n        let name;\r\n        if (!ref) {\r\n            name = src.constructor.name;\r\n            doc = document.implementation.createDocument(null, name, null);\r\n            ref = doc.childNodes[0];\r\n        }\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (!ref.getAttribute(i)) {\r\n                        if (src[i] instanceof Array) {\r\n                            for (let c in src[i]) {\r\n                                if (!src[i].hasOwnProperty(c)) {\r\n                                    continue;\r\n                                }\r\n                                name = src[i][c].constructor.name;\r\n                                let child = doc.createElement(name);\r\n                                ref.appendChild(child);\r\n                                Util.toXML(child, src[i][c], full, doc);\r\n                            }\r\n                        } else {\r\n                            name = src[i].constructor.name;\r\n                            let child = doc.createElement(name);\r\n                            ref.appendChild(child);\r\n                            Util.toXML(child, src[i], full, doc);\r\n                        }\r\n                    } else {\r\n                        Util.toXML(ref.getAttribute(i), src[i], full, doc);\r\n                    }\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref.setAttribute(i, src[i]);\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    static Range(min: Point, max: Point, x: number, y: number) {\r\n        max.x = Math.max(max.x, x);\r\n        max.y = Math.max(max.y, y);\r\n        min.x = Math.min(min.x, x);\r\n        min.y = Math.min(min.y, y);\r\n    }\r\n\r\n    public static getPosition(m: number, n: number, entity: DiagramElement, refCenter: Point) {\r\n        let t, p = [], list, distance = [], min = 999999999, position, i, step = 15;\r\n        let pos: Point = entity.getPos();\r\n        let size: Point = entity.getSize();\r\n        list = [Point.LEFT, Point.RIGHT];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = this.getLRPosition(m, n, entity, list[i]);\r\n            if (t.y >= pos.y && t.y <= (pos.y + size.y + 1)) {\r\n                t.y += (entity['$' + list[i]] * step);\r\n                if (t.y > (pos.y + size.y)) {\r\n                    // Alternative\r\n                    t = Util.getUDPosition(m, n, entity, Point.DOWN, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        list = [Point.UP, Point.DOWN];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = Util.getUDPosition(m, n, entity, list[i]);\r\n            if (t.x >= pos.x && t.x <= (pos.x + size.x + 1)) {\r\n                t.x += (entity['$' + list[i]] * step);\r\n                if (t.x > (pos.x + size.x)) {\r\n                    // Alternative\r\n                    t = this.getLRPosition(m, n, entity, Point.RIGHT, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        for (i = 0; i < p.length; i += 1) {\r\n            if (distance[i] < min) {\r\n                min = distance[i];\r\n                position = p[i];\r\n            }\r\n        }\r\n        return position;\r\n    }\r\n\r\n    public static getUDPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let x, y: number = pos.y;\r\n        if (p === Point.DOWN) {\r\n            y += size.y;\r\n        }\r\n        x = (y - n) / m;\r\n        if (step) {\r\n            x += e['$' + p] * step;\r\n            if (x < pos.x) {\r\n                x = pos.x;\r\n            } else if (x > (pos.x + size.x)) {\r\n                x = pos.x + size.x;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static getLRPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let y: number, x: number = pos.x;\r\n        if (p === Point.RIGHT) {\r\n            x += size.x;\r\n        }\r\n        y = m * x + n;\r\n        if (step) {\r\n            y += e['$' + p] * step;\r\n            if (y < pos.y) {\r\n                y = pos.y;\r\n            } else if (y > (pos.y + size.y)) {\r\n                y = pos.y + size.y;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static hasClass(element: Element, cls: string) {\r\n        let className = element.getAttribute('class');\r\n        return className.indexOf(cls) > 0;\r\n    }\r\n    public static addClass(element: Element, cls: string) {\r\n        if (!Util.hasClass(element, cls)) {\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className + ' ' + cls);\r\n        }\r\n    }\r\n    public static removeClass(element: Element, cls: string) {\r\n        if (Util.hasClass(element, cls)) {\r\n            let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className.replace(reg, ' ').trim());\r\n        }\r\n    }\r\n\r\n    public static startsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.startsWith) {\r\n            return s.indexOf(searchS) === 0;\r\n        }\r\n\r\n        return s.startsWith(searchS);\r\n    }\r\n\r\n    public static endsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.endsWith) {\r\n            let lastIndex = s.lastIndexOf(searchS);\r\n            return lastIndex !== -1 && lastIndex === (s.length - 1);\r\n        }\r\n\r\n        return s.endsWith(searchS);\r\n    }\r\n\r\n    public static includes(s: string, searchS: string): boolean {\r\n        if (!String.prototype.includes) {\r\n            let idx = s.indexOf(searchS);\r\n            return idx > -1;\r\n        }\r\n        if (s === null) {\r\n            return false;\r\n        }\r\n\r\n        return s.includes(searchS);\r\n    }\r\n\r\n    public static isParentOfChild(parent: Element, child: Element): boolean {\r\n\r\n        if (!parent || !child) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isIE()) {\r\n            let children = parent.childNodes;\r\n            // let found = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                let childItem = children[i];\r\n                if (childItem === child) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        return parent.contains(child);\r\n    }\r\n\r\n    public static createCustomEvent(type: string, params?: any): CustomEvent {\r\n        let evt: CustomEvent;\r\n\r\n        if (typeof window['CustomEvent'] !== 'function') {\r\n            params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n            evt = document.createEvent('CustomEvent');\r\n            evt.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\r\n            return evt;\r\n        }\r\n\r\n        evt = new CustomEvent(type);\r\n\r\n        return evt;\r\n    }\r\n\r\n    public static saveToLocalStorage(model: any): boolean {\r\n        if (!this.isAutoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isLocalStorageSupported()) {\r\n            if (model) {\r\n                if (model.$isLoading) {\r\n                    return false;\r\n                }\r\n                let jsonObj = Util.toJson(model);\r\n                let data = JSON.stringify(jsonObj, null, '\\t');\r\n                localStorage.setItem('diagram', data);\r\n            } else {\r\n                localStorage.removeItem('diagram');\r\n            }\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static getDiagramFromLocalStorage(): string {\r\n        if (Util.isLocalStorageSupported()) {\r\n            return localStorage.getItem('diagram');\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    public static isLocalStorageSupported(): boolean {\r\n        if (this.isEdge()) {\r\n            return false;\r\n        }\r\n        return localStorage !== undefined;\r\n    }\r\n}\r\n"],"sourceRoot":""}
Severity: Minor
Found in doc/diagram.js.map by fixme

TODO found
Open

{"version":3,"sources":["webpack://DiagramJS/webpack/bootstrap","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Adapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Bridge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/BridgeElement.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/CSS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Control.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Data.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventBus.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/JSEPS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Palette.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertiesPanel.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertyBinder.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/RGBColor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/SVGConverter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/ScrumBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Toolbar.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/UML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/VirtualKeyBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/JavaAdapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/BaseElements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/ClassEditor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Graph.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Model.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregate.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Association.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Composition.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Generalisation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Implements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Attribute.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/AutoComplete.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/BR.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Button.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Class.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/ClazzProperty.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Dice.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Div.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Form.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/HTML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/InfoText.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Input.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Label.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Method.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Node.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/SO.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/StereoType.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Symbol.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Table.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/AddNode.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Drag.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/GraphListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/ImportFile.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/NewEdge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Select.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Zoom.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayout.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayoutMin.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/Random.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/main.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/util.ts"],"names":[],"mappings":"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","file":"diagram.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./main.ts\");\n","export abstract class Adapter {\r\n    public id: string = null;\r\n\r\n    abstract update(evt: Object): boolean;\r\n}\r\n","'use strict';\r\n\r\nimport * as controls from './elements/nodes';\r\nimport * as adapters from './adapters';\r\nimport Data from './Data';\r\nimport {Control} from './Control';\r\nimport {Adapter} from './Adapter';\r\nimport {Graph} from './elements';\r\nimport {Util} from './util';\r\nimport {Point} from './elements';\r\n\r\nexport class Bridge extends Control {\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public static version: string = '0.42.01.1601007-1739';\r\n    private controlFactory: Object = {};\r\n    private adapterFactory: Object = {};\r\n    private controls: Object = {};\r\n    private adapters: Object = {};\r\n    private items: Object = {};\r\n    private controlNo: number = 1;\r\n    private online: boolean = true;\r\n    private language: string = navigator.language.toUpperCase();\r\n    private toolBar: HTMLElement;\r\n\r\n    constructor(viewRoot?: HTMLElement) {\r\n        super();\r\n        let i;\r\n\r\n        if (viewRoot) {\r\n            this.$view = viewRoot;\r\n        }\r\n\r\n        let keys: string[] = Object.keys(adapters);\r\n        for (i = 0; i < keys.length; i++) {\r\n            let child = adapters[keys[i]];\r\n            if (child && child.id) {\r\n                this.adapterFactory[child.id.toLowerCase()] = child;\r\n            }\r\n        }\r\n\r\n        keys = Object.keys(controls);\r\n        for (i = 0; i < keys.length; i++) {\r\n            this.addControl(controls[keys[i]]);\r\n        }\r\n        this.addControl(Graph);\r\n\r\n        let that = this;\r\n        window.addEventListener('load', function () {\r\n            let updateOnlineStatus = function updateOnlineStatus() {\r\n                that.setOnline(navigator.onLine);\r\n            };\r\n            window.addEventListener('online', updateOnlineStatus);\r\n            window.addEventListener('offline', updateOnlineStatus);\r\n        });\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public setOnline(value: boolean) {\r\n        this.online = value;\r\n        if (this.toolBar.children[0]) {\r\n            this.toolBar.children[0].className = value ? 'online' : 'offline';\r\n        }\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addToolbar(): boolean {\r\n        if (this.toolBar) {\r\n            return false;\r\n        }\r\n        this.toolBar = document.createElement('div');\r\n        this.toolBar.className = 'onlineStatus';\r\n        let child = document.createElement('div');\r\n        child.className = 'online';\r\n        this.toolBar.appendChild(child);\r\n        child = document.createElement('div');\r\n        child.className = 'lang';\r\n        child.innerHTML = this.language;\r\n        this.toolBar.appendChild(child);\r\n\r\n        let body: HTMLElement = document.getElementsByTagName('body')[0];\r\n        body.insertBefore(this.toolBar, body.firstChild);\r\n        // Refresh Online Status\r\n        this.setOnline(this.online);\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addListener = function (listener: any) {\r\n        this.listener.push(listener);\r\n    };\r\n\r\n    public addControl(control: any) {\r\n        if (control && control.name) {\r\n            this.controlFactory[control.name.toLowerCase()] = control;\r\n        }\r\n    }\r\n\r\n    public getId(): string {\r\n        return 'control' + (this.controlNo++);\r\n    }\r\n\r\n    public adapterUpdate(message: string) {\r\n        let keys: string[] = Object.keys(this.adapters);\r\n        if (keys.length > 0) {\r\n            let i;\r\n            for (i = 0; i < keys.length; i++) {\r\n                let adapterList = this.adapters[keys[i]];\r\n                if (adapterList instanceof Adapter) {\r\n                    adapterList.update(message);\r\n                } else {\r\n                    for (let adapter of adapterList) {\r\n                        adapter.update(message);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        let config = {}, className: string, id: string;\r\n        if (typeof(json) === 'string') {\r\n            // Only a String\r\n            config['id'] = '' + json;\r\n            let item = document.getElementById(config['id']);\r\n            let className: string;\r\n            if (item) {\r\n                className = item.getAttribute('class');\r\n                if (!className) {\r\n                    className = item.getAttribute('classname') || '';\r\n                }\r\n                // Found Element and now config Data element\r\n                if (item.getAttribute('property')) {\r\n                    if (this.hasItem(item.getAttribute('property'))) {\r\n                        let data = this.getItem(item.getAttribute('property'));\r\n                        for (let key in data.prop) {\r\n                            if (item.getAttribute(key)) {\r\n                                data.setValue(key, item.getAttribute(key));\r\n                            }\r\n                        }\r\n                        if (item.getAttribute('property')) {\r\n                            // TODO: FIXME!!!\r\n                            // data.property = item.getAttribute(\"property\");\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                className = '' + json;\r\n            }\r\n            className = className.toLowerCase();\r\n            config['className'] = className;\r\n        } else {\r\n            config = <JSON>json;\r\n        }\r\n        // Config validate\r\n        if (!config['id']) {\r\n            config['id'] = this.getId();\r\n        }\r\n        // Backup for Old Graph\r\n        if (!config['className'] && (config['type'] === 'clazzdiagram' || config['type'] === 'objectdiagram')) {\r\n            config['className'] = 'graph';\r\n        }\r\n\r\n        className = config['className'] || config['class'];\r\n        className = className.toLocaleLowerCase();\r\n        id = config['id'];\r\n\r\n        // Check For Control or Data\r\n        if ((config['prop'] || config['upd'] || config['rem']) && this.controls[id] === null) {\r\n            // Its Data\r\n            let newData = !this.hasItem(config['id']);\r\n            let item: Data = this.getItem(config['id']);\r\n            // TODO: FIXME!!!\r\n            // if (id && className && !item.property) {\r\n            //      item.property = className;\r\n            // }\r\n            if (newData) {\r\n                for (let i in this.controls) {\r\n                    if (this.controls.hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    this.controls[i].addItem(this, item);\r\n                }\r\n            }\r\n            // Add all Values to item\r\n            item.addProperties(config);\r\n            // Bridge.addProperties(config['prop'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return item;\r\n        }\r\n\r\n        let control;\r\n        if (this.controls[id]) {\r\n            control = this.controls[id];\r\n            control.initControl(json);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return control;\r\n        }\r\n\r\n        if (typeof(this.controlFactory[className]) === 'object' || typeof(this.controlFactory[className]) === 'function') {\r\n            let obj = this.controlFactory[className];\r\n            control = new obj(json);\r\n            Util.initControl(owner || this, control, config['property'], id, json);\r\n\r\n            if (control.id) {\r\n                this.controls[control.id] = control;\r\n            } else {\r\n                this.controls[id] = control;\r\n            }\r\n\r\n            // create DataObject and register this control as listener to it\r\n            // let obj = {id:id};\r\n            // let data: Data = this.load(obj);\r\n            // data.addListener(this);\r\n\r\n            // Try to Show\r\n            if (typeof control.getSVG === 'function' && typeof control.getSize === 'function') {\r\n                let size: Point = control.getSize();\r\n\r\n                let svg = Util.createShape({\r\n                    tag: 'svg',\r\n                    id: 'root',\r\n                    width: size.x,\r\n                    height: size.y\r\n                });\r\n\r\n                let view = control.getSVG();\r\n                svg.appendChild(view);\r\n                document.getElementsByTagName('body')[0].appendChild(svg);\r\n            }\r\n            return control;\r\n        }\r\n        return null;\r\n        // bridge.load('{class:table, columns:[{id:'firstname'}, {id:'lastname'}]}');\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n\r\n        if (this.items[id] !== undefined) {\r\n            return true;\r\n        }\r\n        id = id.split('.')[0];\r\n        return (this.items[id] !== undefined);\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return this.items;\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        let item = this.items[id];\r\n        if (!item) {\r\n            id = id.split('.')[0];\r\n            item = this.items[id];\r\n            if (!item) {\r\n                item = new Data();\r\n                item.id = id;\r\n                this.items[id] = item;\r\n            }\r\n        }\r\n        return item;\r\n    }\r\n\r\n    /**\r\n     * Method for executing user input -> Event\r\n     * @param object\r\n     * @param attribute\r\n     * @param oldValue\r\n     * @param newValue\r\n     * @returns {boolean}\r\n     */\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        alert('Bridge.setValue: oldVal:' + oldValue + ', newVal: ' +  + newValue + ', attribute: ' + attribute + ', object: ' + JSON.stringify(object));\r\n        let obj: Data;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n\r\n        } else if (object instanceof Data) {\r\n            obj = object;\r\n            id = object.id;\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = <Data>object;\r\n            id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return false;\r\n        }\r\n        if (obj) {\r\n            // Execute Update to Data\r\n            obj.setValue(attribute, newValue);\r\n            // Could be done here, but currently is done at this.execueChange..:\r\n            // obj[attribute] = value;\r\n        }\r\n\r\n        /*let tmp = {'id': id};\r\n        if (typeof(newValue) !== 'undefined' && newValue !== null) {\r\n            let upd = {};\r\n            upd[attribute] = newValue;\r\n            tmp['upd'] = upd;\r\n        }\r\n        if (typeof(oldValue) !== 'undefined' && oldValue !== null) {\r\n            let rem = {};\r\n            rem[attribute] = oldValue;\r\n            tmp['rem'] = rem;\r\n        }*/\r\n        // this.load(tmp);\r\n        return true;\r\n    }\r\n\r\n    public getValue(object: Object, attribute: string): any {\r\n        let obj: Object;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = object;\r\n            // id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return;\r\n        }\r\n        if (obj) {\r\n            if (obj.hasOwnProperty(attribute)) {\r\n                return obj[attribute];\r\n            } else if (obj instanceof Data) {\r\n                return (<Data>obj).getValue(attribute);\r\n            } else {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    public getNumber(object: Object, attribute: string, defaultValue: number = 0): number {\r\n        let res = <number>this.getValue(object, attribute);\r\n        if (typeof res === 'number') {\r\n            return res;\r\n        } else if (typeof res === 'string') {\r\n            // check whether res is a number\r\n            let value = Number(res);\r\n            if (value || value === 0) {\r\n                return value;\r\n            }\r\n        }\r\n        return defaultValue;\r\n    }\r\n\r\n    getControl(controlId: string) {\r\n        return this.controls[controlId];\r\n    }\r\n\r\n    public registerListener(eventType: string, control: Control, callBackfunction: string): Control {\r\n        if (typeof control === 'string') {\r\n            control = this.getControl(<string>control);\r\n        }\r\n        if (!control) {\r\n            return null;\r\n        }\r\n        if (eventType) {\r\n            eventType = eventType.toLowerCase();\r\n        }\r\n        control.registerListenerOnHTMLObject(eventType);\r\n        if (callBackfunction) {\r\n            let adapter: DelegateAdapter = new DelegateAdapter();\r\n            adapter.callBackfunction = callBackfunction;\r\n            adapter.id = control.getId();\r\n            this.addAdapter(adapter, eventType);\r\n        }\r\n        return control;\r\n    }\r\n\r\n    public addAdapter(adapter: Adapter | string, eventType: string): Adapter {\r\n        if (!eventType) {\r\n            eventType = '';\r\n        }\r\n        let result: Adapter;\r\n        if (adapter instanceof String) {\r\n            let obj = this.adapterFactory[adapter.toLowerCase()];\r\n            result = new obj();\r\n        } else {\r\n            result = <Adapter>adapter;\r\n        }\r\n        let handlers = this.adapters[eventType];\r\n\r\n        if (handlers === null || handlers === undefined) {\r\n            handlers = [];\r\n            this.adapters[eventType] = handlers;\r\n        }\r\n        handlers.push(result);\r\n        return result;\r\n    }\r\n\r\n    public fireEvent(evt: Event): void {\r\n        let handlers = this.adapters[''];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n        handlers = this.adapters[evt['eventType']];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport class DelegateAdapter extends Adapter {\r\n    adapter: Adapter;\r\n    callBackfunction: string;\r\n\r\n    update(evt: Event): boolean {\r\n        if (this.adapter) {\r\n            this.adapter.update(evt);\r\n            return true;\r\n        } else if (this.callBackfunction) {\r\n            return this.executeFunction(this.callBackfunction, evt);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public setAdapter(adapter: Adapter): boolean {\r\n        this.adapter = adapter;\r\n        return true;\r\n    }\r\n\r\n    private executeFunction(strValue: string, evt: Event): boolean {\r\n        let scope = window;\r\n        let scopeSplit = strValue.split('.');\r\n        for (let i = 0; i < scopeSplit.length - 1; i++) {\r\n            scope = scope[scopeSplit[i]];\r\n            if (scope === undefined) {\r\n                return false;\r\n            }\r\n        }\r\n        let fn: any = scope[scopeSplit[scopeSplit.length - 1]];\r\n        if (typeof fn === 'function') {\r\n            fn.call(scope);\r\n            return true;\r\n        } else {\r\n            window['callBack1'].update(evt);\r\n\r\n        }\r\n        return false;\r\n    }\r\n}\r\n","'use strict';\r\nimport Data from './Data';\r\n\r\nexport default class BridgeElement {\r\n    private static elementSet: BridgeElement[] = [];\r\n    public model: Data;\r\n    public id: string;\r\n    public gui: HTMLElement;\r\n\r\n    constructor(model: Data) {\r\n        this.model = model;\r\n        this.id = model.id;\r\n        BridgeElement.elementSet.push(this);\r\n    }\r\n}\r\n","import {Util} from './util';\r\n\r\n// \t\t\t\t######################################################### CSS #########################################################\r\nexport class CSS {\r\n    public css: Object;\r\n    private name: string;\r\n\r\n    constructor(name: string, item?: any) {\r\n        let i, value, border: string, prop, el;\r\n        this.name = name;\r\n        this.css = {};\r\n        if (!item) {\r\n            return;\r\n        }\r\n\r\n        el = window.getComputedStyle(item, null);\r\n        border = el.getPropertyValue('border');\r\n        for (i in el) {\r\n            prop = i;\r\n            value = el.getPropertyValue(prop);\r\n            if (value && value !== '') {\r\n                // optimize CSS\r\n                if (border) {\r\n                    if (prop === 'border-bottom' || prop === 'border-right' || prop === 'border-top' || prop === 'border-left') {\r\n                        if (value !== border) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-color' || prop === 'border-bottom-color' || prop === 'border-right-color' || prop === 'border-top-color' || prop === 'border-left-color') {\r\n                        if (border.substring(border.length - value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-width') {\r\n                        if (border.substring(0, value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else {\r\n                        this.css[prop] = value;\r\n                    }\r\n                } else {\r\n                    this.css[prop] = value;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public static getStdDef() {\r\n        let child, def = Util.create({tag: 'defs'});\r\n\r\n        child = Util.create({tag: 'filter', id: 'drop-shadow'});\r\n        child.appendChild(Util.create({tag: 'feGaussianBlur', 'in': 'SourceAlpha', result: 'blur-out', stdDeviation: 2}));\r\n        child.appendChild(Util.create({tag: 'feOffset', 'in': 'blur-out', dx: 2, dy: 2}));\r\n        child.appendChild(Util.create({tag: 'feBlend', 'in': 'SourceGraphic', mode: 'normal'}));\r\n        def.appendChild(child);\r\n        child = Util.create({tag: 'linearGradient', id: 'reflect', x1: 0, x2: 0, y1: '50%', y2: 0, spreadMethod: 'reflect'});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#aaa', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#eee', offset: '100%'}));\r\n        def.appendChild(child);\r\n\r\n        child = Util.create({tag: 'linearGradient', id: 'classelement', x1: 0, x2: '100%', y1: '100%', y2: 0});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#fff', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#d3d3d3', offset: 1}));\r\n        def.appendChild(child);\r\n\r\n        return def;\r\n    }\r\n\r\n    public static getSubstring(str: string, search: string, startChar: string, endChar: string, splitter: string): any {\r\n        let pos, end, count = 0, array = [];\r\n        pos = str.indexOf(search);\r\n        if (pos > 0) {\r\n            end = str.indexOf(startChar, pos);\r\n            pos = end + 1;\r\n            if (end > 0) {\r\n                while (end < str.length) {\r\n                    if (str.charAt(end) === startChar) {\r\n                        count += 1;\r\n                    }\r\n                    if (str.charAt(end) === endChar) {\r\n                        count -= 1;\r\n                        if (count === 0) {\r\n                            if (splitter && pos !== end) {\r\n                                array.push(str.substring(pos, end).trim());\r\n                            }\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (str.charAt(end) === splitter && count === 1) {\r\n                        array.push(str.substring(pos, end).trim());\r\n                        pos = end + 1;\r\n                    }\r\n\r\n                    end += 1;\r\n                }\r\n                if (splitter) {\r\n                    return array;\r\n                }\r\n                return str.substring(pos, end);\r\n            }\r\n            return str.substring(pos);\r\n        }\r\n        return '';\r\n    }\r\n\r\n    public static addStyle(board: SVGElement, styleName: any) {\r\n        let defs, style: any, css;\r\n        if (styleName.baseVal || styleName.baseVal === '') {\r\n            styleName = styleName.baseVal;\r\n        }\r\n        if (!styleName) {\r\n            return;\r\n        }\r\n        defs = CSS.getDefs(board);\r\n        if (defs.getElementsByTagName('style').length > 0) {\r\n            style = defs.getElementsByTagName('style')[0];\r\n        } else {\r\n            style = Util.create({tag: 'style'});\r\n            style.item = {};\r\n            defs.appendChild(style);\r\n        }\r\n        if (!style.item[styleName]) {\r\n            css = Util.getStyle(styleName);\r\n            style.item[styleName] = css;\r\n            style.innerHTML = style.innerHTML + '\\n.' + styleName + css.getSVGString(board);\r\n        }\r\n    }\r\n\r\n    public static addStyles(board: SVGElement, item: any) {\r\n        if (!item) {\r\n            return;\r\n        }\r\n        let items, i, className: any = item.className;\r\n\r\n        if (className) {\r\n            if (className.baseVal || className.baseVal === '') {\r\n                className = className.baseVal;\r\n            }\r\n        }\r\n        if (className) {\r\n            items = className.split(' ');\r\n            for (i = 0; i < items.length; i += 1) {\r\n                CSS.addStyle(board, items[i].trim());\r\n            }\r\n        }\r\n        for (i = 0; i < item.childNodes.length; i += 1) {\r\n            this.addStyles(board, item.childNodes[i]);\r\n        }\r\n    }\r\n\r\n    public static getDefs(board: SVGElement) {\r\n        let defs;\r\n        if (board.getElementsByTagName('defs').length < 1) {\r\n            defs = Util.create({tag: 'defs'});\r\n            board.insertBefore(defs, board.childNodes[0]);\r\n        } else {\r\n            defs = board.getElementsByTagName('defs')[0];\r\n        }\r\n        return defs;\r\n    }\r\n\r\n    public add(key: string, value: string) {\r\n        this.css[key] = value;\r\n    }\r\n\r\n    public get(key: string): any {\r\n        let i;\r\n        for (i in this.css) {\r\n            if (i === key) {\r\n                return this.css[key];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public getNumber(key: string) {\r\n        return parseInt((this.get(key) || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    public getSVGString(board: SVGElement) {\r\n        let str, pos, style, defs, value, filter, z;\r\n        str = '{';\r\n        for (style in this.css) {\r\n            if (!this.css.hasOwnProperty(style)) {\r\n                continue;\r\n            }\r\n            if (style === 'border') {\r\n                pos = this.css[style].indexOf(' ');\r\n                str = str + 'stroke-width: ' + this.css[style].substring(0, pos) + ';';\r\n                pos = this.css[style].indexOf(' ', pos + 1);\r\n                str = str + 'stroke:' + this.css[style].substring(pos) + ';';\r\n            } else if (style === 'background-color') {\r\n                str = str + 'fill: ' + this.css[style] + ';';\r\n            } else if (style === 'background') {\r\n                value = CSS.getSubstring(this.css[style], 'linear-gradient', '(', ')', ',');\r\n                if (value.length > 0) {\r\n                    defs = CSS.getDefs(board);\r\n                    if (value[0] === '45deg') {\r\n                        pos = 1;\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '100%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                    } else {\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '0%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                        pos = 0;\r\n                    }\r\n                    defs.appendChild(filter);\r\n                    while (pos < value.length) {\r\n                        value[pos] = value[pos].trim();\r\n                        z = value[pos].lastIndexOf(' ');\r\n                        filter.appendChild(Util.create({\r\n                            tag: 'stop',\r\n                            'offset': value[pos].substring(z + 1),\r\n                            style: {'stop-color': value[pos].substring(0, z)}\r\n                        }));\r\n                        pos += 1;\r\n                    }\r\n                    str = str + 'fill: url(#' + this.name + ');';\r\n                    continue;\r\n                }\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n                // box-shadow: inset 0 3px 4px #888;\r\n// \t\t\t\t<defs>\r\n// \t\t\t\t\t<filter id='drop-shadow'>\r\n// \t\t\t\t\t\t<feGaussianBlur in='SourceAlpha' result='blur-out' stdDeviation='2'></feGaussianBlur>\r\n// \t\t\t\t\t\t<feOffset in='blur-out' dx='2' dy='2'></feOffset>\r\n// \t\t\t\t\t\t<feBlend in='SourceGraphic' mode='normal'></feBlend>\r\n// \t\t\t\t\t</filter>\r\n// \t\t\t\t</defs>\r\n            } else {\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n            }\r\n        }\r\n        str = str + '}';\r\n        return str;\r\n    }\r\n}\r\n","import {Bridge} from './Bridge';\r\nimport Data from './Data';\r\nimport EventListener from './EventListener';\r\n\r\nexport abstract class Control {\r\n    public $owner: Control;\r\n    /**\r\n     *\r\n     */\r\n    public property: string;\r\n    public id: string;\r\n    public $view: Element;\r\n    public $viewData: Data = null;\r\n\r\n    protected $model: Data;\r\n    protected $viewListener: EventListenerOrEventListenerObject;\r\n\r\n    /**\r\n     * The properties, we want to listen to\r\n     */\r\n    // static defaultProperties: string[] = [];\r\n\r\n    // public getProperties(): string[] {\r\n    //     return this.properties;\r\n    // }\r\n\r\n    constructor() {\r\n        // e.g. this.properties.push(\"key\");\r\n        // this.properties.push(\"property\");\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data: Data = new Data();\r\n        if (oldData) {\r\n            oldData.removeListener(this);\r\n            const keys: string[] = oldData.getKeys();\r\n            for (let i = 0; i < keys.length; i++) {\r\n                let attr = keys[i];\r\n                if (this.$view) {\r\n                    if (this.$view[attr] === null) {\r\n                        continue;\r\n                    }\r\n                    data.setValue(attr, this.$view[attr]);\r\n                } else {\r\n                    data.setValue(attr, null);\r\n                }\r\n            }\r\n        }\r\n        data.addListener(this);\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     *  Set the new HTMLElement and attach listener to it.\r\n     *  Also remove Listeners from old one and return the old one, if present.\r\n     * @param element\r\n     * @returns The previous Element\r\n     */\r\n    public setView(element: Element): Element {\r\n        let oldElement: Element = null;\r\n        if (this.$view) {\r\n            oldElement = this.$view;\r\n            if (this.$viewListener) {\r\n                oldElement.removeEventListener('change', this.$viewListener);\r\n            }\r\n        }\r\n        this.$view = element;\r\n\r\n        if (this.$viewListener) {\r\n            element.addEventListener('change', this.$viewListener);\r\n        }\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n        return element;\r\n    }\r\n\r\n    public init(owner: Control, property ?: string, id ?: string): Control {\r\n        if (!this.$owner) {\r\n            this.$owner = owner;\r\n        }\r\n        if (!this.id) {\r\n            this.id = id;\r\n        }\r\n        if (!this.property) {\r\n            this.property = this.generateID(property, id);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public createEventListener(): EventListener {\r\n        return new EventListener();\r\n    }\r\n\r\n    public getRoot(): Control {\r\n        if (this.$owner) {\r\n            return this.$owner.getRoot();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return null;\r\n    }\r\n\r\n    public initControl(data: any): void {\r\n        if (this.$view === null || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (data.hasOwnProperty('prop')) {\r\n            for (let key in data.prop) {\r\n                let oldValue = this.$viewData.getValue(key);\r\n                if (this.$view) {\r\n                    this.updateElement(key, oldValue, data.prop[key]);\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        let hasRem = data.hasOwnProperty('rem');\r\n        let removed: any[] = [];\r\n        if (data.hasOwnProperty('upd')) {\r\n            for (let key in data.upd) {\r\n                let oldValue;\r\n                let newValue = data.upd[key];\r\n                let entity;\r\n                const temp = false;\r\n                if (temp) {\r\n//                if (newValue == this.getViewData().getValue(key)) {\r\n                    // new Value assertEquals old value, so we don't need to change anything..\r\n                    // delete data.rem[key];\r\n                    if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                        removed.push(data.rem[key]);\r\n                    }\r\n                    continue;\r\n                }\r\n                if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                    // if there's a rem, the oldValue from rem will be used and expected to be right..\r\n                    oldValue = data.rem[key];\r\n                    if (this.$model && this.$model.getValue(key) === oldValue) {\r\n                        entity = this.$model;\r\n//                    } else if (oldValue == this.getViewData().getValue(key)) {\r\n//                        $graphModel = this.getViewData();\r\n                    }\r\n                    delete data.rem[key];\r\n\r\n                    if (entity === null) {\r\n                        continue;\r\n                    }\r\n                }\r\n                if (entity) {\r\n                    if (!hasRem) {\r\n                        if (entity === this.$model) {\r\n                            oldValue = this.$model.getValue(key);\r\n                        } else {\r\n//                           oldValue = this.getViewData().getValue(key);\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (this.$model) {\r\n                        // try to get the oldValue directly from the $graphModel...\r\n                        oldValue = this.$model.getValue(key);\r\n                        entity = this.$model;\r\n                    }\r\n                    if (oldValue === null) {\r\n                        // if there was no data in the entity, we try to get oldValue from the $view\r\n//                        oldValue = this.getViewData().getValue(key);\r\n//                        entity = this.getViewData();\r\n                    }\r\n                }\r\n\r\n                //  || oldValue !== this.$viewData.getValue(key)\r\n                if (newValue === oldValue) {\r\n                    // no match, so update should be wrong...\r\n                    continue;\r\n                }\r\n                const viewDataOldValue = this.$viewData.getValue(key);\r\n                if (entity === this.$viewData) {\r\n\r\n                    // this.getViewData().setValue(key, newValue);\r\n                    if (this.$view) {\r\n                        this.updateElement(key, viewDataOldValue, newValue);\r\n                    }\r\n                } else {\r\n                    this.updateElement(key, viewDataOldValue, newValue);\r\n                }\r\n                this.getRoot().setValue(entity, key, newValue, oldValue);\r\n            }\r\n            // this.saveViewInData();\r\n        }\r\n        if (hasRem) {\r\n            for (let key in data.rem) {\r\n                if (removed.hasOwnProperty(key)) {\r\n                    continue;\r\n                }\r\n                let oldValue;\r\n//                    this.getViewData().getValue(key);\r\n//                if (oldValue != data.rem[key] || data.upd !== undefined && (data.upd[key] == oldValue || this.getViewData().getValue(key) == data.upd[key])) {\r\n                // if rem is invalid, or if the change is already applied, don't do anything..\r\n                //                  continue;\r\n                //            }\r\n                // delete this.$viewData.getValue(key);\r\n                // this.saveViewInData();\r\n                this.updateElement(key, null, null);\r\n                // this.$view.removeAttribute(key);\r\n                if (this.$model) {\r\n//                    this.getRoot().setValue(this.$graphModel, key, this.getViewData().getValue(key), oldValue);\r\n                }\r\n            }\r\n        }\r\n        if (this.property) {\r\n            // Add listener to Input field:\r\n            this.$view['onchange'] = ((ev: Event) => {\r\n                    this.controlChanged(ev);\r\n                }\r\n            );\r\n        }\r\n//        this.saveViewInData();\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        return null;\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n        return false;\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return new Object();\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue ?: Object): boolean {\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Is called when a object, that the Control is listening to, changes its value.\r\n     * @param entity\r\n     * @param property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        if (oldValue === newValue || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (oldValue === this.$viewData.getValue(property)) {\r\n            return;\r\n        }\r\n        // Set NewData to ViewData and Fire PC\r\n        this.$viewData.setValue(property, newValue);\r\n\r\n//\r\n//\r\n//         // if (entity == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.entity) {\r\n//                 alert(\"entity = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.entity.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.entity, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the entity is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"entity = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n// >>>>>>> addOldFunctions\r\n        if (this.$viewData) {\r\n            this.$viewData.setValue(property, newValue);\r\n        }\r\n        if (this.$model) {\r\n            this.$model.setValue(property, newValue);\r\n        }\r\n        this.updateElement(property, oldValue, newValue);\r\n    }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            // Do Nothing\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  Update GUI Element\r\n     * @param {string} property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        if (this.$view && this.$view.hasAttribute(property)) {\r\n            this.$view.setAttribute(property, newValue);\r\n        }\r\n    }\r\n\r\n//        if (oldValue == newValue) {\r\n//            return;\r\n//        }\r\n//        if (oldValue == this.$viewData.getValue(property)) {\r\n//            return;\r\n//        }\r\n//        // Set NewData to ViewData and Fire PC\r\n//        this.$viewData.setValue(property, newValue);\r\n//\r\n//\r\n//\r\n//         // if ($graphModel == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.$graphModel) {\r\n//                 alert(\"$graphModel = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.$graphModel.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.$graphModel, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the $graphModel is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"$graphModel = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n\r\n    public getId(): string {\r\n        return this.id;\r\n    }\r\n\r\n    public load(json: JSON | Object, owner ?: Control): any {\r\n        // Do Nothing\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.property || entity.hasProperty(this.property)) {\r\n                entity.addListener(this, this.property);\r\n                this.$model = entity;\r\n            }\r\n        }\r\n    }\r\n\r\n    public appendChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.appendChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].appendChild(child.$view);\r\n        }\r\n    }\r\n\r\n    public removeChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.removeChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].removeChild(child.$view);\r\n        }\r\n    }\r\n\r\n    /*\r\n     Property looks like: 't1.talk'\r\n     */\r\n    public setProperty(property: string): void {\r\n        if (!this.property) {\r\n            return;\r\n        }\r\n        let objId = property.split('.')[0];\r\n        let object = null;\r\n        if (this.$owner.hasItem(objId)) {\r\n            object = this.$owner.getItem(objId);\r\n        }\r\n\r\n        // remove listener on old object\r\n        if (this.$model) {\r\n            // this.$graphModel.removeListener(this);\r\n            this.$model.removeListener(this, this.lastProperty);\r\n        }\r\n        this.property = property;\r\n\r\n        // add listener to object..\r\n        if (object) {\r\n            object.addListener(this, this.lastProperty);\r\n            this.$model = object;\r\n            this.updateElement(this.lastProperty, this.$viewData.getValue(this.lastProperty), object.prop[this.lastProperty]);\r\n        }\r\n    }\r\n\r\n    public registerListenerOnHTMLObject(eventType: string): boolean {\r\n        return this.registerEventListener(eventType, <HTMLElement>this.$view);\r\n    }\r\n\r\n    // Normal Event HTML-Event\r\n    // Eventtype:string,\r\n    // id:string of Control\r\n    public fireEvent(evt: Event): void {\r\n        // Do Nothing\r\n    }\r\n\r\n    public isClosed(): boolean {\r\n        return this['closed'];\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        if (this.isClosed()) {\r\n            return this.$owner.getShowed();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * the id of the Data object, that contains the properties of the view\r\n     * @returns {string}\r\n     */\r\n    protected getControlDataID() {\r\n        return this.id + '_data';\r\n    }\r\n\r\n    protected generateID(property ?: string, id ?: string): string {\r\n        if (property) {\r\n            return property;\r\n        }\r\n        if (id) {\r\n            // will generate a data Object suitable for the Control..\r\n            // must be overridden, if the changeEvent shouldn't listen on value...\r\n//            return id + '.' + this.getStandardProperty();//+ \"_data\"\r\n            return id + '.' + '_data';\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected updateViewData() {\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n        const keys: string[] = this.$viewData.getKeys();\r\n        for (let i = 0; i < keys.length; i++) {\r\n            let attr = keys[i];\r\n            if (this.$view[attr] === null) {\r\n                continue;\r\n            }\r\n            this.$viewData.setValue(attr, this.$view[attr]);\r\n        }\r\n    }\r\n\r\n    protected registerEventListener(eventType: string, htmlElement: HTMLElement): boolean {\r\n        if (!htmlElement) {\r\n            return false;\r\n        }\r\n        if (htmlElement instanceof HTMLElement === false) {\r\n            return false;\r\n        }\r\n        let control = this;\r\n        let listener = (t: any) => {\r\n            t.eventType = eventType;\r\n            t.id = control.id;\r\n            control.$owner.fireEvent(t);\r\n        };\r\n        htmlElement.addEventListener(eventType, listener);\r\n        return true;\r\n    }\r\n\r\n    get lastProperty(): string {\r\n        if (!this.property) {\r\n            return '';\r\n        }\r\n        let arr: string[] = this.property.split('.');\r\n        return arr[arr.length - 1];\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\n\r\nexport default class Data {\r\n    public prop = {};\r\n    id: string;\r\n    // $listener: Control[] = [];\r\n    $listener: Object = {};\r\n\r\n    private static nullCheck(property: string): string {\r\n        if (property === undefined || property === null) {\r\n            property = '';\r\n        }\r\n        return property;\r\n    }\r\n    public getKeys(): string[] {\r\n        return Object.keys(this.prop);\r\n    }\r\n\r\n    public addProperties(values: Object) {\r\n        if (!values) {\r\n            return;\r\n        }\r\n        if (values['prop']) {\r\n            let prop = values['prop'];\r\n            for (let property in prop) {\r\n                if (prop.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (prop[property] !== null && '' !== prop[property]) {\r\n                    this.setValue(property, prop[property]);\r\n                }\r\n            }\r\n        } else {\r\n            let upd = values['upd'] || {};\r\n            let rem = values['rem'] || {};\r\n\r\n            for (let property in upd) {\r\n                if (upd.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (rem.hasOwnProperty(property) === false) {\r\n                    this.setValue(property, upd[property]);\r\n                } else {\r\n                    // if we have a rem, we wan't to check, if its a valid change (teh old value is the value in rem)\r\n                    if (this.getValue(property) === rem[property]) {\r\n                        this.setValue(property, upd[property]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getValue(attribute: string) {\r\n        return this.prop[attribute];\r\n    }\r\n\r\n    public setValue(attribute: string, newValue: any): void {\r\n        let oldValue = this.prop[attribute];\r\n        if (oldValue === newValue && newValue !== null) {\r\n            return;\r\n        }\r\n        this.prop[attribute] = newValue;\r\n        this.firePropertyChange(attribute, oldValue, newValue);\r\n    }\r\n\r\n    public addTo(attribute: string, newValue: any): boolean {\r\n        let add: boolean;\r\n        if (this.prop[attribute]) {\r\n            if (this.prop[attribute].contains(newValue) === false) {\r\n                add = true;\r\n            }\r\n        } else {\r\n            this.prop[attribute] = [];\r\n            add = true;\r\n        }\r\n        if (add) {\r\n            this.prop[attribute].push(newValue);\r\n            this.firePropertyChange(attribute, null, newValue);\r\n        }\r\n        return add;\r\n    }\r\n\r\n    public removeFrom(attribute: string, newValue: any): boolean {\r\n        if (!this.prop[attribute]) {\r\n            return true;\r\n        }\r\n        let pos: number = this.prop[attribute].indexOf(newValue);\r\n        if (pos < 0) {\r\n            return true;\r\n        }\r\n        this.prop[attribute].splice(pos, 1);\r\n        this.firePropertyChange(attribute, newValue, null);\r\n        return true;\r\n    }\r\n\r\n    public addListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(property);\r\n        if (!listeners) {\r\n            listeners = [];\r\n            this.$listener[Data.nullCheck(property)] = listeners;\r\n        }\r\n        listeners.push(control);\r\n    }\r\n\r\n    public removeListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners = this.getListeners(property);\r\n        if (listeners === null) {\r\n            return;\r\n        }\r\n        let pos = listeners.indexOf(control);\r\n        if (pos >= 0) {\r\n            listeners.splice(pos, 1);\r\n        }\r\n        if (listeners.length === 0 && Data.nullCheck(property) !== '') {\r\n            // only remove, if it's not the default listener list...\r\n            delete this.$listener[property];\r\n        }\r\n    }\r\n\r\n    public hasProperty(property: string): boolean {\r\n        return this.prop.hasOwnProperty(property);\r\n    }\r\n\r\n    public addFrom(attribute: string, oldData: Data): void {\r\n        if (oldData) {\r\n            this.setValue(attribute, oldData.getValue(attribute));\r\n        } else {\r\n            this.setValue(attribute, null);\r\n        }\r\n    }\r\n\r\n    public removeKey(key: string): any {\r\n        if (this.hasProperty(key)) {\r\n            const oldValue = this.prop[key];\r\n            delete this.prop[key];\r\n            return oldValue;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected getListeners(property: string): PropertyChangeSupport[] {\r\n        property = Data.nullCheck(property);\r\n        return this.$listener[property];\r\n    }\r\n\r\n    protected firePropertyChange(attribute: string, oldValue: Object, newValue: Object) {\r\n        attribute = Data.nullCheck(attribute);\r\n        // at first fire for the given property\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(attribute);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n        // now we need to fire the Listeners that wan't to listen to everything\r\n        listeners = this.getListeners(null);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport interface EventHandler {\r\n    canHandle(): boolean;\r\n    handle(event: Event, element: DiagramElement): boolean;\r\n    setActive(active: boolean): void;\r\n}\r\n\r\nexport class EventBus {\r\n    public static CREATE: string = 'Create';\r\n    public static EDITOR: string = 'Editor';\r\n    public static OPENPROPERTIES: string = 'openProperties';\r\n    public static RELOADPROPERTIES: string = 'reloadProperties';\r\n    public static ELEMENTMOUSEDOWN: string = 'ELEMENT:MOUSEDOWN';\r\n    public static ELEMENTMOUSEUP: string = 'ELEMENT:MOUSEUP';\r\n    public static ELEMENTMOUSELEAVE: string = 'ELEMENT:MOUSELEAVE';\r\n    public static ELEMENTMOUSEMOVE: string = 'ELEMENT:MOUSEMOVE';\r\n    public static ELEMENTMOUSEWHEEL: string = 'ELEMENT:MOUSEWHEEL';\r\n    public static ELEMENTCLICK: string = 'ELEMENT:CLICK';\r\n    public static ELEMENTDBLCLICK: string = 'ELEMENT:DBLCLICK';\r\n    public static ELEMENTDRAG: string = 'ELEMENT:DRAG';\r\n    public static ELEMENTDRAGOVER: string = 'ELEMENT:DRAGOVER';\r\n    public static ELEMENTDROP: string = 'ELEMENT:DROP';\r\n    public static ELEMENTDRAGLEAVE: string = 'ELEMENT:DRAGLEAVE';\r\n\r\n    public static EVENTS: string[] = [\r\n        EventBus.CREATE,\r\n        EventBus.EDITOR,\r\n        EventBus.OPENPROPERTIES,\r\n        EventBus.RELOADPROPERTIES,\r\n        EventBus.ELEMENTMOUSEDOWN,\r\n        EventBus.ELEMENTMOUSEUP,\r\n        EventBus.ELEMENTMOUSELEAVE,\r\n        EventBus.ELEMENTMOUSEMOVE,\r\n        EventBus.ELEMENTMOUSEWHEEL,\r\n        EventBus.ELEMENTCLICK,\r\n        EventBus.ELEMENTDRAG,\r\n        EventBus.ELEMENTDBLCLICK,\r\n        EventBus.ELEMENTDRAGOVER,\r\n        EventBus.ELEMENTDROP,\r\n        EventBus.ELEMENTDRAGLEAVE,\r\n    ];\r\n\r\n    private static handlers = {};\r\n\r\n    private static $activeHandler: string = '';\r\n\r\n    public static setActiveHandler(handler: string): void {\r\n        this.$activeHandler = handler;\r\n    }\r\n\r\n    public static isHandlerActiveOrFree(handler: string, notEmpty?: boolean): boolean {\r\n        if (notEmpty) {\r\n            return this.$activeHandler === handler;\r\n        }\r\n        return this.$activeHandler === handler || this.$activeHandler === '' || this.$activeHandler === undefined;\r\n    }\r\n\r\n    public static isAnyHandlerActive(): boolean {\r\n        return !(this.$activeHandler === '' || this.$activeHandler === undefined);\r\n    }\r\n\r\n    public static releaseActiveHandler(): void {\r\n        this.$activeHandler = '';\r\n    }\r\n\r\n    public static getActiveHandler(): string {\r\n        return this.$activeHandler;\r\n    }\r\n\r\n    static register(control: Control, view: Element) {\r\n        let events: string[];\r\n        if (typeof control['getEvents'] === 'function') {\r\n            events = control['getEvents']();\r\n        }\r\n\r\n        if (!events || !view) {\r\n            return;\r\n        }\r\n        for (let event of events) {\r\n            this.registerEvent(view, event, control);\r\n        }\r\n    }\r\n\r\n    static registerEvent(view: Element, event: string, control?: any) {\r\n        const pos: number = event.indexOf(':');\r\n        if (pos > 0) {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        } else {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        }\r\n    }\r\n\r\n    public static publish(element: DiagramElement, evt: Event) {\r\n        let handlers = EventBus.handlers[evt.type];\r\n        if (handlers) {\r\n            for (let handler of handlers) {\r\n                handler.handle(evt, element);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static subscribe(handler: EventHandler, ...eventTypes: string[]) {\r\n        for (let event of eventTypes) {\r\n            let handlers = EventBus.handlers[event];\r\n            if (handlers === null || handlers === undefined) {\r\n                handlers = [];\r\n                EventBus.handlers[event] = handlers;\r\n            }\r\n            handlers.push(handler);\r\n        }\r\n    }\r\n}\r\n","import SimpleEvent from './Event';\r\n\r\nexport default class EventListener {\r\n    private $onUpdate: Function;\r\n\r\n    get onUpdate(): Function {\r\n        return this.$onUpdate;\r\n    }\r\n\r\n    set onUpdate(value: Function) {\r\n        this.$onUpdate = value;\r\n    }\r\n\r\n    update(event: SimpleEvent) {\r\n        this.$onUpdate(event);\r\n    }\r\n}\r\n","// ################################## jsEPS ####################################################\r\nimport {SVGConverter} from './SVGConverter';\r\n\r\nexport class JSEPS {\r\n    private max: number;\r\n    private min: number;\r\n    private inverting: boolean;\r\n    private output: string[];\r\n    private font: number;\r\n\r\n    constructor(options: any) {\r\n        this.max = 0;\r\n        this.min = 999;\r\n        let hasInverting = typeof (options.inverting);\r\n        this.inverting = (options && hasInverting !== 'undefined' ? options.inverting : true);\r\n        this.output = ['%!PS-Adobe-3.0 EPSF-3.0', '1 setlinewidth'];\r\n        this.out('/FSD {findfont exch scalefont def} bind def % In the document prolog: define');\r\n        this.out('/SMS {setfont moveto show} bind def % some useful procedures');\r\n        this.out('/MS {moveto show} bind def');\r\n        this.out('/F1  10  /Helvetica  FSD % At the start of the script: set up');\r\n        this.font = 1;\r\n    }\r\n\r\n    public out(value: string) {this.output.push(value); }\r\n    public rect(x: number, y: number, width: number, height: number, style: string) {\r\n        y = y + (this.inverting ? height : 0);\r\n        if (style && style.indexOf('fill:url(#classelement);') >= 0) {\r\n            this.out('gsave 0.93 0.93 0.93 setrgbcolor newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectfill grestore');\r\n        } else {\r\n            this.out('newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectstroke');\r\n        }\r\n    }\r\n    public setFillColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public y(value: number) {this.max = Math.max(this.max, value); this.min = Math.min(this.min, value); return this.inverting ? '%y(' + value + ')' : value; }\r\n    public getType(): string {\r\n        return 'application/postscript';\r\n    }\r\n\r\n    public getData(): string {\r\n        let t, end, url, text, typ = 'application/postscript', a = document.createElement('a'), data = '', pos, i;\r\n        for (i = 0; i < this.output.length; i += 1) {\r\n            text = this.output[i];\r\n            if (this.inverting) {\r\n                while ((pos = text.indexOf('%y')) >= 0) {\r\n                    end = text.indexOf(')', pos);\r\n                    t = this.max - parseInt(text.substring(pos + 3, end), 10);\r\n                    text = text.substring(0, pos) + t + text.substring(end + 1);\r\n                }\r\n            }\r\n            data = data + text + '\\r\\n';\r\n        }\r\n        return data;\r\n    }\r\n\r\n    public setDrawColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public ellipse(cx: number, cy: number, rx: number, ry: number, colorMode: string) {/*FIXME*/}\r\n    public circle(cx: number, cy: number, r: number, colorMode: string) {/*FIXME*/}\r\n    public setTextColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public text(x: number, y: number, text: string) {this.out('(' + text.replace('&lt;', '<').replace('&gt;', '>') + ') ' + x + ' ' + this.y(y) + ' F1 SMS'); }\r\n    public lineto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' lineto'); this.out('stroke'); }\r\n    public moveto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' moveto'); }\r\n    public line(x1: number, y1: number, x2: number, y2: number) {this.out('newpath ' + x1 + ' ' + this.y(y1) + ' moveto ' + x2 + ' ' + this.y(y2) + ' lineto stroke'); }\r\n    public setLineWidth(value: string) {this.out(value + ' setlinewidth'); }\r\n    public setFont(value: string) {this.out('/F' + (this.font += 1) + ' 10 /' + value + ' FSD'); }\r\n}\r\n","import { Graph } from './elements/Graph';\r\n\r\n/*const buttons = {\r\n    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    clazz: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n};\r\n*/\r\nexport default class Palette {\r\n\r\n    private graph: Graph;\r\n    private palette: Element;\r\n    private root: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n        let div = document.createElement('div');\r\n        div.className = 'palette';\r\n        div.id = 'palette';\r\n        this.root = div;\r\n        this.palette = div;\r\n        for (let key in graph.nodeFactory) {\r\n            let element = graph.nodeFactory[key];\r\n            let control = new element();\r\n            let icon = control.getToolBarIcon();\r\n            if (icon) {\r\n                let button = <HTMLButtonElement>document.createElement('button');\r\n                button.className = 'add' + key + 'Btn';\r\n                button.innerHTML = icon.outerHTML;\r\n                button.onclick = e => {\r\n                    let nextFreePosition = this.graph.getNextFreePosition();\r\n                    // let node = this.graph.addElementWithValues(graph.nodeFactory[key], {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    let node = this.graph.addElementWithValues(key, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    this.graph.drawElement(node);\r\n                };\r\n                this.palette.appendChild(button);\r\n            }\r\n        }\r\n        // this.graph.nodeFactory\r\n//        this.addButtons();\r\n    }\r\n\r\n    public show() {\r\n        document.body.appendChild(this.root);\r\n    }\r\n\r\n    private addButtons() {\r\n        /*for (let btn in buttons) {\r\n            let button = <HTMLButtonElement>document.createElement('button');\r\n            button.className = 'add' + btn + 'Btn';\r\n            button.innerHTML = buttons[btn];\r\n            button.onclick = e => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let node = this.graph.addElementWithValues(btn, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                this.graph.drawElement(node);\r\n            };\r\n            this.palette.appendChild(button);\r\n        }*/\r\n    }\r\n}\r\n","import {Graph} from './elements/Graph';\r\nimport * as edges from './elements/edges';\r\nimport {EventBus, EventHandler} from './EventBus';\r\nimport {DiagramElement} from './elements/BaseElements';\r\nimport {Util} from './util';\r\n\r\nexport class PanelGroup implements EventHandler {\r\n    private graph: Graph;\r\n    private selectedElement: DiagramElement;\r\n    private clearPanel: Panel;\r\n    private generatePanel: Panel;\r\n    private propertiesMasterPanel: HTMLDivElement;\r\n    private propertiesContent: HTMLDivElement;\r\n    private propHeaderLabel: HTMLDivElement;\r\n    private propHeaderButton: HTMLButtonElement;\r\n    private selectedPanel: Panel;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.clearPanel = new ClearPanel(this);\r\n        this.generatePanel = new GeneratePanel(this);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        this.handleOpenProperties(event, element);\r\n\r\n        if (event.type === EventBus.RELOADPROPERTIES\r\n            && this.selectedElement && element.id === this.selectedElement.id) {\r\n            this.handleEvent(event, element);\r\n        }\r\n\r\n        // the same element was clicked. do nothing\r\n        if (this.selectedElement && this.selectedElement.id === element.id) {\r\n            return true;\r\n        }\r\n        if (element.id === 'RootElement') {\r\n            this.setActivePanel(this.clearPanel);\r\n        }\r\n        if (element.id === 'GenerateProp') {\r\n            this.setActivePanel(this.generatePanel);\r\n        }\r\n        this.selectedElement = element;\r\n\r\n        return true;\r\n    }\r\n\r\n    public getGraph(): Graph {\r\n        return this.graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(PanelGroup.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(PanelGroup.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n     public handleEvent(event: any, element: any) {\r\n        // DO NOTHING\r\n    }\r\n\r\n    public show() {\r\n        // main div to display any properties, class, edge, etc.\r\n        this.propertiesMasterPanel = document.createElement('div');\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n\r\n        this.propertiesContent = document.createElement('div');\r\n        this.propertiesContent.className = 'properties-hidden';\r\n\r\n        this.propHeaderLabel = document.createElement('div');\r\n        this.propHeaderLabel.style.display = 'inherit';\r\n        this.propHeaderLabel.style.cursor = 'pointer';\r\n        this.propHeaderLabel.onclick = e => this.toogleProperties(e);\r\n\r\n        // button to display and hide the properties of e.g. a class\r\n        this.propHeaderButton = document.createElement('button');\r\n        this.propHeaderButton.className = 'btnHideProp';\r\n        this.propHeaderButton.style.cssFloat = 'right';\r\n        this.propHeaderButton.onclick = e => this.toogleProperties(e);\r\n\r\n        let propertiesHeader = document.createElement('div');\r\n        propertiesHeader.style.display = 'inline';\r\n        propertiesHeader.appendChild(this.propHeaderLabel);\r\n        propertiesHeader.appendChild(this.propHeaderButton);\r\n\r\n        this.propertiesMasterPanel.appendChild(propertiesHeader);\r\n        this.propertiesMasterPanel.appendChild(this.propertiesContent);\r\n        document.body.appendChild(this.propertiesMasterPanel);\r\n\r\n        this.setActivePanel(this.clearPanel);\r\n    }\r\n\r\n    public setActivePanel(panel: Panel) {\r\n        this.selectedPanel = panel;\r\n        this.propHeaderLabel.innerHTML = panel.getHeaderText();\r\n        if (this.propertiesContent) {\r\n            while (this.propertiesContent.hasChildNodes()) {\r\n                this.propertiesContent.removeChild(this.propertiesContent.childNodes[0]);\r\n            }\r\n        }\r\n        panel.show();\r\n\r\n        panel.showFirstTab();\r\n        if (panel !== this.clearPanel) {\r\n            this.showProperties(null);\r\n        } else {\r\n            this.hideProperties(null);\r\n        }\r\n    }\r\n\r\n    public getProperiesContent(): HTMLDivElement {\r\n        return this.propertiesContent;\r\n    }\r\n\r\n    private handleOpenProperties(event: Event, element: DiagramElement) {\r\n        if (event.type === 'dblclick') {\r\n            this.showProperties(event);\r\n        }\r\n    }\r\n\r\n    private showProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Show\r\n        this.propHeaderButton.innerHTML = '&#8897;';\r\n        this.propHeaderButton.title = 'Hide properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel';\r\n        this.propertiesContent.className = 'properties';\r\n    }\r\n\r\n    private toogleProperties(evt: Event): void {\r\n        if (this.propHeaderButton.title === 'Show properties') {\r\n            this.showProperties(evt);\r\n        } else {\r\n            this.hideProperties(evt);\r\n        }\r\n    }\r\n\r\n    private hideProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Hide\r\n        this.propHeaderButton.innerHTML = '&#8896;';\r\n        this.propHeaderButton.title = 'Show properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n        this.propertiesContent.className = 'properties-hidden';\r\n    }\r\n}\r\n\r\nexport abstract class Panel {\r\n    protected divPropertiesPanel: HTMLDivElement;\r\n    protected divPropertiesTabbedPanel: HTMLDivElement;\r\n    protected element: any;\r\n    protected group: PanelGroup;\r\n    private panelItem: PanelItem[] = [];\r\n\r\n    constructor(group: PanelGroup, element: any) {\r\n        // get the properties content panel\r\n        this.divPropertiesPanel = document.createElement('div');\r\n        this.element = element;\r\n        this.group = group;\r\n\r\n        this.divPropertiesTabbedPanel = document.createElement('div');\r\n        this.divPropertiesTabbedPanel.className = 'tabbedpane';\r\n\r\n        // add tabbed panel\r\n        this.divPropertiesPanel.appendChild(this.divPropertiesTabbedPanel);\r\n    }\r\n\r\n    public show(): void {\r\n        let propertiesContent: HTMLDivElement = this.group.getProperiesContent();\r\n        if (this.panelItem.length > 1) {\r\n            propertiesContent.appendChild(this.getPropertiesTabbedPanel());\r\n        }\r\n\r\n        propertiesContent.appendChild(this.getPropertiesPanel());\r\n    }\r\n\r\n    public getPropertiesTabbedPanel(): HTMLDivElement {\r\n        return this.divPropertiesTabbedPanel;\r\n    }\r\n\r\n    public getPropertiesPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return '';\r\n    }\r\n\r\n    public showFirstTab(): void {\r\n        if (this.panelItem.length > 0) {\r\n            this.openTab(this.panelItem[0]);\r\n        }\r\n    }\r\n\r\n    protected createTabElement(tabText: string, tabValue: string, item: PanelItem): PanelItem {\r\n        let tabElementBtn = document.createElement('button');\r\n        tabElementBtn.className = 'tablinks';\r\n        tabElementBtn.innerText = tabText;\r\n        tabElementBtn.value = tabValue;\r\n\r\n        if (item === null) {\r\n            item = new PanelItem(this);\r\n        }\r\n        item.withButton(tabElementBtn);\r\n\r\n        tabElementBtn.onclick = () => this.openTab(item);\r\n        this.divPropertiesTabbedPanel.appendChild(tabElementBtn);\r\n        this.panelItem.push(item);\r\n        return item;\r\n    }\r\n\r\n    protected openTab(panelItem: PanelItem): void {\r\n        for (let key in this.panelItem) {\r\n            let child = this.panelItem[key];\r\n            if (child !== panelItem) {\r\n                 child.deactive();\r\n            }\r\n        }\r\n        panelItem.active();\r\n        // hide other tabcontent\r\n        if (this.divPropertiesPanel) {\r\n            while (this.divPropertiesPanel.hasChildNodes()) {\r\n                this.divPropertiesPanel.removeChild(this.divPropertiesPanel.childNodes[0]);\r\n            }\r\n        }\r\n\r\n        // ADD\r\n        if (panelItem.getContent()) {\r\n            this.divPropertiesPanel.appendChild(panelItem.getContent());\r\n        }\r\n    }\r\n}\r\n\r\nexport class GeneratePanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n\r\n        let item: PanelItem = this.createTabElement('General', 'General', null);\r\n\r\n        // Workspace and generate code stuff\r\n        let inputGenerateWorkspace: HTMLInputElement =  <HTMLInputElement> Util.createHTML({tag: 'input', id: 'workspace', type: 'text', placeholder: 'Type your Folder for generated code...', value: 'src/main/java', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Folder:', inputGenerateWorkspace);\r\n\r\n        let inputGeneratePackage: HTMLInputElement = <HTMLInputElement> Util.createHTML({tag: 'input', id: 'package', type: 'text', placeholder: 'Type your workspace for generated code...', value: '', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Package:', inputGeneratePackage);\r\n\r\n        let options = document.createElement('div');\r\n        options.style.textAlign = 'center';\r\n        options.style.margin = '3';\r\n        options.style.padding = '5';\r\n\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(options);\r\n\r\n        options.style.borderStyle = 'groove';\r\n        options.style.borderRadius = '10px';\r\n\r\n        let btnGenerate = document.createElement('button');\r\n        btnGenerate.textContent = 'Generate';\r\n        btnGenerate.title = 'Generate code into your workspace';\r\n        btnGenerate.className = 'OptionElement';\r\n\r\n        let that = this;\r\n        btnGenerate.onclick = () => {\r\n            let workspace = inputGeneratePackage.value;\r\n            if (workspace.length === 0) {\r\n                alert('No workspace set.\\nEnter first your workspace');\r\n                inputGeneratePackage.focus();\r\n                return;\r\n            }\r\n            that.group.getGraph().generate(workspace, inputGenerateWorkspace.value);\r\n        };\r\n        options.appendChild(btnGenerate);\r\n        options.appendChild(document.createElement('hr'));\r\n        options.appendChild(document.createElement('br'));\r\n\r\n        let btnAutoLayout = Util.createHTML({tag: 'button', className: 'OptionElement', value: 'Auto Layout', style: {marginRight: '10px'}, onclick: () => {\r\n                that.group.getGraph().layout();\r\n            }});\r\n\r\n        options.appendChild(btnAutoLayout);\r\n\r\n        // delete all nodes\r\n        let btnDeleteAll = document.createElement('button');\r\n        btnDeleteAll.className = 'OptionElement';\r\n        btnDeleteAll.textContent = 'Delete All';\r\n        btnDeleteAll.title = 'Delete all nodes from diagram';\r\n\r\n        btnDeleteAll.onclick = () => {\r\n            let confirmDelete = confirm('All classes will be deleted!');\r\n            if (!confirmDelete) {\r\n                return;\r\n            }\r\n            that.group.getGraph().$graphModel.removeAllElements();\r\n        };\r\n        btnDeleteAll.style.marginRight = '10px';\r\n        options.appendChild(btnDeleteAll);\r\n\r\n        // export stuff\r\n        let exportTypes: string[] = ['Export', 'HTML', 'JSON', 'PDF', 'PNG', 'SVG'];\r\n        let selectExport = document.createElement('select');\r\n\r\n        exportTypes.forEach(type => {\r\n            if (!(!window['jsPDF'] && type === 'PDF')) {\r\n                let option = document.createElement('option');\r\n                option.value = type;\r\n                option.textContent = type;\r\n                selectExport.appendChild(option);\r\n            }\r\n        });\r\n\r\n        selectExport.onchange = (evt) => {\r\n            let selectedExportType = selectExport.options[selectExport.selectedIndex].value;\r\n            selectExport.selectedIndex = 0;\r\n            that.group.getGraph().saveAs(selectedExportType);\r\n        };\r\n        selectExport.className = 'OptionElement';\r\n        options.appendChild(selectExport);\r\n        options.appendChild(document.createElement('br'));\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Properties';\r\n    }\r\n\r\n}\r\n\r\nexport class ClearPanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Select any element to see its properties';\r\n    }\r\n}\r\n\r\nexport class PanelItem {\r\n    protected panel: Panel;\r\n    protected label: string;\r\n    protected button: HTMLButtonElement;\r\n    protected content: HTMLDivElement = <HTMLDivElement>Util.create({tag: 'div', className: 'tabContent'});\r\n\r\n    constructor(panel: Panel, label?: string) {\r\n        this.panel = panel;\r\n        this.label = label;\r\n    }\r\n\r\n    public active(): void {\r\n        if (this.getButton()) {\r\n            this.getButton().className += ' active';\r\n        }\r\n    }\r\n\r\n    public deactive(): void {\r\n        if (this.getButton()) {\r\n            Util.removeClass(this.getButton(), 'active');\r\n        }\r\n    }\r\n\r\n    public withButton(button: HTMLButtonElement): PanelItem {\r\n        this.button = button;\r\n        return this;\r\n    }\r\n\r\n    public withContent(element: HTMLElement): PanelItem {\r\n        this.content.appendChild(element);\r\n        return this;\r\n    }\r\n\r\n    public withInput(labelText: string, element: HTMLElement): PanelItem {\r\n        let group: HTMLDivElement = <HTMLDivElement> Util.createHTML({tag: 'div'});\r\n        let label = Util.createHTML({tag: 'label', for: element.id, value: labelText});\r\n        group.appendChild(label);\r\n        group.appendChild(element);\r\n\r\n        this.content.appendChild(group);\r\n        return this;\r\n    }\r\n\r\n    public getButton(): HTMLButtonElement {\r\n        return this.button;\r\n    }\r\n\r\n    public getContent(): HTMLDivElement {\r\n        return this.content;\r\n    }\r\n\r\n   public getHeader(): string {\r\n        return this.label;\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\nimport Data from './Data';\r\n\r\nexport class PropertyBinder implements PropertyChangeSupport {\r\n    private propertyClass1: string;\r\n    private propertyClass2: string;\r\n    private data1: Data;\r\n    private data2: Data;\r\n    // works like a lock\r\n    private applyingChange: boolean = false;\r\n\r\n    constructor(data1: Data, data2: Data, propertyClass1: string, propertyClass2: string) {\r\n        this.data1 = data1;\r\n        this.data2 = data2;\r\n        this.propertyClass1 = propertyClass1;\r\n        this.propertyClass2 = propertyClass2;\r\n    }\r\n    static bind(data1: Data, data2: Data, property1: string, property2: string) {\r\n        if (!data1 || !data2 || !property1) {\r\n            console.error('NullValue!!');\r\n            return null;\r\n        }\r\n        const propertyBinder = new PropertyBinder(data1, data2, property1, property2);\r\n        propertyBinder.bind();\r\n        return propertyBinder;\r\n    }\r\n\r\n    propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        if (!this.applyingChange) {\r\n            this.applyingChange = true;\r\n            if (entity === this.data1) {\r\n                // fire to data2\r\n                this.data2.setValue(this.propertyClass2, newValue);\r\n            } else if (entity === this.data2) {\r\n                // fire to data1\r\n                this.data1.setValue(this.propertyClass1, newValue);\r\n            }\r\n            this.applyingChange = false;\r\n        }\r\n    }\r\n\r\n    protected bind() {\r\n        // public addListener(control: Control, property?: string)\r\n        // todo: set value immediately\r\n        this.data1.setValue(this.propertyClass1, this.data2.getValue(this.propertyClass2));\r\n\r\n        this.data1.addListener(this, this.propertyClass1);\r\n        this.data2.addListener(this, this.propertyClass2);\r\n    }\r\n\r\n    protected unbind() {\r\n        // public addListener(control: Control, property?: string)\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n    }\r\n}\r\n","// ################################## RGBColor ####################################################\r\nexport class RGBColor {\r\n    public  ok: boolean;\r\n    public r: number;\r\n    public g: number;\r\n    public b: number;\r\n\r\n    constructor(value: string) {\r\n        this.ok = false;\r\n        if (value === 'none') {\r\n            return;\r\n        }\r\n        let computedColor, div = document.createElement('div');\r\n        div.style.backgroundColor = value;\r\n        document.body.appendChild(div);\r\n        computedColor = window.getComputedStyle(div).backgroundColor;\r\n        // cleanup temporary div.\r\n        document.body.removeChild(div);\r\n        this.convert(computedColor);\r\n    }\r\n    public convert(value: any) {\r\n        let values, regex = /rgb *\\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\\)/;\r\n        values = regex.exec(value);\r\n        this.r = parseInt(values[1], 10);\r\n        this.g = parseInt(values[2], 10);\r\n        this.b = parseInt(values[3], 10);\r\n        this.ok = true;\r\n    }\r\n\r\n    public toRGB(): string {return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; }\r\n    public toHex(): string {\r\n        return '#' + (this.r + 0x10000).toString(16).substring(3).toUpperCase() + (this.g + 0x10000).toString(16).substring(3).toUpperCase() + (this.b + 0x10000).toString(16).substring(3).toUpperCase();\r\n    }\r\n}\r\n","/*\r\n NetworkParser\r\n Copyright (c) 2011 - 2014, Stefan Lindel\r\n All rights reserved.\r\n\r\n Licensed under the EUPL, Version 1.1 or (as soon they\r\n will be approved by the European Commission) subsequent\r\n versions of the EUPL (the \"Licence\");\r\n You may not use this work except in compliance with the Licence.\r\n You may obtain a copy of the Licence at:\r\n\r\n http://ec.europa.eu/idabc/eupl5\r\n\r\n Unless required by applicable law or agreed to in\r\n writing, software distributed under the Licence is\r\n distributed on an \"AS IS\" basis,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\r\n express or implied.\r\n See the Licence for the specific language governing\r\n permissions and limitations under the Licence.\r\n*/\r\nimport {RGBColor} from './RGBColor';\r\nimport {JSEPS} from \"./JSEPS\";\r\n\r\nconst epsSvgAttr = {\r\n    // allowed attributes. all others are removed from the preview.\r\n    g: ['stroke', 'fill', 'stroke-width'],\r\n    line: ['x1', 'y1', 'x2', 'y2', 'stroke', 'stroke-width'],\r\n    rect: ['x', 'y', 'width', 'height', 'stroke', 'fill', 'stroke-width'],\r\n    ellipse: ['cx', 'cy', 'rx', 'ry', 'stroke', 'fill', 'stroke-width'],\r\n    circle: ['cx', 'cy', 'r', 'stroke', 'fill', 'stroke-width'],\r\n    text: ['x', 'y', 'font-size', 'font-family', 'text-anchor', 'font-weight', 'font-style', 'fill'],\r\n    path: ['']\r\n};\r\nexport class SVGConverter {\r\n    private k: number;\r\n    private remove: boolean;\r\n    private target: any;\r\n\r\n    constructor(element: any, target: any, options: any) {\r\n        this.k = 1.0;\r\n        let hasScale = typeof (options.scale), hasRemoveInvalid = typeof (options.removeInvalid);\r\n        this.k = (options && hasScale !== 'undefined' ? options.scale : 1.0);\r\n        this.remove = (options && hasRemoveInvalid !== 'undefined' ? options.removeInvalid : false);\r\n        this.target = target;\r\n        this.parse(element);\r\n    }\r\n\r\n    public parse(element: any) {\r\n        let el, i, n, colorMode, hasFillColor, fillRGB, fillColor, strokeColor, strokeRGB, fontType, pdfFontSize, x, y,\r\n            box, xOffset;\r\n        if (!element) {\r\n            return;\r\n        }\r\n        if (typeof element === 'string') {\r\n            el = document.createElement('div');\r\n            el.innerHTML = element;\r\n            element = el.childNodes[0];\r\n        }\r\n        for (i = 0; i < element.children.length; i += 1) {\r\n            n = element.children[i];\r\n            colorMode = null;\r\n            hasFillColor = false;\r\n            if ('g,line,rect,ellipse,circle,text'.indexOf(n.tagName) >= 0) {\r\n                fillColor = n.getAttribute('fill');\r\n                if (fillColor) {\r\n                    fillRGB = new RGBColor(fillColor);\r\n                    if (fillRGB.ok) {\r\n                        hasFillColor = true;\r\n                        colorMode = 'F';\r\n                    }\r\n                }\r\n            }\r\n            if ('g,line,rect,ellipse,circle'.indexOf(n.tagName) >= 0) {\r\n                if (hasFillColor) {\r\n                    this.target.setFillColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                }\r\n                strokeColor = n.getAttribute('stroke');\r\n                if (n.hasAttribute('stroke-width')) {\r\n                    this.target.setLineWidth(this.attr(n, 'stroke-width'));\r\n                }\r\n                if (strokeColor) {\r\n                    strokeRGB = new RGBColor(strokeColor);\r\n                    if (strokeRGB.ok) {\r\n                        this.target.setDrawColor(strokeRGB.r, strokeRGB.g, strokeRGB.b);\r\n                        if (colorMode === 'F') {\r\n                            colorMode = 'FD';\r\n                        } else if (!hasFillColor) {\r\n                            colorMode = 'S';\r\n                        }\r\n                    } else {\r\n                        colorMode = null;\r\n                    }\r\n                }\r\n            }\r\n            // console.log(\"write \"+n.tagName);\r\n            switch (n.tagName.toLowerCase()) {\r\n                case 'svg':\r\n                case 'a':\r\n                case 'g':\r\n                    this.parse(n);\r\n                    break;\r\n                case 'line':\r\n                    this.target.line(this.attr(n, 'x1'), this.attr(n, 'y1'), this.attr(n, 'x2'), this.attr(n, 'y2'));\r\n                    break;\r\n                case 'rect':\r\n                    this.target.rect(this.attr(n, 'x'), this.attr(n, 'y'), this.attr(n, 'width'), this.attr(n, 'height'), n.getAttribute('style'));\r\n                    break;\r\n                case 'ellipse':\r\n                    this.target.ellipse(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'rx'), this.attr(n, 'ry'), colorMode);\r\n                    break;\r\n                case 'circle':\r\n                    this.target.circle(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'r'), colorMode);\r\n                    break;\r\n                case 'text':\r\n                    if (n.hasAttribute('font-family')) {\r\n                        switch (n.getAttribute('font-family').toLowerCase()) {\r\n                            case 'serif':\r\n                                this.target.setFont('times');\r\n                                break;\r\n                            case 'monospace':\r\n                                this.target.setFont('courier');\r\n                                break;\r\n                            default:\r\n                                n.getAttribute('font-family', 'sans-serif');\r\n                                this.target.setFont('Helvetica');\r\n                        }\r\n                    }\r\n                    if (hasFillColor) {\r\n                        this.target.setTextColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                    }\r\n                    if (this.target instanceof JSEPS) {\r\n                        this.target.text(this.attr(n, 'x'), this.attr(n, 'y'), n.innerHTML);\r\n                        break;\r\n                    }\r\n                    fontType = '';\r\n                    if (n.hasAttribute('font-weight')) {\r\n                        if (n.getAttribute('font-weight') === 'bold') {\r\n                            fontType = 'bold';\r\n                        }\r\n                    }\r\n                    if (n.hasAttribute('font-style')) {\r\n                        if (n.getAttribute('font-style') === 'italic') {\r\n                            fontType += 'italic';\r\n                        }\r\n                    }\r\n                    this.target.setFontType(fontType);\r\n                    pdfFontSize = 16;\r\n                    if (n.hasAttribute('font-size')) {\r\n                        pdfFontSize = parseInt(n.getAttribute('font-size'), 10);\r\n                    }\r\n                    box = n.getBBox();\r\n                    // FIXME: use more accurate positioning!!\r\n                    x = this.attr(n, 'x');\r\n                    y = this.attr(n, 'y');\r\n                    xOffset = 0;\r\n                    if (n.hasAttribute('text-anchor')) {\r\n                        switch (n.getAttribute('text-anchor')) {\r\n                            case 'end':\r\n                                xOffset = box.width;\r\n                                break;\r\n                            case 'middle':\r\n                                xOffset = box.width / 2;\r\n                                break;\r\n                            case 'start':\r\n                                break;\r\n                            case 'default':\r\n                                n.getAttribute('text-anchor', 'start');\r\n                                break;\r\n                        }\r\n                        x = x - (xOffset * this.k);\r\n                    }\r\n                    this.target.setFontSize(pdfFontSize).text(x, y, n.innerHTML);\r\n                    break;\r\n                default:\r\n                    if (this.remove) {\r\n                        console.log('cant translate to target:', n);\r\n                        element.removeChild(n);\r\n                        i -= 1;\r\n                    }\r\n            }\r\n        }\r\n    }\r\n\r\n    public attr(node: any, name: string) {\r\n        return this.k * parseInt(node.getAttribute(name), 10);\r\n    }\r\n}\r\n","import {Control} from './Control';\r\n\r\nexport class ScrumBoard extends Control {\r\n    public static cards = [0, 0.5, 1, 2, 3, 5, 8, 13, 20, 40, 100, '?', 'Coffee'];\r\n    private $selected: HTMLDivElement;\r\n    private $board: HTMLDivElement;\r\n\r\n    constructor() {\r\n        super();\r\n        this.redraw();\r\n    }\r\n\r\n    public redraw(): void {\r\n        if (this.$board) {\r\n            while (this.$board.children.length > 0 ) {\r\n                this.$board.removeChild(this.$board.children[0]);\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('div');\r\n            this.$selected = document.createElement('div');\r\n            this.$board = document.createElement('div');\r\n            this.$view.appendChild(this.$board);\r\n            this.$view.appendChild(this.$selected);\r\n        }\r\n        this.$view.className = 'ScrumBoard';\r\n        for ( let i = 0; i < ScrumBoard.cards.length; i++) {\r\n            let card = document.createElement('div');\r\n            card.className = 'ScrumCard';\r\n            card.innerHTML = <string>ScrumBoard.cards[i];\r\n            card['pokervalue'] = <string>ScrumBoard.cards[i];\r\n            card.onclick = e => {\r\n                this.onClick(<HTMLDivElement>e.target);\r\n            };\r\n            this.$board.appendChild(card);\r\n        }\r\n    }\r\n\r\n    public getSVG() {\r\n        this.redraw();\r\n        return this.$view;\r\n    }\r\n\r\n    public onClick(target: HTMLDivElement): void {\r\n        console.log(target['pokervalue']);\r\n\r\n        while (this.$selected.children.length > 0 ) {\r\n            this.$selected.removeChild(this.$selected.children[0]);\r\n        }\r\n        let card = document.createElement('div');\r\n        card.className = 'ScrumCard';\r\n        card['pokervalue'] = target['pokervalue'];\r\n        card.onclick = e => {\r\n            this.onShow(<HTMLDivElement>e.target);\r\n        };\r\n        this.$selected.appendChild(card);\r\n        this.$board['style']['display'] = 'none';\r\n    }\r\n\r\n    public onShow(target: HTMLDivElement): void {\r\n        target.innerHTML = target['pokervalue'];\r\n    }\r\n}\r\n","import {Graph} from './main';\r\nimport {SymbolLibary} from './elements/nodes/Symbol';\r\nimport {EventBus} from './EventBus';\r\n\r\nexport class Toolbar {\r\n\r\n    private graph: Graph;\r\n    private mainDiv: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public show(): void {\r\n        if (this.mainDiv) {\r\n            return;\r\n        }\r\n\r\n        this.mainDiv = document.createElement('div');\r\n        this.mainDiv.className = 'toolbar';\r\n\r\n        let h1Logo = document.createElement('h1');\r\n        h1Logo.className = 'logo';\r\n        h1Logo.textContent = 'DiagramJS';\r\n\r\n        let node = {type: 'Hamburger', property: 'HTML', width: 24, height: 24, id: 'GenerateProp'};\r\n        let hamburger = SymbolLibary.draw( node);\r\n        EventBus.registerEvent(hamburger, 'click', node);\r\n        this.mainDiv.appendChild(hamburger);\r\n\r\n        this.mainDiv.appendChild(h1Logo);\r\n        document.body.appendChild(this.mainDiv);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 06.03.2017.\r\n */\r\nimport Data from './Data';\r\n\r\n// export default class Data {\r\n//    public values = {};\r\n//    id: string;\r\n//    $listener: Control[] = [];\r\n//    property: string;\r\nexport namespace UML {\r\n    export class Clazz extends Data {\r\n        public static NAME: string = 'name';\r\n        public static ATTRIBUTES: string = 'attributes';\r\n        public static METHODS: string = 'methods';\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Clazz';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n\r\n        public getAttributes() {\r\n            return this.prop[Clazz.ATTRIBUTES];\r\n        }\r\n\r\n        public addToAttributes(newValue: string) {\r\n            this.addTo(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n\r\n        public removeFromAttributes(newValue: string) {\r\n            this.removeFrom(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n    }\r\n\r\n    export class Attribute extends Data {\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Attribute';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n    }\r\n\r\n    export class Methods extends Data {\r\n\r\n    }\r\n}\r\n\r\nwindow['UML'] = UML;\r\n","import {Control} from './Control';\r\n\r\nexport class VirtualKeyBoard extends Control {\r\n    constructor(data: any) {\r\n        super();\r\n        if (!data) {\r\n            data = this.getDefault();\r\n        }\r\n        let board = document.createElement('div');\r\n        this.$viewData = data;\r\n\r\n        for (let type in data) {\r\n            if (type === 'normal') {\r\n                for (let line in data[type]) {\r\n                    let lineBoard = document.createElement('div');\r\n                    lineBoard.className = 'vkLine';\r\n                    for (let key in data[type][line]) {\r\n                        let btn: HTMLButtonElement = document.createElement('button');\r\n                        let keyTag = data[type][line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                        btn.ontouchend = () => {this.action(btn); };\r\n                        btn.onclick = () => {this.action(btn); };\r\n                        lineBoard.appendChild(btn);\r\n                    }\r\n                    board.appendChild(lineBoard);\r\n                }\r\n            }\r\n        }\r\n        this.$view = board;\r\n    }\r\n\r\n    public action(btn: HTMLButtonElement) {\r\n        if (btn['key'] === '{Shift}') {\r\n            if ( btn.className === 'vkbuttonAction') {\r\n                let keys = this.$viewData['normal'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                    }\r\n                }\r\n            } else if ( btn.className === 'vkbutton') {\r\n                let keys = this.$viewData['shift'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbuttonAction');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        alert(btn);\r\n    }\r\n\r\n    public getDefault(): any {\r\n        let format = {\r\n            normal: [\r\n                ['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '?', '´', '{Bksp}'],\r\n                ['{Tab}', 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+'],\r\n                ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '#', '{enter}'],\r\n                ['{Shift}', '<', 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n// '{left}', '{up}', '{down}','{right}', '{Cancel}']\r\n            ],\r\n            shift: [\r\n                ['°', '!', '\"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '`', '{Bksp}'],\r\n                ['{Tab}', 'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', 'O', 'P', 'Ü', '*'],\r\n                ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', '\\'', '{enter}'],\r\n                ['{Shift}', '>', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n            ]\r\n        };\r\n        return format;\r\n    }\r\n\r\n    public getBoard() {\r\n        return this.$view;\r\n    }\r\n\r\n    private setButtonValue(keyTag: string, btn: HTMLButtonElement, shiftClass: string) {\r\n        btn.className = 'vkbutton';\r\n        btn['key'] = keyTag;\r\n        btn['type'] = 'normal';\r\n        if (keyTag.substring(0, 1) === '{') {\r\n            if (keyTag === '{Bksp}') {\r\n                btn.innerHTML = 'Bksp';\r\n            } else if (keyTag === '{Tab}') {\r\n                btn.innerHTML = '&#8677; Tab';\r\n            } else if (keyTag === '{enter}') {\r\n                btn.innerHTML = 'enter';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Shift}') {\r\n                btn.innerHTML = 'Shift';\r\n                btn.className = shiftClass;\r\n            } else if (keyTag === '{Accept}') {\r\n                btn.innerHTML = 'Accept';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Alt}') {\r\n                btn.innerHTML = 'Alt';\r\n            } else if (keyTag === '{Space}') {\r\n                btn.innerHTML = '&nbsp;';\r\n                btn.className = 'vkbuttonSpace';\r\n            } else if (keyTag === '{left}') {\r\n                btn.innerHTML = '&#8592';\r\n            } else if (keyTag === '{right}') {\r\n                btn.innerHTML = '&#8594;';\r\n            } else if (keyTag === '{up}') {\r\n                btn.innerHTML = '&#8593;';\r\n            } else if (keyTag === '{down}') {\r\n                btn.innerHTML = '&#8595;';\r\n            } else if (keyTag === '{Cancel}') {\r\n                btn.innerHTML = 'Cancel';\r\n                btn.className = 'vkbuttonAction';\r\n            }\r\n        } else {\r\n            btn.innerHTML = keyTag;\r\n        }\r\n    }\r\n}\r\n","import {Adapter} from '../Adapter';\r\n\r\nexport class JavaAdapter extends Adapter {\r\n    constructor() {\r\n        super();\r\n        this.id = 'JavaAdapter';\r\n    }\r\n    update(evt: Object): boolean {\r\n        if (this.isActive()) {\r\n            window['JavaBridge'].executeChange(evt);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public isActive(): boolean {\r\n        return window['JavaBridge'];\r\n    }\r\n}\r\n","export * from './JavaAdapter';\r\n","import { Util } from '../util';\r\nimport { Control } from '../Control';\r\n\r\nexport interface Size {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\ninterface GraphElement {\r\n    getSize(): Point;\r\n\r\n    getPos(): Point;\r\n\r\n    getCenter(): Point;\r\n\r\n    getSVG(): Element;\r\n\r\n    getCanvas(): Element;\r\n\r\n    getEvents(): string[];\r\n\r\n    withPos(x: number, y: number): GraphElement;\r\n\r\n    load(data: any): any;\r\n\r\n    getToolBarIcon(): Element;\r\n\r\n    loadProperties(properties: any): void;\r\n}\r\n\r\nexport abstract class DiagramElement extends Control implements GraphElement {\r\n\r\n    protected $isDraggable: boolean = true;\r\n    protected $labelHeight = 25;\r\n    protected $labelFontSize = 14;\r\n    private $pos: Point = new Point();\r\n    private $size: Point = new Point();\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getPos(): Point {\r\n        return this.$pos;\r\n    }\r\n\r\n    public getSize(): Point {\r\n        return this.$size;\r\n    }\r\n\r\n    public getCenter(): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        return new Point(pos.x + size.x / 2, pos.y + size.y / 2);\r\n    }\r\n\r\n    public getCenterPosition(p: string): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let offset = this['$' + p];\r\n        let center = this.getCenter();\r\n        if (p === Point.DOWN) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y + size.y, Point.DOWN);\r\n        }\r\n        if (p === Point.UP) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y, Point.UP);\r\n        }\r\n        if (p === Point.LEFT) {\r\n            return new Point(pos.x, Math.min(center.y + offset, pos.y + size.y), Point.LEFT);\r\n        }\r\n        if (p === Point.RIGHT) {\r\n            return new Point(pos.x + size.x, Math.min(center.y + offset, pos.y + size.y), Point.RIGHT);\r\n        }\r\n        return new Point();\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getCanvas(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return null;\r\n    }\r\n\r\n    public getAlreadyDisplayingSVG(): Element {\r\n        return document.getElementById(this.id) || this.getSVG();\r\n    }\r\n\r\n    public load(data: any) {\r\n        // Do Nothing\r\n    }\r\n\r\n    public withPos(x: number, y: number): GraphElement {\r\n        if (x && y) {\r\n            this.$pos = new Point(x, y);\r\n        } else {\r\n            if (typeof (x) !== 'undefined' && x !== null) {\r\n                this.$pos.x = x;\r\n            }\r\n            if (typeof (y) !== 'undefined' && y !== null) {\r\n                this.$pos.y = y;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public withSize(width: number, height: number): DiagramElement {\r\n        if (width && height) {\r\n            this.$size = new Point(width, height);\r\n        } else {\r\n            if (typeof (width) !== 'undefined' && width !== null) {\r\n                this.$size.x = width;\r\n            }\r\n            if (typeof (height) !== 'undefined' && height !== null) {\r\n                this.$size.y = height;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        // FIXME if (this.status === 'close') {\r\n        // if (!this.$owner.isClosed()) {\r\n        //        return this;\r\n        //    }\r\n        // }\r\n        return super.getShowed();\r\n    }\r\n\r\n    public loadProperties(properties: any) {\r\n        // DO Nothing\r\n    }\r\n\r\n    protected createShape(attrs: any): Element {\r\n        return Util.createShape(attrs);\r\n    }\r\n}\r\n\r\nexport class Point {\r\n    public static UP: string = 'UP';\r\n    public static LEFT: string = 'LEFT';\r\n    public static RIGHT: string = 'RIGHT';\r\n    public static DOWN: string = 'DOWN';\r\n    x: number = 0;\r\n    y: number = 0;\r\n\r\n    //    pos:string = '';\r\n\r\n    constructor(x?: number, y?: number, pos?: string) {\r\n        this.x = Math.ceil(x || 0);\r\n        this.y = Math.ceil(y || 0);\r\n        if (pos) {\r\n            this['pos'] = pos;\r\n        }\r\n    }\r\n\r\n    public add(pos: Point) {\r\n        this.x += pos.x;\r\n        this.y += pos.y;\r\n        return this;\r\n    }\r\n\r\n    public getPosition(): string {\r\n        if (!this['pos']) {\r\n            return '';\r\n        }\r\n        return this['pos'];\r\n    }\r\n\r\n    public addNum(x: number, y: number) {\r\n        this.x += x;\r\n        this.y += y;\r\n        return this;\r\n    }\r\n\r\n    public sum(pos: Point) {\r\n        let sum = new Point(this.x, this.y);\r\n        sum.add(pos);\r\n        return sum;\r\n    }\r\n\r\n    public center(posA: Point, posB: Point) {\r\n        let count = 0;\r\n        if (posA) {\r\n            this.x += posA.x;\r\n            this.y += posA.y;\r\n            count++;\r\n        }\r\n        if (posB) {\r\n            this.x += posB.x;\r\n            this.y += posB.y;\r\n            count++;\r\n        }\r\n        if (count > 0) {\r\n            this.x = (this.x / count);\r\n            this.y = (this.y / count);\r\n        }\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        return this.x < 1 && this.y < 1;\r\n    }\r\n\r\n    public size(posA: Point, posB: Point) {\r\n        let x1 = 0, x2 = 0, y1 = 0, y2 = 0;\r\n        if (posA) {\r\n            x1 = posA.x;\r\n            y1 = posA.y;\r\n        }\r\n        if (posB) {\r\n            x2 = posB.x;\r\n            y2 = posB.y;\r\n        }\r\n        if (x1 > x2) {\r\n            this.x = x1 - x2;\r\n        } else {\r\n            this.x = x2 - x1;\r\n        }\r\n        if (y1 > y2) {\r\n            this.y = y1 - y2;\r\n        } else {\r\n            this.y = y2 - y1;\r\n        }\r\n    }\r\n}\r\n\r\n// \t\t\t\t######################################################### Line #########################################################\r\nexport class Line extends DiagramElement {\r\n    public static FORMAT = { SOLID: 'SOLID', DOTTED: 'DOTTED', PATH: 'PATH' };\r\n    public source: Point;\r\n    public target: Point;\r\n    public color: string;\r\n    public lineType: string;\r\n    private path: string;\r\n    private angle: Number;\r\n\r\n    constructor(lineType: string) {\r\n        super();\r\n        this.lineType = lineType;\r\n    }\r\n\r\n    public getTyp(): string {\r\n        return 'SVG';\r\n    }\r\n\r\n    public getPos() {\r\n        let pos = new Point();\r\n        pos.center(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public getSize() {\r\n        let pos = new Point();\r\n        pos.size(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public withColor(color: string): Line {\r\n        this.color = color;\r\n        return this;\r\n    }\r\n\r\n    public withSize(x: number, y: number): DiagramElement {\r\n        return this;\r\n    }\r\n\r\n    public withPath(path: Array<Point>, close: boolean, angle?: any): Line {\r\n        let i: number, d: string = 'M' + path[0].x + ' ' + path[0].y;\r\n        this.lineType = Line.FORMAT.PATH; // It is a Path not a Line\r\n        for (i = 1; i < path.length; i += 1) {\r\n            d = d + 'L ' + path[i].x + ' ' + path[i].y;\r\n        }\r\n        if (close) {\r\n            d = d + ' Z';\r\n            this.target = path[0];\r\n        } else {\r\n            this.target = path[path.length - 1];\r\n        }\r\n        this.path = d;\r\n        if (angle instanceof Number) {\r\n            this.angle = angle;\r\n        } else if (angle) {\r\n            // var lineangle, start = path[0], end = path[path.length - 1];\r\n            // lineangle = Math.atan2(end.y - start.y, end.x - start.x);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): SVGGElement {\r\n        if (this.lineType === 'PATH') {\r\n            return <SVGGElement>Util.create({\r\n                tag: 'path',\r\n                'd': this.path,\r\n                'fill': this.color,\r\n                stroke: '#000',\r\n                'stroke-width': '1px'\r\n            });\r\n        }\r\n        let line: SVGGElement = <SVGGElement>Util.create({\r\n            tag: 'line',\r\n            'x1': this.source.x,\r\n            'y1': this.source.y,\r\n            'x2': this.target.x,\r\n            'y2': this.target.y,\r\n            'stroke': Util.getColor(this.color)\r\n        });\r\n        if (this.lineType && this.lineType.toLowerCase() === 'dotted') {\r\n            line.setAttribute('stroke-miterlimit', '4');\r\n            line.setAttribute('stroke-dasharray', '1,1');\r\n        }\r\n        return line;\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport Options from '../Options';\r\nimport {JavaAdapter} from '../adapters';\r\n\r\nexport class ClassEditor extends Graph {\r\n    private adapter: JavaAdapter;\r\n    constructor(json: any, options: Options) {\r\n        if (!options ) {\r\n            options = {};\r\n        }\r\n        options.canvas = options.canvas || 'canvas';\r\n        // options.origin = options.origin || new Point(150, 45);\r\n//            layout: \"DagreLayout\",\r\n        options.autoSave = options.autoSave || true;\r\n        if (!options.features) {\r\n            options.features = {\r\n                drag: true,\r\n                editor: true,\r\n                palette: true,\r\n                select: true,\r\n                zoom: true,\r\n                toolbar: true,\r\n                import: true,\r\n                properties: true,\r\n                addnode: true,\r\n                newedge: true\r\n            };\r\n        }\r\n        super(json, options);\r\n    }\r\n\r\n    public setBoardStyle(value: string) {\r\n        console.log(value);\r\n        this.importFile.setBoardStyle(value);\r\n    }\r\n\r\n    public registerListener(): void {\r\n        this.adapter = new JavaAdapter();\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return this.adapter;\r\n    }\r\n}\r\n","import * as edges from './edges';\r\nimport { Association } from './edges';\r\nimport * as nodes from './nodes';\r\nimport * as layouts from '../layouts';\r\nimport Layout from '../layouts/Layout';\r\nimport { GraphModel } from './Model';\r\nimport { Point, Size } from './BaseElements';\r\nimport { Util } from '../util';\r\nimport { Control } from '../Control';\r\nimport Data from '../Data';\r\nimport { EventBus } from '../EventBus';\r\nimport { AddNode, Drag, NewEdge, Select, Zoom } from '../handlers';\r\nimport Options from '../Options';\r\nimport { ImportFile } from '../handlers/ImportFile';\r\nimport { CSS } from '../CSS';\r\nimport { DiagramElement } from './index';\r\nimport { Toolbar } from '../Toolbar';\r\nimport {JSEPS} from '../JSEPS';\r\nimport {SVGConverter} from '../SVGConverter';\r\nimport Palette from '../Palette';\r\nimport {PanelGroup} from '../PropertiesPanel';\r\n\r\nexport class Graph extends Control {\r\n    // canvas: HTMLElement;\r\n    root: SVGElement;\r\n    $graphModel: GraphModel;\r\n    options: Options;\r\n    canvasSize: Size;\r\n    nodeFactory: Object;\r\n    edgeFactory: Object;\r\n    layoutFactory: Object;\r\n    protected importFile: ImportFile;\r\n    private currentlayout: Layout;\r\n    // private layerToolBar: SVGSVGElement;\r\n    // https://stackoverflow.com/questions/15181452/how-to-save-export-inline-svg-styled-with-css-from-browser-to-image-file\r\n    private containerElements = ['svg', 'g'];\r\n    private relevantStyles = {\r\n        'rect': ['fill', 'stroke', 'stroke-width'],\r\n        'path': ['fill', 'stroke', 'stroke-width', 'opacity'],\r\n        'circle': ['fill', 'stroke', 'stroke-width'],\r\n        'line': ['stroke', 'stroke-width'],\r\n        'text': ['fill', 'font-size', 'text-anchor', 'font-family'],\r\n        'polygon': ['stroke', 'fill']\r\n    };\r\n\r\n    constructor(json: any, options: Options) {\r\n        super();\r\n        json = json || {};\r\n        if (json['data']) {\r\n            options = json['options'];\r\n            json = json['data'];\r\n            this.id = json['id'];\r\n        }\r\n        this.options = options || {features: { drag: true}};\r\n        if (json['init']) {\r\n            return;\r\n        }\r\n        if (!this.options.origin) {\r\n            this.options.origin = new Point(150, 45);\r\n        }\r\n        if (!this.options.style) {\r\n            // Style can be classic or modern\r\n            this.options.style = 'classic';\r\n        }\r\n        if (this.options.autoSave) {\r\n            Util.isAutoSave = options.autoSave;\r\n        }\r\n\r\n        this.initFactories();\r\n        this.initCanvas();\r\n        this.initFeatures(this.options.features);\r\n\r\n        // load previous session, if user wants it\r\n        // otherwise load the json data\r\n        if (!this.lookupInLocalStorage()) {\r\n            this.load(json);\r\n        }\r\n\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    public lookupInLocalStorage(): boolean {\r\n        if (!this.options.autoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (!Util.isLocalStorageSupported()) {\r\n            return false;\r\n        }\r\n        let diagram = Util.getDiagramFromLocalStorage();\r\n        if (diagram && diagram.length > 0) {\r\n            if (confirm('Restore previous session?')) {\r\n                let jsonData: JSON = JSON.parse(diagram);\r\n                this.load(jsonData);\r\n                this.layout();\r\n                return true;\r\n            } else {\r\n                Util.saveToLocalStorage( null);\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public fitSizeOnNodes(): void {\r\n        let maxWidth: number = 0;\r\n        let maxHeight: number = 0;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            let nodePos = node.getPos();\r\n            let nodeSize = node.getSize();\r\n            let nodeWidestPosX = nodePos.x + nodeSize.x;\r\n            let nodeWidestPosY = nodePos.y + nodeSize.y;\r\n\r\n            if (nodeWidestPosX > maxWidth) {\r\n                maxWidth = nodeWidestPosX;\r\n            }\r\n\r\n            if (nodeWidestPosY > maxHeight) {\r\n                maxHeight = nodeWidestPosY;\r\n            }\r\n        }\r\n\r\n        this.root.setAttributeNS(null, 'width', '' + (maxWidth + 100));\r\n        this.root.setAttributeNS(null, 'height', '' + (maxHeight + 50));\r\n    }\r\n\r\n    public saveAs(typ: string) {\r\n        typ = typ.toLowerCase();\r\n\r\n        // shrink size of graph to minimum. only to show up nodes\r\n        const currentSize = this.getRootSize();\r\n        this.fitSizeOnNodes();\r\n\r\n        if (typ === 'svg') {\r\n            this.exportSvg();\r\n        } else if (typ === 'png') {\r\n            this.exportPng();\r\n        } else if (typ === 'html') {\r\n            this.exportHtml();\r\n\r\n        } else if (typ === 'pdf') {\r\n            this.exportPdf();\r\n            // } else if (typ === 'eps') {\r\n            // this.ExportEPS();\r\n        }\r\n        else if (typ === 'json') {\r\n            this.exportJson();\r\n        }\r\n\r\n        // set the size back to default\r\n        this.root.setAttributeNS(null, 'width', '' + currentSize.width);\r\n        this.root.setAttributeNS(null, 'height', '' + currentSize.height);\r\n    }\r\n\r\n    /**\r\n     * generates a blob file and makes it available for download.\r\n     * @param type type of file\r\n     * @param data raw data\r\n     * @param name name of download file\r\n     */\r\n    public save(type: string, data: any, name: string, context: string) {\r\n        if (window['java']) {\r\n            window['java'].export(type, data, name, context);\r\n            return;\r\n        }\r\n        let a = document.createElement('a');\r\n        a.href = window.URL.createObjectURL(new Blob([data], { type: context }));\r\n        a.download = name;\r\n        document.body.appendChild(a);\r\n        a.click();\r\n        document.body.removeChild(a);\r\n    }\r\n\r\n    /** Exports the diagram as svg. */\r\n    public exportSvg(): void {\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        this.save('svg', this.serializeXmlNode(wellFormatedSvgDom), 'class_diagram.svg', 'image/svg+xml');\r\n    }\r\n\r\n    /** Exports the diagram as html. */\r\n    public exportHtml(): void {\r\n        let htmlFacade = '<html><head><title>DiagramJS - Classdiagram</title></head><body>$content</body></html>';\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        let svgAsXml = this.serializeXmlNode(wellFormatedSvgDom);\r\n\r\n        let htmlResult = htmlFacade.replace('$content', svgAsXml);\r\n\r\n        this.save('html', htmlResult, 'class_diagram.htm', 'text/plain');\r\n    }\r\n\r\n    /** Exports the diagram as json. */\r\n    public exportJson(): void {\r\n        let type = 'text/plain';\r\n        let jsonObj = Util.toJson(this.$graphModel);\r\n        let data = JSON.stringify(jsonObj, null, '\\t');\r\n\r\n        this.save('json', data, 'class_diagram.json', type);\r\n    }\r\n\r\n    /** Exports the diagram as pdf. */\r\n    public exportPdf(): void {\r\n        if (!window['jsPDF']) {\r\n            console.log('jspdf n.a.');\r\n            return;\r\n        }\r\n        let type = 'image/svg+xml';\r\n        let converter, pdf = new window['jsPDF']('l', 'px', [this.$graphModel.getSize().x, this.$graphModel.getSize().y]);\r\n        converter = new SVGConverter(this.$view, pdf, {removeInvalid: false});\r\n        pdf.save('Download.pdf');\r\n/*        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let canvas, context, a, image = new Image();\r\n        let size = this.getRootSize();\r\n\r\n        // create the loaded img source into a canvas. to generate a picture. then place this picture in the pdf\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            let pdf = new window['jsPDF']();\r\n\r\n            pdf.addImage(canvas.toDataURL('image/jpeg'), 'jpeg', 15, 40, 180, 160);\r\n            pdf.save('class_diagram.pdf');\r\n\r\n        };\r\n\r\n        image.src = url;\r\n        */\r\n    }\r\n\r\n    public import(data: string): void {\r\n        let rootElement = this.$graphModel.$view;\r\n        while (rootElement.hasChildNodes()) {\r\n            rootElement.removeChild(rootElement.firstChild);\r\n        }\r\n\r\n        while (this.$view.hasChildNodes()) {\r\n            this.$view.removeChild(this.$view.firstChild);\r\n        }\r\n\r\n        this.clearModel();\r\n        let jsonData = JSON.parse(data);\r\n        this.load(jsonData);\r\n        this.layout();\r\n    }\r\n\r\n    public exportEPS(): void {\r\n          let converter, doc = new JSEPS({inverting: true});\r\n            converter = new SVGConverter(this.$view, doc, {removeInvalid: false});\r\n            this.save('eps', doc.getData(), 'diagram.eps', doc.getType());\r\n    }\r\n\r\n    /** Exports the diagram as png. */\r\n    public exportPng(): void {\r\n        let canvas, context, a, image = new Image();\r\n        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let typ = 'image/svg+xml';\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let size = this.getRootSize();\r\n\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            a = document.createElement('a');\r\n            a.download = 'class_diagram.png';\r\n            a.href = canvas.toDataURL('image/png');\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            document.body.removeChild(a);\r\n        };\r\n\r\n        image.src = url;\r\n\r\n    }\r\n\r\n    public getSvgWithStyleAttributes(): Node {\r\n        let oDOM = this.$graphModel.$view.cloneNode(true);\r\n        this.readElement(oDOM, this.$graphModel.$view);\r\n\r\n        return oDOM;\r\n    }\r\n\r\n    public serializeXmlNode(xmlNode: any) {\r\n        if (window['XMLSerializer'] !== undefined) {\r\n            return (new window['XMLSerializer']()).serializeToString(xmlNode);\r\n        }\r\n        if (xmlNode.xml !== undefined) {\r\n            return xmlNode.xml;\r\n        }\r\n        return xmlNode.outerHTML;\r\n    }\r\n\r\n    public getRootSize(): Size {\r\n        let width: number;\r\n        let height: number;\r\n        width = +this.root.getAttribute('width');\r\n        height = +this.root.getAttribute('height');\r\n\r\n        return { width: width, height: height };\r\n    }\r\n\r\n        // Graph.prototype.ExportEPS = function () {\r\n        //     var converter, doc = new svgConverter.jsEPS({inverting: true});\r\n        //     converter = new svgConverter(this.board, doc, {removeInvalid: false});\r\n        //     doc.save();\r\n        // };\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        this.$graphModel = new GraphModel();\r\n        this.$graphModel.init(this);\r\n        this.$graphModel.load(json);\r\n    }\r\n\r\n    public clearModel(): void {\r\n        this.$graphModel.removeAllElements();\r\n        this.clearSvgRoot();\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.layout();\r\n        return this;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        return;\r\n    }\r\n\r\n    public getNextFreePosition(): Point {\r\n\r\n        if (!this.$graphModel) {\r\n            return new Point(50, 50);\r\n        }\r\n\r\n        let point = new Point(0, 50);\r\n\r\n        let maxX = 0;\r\n        let minX = 9000;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            maxX = Math.max(maxX, node.getPos().x);\r\n            minX = Math.min(minX, node.getPos().x);\r\n        }\r\n\r\n        if (minX > 170) {\r\n            point.x = 10;\r\n        }\r\n        else {\r\n            point.x = maxX + 200;\r\n        }\r\n\r\n        return point;\r\n    }\r\n\r\n    public addElement(type: string, dontDraw?: boolean): boolean {\r\n        let success = this.$graphModel.addElement(type);\r\n        if (success === true) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return success;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues?: Object, layout?: boolean, dontDraw?: boolean): DiagramElement {\r\n        let element = this.$graphModel.addElementWithValues(type, optionalValues);\r\n        if (element && layout) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public layout(dontDraw?: boolean): Graph {\r\n        this.getLayout().layout(this, this.$graphModel);\r\n\r\n        if (dontDraw) {\r\n            return this;\r\n        }\r\n\r\n        this.draw();\r\n        return this;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTDRAGOVER, EventBus.ELEMENTDRAGLEAVE, EventBus.ELEMENTDROP];\r\n    }\r\n\r\n    public draw() {\r\n        this.clearSvgRoot();\r\n        let model = this.$graphModel;\r\n        let root = this.root;\r\n        let max: Point = new Point();\r\n        if (this.options) {\r\n            max.x = this.options.minWidth || 0;\r\n            max.y = this.options.minHeight || 0;\r\n        }\r\n\r\n        for (let node of model.nodes) {\r\n            let svg = node.getSVG();\r\n            EventBus.register(node, svg);\r\n            root.appendChild(svg);\r\n\r\n            let temp: number;\r\n            temp = node.getPos().x + node.getSize().x;\r\n            if (temp > max.x) {\r\n                max.x = temp;\r\n            }\r\n            temp = node.getPos().y + node.getSize().y;\r\n            if (temp > max.y) {\r\n                max.y = temp;\r\n            }\r\n\r\n        }\r\n        Util.setAttributeSize(this.root, max.x + 60, max.y + 40);\r\n\r\n        for (let edge of model.edges) {\r\n            let svg = edge.getSVG();\r\n            EventBus.register(edge, svg);\r\n            root.appendChild(svg);\r\n        }\r\n    }\r\n\r\n    public getNode(id: string) {\r\n        return this.$graphModel.getNodeById(id);\r\n    }\r\n\r\n    public drawElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let svg = element.getSVG();\r\n        this.root.appendChild(svg);\r\n\r\n        // actualize root width size, if neccessary\r\n        // get current width of root\r\n        let rootSize = this.getRootSize();\r\n        let newWidth = element.getPos().x + element.getSize().x + 40;\r\n        let newHeight = element.getPos().y + element.getSize().y;\r\n\r\n        if (rootSize.width < newWidth) {\r\n            this.root.setAttributeNS(null, 'width', '' + newWidth);\r\n        }\r\n\r\n        if (rootSize.height < newHeight) {\r\n            this.root.setAttributeNS(null, 'height', '' + newHeight);\r\n        }\r\n\r\n        // draw edge\r\n        if (element instanceof Association) {\r\n            let edge = <Association>element;\r\n            edge.redraw(edge.$sNode);\r\n            let srcSvg = element.$sNode.getAlreadyDisplayingSVG();\r\n            let targetSvg = element.$tNode.getAlreadyDisplayingSVG();\r\n\r\n            this.root.appendChild(srcSvg);\r\n            this.root.appendChild(targetSvg);\r\n        }\r\n\r\n        EventBus.register(element, svg);\r\n    }\r\n\r\n    public removeElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let alreadyDisplayingSvg = element.getAlreadyDisplayingSVG();\r\n        if (Util.isParentOfChild(this.root, alreadyDisplayingSvg)) {\r\n            this.root.removeChild(alreadyDisplayingSvg);\r\n        }\r\n    }\r\n\r\n    public generate(packageName: string, path?: string) {\r\n        this.$graphModel.package = packageName;\r\n        this.$graphModel.genPath = path;\r\n\r\n        let data, result = Util.toJson(this.$graphModel);\r\n        data = JSON.stringify(result, null, '\\t');\r\n        if (window['java'] && typeof window['java'].generate === 'function') {\r\n            window['java'].generate(data);\r\n        }\r\n    }\r\n// REFACTORING dd\r\n    private readElement(parent: any, origData: any): void {\r\n        let children = parent.childNodes;\r\n        let origChildDat = origData.childNodes;\r\n\r\n        for (let cd = 0; cd < children.length; cd++) {\r\n            let child = children[cd];\r\n\r\n            let tagName = child.tagName;\r\n            if (this.containerElements.indexOf(tagName) !== -1) {\r\n                this.readElement(child, origChildDat[cd]);\r\n            } else if (tagName in this.relevantStyles) {\r\n                let styleDef = window.getComputedStyle(origChildDat[cd]);\r\n\r\n                let styleString = '';\r\n                for (let st = 0; st < this.relevantStyles[tagName].length; st++) {\r\n                    styleString += this.relevantStyles[tagName][st] + ':' + styleDef.getPropertyValue(this.relevantStyles[tagName][st]) + '; ';\r\n                }\r\n\r\n                child.setAttribute('style', styleString);\r\n            }\r\n        }\r\n    }\r\n\r\n    private createPattern(): Element {\r\n        const defs = Util.createShape({ tag: 'defs' });\r\n        const pattern = Util.createShape({\r\n            tag: 'pattern',\r\n            id: 'raster',\r\n            patternUnits: 'userSpaceOnUse',\r\n            width: 40,\r\n            height: 40\r\n        });\r\n        const path = 'M0 4 L0 0 L4 0 M36 0 L40 0 L40 4 M40 36 L40 40 L36 40 M4 40 L0 40 L0 36';\r\n        const cross = Util.createShape({\r\n            tag: 'path',\r\n            d: path,\r\n            stroke: '#DDD',\r\n            'stroke-width': 1,\r\n            fill: 'none'\r\n        });\r\n\r\n        const rect = Util.createShape({\r\n            tag: 'rect',\r\n            x: 0,\r\n            y: 0,\r\n            width: 40,\r\n            height: 40,\r\n            fill: 'none'\r\n        });\r\n        pattern.appendChild(rect);\r\n        pattern.appendChild(cross);\r\n        defs.appendChild(pattern);\r\n        return defs;\r\n    }\r\n\r\n    private clearSvgRoot() {\r\n        const root = this.root;\r\n        this.$graphModel.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n        while (root.firstChild) {\r\n            root.removeChild(root.firstChild);\r\n        }\r\n\r\n        root.appendChild(this.createPattern());\r\n        let fillValue = 'none';\r\n        if (this.options.raster) {\r\n            fillValue = 'url(#raster)';\r\n        }\r\n        let background = Util.createShape({\r\n            tag: 'rect',\r\n            id: 'background',\r\n            width: 5000,\r\n            height: 5000,\r\n            x: 0,\r\n            y: 0,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: fillValue\r\n        });\r\n        root.appendChild(background);\r\n\r\n        // delete inline Edit, if exists\r\n        let inlineEdit = document.getElementById('inlineEdit');\r\n        if (inlineEdit && document.body.contains(inlineEdit)) {\r\n            document.body.removeChild(inlineEdit);\r\n        }\r\n    }\r\n\r\n    private getLayout(): Layout {\r\n        if (this.currentlayout) {\r\n            return this.currentlayout;\r\n        }\r\n\r\n        let layout = this.options.layout || '';\r\n        if (this.layoutFactory[layout]) {\r\n            this.currentlayout = new this.layoutFactory[layout]();\r\n        } else {\r\n            this.currentlayout = new layouts.DagreLayout();\r\n        }\r\n\r\n        return this.currentlayout;\r\n    }\r\n\r\n    private initFactories() {\r\n\r\n        let noder = nodes;\r\n        this.nodeFactory = {};\r\n        for (let id in noder) {\r\n            if (noder.hasOwnProperty(id) === true) {\r\n                this.nodeFactory[id] = noder[id];\r\n            }\r\n        }\r\n\r\n        let edger = edges;\r\n        this.edgeFactory = {};\r\n        for (let id in edger) {\r\n            if (edger.hasOwnProperty(id) === true) {\r\n                this.edgeFactory[id] = edger[id];\r\n            }\r\n        }\r\n\r\n        let layouter = layouts;\r\n        this.layoutFactory = {};\r\n        for (let id in layouter) {\r\n            if (layouter.hasOwnProperty(id) === true) {\r\n                this.layoutFactory[id] = layouter[id];\r\n            }\r\n        }\r\n    }\r\n\r\n    private initCanvas() {\r\n        if (this.options.canvas) {\r\n            this.$view = document.getElementById(this.options.canvas);\r\n        }\r\n        if (!this.$view) {\r\n            this.$view = document.createElement('div');\r\n            this.$view.setAttribute('class', 'diagram');\r\n            document.body.appendChild(this.$view);\r\n        }\r\n    }\r\n\r\n    private initFeatures(features: any) {\r\n\r\n        if (features) {\r\n            if (features.newedge) {\r\n                EventBus.subscribe(new NewEdge(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            this.importFile = new ImportFile(this);\r\n            if (features.import) {\r\n                EventBus.subscribe(this.importFile, 'dragover', 'dragleave', 'drop');\r\n            }\r\n            if (features.zoom) {\r\n                let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n                EventBus.subscribe(new Zoom(this), mousewheel);\r\n            }\r\n            if (features.drag) {\r\n                EventBus.subscribe(new Drag(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            if (features.select) {\r\n                EventBus.subscribe(new Select(this), 'click', 'drag');\r\n            }\r\n            if (features.palette) {\r\n                new Palette(this).show();\r\n            }\r\n            if (features.toolbar) {\r\n                new Toolbar(this).show();\r\n            }\r\n            if (features.properties) {\r\n                let propertyPanel = new PanelGroup(this);\r\n                // let dispatcher = new PropertiesDispatcher(this);\r\n                EventBus.subscribe(propertyPanel, 'dblclick', 'click', EventBus.RELOADPROPERTIES);\r\n                propertyPanel.show();\r\n            }\r\n            if (features.addnode) {\r\n                EventBus.subscribe(new AddNode(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n        }\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport {DiagramElement, Point} from './BaseElements';\r\nimport {Association} from './edges';\r\nimport {Node} from './nodes';\r\nimport {Control} from '../Control';\r\nimport {Util} from '../util';\r\nimport {EventBus} from '../EventBus';\r\n\r\nexport class GraphModel extends DiagramElement {\r\n    nodes: Node[] = [];\r\n    edges: Association[] = [];\r\n    package: string;\r\n    genPath: string;\r\n    $isLoading: boolean;\r\n\r\n    public load(data?: any) {\r\n\r\n        this.$isLoading = true;\r\n        data = data || {};\r\n        this.property = data.type || data.property || 'classdiagram';\r\n        this.id = 'RootElement';\r\n        if (data.nodes) {\r\n            for (let node of data.nodes) {\r\n                this.addNode(node);\r\n            }\r\n        }\r\n        if (data.edges) {\r\n            for (let edge of data.edges) {\r\n                this.addEdge(edge);\r\n            }\r\n        }\r\n\r\n        this.$isLoading = false;\r\n    }\r\n\r\n    public getNodeByPosition(x: number, y: number): Node {\r\n        for (let node of this.nodes) {\r\n            let posOfNode: Point = (<Node>node).getPos();\r\n            let sizeOfNode: Point = (<Node>node).getSize();\r\n\r\n            if ((posOfNode.x <= x && (posOfNode.x + sizeOfNode.x) >= x)\r\n                && (posOfNode.y <= y && (posOfNode.y + sizeOfNode.y) >= y)) {\r\n                return node;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.initCanvas();\r\n        return this;\r\n    }\r\n\r\n    public addElement(type: string): boolean {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n        if (element) {\r\n            Util.saveToLocalStorage(this);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues: Object): DiagramElement {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n\r\n        // position\r\n        if (optionalValues) {\r\n            if (optionalValues.hasOwnProperty('x') && optionalValues.hasOwnProperty('y')) {\r\n                let x = optionalValues['x'];\r\n                let y = optionalValues['y'];\r\n                element.withPos(x, y);\r\n            }\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return element;\r\n    }\r\n\r\n    public removeAllElements(): void {\r\n\r\n        let nodesLength = this.nodes.length;\r\n        for (let i = 0; i < nodesLength; i++) {\r\n            this.removeElement(this.nodes[0].id);\r\n        }\r\n\r\n        this.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n    }\r\n\r\n    public removeElement(id: string): boolean {\r\n\r\n        let element = this.getDiagramElementById(id);\r\n        if (!element) {\r\n            return false;\r\n        }\r\n\r\n        (<Graph>this.$owner).removeElement(element);\r\n\r\n        if (element instanceof Node) {\r\n\r\n            let idxOfNode = this.nodes.indexOf(element);\r\n            if (idxOfNode > -1) {\r\n                this.nodes.splice(idxOfNode, 1);\r\n            }\r\n\r\n            while (element.$edges.length > 0) {\r\n                this.removeElement(element.$edges[0].id);\r\n            }\r\n\r\n            element.$edges = [];\r\n        }\r\n        else if (element instanceof Association) {\r\n\r\n            let idxOfEdge = this.edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                this.edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from source\r\n            idxOfEdge = element.$sNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$sNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from target\r\n            idxOfEdge = element.$tNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$tNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return true;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        const size = 10;\r\n        const path = `M${-size} 0 L${+size} 0 M0 ${-size} L0 ${+size}`;\r\n\r\n        const attr = {\r\n            tag: 'path',\r\n            id: 'origin',\r\n            d: path,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: 'none'\r\n        };\r\n        let shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: 0 - size,\r\n            y: 0 - size / 1.5,\r\n            'text-anchor': 'end',\r\n            'font-family': 'Verdana',\r\n            'font-size': '9',\r\n            fill: '#999'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = '(0, 0)';\r\n\r\n        let group = this.createShape({tag: 'g'});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEUP, EventBus.ELEMENTMOUSELEAVE, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTMOUSEWHEEL, EventBus.ELEMENTCLICK, EventBus.ELEMENTDRAG];\r\n    }\r\n\r\n    public getNewId(prefix?: string): string {\r\n        let id = (prefix ? prefix.toLowerCase() + '-' : '') + Math.floor(Math.random() * 100000);\r\n        return id;\r\n    }\r\n\r\n    public getEdgeById(id: string): Association {\r\n        for (let edge of this.edges) {\r\n            if (edge.id === id) {\r\n                return edge;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    public getDiagramElementById(id: string): DiagramElement {\r\n\r\n        return this.getNodeById(id) || this.getEdgeById(id);\r\n    }\r\n\r\n    /**\r\n     * Add an edge with data in json file. Optional you can say, that the edge should have\r\n     * the points of source node and target node.\r\n     * @param edge information about edge in json\r\n     * @param withPosOfNodes optional. set points to line of source and target node\r\n     */\r\n    public addEdge(edge: any, withPosOfNodes?: boolean): Association {\r\n\r\n        // lookup in factoryedges and check if the edge type realy exists\r\n        if (edge && edge.type) {\r\n            const graph = (<Graph>this.$owner);\r\n            let typeExists = false;\r\n            for (let edgeType in graph.edgeFactory) {\r\n                if (edgeType === edge.type) {\r\n                    typeExists = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!typeExists) {\r\n                edge.type = 'Association';\r\n            }\r\n        }\r\n\r\n        let type = edge.type || 'Association';\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n\r\n        let newEdge = <Association>this.createElement(type, id, edge);\r\n        newEdge.type = type;\r\n\r\n        let source: Node;\r\n        let sourceAsString: string = edge.source.id || edge.source;\r\n        if (sourceAsString) {\r\n            source = this.getNodeById(sourceAsString);\r\n            if (!source) {\r\n                let nodeID = edge.source;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                source = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                source.init(this);\r\n            }\r\n        }\r\n\r\n        let target: Node;\r\n        let targetAsString: string = edge.target.id || edge.target;\r\n        if (targetAsString) {\r\n            target = this.getNodeById(targetAsString);\r\n            if (!target) {\r\n                let nodeID = edge.target;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                target = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                target.init(this);\r\n            }\r\n        }\r\n\r\n        newEdge.withItem(source, target);\r\n\r\n        if (withPosOfNodes) {\r\n            let srcX = source.getPos().x + (source.getSize().x / 2);\r\n            let srcY = source.getPos().y + (source.getSize().y / 2);\r\n\r\n            let targetX = target.getPos().x + (target.getSize().x / 2);\r\n            let targetY = target.getPos().y + (target.getSize().y / 2);\r\n\r\n            newEdge.addPoint(srcX, srcY);\r\n            newEdge.addPoint(targetX, targetY);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public createElement(type: string, id: string, data: Object): DiagramElement {\r\n        const graph = <Graph>this.$owner;\r\n        let element: DiagramElement;\r\n        if (graph.nodeFactory[type]) {\r\n            element = new graph.nodeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.nodes.push(<Node>element);\r\n        }\r\n        if (graph.edgeFactory[type]) {\r\n            element = new graph.edgeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.edges.push(<Association>element);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public getNodeById(id: string): Node {\r\n        for (let node of this.nodes) {\r\n            if (node.id === id) {\r\n                return node;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    private initCanvas() {\r\n        const graph = <Graph>this.$owner;\r\n        graph.canvasSize = {width: graph.$view.clientWidth, height: graph.$view.clientHeight};\r\n        graph.root = Util.createShape({\r\n            tag: 'svg',\r\n            id: 'root',\r\n            width: graph.canvasSize.width,\r\n            height: graph.canvasSize.height\r\n            // FIXME,viewBox: `${this.$graph.options.origin.x * -1} ${this.$graph.options.origin.y * -1} ${this.$graph.canvasSize.width} ${this.$graph.canvasSize.height}`\r\n        });\r\n        this.$view = graph.root;\r\n        graph.$view.appendChild(graph.root);\r\n\r\n        let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    private addNode(node: Node): Node {\r\n        let type = node['type'] || node.property || 'Node';\r\n        type = Util.toPascalCase(type);\r\n        let id = node['id'] || node['name'] || this.getNewId(type);\r\n\r\n        return <Node>this.createElement(type, id, node);\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction } from './index';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\n\r\nexport abstract class Aggregate extends Association {\r\n\r\n    protected $diamond: Element;\r\n\r\n    public getSVG(): Element {\r\n\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled diamond\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n        };\r\n\r\n        this.$diamond = this.createShape(attr);\r\n\r\n        group.appendChild(this.$diamond);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint: Point = this.$points[0];\r\n        let direction: Direction = Direction.Down;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if (this.$sNode.id === startNode.id || this.$points.length == 2) {\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$diamond.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint: Point, direction: Direction): string {\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                path = `M${startX} ${startY} L${startX + 6} ${startY + 10} L${startX} ${startY + 20} L${startX - 6} ${startY + 10} Z`;\r\n                startPoint.y = startPoint.y+20;\r\n                break;\r\n            case Direction.Right:\r\n                path = `M${startX} ${startY} L${startX - 10} ${startY + 6} L${startX - 20} ${startY} L${startX - 10} ${startY - 6} Z`;\r\n                startPoint.x = startPoint.x-20;\r\n                break;\r\n            case Direction.Left:\r\n                path = `M${startX} ${startY} L${startX + 10} ${startY - 6} L${startX + 20} ${startY} L${startX + 10} ${startY + 6} Z`;\r\n                startPoint.x = startPoint.x+20;\r\n                break;\r\n            case Direction.Down:\r\n                path = `M${startX} ${startY} L${startX - 6} ${startY - 10} L${startX} ${startY - 20} L${startX + 6} ${startY - 10} Z`;\r\n                startPoint.y = startPoint.y-20;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Aggregation extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'white');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { DiagramElement, Line, Point } from '../BaseElements';\r\nimport { Node } from '../nodes';\r\nimport { InfoText } from '../nodes/InfoText';\r\nimport { Util } from '../../util';\r\nimport { EventBus } from '../../EventBus';\r\nimport * as edges from '../edges';\r\nimport { Graph } from '../Graph';\r\n\r\nexport const enum Direction {\r\n    Up, Down, Left, Right\r\n}\r\n\r\nexport class Association extends DiagramElement {\r\n    public source: string;\r\n    public target: string;\r\n    public type: string;\r\n    public $sNode: Node;\r\n    public $tNode: Node;\r\n    public lineStyle: string;\r\n    public $points: Point[] = [];\r\n    public $pathSvg: Element;\r\n    public $pathWideSvg: Element;\r\n    public info: InfoText;\r\n    public sourceInfo: InfoText;\r\n    public targetInfo: InfoText;\r\n    $m: number;\r\n    $n: number;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super();\r\n\r\n        this.withData(data);\r\n    }\r\n\r\n    public withData(data: JSON | string | Object | any): Association {\r\n\r\n        if (!data) {\r\n            return this;\r\n        }\r\n        let srcInfo;\r\n        let trgInfo;\r\n\r\n        if (data.source && typeof data.source !== 'string') {\r\n            srcInfo = data.source;\r\n        }\r\n        else if (data.sourceInfo && typeof data.sourceInfo !== 'string') {\r\n            srcInfo = data.sourceInfo;\r\n        }\r\n\r\n        if (srcInfo) {\r\n            this.sourceInfo = new InfoText(srcInfo);\r\n            this.sourceInfo.$owner = this;\r\n        }\r\n\r\n        if (data.target && typeof data.target !== 'string') {\r\n            trgInfo = data.target;\r\n        }\r\n        else if (data.targetInfo && typeof data.targetInfo !== 'string') {\r\n            trgInfo = data.targetInfo;\r\n        }\r\n\r\n        if (trgInfo) {\r\n            this.targetInfo = new InfoText(trgInfo);\r\n            this.targetInfo.$owner = this;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    public updateSrcCardinality(cardinality: string): void {\r\n        this.sourceInfo = this.updateCardinality(this.$sNode, this.sourceInfo, cardinality);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetCardinality(cardinality: string): void {\r\n        this.targetInfo = this.updateCardinality(this.$tNode, this.targetInfo, cardinality);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateSrcProperty(property: string): void {\r\n        this.sourceInfo = this.updateProperty(this.$sNode, this.sourceInfo, property);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetProperty(property: string): void {\r\n        this.targetInfo = this.updateProperty(this.$tNode, this.targetInfo, property);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public withItem(source: Node, target: Node): Association {\r\n        source.$edges.push(this);\r\n        target.$edges.push(this);\r\n        this.$sNode = source;\r\n        this.$tNode = target;\r\n        this.source = source.id;\r\n        this.target = target.id;\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let group = Util.createShape({ tag: 'g', id: this.id, class: 'SVGEdge' });\r\n\r\n        let path: string = this.getPath();\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'none'\r\n        };\r\n        let pathLine = this.createShape(attr);\r\n\r\n        //attr['style'] = 'stroke-width:20;opacity:0;width:20;height:20';\r\n        let extendedPathLine = Util.createShape(attr);\r\n\r\n        group.appendChild(extendedPathLine);\r\n        group.appendChild(pathLine);\r\n\r\n        if (this.sourceInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.sourceInfo.getSVG());\r\n        }\r\n        if (this.targetInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.targetInfo.getSVG());\r\n        }\r\n\r\n        this.$pathWideSvg = extendedPathLine;\r\n        this.$pathSvg = pathLine;\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.EDITOR, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    public convertEdge(type: string, newId: string, redraw?: boolean): Association {\r\n        if (!edges[type]) {\r\n            return this;\r\n        }\r\n\r\n        let newEdge: Association = new edges[type]();\r\n        newEdge.withItem(this.$sNode, this.$tNode);\r\n        newEdge.id = newId;\r\n        newEdge.type = type;\r\n        newEdge.lineStyle = this.lineStyle;\r\n        newEdge.$owner = this.$owner;\r\n\r\n        if (this.sourceInfo) {\r\n            newEdge.sourceInfo = new InfoText({ property: this.sourceInfo.property, cardinality: this.sourceInfo.cardinality });\r\n            newEdge.sourceInfo.$owner = newEdge;\r\n        }\r\n\r\n        if (this.targetInfo) {\r\n            newEdge.targetInfo = new InfoText({ property: this.targetInfo.property, cardinality: this.targetInfo.cardinality });\r\n            newEdge.targetInfo.$owner = newEdge;\r\n        }\r\n\r\n        this.$points.forEach(point => {\r\n            newEdge.addPoint(point.x, point.y);\r\n        });\r\n\r\n        let graph = <Graph>this.getRoot();\r\n        if (!graph) {\r\n            return this;\r\n        }\r\n\r\n        // update model. insert the edge exact on the same index, like the old edge\r\n        let idx = graph.$graphModel.edges.indexOf(this);\r\n        graph.$graphModel.removeElement(this.id);\r\n        if (idx > -1) {\r\n            graph.$graphModel.edges.splice(idx, 0, newEdge);\r\n        }\r\n        else {\r\n            graph.$graphModel.edges.push(newEdge);\r\n        }\r\n\r\n        if (!redraw) {\r\n            return newEdge;\r\n        }\r\n\r\n        let svgRoot: Element;\r\n        if (graph) {\r\n            svgRoot = graph.root;\r\n        }\r\n        else {\r\n            svgRoot = document.getElementById('root');\r\n        }\r\n        let newEdgeSvg = newEdge.getSVG();\r\n\r\n        // update graph\r\n        graph.removeElement(this);\r\n        svgRoot.appendChild(newEdgeSvg);\r\n\r\n        // redraw the edge from both sides to get the correct display\r\n        // if the type is edge, so the path can be redraw.\r\n        // if not, so the inherited class redraw the path with his own logic\r\n\r\n        let dontDrawPath: boolean = (type !== 'Edge');\r\n        newEdge.redraw(newEdge.$sNode, dontDrawPath);\r\n        newEdge.redraw(newEdge.$tNode, dontDrawPath);\r\n\r\n        EventBus.register(newEdge, newEdgeSvg);\r\n\r\n        this.sourceInfo = undefined;\r\n        this.targetInfo = undefined;\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n        // redraw the first point\r\n        // check which point is the near to startnode\r\n        let endPoint: Point;\r\n        let recalcPoint: Point;\r\n        let endPointIdx: number;\r\n\r\n        if (this.$sNode.id === startNode.id) {\r\n            recalcPoint = this.$points[0];\r\n            endPointIdx = 1;\r\n        } else if (this.$tNode.id === startNode.id) {\r\n            recalcPoint = this.$points[this.$points.length - 1];\r\n            endPointIdx = this.$points.length - 2;\r\n        }\r\n\r\n        endPoint = this.$points[endPointIdx];\r\n\r\n        // calculate and set new position of point to redraw\r\n        this.calcIntersection(startNode, recalcPoint, endPoint);\r\n\r\n        // remove the 2nd point next to startnode, if the node was dragged upper the point\r\n        if (this.$points.length > 2 && this.$tNode.id === startNode.id && endPoint.y > (startNode.getPos().y + (startNode.getSize().y / 2))) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$tNode.id === startNode.id && this.$points.length === 2) {\r\n            this.calcIntersection(this.$sNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (this.$points.length > 2 && this.$sNode.id === startNode.id && (startNode.getPos().y + (startNode.getSize().y / 2) > endPoint.y)) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$sNode.id === startNode.id && this.$points.length === 2) {\r\n\r\n            this.calcIntersection(this.$tNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (!dontDrawPoints) {\r\n            this.redrawPointsAndInfo();\r\n        }\r\n    }\r\n\r\n    public getPath(): string {\r\n\r\n        if (this.$points.length === 0) {\r\n            return '';\r\n        }\r\n\r\n        let path: string = 'M';\r\n        for (let i = 0; i < this.$points.length; i++) {\r\n            let point: Point = this.$points[i];\r\n            if (i > 0) {\r\n                path += 'L';\r\n            }\r\n            path += Math.floor(point.x) + ' ' + Math.floor(point.y) + ' ';\r\n        }\r\n\r\n        return path;\r\n    }\r\n    public calcInfoPosNew(infoTxt: InfoText, node: Node): Point {\r\n\r\n        if (!infoTxt || !node) {\r\n            return null;\r\n        }\r\n\r\n        // 1. step: get direction\r\n        let startPoint: Point;\r\n        let nextToStartPoint: Point;\r\n        if (this.$sNode.id === node.id) {\r\n            startPoint = this.$points[0];\r\n            nextToStartPoint = this.$points[1];\r\n        }\r\n        else if (this.$tNode.id === node.id) {\r\n            startPoint = this.$points[this.$points.length - 1];\r\n            nextToStartPoint = this.$points[this.$points.length - 2];\r\n        }\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(node, startPoint);\r\n\r\n        let x: number;\r\n        let y: number;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                break;\r\n            case Direction.Right:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x - (infoTxt.getSize().x) - 5;\r\n                break;\r\n            case Direction.Left:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x + 5;\r\n                break;\r\n            case Direction.Down:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        // assign calculated position to infotext\r\n        return new Point(x, y);\r\n    }\r\n\r\n    public clearPoints(): any {\r\n        this.$points = [];\r\n        this.$points = [];\r\n    }\r\n\r\n    public addPoint(x: number, y: number): Point[] {\r\n        this.$points.push(new Point(x, y));\r\n\r\n        return this.$points;\r\n    }\r\n\r\n    protected redrawPointsAndInfo(): void {\r\n        // redraw the edge with the new position\r\n        let path: string = this.getPath();\r\n        this.$pathSvg.setAttributeNS(null, 'd', path);\r\n        this.$pathWideSvg.setAttributeNS(null, 'd', path);\r\n\r\n        this.redrawSourceInfo();\r\n        this.redrawTargetInfo();\r\n    }\r\n\r\n    protected redrawSourceInfo() {\r\n        if (this.sourceInfo) {\r\n            let newPosOfSrc = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.redrawFromEdge(newPosOfSrc);\r\n        }\r\n    }\r\n\r\n    protected redrawTargetInfo() {\r\n        if (this.targetInfo) {\r\n            let newPosOfTarget = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.redrawFromEdge(newPosOfTarget);\r\n        }\r\n    }\r\n\r\n    protected getDirectionOfPointToNode(node: Node, pointNearNode: Point): Direction {\r\n        /*\r\n            Example to calculate the direction of nearest point to Node\r\n\r\n            node\r\n         x1_ _ _ _\r\n          |       |\r\n          |       |. pointNearNode\r\n          |       |\r\n          |_ _ _ x2\r\n\r\n          the calculation would return Direction.Left\r\n        */\r\n\r\n        let x1: Point = node.getPos();\r\n        let x2: Point = new Point((x1.x + node.getSize().x), (x1.y + node.getSize().y));\r\n        let direction: Direction = Direction.Down;\r\n\r\n        if (x1.y >= pointNearNode.y) {\r\n            direction = Direction.Down;\r\n        }\r\n        if (x2.y <= pointNearNode.y) {\r\n            direction = Direction.Up;\r\n        }\r\n        if (x1.x >= pointNearNode.x) {\r\n            direction = Direction.Right;\r\n        }\r\n        if (x2.x <= pointNearNode.x) {\r\n            direction = Direction.Left;\r\n        }\r\n\r\n        return direction;\r\n    }\r\n\r\n    private updateCardinality(node: Node, infoText: InfoText, cardinality: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'cardinality': cardinality });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.cardinality = cardinality;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateCardinality(cardinality);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private updateProperty(node: Node, infoText: InfoText, property: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'property': property });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.property = property;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateProperty(property);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private calcIntersection(startNode: Node, recalcPoint: Point, endPoint: Point): Point {\r\n\r\n        // https://www.mathelounge.de/21534/schnittpunkt-einer-linie-mit-den-randern-eines-rechtecks\r\n        let h = startNode.getSize().y;\r\n        let w = startNode.getSize().x;\r\n\r\n        let x1: number = startNode.getPos().x + (w / 2);\r\n        let y1: number = startNode.getPos().y + (h / 2);\r\n\r\n        let x2: number = endPoint.x;\r\n        let y2: number = endPoint.y;\r\n\r\n        let newX: number = recalcPoint.x;\r\n        let newY: number = recalcPoint.y;\r\n\r\n        if (x2 > x1) {\r\n            newX = x1 + (w / 2);\r\n        }\r\n        else if (x2 < x1) {\r\n            newX = x1 - (w / 2);\r\n        }\r\n        else {\r\n            newX = x1;\r\n        }\r\n\r\n        if ((x2 - x1) !== 0) {\r\n            newY = ((y2 - y1) / (x2 - x1) * (newX - x1)) + y1;\r\n        }\r\n        else {\r\n            if (y1 > y2) {\r\n                newY = startNode.getPos().y;\r\n            }\r\n            else {\r\n                newY = startNode.getPos().y + h;\r\n            }\r\n        }\r\n\r\n        // if the statement is not true, so the intersection is at the horizontal line\r\n        if (!((y1 - (h / 2) <= newY) && newY <= y1 + (h / 2))) {\r\n\r\n            if (y2 > y1) {\r\n                newY = y1 + (h / 2);\r\n            }\r\n            else {\r\n                newY = y1 - (h / 2);\r\n            }\r\n\r\n            if ((x2 - x1) !== 0) {\r\n                let tmp = ((y2 - y1) / (x2 - x1));\r\n                newX = (newY + (tmp * x1) - y1) / tmp;\r\n            }\r\n            else {\r\n                newX = x1;\r\n            }\r\n        }\r\n\r\n        recalcPoint.x = Math.ceil(newX);\r\n        recalcPoint.y = Math.ceil(newY);\r\n\r\n        return null;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Composition extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'black');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { Association } from './Association';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\nimport { Direction } from '../index';\r\n\r\nexport class Generalisation extends Association {\r\n\r\n    public $TARGET_ELEMENT_HEIGHT : number = 12;\r\n    protected $targetElement: Element;\r\n\r\n    public getSVG(): Element {\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction : Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled arrow\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'white'\r\n          };\r\n\r\n        this.$targetElement = this.createShape(attr);\r\n\r\n        group.appendChild(this.$targetElement);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean) : void {\r\n\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint : Point = this.$points[0];\r\n        let direction : Direction = Direction.Up;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if(this.$sNode.id === startNode.id || this.$points.length == 2){\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$targetElement.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint : Point, direction : Direction) : string{\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch(direction){\r\n            case Direction.Up:\r\n            path = `M${startX} ${startY+3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y+12;\r\n            break;\r\n            case Direction.Right:\r\n            path = `M${startX-3} ${startY} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x-12;\r\n            break;\r\n            case Direction.Left:\r\n            path = `M${startX+3} ${startY} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x+12;\r\n            break;\r\n            case Direction.Down:\r\n            path = `M${startX} ${startY-3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y-12;\r\n            break;\r\n            default :\r\n            break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n\r\n}\r\n","import { Generalisation } from './Generalisation';\r\n\r\nexport class Implements extends Generalisation {\r\n\r\n    public getSVG(): Element {\r\n        let group = super.getSVG();\r\n\r\n        this.$pathSvg.setAttributeNS(null, 'stroke-dasharray', '3, 3');\r\n\r\n        return group;\r\n    }\r\n}\r\n","export * from './Association';\r\nexport * from './Aggregate';\r\nexport * from './Aggregation';\r\nexport * from './Composition';\r\nexport * from './Generalisation';\r\nexport * from './Implements';","export * from './edges';\r\nexport * from './nodes';\r\nexport * from './BaseElements';\r\nexport * from './Graph';\r\nexport * from './Model';\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Attribute extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 28.06.2017.\r\n */\r\nimport {Control} from \"../../Control\";\r\n\r\nexport class AutoComplete extends Control {\r\n    private $inputField:HTMLInputElement;\r\n    private $dataList:HTMLDataListElement;\r\n    private $selected:HTMLSelectElement;\r\n    private $items:HTMLDivElement;\r\n    private isMultiple:boolean;\r\n\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        let div:HTMLDivElement = document.createElement('div');\r\n        this.$view = div;\r\n        this.$inputField = document.createElement('input');\r\n        this.$dataList = document.createElement(\"datalist\");\r\n        this.$dataList.id = \"data_\"+this.id;\r\n        this.$inputField.setAttribute(\"list\", \"data_\"+this.id);\r\n        if(data[\"value\"]) {\r\n            let values = data[\"value\"];\r\n            this.isMultiple = data[\"multiple\"] != null;\r\n            let option:HTMLOptionElement;\r\n            if(this.isMultiple) {\r\n                this.$selected = document.createElement(\"select\");\r\n                this.$selected.className = \"hide\";\r\n                this.$selected.multiple = true;\r\n\r\n                this.$selected.id = this.id;\r\n                this.$items = document.createElement(\"div\");\r\n                this.$items.className = \"selectedList\";\r\n                div.appendChild(this.$items);\r\n                this.$inputField.className = \"selectedInput\";\r\n                div.appendChild(this.$selected);\r\n                this.$view[\"style\"].setProperty(\"float\", \"left\");\r\n                let that = this;\r\n                this.$inputField.oninput = function(){that.onChange();}\r\n            } else {\r\n                this.$inputField.id = this.id;\r\n            }\r\n            for (let attr in values) {\r\n                if (!values.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                option = document.createElement(\"option\");\r\n                option.value = values[attr];\r\n                this.$dataList.appendChild(option);\r\n                if(this.isMultiple) {\r\n                    option = document.createElement(\"option\");\r\n                    option.value = values[attr];\r\n                    option.innerHTML = values[attr];\r\n                    this.$selected.appendChild(option);\r\n                }\r\n        }\r\n\r\n            div.appendChild(this.$inputField);\r\n            div.appendChild(this.$dataList);\r\n        }\r\n\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n            if(this.isMultiple) {\r\n                div.appendChild(this.$selected);\r\n            }\r\n        }\r\n\r\n        parent.appendChild(this);\r\n    }\r\n\r\n    public onChange() : void {\r\n        let textValue:string = this.$inputField.value;\r\n        if(textValue.length<1) {\r\n            return;\r\n        }\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == textValue) {\r\n                if(item.selected == false) {\r\n                    item.selected = true;\r\n                    item.defaultSelected = true;\r\n                    let test = document.createElement(\"li\");\r\n                    let that = this;\r\n                    test.onclick = function() {that.onDelete(item.value, test);};\r\n                    test.className = \"selectedItem\";\r\n                    test.innerHTML = item.value;\r\n                    this.$items.appendChild(test);\r\n                    this.$inputField.value = \"\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n    public onDelete(value:string, selectedItem:HTMLLIElement) : void {\r\n        this.$items.removeChild(selectedItem);\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == value ) {\r\n                if(item.selected) {\r\n                    item.selected = false;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","import {Control} from '../../Control';\r\n\r\nexport class BR extends Control {\r\n    public load(json: JSON): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('br');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            this.$view.setAttribute(attr, data[attr]);\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\nexport class Button extends Control {\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        this.$view = document.createElement('button');\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\nimport { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\nimport { Size } from '../index';\r\nimport ClazzProperty from './ClazzProperty';\r\nimport {SymbolLibary} from './Symbol';\r\nimport {StereoType} from './StereoType';\r\nimport {GraphListener} from '../../handlers/GraphListener';\r\n\r\nexport class Class extends Node {\r\n    public attributes: Attribute[] = [];\r\n    public methods: Method[] = [];\r\n    public modifier: string;\r\n    public stereoType: string;\r\n\r\n    protected $attrHeight = 25;\r\n    protected $attrFontSize = 12;\r\n    protected $labelView: Element;\r\n\r\n    constructor(json: JSON | string | Object | any) {\r\n        super(json);\r\n        return this;\r\n    }\r\n\r\n    public load(json?: any) {\r\n        if (!json) {\r\n            json = {};\r\n        }\r\n        let y = this.$labelHeight;\r\n        let labelObj = json.name || json.id || ('New ' + this.property);\r\n\r\n        let width: number = 150;\r\n        width = Math.max(width, Util.sizeOf(labelObj).width + 60);\r\n\r\n        if (json['attributes']) {\r\n            for (let attr of json['attributes']) {\r\n\r\n                let attrObj = new Attribute(attr);\r\n                attrObj.$owner = this;\r\n                this.attributes.push(attrObj);\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(attrObj.toString()).width);\r\n                let listener = new GraphListener(attrObj);\r\n                attrObj.$data.addListener(listener);\r\n            }\r\n        }\r\n        if (json['stereotype']) {\r\n            this.stereoType = json['stereotype'];\r\n        }\r\n        if (json['methods']) {\r\n            for (let method of json['methods']) {\r\n\r\n                let methodObj = new Method(method);\r\n                methodObj.$owner = this;\r\n                this.methods.push(methodObj);\r\n\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(methodObj.toString()).width);\r\n            }\r\n            y += this.$attrHeight;\r\n        }\r\n        this.withSize(width, y);\r\n    }\r\n\r\n    public getAttributes(): Attribute[] {\r\n        return this.attributes;\r\n    }\r\n\r\n    public getMethods(): Method[] {\r\n        return this.methods;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        let icon = SymbolLibary.draw({type: 'Class', property: 'HTML', width: '50', height: '50', transform: 'translate(-26,-21)'});\r\n        return icon;\r\n        // let group = this.createShape(\r\n//    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n//    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos: Point = this.getPos();\r\n        const size: Point = this.getSize();\r\n\r\n        let group = this.createShape({ tag: 'g', id: this.id, class: 'SVGClazz', transform: 'translate(0 0)' });\r\n\r\n        if (this.stereoType) {\r\n            let type = new StereoType(this.stereoType, pos.x, pos.y);\r\n            group.appendChild(type.getSVG());\r\n        }\r\n\r\n        // Full Shape\r\n        let options = null;\r\n        let style;\r\n        let clazzName;\r\n        if (this.$owner['options']) {\r\n            let options = this.$owner['options'];\r\n            if (options) {\r\n                style = options.style;\r\n            }\r\n        }\r\n        // = = = Background = = =\r\n        if (style === 'modern') {\r\n            clazzName = 'ClazzHeader';\r\n        }\r\n        clazzName = 'ClazzHeader';\r\n        const nodeShape = this.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            height: size.y,\r\n            width: size.x,\r\n            rx: 5,\r\n            ry: 5,\r\n            fill: 'none',\r\n            stroke: 'black',\r\n            'stroke-width': 1\r\n        });\r\n        if (clazzName) {\r\n            nodeShape.setAttribute('className', clazzName);\r\n            let styleHeader = Util.getStyle('ClazzHeader');\r\n            // headerHeight = styleHeader.getNumber('height');\r\n        }\r\n\r\n        // = = = LABEL = = =\r\n        let label = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y + this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': this.$labelFontSize,\r\n            fill: 'black'\r\n        });\r\n        label.textContent = this.id;\r\n        this.$labelView = label;\r\n\r\n        group.appendChild(nodeShape);\r\n        group.appendChild(label);\r\n\r\n        // = = = ATTRIBUTES = = =\r\n        if (this.attributes.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorLabelAttr = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight,\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight,\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorLabelAttr);\r\n\r\n            let groupOfAttributes = this.createShape({ tag: 'g', id: (this.id + 'Attributes') });\r\n            groupOfAttributes.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzAttribute');\r\n            group.appendChild(groupOfAttributes);\r\n\r\n            let y = pos.y + this.$labelHeight + this.$attrHeight / 2;\r\n            for (let attr of this.attributes) {\r\n\r\n                let attrSvg = attr.getSVG();\r\n                attr.$owner = this;\r\n\r\n                attrSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                attrSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfAttributes.appendChild(attrSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        // = = = METHODS = = =\r\n        let height = this.attributes.length * this.$attrHeight;\r\n        let y = pos.y + this.$labelHeight + height + this.$attrHeight / 2;\r\n        if (this.methods.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorAttrMethods = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorAttrMethods);\r\n\r\n            let groupOfMethods = this.createShape({ tag: 'g', id: (this.id + 'Methods') });\r\n            groupOfMethods.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzMethod');\r\n            group.appendChild(groupOfMethods);\r\n\r\n            y += this.$attrHeight / 2;\r\n            for (let method of this.methods) {\r\n\r\n                let methodSvg = method.getSVG();\r\n                method.$owner = this;\r\n\r\n                methodSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                methodSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfMethods.appendChild(methodSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        this.$view = group;\r\n        return group;\r\n    }\r\n\r\n    public copy(): Class {\r\n        let copy: Class;\r\n        copy = <Class>super.copy();\r\n\r\n        // copy label\r\n        copy.id = this.id + 'Copy';\r\n\r\n        // copy attributes\r\n        this.attributes.forEach(attr => {\r\n            copy.attributes.push(new Attribute(attr.toString()));\r\n        });\r\n        // copy methods\r\n        this.methods.forEach(method => {\r\n            copy.methods.push(new Method(method.toString()));\r\n        });\r\n        copy.reCalcSize();\r\n\r\n        return copy;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTCLICK,\r\n                EventBus.ELEMENTDRAG, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES, EventBus.RELOADPROPERTIES];\r\n    }\r\n\r\n    public addProperty(value: string, type: string): any {\r\n        if (!this[type] || !value || value.length === 0) {\r\n            return;\r\n        }\r\n\r\n        let extractedValue;\r\n        if (type === 'attributes') {\r\n            extractedValue = new Attribute(value);\r\n        }\r\n        else if (type === 'methods') {\r\n            extractedValue = new Method(value);\r\n        }\r\n\r\n        for (let valueOfType of this[type]) {\r\n            if (valueOfType.toString() === extractedValue.toString()) {\r\n                alert(extractedValue.toString() + ' already exists.');\r\n                extractedValue = undefined;\r\n                return;\r\n            }\r\n        }\r\n\r\n        this[type].push(extractedValue);\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        return extractedValue;\r\n    }\r\n\r\n    public addAttribute(value: string): Attribute {\r\n        return this.addProperty(value, 'attributes');\r\n    }\r\n\r\n    public addAttributeObj(attr: Attribute): Attribute[] {\r\n        this.attributes.push(attr);\r\n        return this.getAttributes();\r\n    }\r\n\r\n    public addMethodObj(method: Method): Method[] {\r\n        this.methods.push(method);\r\n        return this.getMethods();\r\n    }\r\n\r\n    public addMethod(value: string): Method {\r\n        return this.addProperty(value, 'methods');\r\n    }\r\n\r\n    public removeAttribute(attr: Attribute): void {\r\n        let idx = this.attributes.indexOf(attr);\r\n        this.attributes.splice(idx, 1);\r\n    }\r\n\r\n    public removeMethod(method: Method): void {\r\n        let idx = this.methods.indexOf(method);\r\n        this.methods.splice(idx, 1);\r\n    }\r\n\r\n    public removeProperty(property: ClazzProperty): void {\r\n\r\n        if (property instanceof Attribute) {\r\n            this.removeAttribute(<Attribute>property);\r\n        }\r\n\r\n        if (property instanceof Method) {\r\n            this.removeMethod(<Method>property);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n        let hasSizeChanged: [boolean, Size] = this.hasSizeChanged();\r\n\r\n        if (drawOnlyIfSizeChanged) {\r\n            if (!hasSizeChanged[0]) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n\r\n        // redraw only this clazz\r\n        this.$owner.$view.removeChild(this.$view);\r\n        let newSvg = this.getSVG();\r\n        this.$owner.$view.appendChild(newSvg);\r\n        this.$view = newSvg;\r\n        EventBus.register(this, newSvg);\r\n\r\n        this.redrawEdges();\r\n    }\r\n\r\n    public hasSizeChanged(): [boolean, Size] {\r\n        let oldSize = { width: this.getSize().x, height: this.getSize().y };\r\n        let newSize = this.reCalcSize();\r\n\r\n        // size doenst changed, so nothing to redraw\r\n        if (oldSize.width === newSize.width && oldSize.height === newSize.height) {\r\n            return [false, newSize];\r\n        }\r\n\r\n        return [true, newSize];\r\n    }\r\n\r\n    public updateLabel(newLabel: string): void {\r\n        if (this.$labelView) {\r\n            this.$labelView.textContent = newLabel;\r\n        }\r\n\r\n        // update label in all edges\r\n        this.$edges.forEach(edge => {\r\n            if (this.id === edge.$sNode.id) {\r\n                edge.source = newLabel;\r\n            }\r\n            else if (this.id === edge.$tNode.id) {\r\n                edge.target = newLabel;\r\n            }\r\n        });\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        this.reDraw(true);\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.modifier = modifier;\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reCalcSize(): Size {\r\n        // label\r\n        let newWidth = 150;\r\n        newWidth = Math.max(newWidth, Util.sizeOf(this.id).width + 30);\r\n\r\n        // attributes\r\n        this.attributes.forEach(attrEl => {\r\n\r\n            let widthOfAttr;\r\n            if (attrEl.$view) {\r\n                widthOfAttr = attrEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfAttr = Util.sizeOf(attrEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfAttr + 15);\r\n        });\r\n\r\n        // methods\r\n        this.methods.forEach(methodEl => {\r\n            let widthOfMethod;\r\n            if (methodEl.$view) {\r\n                widthOfMethod = methodEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfMethod = Util.sizeOf(methodEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfMethod + 15);\r\n        });\r\n\r\n        // TODO: height has to be calculated by font-size\r\n        this.getSize().x = newWidth;\r\n        this.getSize().y = this.$labelHeight + ((this.attributes.length + this.methods.length) * this.$attrHeight)\r\n            + this.$attrHeight;\r\n\r\n        let newSize = { width: newWidth, height: this.getSize().y };\r\n\r\n        return newSize;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    private getModernStyle(): Element {\r\n        let width, height, id, size, z, item, rect, g, board, styleHeader, headerHeight, x, y;\r\n        board = this.getRoot()['board'];\r\n        styleHeader = Util.getStyle('ClazzHeader');\r\n        headerHeight = styleHeader.getNumber('height');\r\n        width = 0;\r\n        height = 10 + headerHeight;\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].getType().toLowerCase() === 'objectdiagram') {\r\n            id = this.id.charAt(0).toLowerCase() + this.id.slice(1);\r\n            item = 'Object';\r\n        } else {\r\n            id = this.id;\r\n            item = 'Class';\r\n            if (this['counter']) {\r\n                id += ' (' + this['counter'] + ')';\r\n            }\r\n        }\r\n        g = Util.create({tag: 'g', model: this});\r\n        size = Util.sizeOf(id, this);\r\n        width = Math.max(width, size.width);\r\n        if (this.attributes && this.attributes.length > 0) {\r\n            height = height + this.attributes.length * 25;\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.attributes[z], this).width);\r\n            }\r\n        } else {\r\n            height += 20;\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            height = height + this.methods.length * 25;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.methods[z], this).width);\r\n            }\r\n        }\r\n        width += 20;\r\n\r\n        let pos = this.getPos();\r\n        y = pos.y;\r\n        x = pos.x;\r\n\r\n        rect = {\r\n            tag: 'rect',\r\n            'width': width,\r\n            'height': height,\r\n            'x': x,\r\n            'y': y,\r\n            'class': item + ' draggable',\r\n            'fill': 'none'\r\n        };\r\n        g.appendChild(Util.create(rect));\r\n        g.appendChild(Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            'x': x,\r\n            'y': y,\r\n            height: headerHeight,\r\n            'width': width,\r\n            'class': 'ClazzHeader'\r\n        }));\r\n\r\n        item = Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'class': 'InfoText',\r\n            'text-anchor': 'right',\r\n            'x': x + width / 2 - size.width / 2,\r\n            'y': y + (headerHeight / 2) + (size.height / 2),\r\n            'width': size.width\r\n        });\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].type.toLowerCase() === 'objectdiagram') {\r\n            item.setAttribute('text-decoration', 'underline');\r\n        }\r\n        item.appendChild(document.createTextNode(id));\r\n\r\n        g.appendChild(item);\r\n        g.appendChild(Util.create({\r\n            tag: 'line',\r\n            x1: x,\r\n            y1: y + headerHeight,\r\n            x2: x + width,\r\n            y2: y + headerHeight,\r\n            stroke: '#000'\r\n        }));\r\n        y += headerHeight + 20;\r\n\r\n        if (this.attributes) {\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': (x + 10),\r\n                    'y': y,\r\n                    value: this.attributes[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n            if (this.attributes.length > 0) {\r\n                y -= 10;\r\n            }\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            g.appendChild(Util.create({tag: 'line', x1: x, y1: y, x2: x + width, y2: y, stroke: '#000'}));\r\n            y += 20;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': x + 10,\r\n                    'y': y,\r\n                    value: this.methods[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n        }\r\n        return g;\r\n    }\r\n}\r\n","import {Util} from '../../util';\r\nimport {DiagramElement} from '../BaseElements';\r\nimport Data from '../../Data';\r\n\r\nexport default class ClazzProperty extends DiagramElement {\r\n\r\n    // Public (+)\r\n    // Private (-)\r\n    // Protected (#)\r\n    // Package (~)\r\n\r\n    public $data = new Data();\r\n//    public modifier: string = '+';\r\n//    public name: string;\r\n//    public type: string;\r\n//    public value: string;\r\n\r\n    constructor(data: any | JSON) {\r\n        super();\r\n        this.$data.setValue('modifier', '+');\r\n        this.$data.setValue('name', null);\r\n        this.$data.setValue('type', null);\r\n        this.$data.setValue('value', null);\r\n        this.extractData(data);\r\n    }\r\n\r\n    public update(data: any | JSON): void {\r\n        this.extractData(data);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.$data.setValue('modifier', modifier);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateType(type: string): void {\r\n        this.$data.setValue('type', type);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateValue(value: string): void {\r\n        this.$data.setValue('value', value);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateName(name: string): void {\r\n        this.$data.setValue('name', name);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public getName(): string {\r\n        return this.$data.getValue('name');\r\n    }\r\n\r\n    public getModifier(): string {\r\n        return this.$data.getValue('modifier');\r\n    }\r\n\r\n    public getType(): string {\r\n        return this.$data.getValue('type');\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let attrText = {\r\n            tag: 'text',\r\n            'text-anchor': 'start',\r\n            'alignment-baseline': 'middle',\r\n        };\r\n\r\n        let attrSvg = Util.createShape(attrText);\r\n        attrSvg.textContent = this.toString();\r\n\r\n        this.$view = attrSvg;\r\n\r\n        return attrSvg;\r\n    }\r\n\r\n    public toString(): string {\r\n        let value = this.$data.getValue('value');\r\n        let result = this.$data.getValue('modifier') + ' ';\r\n        result += this.$data.getValue('name') + ' : ';\r\n        result += this.$data.getValue('type');\r\n        if (value && value.length > 0) {\r\n            result += ' = ' + this.$data.getValue('value');\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.$data.setValue('type', data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.$data.setValue('name', data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.$data.setValue('modifier', data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n\r\n            // e.g. name : string or name:string\r\n            let dataSplitted = data.split(':');\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                let name;\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.$data.setValue('modifier', firstChar);\r\n                    name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                }\r\n                else {\r\n                    name = modifierAndNameSplitted;\r\n                }\r\n                // delete whitespaces in name\r\n                name = name.replace(/ /g, '_');\r\n\r\n                this.$data.setValue('name', name);\r\n                let type = dataSplitted[1].trim() || 'String';\r\n\r\n                // if the type was entered with a small begin letter\r\n                if (type.toLowerCase() === 'string') {\r\n                    type = 'String';\r\n                }\r\n                // delete whitespaces in type\r\n                type = type.replace(/ /g, '_');\r\n                this.$data.setValue('type',  type);\r\n            } else {\r\n                dataSplitted = data.split('=');\r\n                if (dataSplitted && dataSplitted.length === 2) {\r\n                    // modifer (and or) name\r\n                    let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                    // first char is +, - or #\r\n                    let firstChar = modifierAndNameSplitted[0];\r\n                    let name;\r\n                    if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                        this.$data.setValue('modifier', firstChar);\r\n                        name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                    }\r\n                    else {\r\n                        name = modifierAndNameSplitted;\r\n                    }\r\n                    // delete whitespaces in name\r\n                    name = name.replace(/ /g, '_');\r\n\r\n                    this.$data.setValue('name', name);\r\n                    let value = dataSplitted[1].trim() || '\"\"';\r\n                    this.$data.setValue('value', value);\r\n                    this.$data.setValue('type', typeof value);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected updateTextOfView() {\r\n        if (this.$view) {\r\n            this.$view.textContent = this.toString();\r\n        }\r\n        if (this.$owner) {\r\n            Util.saveToLocalStorage(this.$owner.$owner);\r\n        }\r\n    }\r\n}\r\n","import {Node} from \"./Node\";\r\n/**\r\n * Created by Stefan on 29.03.2017.\r\n */\r\n\r\nexport class Dice extends Node {\r\n    private value: number;\r\n    private max: number = 6;\r\n    private $animation: SVGElement;\r\n    private $zoom: number = 0.6;\r\n    private $border: number = 0.2;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super(data);\r\n        this.withSize(100, 100);\r\n    }\r\n\r\n    public setNumber(number: number) {\r\n        this.value = number;\r\n        this.refresh();\r\n    }\r\n\r\n    public refresh() {\r\n        if (this.$view) {\r\n            this.reset();\r\n            let group = this.createPointValue();\r\n            if (group) {\r\n                this.$view.appendChild(group);\r\n            }\r\n        }\r\n    }\r\n\r\n    public reset() {\r\n        if (this.$view) {\r\n            while (this.$view.children.length > 1) {\r\n                if(this.$view.children.item(this.$view.children.length - 1).tagName!== \"animateTransform\") {\r\n                    console.log(this.$view.children.item(this.$view.children.length - 1));\r\n                    this.$view.removeChild(this.$view.children.item(this.$view.children.length - 1));\r\n                }else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let dice: SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x + size.x * this.$border,\r\n            y: pos.y + size.y * this.$border,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y * this.$zoom,\r\n            width: size.x * this.$zoom,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        dice.appendChild(this.createShape(attr));\r\n\r\n        let group = this.createPointValue();\r\n        if (group) {\r\n            dice.appendChild(group);\r\n        }\r\n\r\n        this.$view = dice;\r\n        return dice;\r\n    }\r\n\r\n    public animationTimeout(newValues: number[]) {\r\n        if(newValues.length>0) {\r\n            let newValue = newValues.shift();\r\n            this.setNumber(newValue);\r\n            let that=this;\r\n            setTimeout(function() {that.animationTimeout(newValues)}, 100);\r\n        }\r\n    }\r\n\r\n    public roll() {\r\n        this.startAnimation();\r\n        let values:number[]=[];\r\n        let i:number;\r\n        for(i=1;i<this.max;i++) {\r\n            values.push(i);\r\n        }\r\n        for(i=this.max;i>0;i--) {\r\n            values.push(i);\r\n        }\r\n        let that=this;\r\n        values.push( Math.floor(Math.random() * this.max)+1 );\r\n        setTimeout(function() {that.animationTimeout(values)}, 100);\r\n    }\r\n    public startAnimation() {\r\n        if(this.$animation) {\r\n            return;\r\n        }\r\n        let center = this.getPos().x+this.getSize().x /2;\r\n        const attr = {\r\n            tag: 'animateTransform',\r\n            attributeType: \"xml\",\r\n            attributeName:\"transform\",\r\n            type:\"rotate\",\r\n            dur: \"1s\",\r\n            repeatCount:\"1\",\r\n            from:\"0 \"+center+\" \"+center,\r\n            to:\"360 \"+center+\" \"+center\r\n        };\r\n        this.$animation = <SVGElement>this.createShape(attr);\r\n        this.$view.appendChild(this.$animation);\r\n    }\r\n\r\n    public stopAnimation() {\r\n        if(this.$animation) {\r\n            this.$view.removeChild(this.$animation);\r\n            this.$animation = null;\r\n        }\r\n    }\r\n\r\n    public createPointValue() :SVGElement {\r\n        if (this.value == 1) {\r\n           return this.getCircle(2, 2);\r\n        } else if (this.value == 2) {\r\n            return this.getCircle(1, 1, 3, 3);\r\n        } else if (this.value == 3) {\r\n            return this.getCircle(1, 1, 2, 2, 3, 3);\r\n        } else if (this.value == 4) {\r\n            return this.getCircle(1, 1, 1, 3, 3, 1, 3, 3);\r\n        } else if (this.value == 5) {\r\n            return this.getCircle(1, 1, 1, 3, 2, 2, 3, 1, 3, 3);\r\n        } else if (this.value == 6) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 7) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 2, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 8) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 9) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private getCircle(...values:number[]) : SVGElement {\r\n        if (values.length % 2 > 0) {\r\n            return null;\r\n        }\r\n        let size = this.getSize();\r\n        let pos = this.getPos();\r\n        //FIXME let group:SVGElement = <SVGElement>this.createShape({tag: 'g', transform: 'translate(0 0)', height: size.y, width: size.x});\r\n        let group:SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n\r\n\r\n        for (let i: number = 0; i < values.length; i += 2) {\r\n            group.appendChild(this.createCircle(values[i], values[i + 1]));\r\n        }\r\n        return group;\r\n    }\r\n    private createCircle(x:number, y:number) : SVGElement {\r\n        let size = this.getSize();\r\n        let radius = size.x / 10*this.$zoom;\r\n        let border = size.y*this.$border;\r\n        let zoom = size.y*this.$zoom;\r\n        const attr = {\r\n            tag: 'circle',\r\n            r : radius,\r\n            cx: (size.x*this.$zoom * x) / 4 + border,\r\n            cy: (size.y*this.$zoom * y) / 4 + border,\r\n            stroke:\"black\",\r\n            \"stroke-width\":\"3\",\r\n            fill:\"red\",\r\n            style: 'fill:black;stroke:black;stroke-width:2'\r\n        };\r\n        return <SVGElement>this.createShape(attr);\r\n    }\r\n}","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\n\r\nexport class Div extends Control {\r\n    private className: string;\r\n\r\n    public load(data:JSON|any): any {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = <string>data;\r\n        } else {\r\n            id = data.id;\r\n            this.className = data.class;\r\n            this.property = data.property;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let div: HTMLElement = document.getElementById(id);\r\n\r\n        if (!this.property) {\r\n            // if(inputField){\r\n            // TODO disuss how to decide, which property we should listen on...\r\n            // this.property = id;\r\n            this.property = div.getAttribute('Property');\r\n            // }\r\n        }\r\n\r\n        if (div instanceof HTMLDivElement) {\r\n            this.$view = div;\r\n        } else {\r\n            if (!div) {\r\n                this.$view = document.createElement('div');\r\n                this.$view.setAttribute('id', this.id);\r\n                this.$view.setAttribute('property', this.property);\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists+\r\n        if (data.hasOwnProperty('property')) {\r\n            this.setProperty(data['property']);\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        this.$model = entity;\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.className || entity.hasProperty(this.className)) {\r\n                if (entity.id === this.property.split('.')[0]) {\r\n                    entity.addListener(this, this.className);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        this.$view.innerHTML = <string>newValue;\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Form extends Control {\r\n    // private applyingChange: boolean = false;\r\n    private children: Object = {};\r\n    // private property: string = \"\";\r\n\r\n    /**\r\n     * Data should look like the following json:\r\n     *\r\n     * <pre>{\r\n     *      id: \"t1\",\r\n     *      control: \"form\",\r\n     *      elements: [\r\n     *          {id: \"inputField1\", property: \"talk\"},\r\n     *          {id: \"inputField2\", property: \"room\"}\r\n     *      ]\r\n     * }</pre>\r\n     * @param data\r\n     */\r\n    public load(data: any) {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let form: HTMLElement = document.getElementById(id);\r\n\r\n        if (form instanceof HTMLFormElement) {\r\n            this.$view = form;\r\n            if (this.$view.hasAttribute('property')) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            if (!form) {\r\n                this.$view = document.createElement('form');\r\n                this.$view.setAttribute('id', this.id);\r\n\r\n                if (data.hasOwnProperty('property')) {\r\n                    this.property = data['property'];\r\n                }\r\n\r\n                // add all the attributes to the form element\r\n                for (let attr in data) {\r\n                    if (data.hasOwnProperty(attr) === false) {\r\n                        continue;\r\n                    }\r\n                    if (attr === 'elements') {\r\n                        continue;\r\n                    }\r\n                    this.$view.setAttribute(attr, data[attr]);\r\n                }\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists\r\n        let objId = this.property;\r\n        let hasItem = this.$owner.hasItem(objId);\r\n        if (hasItem) {\r\n            let item = this.$owner.getItem(objId);\r\n            item.addListener(this);\r\n            this.$model = item;\r\n        }\r\n\r\n        // now create all the sub input controls\r\n        for (let field of data.elements) {\r\n            // this.createField(field);\r\n            if (field.hasOwnProperty('property')) {\r\n                let property = field['property'];\r\n                property = this.property + '.' + property;\r\n                field['property'] = property;\r\n            }\r\n            if (!field.hasOwnProperty('class')) {\r\n                field['class'] = 'input';\r\n            }\r\n\r\n            // let the Bridge load the subControl\r\n            let control: Control = this.$owner.load(field, this);\r\n\r\n            // add subControl to children\r\n            this.children[control.getId()] = control;\r\n        }\r\n\r\n    }\r\n\r\n    public setProperty(id: string): void {\r\n        this.property = id;\r\n        let keys: string[] = Object.keys(this.children);\r\n        for (let k = 0; k < keys.length; k++) {\r\n            let key = keys[k];\r\n            let childControl = this.children[key];\r\n            // only set Property, if there is a Property defined before\r\n            if (childControl.property) {\r\n                childControl.setProperty(this.property + '.' + childControl.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object,  oldValue?: Object): boolean {\r\n        if (this.$owner != null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    /**\r\n     * Here we create the form elements and put all the attributes to them in order for the Control only having to load\r\n     * the data were appending here. Alternative would be loading with the bridge and afterwards setting\r\n     * the owner to the form instead of the body..\r\n     * @param field\r\n     */\r\n    /*private createField(field: Object) {\r\n     let control = 'input';\r\n     if (field.hasOwnProperty('class')) {\r\n     control = field['class'];\r\n     }\r\n     let input = document.createElement(control);\r\n     input.setAttribute('class', control);\r\n     let id: string;\r\n     if (!field.hasOwnProperty('id')) {\r\n     // TODO: not the best solution for generating unique id's for forms...\r\n     id = this.$owner.getId();\r\n     field['id'] = id;\r\n     }\r\n     if (field.hasOwnProperty('property')) {\r\n     let property = field['property'];\r\n     property = this.id + '.' + property;\r\n     input.setAttribute('property', property);\r\n     }\r\n     for (let attr in field) {\r\n     if (attr === 'property' || attr === 'class' || !field.hasOwnProperty(attr)) {\r\n     continue;\r\n     }\r\n     input.setAttribute(attr, field[attr]);\r\n     }\r\n\r\n     this.$viewElement.appendChild(input);\r\n\r\n     let newcontrol: Control = this.$owner.load(field['id']);\r\n     this.children[newcontrol.getId()] = newcontrol;\r\n     }*/\r\n}\r\n","/**\r\n * Created by Stefan on 01.03.2017.\r\n */\r\nimport {Control} from '../../Control';\r\n\r\nexport class HTML extends Control {\r\n    constructor(data: JSON|Object|any) {\r\n        super();\r\n\r\n        let id: string;\r\n        let tag: string;\r\n\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            data = {};\r\n        } else if (data) {\r\n            id = data.id;\r\n        }\r\n        if (id) {\r\n            this.id = id;\r\n            this.$view = document.getElementById(id);\r\n        }\r\n        if (!this.$view) {\r\n            if (data) {\r\n                tag = data['tag'] || 'div';\r\n            } else {\r\n                tag = 'div';\r\n            }\r\n            this.$view = document.createElement(tag);\r\n            let parent = document.getElementsByTagName('body')[0];\r\n            parent.appendChild(this.$view);\r\n        }\r\n        if (!parent) {\r\n            return;\r\n        }\r\n        this.writeAttribute(data, this.$view);\r\n    }\r\n\r\n    private writeAttribute(properties: Object, entity?: any) {\r\n        let lowKey;\r\n        if (!entity) {\r\n            lowKey = properties['tag'] || 'div';\r\n            entity = document.createElement(lowKey);\r\n        }\r\n        for (let key in properties) {\r\n            if (!properties.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            lowKey = key.toLowerCase();\r\n            if (properties[key] === null) {\r\n                entity.setAttribute(key, '');\r\n                continue;\r\n            }\r\n\r\n            if (lowKey === 'tag' || lowKey.charAt(0) === '$' || lowKey === '$graphModel' || lowKey === 'class') {\r\n                continue;\r\n            }\r\n            if (lowKey === 'children') {\r\n                if (Array.isArray(properties[key])) {\r\n                    for (let item in properties[key]) {\r\n                        if (properties[key].hasOwnProperty(item) === false) {\r\n                            continue;\r\n                        }\r\n                        let child = this.writeAttribute(item);\r\n                        if (child) {\r\n                            entity.appendChild(child);\r\n                        }\r\n                    }\r\n                } else {\r\n                    let child = this.writeAttribute(properties[key]);\r\n                    if (child) {\r\n                        entity.appendChild(child);\r\n                    }\r\n                }\r\n                continue;\r\n            }\r\n            entity[key] = properties[key];\r\n        }\r\n        return entity;\r\n    }\r\n}\r\n","import { Point } from '../BaseElements';\r\nimport { Util } from '../../util';\r\nimport { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\n\r\nexport class InfoText extends Node {\r\n\r\n    public cardinality: string = '';\r\n    private $heightOfOneTextItem: number;\r\n    private $cardinalitySvg: Element;\r\n    private $propertySvg: Element;\r\n    private $rectBackground: Element;\r\n\r\n    constructor(info: any) {\r\n        super(info);\r\n        if (typeof (info) === 'string') {\r\n            this.id = info;\r\n        } else {\r\n            if (info.property) {\r\n                this.property = info.property;\r\n            }\r\n            if (info.cardinality) {\r\n                this.cardinality = info.cardinality;\r\n            }\r\n        }\r\n        this.$isDraggable = true;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n    }\r\n\r\n    public updateCardinality(cardinality: string): void {\r\n        this.cardinality = cardinality;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (this.$rectBackground) {\r\n            this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n            this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n        }\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((cardinality.length === 0 && this.property.length > 0) || !this.$cardinalitySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$cardinalitySvg) {\r\n            this.$cardinalitySvg.textContent = cardinality;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.property.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    public updateProperty(property: string): void {\r\n        this.property = property;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((property.length === 0 && this.cardinality.length > 0) || !this.$propertySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$propertySvg) {\r\n            this.$propertySvg.textContent = property;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.cardinality.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos: Point = this.getPos();\r\n        let group = Util.create({ tag: 'g', class: 'SVGEdgeInfo', transform: 'translate(0, 0)' });\r\n\r\n        // append rect as background for text items\r\n        this.$rectBackground = Util.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y - this.$heightOfOneTextItem + 3,\r\n            width: this.getSize().x,\r\n            height: this.getSize().y,\r\n            fill: '#DDD',\r\n            'stroke-width': 0,\r\n            rx: '5',\r\n            ry: '5'\r\n        });\r\n        group.appendChild(this.$rectBackground);\r\n\r\n        let y = pos.y;\r\n        if (this.property) {\r\n            // property\r\n            this.$propertySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$propertySvg.textContent = this.property;\r\n            group.appendChild(this.$propertySvg);\r\n\r\n            y += this.$heightOfOneTextItem;\r\n        }\r\n\r\n        // cardinality\r\n        if (this.cardinality) {\r\n            this.$cardinalitySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$cardinalitySvg.textContent = this.cardinality;\r\n            group.appendChild(this.$cardinalitySvg);\r\n        }\r\n\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        let cardinalityAvailable = this.cardinality && this.cardinality.length > 0;\r\n        let propertyAvailable = this.property && this.property.length > 0;\r\n\r\n        return !propertyAvailable && !cardinalityAvailable;\r\n    }\r\n\r\n    public redrawFromEdge(newPos: Point): void {\r\n\r\n        if (!newPos) {\r\n            return;\r\n        }\r\n\r\n        let oldPos = this.getPos();\r\n\r\n        // get difference between new and the old position\r\n        let diffPos = new Point();\r\n        diffPos.x = newPos.x - oldPos.x;\r\n        diffPos.y = newPos.y - oldPos.y;\r\n\r\n        // get translate information\r\n        let translation = this.$view.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        let sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        // set new traslation values\r\n        let newTransX = (sx + diffPos.x);\r\n        let newTransY = (sy + diffPos.y);\r\n        this.$view.setAttributeNS(null, 'transform', 'translate(' + newTransX + ' ' + newTransY + ')');\r\n\r\n        // set new position of svg\r\n        this.getPos().x = newPos.x;\r\n        this.getPos().y = newPos.y;\r\n    }\r\n\r\n    public getText(): string {\r\n        let infoTxt: string = '';\r\n\r\n        if (this.property) {\r\n            infoTxt = this.property;\r\n        }\r\n        if (this.cardinality) {\r\n            if (infoTxt.length > 0) {\r\n                infoTxt += '\\n';\r\n            }\r\n            infoTxt += this.cardinality;\r\n        }\r\n\r\n        return infoTxt;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    private calcSize(): Point {\r\n        let text: string = this.getText();\r\n        let items: Array<string> = text.split('\\n');\r\n\r\n        let maxSize = new Point(0, 0);\r\n        if (text.length === 0) {\r\n            return maxSize;\r\n        }\r\n\r\n        for (let i = 0; i < items.length; i += 1) {\r\n            // calculate size\r\n            let sizeOfText: ClientRect = Util.sizeOf(items[i]);\r\n            maxSize.x = Math.max(maxSize.x, sizeOfText.width);\r\n            maxSize.y += sizeOfText.height;\r\n\r\n            this.$heightOfOneTextItem = sizeOfText.height;\r\n        }\r\n\r\n        return maxSize;\r\n    }\r\n    private resetAllSvgElements() {\r\n        this.$cardinalitySvg = undefined;\r\n        this.$view = undefined;\r\n        this.$propertySvg = undefined;\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\nimport {PropertyBinder} from '../../PropertyBinder';\r\n\r\nexport class Input extends Control {\r\n    private type: string;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data = super.initViewDataProperties(oldData);\r\n        if ('checkbox' === this.type || 'radio' === this.type) {\r\n            data.addFrom('checked', oldData);\r\n        }\r\n        data.addFrom('value', oldData);\r\n        data.addFrom('type', oldData);\r\n        return data;\r\n    }\r\n\r\n    public load(data: any) {\r\n        let id: string;\r\n        let inputField: HTMLElement;\r\n        let useData: boolean;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            useData = true;\r\n        } else {\r\n            id = data.id;\r\n            if (data.type) {\r\n                this.setType(data['type']);\r\n            } else {\r\n                this.setType('text');\r\n            }\r\n            if (data.hasOwnProperty('property')) {\r\n                this.setProperty(data['property']);\r\n            }\r\n            useData = false;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n\r\n        inputField = document.getElementById(id);\r\n\r\n        if (useData) {\r\n            if (inputField) {\r\n                // TODO disuss how to decide, which property we should listen on...\r\n                // this.property = id;\r\n                if (inputField.hasAttribute('Property')) {\r\n                    this.setProperty(inputField.getAttribute('Property'));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (inputField instanceof HTMLInputElement) {\r\n            this.setView(inputField);\r\n            this.type = inputField.type;\r\n            // useData = false;\r\n        } else {\r\n            if (!inputField) {\r\n                this.setView(document.createElement('input'));\r\n                this.$viewData = this.initViewDataProperties(this.$viewData);\r\n                // append viewListener\r\n                // this.$view.addEventListener('change', this.$viewListener);\r\n                if (typeof(data) !== 'string') {\r\n                    for (let attr in data) {\r\n                        if (data.hasOwnProperty(attr) === false) {\r\n                            continue;\r\n                        }\r\n                        // this.$view[attr] = data[attr];\r\n                        this.$viewData.setValue(attr, data[attr]);\r\n                    }\r\n                } else {\r\n                    if (this.type) {\r\n                        this.$view.setAttribute('type', this.type);\r\n                    }\r\n                    if (data.hasOwnProperty('class')) {\r\n                        this.$view.setAttribute('class', data['class']);\r\n                    }\r\n                    this.$view.setAttribute('id', this.id);\r\n                    this.$view.setAttribute('property', this.property);\r\n                }\r\n\r\n                if (data.value) {\r\n                    // if theres a value at the control, we want to change the model to the new value\r\n                    if (this.$model) {\r\n                        this.$model.setValue(this.lastProperty, data.value);\r\n                    }\r\n                }\r\n                if (this.$model) {\r\n                    PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                }\r\n\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (this.property && entity) {\r\n            if (entity.id === this.property.split('.')[0]) {\r\n                this.$model = entity;\r\n                PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                // entity.addListener(this, this.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n    // TODO FIXME protected updateElement(property: string, value: string) {\r\n    //     if (this.$view instanceof HTMLInputElement) {\r\n    //         if (value != null) {\r\n    //             if(property == this.lastProperty) {\r\n    //                 (<HTMLInputElement>this.$view)[this.getStandardProperty()] = value;\r\n    //             } else {\r\n    //                 // this.getRoot().setValue(this, property, value, (<HTMLInputElement>this.$view)[property]);\r\n    //                 (<HTMLInputElement>this.$view)[property] = value;\r\n    //             }\r\n    //         } else {\r\n    //             delete (<HTMLInputElement>this.$view)[property];\r\n    //         }\r\n    //     }\r\n    // }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            super.controlChanged(ev);\r\n        }\r\n// <<<<<<< HEAD\r\n//             let newVal = element[this.getStandardProperty()];\r\n//             if (this.isKeyOnly()) {\r\n//                 // we expect, element[this.lastProperty] to be boolean:\r\n//                 if (!newVal) {\r\n//                     newVal = null;\r\n//                 }\r\n//             } else {\r\n//             }\r\n        // let $graphModel;\r\n        // let value;\r\n        /*if (this.$graphModel) {\r\n            $graphModel = this.$graphModel;\r\n            value = this.$graphModel.getValue(this.lastProperty);\r\n        } else {\r\n            $graphModel = this;\r\n            if (this.$view) {\r\n                value = this.$view[this.lastProperty];\r\n            }\r\n        }*/\r\n        // this.$model.setValue(this.lastProperty, newVal);\r\n        // this.propertyChange(this.$graphModel,this.lastProperty, this.$graphModel.getValue(this.lastProperty), newVal);\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n// =======\r\n        // let newVal = element[this.lastProperty];\r\n        // if (this.isKeyOnly()) {\r\n        //     // we expect, element[this.lastProperty] to be boolean:\r\n        //     if (!newVal) {\r\n        //         newVal = null;\r\n        //     }\r\n        // } else {\r\n        // }\r\n        // let $graphModel;\r\n        // let value;\r\n\r\n        // $graphModel = this.getViewData();\r\n        // if (this.$graphModel) {\r\n        //     $graphModel = this.$graphModel;\r\n        //     value = this.$graphModel.getValue(this.lastProperty);\r\n        // } else {\r\n        //     $graphModel = this;\r\n        //     if (this.$view) {\r\n        //         value = this.$view[this.lastProperty];\r\n        //     }\r\n        // }\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n//            this.saveViewInData();\r\n// >>>>>>> addOldFunctions\r\n//         } else {\r\n//             console.log('value does not match the pattern...');\r\n//         }\r\n    }\r\n\r\n    public setType(type: string): void {\r\n        let oldValue: string = this.type;\r\n        if (oldValue === type) {\r\n            return;\r\n        }\r\n        if (type === 'radio') {\r\n            this.$viewData.setValue('checked', null);\r\n        } else {\r\n            this.$viewData.removeKey('checked');\r\n        }\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\n\r\nexport class Label extends Control {\r\n    public load(data: JSON): any {\r\n        this.createControl(this.$owner, data);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('label');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr === 'textContent') {\r\n                this.$view.textContent = data['textContent'];\r\n            } else {\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Method extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.updateType(data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.updateType(data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.updateType(data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n            // e.g. setName() : string or name:string\r\n            let dataSplitted = data.split(':');\r\n\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }\r\n                else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType(dataSplitted[1].trim() || 'void');\r\n            }\r\n            // set default return type of void\r\n            else {\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = data.trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }  else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType('void');\r\n            }\r\n        }\r\n\r\n        if (Util.includes(this.$data.getValue('name'), '(') && !Util.includes(this.$data.getValue('name'), ')') === false) {\r\n            this.$data.setValue('name', this.$data.getValue('name') + '()');\r\n        }\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\nimport {Association} from '../edges';\r\nimport { GraphModel } from '..';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\n\r\nexport class Node extends DiagramElement {\r\n    public $edges: Association[] = [];\r\n    public $minWidth: number = 150;\r\n    public $minheight: number = 25;\r\n    public $defaulEdgeType: string;\r\n\r\n    constructor(data: JSON|string|Object|any) {\r\n        super();\r\n\r\n        // default size\r\n        this.withSize(this.$minWidth, this.$minheight);\r\n\r\n        if (data) {\r\n            if (data['x'] && data['y']) {\r\n                this.withPos(data['x'], data['y']);\r\n            }\r\n            if (data['width'] || data['height']) {\r\n                this.withSize(data['width'], data['height']);\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos = this.getPos();\r\n        const size = this.getSize();\r\n\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x - size.x / 2,\r\n            y: pos.y - size.y / 2,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y,\r\n            width: size.x,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        const shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'middle',\r\n            'font-family': 'Verdana',\r\n            'font-size': '14',\r\n            fill: 'black'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = this.id;\r\n\r\n        let group = this.createShape({tag: 'g', id: this.id});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public copy(): Node {\r\n        let copy: Node;\r\n        // create new id\r\n        let model = <GraphModel>this.$owner || <GraphModel>this.getRoot();\r\n        if (model) {\r\n            let type = this.property || Node.name;\r\n            let newId = model.getNewId(type);\r\n            copy = <Node>model.createElement(type, newId, null);\r\n            copy.withSize(this.getSize().x, this.getSize().y);\r\n            copy.$owner = model;\r\n        } else {\r\n            copy.id = this.id + '-copy';\r\n            copy.$owner = this.getRoot();\r\n        }\r\n        return copy;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n// EMPTY\r\n    }\r\n    public addAttribute(value: string): Attribute {\r\n        return null;\r\n    }\r\n    public getAttributes(): Attribute[] {\r\n        return null;\r\n    }\r\n    public addMethod(value: string): Method {\r\n        return null;\r\n    }\r\n    public updateLabel(newLabel: string): void {\r\n// EMPTY\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\n\r\nexport class SO extends DiagramElement {\r\n    public static create(element: Object) {\r\n        let result: SO = new SO();\r\n        for (let key in element) {\r\n            if (element.hasOwnProperty(key) === false) {\r\n                continue;\r\n            }\r\n            result.withKeyValue(key, element[key]);\r\n\r\n        }\r\n        return result;\r\n    }\r\n\r\n    public withKeyValue(key: string, value: any): SO {\r\n        if (key === 'typ') {\r\n            this.property = value;\r\n        } else if (key === 'x') {\r\n            this.withPos(value, null);\r\n        } else if (key === 'y') {\r\n            this.withPos(null, value);\r\n        } else if (key === 'width') {\r\n            this.withSize(value, null);\r\n        } else if (key === 'height') {\r\n            this.withSize(null, value);\r\n        } else {\r\n            this[key] = value;\r\n        }\r\n        return this;\r\n    }\r\n}\r\n","import {Point} from '../BaseElements';\r\nimport {Node} from './Node';\r\n\r\nexport class StereoType extends Node {\r\n\r\n    protected stereoType: string;\r\n\r\n    constructor (type: string, x: number, y: number) {\r\n        super('');\r\n        this.withPos(x, y);\r\n        this.setStereoType(type);\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        let pos: Point = this.getPos();\r\n        let size: Point = this.getSize();\r\n\r\n               // = = = STEREOTYPE = = =\r\n        let stereoType = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y - this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': 10,\r\n            'font-weight': 'bold',\r\n            fill: 'black'\r\n        });\r\n        stereoType.textContent = this.stereoType;\r\n\r\n        this.$view = stereoType;\r\n        return stereoType;\r\n    }\r\n\r\n    public setStereoType(value: string): void {\r\n        this.stereoType = '<<' + value + '>>';\r\n    }\r\n\r\n    public getStereoType(): string {\r\n        return this.stereoType;\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { SO } from './SO';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport { Util } from '../../util';\r\n\r\nexport class Symbol extends Node {\r\n    public $heightMax: number = 0;\r\n    public $heightMin: number = 0;\r\n\r\n    constructor(typ: string) {\r\n        super(typ);\r\n    }\r\n\r\n    public draw(typ?: string): SVGElement {\r\n        return SymbolLibary.draw(this);\r\n    }\r\n}\r\n\r\n// \t\t\t\t###################################################### SymbolLibary ####################################################################################\r\n// Example Items\r\n// {tag: 'path', d: ''}\r\n// {tag: 'rect', width:46, height:34}\r\n// {tag: 'ellipse', width:23, height:4}\r\n// {tag: 'line', x1:650, y1:-286, x2:650, y2:-252}\r\n// {tag: 'circle', r:5, x:12, y:0}\r\n// {tag: 'image', height: 30, width: 50, content$src: hallo}\r\n// {tag: 'text', 'text-anchor': 'left', x: '10'}\r\nexport class SymbolLibary {\r\n\r\n    public static drawSVG(node: any): SVGSVGElement {\r\n        // const lib = new SymbolLibary();\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            const parent = SO.create(node);\r\n            parent['property'] = 'SVG';\r\n            symbol = fn(parent);\r\n            // symbol = fn.apply(lib, parent);\r\n\r\n            return SymbolLibary.createGroup(parent, symbol);\r\n        }\r\n        return symbol;\r\n    }\r\n\r\n    public static draw(node: any, parent?: Object): SVGElement {\r\n        // Node is Symbol or simple Object\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            if (!(node instanceof DiagramElement)) {\r\n                node = SO.create(node);\r\n                if (!node.property) {\r\n                    node.property = 'SVG';\r\n                }\r\n            }\r\n            symbol = fn.apply(this, [node]);\r\n            if (!parent) {\r\n                return SymbolLibary.createGroup(node, symbol);\r\n            }\r\n            return SymbolLibary.createGroup(node, symbol);\r\n        } else if (node.property) {\r\n            symbol = new Symbol(node.property);\r\n            symbol.init(node);\r\n            let pos = node.getPos();\r\n            let size = node.getSize();\r\n            symbol.withPos(pos.x, pos.y);\r\n            symbol.withSize(size.x, size.y);\r\n            symbol['value'] = node['value'];\r\n            parent = node['$parent'];\r\n            return SymbolLibary.draw(symbol, parent);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public static upFirstChar(txt: string): string {\r\n        return txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase();\r\n    }\r\n\r\n    public static isSymbolName(typ: string): boolean {\r\n        let fn = SymbolLibary['draw' + SymbolLibary.upFirstChar(typ)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static isSymbol(node: Symbol) {\r\n        let fn = SymbolLibary[SymbolLibary.getName(node)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static getName(node: any): string {\r\n        if (node['type']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['type']);\r\n        }\r\n        if (node.property) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node.property);\r\n        }\r\n        if (node['src']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['src']);\r\n        }\r\n        return 'drawNode';\r\n    }\r\n\r\n    /*FIXME   public static createImage(node: Symbol, $graphModel:Node) {\r\n           let n, img: HTMLElement;\r\n           // node.$graphModel = node;\r\n           if (SymbolLibary.isSymbol(node)) {\r\n               return SymbolLibary.draw(null, node);\r\n           }\r\n           n = {tag: 'img', $graphModel: node, src: node['src']};\r\n           let size = node.getSize();\r\n           if (size.isEmpty() === false) {\r\n               n['width'] = size.x;\r\n               n['height'] = size.y;\r\n           } else {\r\n               n['xmlns'] = 'http://www.w3.org/1999/xhtml';\r\n           }\r\n           img = Util.create(n);\r\n           if (size.isEmpty()) {\r\n               $graphModel.appendImage(img);\r\n               return null;\r\n           }\r\n           return img;\r\n       }*/\r\n\r\n    public static createGroup(node: DiagramElement, group: any) {\r\n        let func, y: number, z: number, box, item: Element, transform, i, offsetX = 0, offsetY = 0;\r\n        let svg: any;\r\n        if (node.property.toUpperCase() === 'HTML') {\r\n            let so = {\r\n                tag: 'svg',\r\n                style: { left: (group.x | 0) + node.getPos().x, top: (group.y | 0) + node.getPos().y, position: 'absolute' }\r\n            };\r\n            if (node['transform']) {\r\n                so['transform'] = node['transform'];\r\n            }\r\n            svg = Util.create(so);\r\n        } else {\r\n            svg = Util.create({ tag: 'g' });\r\n            transform = 'translate(' + group.getPos().x + ' ' + group.getPos().y + ')';\r\n            if (group.scale) {\r\n                transform += ' scale(' + group.scale + ')';\r\n            }\r\n            if (group.rotate) {\r\n                transform += ' rotate(' + group.rotate + ')';\r\n            }\r\n            svg.setAttribute('transform', transform);\r\n            if (group['id']) {\r\n                svg.id = group['id'];\r\n            }\r\n        }\r\n\r\n        if (node['tooltip']) {\r\n            const tooltipTitleAttr = {\r\n                tag: 'title'\r\n            };\r\n            let tooltipTitle = Util.createShape(tooltipTitleAttr);\r\n            tooltipTitle.textContent = node['tooltip'];\r\n            svg.appendChild(tooltipTitle);\r\n        }\r\n\r\n        if (node['background']) {\r\n            const attrCircle = {\r\n                tag: 'circle',\r\n                cx: 20,\r\n                cy: 20,\r\n                r: 17,\r\n                stroke: '#888',\r\n                'stroke-width': 0,\r\n                fill: '#DDD'\r\n            };\r\n            svg.appendChild(Util.create(attrCircle));\r\n        }\r\n\r\n        for (i = 0; i < group.items.length; i += 1) {\r\n            svg.appendChild(Util.create(group.items[i]));\r\n        }\r\n        let elements = node['elements'];\r\n        Util.setSize(svg, group.width + node.getSize().x, group.height + node.getSize().y);\r\n        node['$heightMin'] = node.getSize().y;\r\n        if (elements) {\r\n            for (i = 0; i < elements.length; i += 1) {\r\n                if (!elements[i] && elements[i].length < 1) {\r\n                    elements.splice(i, 1);\r\n                    i -= 1;\r\n                }\r\n            }\r\n            box = Util.create({ tag: 'g' });\r\n            // Calculate new Height\r\n            let c: number;\r\n            z = 0;\r\n            for (c = 0; c < elements.length; c += 1) {\r\n                if (typeof elements[c] === 'string') {\r\n                    z += 1;\r\n                } else {\r\n                    z += elements[c].length;\r\n                }\r\n            }\r\n            z = z * 25 + 6;\r\n            box.appendChild(Util.create({\r\n                tag: 'rect',\r\n                rx: 0,\r\n                x: offsetX,\r\n                y: (offsetY + 28),\r\n                width: 70,\r\n                height: z,\r\n                stroke: '#000',\r\n                fill: '#fff',\r\n                opacity: '0.7'\r\n            }));\r\n            node['$heightMax'] = z + node['$heightMin'];\r\n\r\n            svg['elements'] = elements;\r\n            if (node['type'] === 'DropDown') {\r\n                svg['activ'] = Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': 60,\r\n                    'x': (10 + offsetX),\r\n                    'y': 20,\r\n                    value: node['activText']\r\n                });\r\n                svg.appendChild(svg.activ);\r\n            }\r\n\r\n            y = offsetY + 46;\r\n            // 46 -28 = 18\r\n\r\n            func = function (event: Event) {\r\n                if (svg.activ) {\r\n                    svg.activ.textContent = (<any>event.currentTarget).value;\r\n                }\r\n            };\r\n            let txt: string;\r\n            let textClass = 'SVGTEXT';\r\n            for (z = 0; z < elements.length; z += 1) {\r\n                if (typeof elements[z] === 'string') {\r\n                    txt = elements[z];\r\n                } else {\r\n                    item = this.addText(y, offsetX, box, elements[z][0], 'SVGTEXT');\r\n                    y += 26;\r\n                    for (c = 1; c < elements[z].length; c += 1) {\r\n                        item = this.addText(y, offsetX, box, '* ' + elements[z][c], 'SVGTEXTITEM');\r\n\r\n                        item['value'] = elements[z];\r\n                        if (node['action']) {\r\n                            item['onclick'] = node['action'];\r\n                        } else {\r\n                            item['onclick'] = func;\r\n                        }\r\n                        y += 26;\r\n                    }\r\n                    txt = elements[z];\r\n                    let subBox = Util.create({\r\n                        tag: 'rect',\r\n                        rx: 0,\r\n                        x: offsetX,\r\n                        y: (offsetY + 28),\r\n                        width: 60,\r\n                        height: z,\r\n                        stroke: '#000',\r\n                        fill: '#fff',\r\n                        opacity: '0.7'\r\n                    });\r\n                    continue;\r\n                }\r\n                // let txt = elements[z];\r\n                item = this.addText(y, offsetX, box, txt, textClass);\r\n\r\n                item['value'] = elements[z];\r\n                if (node['action']) {\r\n                    item['onclick'] = node['action'];\r\n                } else {\r\n                    item['onclick'] = func;\r\n                }\r\n                y += 26;\r\n            }\r\n            svg.choicebox = box;\r\n        }\r\n        svg.tool = node;\r\n        svg.onclick = function () {\r\n            if (svg.status === 'close') {\r\n                svg.open();\r\n            } else {\r\n                svg.close();\r\n            }\r\n        };\r\n        svg.close = function () {\r\n            if (svg.status === 'open' && svg.choicebox) {\r\n                this.removeChild(svg.choicebox);\r\n            }\r\n            svg.status = 'close';\r\n            svg.tool.$size.height = svg.tool.heightMin;\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x, g.tool.height + g.tool.y);\r\n            Util.setSize(svg, svg.tool.$size.x, svg.tool.$size.y);\r\n        };\r\n        svg.open = function () {\r\n            if (this.tagName === 'svg') {\r\n                return;\r\n            }\r\n            if (svg.status === 'close' && svg.choicebox) {\r\n                this.appendChild(svg.choicebox);\r\n            }\r\n            svg.status = 'open';\r\n            svg.tool.$size.height = svg.tool.heightMax;\r\n            Util.setSize(svg, svg.tool.width, svg.tool.height);\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x + 10, g.tool.height + g.tool.y + 10);\r\n        };\r\n        svg.close();\r\n        return svg;\r\n    }\r\n\r\n    public static addChild(parent: SVGElement, json: JSON | Element): void {\r\n        let item: Element;\r\n        if ((<any>json).offsetLeft) {\r\n            item = <Element>json;\r\n        } else {\r\n            item = Util.create(json);\r\n        }\r\n        item.setAttribute('class', 'draggable');\r\n        parent.appendChild(item);\r\n    }\r\n\r\n    public static all(node: any): void {\r\n        SymbolLibary.drawSmiley(node);\r\n        SymbolLibary.drawDatabase(node);\r\n        SymbolLibary.drawLetter(node);\r\n        SymbolLibary.drawMobilephone(node);\r\n        SymbolLibary.drawWall(node);\r\n        SymbolLibary.drawActor(node);\r\n        SymbolLibary.drawLamp(node);\r\n        SymbolLibary.drawArrow(node);\r\n        SymbolLibary.drawButton(node);\r\n        SymbolLibary.drawDropdown(node);\r\n        SymbolLibary.drawClassicon(node);\r\n        SymbolLibary.drawClassWithEdgeicon(node);\r\n    }\r\n\r\n    public static drawHamburger(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'circle', r: 10, fill: '#ccc', cx: 12, cy: 12, 'stroke-width': 1, stroke: 'black'},\r\n                { tag: 'path', d: 'M 8,7 H 16 M 8,12 H 16 M 8,17 H 16', stroke: 'black', fill: 'none' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawSmiley(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'path', d: 'm49.01774,25.64542a24.5001,24.5 0 1 1 -49.0001,0a24.5001,24.5 0 1 1 49.0001,0z', stroke: 'black', fill: 'none' }, { tag: 'path', d: 'm8,31.5c16,20 32,0.3 32,0.3' },\r\n                { tag: 'path', d: 'm19.15,20.32a1.74,2.52 0 1 1 -3.49,0a1.74,2.52 0 1 1 3.49,0z' },\r\n                { tag: 'path', d: 'm33,20.32a1.74,2.52 0 1 1 -3.48,0a1.74,2.52 0 1 1 3.48,0z' },\r\n                { tag: 'path', d: 'm5.57,31.65c3.39,0.91 4.03,-2.20 4.03,-2.20' },\r\n                { tag: 'path', d: 'm43,32c-3,0.91 -4,-2.20 -4.04,-2.20' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDatabase(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 40,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,-6.26 25.03,-6.26 25.03,0l0,25.82c0,6.26 -25.03,6.26 -25.03,0l0,-25.82z',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLetter(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 17,\r\n            items: [\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1,1l22,0l0,14l-22,0l0,-14z' },\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1.06,1.14l10.94,6.81l10.91,-6.91' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMobilephone(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 4.2 0.5 15.61 0c 2 0 3.7 1.65 3.7 3.7l 0 41.6c 0 2-1.65 3.7-3.7 3.7l-15.6 0c-2 0-3.7-1.6-3.7-3.7l 0-41.6c 0-2 1.6-3.7 3.7-3.7z',\r\n                    fill: 'none',\r\n                    stroke: 'black'\r\n                },\r\n                { tag: 'path', d: 'm 12.5 2.73a 0.5 0.5 0 1 1-1 0 0.5 0.5 0 1 1 1 0z' },\r\n                { tag: 'path', d: 'm 14 46a 2 2 0 1 1-4 0 2 2 0 1 1 4 0z' },\r\n                { tag: 'path', d: 'm 8 5 7 0' },\r\n                { tag: 'path', d: 'm 1.63 7.54 20.73 0 0 34-20.73 0z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawWall(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'path', d: 'm26,45.44l-5,3.56l-21,-9l0,-36.41l5,-3.56l20.96,9l-0,36.4z' },\r\n                {\r\n                    tag: 'path',\r\n                    stroke: 'white',\r\n                    d: 'm2.21,11l18.34,7.91m-14.46,-12.57l0,6.3m8.2,21.74l0,6.35m-8.6,-10l0,6.351m4.1,-10.67l0,6.3m4.8,-10.2l0,6.3m-8.87,-10.23l0,6.35m4.78,-10.22l0,6.35m-8,14.5l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m0,-13l0,34m-18.23,-41.84l18.3,8m0,0.11l5,-3.57'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawActor(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'line', stroke: '#000', x1: '12', y1: '10', x2: '12', y2: '30' },\r\n                { tag: 'circle', stroke: '#000', cy: '5', cx: '12', r: '5' },\r\n                { tag: 'line', stroke: '#000', y2: '18', x2: '25', y1: '18', x1: '0' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '5', y1: '30', x1: '12' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '20', y1: '30', x1: '12' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLamp(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 22.47 10.58c-6.57 0-11.89 5.17-11.89 11.54 0 2.35 0.74 4.54 2 6.36 2 4 4.36 5.63 4.42 10.4l 11.15 0c 0.12-4.9 2.5-6.8 4.43-10.4 1.39-1.5 1.8-4.5 1.8-6.4 0-6.4-5.3-11.5-11.9-11.5z',\r\n                    fill: 'white',\r\n                    stroke: 'black'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 40 8 0c 0.58 0 1 0.5 1 1 0 0.6-0.5 1-1 1l-8 0c-0.6 0-1-0.47-1-1 0-0.58 0.47-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 42.7 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 45.3 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                { tag: 'path', d: 'm 19.5 48c 0.37 0.8 1 1.3 1.9 1.7 0.6 0.3 1.5 0.3 2 0 0.8-0.3 1.4-0.8 1.9-1.8z' },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 6 37.5 4.2-4c 0.3-0.3 0.8-0.3 1 0 0.3 0.3 0.3 0.8 0 1.1l-4.2 4c-0.3 0.3-0.8 0.3-1.1 0-0.3-0.3-0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 39 37.56-4.15-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 38 23 5.8 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.8 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 1.3 23 6 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.9 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 34.75 11.2 4-4.1c 0.3-0.3 0.3-0.8 0-1-0.3-0.3-0.8-0.3-1 0l-4 4.1c-0.3 0.3-0.3 0.8 0 1 0.3 0.3 0.8 0.3 1 0z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 11.23 10-4-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 21.64 1.3 0 5.8c 0 0.4 0.3 0.8 0.8 0.8 0.4 0 0.8-0.3 0.8-0.8l 0-5.8c 0-0.4-0.3-0.8-0.8-0.8-0.4 0-0.8 0.3-0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 26.1 24.3c-0.5 0-1 0.2-1.3 0.4-1.1 0.6-2 3-2.27 3.5-0.26-0.69-1.14-2.9-2.2-3.5-0.7-0.4-2-0.7-2.5 0-0.6 0.8 0.2 2.2 0.9 2.9 1 0.9 3.9 0.9 3.9 0.9 0 0 0 0 0 0 0.54 0 2.8 0 3.7-0.9 0.7-0.7 1.5-2 0.9-2.9-0.2-0.3-0.7-0.4-1.2-0.4z'\r\n                },\r\n                { tag: 'path', d: 'm 22.5 28.57 0 10.7' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawStop(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 30,\r\n            height: 30,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: '#FFF',\r\n                    'stroke-width': '2',\r\n                    stroke: '#B00',\r\n                    d: 'm 6,6 a 14,14 0 1 0 0.06,-0.06 z m 0,0 20,21'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMin(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    d: 'm 0,0 19,0 0,19 -19,0 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 13,-0.04'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawArrow(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 10,\r\n            height: 9,\r\n            rotate: node['rotate'],\r\n            items: [\r\n                { tag: 'path', fill: '#000', stroke: '#000', d: 'M 0,0 10,4 0,9 z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMax(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    'stroke-dashoffset': 2,\r\n                    'stroke-dasharray': '4.8,4.8',\r\n                    d: 'm 0,0 4.91187,0 5.44643,0 9.11886,0 0,19.47716 -19.47716,0 0,-15.88809 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 6,0.006 0.02,5 0.01,-11 -0.03,6.02 c 2,-0.01 4,-0.002 6,0.01'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawButton(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight, btnValue;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        btnValue = node['value'] || '';\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: 60,\r\n            height: 28,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 8,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    filter: 'url(#drop-shadow)',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                { tag: 'text', $font: true, x: 10, y: 18, fill: 'black', value: btnValue, 'class': 'hand' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDropdown(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 0,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth - 20,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 2,\r\n                    x: btnWidth - 20,\r\n                    y: 0,\r\n                    width: 20,\r\n                    height: 28,\r\n                    stroke: '#000',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    style: 'fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1',\r\n                    d: 'm ' + (btnWidth - 15) + ',13 10,0 L ' + (btnWidth - 10) + ',20 z'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassicon(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.19999l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm25.68807,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.2l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                { tag: 'line', x1: 11, y1: 7, x2: 25, y2: 7, stroke: '#000' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassWithEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M2,10 20,10 20,35 2,35 Z M2,17 20,17 M20,10 28,5 28,9 M 28.5,4.7 24,4',\r\n                    style: 'fill:none;stroke:#000000;transform:scale(0.8);'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClass(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: '100%',\r\n            height: '100%',\r\n            items: [\r\n                { tag: 'rect', width: 50, height: 40, x: 0, y: 0, 'stroke-width': 2, stroke: 'black', fill: 'none'},\r\n                { tag: 'rect', width: 50, height: 12, x: 0, y: 18, 'stroke-width': 1, stroke: 'black', fill: 'none'},\r\n                { tag: 'text', x: 27, y: 14, 'text-anchor': 'middle', 'font-size': 11, value: 'Class'},\r\n                { tag: 'text', x: 5, y: 24, 'font-size': 5, value: '+ field: type'},\r\n                { tag: 'text', x: 5, y: 36, 'font-size': 5, value: '+ method(type)'}\r\n            ]\r\n        });\r\n    }\r\n/*\r\n<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n    <g>\r\n    <text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text>\r\n        <text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>\r\n*/\r\n\r\n    public static drawEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M10,30 30,10 M19,10 30,10 30,21',\r\n                    style: 'fill:none;stroke:#555;stroke-width:2;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawCopynode(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M5 5 L15 5 L15 20 L5 20 Z M5 10 L15 10',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M8 2 L18 2 L18 17 L8 17 Z M8 7 L18 7'\r\n                        + 'M11 4.5 L15 4.5 '\r\n                        + 'M10 10 L16 10 '\r\n                        + 'M10 13 L16 13 ',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawBasket(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M12 12 L18 12 L18 11 L22 11 L22 12 L28 12 L28 14 L27 14 L27 29 L13 29 L13 14 L12 14 Z M13 14 L27 14 M20 17 L20 26 M17 16 L17 27 M23 16 L23 27',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawPencil(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M6 20 L12 23 L33 23 L33 17 L12 17 Z M30 17 L30 23 M12 17 L12 23 M15 19 L28 19 M15 21 L28 21',\r\n                    stroke: '#000',\r\n                    'stroke-width': 1,\r\n                    fill: 'white'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    private static addText(y: number, offsetX: number, box: Element, text: string, textClass: string): Element {\r\n        let item: Element;\r\n        box.appendChild(Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'text-anchor': 'left',\r\n            width: 70,\r\n            x: 10,\r\n            y: y,\r\n            class: textClass,\r\n            value: text,\r\n            eventValue: text\r\n        }));\r\n        if (textClass === 'SVGTEXT') {\r\n            textClass = 'SVGChoiceText';\r\n        } else {\r\n            textClass = 'SVGChoice';\r\n        }\r\n\r\n        item = Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            x: offsetX,\r\n            y: y - 18,\r\n            width: 70,\r\n            height: 24,\r\n            stroke: 'none',\r\n            class: textClass,\r\n        });\r\n        item['eventValue'] = text;\r\n        box.appendChild(item);\r\n        return item;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n}\r\n","import {Control} from '../../Control';\r\nimport BridgeElement from '../../BridgeElement';\r\nimport Data from '../../Data';\r\nimport {Util} from '../../util';\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Table extends Control {\r\n    protected items: BridgeElement[] = [];\r\n    private columns: Column[] = [];\r\n    private cells: Object = {};\r\n    private $bodysection: HTMLTableSectionElement;\r\n    private $headersection: HTMLTableSectionElement;\r\n    private showedItems: Array<BridgeElement> = [];\r\n    // BridgeElements:\r\n    private itemsIds: Object = {};\r\n    private countElement: HTMLElement;\r\n    private countColumn: HTMLElement;\r\n    private countColumnPos: number;\r\n    private resultColumn: string;\r\n    private lastSearchText: string;\r\n    private searchColumns: Array<string> = [];\r\n    private searchText: Array<string> = [];\r\n    private sortColumn: Column;\r\n    private direction: number;\r\n    private moveElement: Column = null;\r\n    private isDrag: boolean = false;\r\n    private moveTimeStamp: number;\r\n    private moveX: number;\r\n    private movePos: number;\r\n    private dragColumn: Column;\r\n    private dragPos: number;\r\n    private tableOption: HTMLTableHeaderCellElement;\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    private static indexOfChild(item: BridgeElement) {\r\n        let i: number = 0;\r\n        let child: Node = item.gui;\r\n        while ((child = child.previousSibling) !== null) {\r\n            i++;\r\n        }\r\n        return i;\r\n    }\r\n\r\n    public load(data: any): void {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n            if (data.property) {\r\n                this.property = data.property;\r\n            }\r\n\r\n            if (data.searchColumns) {\r\n                let search: Array<string> = [];\r\n                if (typeof(data.searchColumns) === 'string') {\r\n                    search = data.searchColumns.split(' ');\r\n                } else {\r\n                    search = data.searchColumns;\r\n                }\r\n                for (let z: number = 0; z < search.length; z++) {\r\n                    let item = search[z].trim();\r\n                    if (item.length > 0) {\r\n                        if (this.searchColumns.indexOf(item) < 0) {\r\n                            this.searchColumns.push(item);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        if (this.$view) {\r\n            // Must be an Update\r\n            if (data['columns']) {\r\n                // It is a json must add all things and generate HTML\r\n                for (let i in data['columns']) {\r\n                    if (data['columns'].hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    let col = this.parseData(data['columns'][i]);\r\n                    this.addHeaderInfo(col);\r\n                    this.columns.push(col);\r\n                    this.tableOption.parentElement.insertBefore(col.$element, this.tableOption);\r\n                }\r\n                for (let i in this.showedItems) {\r\n                    let item: BridgeElement = this.showedItems[i];\r\n                    let cell;\r\n                    // Now Add some Children\r\n                    while (item.gui.children.length < this.columns.length) {\r\n                        cell = document.createElement('td');\r\n                        item.gui.appendChild(cell);\r\n                    }\r\n                    // Now Remove Some Children\r\n                    while (item.gui.children.length > this.columns.length) {\r\n                        item.gui.removeChild(item.gui.children[item.gui.children.length - 1]);\r\n                    }\r\n                    for (let c: number = 0; c < this.columns.length; c++) {\r\n                        let name = this.columns[c].attribute;\r\n                        // let count = this.columns.length;\r\n                        cell = item.gui.children[c];\r\n                        cell.innerHTML = item.model.getValue(name);\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n\r\n        this.$view = document.getElementById(id);\r\n        let headerrow: HTMLTableRowElement;\r\n        if (this.$view) {\r\n            if (!this.property) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('table');\r\n            this.$owner.appendChild(this);\r\n        }\r\n        if (!this.$bodysection) {\r\n            // add tbody element if missing\r\n            this.$bodysection = document.createElement('tbody');\r\n            this.$view.appendChild(this.$bodysection);\r\n        }\r\n        if (data['classname']) {\r\n            this.$view.className = data['classname'];\r\n        } else {\r\n            this.$view.className = 'mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp';\r\n        }\r\n\r\n        this.id = id;\r\n        this.$view.id = id;\r\n        this.$view.setAttribute('type', this.constructor['name'].toLowerCase());\r\n        let counter = 0;\r\n        for (let c = 0; c < this.$view.children.length; c++) {\r\n            let row: HTMLTableRowElement = <HTMLTableRowElement>this.$view.children[c];\r\n            if (row instanceof HTMLTableSectionElement) {\r\n                if (row.tagName === 'THEAD') {\r\n                    headerrow = row;\r\n                    // Its a thead\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingHeader(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                } else {\r\n                    // Its a tbody\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingData(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                }\r\n            } else {\r\n                // fallback, if there are no thead and tbody...\r\n                if (counter === 0) {\r\n                    headerrow = row;\r\n                    this.parsingHeader(row);\r\n                } else {\r\n                    this.parsingData(row);\r\n                }\r\n            }\r\n            counter++;\r\n        }\r\n        if (!headerrow || !this.$headersection) {\r\n            if (!this.$headersection) {\r\n                // find eventually existing thead\r\n                let header = this.$view.getElementsByTagName('thead');\r\n                if (header.length === 0) {\r\n                    this.$headersection = document.createElement('thead');\r\n                    this.$view.appendChild(this.$headersection);\r\n                } else {\r\n                    // take first thead element\r\n                    this.$headersection = <HTMLTableSectionElement>header.item(0);\r\n                }\r\n            }\r\n            if (!headerrow) {\r\n                headerrow = document.createElement('tr');\r\n                this.$headersection.appendChild(headerrow);\r\n            }\r\n        }\r\n\r\n        if (data['columns']) {\r\n            // It is a json must add all things and generate HTML\r\n            for (let i in data['columns']) {\r\n                if (data['columns'].hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                let col = this.parseData(data['columns'][i]);\r\n                this.addHeaderInfo(col);\r\n                this.columns.push(col);\r\n                headerrow.appendChild(col.$element);\r\n            }\r\n            this.tableOption = document.createElement('th');\r\n            this.tableOption.classList.add('tableOption');\r\n            headerrow.appendChild(this.tableOption);\r\n            let context: HTMLElement = this.addOptionItem(null, this.tableOption, true);\r\n            let contentChild: HTMLElement = this.addOptionItem('show', context, true);\r\n            // let simpleLink: HTMLElement = this.addOptionItem('show', contentChild, false);\r\n            this.addOptionItem('show', contentChild, false);\r\n        }\r\n        this.registerEvents(['mousemove', 'mousedown', 'mouseup', 'resize', 'dragstart', 'dragover', 'drop', 'dragend']);\r\n\r\n        // Check for SearchBar\r\n        // if(data[\"searchproperty\"]){\r\n        // Create Full Row\r\n        let searchBar = document.createElement('tr');\r\n        let cell = document.createElement('td');\r\n        cell.setAttribute('colspan', '' + (this.columns.length));\r\n        searchBar.appendChild(cell);\r\n\r\n        let search = document.createElement('input');\r\n        search.className = 'search';\r\n        let that = this;\r\n        search.addEventListener('keyup', function (evt) {\r\n            that.search(evt.target['value']);\r\n        });\r\n\r\n        cell.appendChild(search);\r\n        if (this.resultColumn) {\r\n            if (this.resultColumn.indexOf('#') !== 0) {\r\n                this.countElement = document.createElement('div');\r\n                searchBar.appendChild(this.countElement);\r\n            } else {\r\n                for (let z: number = 0; z < this.$headersection.children.length; z++) {\r\n                    if (this.$headersection.children[z].innerHTML === this.resultColumn) {\r\n                        this.countColumn = <HTMLElement> this.$headersection.children[z];\r\n                        this.countColumnPos = z;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        let first = this.$headersection.children.item(0);\r\n        this.$headersection.insertBefore(searchBar, first);\r\n\r\n        this.updateElement(this.property, null);\r\n\r\n        // now update those elements, that were not loaded currently\r\n    }\r\n\r\n    public tableEvent(type: string, e: Event) {\r\n        let button: number = 0;\r\n        let eventX: number = 0;\r\n        if (e instanceof MouseEvent) {\r\n            button = e.buttons;\r\n            eventX = e.pageX;\r\n        }\r\n        if (type === 'mouseup') {\r\n            this.moveElement = null;\r\n        } else if (type === 'mousedown' || type === 'resize') {\r\n            // End to Resize\r\n            this.moveElement = null;\r\n            if (button === 1) {\r\n                let c: number;\r\n                for (c = 0; c < this.columns.length; c++) {\r\n                    if (this.columns[c].$resize === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = false;\r\n                        break;\r\n                    } else if (this.columns[c].$element === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = true;\r\n                    }\r\n                }\r\n                this.moveTimeStamp = e.timeStamp;\r\n                this.moveX = eventX;\r\n            } else {\r\n                this.moveTimeStamp = 0;\r\n            }\r\n        } else if (type === 'mousemove') {\r\n            if (button === 1 && this.moveElement) {\r\n                if (this.moveTimeStamp && e.timeStamp - this.moveTimeStamp < 2000) {\r\n                    if (this.isDrag) {\r\n                        // FIXME\r\n                    } else {\r\n                        let x = eventX - this.moveX;\r\n                        let width = this.moveElement.$element.offsetWidth;\r\n                        this.moveElement.$element.width = '' + (width + x);\r\n                        e.stopPropagation();\r\n                    }\r\n                }\r\n                this.moveX = eventX;\r\n                this.moveTimeStamp = e.timeStamp;\r\n            }\r\n        } else if (this.isDrag) {\r\n            this.columnDragEvent(type, <DragEvent> e);\r\n        }\r\n    }\r\n\r\n    public parsingHeader(row: HTMLTableRowElement) {\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let column: HTMLTableHeaderCellElement = <HTMLTableHeaderCellElement>row.children[i];\r\n            let id = column.innerHTML.trim();\r\n            let col: Column = null;\r\n            for (let c in this.columns) {\r\n                if (this.columns.hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                if (this.columns[c].label === id) {\r\n                    col = this.columns[c];\r\n                    col.$element = column;\r\n                    break;\r\n                }\r\n            }\r\n            if (col === null) {\r\n                col = new Column();\r\n                col.label = id;\r\n                col.attribute = column.getAttribute('attribute');\r\n                col.$element = column;\r\n                this.columns.push(col);\r\n            }\r\n            this.addHeaderInfo(col);\r\n        }\r\n    }\r\n\r\n    public parsingData(row: HTMLTableRowElement) {\r\n        let id = row.getAttribute('id');\r\n        let item: Data = this.$owner.getItem(id);\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let cell: HTMLTableCellElement = <HTMLTableCellElement>row.children[i];\r\n            let colAttribute = this.columns[i].attribute;\r\n            if (colAttribute.indexOf('\\.') < 0) {\r\n                item[colAttribute] = cell.innerHTML.trim();\r\n            }\r\n        }\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: Object, newValue: Object) {\r\n        if (entity) {\r\n            // Check for Show\r\n            if (this.property && !entity.hasProperty(property)) {\r\n                return;\r\n            }\r\n        }\r\n        if (entity.id === undefined) {\r\n            return;\r\n        }\r\n        let item: BridgeElement = <BridgeElement>this.itemsIds[entity.id];\r\n        let row: HTMLTableRowElement;\r\n        if (!item) {\r\n            item = new BridgeElement(entity);\r\n            this.items.push(item);\r\n            this.itemsIds[entity.id] = item;\r\n        }\r\n        row = this.cells[entity.id];\r\n        if (row) {\r\n            item.gui = row;\r\n        }\r\n        if (this.searching(item) === false) {\r\n            return;\r\n        }\r\n        let cell;\r\n        let showItem = false;\r\n\r\n        if (!row) {\r\n            showItem = true;\r\n            row = document.createElement('tr');\r\n            let count = this.columns.length;\r\n            for (let i = 0; i < count; i++) {\r\n                cell = document.createElement('td');\r\n                row.appendChild(cell);\r\n            }\r\n            this.cells[entity.id] = row;\r\n            item.gui = row;\r\n        }\r\n        for (let c: number = 0; c < this.columns.length; c++) {\r\n            let name = this.columns[c].attribute;\r\n            if (name === property) {\r\n                cell = row.children[c];\r\n                cell.innerHTML = <string>newValue;\r\n            }\r\n        }\r\n        if (showItem) {\r\n            this.showItem(item, true);\r\n        }\r\n        // super.propertyChange(entity, property, newValue, oldValue);\r\n    }\r\n\r\n    public sort(column: Column) {\r\n        if (this.sortColumn === column) {\r\n            if (this.direction === 1) {\r\n                this.direction = -1;\r\n                column.$element.classList.remove('asc');\r\n                column.$element.classList.add('desc');\r\n            } else {\r\n                this.direction = 1;\r\n                column.$element.classList.remove('desc');\r\n                column.$element.classList.add('asc');\r\n            }\r\n        } else {\r\n            if (this.sortColumn !== null) {\r\n                this.sortColumn.$element.classList.remove('desc');\r\n                this.sortColumn.$element.classList.remove('asc');\r\n            }\r\n            this.sortColumn = column;\r\n            this.sortColumn.$element.classList.add('asc');\r\n            this.direction = 1;\r\n        }\r\n        let that = this;\r\n        let sort = function (a: BridgeElement, b: BridgeElement) {\r\n            return that.sorting(a, b);\r\n        };\r\n        this.showedItems.sort(sort);\r\n        let len: number = this.showedItems.length;\r\n        let body = this.$bodysection;\r\n        let i = 0;\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            if (i !== Table.indexOfChild(item)) {\r\n                break;\r\n            }\r\n            i = i + 1;\r\n        }\r\n        while (body.children.length > i) {\r\n            body.removeChild(body.children.item(body.children.length - 1));\r\n        }\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            body.appendChild(item.gui);\r\n            i = i + 1;\r\n        }\r\n\r\n        //      body.removeChild(item.gui);\r\n        //      body.remove\r\n    }\r\n\r\n    public sorting(a: BridgeElement, b: BridgeElement): number {\r\n        let path: string[] = this.sortColumn.attribute.split('.');\r\n        let itemA = a.model.prop;\r\n        let itemB = b.model.prop;\r\n        let check = this.sortColumn.attribute;\r\n        for (let p = 0; p < path.length; p++) {\r\n            check = path[p];\r\n            if (itemA[check]) {\r\n                itemA = itemA[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n            if (itemB[check]) {\r\n                itemB = itemB[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n        if (itemA !== itemB) {\r\n            if (this.direction === 1) {\r\n                return (itemA < itemB) ? -1 : 1;\r\n            }\r\n            return (itemA < itemB) ? 1 : -1;\r\n\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    // Searching\r\n    public search(origSearchText: string): void {\r\n        if (!origSearchText) {\r\n            origSearchText = '';\r\n        }\r\n        let searchText: string = origSearchText.trim().toLowerCase();\r\n        if (searchText === this.lastSearchText && searchText !== '') {\r\n            return; // <==== nothing to be done\r\n        }\r\n        let oldSearch: string = this.lastSearchText;\r\n        this.lastSearchText = searchText;\r\n\r\n        this.parseSearchArray();\r\n        if (searchText !== '' && oldSearch !== null && searchText.indexOf(oldSearch) >= 0 && searchText.indexOf('|') < 0) {\r\n            this.searchArray(this.showedItems);\r\n        } else {\r\n            this.searchSet(this.items);\r\n        }\r\n        this.refreshCounter();\r\n    }\r\n\r\n    public refreshCounter() {\r\n        if (this.countColumn) {\r\n            this.countColumn.innerHTML = this.columns[this.countColumnPos].label + ' (' + this.showedItems.length + ')';\r\n        }\r\n        // var countElement = document.getElementById('talkCount');\r\n        //  if (countElement) {\r\n        //     var txt = (this.showedItems.size() > 0 && searchText.length > 0 ) ? this.options.TEXT_SEARCHLIST : this.options.TEXT_SEARCHFULLLIST;\r\n        //     countElement.innerHTML = txt.replace(\"%LEN%\", this.root['children'].length).replace(\"%COUNT%\", this.showedItems.size()).replace(\"%SEARCH%\", origSearchText);\r\n        // }\r\n        // if (this.countColumn) {\r\n        //     this.countColu1mn.innerHTML = this.countColumn[\"label\"] + \" (\" + this.showedItems.size() + \")\";\r\n        // }\r\n    }\r\n\r\n    public parseSearchArray() {\r\n        let pos: number = 0;\r\n        let split: Array<string> = [];\r\n        let quote: boolean = false;\r\n        for (let i: number = 0; i < this.lastSearchText.length; i++) {\r\n            if ((this.lastSearchText.charAt(i) === ' ') && !quote) {\r\n                let txt = this.lastSearchText.substring(pos, i).trim();\r\n                if (txt.length > 0) {\r\n                    split.push(txt);\r\n                }\r\n                pos = i + 1;\r\n            } else if (this.lastSearchText.charAt(i) === '\\\"') {\r\n                if (quote) {\r\n                    let txt = this.lastSearchText.substring(pos, i).trim();\r\n                    if (txt.length > 0) {\r\n                        split.push(txt);\r\n                    }\r\n                    pos = i + 1;\r\n                } else {\r\n                    pos = i + 1;\r\n                }\r\n                quote = !quote;\r\n            }\r\n        }\r\n        if (pos < this.lastSearchText.length) {\r\n            split.push(this.lastSearchText.substring(pos, this.lastSearchText.length).trim());\r\n        }\r\n        this.searchText = split;\r\n        return split;\r\n    }\r\n\r\n    public searchArray(root: Array<BridgeElement>) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let i: number = 0; i < root.length; i++) {\r\n            let item: BridgeElement = root[i];\r\n            this.showItem(item, this.searching(item));\r\n        }\r\n    }\r\n\r\n    public searchSet(root: BridgeElement[]) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let item of root) {\r\n            let child: BridgeElement = <BridgeElement>item;\r\n            this.showItem(child, this.searching(child));\r\n        }\r\n    }\r\n\r\n    public showItem(item: BridgeElement, visible: boolean) {\r\n        if (visible) {\r\n            this.showedItems.push(item);\r\n            this.$bodysection.appendChild(item.gui);\r\n        } else if (item.gui && item.gui.parentElement) {\r\n            this.$bodysection.removeChild(item.gui);\r\n        }\r\n    }\r\n\r\n    public searching(item: BridgeElement): boolean {\r\n        let fullText: string = '';\r\n        for (let i: number = 0; i < this.searchColumns.length; i++) {\r\n            fullText = fullText + ' ' + item.model.getValue(this.searchColumns[i]);\r\n        }\r\n        fullText = fullText.trim().toLowerCase();\r\n        for (let z: number = 0; z < this.searchText.length; z++) {\r\n            if ('' !== this.searchText[z]) {\r\n                let orSplit: Array<string>;\r\n                if (this.searchText[z].indexOf('|') > 0) {\r\n                    orSplit = this.searchText[z].split('|');\r\n                } else {\r\n                    orSplit = [this.searchText[z]];\r\n                }\r\n                let o: number = 0;\r\n                for (; o < orSplit.length; o++) {\r\n                    let pos: number = orSplit[o].indexOf(':');\r\n                    if (orSplit[o].indexOf('#') === 0 && pos > 1) {\r\n                        // if (searchProperties.contains(propString)) {\r\n                        let value: string = orSplit[o].substring(pos + 1);\r\n                        let column: string = orSplit[o].substring(1, pos - 1);\r\n                        let dataValue: Object = item.model.getValue(column);\r\n                        if (dataValue) {\r\n                            if (dataValue.toString().toLowerCase().indexOf(value) >= 0) {\r\n                                // Search for simple Property\r\n                                break;\r\n                            }\r\n                        }\r\n                    } else if (orSplit[o].length > 1 && orSplit[o].indexOf('-') === 0) {\r\n                        if (fullText.indexOf(orSplit[o].substring(1)) < 0) {\r\n                            break;\r\n                        }\r\n                    } else if (fullText.indexOf(orSplit[o]) >= 0) {\r\n                        // his search word is found in full text\r\n                        break;\r\n                    }\r\n                }\r\n                if (o === orSplit.length) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public getColumn(): Column[] {\r\n        return this.columns;\r\n    }\r\n\r\n    public updateElement(property: string, value: string): void {\r\n        // first clear all elements inside the table:\r\n        for (let item of this.items) {\r\n            if (item instanceof BridgeElement) {\r\n                (<BridgeElement>item).model.removeListener(this);\r\n            }\r\n        }\r\n\r\n        this.items = [];\r\n        this.itemsIds = {};\r\n\r\n        // load all entitys that match the property\r\n        if (this.property !== undefined) {\r\n            let items = this.$owner.getItems();\r\n            for (let j in items) {\r\n                if (items.hasOwnProperty(j)) {\r\n                    let item = items[j];\r\n                    if (item instanceof Data) {\r\n                        if (property === j) {\r\n                            // if (property == item.property) {\r\n                            let i = new BridgeElement(<Data>item);\r\n                            this.items.push(i);\r\n                            this.itemsIds[item.id] = i;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            this.redrawAllElements();\r\n        }\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        if (this.$owner !== null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    protected redrawAllElements() {\r\n        let children: HTMLCollection = this.$bodysection.children;\r\n        // remove old children\r\n        for (let i = 0; i < children.length; i++) {\r\n            let child = children.item(i);\r\n            // remove child\r\n            this.$bodysection.removeChild(child);\r\n        }\r\n\r\n        // load new children\r\n        for (let obj of this.items) {\r\n            // register listeners\r\n            obj.model.addListener(this);\r\n            // create tr\r\n            let row = this.createRow(obj);\r\n            this.$bodysection.appendChild(row);\r\n            this.cells[obj.id] = row;\r\n        }\r\n    }\r\n\r\n    private parseData(column: any): Column {\r\n        let col = new Column();\r\n        col.label = column.label || column.id;\r\n        col.attribute = column.attribute || column.label || column.id;\r\n        col.$element = document.createElement('th');\r\n        col.$element.innerHTML = col.label;\r\n        col.$element.draggable = true;\r\n\r\n        // resize Header\r\n        col.$resize = document.createElement('div');\r\n        col.$resize.classList.add('resize');\r\n        col.$element.appendChild(col.$resize);\r\n\r\n        return col;\r\n    }\r\n\r\n    private createRow(data: BridgeElement): HTMLTableRowElement {\r\n        let tr: HTMLTableRowElement = document.createElement('tr');\r\n\r\n        for (let id of this.columns) {\r\n            let td: HTMLTableDataCellElement = document.createElement('td');\r\n            tr.appendChild(td);\r\n            td.innerHTML = data.model.getValue(id.attribute);\r\n        }\r\n        return tr;\r\n    }\r\n\r\n    private addHeaderInfo(col: Column) {\r\n        let element: HTMLTableCellElement = col.$element;\r\n        let that = this;\r\n        element.classList.add('sort');\r\n        element.addEventListener('click',\r\n            function () {\r\n                that.sort(col);\r\n            },\r\n            false);\r\n    }\r\n\r\n    private columnDragEvent(type: string, e: DragEvent) {\r\n        if (type === 'dragstart') {\r\n            // Target (this) element is the source node.\r\n            this.moveElement.$element.style.opacity = '0.4';\r\n            e.dataTransfer.effectAllowed = 'move';\r\n            e.dataTransfer.setData('text/json', JSON.stringify(Util.toJson(this.moveElement)));\r\n        } else if (type === 'dragenter') {\r\n            // TO Nothing\r\n        } else if (type === 'dragleave') {\r\n            this.moveElement.$element.classList.remove('over');\r\n        } else if (type === 'dragover') {\r\n            if (e.preventDefault) {\r\n                e.preventDefault(); // Necessary. Allows us to drop.\r\n            }\r\n            for (let c = 0; c < this.columns.length; c++) {\r\n                if (this.columns[c].$element === e.target) {\r\n                    this.dragColumn = this.columns[c];\r\n                    this.dragPos = c;\r\n                    this.columns[c].$element.classList.add('over');\r\n                } else {\r\n                    this.columns[c].$element.classList.remove('over');\r\n                }\r\n            }\r\n            if (e.target === this.tableOption) {\r\n                this.tableOption.classList.add('over');\r\n                this.dragPos = this.columns.length;\r\n            } else {\r\n                this.tableOption.classList.remove('over');\r\n            }\r\n            e.dataTransfer.dropEffect = 'move';  // See the section on the DataTransfer object.\r\n        } else if (type === 'drop') {\r\n            // this / e.target is current target element.\r\n            if (e.stopPropagation) {\r\n                e.stopPropagation(); // stops the browser from redirecting.\r\n            }\r\n            if (this.movePos === this.dragPos) {\r\n                return;\r\n            }\r\n            // movePos -> dragPos\r\n            // See the section on the DataTransfer object.\r\n            // DataModel\r\n            this.columns.splice(this.movePos, 1);\r\n            if (this.movePos >= this.dragPos) {\r\n                this.columns.splice(this.dragPos, 0, this.moveElement);\r\n            } else {\r\n                this.columns.splice(this.dragPos - 1, 0, this.moveElement);\r\n            }\r\n\r\n            // Header Line\r\n            let line: HTMLElement = this.moveElement.$element.parentElement;\r\n            line.removeChild(this.moveElement.$element);\r\n            if (this.dragPos < this.columns.length) {\r\n                line.insertBefore(this.moveElement.$element, this.dragColumn.$element);\r\n            } else {\r\n                line.insertBefore(this.moveElement.$element, this.tableOption);\r\n            }\r\n\r\n            let oldElement: Element;\r\n            let newElement: Element;\r\n\r\n            // Now all Childs\r\n            for (let i = 0; i < this.$bodysection.children.length; i++) {\r\n                // Each line\r\n                line = <HTMLElement>this.$bodysection.children.item(i);\r\n                oldElement = line.children.item(this.movePos);\r\n                newElement = line.children.item(this.dragPos);\r\n                line.removeChild(oldElement);\r\n                line.insertBefore(oldElement, newElement);\r\n            }\r\n        } else if (type === 'dragend') {\r\n            // this/e.target is the source node.\r\n            this.moveElement.$element.style.opacity = '1';\r\n            for (let i = 0; i < this.columns.length; i++) {\r\n                this.columns[i].$element.classList.remove('over');\r\n            }\r\n            this.tableOption.classList.remove('over');\r\n        }\r\n    }\r\n\r\n    private addOptionItem(label: string, parent: HTMLElement, sub: boolean): HTMLElement {\r\n        let labelControl;\r\n        if (label) {\r\n            labelControl = document.createElement('a');\r\n            labelControl.appendChild(document.createTextNode(label));\r\n            labelControl.href = 'javascript:void(0);';\r\n            parent.appendChild(labelControl);\r\n        }\r\n        if (sub) {\r\n            let context = document.createElement('div');\r\n            context.classList.add('dropdown-content');\r\n            context.style.setProperty('position', 'absolute');\r\n            parent.appendChild(context);\r\n\r\n            /* When the user clicks on the button,\r\n             toggle between hiding and showing the dropdown content */\r\n            parent.addEventListener(\r\n                'click',\r\n                function () {\r\n                    context.classList.toggle('show');\r\n                },\r\n                false);\r\n            return context;\r\n        }\r\n        return labelControl;\r\n    }\r\n\r\n    private registerEvents(events: string[]) {\r\n        let that = this;\r\n        for (let i = 0; i < events.length; i++) {\r\n            this.$view.addEventListener(events[i], function (evt) {\r\n                return that.tableEvent(events[i], evt);\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\nclass Column {\r\n    label: string;\r\n    attribute: string;\r\n    $element: HTMLTableHeaderCellElement;\r\n    $resize: HTMLDivElement;\r\n    visible: boolean;\r\n}\r\n","import { AutoComplete } from './AutoComplete';\r\nimport { BR } from './BR';\r\nimport { Div } from './Div';\r\nimport { Label } from './Label';\r\n\r\nexport * from './Node';\r\nexport * from './Class';\r\nexport * from './SO';\r\nexport * from './Symbol';\r\n\r\nexport * from './BR';\r\nexport * from './Button';\r\nexport * from './Div';\r\nexport * from './Form';\r\nexport * from './Input';\r\nexport * from './Label';\r\nexport * from './Table';\r\nexport * from './HTML';\r\nexport * from './Dice';\r\nexport * from './AutoComplete';\r\nexport * from './Attribute';\r\nexport * from './Method';\r\nexport * from './ClazzProperty';\r\n\r\nnew AutoComplete();\r\nnew BR();\r\nnew Div();\r\nnew Label();\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class AddNode implements EventHandler {\r\n\r\n    public MIN_SIZE_TO_ADD_NODE: number = 30;\r\n    public MIN_SIZE_TO_ADD_TEXT: number = 10;\r\n    private graph: Graph;\r\n    private svgRect: SVGSVGElement;\r\n    private svgGroupAddNode: SVGSVGElement;\r\n    private svgTextAddNode: SVGSVGElement;\r\n    private svgTextRectAddNode: SVGSVGElement;\r\n    private isRectDrawing: boolean;\r\n    private isDrawToLeft: boolean;\r\n    private isDrawToTop: boolean;\r\n    private isBigEnoughForAddNode: boolean;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(AddNode.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(AddNode.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!this.canHandle()) {\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element.id !== 'RootElement') {\r\n            return false;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element.id === 'RootElement') {\r\n                    this.start(event, element);\r\n\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mousemove':\r\n                this.drawRect(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.removeRect();\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.addNode();\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawRect(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isRectDrawing) {\r\n            return;\r\n        }\r\n\r\n        evt.stopPropagation();\r\n\r\n        let width = Util.getEventX(evt) - this.x;\r\n        let height = Util.getEventY(evt) - this.y;\r\n\r\n        // rectangle is in a negative area, drawn to upper case. not possibble with svg\r\n        if (width < 0) {\r\n            this.isDrawToLeft = true;\r\n            width *= -1;\r\n        } else {\r\n            this.isDrawToLeft = false;\r\n        }\r\n\r\n        if (height < 0) {\r\n            this.isDrawToTop = true;\r\n            height *= -1;\r\n        } else {\r\n            this.isDrawToTop = false;\r\n        }\r\n\r\n        if (width > this.MIN_SIZE_TO_ADD_NODE && height > this.MIN_SIZE_TO_ADD_NODE) {\r\n            this.isBigEnoughForAddNode = true;\r\n        } else {\r\n            this.isBigEnoughForAddNode = false;\r\n        }\r\n\r\n        this.graph.root.style.cursor = 'pointer';\r\n\r\n        // if line wasnt draw\r\n        if (!this.svgRect) {\r\n\r\n            let rectAddNode = Util.createShape({\r\n                tag: 'rect',\r\n                id: 'addNodeRect',\r\n                x: this.x,\r\n                y: this.y,\r\n                width: 1,\r\n                height: 1,\r\n                class: 'SVGAddNode'\r\n            });\r\n\r\n            let group = Util.createShape({ tag: 'g', id: 'groupAddNode' });\r\n            group.appendChild(rectAddNode);\r\n\r\n            this.graph.root.appendChild(group);\r\n            this.svgRect = rectAddNode;\r\n            this.svgGroupAddNode = group;\r\n        }\r\n        else {\r\n\r\n            let svgRectBBox = this.svgRect.getBBox();\r\n\r\n            // if rect is big enough, show text as helper\r\n            if ((svgRectBBox.width > this.MIN_SIZE_TO_ADD_TEXT\r\n                || svgRectBBox.height > this.MIN_SIZE_TO_ADD_TEXT) && !this.svgTextAddNode) {\r\n\r\n                let textAddNode = Util.createShape({\r\n                    tag: 'text',\r\n                    x: this.x,\r\n                    y: this.y - 5,\r\n                    'font-family': 'Verdana',\r\n                    'font-size': 12,\r\n                    fill: 'black'\r\n                });\r\n                textAddNode.textContent = 'Hold on and move to create a new class';\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n\r\n\r\n                // get correct size of text node\r\n                let sizeClientRect: ClientRect = textAddNode.getBoundingClientRect();\r\n\r\n                let rectBackgroundForText = Util.createShape({\r\n                    tag: 'rect',\r\n                    x: this.x,\r\n                    y: this.y - sizeClientRect.height,\r\n                    width: sizeClientRect.width,\r\n                    height: sizeClientRect.height,\r\n                    fill: '#DDD',\r\n                    'stroke-width': 0\r\n                });\r\n\r\n                this.svgTextRectAddNode = rectBackgroundForText;\r\n                this.svgTextAddNode = textAddNode;\r\n                this.svgGroupAddNode.appendChild(rectBackgroundForText);\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n            }\r\n\r\n            if (this.isDrawToLeft) {\r\n                this.svgRect.setAttributeNS(null, 'x', '' + Util.getEventX(evt));\r\n            }\r\n\r\n            if (this.isDrawToTop) {\r\n                this.svgRect.setAttributeNS(null, 'y', '' + Util.getEventY(evt));\r\n            }\r\n\r\n            // set width and height\r\n            this.svgRect.setAttributeNS(null, 'width', width.toString());\r\n            this.svgRect.setAttributeNS(null, 'height', height.toString());\r\n\r\n            // set color\r\n            if (this.isBigEnoughForAddNode) {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode-ready');\r\n\r\n                // draw text\r\n            }\r\n            else {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeRect(): void {\r\n        this.isRectDrawing = false;\r\n        this.isBigEnoughForAddNode = false;\r\n\r\n        this.graph.root.style.cursor = 'default';\r\n\r\n        if (this.svgGroupAddNode) {\r\n            this.graph.root.removeChild(this.svgGroupAddNode);\r\n            this.svgGroupAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgRect) {\r\n            this.svgRect = undefined;\r\n        }\r\n\r\n        if (this.svgTextAddNode) {\r\n            this.svgTextAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgTextRectAddNode) {\r\n            this.svgTextRectAddNode = undefined;\r\n        }\r\n    }\r\n\r\n    private addNode(): void {\r\n\r\n        if (!this.isBigEnoughForAddNode) {\r\n            this.removeRect();\r\n            return;\r\n        }\r\n\r\n        this.removeRect();\r\n        let node = this.graph.addElementWithValues('Class', { x: this.x, y: this.y });\r\n        this.graph.drawElement(node);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isRectDrawing) {\r\n            return;\r\n        }\r\n        this.isRectDrawing = true;\r\n\r\n        this.x = Util.getEventX(evt);\r\n        this.y = Util.getEventY(evt);\r\n    }\r\n\r\n}\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement, Point } from '../elements/BaseElements';\r\nimport { GraphModel } from '../elements/Model';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Control } from '../Control';\r\nimport { Util } from '../util';\r\n\r\nexport class Drag implements EventHandler {\r\n\r\n    private element: DiagramElement;\r\n    private svgElement: SVGSVGElement;\r\n    private dragging = false;\r\n    private reinsert = false;\r\n    private mouseOffset = new Point();\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        if (!this.canHandle()) {\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if ((!this.dragging) && (element.id !== 'RootElement')) {\r\n                    this.element = element;\r\n                    this.svgElement = <SVGSVGElement>element.$view;\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mouseup':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n\r\n                break;\r\n            case 'mousemove':\r\n                if (this.dragging) {\r\n                    this.drag(event, element);\r\n                }\r\n                break;\r\n            case 'mouseleave':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Drag.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Drag.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private reset() {\r\n        this.dragging = false;\r\n        this.svgElement.style.cursor = 'pointer';\r\n\r\n        /*  WORKAROUND\r\n            Chrome got problem with the Node.appendChild() method.\r\n            Sometimes it works, sometimes not.\r\n            So the background is, in the drag method will the current element be appended\r\n            to front of the svg root.\r\n            If this happend, the click event won't fire.\r\n            So it will be fired manually.\r\n            This problem occurs only in chrome.\r\n        */\r\n        if (Util.isChrome()) {\r\n            let clickEvt = Util.createCustomEvent('click');\r\n            this.svgElement.dispatchEvent(clickEvt);\r\n        }\r\n    }\r\n\r\n    private start(evt: Event | any, element: Control) {\r\n\r\n        this.dragging = true;\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n        this.reinsert = true;\r\n\r\n        this.svgElement.style.cursor = 'move';\r\n    }\r\n\r\n    private drag(evt: Event | any, element: DiagramElement) {\r\n\r\n        if (this.reinsert) {\r\n            if (this.element.id !== 'RootElement') {\r\n                // nesseccary to set the dragged object on top of svg children\r\n                this.graph.root.appendChild(this.svgElement);\r\n            }\r\n\r\n            let dragEvent = Util.createCustomEvent('drag');\r\n            element.$view.dispatchEvent(dragEvent);\r\n        }\r\n        this.reinsert = false;\r\n\r\n        evt.stopPropagation();\r\n\r\n        const translation = this.svgElement.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        const sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        const transX = sx + evt.clientX - this.mouseOffset.x;\r\n        const transY = sy + evt.clientY - this.mouseOffset.y;\r\n        this.svgElement.setAttributeNS(null, 'transform', 'translate(' + transX + ' ' + transY + ')');\r\n        this.element.getPos().addNum(transX - sx, transY - sy);\r\n\r\n        if (this.element instanceof Node) {\r\n            (<Node>this.element).redrawEdges();\r\n        }\r\n\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n\r\n\r\n        // resize svg root\r\n        let maxX = this.element.getPos().x + this.element.getSize().x;\r\n        let maxY = this.element.getPos().y + this.element.getSize().y;\r\n\r\n        let domRectRoot = this.graph.root.getBoundingClientRect();\r\n        if(!domRectRoot){\r\n            return;\r\n        }\r\n\r\n        if(maxX > domRectRoot.width){\r\n            this.graph.root.setAttributeNS(null, 'width', '' + maxX);\r\n        }\r\n        \r\n        if(maxY > domRectRoot.height){\r\n            this.graph.root.setAttributeNS(null, 'height', '' + maxY);\r\n        }\r\n    }\r\n}\r\n","import PropertyChangeSupport from '../PropertyChangeSupport';\r\nimport Data from '../Data';\r\nimport {Adapter} from '../Adapter';\r\nimport ClazzProperty from '../elements/nodes/ClazzProperty';\r\n\r\nexport class GraphListener implements PropertyChangeSupport {\r\n    private $owner: ClazzProperty;\r\n\r\n    constructor(owner: ClazzProperty) {\r\n        this.$owner = owner;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        let adapter = this.$owner.getRoot().getAdapter();\r\n        if (adapter) {\r\n            // messages.add(\"{\\\"class\\\":\\\"de.uniks.networkparser.test.model.House\\\",\\\"id\\\":\\\"H1\\\",\\\"rem\\\":{\\\"floor\\\":4},\\\"upd\\\":{\\\"floor\\\":42}}\");\r\n            let myId =  this.$owner.$owner.getId();\r\n            if (myId && myId.length > 0) {\r\n                let pos = myId.indexOf(':');\r\n                if (pos > 0) {\r\n                    myId = myId.substring(0, pos).trim();\r\n                }\r\n            }\r\n            let myName = this.$owner.getName();\r\n            let remJson = {};\r\n            remJson[myName] = oldValue;\r\n            let updJson = {};\r\n            updJson[myName] = newValue;\r\n            let json = {};\r\n            json['id'] = myId;\r\n            json['rem'] = remJson;\r\n            json['upd'] = updJson;\r\n            let message = JSON.stringify(json);\r\n            (<Adapter> adapter).update(message);\r\n        }\r\n    }\r\n}\r\n","import {Graph} from '../elements/';\r\nimport {EventHandler, EventBus} from '../EventBus';\r\nimport {DiagramElement} from '../elements/';\r\nimport {Util} from '../util';\r\n\r\nexport class ImportFile implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(ImportFile.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(ImportFile.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        let type: string = typeof event;\r\n        if (type !== 'DragEvent') {\r\n            return false;\r\n        }\r\n        let evt: DragEvent = <DragEvent>event;\r\n        if (evt.type === 'dragover') {\r\n            this.handleDragOver(evt);\r\n        } else if (evt.type === 'dragleave') {\r\n            if (this.graph.$view !== evt.target) {\r\n                return false;\r\n            }\r\n            this.setBoardStyle('dragleave');\r\n        } else if (evt.type === 'drop') {\r\n            this.handleLoadFile(evt);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public setBoardStyle(typ: string): boolean {\r\n        let b = this.graph.$view;\r\n        Util.removeClass(b, 'Error');\r\n        Util.removeClass(b, 'Ok');\r\n        Util.removeClass(b, 'Add');\r\n        if (typ === 'dragleave') {\r\n            if (b['errorText']) {\r\n                b.removeChild(b['errorText']);\r\n                b['errorText'] = null;\r\n            }\r\n            return true;\r\n        }\r\n        Util.addClass(b, typ);\r\n        if (typ === 'Error') {\r\n            if (!b['errorText']) {\r\n                b['errorText'] = Util.create({tag: 'div', style: 'margin-top: 30%', value: 'NO TEXTFILE'});\r\n                b.appendChild(b['errorText']);\r\n            }\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private handleLoadFile(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n\r\n        let files = evt.dataTransfer.files; // FileList object.\r\n\r\n        if (files.length > 1) {\r\n            evt.dataTransfer.dropEffect = 'none';\r\n            return;\r\n        }\r\n\r\n        // files is a FileList of File objects. List some properties.\r\n        let reader  = new FileReader();\r\n        let output = [];\r\n        let htmlResult = '';\r\n        let that = this;\r\n        for (let i = 0, f; f = files[i]; i++) {\r\n            reader.onload = function(event) {\r\n                htmlResult = event.target['result'];\r\n                console.log('fileContent: ' + htmlResult);\r\n\r\n                // CHANGE TO INTERNAL OBJECT\r\n                if (that.graph) {\r\n                    that.graph.import(htmlResult);\r\n                }\r\n            };\r\n            reader.readAsText(f);\r\n        }\r\n        this.setBoardStyle('dragleave');\r\n    }\r\n\r\n    private handleDragOver(evt: DragEvent): void {\r\n        let error: boolean = true, n: string, f;\r\n        let files = evt.dataTransfer.files;\r\n        // process all File objects\r\n        if (files && files.length > 0) {\r\n            for (let i: number = 0; i < files.length; i += 1) {\r\n                f = files[i];\r\n                if (f.type.indexOf('text') === 0) {\r\n                    error = false;\r\n                } else if (f.type === '') {\r\n                    n = f.name.toLowerCase();\r\n                    if (n.indexOf('json', n.length - 4) !== -1) {\r\n                        error = false;\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            let items = evt.dataTransfer.items;\r\n            if (items && items.length > 0) {\r\n                for (let z = 0; z < items.length; z ++) {\r\n                    if (items[z].type === '' || items[z].type === 'text/plain') {\r\n                        error = false;\r\n                    }\r\n                }\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.\r\n        if (error) {\r\n            this.dragStyler(evt, 'Error');\r\n        } else if (evt.ctrlKey) {\r\n            this.dragStyler(evt, 'Add');\r\n        } else {\r\n            this.dragStyler(evt, 'Ok');\r\n        }\r\n        /* //evt.target['className'] += ' diagramLoadFile';\r\n        '//console.log('handDragOver');*/\r\n    }\r\n\r\n    private dragStyler(event: Event, typ: string) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n        this.setBoardStyle(typ);\r\n    }\r\n\r\n    private handleDragLeave(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n        evt.dataTransfer.dropEffect = 'link'; // Explicitly show this is a copy.\r\n        evt.target['className'] = 'diagram';\r\n        console.log('handDragLeave');\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Class } from '../elements/nodes/Class';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Association } from '../elements/index';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class NewEdge implements EventHandler {\r\n    private graph: Graph;\r\n    private svgLine: SVGSVGElement;\r\n    private isEdgeDrawing: boolean;\r\n    private sourceNode: Node;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    private lastTargetNode: Node;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(NewEdge.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(NewEdge.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!((<KeyboardEvent>event).ctrlKey || EventBus.isHandlerActiveOrFree('NewEdge', true))) {\r\n            this.removeLine();\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element instanceof Node) {\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n\r\n            case 'mousemove':\r\n                this.drawEdge(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.setNewEdgeToNode(event);\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default: break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawEdge(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        let lineToX = Util.getEventX(evt);\r\n        let lineToy = Util.getEventY(evt);\r\n\r\n        let path = `M${this.x} ${this.y} L${lineToX} ${lineToy}`;\r\n        // if line wasnt draw\r\n        if (!this.svgLine) {\r\n\r\n            let attr = {\r\n                tag: 'path',\r\n                id: 'newEdgePath',\r\n                d: path,\r\n                class: 'SVGEdge'\r\n            };\r\n\r\n            let shape = Util.createShape(attr);\r\n            this.svgLine = shape;\r\n\r\n            this.graph.root.appendChild(shape);\r\n            this.graph.root.appendChild(this.sourceNode.$view);\r\n        }\r\n        else {\r\n\r\n            // set new L path\r\n            this.svgLine.setAttributeNS(null, 'd', path);\r\n\r\n            // get node from position\r\n            let targetNode = this.graph.$graphModel.getNodeByPosition(Util.getEventX(evt), Util.getEventY(evt));\r\n\r\n            // if some targetnode is available, so highlight the node\r\n            if (targetNode) {\r\n\r\n                // reset the last one\r\n                if (this.lastTargetNode && this.lastTargetNode.id !== targetNode.id) {\r\n                    this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n                }\r\n\r\n                this.lastTargetNode = targetNode;\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz-drawedge');\r\n            }\r\n            else if (this.lastTargetNode) {\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeLine(): void {\r\n        this.isEdgeDrawing = false;\r\n\r\n        if (this.svgLine) {\r\n            this.graph.root.removeChild(this.svgLine);\r\n            this.svgLine = null;\r\n        }\r\n\r\n        if (this.lastTargetNode) {\r\n            this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n        }\r\n    }\r\n\r\n    private setNewEdgeToNode(event: Event | any): void {\r\n        // get node from position\r\n        let targetNode = this.graph.$graphModel\r\n            .getNodeByPosition(Util.getEventX(event), Util.getEventY(event));\r\n\r\n        if (!targetNode) {\r\n            this.removeLine();\r\n\r\n            return;\r\n        }\r\n\r\n        this.removeLine();\r\n        let edgeType = this.sourceNode.$defaulEdgeType || 'Association';\r\n\r\n        let jsonData = {\r\n            type: edgeType,\r\n            source: this.sourceNode.id,\r\n            target: targetNode.id\r\n        };\r\n\r\n        let newEdge = this.graph.$graphModel.addEdge(<any>jsonData, true);\r\n        this.graph.drawElement(newEdge);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        this.isEdgeDrawing = true;\r\n        this.sourceNode = element as Class;\r\n\r\n        this.x = this.sourceNode.getPos().x + (this.sourceNode.getSize().x / 2);\r\n        this.y = this.sourceNode.getPos().y + (this.sourceNode.getSize().y / 2);\r\n\r\n        // TODO: get this into util or select\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Node } from '../elements/nodes';\r\nimport { Association } from '../elements/edges';\r\nimport { Util } from '../util';\r\nimport { SymbolLibary } from '../elements/nodes/Symbol';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\nimport Attribute from '../elements/nodes/Attribute';\r\n\r\nexport class Select implements EventHandler {\r\n\r\n    private deleteShape: SVGSVGElement;\r\n    private addEdgeShape: SVGSVGElement;\r\n    private copyNodeShape: SVGSVGElement;\r\n    private graph: Graph;\r\n    private padding = 5;\r\n\r\n    private lastSelectedNode: Element;\r\n    private lastSelectedEdge: Element;\r\n\r\n    private isDragged: boolean;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.deleteShape = SymbolLibary.drawSVG({ type: 'Basket', background: true, id: 'trashcan', tooltip: 'Delete class' });\r\n        this.copyNodeShape = SymbolLibary.drawSVG({ type: 'Copynode', background: true, id: 'copyNode', tooltip: 'Copy class' });\r\n        this.addEdgeShape = SymbolLibary.drawSVG({ type: 'Edgeicon', background: true, id: 'addEdge', tooltip: 'Click and drag to connect this class' });\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        let x = Util.getEventX(event);\r\n        let y = Util.getEventY(event);\r\n\r\n        event.stopPropagation();\r\n        if (event.type === 'drag') {\r\n            this.isDragged = true;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            if (element instanceof Node) {\r\n                this.lastSelectedNode = <Element>element.$view;\r\n            }\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n        }\r\n\r\n        if (event.target['id'] === 'background' || element === this.graph.$graphModel) {\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let e = <Node>element;\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.graph.root.appendChild(this.addEdgeShape);\r\n            this.graph.root.appendChild(this.copyNodeShape);\r\n            this.graph.root.appendChild(element.$view);\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'visible');\r\n\r\n            let x = (e.getPos().x + e.getSize().x) + 5;\r\n            let y = e.getPos().y;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y + this.padding})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.copyNodeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 40 + this.padding})`);\r\n            this.copyNodeShape.onclick = (evt) => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let copyClass = (element).copy();\r\n                copyClass.withPos(nextFreePosition.x, nextFreePosition.y);\r\n                this.graph.drawElement(copyClass);\r\n            };\r\n\r\n            this.addEdgeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 80 + this.padding})`);\r\n            this.addEdgeShape.onmousedown = function () {\r\n                EventBus.setActiveHandler('NewEdge');\r\n                element.$view.dispatchEvent(Util.createCustomEvent('mousedown'));\r\n            };\r\n        }\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let clazz = <Node>element;\r\n\r\n            if (Util.isChrome()) {\r\n                if (this.lastSelectedNode && element.id === this.lastSelectedNode.id && !this.isDragged) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            this.isDragged = false;\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            this.lastSelectedNode = <Element>element.$view;\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete class');\r\n\r\n            // draw textbox to edit clazz in one line\r\n            let divInlineEdit = document.createElement('div');\r\n            divInlineEdit.id = 'inlineEdit';\r\n            divInlineEdit.style.position = 'absolute';\r\n            divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n            divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n            divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n            divInlineEdit.style.zIndex = '42';\r\n\r\n            let inputText = document.createElement('input');\r\n            inputText.type = 'text';\r\n            inputText.style.width = '100%';\r\n            inputText.placeholder = 'Add properties, edit label';\r\n\r\n            divInlineEdit.appendChild(inputText);\r\n            document.body.appendChild(divInlineEdit);\r\n\r\n            inputText.addEventListener('focusout', (evt) => {\r\n\r\n                if (Util.isChrome()) {\r\n                    // only if input is empty, remove the inline edit function\r\n                    if ((!inputText.value || inputText.value.length === 0) && (!this.lastSelectedNode || element.id !== this.lastSelectedNode.id)) {\r\n                        this.removeLastInlineEdit();\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                // only if input is empty, remove the inline edit function\r\n                if ((!inputText.value || inputText.value.length === 0)) {\r\n                    this.removeLastInlineEdit();\r\n                }\r\n            });\r\n\r\n            let g = this.graph;\r\n            let propertyTypes: string[] = ['boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'short', 'String', 'void'];\r\n            inputText.addEventListener('keydown', function (evt) {\r\n\r\n                let keyCode = (<any>evt).which;\r\n                let inputValue = <any>inputText.value;\r\n\r\n                if (Util.endsWith(inputValue, ':') && !document.getElementById('selectPropertyType')) {\r\n                    let selectType = document.createElement('select');\r\n                    selectType.id = 'selectPropertyType';\r\n                    selectType.style.width = '100%';\r\n\r\n                    for (let type of propertyTypes) {\r\n                        let selectOption = document.createElement('option');\r\n                        selectOption.value = type;\r\n                        selectOption.innerHTML = type;\r\n                        selectType.appendChild(selectOption);\r\n                    }\r\n\r\n                    selectType.addEventListener('change', function (evt) {\r\n                        let inputValueSplitted = inputValue.split(':');\r\n                        let selectedPropertyType = selectType.options[selectType.selectedIndex].value;\r\n\r\n                        if (inputValueSplitted.length >= 1) {\r\n                            inputText.value = inputValueSplitted[0].trim() + ' : ' + selectedPropertyType;\r\n                            inputText.focus();\r\n                        }\r\n                    });\r\n\r\n                    divInlineEdit.appendChild(selectType);\r\n                }\r\n                else if (!Util.includes(inputValue, ':')) {\r\n                    let selectType = document.getElementById('selectPropertyType');\r\n\r\n                    if (selectType) {\r\n                        selectType.remove();\r\n                    }\r\n                }\r\n\r\n                if (keyCode !== 13) {\r\n                    return;\r\n                }\r\n\r\n                // attribute\r\n                if ((Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) === false) {\r\n                    if (Util.includes(inputValue, ':')) {\r\n                        clazz.addAttribute(inputValue.trim());\r\n                        clazz.reDraw();\r\n                    } else if (Util.includes(inputValue, '=') ) {\r\n                        let attr: Attribute = null;\r\n                        let name = inputValue.substring(0, inputValue.indexOf('=')).trim();\r\n                        for (let child of clazz.getAttributes() ) {\r\n                            if ( name === child.getName()) {\r\n                                attr = child;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (attr) {\r\n                            attr.updateValue(inputValue.substring(inputValue.indexOf('=') + 1).trim());\r\n                        }\r\n                        clazz.reDraw();\r\n                    }\r\n                }\r\n\r\n                // method\r\n                else if (Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) {\r\n                    clazz.addMethod(inputValue.trim());\r\n                    clazz.reDraw();\r\n                }\r\n                // label\r\n                else if (inputValue.trim().split(' ').length === 1 && inputValue.trim().length > 0) {\r\n                    clazz.updateLabel(inputValue.trim());\r\n                }\r\n\r\n                // reset size\r\n                divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n                divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n                divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n\r\n                inputText.value = '';\r\n\r\n                // remove combobox to select type of property\r\n                let selectType = document.getElementById('selectPropertyType');\r\n\r\n                if (selectType) {\r\n                    selectType.remove();\r\n                }\r\n\r\n                // TODO: reload propertiespanel. not working!\r\n                // event wont dispatch\r\n                // let customEvt = Util.createCustomEvent(EventBus.RELOADPROPERTIES);\r\n                // element.$view.dispatchEvent(customEvt);\r\n            });\r\n\r\n            (<any>divInlineEdit.children[0]).focus();\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Association) {\r\n            this.graph.root.appendChild(element.$view);\r\n            this.graph.root.appendChild(element.$sNode.$view);\r\n            this.graph.root.appendChild(element.$tNode.$view);\r\n\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete edge');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            let edge = <Association>element;\r\n            this.lastSelectedEdge = edge.$view;\r\n\r\n            Util.addClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Select.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Select.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private setTooltipOfShape(shape: SVGSVGElement, tooltip: string): void {\r\n        if (!shape || !shape.hasChildNodes()) {\r\n            return;\r\n        }\r\n\r\n        let titleElement = <SVGSVGElement>shape.childNodes[0];\r\n        if (!titleElement || titleElement.tagName !== 'title') {\r\n            return;\r\n        }\r\n\r\n        titleElement.textContent = tooltip;\r\n    }\r\n\r\n    private resetLastSelectedElements() {\r\n        // reset the last one\r\n        if (this.lastSelectedNode) {\r\n            Util.removeClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.lastSelectedNode = undefined;\r\n        }\r\n\r\n        if (this.lastSelectedEdge) {\r\n            Util.removeClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n            this.lastSelectedEdge = undefined;\r\n        }\r\n\r\n        this.removeLastInlineEdit();\r\n    }\r\n\r\n    private removeLastInlineEdit(): void {\r\n        // remove last inline edit of clazz\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n\r\n            // its not supported in internet explorer\r\n            // lastInlineEdit.remove();\r\n        }\r\n    }\r\n\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\n\r\nexport class Zoom implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n    }\r\n\r\n    public handle(e: any, element: DiagramElement): boolean {\r\n        let delta = e.deltaY || e.wheelDeltaY || -e.wheelDelta;\r\n        let d = 1 + (delta / 1000);\r\n\r\n        let values = this.graph.root.getAttribute('viewBox').split(' ');\r\n        const newViewBox = `${values[0]} ${values[1]} ${parseInt(values[2]) * d} ${parseInt(values[3]) * d}`;\r\n        this.graph.root.setAttribute('viewBox', newViewBox);\r\n\r\n        e.preventDefault();\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Zoom.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Zoom.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n}\r\n","export * from './Drag';\r\nexport * from './Select';\r\nexport * from './Zoom';\r\nexport * from './NewEdge';\r\nexport * from './ImportFile';\r\nexport * from './AddNode';\r\n","import { Association } from '../elements/edges';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport Layout from './Layout';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\n\r\nexport class DagreLayout implements Layout {\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        if (!window['dagre']) {\r\n            return;\r\n        }\r\n        let model = graph.$graphModel;\r\n        let g = new window['dagre'].graphlib.Graph();\r\n\r\n        g.setGraph({ marginx: 100, marginy: 20 }).setDefaultEdgeLabel(function () {\r\n            return {};\r\n        });\r\n\r\n        for (let node of model.nodes) {\r\n            g.setNode(node.id, { width: node.getSize().x, height: node.getSize().y });\r\n        }\r\n\r\n        for (let edge of model.edges) {\r\n            g.setEdge(edge.$sNode.id, edge.$tNode.id);\r\n        }\r\n\r\n        window['dagre'].layout(g);\r\n\r\n        g.nodes().forEach(function (nodeId: string) {\r\n            for (let node of model.nodes) {\r\n                if (node.id === nodeId) {\r\n                    node.withPos(g.node(nodeId).x - g.node(nodeId).width / 2, g.node(nodeId).y - g.node(nodeId).height / 2);\r\n                }\r\n            }\r\n        });\r\n        g.edges().forEach(function (e: any) {\r\n            for (let edge of model.edges) {\r\n                if (edge.$sNode.id === e.v && edge.$tNode.id === e.w) {\r\n                    let size = g.edge(e).points.length;\r\n                    edge.clearPoints();\r\n                    for (let i = 0; i < size; i++) {\r\n                        let point: SVGPoint = g.edge(e).points[i];\r\n                        edge.addPoint(point.x, point.y);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n}\r\n","import {DiagramElement} from '../elements/BaseElements';\r\nimport Layout from './Layout';\r\nimport {Graph} from '../elements/Graph';\r\nimport {Association} from '../elements/edges/Association';\r\nimport {Node} from '../elements/nodes/Node';\r\nimport {Control} from '../Control';\r\n\r\nexport class LayoutGraphMin {\r\n    public nodes: Object = {};\r\n    public edges: Array<Object> = [];\r\n    public outEdges: Object = {};\r\n    public inEdges: Object = {};\r\n    public dummyNodes: Array<LayoutGraphNode> = [];\r\n    public dummyEdges: Object = {};\r\n    public count: number = 0;\r\n    public minRank: number = Number.POSITIVE_INFINITY;\r\n    public maxRank: number = 0;\r\n    public maxHeight: number = 0;\r\n    public maxWidth: number = 0;\r\n    public ranksep: number = 0;\r\n    public edgesLabel: Array<Object> = [];\r\n\r\n    public nodeCount(): number {\r\n        return this.count;\r\n    }\r\n\r\n    public node(id: string) {\r\n        return this.nodes[id];\r\n    }\r\n\r\n    public setNode(id: string, n: LayoutGraphNode) {\r\n        if (n && !this.nodes[id]) {\r\n            this.nodes[id] = n;\r\n            this.count = this.count + 1;\r\n        } else if (!n && this.nodes[id]) {\r\n            delete this.nodes[id];\r\n        }\r\n    }\r\n}\r\n\r\nexport class LayoutGraphNode {\r\n    public id: string;\r\n    public width: number;\r\n    public height: number;\r\n    public x: number;\r\n    public y: number;\r\n    public edgeObj: LayoutGraphEdge;\r\n    public rank: number;\r\n\r\n    constructor(id: string, width: number, height: number, x: number, y: number) {\r\n        this.id = id;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n\r\nexport class LayoutGraphEdge {\r\n    public source: string;\r\n    public target: string;\r\n}\r\n\r\n// \t\t\t\t######################################################### DagreGraph #########################################################\r\nexport class DagreLayoutMin implements Layout {\r\n    public static EDGE_KEY_DELIM = '\\x01';\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        let g, layoutNode, nodes, newEdge, edges;\r\n        let i, n, x, y, sId, tId, split = DagreLayoutMin.EDGE_KEY_DELIM;\r\n        let e: Association;\r\n\r\n        nodes = node['nodes'];\r\n        edges = node['edges'];\r\n        g = new LayoutGraphMin();\r\n\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            g.setNode(n.id, new LayoutGraphNode(n.id, n.getSize().x, n.getSize().y, n.getPos().x, n.getPos().y));\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            sId = this.getNodeId(e.$sNode);\r\n            tId = this.getNodeId(e.$tNode);\r\n            if (sId > tId) {\r\n                let tmp = tId;\r\n                tId = sId;\r\n                sId = tmp;\r\n            }\r\n            let idAB = sId + split + tId + split;\r\n            let idBA = tId + split + sId + split;\r\n            if (sId !== tId && g.edgesLabel.indexOf(idAB) < 0 && g.edgesLabel.indexOf(idBA) < 0) {\r\n                newEdge = {source: sId, target: tId, minlen: 1, weight: 1};\r\n                g.edges.push(newEdge);\r\n                g.edgesLabel.push(idAB);\r\n                // In Edges\r\n                if (!g.inEdges[tId]) {\r\n                    g.inEdges[tId] = [];\r\n                }\r\n                g.inEdges[tId].push(newEdge);\r\n\r\n                // Out Edges\r\n                if (!g.outEdges[sId]) {\r\n                    g.outEdges[sId] = [];\r\n                }\r\n                g.outEdges[sId].push(newEdge);\r\n            }\r\n        }\r\n        this.layouting(g);\r\n        // Set the layouting back\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            layoutNode = g.node(n.id);\r\n            x = n.getPos().x;\r\n            y = n.getPos().y;\r\n            if (x < 1 && y < 1) {\r\n                n.withPos(Math.ceil(layoutNode.x), Math.ceil(layoutNode.y));\r\n            }\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            // OBSOLETE method:  e.calc(graph.canvas);\r\n        }\r\n        graph.draw();\r\n    }\r\n\r\n    public getNodeId(node: Control): string {\r\n        if (node.$owner) {\r\n            return this.getNodeId(node.$owner) || node.id;\r\n        }\r\n        return node.id;\r\n    }\r\n\r\n    public layouting(g: LayoutGraphMin) {\r\n        this.longestPath(g);\r\n        this.normalizeRanks(g);\r\n        this.normalizeEdge(g);\r\n        // this.setSimpleOrder(g);\r\n        this.order(g);\r\n        g.ranksep = 25;\r\n        // remove Dummy\r\n        this.removeDummy(g);\r\n        this.position(g);\r\n    }\r\n\r\n    public setSimpleOrder(g: LayoutGraphMin) {\r\n        let i, n;\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            n.order = n.rank;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Applies heuristics to minimize edge crossings in the graph and sets the best\r\n     * order solution as an order attribute on each node.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Graph must be DAG\r\n     *    2. Graph nodes must be objects with a \"rank\" attribute\r\n     *    3. Graph edges must have the \"weight\" attribute\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Graph nodes will have an \"order\" attribute based on the results of the\r\n     *       algorithm.\r\n     */\r\n    public order(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        let visited = {};\r\n        let node, n, order, i;\r\n        for (i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (n in g.nodes) {\r\n            if (visited[n]) {\r\n                continue;\r\n            }\r\n            visited[n] = true;\r\n            node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank].push(n);\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                g.nodes[layering[order][n]].order = parseInt(n);\r\n            }\r\n        }\r\n        // Fix resolve conflict\r\n        for (order in layering) {\r\n            if (layering[order].length > 1) {\r\n                for (n in layering[order]) {\r\n                    if (layering[order].hasOwnProperty(n) === false) {\r\n                        continue;\r\n                    }\r\n                    let name = layering[order][n];\r\n                    let sum = 0;\r\n                    let weight = 1;\r\n                    let edges = g.dummyEdges[name];\r\n                    if (edges) {\r\n                        for (i in edges) {\r\n                            if (edges.hasOwnProperty(i) === false) {\r\n                                continue;\r\n                            }\r\n                            let edge = edges[i];\r\n                            let nodeU = g.node(edge.target);\r\n                            sum = sum + (edge.weight * nodeU.order);\r\n                            weight = weight + edge.weight;\r\n                        }\r\n                    }\r\n                    g.node(name).barycenter = sum / weight;\r\n                    g.node(name).weight = weight;\r\n                }\r\n            } else if (layering[order].length > 0) {\r\n                for (n in layering[order]) {\r\n                    let name = layering[order][n];\r\n                    g.node(name).barycenter = 1;\r\n                    g.node(name).weight = 1;\r\n                }\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                let node = g.nodes[layering[order][n]];\r\n                node.order = parseInt(n) + node.barycenter * node.weight;\r\n                if (isNaN(node.order)) {\r\n                    console.log('ERROR');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public removeDummy(g: LayoutGraphMin) {\r\n        for (let z in g.dummyNodes) {\r\n            let node = g.dummyNodes[z];\r\n            g.setNode(node.id, null);\r\n        }\r\n        g.dummyNodes = [];\r\n        g.dummyEdges = {};\r\n    }\r\n\r\n    /*\r\n     * Breaks any long edges in the graph into short segments that span 1 layer\r\n     * each. This operation is undoable with the denormalize function.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. The input graph is a DAG.\r\n     *    2. Each node in the graph has a \"rank\" property.\r\n     *\r\n     * Post-condition:\r\n     *\r\n     *    1. All edges in the graph have a length of 1.\r\n     *    2. Dummy nodes are added where edges have been split into segments.\r\n     *    3. The graph is augmented with a \"dummyChains\" attribute which contains\r\n     *       the first dummy in each chain of dummy nodes produced.\r\n     */\r\n    public normalizeEdge(g: LayoutGraphMin): void {\r\n        let i: number = 1;\r\n        for (let id in g.edges) {\r\n            let e: LayoutGraphEdge = <LayoutGraphEdge>g.edges[id];\r\n            let v: string = e.source;\r\n            let vRank = g.node(v).rank;\r\n            const w: string = e.target;\r\n            const wRank: number = g.node(w).rank;\r\n            let name: string;\r\n\r\n            if (wRank === vRank + 1) {\r\n                continue;\r\n            }\r\n\r\n            let dummy;\r\n            for (vRank = vRank + 1; vRank < wRank; ++vRank) {\r\n                name = '_d' + e.source + e.target + (i++);\r\n                let newEdge = {source: v, target: name, minlen: 1, weight: 1};\r\n                dummy = new LayoutGraphNode(name, 0, 0, 0, 0);\r\n                dummy.edgeObj = e;\r\n                dummy.rank = vRank;\r\n                // Dummy Edges\r\n                if (!g.dummyEdges[v]) {\r\n                    g.dummyEdges[v] = [];\r\n                }\r\n                g.dummyEdges[v].push(newEdge);\r\n\r\n                g.dummyNodes.push(dummy);\r\n                g.setNode(dummy.id, dummy);\r\n                v = name;\r\n            }\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Initializes ranks for the input graph using the longest path algorithm. This\r\n     * algorithm scales well and is fast in practice, it yields rather poor\r\n     * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\r\n     * ranks wide and leaving edges longer than necessary. However, due to its\r\n     * speed, this algorithm is good for getting an initial ranking that can be fed\r\n     * into other algorithms.\r\n     *\r\n     * This algorithm does not normalize layers because it will be used by other\r\n     * algorithms in most cases. If using this algorithm directly, be sure to\r\n     * run normalize at the end.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Input graph is a DAG.\r\n     *    2. Input graph node labels can be assigned properties.\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Each node will be assign an (unnormalized) \"rank\" property.\r\n     */\r\n    public longestPath(g: LayoutGraphMin) {\r\n        let i, n, visited = [];\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            visited.push(i);\r\n            n.rank = this.findAllPaths(g, n, 0, visited);\r\n            g.minRank = Math.min(g.minRank, n.rank);\r\n        }\r\n    }\r\n\r\n    public findAllPaths(g: LayoutGraphMin, n: Node, currentCost: number, path: Array<String>) {\r\n        let min: number = 0;\r\n        let id: string;\r\n        let z: number;\r\n        let target;\r\n        if (g.outEdges[n.id]) {\r\n            for (z = 0; z < g.outEdges[n.id].length; z++) {\r\n                id = g.outEdges[n.id][z].target;\r\n                target = g.nodes[id];\r\n                if (path[id]) {\r\n                    min = Math.min(min, target.rank);\r\n                } else if (path.indexOf(id) < 0) {\r\n                    min = Math.min(min, this.findAllPaths(g, target, currentCost - 2, path));\r\n                } else {\r\n                    min = currentCost;\r\n                }\r\n            }\r\n            return min;\r\n        }\r\n        return currentCost;\r\n    }\r\n\r\n    /*\r\n     * Adjusts the ranks for all nodes in the graph such that all nodes v have\r\n     * rank(v) >= 0 and at least one node w has rank(w) = 0.\r\n     */\r\n    public normalizeRanks(g: LayoutGraphMin) {\r\n        let min = g.minRank;\r\n        let value;\r\n        g.maxRank = Number.NEGATIVE_INFINITY;\r\n        g.maxHeight = 0;\r\n        g.maxWidth = 0;\r\n        for (let i in g.nodes) {\r\n            let node = g.nodes[i];\r\n            if (node.rank !== undefined) {\r\n                node.rank -= min;\r\n                value = Math.abs(node.rank);\r\n                if (value > g.maxRank) {\r\n                    g.maxRank = value;\r\n                }\r\n                g.maxHeight = Math.max(g.maxHeight, node.height);\r\n                g.maxWidth = Math.max(g.maxWidth, node.width);\r\n            }\r\n        }\r\n    }\r\n\r\n    public position(g: LayoutGraphMin) {\r\n        this.positionY(g);\r\n        let list = this.positionX(g);\r\n        for (let i in list) {\r\n            for (let pos in list[i]) {\r\n                if (list[i].hasOwnProperty(pos) === false) {\r\n                    continue;\r\n                }\r\n                if (g.node(list[i][pos])) {\r\n                    g.node(list[i][pos]).x = parseInt(pos) * g.maxWidth;\r\n                }\r\n            }\r\n\r\n        }\r\n    }\r\n\r\n    public positionY(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        let rankSep = g.ranksep;\r\n        let prevY = 0;\r\n        for (let layer in layering) {\r\n            let maxHeight = g.maxHeight;\r\n            for (let v in layering[layer]) {\r\n                if (layering[layer].hasOwnProperty(v) === false) {\r\n                    continue;\r\n                }\r\n                let id = layering[layer][v];\r\n                g.nodes[id].y = prevY + maxHeight / 2;\r\n            }\r\n            prevY += maxHeight + rankSep;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\r\n     * function will produce a matrix with the ids of each node.\r\n     */\r\n    public buildLayerMatrix(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        for (let i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (let n in g.nodes) {\r\n            let node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank][node.order] = n;\r\n            }\r\n        }\r\n        return layering;\r\n    }\r\n\r\n    public positionX(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        return layering;\r\n    }\r\n}\r\n","import { Point } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport Layout from './Layout';\r\n\r\nexport class Random implements Layout {\r\n\r\n  public layout(graph: Graph) {\r\n\r\n    let model = graph.$graphModel;\r\n\r\n    if (model.nodes) {\r\n      for (let node of model.nodes) {\r\n        let pos: Point = node.getPos();\r\n        if (pos.x === 0 && pos.y === 0) {\r\n          let x = Util.getRandomInt(0, graph.canvasSize.width);\r\n          let y = Util.getRandomInt(0, graph.canvasSize.height);\r\n          node.withPos(x, y);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","export * from './DagreLayout';\r\nexport * from './Random';\r\nexport * from './DagreLayoutMin';\r\n\r\nimport {DagreLayout} from './DagreLayout';\r\nimport {DagreLayoutMin} from './DagreLayoutMin';\r\nimport {Random} from './Random';\r\nnew DagreLayout();\r\nnew DagreLayoutMin();\r\nnew Random();\r\n","import {VirtualKeyBoard} from './VirtualKeyBoard';\r\n\r\nexport {Point} from './elements/BaseElements';\r\nexport {Bridge, DelegateAdapter} from './Bridge';\r\nexport {Graph} from './elements/Graph';\r\nexport * from './elements/nodes';\r\nexport * from './elements/edges';\r\nexport * from './adapters';\r\nexport * from './UML';\r\nimport {Point} from './elements/BaseElements';\r\nimport {Graph} from './elements/Graph';\r\nimport {ClassEditor} from './elements/ClassEditor';\r\nimport {Bridge} from './Bridge';\r\nimport {Util} from './util';\r\nimport * as nodes  from './elements/nodes';\r\nimport * as edges from './elements/edges';\r\nimport {ScrumBoard} from './ScrumBoard';\r\n\r\nif (!window['Point']) {\r\n    window['Point'] = Point;\r\n    window['Graph'] = Graph;\r\n    window['bridge'] = new Bridge();\r\n    window['Util'] = Util;\r\n    window['Class'] = nodes.Class;\r\n    window['Association'] = edges.Association;\r\n    window['SymbolLibary'] = nodes.SymbolLibary;\r\n    window['ClassEditor'] = ClassEditor;\r\n    window['VirtualKeyBoard'] = VirtualKeyBoard;\r\n    window['ScrumBoard'] = ScrumBoard;\r\n}\r\n","'use strict';\r\nimport { CSS } from './CSS';\r\nimport { Node } from './elements/nodes/Node';\r\nimport { DiagramElement, Point } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport class Util {\r\n\r\n    public static isAutoSave: boolean;\r\n\r\n    static getRandomInt(min: number, max: number): number {\r\n        return Math.floor(Math.random() * (max - min + 1)) + min;\r\n    }\r\n\r\n    static createShape(attrs: any): SVGSVGElement {\r\n        let xmlns = attrs.xmlns || 'http://www.w3.org/2000/svg';\r\n        let shape = document.createElementNS(xmlns, attrs.tag);\r\n\r\n        for (let attr in attrs) {\r\n            if (!attrs.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr !== 'tag') {\r\n                shape.setAttribute(attr, attrs[attr]);\r\n\r\n            }\r\n        }\r\n        return <SVGSVGElement><any>shape;\r\n    }\r\n\r\n    static toPascalCase(value: string): string {\r\n        value = value.charAt(0).toUpperCase() + value.substring(1).toLowerCase();\r\n        return value;\r\n    }\r\n\r\n    static isSVG(tag: string): boolean {\r\n        let i,\r\n            list = ['svg', 'path', 'polygon', 'polyline', 'line', 'title', 'rect', 'filter', 'feGaussianBlur', 'feOffset', 'feBlend', 'linearGradient', 'stop', 'text', 'symbol', 'textPath', 'defs', 'fegaussianblur', 'feoffset', 'feblend', 'circle', 'ellipse', 'g'];\r\n        for (i = 0; i < list.length; i += 1) {\r\n            if (list[i] === tag) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    static createHTML(node: any): HTMLElement {\r\n        return <HTMLElement>this.create(node);\r\n    }\r\n    static create(node: any): Element {\r\n        let style, item, xmlns, key, tag, k;\r\n        if (document.createElementNS && (this.isSVG(node.tag) || node.xmlns)) {\r\n            if (node.xmlns) {\r\n                xmlns = node.xmlns;\r\n            } else {\r\n                xmlns = 'http://www.w3.org/2000/svg';\r\n            }\r\n            if (node.tag === 'img' && xmlns) {\r\n                item = document.createElementNS(xmlns, 'image');\r\n                item.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\r\n                item.setAttributeNS('http://www.w3.org/1999/xlink', 'href', node.src);\r\n            } else {\r\n                item = document.createElementNS(xmlns, node.tag);\r\n            }\r\n        } else {\r\n            item = document.createElement(node.tag);\r\n        }\r\n        tag = node.tag.toLowerCase();\r\n        for (key in node) {\r\n            if (!node.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            k = key.toLowerCase();\r\n            if (node[key] === null) {\r\n                continue;\r\n            }\r\n            if (k === 'tag' || k.charAt(0) === '$' || k === '$graphModel') {\r\n                continue;\r\n            }\r\n            if (k.charAt(0) === '#') {\r\n                item[k.substring(1)] = node[key];\r\n                continue;\r\n            }\r\n            if (k === 'rotate') {\r\n                item.setAttribute('transform', 'rotate(' + node[key] + ',' + node.$graphModel.x + ',' + node.$graphModel.y + ')');\r\n                continue;\r\n            }\r\n            if (k === 'value') {\r\n                if (!node[key]) {\r\n                    continue;\r\n                }\r\n                if (tag !== 'input') {\r\n                    if (tag === 'text') {// SVG\r\n                        item.appendChild(document.createTextNode(node[key]));\r\n                    } else {\r\n                        item.innerHTML = node[key];\r\n                    }\r\n                } else {\r\n                    item[key] = node[key];\r\n                }\r\n                continue;\r\n            }\r\n            if (k.indexOf('on') === 0) {\r\n                this.bind(item, k.substring(2), node[key]);\r\n                continue;\r\n            }\r\n            if (k.indexOf('-') >= 0) {\r\n                item.style[key] = node[key];\r\n            } else {\r\n                if (k === 'style' && typeof (node[key]) === 'object') {\r\n                    for (style in node[key]) {\r\n                        if (!node[key].hasOwnProperty(style)) {\r\n                            continue;\r\n                        }\r\n                        if (node[key][style]) {\r\n                            if ('transform' === style) {\r\n                                item.style.transform = node[key][style];\r\n                                item.style.msTransform = item.style.MozTransform = item.style.WebkitTransform = item.style.OTransform = node[key][style];\r\n                            } else {\r\n                                item.style[style] = node[key][style];\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    item.setAttribute(key, node[key]);\r\n                }\r\n            }\r\n        }\r\n        if (node.$parent) {\r\n            node.$parent.appendChild(item);\r\n        }\r\n        if (node.$graphModel) {\r\n            item.$graphModel = node.$graphModel;\r\n        }\r\n        return item;\r\n    }\r\n\r\n    static setSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttribute('width', value);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.setAttribute('height', value);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setAttributeSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttributeNS(null, 'width', value);\r\n        value = Util.getValue(height);\r\n        item.setAttributeNS(null, 'height', value);\r\n    }\r\n\r\n    static setStyleSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setPos(item: any, x: number, y: number): void {\r\n        if (item.x && item.x.baseVal) {\r\n            item.style.left = x + 'px';\r\n            item.style.top = y + 'px';\r\n        } else {\r\n            item.x = x;\r\n            item.y = y;\r\n        }\r\n    }\r\n\r\n    static getValue(value: string | number): number {\r\n        return parseInt(('0' + value).replace('px', ''), 10);\r\n    }\r\n\r\n    static isIE(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('.net') > -1;\r\n    }\r\n\r\n    static isEdge(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('edge') > -1;\r\n    }\r\n\r\n    static isFireFox(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n    }\r\n\r\n    static isSafari(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        return navigator.userAgent.toLowerCase().indexOf('safari') > -1 && !isEdge;\r\n    }\r\n\r\n    static isOpera(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('opera') > -1;\r\n    }\r\n\r\n    static isChrome(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        let isSafari = Util.isSafari();\r\n        return navigator.userAgent.toLowerCase().indexOf('chrome') > -1 && !isEdge && isSafari;\r\n    }\r\n\r\n    static getEventX(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetX'] : event.layerX;\r\n    }\r\n\r\n    static getEventY(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetY'] : event.layerY;\r\n    }\r\n\r\n    static getNumber(str: string): number {\r\n        return parseInt((str || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    static getStyle(styleProp: string): CSS {\r\n        let i, style, diff, current, ref, el = document.createElement('div'), css;\r\n        document.body.appendChild(el);\r\n        css = new CSS(styleProp);\r\n        ref = new CSS(styleProp, el).css;\r\n        style = window.getComputedStyle(el, null);\r\n        el.className = styleProp;\r\n        current = new CSS(styleProp, el).css;\r\n        diff = Util.getNumber(style.getPropertyValue('border-width'));\r\n        for (i in current) {\r\n            if (!current.hasOwnProperty(i)) {\r\n                continue;\r\n            }\r\n            if (i === 'width' || i === 'height') {\r\n                if (Util.getNumber(current[i]) !== 0 && Util.getNumber(current[i]) + diff * 2 !== Util.getNumber(ref[i])) {\r\n                    css.add(i, current[i]);\r\n                }\r\n            } else if (current[i] !== ref[i]) {\r\n                css.add(i, current[i]);\r\n            }\r\n        }\r\n        document.body.removeChild(el);\r\n        return css;\r\n    }\r\n\r\n    static sizeOf(item: string | any, node?: Node): ClientRect {\r\n        let board;\r\n        let rect: ClientRect;\r\n        let addBoard: boolean;\r\n        if (!item) {\r\n            return undefined;\r\n        }\r\n        if (node) {\r\n            board = node.$owner.$view;\r\n            addBoard = false;\r\n        }\r\n\r\n        if (!board) {\r\n            addBoard = true;\r\n            board = Util.createShape({ tag: 'svg', id: 'root', width: 200, height: 200 });\r\n            document.body.appendChild(board);\r\n        }\r\n        if (board.tagName === 'svg') {\r\n            if (typeof item === 'string') {\r\n                item = Util.create({ tag: 'text', $font: true, value: item });\r\n                item.setAttribute('width', '5px');\r\n            }\r\n        } else if (typeof item === 'string') {\r\n            item = document.createTextNode(item);\r\n        }\r\n        board.appendChild(item);\r\n        rect = item.getBoundingClientRect();\r\n        board.removeChild(item);\r\n\r\n        if (addBoard) {\r\n            document.body.removeChild(board);\r\n        }\r\n        return rect;\r\n    }\r\n\r\n    static getColor(style: string, defaultColor?: string) {\r\n        if (style) {\r\n            if (style.toLowerCase() === 'create') {\r\n                return '#008000';\r\n            }\r\n            if (style.toLowerCase() === 'nac') {\r\n                return '#FE3E3E';\r\n            }\r\n            if (style.indexOf('#') === 0) {\r\n                return style;\r\n            }\r\n        }\r\n        if (defaultColor) {\r\n            return defaultColor;\r\n        }\r\n        return '#000';\r\n    }\r\n\r\n    public static utf8$to$b64(str: string): string {\r\n        return window.btoa(encodeURIComponent(str));\r\n    }\r\n\r\n    public static showSVG(control: DiagramElement) {\r\n        let svg = Util.create({\r\n            tag: 'svg',\r\n            style: { left: control.getPos().x, top: control.getPos().y, position: 'absolute' }\r\n        });\r\n        let child = control.getSVG();\r\n        if (child) {\r\n            svg.appendChild(child);\r\n        }\r\n        Util.setSize(svg, control.getSize().x, control.getSize().y);\r\n        document.body.appendChild(svg);\r\n    }\r\n\r\n    public static toJson(ref: JSON | Object): Object {\r\n        let result = {};\r\n        return Util.copy(result, ref, false, false);\r\n    }\r\n\r\n    public static initControl(parent: Control, control: Control, type: string, id: string, json: JSON | Object) {\r\n        if (typeof control.init === 'function') {\r\n            control.init(parent, type, id);\r\n        }\r\n        if (typeof control.load === 'function') {\r\n            control.load(json);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * copy One Json into another\r\n     * @function\r\n     * @param ref reference Json\r\n     * @param src source Json\r\n     * @param full all attributes include privet $\r\n     * @param replace set the original reference or copy it\r\n     * @returns ref\r\n     * @name copy\r\n     */\r\n    public static copy(ref: JSON | Object, src: JSON | Object, full: boolean, replace: boolean) {\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (replace) {\r\n                        ref[i] = src[i];\r\n                        continue;\r\n                    }\r\n                    if (!ref[i]) {\r\n                        if (src[i] instanceof Array) {\r\n                            ref[i] = [];\r\n                        } else {\r\n                            ref[i] = {};\r\n                        }\r\n                    }\r\n                    Util.copy(ref[i], src[i], full, false);\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref[i] = src[i];\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    public static xmlstringify(text: string): string {\r\n        text = text.replace('<', '&lt;');\r\n        text = text.replace('>', '&gt;');\r\n        return text;\r\n    }\r\n\r\n    public static toXML(ref: JSON | Object | any, src: JSON | Object | any, full: boolean, doc: Document): any {\r\n        let name;\r\n        if (!ref) {\r\n            name = src.constructor.name;\r\n            doc = document.implementation.createDocument(null, name, null);\r\n            ref = doc.childNodes[0];\r\n        }\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (!ref.getAttribute(i)) {\r\n                        if (src[i] instanceof Array) {\r\n                            for (let c in src[i]) {\r\n                                if (!src[i].hasOwnProperty(c)) {\r\n                                    continue;\r\n                                }\r\n                                name = src[i][c].constructor.name;\r\n                                let child = doc.createElement(name);\r\n                                ref.appendChild(child);\r\n                                Util.toXML(child, src[i][c], full, doc);\r\n                            }\r\n                        } else {\r\n                            name = src[i].constructor.name;\r\n                            let child = doc.createElement(name);\r\n                            ref.appendChild(child);\r\n                            Util.toXML(child, src[i], full, doc);\r\n                        }\r\n                    } else {\r\n                        Util.toXML(ref.getAttribute(i), src[i], full, doc);\r\n                    }\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref.setAttribute(i, src[i]);\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    static Range(min: Point, max: Point, x: number, y: number) {\r\n        max.x = Math.max(max.x, x);\r\n        max.y = Math.max(max.y, y);\r\n        min.x = Math.min(min.x, x);\r\n        min.y = Math.min(min.y, y);\r\n    }\r\n\r\n    public static getPosition(m: number, n: number, entity: DiagramElement, refCenter: Point) {\r\n        let t, p = [], list, distance = [], min = 999999999, position, i, step = 15;\r\n        let pos: Point = entity.getPos();\r\n        let size: Point = entity.getSize();\r\n        list = [Point.LEFT, Point.RIGHT];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = this.getLRPosition(m, n, entity, list[i]);\r\n            if (t.y >= pos.y && t.y <= (pos.y + size.y + 1)) {\r\n                t.y += (entity['$' + list[i]] * step);\r\n                if (t.y > (pos.y + size.y)) {\r\n                    // Alternative\r\n                    t = Util.getUDPosition(m, n, entity, Point.DOWN, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        list = [Point.UP, Point.DOWN];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = Util.getUDPosition(m, n, entity, list[i]);\r\n            if (t.x >= pos.x && t.x <= (pos.x + size.x + 1)) {\r\n                t.x += (entity['$' + list[i]] * step);\r\n                if (t.x > (pos.x + size.x)) {\r\n                    // Alternative\r\n                    t = this.getLRPosition(m, n, entity, Point.RIGHT, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        for (i = 0; i < p.length; i += 1) {\r\n            if (distance[i] < min) {\r\n                min = distance[i];\r\n                position = p[i];\r\n            }\r\n        }\r\n        return position;\r\n    }\r\n\r\n    public static getUDPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let x, y: number = pos.y;\r\n        if (p === Point.DOWN) {\r\n            y += size.y;\r\n        }\r\n        x = (y - n) / m;\r\n        if (step) {\r\n            x += e['$' + p] * step;\r\n            if (x < pos.x) {\r\n                x = pos.x;\r\n            } else if (x > (pos.x + size.x)) {\r\n                x = pos.x + size.x;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static getLRPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let y: number, x: number = pos.x;\r\n        if (p === Point.RIGHT) {\r\n            x += size.x;\r\n        }\r\n        y = m * x + n;\r\n        if (step) {\r\n            y += e['$' + p] * step;\r\n            if (y < pos.y) {\r\n                y = pos.y;\r\n            } else if (y > (pos.y + size.y)) {\r\n                y = pos.y + size.y;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static hasClass(element: Element, cls: string) {\r\n        let className = element.getAttribute('class');\r\n        return className.indexOf(cls) > 0;\r\n    }\r\n    public static addClass(element: Element, cls: string) {\r\n        if (!Util.hasClass(element, cls)) {\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className + ' ' + cls);\r\n        }\r\n    }\r\n    public static removeClass(element: Element, cls: string) {\r\n        if (Util.hasClass(element, cls)) {\r\n            let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className.replace(reg, ' ').trim());\r\n        }\r\n    }\r\n\r\n    public static startsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.startsWith) {\r\n            return s.indexOf(searchS) === 0;\r\n        }\r\n\r\n        return s.startsWith(searchS);\r\n    }\r\n\r\n    public static endsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.endsWith) {\r\n            let lastIndex = s.lastIndexOf(searchS);\r\n            return lastIndex !== -1 && lastIndex === (s.length - 1);\r\n        }\r\n\r\n        return s.endsWith(searchS);\r\n    }\r\n\r\n    public static includes(s: string, searchS: string): boolean {\r\n        if (!String.prototype.includes) {\r\n            let idx = s.indexOf(searchS);\r\n            return idx > -1;\r\n        }\r\n        if (s === null) {\r\n            return false;\r\n        }\r\n\r\n        return s.includes(searchS);\r\n    }\r\n\r\n    public static isParentOfChild(parent: Element, child: Element): boolean {\r\n\r\n        if (!parent || !child) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isIE()) {\r\n            let children = parent.childNodes;\r\n            // let found = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                let childItem = children[i];\r\n                if (childItem === child) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        return parent.contains(child);\r\n    }\r\n\r\n    public static createCustomEvent(type: string, params?: any): CustomEvent {\r\n        let evt: CustomEvent;\r\n\r\n        if (typeof window['CustomEvent'] !== 'function') {\r\n            params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n            evt = document.createEvent('CustomEvent');\r\n            evt.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\r\n            return evt;\r\n        }\r\n\r\n        evt = new CustomEvent(type);\r\n\r\n        return evt;\r\n    }\r\n\r\n    public static saveToLocalStorage(model: any): boolean {\r\n        if (!this.isAutoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isLocalStorageSupported()) {\r\n            if (model) {\r\n                if (model.$isLoading) {\r\n                    return false;\r\n                }\r\n                let jsonObj = Util.toJson(model);\r\n                let data = JSON.stringify(jsonObj, null, '\\t');\r\n                localStorage.setItem('diagram', data);\r\n            } else {\r\n                localStorage.removeItem('diagram');\r\n            }\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static getDiagramFromLocalStorage(): string {\r\n        if (Util.isLocalStorageSupported()) {\r\n            return localStorage.getItem('diagram');\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    public static isLocalStorageSupported(): boolean {\r\n        if (this.isEdge()) {\r\n            return false;\r\n        }\r\n        return localStorage !== undefined;\r\n    }\r\n}\r\n"],"sourceRoot":""}
Severity: Minor
Found in doc/diagram.js.map by fixme

TODO found
Open

{"version":3,"sources":["webpack://DiagramJS/webpack/bootstrap","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Adapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Bridge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/BridgeElement.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/CSS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Control.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Data.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventBus.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/JSEPS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Palette.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertiesPanel.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertyBinder.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/RGBColor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/SVGConverter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/ScrumBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Toolbar.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/UML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/VirtualKeyBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/JavaAdapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/BaseElements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/ClassEditor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Graph.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Model.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregate.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Association.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Composition.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Generalisation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Implements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Attribute.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/AutoComplete.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/BR.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Button.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Class.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/ClazzProperty.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Dice.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Div.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Form.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/HTML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/InfoText.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Input.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Label.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Method.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Node.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/SO.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/StereoType.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Symbol.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Table.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/AddNode.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Drag.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/GraphListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/ImportFile.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/NewEdge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Select.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Zoom.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayout.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayoutMin.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/Random.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/main.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/util.ts"],"names":[],"mappings":"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","file":"diagram.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./main.ts\");\n","export abstract class Adapter {\r\n    public id: string = null;\r\n\r\n    abstract update(evt: Object): boolean;\r\n}\r\n","'use strict';\r\n\r\nimport * as controls from './elements/nodes';\r\nimport * as adapters from './adapters';\r\nimport Data from './Data';\r\nimport {Control} from './Control';\r\nimport {Adapter} from './Adapter';\r\nimport {Graph} from './elements';\r\nimport {Util} from './util';\r\nimport {Point} from './elements';\r\n\r\nexport class Bridge extends Control {\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public static version: string = '0.42.01.1601007-1739';\r\n    private controlFactory: Object = {};\r\n    private adapterFactory: Object = {};\r\n    private controls: Object = {};\r\n    private adapters: Object = {};\r\n    private items: Object = {};\r\n    private controlNo: number = 1;\r\n    private online: boolean = true;\r\n    private language: string = navigator.language.toUpperCase();\r\n    private toolBar: HTMLElement;\r\n\r\n    constructor(viewRoot?: HTMLElement) {\r\n        super();\r\n        let i;\r\n\r\n        if (viewRoot) {\r\n            this.$view = viewRoot;\r\n        }\r\n\r\n        let keys: string[] = Object.keys(adapters);\r\n        for (i = 0; i < keys.length; i++) {\r\n            let child = adapters[keys[i]];\r\n            if (child && child.id) {\r\n                this.adapterFactory[child.id.toLowerCase()] = child;\r\n            }\r\n        }\r\n\r\n        keys = Object.keys(controls);\r\n        for (i = 0; i < keys.length; i++) {\r\n            this.addControl(controls[keys[i]]);\r\n        }\r\n        this.addControl(Graph);\r\n\r\n        let that = this;\r\n        window.addEventListener('load', function () {\r\n            let updateOnlineStatus = function updateOnlineStatus() {\r\n                that.setOnline(navigator.onLine);\r\n            };\r\n            window.addEventListener('online', updateOnlineStatus);\r\n            window.addEventListener('offline', updateOnlineStatus);\r\n        });\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public setOnline(value: boolean) {\r\n        this.online = value;\r\n        if (this.toolBar.children[0]) {\r\n            this.toolBar.children[0].className = value ? 'online' : 'offline';\r\n        }\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addToolbar(): boolean {\r\n        if (this.toolBar) {\r\n            return false;\r\n        }\r\n        this.toolBar = document.createElement('div');\r\n        this.toolBar.className = 'onlineStatus';\r\n        let child = document.createElement('div');\r\n        child.className = 'online';\r\n        this.toolBar.appendChild(child);\r\n        child = document.createElement('div');\r\n        child.className = 'lang';\r\n        child.innerHTML = this.language;\r\n        this.toolBar.appendChild(child);\r\n\r\n        let body: HTMLElement = document.getElementsByTagName('body')[0];\r\n        body.insertBefore(this.toolBar, body.firstChild);\r\n        // Refresh Online Status\r\n        this.setOnline(this.online);\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addListener = function (listener: any) {\r\n        this.listener.push(listener);\r\n    };\r\n\r\n    public addControl(control: any) {\r\n        if (control && control.name) {\r\n            this.controlFactory[control.name.toLowerCase()] = control;\r\n        }\r\n    }\r\n\r\n    public getId(): string {\r\n        return 'control' + (this.controlNo++);\r\n    }\r\n\r\n    public adapterUpdate(message: string) {\r\n        let keys: string[] = Object.keys(this.adapters);\r\n        if (keys.length > 0) {\r\n            let i;\r\n            for (i = 0; i < keys.length; i++) {\r\n                let adapterList = this.adapters[keys[i]];\r\n                if (adapterList instanceof Adapter) {\r\n                    adapterList.update(message);\r\n                } else {\r\n                    for (let adapter of adapterList) {\r\n                        adapter.update(message);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        let config = {}, className: string, id: string;\r\n        if (typeof(json) === 'string') {\r\n            // Only a String\r\n            config['id'] = '' + json;\r\n            let item = document.getElementById(config['id']);\r\n            let className: string;\r\n            if (item) {\r\n                className = item.getAttribute('class');\r\n                if (!className) {\r\n                    className = item.getAttribute('classname') || '';\r\n                }\r\n                // Found Element and now config Data element\r\n                if (item.getAttribute('property')) {\r\n                    if (this.hasItem(item.getAttribute('property'))) {\r\n                        let data = this.getItem(item.getAttribute('property'));\r\n                        for (let key in data.prop) {\r\n                            if (item.getAttribute(key)) {\r\n                                data.setValue(key, item.getAttribute(key));\r\n                            }\r\n                        }\r\n                        if (item.getAttribute('property')) {\r\n                            // TODO: FIXME!!!\r\n                            // data.property = item.getAttribute(\"property\");\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                className = '' + json;\r\n            }\r\n            className = className.toLowerCase();\r\n            config['className'] = className;\r\n        } else {\r\n            config = <JSON>json;\r\n        }\r\n        // Config validate\r\n        if (!config['id']) {\r\n            config['id'] = this.getId();\r\n        }\r\n        // Backup for Old Graph\r\n        if (!config['className'] && (config['type'] === 'clazzdiagram' || config['type'] === 'objectdiagram')) {\r\n            config['className'] = 'graph';\r\n        }\r\n\r\n        className = config['className'] || config['class'];\r\n        className = className.toLocaleLowerCase();\r\n        id = config['id'];\r\n\r\n        // Check For Control or Data\r\n        if ((config['prop'] || config['upd'] || config['rem']) && this.controls[id] === null) {\r\n            // Its Data\r\n            let newData = !this.hasItem(config['id']);\r\n            let item: Data = this.getItem(config['id']);\r\n            // TODO: FIXME!!!\r\n            // if (id && className && !item.property) {\r\n            //      item.property = className;\r\n            // }\r\n            if (newData) {\r\n                for (let i in this.controls) {\r\n                    if (this.controls.hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    this.controls[i].addItem(this, item);\r\n                }\r\n            }\r\n            // Add all Values to item\r\n            item.addProperties(config);\r\n            // Bridge.addProperties(config['prop'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return item;\r\n        }\r\n\r\n        let control;\r\n        if (this.controls[id]) {\r\n            control = this.controls[id];\r\n            control.initControl(json);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return control;\r\n        }\r\n\r\n        if (typeof(this.controlFactory[className]) === 'object' || typeof(this.controlFactory[className]) === 'function') {\r\n            let obj = this.controlFactory[className];\r\n            control = new obj(json);\r\n            Util.initControl(owner || this, control, config['property'], id, json);\r\n\r\n            if (control.id) {\r\n                this.controls[control.id] = control;\r\n            } else {\r\n                this.controls[id] = control;\r\n            }\r\n\r\n            // create DataObject and register this control as listener to it\r\n            // let obj = {id:id};\r\n            // let data: Data = this.load(obj);\r\n            // data.addListener(this);\r\n\r\n            // Try to Show\r\n            if (typeof control.getSVG === 'function' && typeof control.getSize === 'function') {\r\n                let size: Point = control.getSize();\r\n\r\n                let svg = Util.createShape({\r\n                    tag: 'svg',\r\n                    id: 'root',\r\n                    width: size.x,\r\n                    height: size.y\r\n                });\r\n\r\n                let view = control.getSVG();\r\n                svg.appendChild(view);\r\n                document.getElementsByTagName('body')[0].appendChild(svg);\r\n            }\r\n            return control;\r\n        }\r\n        return null;\r\n        // bridge.load('{class:table, columns:[{id:'firstname'}, {id:'lastname'}]}');\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n\r\n        if (this.items[id] !== undefined) {\r\n            return true;\r\n        }\r\n        id = id.split('.')[0];\r\n        return (this.items[id] !== undefined);\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return this.items;\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        let item = this.items[id];\r\n        if (!item) {\r\n            id = id.split('.')[0];\r\n            item = this.items[id];\r\n            if (!item) {\r\n                item = new Data();\r\n                item.id = id;\r\n                this.items[id] = item;\r\n            }\r\n        }\r\n        return item;\r\n    }\r\n\r\n    /**\r\n     * Method for executing user input -> Event\r\n     * @param object\r\n     * @param attribute\r\n     * @param oldValue\r\n     * @param newValue\r\n     * @returns {boolean}\r\n     */\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        alert('Bridge.setValue: oldVal:' + oldValue + ', newVal: ' +  + newValue + ', attribute: ' + attribute + ', object: ' + JSON.stringify(object));\r\n        let obj: Data;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n\r\n        } else if (object instanceof Data) {\r\n            obj = object;\r\n            id = object.id;\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = <Data>object;\r\n            id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return false;\r\n        }\r\n        if (obj) {\r\n            // Execute Update to Data\r\n            obj.setValue(attribute, newValue);\r\n            // Could be done here, but currently is done at this.execueChange..:\r\n            // obj[attribute] = value;\r\n        }\r\n\r\n        /*let tmp = {'id': id};\r\n        if (typeof(newValue) !== 'undefined' && newValue !== null) {\r\n            let upd = {};\r\n            upd[attribute] = newValue;\r\n            tmp['upd'] = upd;\r\n        }\r\n        if (typeof(oldValue) !== 'undefined' && oldValue !== null) {\r\n            let rem = {};\r\n            rem[attribute] = oldValue;\r\n            tmp['rem'] = rem;\r\n        }*/\r\n        // this.load(tmp);\r\n        return true;\r\n    }\r\n\r\n    public getValue(object: Object, attribute: string): any {\r\n        let obj: Object;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = object;\r\n            // id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return;\r\n        }\r\n        if (obj) {\r\n            if (obj.hasOwnProperty(attribute)) {\r\n                return obj[attribute];\r\n            } else if (obj instanceof Data) {\r\n                return (<Data>obj).getValue(attribute);\r\n            } else {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    public getNumber(object: Object, attribute: string, defaultValue: number = 0): number {\r\n        let res = <number>this.getValue(object, attribute);\r\n        if (typeof res === 'number') {\r\n            return res;\r\n        } else if (typeof res === 'string') {\r\n            // check whether res is a number\r\n            let value = Number(res);\r\n            if (value || value === 0) {\r\n                return value;\r\n            }\r\n        }\r\n        return defaultValue;\r\n    }\r\n\r\n    getControl(controlId: string) {\r\n        return this.controls[controlId];\r\n    }\r\n\r\n    public registerListener(eventType: string, control: Control, callBackfunction: string): Control {\r\n        if (typeof control === 'string') {\r\n            control = this.getControl(<string>control);\r\n        }\r\n        if (!control) {\r\n            return null;\r\n        }\r\n        if (eventType) {\r\n            eventType = eventType.toLowerCase();\r\n        }\r\n        control.registerListenerOnHTMLObject(eventType);\r\n        if (callBackfunction) {\r\n            let adapter: DelegateAdapter = new DelegateAdapter();\r\n            adapter.callBackfunction = callBackfunction;\r\n            adapter.id = control.getId();\r\n            this.addAdapter(adapter, eventType);\r\n        }\r\n        return control;\r\n    }\r\n\r\n    public addAdapter(adapter: Adapter | string, eventType: string): Adapter {\r\n        if (!eventType) {\r\n            eventType = '';\r\n        }\r\n        let result: Adapter;\r\n        if (adapter instanceof String) {\r\n            let obj = this.adapterFactory[adapter.toLowerCase()];\r\n            result = new obj();\r\n        } else {\r\n            result = <Adapter>adapter;\r\n        }\r\n        let handlers = this.adapters[eventType];\r\n\r\n        if (handlers === null || handlers === undefined) {\r\n            handlers = [];\r\n            this.adapters[eventType] = handlers;\r\n        }\r\n        handlers.push(result);\r\n        return result;\r\n    }\r\n\r\n    public fireEvent(evt: Event): void {\r\n        let handlers = this.adapters[''];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n        handlers = this.adapters[evt['eventType']];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport class DelegateAdapter extends Adapter {\r\n    adapter: Adapter;\r\n    callBackfunction: string;\r\n\r\n    update(evt: Event): boolean {\r\n        if (this.adapter) {\r\n            this.adapter.update(evt);\r\n            return true;\r\n        } else if (this.callBackfunction) {\r\n            return this.executeFunction(this.callBackfunction, evt);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public setAdapter(adapter: Adapter): boolean {\r\n        this.adapter = adapter;\r\n        return true;\r\n    }\r\n\r\n    private executeFunction(strValue: string, evt: Event): boolean {\r\n        let scope = window;\r\n        let scopeSplit = strValue.split('.');\r\n        for (let i = 0; i < scopeSplit.length - 1; i++) {\r\n            scope = scope[scopeSplit[i]];\r\n            if (scope === undefined) {\r\n                return false;\r\n            }\r\n        }\r\n        let fn: any = scope[scopeSplit[scopeSplit.length - 1]];\r\n        if (typeof fn === 'function') {\r\n            fn.call(scope);\r\n            return true;\r\n        } else {\r\n            window['callBack1'].update(evt);\r\n\r\n        }\r\n        return false;\r\n    }\r\n}\r\n","'use strict';\r\nimport Data from './Data';\r\n\r\nexport default class BridgeElement {\r\n    private static elementSet: BridgeElement[] = [];\r\n    public model: Data;\r\n    public id: string;\r\n    public gui: HTMLElement;\r\n\r\n    constructor(model: Data) {\r\n        this.model = model;\r\n        this.id = model.id;\r\n        BridgeElement.elementSet.push(this);\r\n    }\r\n}\r\n","import {Util} from './util';\r\n\r\n// \t\t\t\t######################################################### CSS #########################################################\r\nexport class CSS {\r\n    public css: Object;\r\n    private name: string;\r\n\r\n    constructor(name: string, item?: any) {\r\n        let i, value, border: string, prop, el;\r\n        this.name = name;\r\n        this.css = {};\r\n        if (!item) {\r\n            return;\r\n        }\r\n\r\n        el = window.getComputedStyle(item, null);\r\n        border = el.getPropertyValue('border');\r\n        for (i in el) {\r\n            prop = i;\r\n            value = el.getPropertyValue(prop);\r\n            if (value && value !== '') {\r\n                // optimize CSS\r\n                if (border) {\r\n                    if (prop === 'border-bottom' || prop === 'border-right' || prop === 'border-top' || prop === 'border-left') {\r\n                        if (value !== border) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-color' || prop === 'border-bottom-color' || prop === 'border-right-color' || prop === 'border-top-color' || prop === 'border-left-color') {\r\n                        if (border.substring(border.length - value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-width') {\r\n                        if (border.substring(0, value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else {\r\n                        this.css[prop] = value;\r\n                    }\r\n                } else {\r\n                    this.css[prop] = value;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public static getStdDef() {\r\n        let child, def = Util.create({tag: 'defs'});\r\n\r\n        child = Util.create({tag: 'filter', id: 'drop-shadow'});\r\n        child.appendChild(Util.create({tag: 'feGaussianBlur', 'in': 'SourceAlpha', result: 'blur-out', stdDeviation: 2}));\r\n        child.appendChild(Util.create({tag: 'feOffset', 'in': 'blur-out', dx: 2, dy: 2}));\r\n        child.appendChild(Util.create({tag: 'feBlend', 'in': 'SourceGraphic', mode: 'normal'}));\r\n        def.appendChild(child);\r\n        child = Util.create({tag: 'linearGradient', id: 'reflect', x1: 0, x2: 0, y1: '50%', y2: 0, spreadMethod: 'reflect'});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#aaa', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#eee', offset: '100%'}));\r\n        def.appendChild(child);\r\n\r\n        child = Util.create({tag: 'linearGradient', id: 'classelement', x1: 0, x2: '100%', y1: '100%', y2: 0});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#fff', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#d3d3d3', offset: 1}));\r\n        def.appendChild(child);\r\n\r\n        return def;\r\n    }\r\n\r\n    public static getSubstring(str: string, search: string, startChar: string, endChar: string, splitter: string): any {\r\n        let pos, end, count = 0, array = [];\r\n        pos = str.indexOf(search);\r\n        if (pos > 0) {\r\n            end = str.indexOf(startChar, pos);\r\n            pos = end + 1;\r\n            if (end > 0) {\r\n                while (end < str.length) {\r\n                    if (str.charAt(end) === startChar) {\r\n                        count += 1;\r\n                    }\r\n                    if (str.charAt(end) === endChar) {\r\n                        count -= 1;\r\n                        if (count === 0) {\r\n                            if (splitter && pos !== end) {\r\n                                array.push(str.substring(pos, end).trim());\r\n                            }\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (str.charAt(end) === splitter && count === 1) {\r\n                        array.push(str.substring(pos, end).trim());\r\n                        pos = end + 1;\r\n                    }\r\n\r\n                    end += 1;\r\n                }\r\n                if (splitter) {\r\n                    return array;\r\n                }\r\n                return str.substring(pos, end);\r\n            }\r\n            return str.substring(pos);\r\n        }\r\n        return '';\r\n    }\r\n\r\n    public static addStyle(board: SVGElement, styleName: any) {\r\n        let defs, style: any, css;\r\n        if (styleName.baseVal || styleName.baseVal === '') {\r\n            styleName = styleName.baseVal;\r\n        }\r\n        if (!styleName) {\r\n            return;\r\n        }\r\n        defs = CSS.getDefs(board);\r\n        if (defs.getElementsByTagName('style').length > 0) {\r\n            style = defs.getElementsByTagName('style')[0];\r\n        } else {\r\n            style = Util.create({tag: 'style'});\r\n            style.item = {};\r\n            defs.appendChild(style);\r\n        }\r\n        if (!style.item[styleName]) {\r\n            css = Util.getStyle(styleName);\r\n            style.item[styleName] = css;\r\n            style.innerHTML = style.innerHTML + '\\n.' + styleName + css.getSVGString(board);\r\n        }\r\n    }\r\n\r\n    public static addStyles(board: SVGElement, item: any) {\r\n        if (!item) {\r\n            return;\r\n        }\r\n        let items, i, className: any = item.className;\r\n\r\n        if (className) {\r\n            if (className.baseVal || className.baseVal === '') {\r\n                className = className.baseVal;\r\n            }\r\n        }\r\n        if (className) {\r\n            items = className.split(' ');\r\n            for (i = 0; i < items.length; i += 1) {\r\n                CSS.addStyle(board, items[i].trim());\r\n            }\r\n        }\r\n        for (i = 0; i < item.childNodes.length; i += 1) {\r\n            this.addStyles(board, item.childNodes[i]);\r\n        }\r\n    }\r\n\r\n    public static getDefs(board: SVGElement) {\r\n        let defs;\r\n        if (board.getElementsByTagName('defs').length < 1) {\r\n            defs = Util.create({tag: 'defs'});\r\n            board.insertBefore(defs, board.childNodes[0]);\r\n        } else {\r\n            defs = board.getElementsByTagName('defs')[0];\r\n        }\r\n        return defs;\r\n    }\r\n\r\n    public add(key: string, value: string) {\r\n        this.css[key] = value;\r\n    }\r\n\r\n    public get(key: string): any {\r\n        let i;\r\n        for (i in this.css) {\r\n            if (i === key) {\r\n                return this.css[key];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public getNumber(key: string) {\r\n        return parseInt((this.get(key) || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    public getSVGString(board: SVGElement) {\r\n        let str, pos, style, defs, value, filter, z;\r\n        str = '{';\r\n        for (style in this.css) {\r\n            if (!this.css.hasOwnProperty(style)) {\r\n                continue;\r\n            }\r\n            if (style === 'border') {\r\n                pos = this.css[style].indexOf(' ');\r\n                str = str + 'stroke-width: ' + this.css[style].substring(0, pos) + ';';\r\n                pos = this.css[style].indexOf(' ', pos + 1);\r\n                str = str + 'stroke:' + this.css[style].substring(pos) + ';';\r\n            } else if (style === 'background-color') {\r\n                str = str + 'fill: ' + this.css[style] + ';';\r\n            } else if (style === 'background') {\r\n                value = CSS.getSubstring(this.css[style], 'linear-gradient', '(', ')', ',');\r\n                if (value.length > 0) {\r\n                    defs = CSS.getDefs(board);\r\n                    if (value[0] === '45deg') {\r\n                        pos = 1;\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '100%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                    } else {\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '0%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                        pos = 0;\r\n                    }\r\n                    defs.appendChild(filter);\r\n                    while (pos < value.length) {\r\n                        value[pos] = value[pos].trim();\r\n                        z = value[pos].lastIndexOf(' ');\r\n                        filter.appendChild(Util.create({\r\n                            tag: 'stop',\r\n                            'offset': value[pos].substring(z + 1),\r\n                            style: {'stop-color': value[pos].substring(0, z)}\r\n                        }));\r\n                        pos += 1;\r\n                    }\r\n                    str = str + 'fill: url(#' + this.name + ');';\r\n                    continue;\r\n                }\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n                // box-shadow: inset 0 3px 4px #888;\r\n// \t\t\t\t<defs>\r\n// \t\t\t\t\t<filter id='drop-shadow'>\r\n// \t\t\t\t\t\t<feGaussianBlur in='SourceAlpha' result='blur-out' stdDeviation='2'></feGaussianBlur>\r\n// \t\t\t\t\t\t<feOffset in='blur-out' dx='2' dy='2'></feOffset>\r\n// \t\t\t\t\t\t<feBlend in='SourceGraphic' mode='normal'></feBlend>\r\n// \t\t\t\t\t</filter>\r\n// \t\t\t\t</defs>\r\n            } else {\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n            }\r\n        }\r\n        str = str + '}';\r\n        return str;\r\n    }\r\n}\r\n","import {Bridge} from './Bridge';\r\nimport Data from './Data';\r\nimport EventListener from './EventListener';\r\n\r\nexport abstract class Control {\r\n    public $owner: Control;\r\n    /**\r\n     *\r\n     */\r\n    public property: string;\r\n    public id: string;\r\n    public $view: Element;\r\n    public $viewData: Data = null;\r\n\r\n    protected $model: Data;\r\n    protected $viewListener: EventListenerOrEventListenerObject;\r\n\r\n    /**\r\n     * The properties, we want to listen to\r\n     */\r\n    // static defaultProperties: string[] = [];\r\n\r\n    // public getProperties(): string[] {\r\n    //     return this.properties;\r\n    // }\r\n\r\n    constructor() {\r\n        // e.g. this.properties.push(\"key\");\r\n        // this.properties.push(\"property\");\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data: Data = new Data();\r\n        if (oldData) {\r\n            oldData.removeListener(this);\r\n            const keys: string[] = oldData.getKeys();\r\n            for (let i = 0; i < keys.length; i++) {\r\n                let attr = keys[i];\r\n                if (this.$view) {\r\n                    if (this.$view[attr] === null) {\r\n                        continue;\r\n                    }\r\n                    data.setValue(attr, this.$view[attr]);\r\n                } else {\r\n                    data.setValue(attr, null);\r\n                }\r\n            }\r\n        }\r\n        data.addListener(this);\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     *  Set the new HTMLElement and attach listener to it.\r\n     *  Also remove Listeners from old one and return the old one, if present.\r\n     * @param element\r\n     * @returns The previous Element\r\n     */\r\n    public setView(element: Element): Element {\r\n        let oldElement: Element = null;\r\n        if (this.$view) {\r\n            oldElement = this.$view;\r\n            if (this.$viewListener) {\r\n                oldElement.removeEventListener('change', this.$viewListener);\r\n            }\r\n        }\r\n        this.$view = element;\r\n\r\n        if (this.$viewListener) {\r\n            element.addEventListener('change', this.$viewListener);\r\n        }\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n        return element;\r\n    }\r\n\r\n    public init(owner: Control, property ?: string, id ?: string): Control {\r\n        if (!this.$owner) {\r\n            this.$owner = owner;\r\n        }\r\n        if (!this.id) {\r\n            this.id = id;\r\n        }\r\n        if (!this.property) {\r\n            this.property = this.generateID(property, id);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public createEventListener(): EventListener {\r\n        return new EventListener();\r\n    }\r\n\r\n    public getRoot(): Control {\r\n        if (this.$owner) {\r\n            return this.$owner.getRoot();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return null;\r\n    }\r\n\r\n    public initControl(data: any): void {\r\n        if (this.$view === null || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (data.hasOwnProperty('prop')) {\r\n            for (let key in data.prop) {\r\n                let oldValue = this.$viewData.getValue(key);\r\n                if (this.$view) {\r\n                    this.updateElement(key, oldValue, data.prop[key]);\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        let hasRem = data.hasOwnProperty('rem');\r\n        let removed: any[] = [];\r\n        if (data.hasOwnProperty('upd')) {\r\n            for (let key in data.upd) {\r\n                let oldValue;\r\n                let newValue = data.upd[key];\r\n                let entity;\r\n                const temp = false;\r\n                if (temp) {\r\n//                if (newValue == this.getViewData().getValue(key)) {\r\n                    // new Value assertEquals old value, so we don't need to change anything..\r\n                    // delete data.rem[key];\r\n                    if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                        removed.push(data.rem[key]);\r\n                    }\r\n                    continue;\r\n                }\r\n                if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                    // if there's a rem, the oldValue from rem will be used and expected to be right..\r\n                    oldValue = data.rem[key];\r\n                    if (this.$model && this.$model.getValue(key) === oldValue) {\r\n                        entity = this.$model;\r\n//                    } else if (oldValue == this.getViewData().getValue(key)) {\r\n//                        $graphModel = this.getViewData();\r\n                    }\r\n                    delete data.rem[key];\r\n\r\n                    if (entity === null) {\r\n                        continue;\r\n                    }\r\n                }\r\n                if (entity) {\r\n                    if (!hasRem) {\r\n                        if (entity === this.$model) {\r\n                            oldValue = this.$model.getValue(key);\r\n                        } else {\r\n//                           oldValue = this.getViewData().getValue(key);\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (this.$model) {\r\n                        // try to get the oldValue directly from the $graphModel...\r\n                        oldValue = this.$model.getValue(key);\r\n                        entity = this.$model;\r\n                    }\r\n                    if (oldValue === null) {\r\n                        // if there was no data in the entity, we try to get oldValue from the $view\r\n//                        oldValue = this.getViewData().getValue(key);\r\n//                        entity = this.getViewData();\r\n                    }\r\n                }\r\n\r\n                //  || oldValue !== this.$viewData.getValue(key)\r\n                if (newValue === oldValue) {\r\n                    // no match, so update should be wrong...\r\n                    continue;\r\n                }\r\n                const viewDataOldValue = this.$viewData.getValue(key);\r\n                if (entity === this.$viewData) {\r\n\r\n                    // this.getViewData().setValue(key, newValue);\r\n                    if (this.$view) {\r\n                        this.updateElement(key, viewDataOldValue, newValue);\r\n                    }\r\n                } else {\r\n                    this.updateElement(key, viewDataOldValue, newValue);\r\n                }\r\n                this.getRoot().setValue(entity, key, newValue, oldValue);\r\n            }\r\n            // this.saveViewInData();\r\n        }\r\n        if (hasRem) {\r\n            for (let key in data.rem) {\r\n                if (removed.hasOwnProperty(key)) {\r\n                    continue;\r\n                }\r\n                let oldValue;\r\n//                    this.getViewData().getValue(key);\r\n//                if (oldValue != data.rem[key] || data.upd !== undefined && (data.upd[key] == oldValue || this.getViewData().getValue(key) == data.upd[key])) {\r\n                // if rem is invalid, or if the change is already applied, don't do anything..\r\n                //                  continue;\r\n                //            }\r\n                // delete this.$viewData.getValue(key);\r\n                // this.saveViewInData();\r\n                this.updateElement(key, null, null);\r\n                // this.$view.removeAttribute(key);\r\n                if (this.$model) {\r\n//                    this.getRoot().setValue(this.$graphModel, key, this.getViewData().getValue(key), oldValue);\r\n                }\r\n            }\r\n        }\r\n        if (this.property) {\r\n            // Add listener to Input field:\r\n            this.$view['onchange'] = ((ev: Event) => {\r\n                    this.controlChanged(ev);\r\n                }\r\n            );\r\n        }\r\n//        this.saveViewInData();\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        return null;\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n        return false;\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return new Object();\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue ?: Object): boolean {\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Is called when a object, that the Control is listening to, changes its value.\r\n     * @param entity\r\n     * @param property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        if (oldValue === newValue || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (oldValue === this.$viewData.getValue(property)) {\r\n            return;\r\n        }\r\n        // Set NewData to ViewData and Fire PC\r\n        this.$viewData.setValue(property, newValue);\r\n\r\n//\r\n//\r\n//         // if (entity == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.entity) {\r\n//                 alert(\"entity = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.entity.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.entity, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the entity is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"entity = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n// >>>>>>> addOldFunctions\r\n        if (this.$viewData) {\r\n            this.$viewData.setValue(property, newValue);\r\n        }\r\n        if (this.$model) {\r\n            this.$model.setValue(property, newValue);\r\n        }\r\n        this.updateElement(property, oldValue, newValue);\r\n    }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            // Do Nothing\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  Update GUI Element\r\n     * @param {string} property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        if (this.$view && this.$view.hasAttribute(property)) {\r\n            this.$view.setAttribute(property, newValue);\r\n        }\r\n    }\r\n\r\n//        if (oldValue == newValue) {\r\n//            return;\r\n//        }\r\n//        if (oldValue == this.$viewData.getValue(property)) {\r\n//            return;\r\n//        }\r\n//        // Set NewData to ViewData and Fire PC\r\n//        this.$viewData.setValue(property, newValue);\r\n//\r\n//\r\n//\r\n//         // if ($graphModel == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.$graphModel) {\r\n//                 alert(\"$graphModel = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.$graphModel.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.$graphModel, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the $graphModel is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"$graphModel = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n\r\n    public getId(): string {\r\n        return this.id;\r\n    }\r\n\r\n    public load(json: JSON | Object, owner ?: Control): any {\r\n        // Do Nothing\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.property || entity.hasProperty(this.property)) {\r\n                entity.addListener(this, this.property);\r\n                this.$model = entity;\r\n            }\r\n        }\r\n    }\r\n\r\n    public appendChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.appendChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].appendChild(child.$view);\r\n        }\r\n    }\r\n\r\n    public removeChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.removeChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].removeChild(child.$view);\r\n        }\r\n    }\r\n\r\n    /*\r\n     Property looks like: 't1.talk'\r\n     */\r\n    public setProperty(property: string): void {\r\n        if (!this.property) {\r\n            return;\r\n        }\r\n        let objId = property.split('.')[0];\r\n        let object = null;\r\n        if (this.$owner.hasItem(objId)) {\r\n            object = this.$owner.getItem(objId);\r\n        }\r\n\r\n        // remove listener on old object\r\n        if (this.$model) {\r\n            // this.$graphModel.removeListener(this);\r\n            this.$model.removeListener(this, this.lastProperty);\r\n        }\r\n        this.property = property;\r\n\r\n        // add listener to object..\r\n        if (object) {\r\n            object.addListener(this, this.lastProperty);\r\n            this.$model = object;\r\n            this.updateElement(this.lastProperty, this.$viewData.getValue(this.lastProperty), object.prop[this.lastProperty]);\r\n        }\r\n    }\r\n\r\n    public registerListenerOnHTMLObject(eventType: string): boolean {\r\n        return this.registerEventListener(eventType, <HTMLElement>this.$view);\r\n    }\r\n\r\n    // Normal Event HTML-Event\r\n    // Eventtype:string,\r\n    // id:string of Control\r\n    public fireEvent(evt: Event): void {\r\n        // Do Nothing\r\n    }\r\n\r\n    public isClosed(): boolean {\r\n        return this['closed'];\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        if (this.isClosed()) {\r\n            return this.$owner.getShowed();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * the id of the Data object, that contains the properties of the view\r\n     * @returns {string}\r\n     */\r\n    protected getControlDataID() {\r\n        return this.id + '_data';\r\n    }\r\n\r\n    protected generateID(property ?: string, id ?: string): string {\r\n        if (property) {\r\n            return property;\r\n        }\r\n        if (id) {\r\n            // will generate a data Object suitable for the Control..\r\n            // must be overridden, if the changeEvent shouldn't listen on value...\r\n//            return id + '.' + this.getStandardProperty();//+ \"_data\"\r\n            return id + '.' + '_data';\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected updateViewData() {\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n        const keys: string[] = this.$viewData.getKeys();\r\n        for (let i = 0; i < keys.length; i++) {\r\n            let attr = keys[i];\r\n            if (this.$view[attr] === null) {\r\n                continue;\r\n            }\r\n            this.$viewData.setValue(attr, this.$view[attr]);\r\n        }\r\n    }\r\n\r\n    protected registerEventListener(eventType: string, htmlElement: HTMLElement): boolean {\r\n        if (!htmlElement) {\r\n            return false;\r\n        }\r\n        if (htmlElement instanceof HTMLElement === false) {\r\n            return false;\r\n        }\r\n        let control = this;\r\n        let listener = (t: any) => {\r\n            t.eventType = eventType;\r\n            t.id = control.id;\r\n            control.$owner.fireEvent(t);\r\n        };\r\n        htmlElement.addEventListener(eventType, listener);\r\n        return true;\r\n    }\r\n\r\n    get lastProperty(): string {\r\n        if (!this.property) {\r\n            return '';\r\n        }\r\n        let arr: string[] = this.property.split('.');\r\n        return arr[arr.length - 1];\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\n\r\nexport default class Data {\r\n    public prop = {};\r\n    id: string;\r\n    // $listener: Control[] = [];\r\n    $listener: Object = {};\r\n\r\n    private static nullCheck(property: string): string {\r\n        if (property === undefined || property === null) {\r\n            property = '';\r\n        }\r\n        return property;\r\n    }\r\n    public getKeys(): string[] {\r\n        return Object.keys(this.prop);\r\n    }\r\n\r\n    public addProperties(values: Object) {\r\n        if (!values) {\r\n            return;\r\n        }\r\n        if (values['prop']) {\r\n            let prop = values['prop'];\r\n            for (let property in prop) {\r\n                if (prop.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (prop[property] !== null && '' !== prop[property]) {\r\n                    this.setValue(property, prop[property]);\r\n                }\r\n            }\r\n        } else {\r\n            let upd = values['upd'] || {};\r\n            let rem = values['rem'] || {};\r\n\r\n            for (let property in upd) {\r\n                if (upd.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (rem.hasOwnProperty(property) === false) {\r\n                    this.setValue(property, upd[property]);\r\n                } else {\r\n                    // if we have a rem, we wan't to check, if its a valid change (teh old value is the value in rem)\r\n                    if (this.getValue(property) === rem[property]) {\r\n                        this.setValue(property, upd[property]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getValue(attribute: string) {\r\n        return this.prop[attribute];\r\n    }\r\n\r\n    public setValue(attribute: string, newValue: any): void {\r\n        let oldValue = this.prop[attribute];\r\n        if (oldValue === newValue && newValue !== null) {\r\n            return;\r\n        }\r\n        this.prop[attribute] = newValue;\r\n        this.firePropertyChange(attribute, oldValue, newValue);\r\n    }\r\n\r\n    public addTo(attribute: string, newValue: any): boolean {\r\n        let add: boolean;\r\n        if (this.prop[attribute]) {\r\n            if (this.prop[attribute].contains(newValue) === false) {\r\n                add = true;\r\n            }\r\n        } else {\r\n            this.prop[attribute] = [];\r\n            add = true;\r\n        }\r\n        if (add) {\r\n            this.prop[attribute].push(newValue);\r\n            this.firePropertyChange(attribute, null, newValue);\r\n        }\r\n        return add;\r\n    }\r\n\r\n    public removeFrom(attribute: string, newValue: any): boolean {\r\n        if (!this.prop[attribute]) {\r\n            return true;\r\n        }\r\n        let pos: number = this.prop[attribute].indexOf(newValue);\r\n        if (pos < 0) {\r\n            return true;\r\n        }\r\n        this.prop[attribute].splice(pos, 1);\r\n        this.firePropertyChange(attribute, newValue, null);\r\n        return true;\r\n    }\r\n\r\n    public addListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(property);\r\n        if (!listeners) {\r\n            listeners = [];\r\n            this.$listener[Data.nullCheck(property)] = listeners;\r\n        }\r\n        listeners.push(control);\r\n    }\r\n\r\n    public removeListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners = this.getListeners(property);\r\n        if (listeners === null) {\r\n            return;\r\n        }\r\n        let pos = listeners.indexOf(control);\r\n        if (pos >= 0) {\r\n            listeners.splice(pos, 1);\r\n        }\r\n        if (listeners.length === 0 && Data.nullCheck(property) !== '') {\r\n            // only remove, if it's not the default listener list...\r\n            delete this.$listener[property];\r\n        }\r\n    }\r\n\r\n    public hasProperty(property: string): boolean {\r\n        return this.prop.hasOwnProperty(property);\r\n    }\r\n\r\n    public addFrom(attribute: string, oldData: Data): void {\r\n        if (oldData) {\r\n            this.setValue(attribute, oldData.getValue(attribute));\r\n        } else {\r\n            this.setValue(attribute, null);\r\n        }\r\n    }\r\n\r\n    public removeKey(key: string): any {\r\n        if (this.hasProperty(key)) {\r\n            const oldValue = this.prop[key];\r\n            delete this.prop[key];\r\n            return oldValue;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected getListeners(property: string): PropertyChangeSupport[] {\r\n        property = Data.nullCheck(property);\r\n        return this.$listener[property];\r\n    }\r\n\r\n    protected firePropertyChange(attribute: string, oldValue: Object, newValue: Object) {\r\n        attribute = Data.nullCheck(attribute);\r\n        // at first fire for the given property\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(attribute);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n        // now we need to fire the Listeners that wan't to listen to everything\r\n        listeners = this.getListeners(null);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport interface EventHandler {\r\n    canHandle(): boolean;\r\n    handle(event: Event, element: DiagramElement): boolean;\r\n    setActive(active: boolean): void;\r\n}\r\n\r\nexport class EventBus {\r\n    public static CREATE: string = 'Create';\r\n    public static EDITOR: string = 'Editor';\r\n    public static OPENPROPERTIES: string = 'openProperties';\r\n    public static RELOADPROPERTIES: string = 'reloadProperties';\r\n    public static ELEMENTMOUSEDOWN: string = 'ELEMENT:MOUSEDOWN';\r\n    public static ELEMENTMOUSEUP: string = 'ELEMENT:MOUSEUP';\r\n    public static ELEMENTMOUSELEAVE: string = 'ELEMENT:MOUSELEAVE';\r\n    public static ELEMENTMOUSEMOVE: string = 'ELEMENT:MOUSEMOVE';\r\n    public static ELEMENTMOUSEWHEEL: string = 'ELEMENT:MOUSEWHEEL';\r\n    public static ELEMENTCLICK: string = 'ELEMENT:CLICK';\r\n    public static ELEMENTDBLCLICK: string = 'ELEMENT:DBLCLICK';\r\n    public static ELEMENTDRAG: string = 'ELEMENT:DRAG';\r\n    public static ELEMENTDRAGOVER: string = 'ELEMENT:DRAGOVER';\r\n    public static ELEMENTDROP: string = 'ELEMENT:DROP';\r\n    public static ELEMENTDRAGLEAVE: string = 'ELEMENT:DRAGLEAVE';\r\n\r\n    public static EVENTS: string[] = [\r\n        EventBus.CREATE,\r\n        EventBus.EDITOR,\r\n        EventBus.OPENPROPERTIES,\r\n        EventBus.RELOADPROPERTIES,\r\n        EventBus.ELEMENTMOUSEDOWN,\r\n        EventBus.ELEMENTMOUSEUP,\r\n        EventBus.ELEMENTMOUSELEAVE,\r\n        EventBus.ELEMENTMOUSEMOVE,\r\n        EventBus.ELEMENTMOUSEWHEEL,\r\n        EventBus.ELEMENTCLICK,\r\n        EventBus.ELEMENTDRAG,\r\n        EventBus.ELEMENTDBLCLICK,\r\n        EventBus.ELEMENTDRAGOVER,\r\n        EventBus.ELEMENTDROP,\r\n        EventBus.ELEMENTDRAGLEAVE,\r\n    ];\r\n\r\n    private static handlers = {};\r\n\r\n    private static $activeHandler: string = '';\r\n\r\n    public static setActiveHandler(handler: string): void {\r\n        this.$activeHandler = handler;\r\n    }\r\n\r\n    public static isHandlerActiveOrFree(handler: string, notEmpty?: boolean): boolean {\r\n        if (notEmpty) {\r\n            return this.$activeHandler === handler;\r\n        }\r\n        return this.$activeHandler === handler || this.$activeHandler === '' || this.$activeHandler === undefined;\r\n    }\r\n\r\n    public static isAnyHandlerActive(): boolean {\r\n        return !(this.$activeHandler === '' || this.$activeHandler === undefined);\r\n    }\r\n\r\n    public static releaseActiveHandler(): void {\r\n        this.$activeHandler = '';\r\n    }\r\n\r\n    public static getActiveHandler(): string {\r\n        return this.$activeHandler;\r\n    }\r\n\r\n    static register(control: Control, view: Element) {\r\n        let events: string[];\r\n        if (typeof control['getEvents'] === 'function') {\r\n            events = control['getEvents']();\r\n        }\r\n\r\n        if (!events || !view) {\r\n            return;\r\n        }\r\n        for (let event of events) {\r\n            this.registerEvent(view, event, control);\r\n        }\r\n    }\r\n\r\n    static registerEvent(view: Element, event: string, control?: any) {\r\n        const pos: number = event.indexOf(':');\r\n        if (pos > 0) {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        } else {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        }\r\n    }\r\n\r\n    public static publish(element: DiagramElement, evt: Event) {\r\n        let handlers = EventBus.handlers[evt.type];\r\n        if (handlers) {\r\n            for (let handler of handlers) {\r\n                handler.handle(evt, element);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static subscribe(handler: EventHandler, ...eventTypes: string[]) {\r\n        for (let event of eventTypes) {\r\n            let handlers = EventBus.handlers[event];\r\n            if (handlers === null || handlers === undefined) {\r\n                handlers = [];\r\n                EventBus.handlers[event] = handlers;\r\n            }\r\n            handlers.push(handler);\r\n        }\r\n    }\r\n}\r\n","import SimpleEvent from './Event';\r\n\r\nexport default class EventListener {\r\n    private $onUpdate: Function;\r\n\r\n    get onUpdate(): Function {\r\n        return this.$onUpdate;\r\n    }\r\n\r\n    set onUpdate(value: Function) {\r\n        this.$onUpdate = value;\r\n    }\r\n\r\n    update(event: SimpleEvent) {\r\n        this.$onUpdate(event);\r\n    }\r\n}\r\n","// ################################## jsEPS ####################################################\r\nimport {SVGConverter} from './SVGConverter';\r\n\r\nexport class JSEPS {\r\n    private max: number;\r\n    private min: number;\r\n    private inverting: boolean;\r\n    private output: string[];\r\n    private font: number;\r\n\r\n    constructor(options: any) {\r\n        this.max = 0;\r\n        this.min = 999;\r\n        let hasInverting = typeof (options.inverting);\r\n        this.inverting = (options && hasInverting !== 'undefined' ? options.inverting : true);\r\n        this.output = ['%!PS-Adobe-3.0 EPSF-3.0', '1 setlinewidth'];\r\n        this.out('/FSD {findfont exch scalefont def} bind def % In the document prolog: define');\r\n        this.out('/SMS {setfont moveto show} bind def % some useful procedures');\r\n        this.out('/MS {moveto show} bind def');\r\n        this.out('/F1  10  /Helvetica  FSD % At the start of the script: set up');\r\n        this.font = 1;\r\n    }\r\n\r\n    public out(value: string) {this.output.push(value); }\r\n    public rect(x: number, y: number, width: number, height: number, style: string) {\r\n        y = y + (this.inverting ? height : 0);\r\n        if (style && style.indexOf('fill:url(#classelement);') >= 0) {\r\n            this.out('gsave 0.93 0.93 0.93 setrgbcolor newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectfill grestore');\r\n        } else {\r\n            this.out('newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectstroke');\r\n        }\r\n    }\r\n    public setFillColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public y(value: number) {this.max = Math.max(this.max, value); this.min = Math.min(this.min, value); return this.inverting ? '%y(' + value + ')' : value; }\r\n    public getType(): string {\r\n        return 'application/postscript';\r\n    }\r\n\r\n    public getData(): string {\r\n        let t, end, url, text, typ = 'application/postscript', a = document.createElement('a'), data = '', pos, i;\r\n        for (i = 0; i < this.output.length; i += 1) {\r\n            text = this.output[i];\r\n            if (this.inverting) {\r\n                while ((pos = text.indexOf('%y')) >= 0) {\r\n                    end = text.indexOf(')', pos);\r\n                    t = this.max - parseInt(text.substring(pos + 3, end), 10);\r\n                    text = text.substring(0, pos) + t + text.substring(end + 1);\r\n                }\r\n            }\r\n            data = data + text + '\\r\\n';\r\n        }\r\n        return data;\r\n    }\r\n\r\n    public setDrawColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public ellipse(cx: number, cy: number, rx: number, ry: number, colorMode: string) {/*FIXME*/}\r\n    public circle(cx: number, cy: number, r: number, colorMode: string) {/*FIXME*/}\r\n    public setTextColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public text(x: number, y: number, text: string) {this.out('(' + text.replace('&lt;', '<').replace('&gt;', '>') + ') ' + x + ' ' + this.y(y) + ' F1 SMS'); }\r\n    public lineto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' lineto'); this.out('stroke'); }\r\n    public moveto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' moveto'); }\r\n    public line(x1: number, y1: number, x2: number, y2: number) {this.out('newpath ' + x1 + ' ' + this.y(y1) + ' moveto ' + x2 + ' ' + this.y(y2) + ' lineto stroke'); }\r\n    public setLineWidth(value: string) {this.out(value + ' setlinewidth'); }\r\n    public setFont(value: string) {this.out('/F' + (this.font += 1) + ' 10 /' + value + ' FSD'); }\r\n}\r\n","import { Graph } from './elements/Graph';\r\n\r\n/*const buttons = {\r\n    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    clazz: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n};\r\n*/\r\nexport default class Palette {\r\n\r\n    private graph: Graph;\r\n    private palette: Element;\r\n    private root: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n        let div = document.createElement('div');\r\n        div.className = 'palette';\r\n        div.id = 'palette';\r\n        this.root = div;\r\n        this.palette = div;\r\n        for (let key in graph.nodeFactory) {\r\n            let element = graph.nodeFactory[key];\r\n            let control = new element();\r\n            let icon = control.getToolBarIcon();\r\n            if (icon) {\r\n                let button = <HTMLButtonElement>document.createElement('button');\r\n                button.className = 'add' + key + 'Btn';\r\n                button.innerHTML = icon.outerHTML;\r\n                button.onclick = e => {\r\n                    let nextFreePosition = this.graph.getNextFreePosition();\r\n                    // let node = this.graph.addElementWithValues(graph.nodeFactory[key], {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    let node = this.graph.addElementWithValues(key, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    this.graph.drawElement(node);\r\n                };\r\n                this.palette.appendChild(button);\r\n            }\r\n        }\r\n        // this.graph.nodeFactory\r\n//        this.addButtons();\r\n    }\r\n\r\n    public show() {\r\n        document.body.appendChild(this.root);\r\n    }\r\n\r\n    private addButtons() {\r\n        /*for (let btn in buttons) {\r\n            let button = <HTMLButtonElement>document.createElement('button');\r\n            button.className = 'add' + btn + 'Btn';\r\n            button.innerHTML = buttons[btn];\r\n            button.onclick = e => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let node = this.graph.addElementWithValues(btn, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                this.graph.drawElement(node);\r\n            };\r\n            this.palette.appendChild(button);\r\n        }*/\r\n    }\r\n}\r\n","import {Graph} from './elements/Graph';\r\nimport * as edges from './elements/edges';\r\nimport {EventBus, EventHandler} from './EventBus';\r\nimport {DiagramElement} from './elements/BaseElements';\r\nimport {Util} from './util';\r\n\r\nexport class PanelGroup implements EventHandler {\r\n    private graph: Graph;\r\n    private selectedElement: DiagramElement;\r\n    private clearPanel: Panel;\r\n    private generatePanel: Panel;\r\n    private propertiesMasterPanel: HTMLDivElement;\r\n    private propertiesContent: HTMLDivElement;\r\n    private propHeaderLabel: HTMLDivElement;\r\n    private propHeaderButton: HTMLButtonElement;\r\n    private selectedPanel: Panel;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.clearPanel = new ClearPanel(this);\r\n        this.generatePanel = new GeneratePanel(this);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        this.handleOpenProperties(event, element);\r\n\r\n        if (event.type === EventBus.RELOADPROPERTIES\r\n            && this.selectedElement && element.id === this.selectedElement.id) {\r\n            this.handleEvent(event, element);\r\n        }\r\n\r\n        // the same element was clicked. do nothing\r\n        if (this.selectedElement && this.selectedElement.id === element.id) {\r\n            return true;\r\n        }\r\n        if (element.id === 'RootElement') {\r\n            this.setActivePanel(this.clearPanel);\r\n        }\r\n        if (element.id === 'GenerateProp') {\r\n            this.setActivePanel(this.generatePanel);\r\n        }\r\n        this.selectedElement = element;\r\n\r\n        return true;\r\n    }\r\n\r\n    public getGraph(): Graph {\r\n        return this.graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(PanelGroup.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(PanelGroup.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n     public handleEvent(event: any, element: any) {\r\n        // DO NOTHING\r\n    }\r\n\r\n    public show() {\r\n        // main div to display any properties, class, edge, etc.\r\n        this.propertiesMasterPanel = document.createElement('div');\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n\r\n        this.propertiesContent = document.createElement('div');\r\n        this.propertiesContent.className = 'properties-hidden';\r\n\r\n        this.propHeaderLabel = document.createElement('div');\r\n        this.propHeaderLabel.style.display = 'inherit';\r\n        this.propHeaderLabel.style.cursor = 'pointer';\r\n        this.propHeaderLabel.onclick = e => this.toogleProperties(e);\r\n\r\n        // button to display and hide the properties of e.g. a class\r\n        this.propHeaderButton = document.createElement('button');\r\n        this.propHeaderButton.className = 'btnHideProp';\r\n        this.propHeaderButton.style.cssFloat = 'right';\r\n        this.propHeaderButton.onclick = e => this.toogleProperties(e);\r\n\r\n        let propertiesHeader = document.createElement('div');\r\n        propertiesHeader.style.display = 'inline';\r\n        propertiesHeader.appendChild(this.propHeaderLabel);\r\n        propertiesHeader.appendChild(this.propHeaderButton);\r\n\r\n        this.propertiesMasterPanel.appendChild(propertiesHeader);\r\n        this.propertiesMasterPanel.appendChild(this.propertiesContent);\r\n        document.body.appendChild(this.propertiesMasterPanel);\r\n\r\n        this.setActivePanel(this.clearPanel);\r\n    }\r\n\r\n    public setActivePanel(panel: Panel) {\r\n        this.selectedPanel = panel;\r\n        this.propHeaderLabel.innerHTML = panel.getHeaderText();\r\n        if (this.propertiesContent) {\r\n            while (this.propertiesContent.hasChildNodes()) {\r\n                this.propertiesContent.removeChild(this.propertiesContent.childNodes[0]);\r\n            }\r\n        }\r\n        panel.show();\r\n\r\n        panel.showFirstTab();\r\n        if (panel !== this.clearPanel) {\r\n            this.showProperties(null);\r\n        } else {\r\n            this.hideProperties(null);\r\n        }\r\n    }\r\n\r\n    public getProperiesContent(): HTMLDivElement {\r\n        return this.propertiesContent;\r\n    }\r\n\r\n    private handleOpenProperties(event: Event, element: DiagramElement) {\r\n        if (event.type === 'dblclick') {\r\n            this.showProperties(event);\r\n        }\r\n    }\r\n\r\n    private showProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Show\r\n        this.propHeaderButton.innerHTML = '&#8897;';\r\n        this.propHeaderButton.title = 'Hide properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel';\r\n        this.propertiesContent.className = 'properties';\r\n    }\r\n\r\n    private toogleProperties(evt: Event): void {\r\n        if (this.propHeaderButton.title === 'Show properties') {\r\n            this.showProperties(evt);\r\n        } else {\r\n            this.hideProperties(evt);\r\n        }\r\n    }\r\n\r\n    private hideProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Hide\r\n        this.propHeaderButton.innerHTML = '&#8896;';\r\n        this.propHeaderButton.title = 'Show properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n        this.propertiesContent.className = 'properties-hidden';\r\n    }\r\n}\r\n\r\nexport abstract class Panel {\r\n    protected divPropertiesPanel: HTMLDivElement;\r\n    protected divPropertiesTabbedPanel: HTMLDivElement;\r\n    protected element: any;\r\n    protected group: PanelGroup;\r\n    private panelItem: PanelItem[] = [];\r\n\r\n    constructor(group: PanelGroup, element: any) {\r\n        // get the properties content panel\r\n        this.divPropertiesPanel = document.createElement('div');\r\n        this.element = element;\r\n        this.group = group;\r\n\r\n        this.divPropertiesTabbedPanel = document.createElement('div');\r\n        this.divPropertiesTabbedPanel.className = 'tabbedpane';\r\n\r\n        // add tabbed panel\r\n        this.divPropertiesPanel.appendChild(this.divPropertiesTabbedPanel);\r\n    }\r\n\r\n    public show(): void {\r\n        let propertiesContent: HTMLDivElement = this.group.getProperiesContent();\r\n        if (this.panelItem.length > 1) {\r\n            propertiesContent.appendChild(this.getPropertiesTabbedPanel());\r\n        }\r\n\r\n        propertiesContent.appendChild(this.getPropertiesPanel());\r\n    }\r\n\r\n    public getPropertiesTabbedPanel(): HTMLDivElement {\r\n        return this.divPropertiesTabbedPanel;\r\n    }\r\n\r\n    public getPropertiesPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return '';\r\n    }\r\n\r\n    public showFirstTab(): void {\r\n        if (this.panelItem.length > 0) {\r\n            this.openTab(this.panelItem[0]);\r\n        }\r\n    }\r\n\r\n    protected createTabElement(tabText: string, tabValue: string, item: PanelItem): PanelItem {\r\n        let tabElementBtn = document.createElement('button');\r\n        tabElementBtn.className = 'tablinks';\r\n        tabElementBtn.innerText = tabText;\r\n        tabElementBtn.value = tabValue;\r\n\r\n        if (item === null) {\r\n            item = new PanelItem(this);\r\n        }\r\n        item.withButton(tabElementBtn);\r\n\r\n        tabElementBtn.onclick = () => this.openTab(item);\r\n        this.divPropertiesTabbedPanel.appendChild(tabElementBtn);\r\n        this.panelItem.push(item);\r\n        return item;\r\n    }\r\n\r\n    protected openTab(panelItem: PanelItem): void {\r\n        for (let key in this.panelItem) {\r\n            let child = this.panelItem[key];\r\n            if (child !== panelItem) {\r\n                 child.deactive();\r\n            }\r\n        }\r\n        panelItem.active();\r\n        // hide other tabcontent\r\n        if (this.divPropertiesPanel) {\r\n            while (this.divPropertiesPanel.hasChildNodes()) {\r\n                this.divPropertiesPanel.removeChild(this.divPropertiesPanel.childNodes[0]);\r\n            }\r\n        }\r\n\r\n        // ADD\r\n        if (panelItem.getContent()) {\r\n            this.divPropertiesPanel.appendChild(panelItem.getContent());\r\n        }\r\n    }\r\n}\r\n\r\nexport class GeneratePanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n\r\n        let item: PanelItem = this.createTabElement('General', 'General', null);\r\n\r\n        // Workspace and generate code stuff\r\n        let inputGenerateWorkspace: HTMLInputElement =  <HTMLInputElement> Util.createHTML({tag: 'input', id: 'workspace', type: 'text', placeholder: 'Type your Folder for generated code...', value: 'src/main/java', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Folder:', inputGenerateWorkspace);\r\n\r\n        let inputGeneratePackage: HTMLInputElement = <HTMLInputElement> Util.createHTML({tag: 'input', id: 'package', type: 'text', placeholder: 'Type your workspace for generated code...', value: '', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Package:', inputGeneratePackage);\r\n\r\n        let options = document.createElement('div');\r\n        options.style.textAlign = 'center';\r\n        options.style.margin = '3';\r\n        options.style.padding = '5';\r\n\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(options);\r\n\r\n        options.style.borderStyle = 'groove';\r\n        options.style.borderRadius = '10px';\r\n\r\n        let btnGenerate = document.createElement('button');\r\n        btnGenerate.textContent = 'Generate';\r\n        btnGenerate.title = 'Generate code into your workspace';\r\n        btnGenerate.className = 'OptionElement';\r\n\r\n        let that = this;\r\n        btnGenerate.onclick = () => {\r\n            let workspace = inputGeneratePackage.value;\r\n            if (workspace.length === 0) {\r\n                alert('No workspace set.\\nEnter first your workspace');\r\n                inputGeneratePackage.focus();\r\n                return;\r\n            }\r\n            that.group.getGraph().generate(workspace, inputGenerateWorkspace.value);\r\n        };\r\n        options.appendChild(btnGenerate);\r\n        options.appendChild(document.createElement('hr'));\r\n        options.appendChild(document.createElement('br'));\r\n\r\n        let btnAutoLayout = Util.createHTML({tag: 'button', className: 'OptionElement', value: 'Auto Layout', style: {marginRight: '10px'}, onclick: () => {\r\n                that.group.getGraph().layout();\r\n            }});\r\n\r\n        options.appendChild(btnAutoLayout);\r\n\r\n        // delete all nodes\r\n        let btnDeleteAll = document.createElement('button');\r\n        btnDeleteAll.className = 'OptionElement';\r\n        btnDeleteAll.textContent = 'Delete All';\r\n        btnDeleteAll.title = 'Delete all nodes from diagram';\r\n\r\n        btnDeleteAll.onclick = () => {\r\n            let confirmDelete = confirm('All classes will be deleted!');\r\n            if (!confirmDelete) {\r\n                return;\r\n            }\r\n            that.group.getGraph().$graphModel.removeAllElements();\r\n        };\r\n        btnDeleteAll.style.marginRight = '10px';\r\n        options.appendChild(btnDeleteAll);\r\n\r\n        // export stuff\r\n        let exportTypes: string[] = ['Export', 'HTML', 'JSON', 'PDF', 'PNG', 'SVG'];\r\n        let selectExport = document.createElement('select');\r\n\r\n        exportTypes.forEach(type => {\r\n            if (!(!window['jsPDF'] && type === 'PDF')) {\r\n                let option = document.createElement('option');\r\n                option.value = type;\r\n                option.textContent = type;\r\n                selectExport.appendChild(option);\r\n            }\r\n        });\r\n\r\n        selectExport.onchange = (evt) => {\r\n            let selectedExportType = selectExport.options[selectExport.selectedIndex].value;\r\n            selectExport.selectedIndex = 0;\r\n            that.group.getGraph().saveAs(selectedExportType);\r\n        };\r\n        selectExport.className = 'OptionElement';\r\n        options.appendChild(selectExport);\r\n        options.appendChild(document.createElement('br'));\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Properties';\r\n    }\r\n\r\n}\r\n\r\nexport class ClearPanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Select any element to see its properties';\r\n    }\r\n}\r\n\r\nexport class PanelItem {\r\n    protected panel: Panel;\r\n    protected label: string;\r\n    protected button: HTMLButtonElement;\r\n    protected content: HTMLDivElement = <HTMLDivElement>Util.create({tag: 'div', className: 'tabContent'});\r\n\r\n    constructor(panel: Panel, label?: string) {\r\n        this.panel = panel;\r\n        this.label = label;\r\n    }\r\n\r\n    public active(): void {\r\n        if (this.getButton()) {\r\n            this.getButton().className += ' active';\r\n        }\r\n    }\r\n\r\n    public deactive(): void {\r\n        if (this.getButton()) {\r\n            Util.removeClass(this.getButton(), 'active');\r\n        }\r\n    }\r\n\r\n    public withButton(button: HTMLButtonElement): PanelItem {\r\n        this.button = button;\r\n        return this;\r\n    }\r\n\r\n    public withContent(element: HTMLElement): PanelItem {\r\n        this.content.appendChild(element);\r\n        return this;\r\n    }\r\n\r\n    public withInput(labelText: string, element: HTMLElement): PanelItem {\r\n        let group: HTMLDivElement = <HTMLDivElement> Util.createHTML({tag: 'div'});\r\n        let label = Util.createHTML({tag: 'label', for: element.id, value: labelText});\r\n        group.appendChild(label);\r\n        group.appendChild(element);\r\n\r\n        this.content.appendChild(group);\r\n        return this;\r\n    }\r\n\r\n    public getButton(): HTMLButtonElement {\r\n        return this.button;\r\n    }\r\n\r\n    public getContent(): HTMLDivElement {\r\n        return this.content;\r\n    }\r\n\r\n   public getHeader(): string {\r\n        return this.label;\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\nimport Data from './Data';\r\n\r\nexport class PropertyBinder implements PropertyChangeSupport {\r\n    private propertyClass1: string;\r\n    private propertyClass2: string;\r\n    private data1: Data;\r\n    private data2: Data;\r\n    // works like a lock\r\n    private applyingChange: boolean = false;\r\n\r\n    constructor(data1: Data, data2: Data, propertyClass1: string, propertyClass2: string) {\r\n        this.data1 = data1;\r\n        this.data2 = data2;\r\n        this.propertyClass1 = propertyClass1;\r\n        this.propertyClass2 = propertyClass2;\r\n    }\r\n    static bind(data1: Data, data2: Data, property1: string, property2: string) {\r\n        if (!data1 || !data2 || !property1) {\r\n            console.error('NullValue!!');\r\n            return null;\r\n        }\r\n        const propertyBinder = new PropertyBinder(data1, data2, property1, property2);\r\n        propertyBinder.bind();\r\n        return propertyBinder;\r\n    }\r\n\r\n    propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        if (!this.applyingChange) {\r\n            this.applyingChange = true;\r\n            if (entity === this.data1) {\r\n                // fire to data2\r\n                this.data2.setValue(this.propertyClass2, newValue);\r\n            } else if (entity === this.data2) {\r\n                // fire to data1\r\n                this.data1.setValue(this.propertyClass1, newValue);\r\n            }\r\n            this.applyingChange = false;\r\n        }\r\n    }\r\n\r\n    protected bind() {\r\n        // public addListener(control: Control, property?: string)\r\n        // todo: set value immediately\r\n        this.data1.setValue(this.propertyClass1, this.data2.getValue(this.propertyClass2));\r\n\r\n        this.data1.addListener(this, this.propertyClass1);\r\n        this.data2.addListener(this, this.propertyClass2);\r\n    }\r\n\r\n    protected unbind() {\r\n        // public addListener(control: Control, property?: string)\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n    }\r\n}\r\n","// ################################## RGBColor ####################################################\r\nexport class RGBColor {\r\n    public  ok: boolean;\r\n    public r: number;\r\n    public g: number;\r\n    public b: number;\r\n\r\n    constructor(value: string) {\r\n        this.ok = false;\r\n        if (value === 'none') {\r\n            return;\r\n        }\r\n        let computedColor, div = document.createElement('div');\r\n        div.style.backgroundColor = value;\r\n        document.body.appendChild(div);\r\n        computedColor = window.getComputedStyle(div).backgroundColor;\r\n        // cleanup temporary div.\r\n        document.body.removeChild(div);\r\n        this.convert(computedColor);\r\n    }\r\n    public convert(value: any) {\r\n        let values, regex = /rgb *\\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\\)/;\r\n        values = regex.exec(value);\r\n        this.r = parseInt(values[1], 10);\r\n        this.g = parseInt(values[2], 10);\r\n        this.b = parseInt(values[3], 10);\r\n        this.ok = true;\r\n    }\r\n\r\n    public toRGB(): string {return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; }\r\n    public toHex(): string {\r\n        return '#' + (this.r + 0x10000).toString(16).substring(3).toUpperCase() + (this.g + 0x10000).toString(16).substring(3).toUpperCase() + (this.b + 0x10000).toString(16).substring(3).toUpperCase();\r\n    }\r\n}\r\n","/*\r\n NetworkParser\r\n Copyright (c) 2011 - 2014, Stefan Lindel\r\n All rights reserved.\r\n\r\n Licensed under the EUPL, Version 1.1 or (as soon they\r\n will be approved by the European Commission) subsequent\r\n versions of the EUPL (the \"Licence\");\r\n You may not use this work except in compliance with the Licence.\r\n You may obtain a copy of the Licence at:\r\n\r\n http://ec.europa.eu/idabc/eupl5\r\n\r\n Unless required by applicable law or agreed to in\r\n writing, software distributed under the Licence is\r\n distributed on an \"AS IS\" basis,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\r\n express or implied.\r\n See the Licence for the specific language governing\r\n permissions and limitations under the Licence.\r\n*/\r\nimport {RGBColor} from './RGBColor';\r\nimport {JSEPS} from \"./JSEPS\";\r\n\r\nconst epsSvgAttr = {\r\n    // allowed attributes. all others are removed from the preview.\r\n    g: ['stroke', 'fill', 'stroke-width'],\r\n    line: ['x1', 'y1', 'x2', 'y2', 'stroke', 'stroke-width'],\r\n    rect: ['x', 'y', 'width', 'height', 'stroke', 'fill', 'stroke-width'],\r\n    ellipse: ['cx', 'cy', 'rx', 'ry', 'stroke', 'fill', 'stroke-width'],\r\n    circle: ['cx', 'cy', 'r', 'stroke', 'fill', 'stroke-width'],\r\n    text: ['x', 'y', 'font-size', 'font-family', 'text-anchor', 'font-weight', 'font-style', 'fill'],\r\n    path: ['']\r\n};\r\nexport class SVGConverter {\r\n    private k: number;\r\n    private remove: boolean;\r\n    private target: any;\r\n\r\n    constructor(element: any, target: any, options: any) {\r\n        this.k = 1.0;\r\n        let hasScale = typeof (options.scale), hasRemoveInvalid = typeof (options.removeInvalid);\r\n        this.k = (options && hasScale !== 'undefined' ? options.scale : 1.0);\r\n        this.remove = (options && hasRemoveInvalid !== 'undefined' ? options.removeInvalid : false);\r\n        this.target = target;\r\n        this.parse(element);\r\n    }\r\n\r\n    public parse(element: any) {\r\n        let el, i, n, colorMode, hasFillColor, fillRGB, fillColor, strokeColor, strokeRGB, fontType, pdfFontSize, x, y,\r\n            box, xOffset;\r\n        if (!element) {\r\n            return;\r\n        }\r\n        if (typeof element === 'string') {\r\n            el = document.createElement('div');\r\n            el.innerHTML = element;\r\n            element = el.childNodes[0];\r\n        }\r\n        for (i = 0; i < element.children.length; i += 1) {\r\n            n = element.children[i];\r\n            colorMode = null;\r\n            hasFillColor = false;\r\n            if ('g,line,rect,ellipse,circle,text'.indexOf(n.tagName) >= 0) {\r\n                fillColor = n.getAttribute('fill');\r\n                if (fillColor) {\r\n                    fillRGB = new RGBColor(fillColor);\r\n                    if (fillRGB.ok) {\r\n                        hasFillColor = true;\r\n                        colorMode = 'F';\r\n                    }\r\n                }\r\n            }\r\n            if ('g,line,rect,ellipse,circle'.indexOf(n.tagName) >= 0) {\r\n                if (hasFillColor) {\r\n                    this.target.setFillColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                }\r\n                strokeColor = n.getAttribute('stroke');\r\n                if (n.hasAttribute('stroke-width')) {\r\n                    this.target.setLineWidth(this.attr(n, 'stroke-width'));\r\n                }\r\n                if (strokeColor) {\r\n                    strokeRGB = new RGBColor(strokeColor);\r\n                    if (strokeRGB.ok) {\r\n                        this.target.setDrawColor(strokeRGB.r, strokeRGB.g, strokeRGB.b);\r\n                        if (colorMode === 'F') {\r\n                            colorMode = 'FD';\r\n                        } else if (!hasFillColor) {\r\n                            colorMode = 'S';\r\n                        }\r\n                    } else {\r\n                        colorMode = null;\r\n                    }\r\n                }\r\n            }\r\n            // console.log(\"write \"+n.tagName);\r\n            switch (n.tagName.toLowerCase()) {\r\n                case 'svg':\r\n                case 'a':\r\n                case 'g':\r\n                    this.parse(n);\r\n                    break;\r\n                case 'line':\r\n                    this.target.line(this.attr(n, 'x1'), this.attr(n, 'y1'), this.attr(n, 'x2'), this.attr(n, 'y2'));\r\n                    break;\r\n                case 'rect':\r\n                    this.target.rect(this.attr(n, 'x'), this.attr(n, 'y'), this.attr(n, 'width'), this.attr(n, 'height'), n.getAttribute('style'));\r\n                    break;\r\n                case 'ellipse':\r\n                    this.target.ellipse(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'rx'), this.attr(n, 'ry'), colorMode);\r\n                    break;\r\n                case 'circle':\r\n                    this.target.circle(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'r'), colorMode);\r\n                    break;\r\n                case 'text':\r\n                    if (n.hasAttribute('font-family')) {\r\n                        switch (n.getAttribute('font-family').toLowerCase()) {\r\n                            case 'serif':\r\n                                this.target.setFont('times');\r\n                                break;\r\n                            case 'monospace':\r\n                                this.target.setFont('courier');\r\n                                break;\r\n                            default:\r\n                                n.getAttribute('font-family', 'sans-serif');\r\n                                this.target.setFont('Helvetica');\r\n                        }\r\n                    }\r\n                    if (hasFillColor) {\r\n                        this.target.setTextColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                    }\r\n                    if (this.target instanceof JSEPS) {\r\n                        this.target.text(this.attr(n, 'x'), this.attr(n, 'y'), n.innerHTML);\r\n                        break;\r\n                    }\r\n                    fontType = '';\r\n                    if (n.hasAttribute('font-weight')) {\r\n                        if (n.getAttribute('font-weight') === 'bold') {\r\n                            fontType = 'bold';\r\n                        }\r\n                    }\r\n                    if (n.hasAttribute('font-style')) {\r\n                        if (n.getAttribute('font-style') === 'italic') {\r\n                            fontType += 'italic';\r\n                        }\r\n                    }\r\n                    this.target.setFontType(fontType);\r\n                    pdfFontSize = 16;\r\n                    if (n.hasAttribute('font-size')) {\r\n                        pdfFontSize = parseInt(n.getAttribute('font-size'), 10);\r\n                    }\r\n                    box = n.getBBox();\r\n                    // FIXME: use more accurate positioning!!\r\n                    x = this.attr(n, 'x');\r\n                    y = this.attr(n, 'y');\r\n                    xOffset = 0;\r\n                    if (n.hasAttribute('text-anchor')) {\r\n                        switch (n.getAttribute('text-anchor')) {\r\n                            case 'end':\r\n                                xOffset = box.width;\r\n                                break;\r\n                            case 'middle':\r\n                                xOffset = box.width / 2;\r\n                                break;\r\n                            case 'start':\r\n                                break;\r\n                            case 'default':\r\n                                n.getAttribute('text-anchor', 'start');\r\n                                break;\r\n                        }\r\n                        x = x - (xOffset * this.k);\r\n                    }\r\n                    this.target.setFontSize(pdfFontSize).text(x, y, n.innerHTML);\r\n                    break;\r\n                default:\r\n                    if (this.remove) {\r\n                        console.log('cant translate to target:', n);\r\n                        element.removeChild(n);\r\n                        i -= 1;\r\n                    }\r\n            }\r\n        }\r\n    }\r\n\r\n    public attr(node: any, name: string) {\r\n        return this.k * parseInt(node.getAttribute(name), 10);\r\n    }\r\n}\r\n","import {Control} from './Control';\r\n\r\nexport class ScrumBoard extends Control {\r\n    public static cards = [0, 0.5, 1, 2, 3, 5, 8, 13, 20, 40, 100, '?', 'Coffee'];\r\n    private $selected: HTMLDivElement;\r\n    private $board: HTMLDivElement;\r\n\r\n    constructor() {\r\n        super();\r\n        this.redraw();\r\n    }\r\n\r\n    public redraw(): void {\r\n        if (this.$board) {\r\n            while (this.$board.children.length > 0 ) {\r\n                this.$board.removeChild(this.$board.children[0]);\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('div');\r\n            this.$selected = document.createElement('div');\r\n            this.$board = document.createElement('div');\r\n            this.$view.appendChild(this.$board);\r\n            this.$view.appendChild(this.$selected);\r\n        }\r\n        this.$view.className = 'ScrumBoard';\r\n        for ( let i = 0; i < ScrumBoard.cards.length; i++) {\r\n            let card = document.createElement('div');\r\n            card.className = 'ScrumCard';\r\n            card.innerHTML = <string>ScrumBoard.cards[i];\r\n            card['pokervalue'] = <string>ScrumBoard.cards[i];\r\n            card.onclick = e => {\r\n                this.onClick(<HTMLDivElement>e.target);\r\n            };\r\n            this.$board.appendChild(card);\r\n        }\r\n    }\r\n\r\n    public getSVG() {\r\n        this.redraw();\r\n        return this.$view;\r\n    }\r\n\r\n    public onClick(target: HTMLDivElement): void {\r\n        console.log(target['pokervalue']);\r\n\r\n        while (this.$selected.children.length > 0 ) {\r\n            this.$selected.removeChild(this.$selected.children[0]);\r\n        }\r\n        let card = document.createElement('div');\r\n        card.className = 'ScrumCard';\r\n        card['pokervalue'] = target['pokervalue'];\r\n        card.onclick = e => {\r\n            this.onShow(<HTMLDivElement>e.target);\r\n        };\r\n        this.$selected.appendChild(card);\r\n        this.$board['style']['display'] = 'none';\r\n    }\r\n\r\n    public onShow(target: HTMLDivElement): void {\r\n        target.innerHTML = target['pokervalue'];\r\n    }\r\n}\r\n","import {Graph} from './main';\r\nimport {SymbolLibary} from './elements/nodes/Symbol';\r\nimport {EventBus} from './EventBus';\r\n\r\nexport class Toolbar {\r\n\r\n    private graph: Graph;\r\n    private mainDiv: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public show(): void {\r\n        if (this.mainDiv) {\r\n            return;\r\n        }\r\n\r\n        this.mainDiv = document.createElement('div');\r\n        this.mainDiv.className = 'toolbar';\r\n\r\n        let h1Logo = document.createElement('h1');\r\n        h1Logo.className = 'logo';\r\n        h1Logo.textContent = 'DiagramJS';\r\n\r\n        let node = {type: 'Hamburger', property: 'HTML', width: 24, height: 24, id: 'GenerateProp'};\r\n        let hamburger = SymbolLibary.draw( node);\r\n        EventBus.registerEvent(hamburger, 'click', node);\r\n        this.mainDiv.appendChild(hamburger);\r\n\r\n        this.mainDiv.appendChild(h1Logo);\r\n        document.body.appendChild(this.mainDiv);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 06.03.2017.\r\n */\r\nimport Data from './Data';\r\n\r\n// export default class Data {\r\n//    public values = {};\r\n//    id: string;\r\n//    $listener: Control[] = [];\r\n//    property: string;\r\nexport namespace UML {\r\n    export class Clazz extends Data {\r\n        public static NAME: string = 'name';\r\n        public static ATTRIBUTES: string = 'attributes';\r\n        public static METHODS: string = 'methods';\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Clazz';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n\r\n        public getAttributes() {\r\n            return this.prop[Clazz.ATTRIBUTES];\r\n        }\r\n\r\n        public addToAttributes(newValue: string) {\r\n            this.addTo(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n\r\n        public removeFromAttributes(newValue: string) {\r\n            this.removeFrom(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n    }\r\n\r\n    export class Attribute extends Data {\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Attribute';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n    }\r\n\r\n    export class Methods extends Data {\r\n\r\n    }\r\n}\r\n\r\nwindow['UML'] = UML;\r\n","import {Control} from './Control';\r\n\r\nexport class VirtualKeyBoard extends Control {\r\n    constructor(data: any) {\r\n        super();\r\n        if (!data) {\r\n            data = this.getDefault();\r\n        }\r\n        let board = document.createElement('div');\r\n        this.$viewData = data;\r\n\r\n        for (let type in data) {\r\n            if (type === 'normal') {\r\n                for (let line in data[type]) {\r\n                    let lineBoard = document.createElement('div');\r\n                    lineBoard.className = 'vkLine';\r\n                    for (let key in data[type][line]) {\r\n                        let btn: HTMLButtonElement = document.createElement('button');\r\n                        let keyTag = data[type][line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                        btn.ontouchend = () => {this.action(btn); };\r\n                        btn.onclick = () => {this.action(btn); };\r\n                        lineBoard.appendChild(btn);\r\n                    }\r\n                    board.appendChild(lineBoard);\r\n                }\r\n            }\r\n        }\r\n        this.$view = board;\r\n    }\r\n\r\n    public action(btn: HTMLButtonElement) {\r\n        if (btn['key'] === '{Shift}') {\r\n            if ( btn.className === 'vkbuttonAction') {\r\n                let keys = this.$viewData['normal'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                    }\r\n                }\r\n            } else if ( btn.className === 'vkbutton') {\r\n                let keys = this.$viewData['shift'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbuttonAction');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        alert(btn);\r\n    }\r\n\r\n    public getDefault(): any {\r\n        let format = {\r\n            normal: [\r\n                ['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '?', '´', '{Bksp}'],\r\n                ['{Tab}', 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+'],\r\n                ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '#', '{enter}'],\r\n                ['{Shift}', '<', 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n// '{left}', '{up}', '{down}','{right}', '{Cancel}']\r\n            ],\r\n            shift: [\r\n                ['°', '!', '\"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '`', '{Bksp}'],\r\n                ['{Tab}', 'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', 'O', 'P', 'Ü', '*'],\r\n                ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', '\\'', '{enter}'],\r\n                ['{Shift}', '>', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n            ]\r\n        };\r\n        return format;\r\n    }\r\n\r\n    public getBoard() {\r\n        return this.$view;\r\n    }\r\n\r\n    private setButtonValue(keyTag: string, btn: HTMLButtonElement, shiftClass: string) {\r\n        btn.className = 'vkbutton';\r\n        btn['key'] = keyTag;\r\n        btn['type'] = 'normal';\r\n        if (keyTag.substring(0, 1) === '{') {\r\n            if (keyTag === '{Bksp}') {\r\n                btn.innerHTML = 'Bksp';\r\n            } else if (keyTag === '{Tab}') {\r\n                btn.innerHTML = '&#8677; Tab';\r\n            } else if (keyTag === '{enter}') {\r\n                btn.innerHTML = 'enter';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Shift}') {\r\n                btn.innerHTML = 'Shift';\r\n                btn.className = shiftClass;\r\n            } else if (keyTag === '{Accept}') {\r\n                btn.innerHTML = 'Accept';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Alt}') {\r\n                btn.innerHTML = 'Alt';\r\n            } else if (keyTag === '{Space}') {\r\n                btn.innerHTML = '&nbsp;';\r\n                btn.className = 'vkbuttonSpace';\r\n            } else if (keyTag === '{left}') {\r\n                btn.innerHTML = '&#8592';\r\n            } else if (keyTag === '{right}') {\r\n                btn.innerHTML = '&#8594;';\r\n            } else if (keyTag === '{up}') {\r\n                btn.innerHTML = '&#8593;';\r\n            } else if (keyTag === '{down}') {\r\n                btn.innerHTML = '&#8595;';\r\n            } else if (keyTag === '{Cancel}') {\r\n                btn.innerHTML = 'Cancel';\r\n                btn.className = 'vkbuttonAction';\r\n            }\r\n        } else {\r\n            btn.innerHTML = keyTag;\r\n        }\r\n    }\r\n}\r\n","import {Adapter} from '../Adapter';\r\n\r\nexport class JavaAdapter extends Adapter {\r\n    constructor() {\r\n        super();\r\n        this.id = 'JavaAdapter';\r\n    }\r\n    update(evt: Object): boolean {\r\n        if (this.isActive()) {\r\n            window['JavaBridge'].executeChange(evt);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public isActive(): boolean {\r\n        return window['JavaBridge'];\r\n    }\r\n}\r\n","export * from './JavaAdapter';\r\n","import { Util } from '../util';\r\nimport { Control } from '../Control';\r\n\r\nexport interface Size {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\ninterface GraphElement {\r\n    getSize(): Point;\r\n\r\n    getPos(): Point;\r\n\r\n    getCenter(): Point;\r\n\r\n    getSVG(): Element;\r\n\r\n    getCanvas(): Element;\r\n\r\n    getEvents(): string[];\r\n\r\n    withPos(x: number, y: number): GraphElement;\r\n\r\n    load(data: any): any;\r\n\r\n    getToolBarIcon(): Element;\r\n\r\n    loadProperties(properties: any): void;\r\n}\r\n\r\nexport abstract class DiagramElement extends Control implements GraphElement {\r\n\r\n    protected $isDraggable: boolean = true;\r\n    protected $labelHeight = 25;\r\n    protected $labelFontSize = 14;\r\n    private $pos: Point = new Point();\r\n    private $size: Point = new Point();\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getPos(): Point {\r\n        return this.$pos;\r\n    }\r\n\r\n    public getSize(): Point {\r\n        return this.$size;\r\n    }\r\n\r\n    public getCenter(): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        return new Point(pos.x + size.x / 2, pos.y + size.y / 2);\r\n    }\r\n\r\n    public getCenterPosition(p: string): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let offset = this['$' + p];\r\n        let center = this.getCenter();\r\n        if (p === Point.DOWN) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y + size.y, Point.DOWN);\r\n        }\r\n        if (p === Point.UP) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y, Point.UP);\r\n        }\r\n        if (p === Point.LEFT) {\r\n            return new Point(pos.x, Math.min(center.y + offset, pos.y + size.y), Point.LEFT);\r\n        }\r\n        if (p === Point.RIGHT) {\r\n            return new Point(pos.x + size.x, Math.min(center.y + offset, pos.y + size.y), Point.RIGHT);\r\n        }\r\n        return new Point();\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getCanvas(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return null;\r\n    }\r\n\r\n    public getAlreadyDisplayingSVG(): Element {\r\n        return document.getElementById(this.id) || this.getSVG();\r\n    }\r\n\r\n    public load(data: any) {\r\n        // Do Nothing\r\n    }\r\n\r\n    public withPos(x: number, y: number): GraphElement {\r\n        if (x && y) {\r\n            this.$pos = new Point(x, y);\r\n        } else {\r\n            if (typeof (x) !== 'undefined' && x !== null) {\r\n                this.$pos.x = x;\r\n            }\r\n            if (typeof (y) !== 'undefined' && y !== null) {\r\n                this.$pos.y = y;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public withSize(width: number, height: number): DiagramElement {\r\n        if (width && height) {\r\n            this.$size = new Point(width, height);\r\n        } else {\r\n            if (typeof (width) !== 'undefined' && width !== null) {\r\n                this.$size.x = width;\r\n            }\r\n            if (typeof (height) !== 'undefined' && height !== null) {\r\n                this.$size.y = height;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        // FIXME if (this.status === 'close') {\r\n        // if (!this.$owner.isClosed()) {\r\n        //        return this;\r\n        //    }\r\n        // }\r\n        return super.getShowed();\r\n    }\r\n\r\n    public loadProperties(properties: any) {\r\n        // DO Nothing\r\n    }\r\n\r\n    protected createShape(attrs: any): Element {\r\n        return Util.createShape(attrs);\r\n    }\r\n}\r\n\r\nexport class Point {\r\n    public static UP: string = 'UP';\r\n    public static LEFT: string = 'LEFT';\r\n    public static RIGHT: string = 'RIGHT';\r\n    public static DOWN: string = 'DOWN';\r\n    x: number = 0;\r\n    y: number = 0;\r\n\r\n    //    pos:string = '';\r\n\r\n    constructor(x?: number, y?: number, pos?: string) {\r\n        this.x = Math.ceil(x || 0);\r\n        this.y = Math.ceil(y || 0);\r\n        if (pos) {\r\n            this['pos'] = pos;\r\n        }\r\n    }\r\n\r\n    public add(pos: Point) {\r\n        this.x += pos.x;\r\n        this.y += pos.y;\r\n        return this;\r\n    }\r\n\r\n    public getPosition(): string {\r\n        if (!this['pos']) {\r\n            return '';\r\n        }\r\n        return this['pos'];\r\n    }\r\n\r\n    public addNum(x: number, y: number) {\r\n        this.x += x;\r\n        this.y += y;\r\n        return this;\r\n    }\r\n\r\n    public sum(pos: Point) {\r\n        let sum = new Point(this.x, this.y);\r\n        sum.add(pos);\r\n        return sum;\r\n    }\r\n\r\n    public center(posA: Point, posB: Point) {\r\n        let count = 0;\r\n        if (posA) {\r\n            this.x += posA.x;\r\n            this.y += posA.y;\r\n            count++;\r\n        }\r\n        if (posB) {\r\n            this.x += posB.x;\r\n            this.y += posB.y;\r\n            count++;\r\n        }\r\n        if (count > 0) {\r\n            this.x = (this.x / count);\r\n            this.y = (this.y / count);\r\n        }\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        return this.x < 1 && this.y < 1;\r\n    }\r\n\r\n    public size(posA: Point, posB: Point) {\r\n        let x1 = 0, x2 = 0, y1 = 0, y2 = 0;\r\n        if (posA) {\r\n            x1 = posA.x;\r\n            y1 = posA.y;\r\n        }\r\n        if (posB) {\r\n            x2 = posB.x;\r\n            y2 = posB.y;\r\n        }\r\n        if (x1 > x2) {\r\n            this.x = x1 - x2;\r\n        } else {\r\n            this.x = x2 - x1;\r\n        }\r\n        if (y1 > y2) {\r\n            this.y = y1 - y2;\r\n        } else {\r\n            this.y = y2 - y1;\r\n        }\r\n    }\r\n}\r\n\r\n// \t\t\t\t######################################################### Line #########################################################\r\nexport class Line extends DiagramElement {\r\n    public static FORMAT = { SOLID: 'SOLID', DOTTED: 'DOTTED', PATH: 'PATH' };\r\n    public source: Point;\r\n    public target: Point;\r\n    public color: string;\r\n    public lineType: string;\r\n    private path: string;\r\n    private angle: Number;\r\n\r\n    constructor(lineType: string) {\r\n        super();\r\n        this.lineType = lineType;\r\n    }\r\n\r\n    public getTyp(): string {\r\n        return 'SVG';\r\n    }\r\n\r\n    public getPos() {\r\n        let pos = new Point();\r\n        pos.center(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public getSize() {\r\n        let pos = new Point();\r\n        pos.size(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public withColor(color: string): Line {\r\n        this.color = color;\r\n        return this;\r\n    }\r\n\r\n    public withSize(x: number, y: number): DiagramElement {\r\n        return this;\r\n    }\r\n\r\n    public withPath(path: Array<Point>, close: boolean, angle?: any): Line {\r\n        let i: number, d: string = 'M' + path[0].x + ' ' + path[0].y;\r\n        this.lineType = Line.FORMAT.PATH; // It is a Path not a Line\r\n        for (i = 1; i < path.length; i += 1) {\r\n            d = d + 'L ' + path[i].x + ' ' + path[i].y;\r\n        }\r\n        if (close) {\r\n            d = d + ' Z';\r\n            this.target = path[0];\r\n        } else {\r\n            this.target = path[path.length - 1];\r\n        }\r\n        this.path = d;\r\n        if (angle instanceof Number) {\r\n            this.angle = angle;\r\n        } else if (angle) {\r\n            // var lineangle, start = path[0], end = path[path.length - 1];\r\n            // lineangle = Math.atan2(end.y - start.y, end.x - start.x);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): SVGGElement {\r\n        if (this.lineType === 'PATH') {\r\n            return <SVGGElement>Util.create({\r\n                tag: 'path',\r\n                'd': this.path,\r\n                'fill': this.color,\r\n                stroke: '#000',\r\n                'stroke-width': '1px'\r\n            });\r\n        }\r\n        let line: SVGGElement = <SVGGElement>Util.create({\r\n            tag: 'line',\r\n            'x1': this.source.x,\r\n            'y1': this.source.y,\r\n            'x2': this.target.x,\r\n            'y2': this.target.y,\r\n            'stroke': Util.getColor(this.color)\r\n        });\r\n        if (this.lineType && this.lineType.toLowerCase() === 'dotted') {\r\n            line.setAttribute('stroke-miterlimit', '4');\r\n            line.setAttribute('stroke-dasharray', '1,1');\r\n        }\r\n        return line;\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport Options from '../Options';\r\nimport {JavaAdapter} from '../adapters';\r\n\r\nexport class ClassEditor extends Graph {\r\n    private adapter: JavaAdapter;\r\n    constructor(json: any, options: Options) {\r\n        if (!options ) {\r\n            options = {};\r\n        }\r\n        options.canvas = options.canvas || 'canvas';\r\n        // options.origin = options.origin || new Point(150, 45);\r\n//            layout: \"DagreLayout\",\r\n        options.autoSave = options.autoSave || true;\r\n        if (!options.features) {\r\n            options.features = {\r\n                drag: true,\r\n                editor: true,\r\n                palette: true,\r\n                select: true,\r\n                zoom: true,\r\n                toolbar: true,\r\n                import: true,\r\n                properties: true,\r\n                addnode: true,\r\n                newedge: true\r\n            };\r\n        }\r\n        super(json, options);\r\n    }\r\n\r\n    public setBoardStyle(value: string) {\r\n        console.log(value);\r\n        this.importFile.setBoardStyle(value);\r\n    }\r\n\r\n    public registerListener(): void {\r\n        this.adapter = new JavaAdapter();\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return this.adapter;\r\n    }\r\n}\r\n","import * as edges from './edges';\r\nimport { Association } from './edges';\r\nimport * as nodes from './nodes';\r\nimport * as layouts from '../layouts';\r\nimport Layout from '../layouts/Layout';\r\nimport { GraphModel } from './Model';\r\nimport { Point, Size } from './BaseElements';\r\nimport { Util } from '../util';\r\nimport { Control } from '../Control';\r\nimport Data from '../Data';\r\nimport { EventBus } from '../EventBus';\r\nimport { AddNode, Drag, NewEdge, Select, Zoom } from '../handlers';\r\nimport Options from '../Options';\r\nimport { ImportFile } from '../handlers/ImportFile';\r\nimport { CSS } from '../CSS';\r\nimport { DiagramElement } from './index';\r\nimport { Toolbar } from '../Toolbar';\r\nimport {JSEPS} from '../JSEPS';\r\nimport {SVGConverter} from '../SVGConverter';\r\nimport Palette from '../Palette';\r\nimport {PanelGroup} from '../PropertiesPanel';\r\n\r\nexport class Graph extends Control {\r\n    // canvas: HTMLElement;\r\n    root: SVGElement;\r\n    $graphModel: GraphModel;\r\n    options: Options;\r\n    canvasSize: Size;\r\n    nodeFactory: Object;\r\n    edgeFactory: Object;\r\n    layoutFactory: Object;\r\n    protected importFile: ImportFile;\r\n    private currentlayout: Layout;\r\n    // private layerToolBar: SVGSVGElement;\r\n    // https://stackoverflow.com/questions/15181452/how-to-save-export-inline-svg-styled-with-css-from-browser-to-image-file\r\n    private containerElements = ['svg', 'g'];\r\n    private relevantStyles = {\r\n        'rect': ['fill', 'stroke', 'stroke-width'],\r\n        'path': ['fill', 'stroke', 'stroke-width', 'opacity'],\r\n        'circle': ['fill', 'stroke', 'stroke-width'],\r\n        'line': ['stroke', 'stroke-width'],\r\n        'text': ['fill', 'font-size', 'text-anchor', 'font-family'],\r\n        'polygon': ['stroke', 'fill']\r\n    };\r\n\r\n    constructor(json: any, options: Options) {\r\n        super();\r\n        json = json || {};\r\n        if (json['data']) {\r\n            options = json['options'];\r\n            json = json['data'];\r\n            this.id = json['id'];\r\n        }\r\n        this.options = options || {features: { drag: true}};\r\n        if (json['init']) {\r\n            return;\r\n        }\r\n        if (!this.options.origin) {\r\n            this.options.origin = new Point(150, 45);\r\n        }\r\n        if (!this.options.style) {\r\n            // Style can be classic or modern\r\n            this.options.style = 'classic';\r\n        }\r\n        if (this.options.autoSave) {\r\n            Util.isAutoSave = options.autoSave;\r\n        }\r\n\r\n        this.initFactories();\r\n        this.initCanvas();\r\n        this.initFeatures(this.options.features);\r\n\r\n        // load previous session, if user wants it\r\n        // otherwise load the json data\r\n        if (!this.lookupInLocalStorage()) {\r\n            this.load(json);\r\n        }\r\n\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    public lookupInLocalStorage(): boolean {\r\n        if (!this.options.autoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (!Util.isLocalStorageSupported()) {\r\n            return false;\r\n        }\r\n        let diagram = Util.getDiagramFromLocalStorage();\r\n        if (diagram && diagram.length > 0) {\r\n            if (confirm('Restore previous session?')) {\r\n                let jsonData: JSON = JSON.parse(diagram);\r\n                this.load(jsonData);\r\n                this.layout();\r\n                return true;\r\n            } else {\r\n                Util.saveToLocalStorage( null);\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public fitSizeOnNodes(): void {\r\n        let maxWidth: number = 0;\r\n        let maxHeight: number = 0;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            let nodePos = node.getPos();\r\n            let nodeSize = node.getSize();\r\n            let nodeWidestPosX = nodePos.x + nodeSize.x;\r\n            let nodeWidestPosY = nodePos.y + nodeSize.y;\r\n\r\n            if (nodeWidestPosX > maxWidth) {\r\n                maxWidth = nodeWidestPosX;\r\n            }\r\n\r\n            if (nodeWidestPosY > maxHeight) {\r\n                maxHeight = nodeWidestPosY;\r\n            }\r\n        }\r\n\r\n        this.root.setAttributeNS(null, 'width', '' + (maxWidth + 100));\r\n        this.root.setAttributeNS(null, 'height', '' + (maxHeight + 50));\r\n    }\r\n\r\n    public saveAs(typ: string) {\r\n        typ = typ.toLowerCase();\r\n\r\n        // shrink size of graph to minimum. only to show up nodes\r\n        const currentSize = this.getRootSize();\r\n        this.fitSizeOnNodes();\r\n\r\n        if (typ === 'svg') {\r\n            this.exportSvg();\r\n        } else if (typ === 'png') {\r\n            this.exportPng();\r\n        } else if (typ === 'html') {\r\n            this.exportHtml();\r\n\r\n        } else if (typ === 'pdf') {\r\n            this.exportPdf();\r\n            // } else if (typ === 'eps') {\r\n            // this.ExportEPS();\r\n        }\r\n        else if (typ === 'json') {\r\n            this.exportJson();\r\n        }\r\n\r\n        // set the size back to default\r\n        this.root.setAttributeNS(null, 'width', '' + currentSize.width);\r\n        this.root.setAttributeNS(null, 'height', '' + currentSize.height);\r\n    }\r\n\r\n    /**\r\n     * generates a blob file and makes it available for download.\r\n     * @param type type of file\r\n     * @param data raw data\r\n     * @param name name of download file\r\n     */\r\n    public save(type: string, data: any, name: string, context: string) {\r\n        if (window['java']) {\r\n            window['java'].export(type, data, name, context);\r\n            return;\r\n        }\r\n        let a = document.createElement('a');\r\n        a.href = window.URL.createObjectURL(new Blob([data], { type: context }));\r\n        a.download = name;\r\n        document.body.appendChild(a);\r\n        a.click();\r\n        document.body.removeChild(a);\r\n    }\r\n\r\n    /** Exports the diagram as svg. */\r\n    public exportSvg(): void {\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        this.save('svg', this.serializeXmlNode(wellFormatedSvgDom), 'class_diagram.svg', 'image/svg+xml');\r\n    }\r\n\r\n    /** Exports the diagram as html. */\r\n    public exportHtml(): void {\r\n        let htmlFacade = '<html><head><title>DiagramJS - Classdiagram</title></head><body>$content</body></html>';\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        let svgAsXml = this.serializeXmlNode(wellFormatedSvgDom);\r\n\r\n        let htmlResult = htmlFacade.replace('$content', svgAsXml);\r\n\r\n        this.save('html', htmlResult, 'class_diagram.htm', 'text/plain');\r\n    }\r\n\r\n    /** Exports the diagram as json. */\r\n    public exportJson(): void {\r\n        let type = 'text/plain';\r\n        let jsonObj = Util.toJson(this.$graphModel);\r\n        let data = JSON.stringify(jsonObj, null, '\\t');\r\n\r\n        this.save('json', data, 'class_diagram.json', type);\r\n    }\r\n\r\n    /** Exports the diagram as pdf. */\r\n    public exportPdf(): void {\r\n        if (!window['jsPDF']) {\r\n            console.log('jspdf n.a.');\r\n            return;\r\n        }\r\n        let type = 'image/svg+xml';\r\n        let converter, pdf = new window['jsPDF']('l', 'px', [this.$graphModel.getSize().x, this.$graphModel.getSize().y]);\r\n        converter = new SVGConverter(this.$view, pdf, {removeInvalid: false});\r\n        pdf.save('Download.pdf');\r\n/*        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let canvas, context, a, image = new Image();\r\n        let size = this.getRootSize();\r\n\r\n        // create the loaded img source into a canvas. to generate a picture. then place this picture in the pdf\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            let pdf = new window['jsPDF']();\r\n\r\n            pdf.addImage(canvas.toDataURL('image/jpeg'), 'jpeg', 15, 40, 180, 160);\r\n            pdf.save('class_diagram.pdf');\r\n\r\n        };\r\n\r\n        image.src = url;\r\n        */\r\n    }\r\n\r\n    public import(data: string): void {\r\n        let rootElement = this.$graphModel.$view;\r\n        while (rootElement.hasChildNodes()) {\r\n            rootElement.removeChild(rootElement.firstChild);\r\n        }\r\n\r\n        while (this.$view.hasChildNodes()) {\r\n            this.$view.removeChild(this.$view.firstChild);\r\n        }\r\n\r\n        this.clearModel();\r\n        let jsonData = JSON.parse(data);\r\n        this.load(jsonData);\r\n        this.layout();\r\n    }\r\n\r\n    public exportEPS(): void {\r\n          let converter, doc = new JSEPS({inverting: true});\r\n            converter = new SVGConverter(this.$view, doc, {removeInvalid: false});\r\n            this.save('eps', doc.getData(), 'diagram.eps', doc.getType());\r\n    }\r\n\r\n    /** Exports the diagram as png. */\r\n    public exportPng(): void {\r\n        let canvas, context, a, image = new Image();\r\n        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let typ = 'image/svg+xml';\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let size = this.getRootSize();\r\n\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            a = document.createElement('a');\r\n            a.download = 'class_diagram.png';\r\n            a.href = canvas.toDataURL('image/png');\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            document.body.removeChild(a);\r\n        };\r\n\r\n        image.src = url;\r\n\r\n    }\r\n\r\n    public getSvgWithStyleAttributes(): Node {\r\n        let oDOM = this.$graphModel.$view.cloneNode(true);\r\n        this.readElement(oDOM, this.$graphModel.$view);\r\n\r\n        return oDOM;\r\n    }\r\n\r\n    public serializeXmlNode(xmlNode: any) {\r\n        if (window['XMLSerializer'] !== undefined) {\r\n            return (new window['XMLSerializer']()).serializeToString(xmlNode);\r\n        }\r\n        if (xmlNode.xml !== undefined) {\r\n            return xmlNode.xml;\r\n        }\r\n        return xmlNode.outerHTML;\r\n    }\r\n\r\n    public getRootSize(): Size {\r\n        let width: number;\r\n        let height: number;\r\n        width = +this.root.getAttribute('width');\r\n        height = +this.root.getAttribute('height');\r\n\r\n        return { width: width, height: height };\r\n    }\r\n\r\n        // Graph.prototype.ExportEPS = function () {\r\n        //     var converter, doc = new svgConverter.jsEPS({inverting: true});\r\n        //     converter = new svgConverter(this.board, doc, {removeInvalid: false});\r\n        //     doc.save();\r\n        // };\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        this.$graphModel = new GraphModel();\r\n        this.$graphModel.init(this);\r\n        this.$graphModel.load(json);\r\n    }\r\n\r\n    public clearModel(): void {\r\n        this.$graphModel.removeAllElements();\r\n        this.clearSvgRoot();\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.layout();\r\n        return this;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        return;\r\n    }\r\n\r\n    public getNextFreePosition(): Point {\r\n\r\n        if (!this.$graphModel) {\r\n            return new Point(50, 50);\r\n        }\r\n\r\n        let point = new Point(0, 50);\r\n\r\n        let maxX = 0;\r\n        let minX = 9000;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            maxX = Math.max(maxX, node.getPos().x);\r\n            minX = Math.min(minX, node.getPos().x);\r\n        }\r\n\r\n        if (minX > 170) {\r\n            point.x = 10;\r\n        }\r\n        else {\r\n            point.x = maxX + 200;\r\n        }\r\n\r\n        return point;\r\n    }\r\n\r\n    public addElement(type: string, dontDraw?: boolean): boolean {\r\n        let success = this.$graphModel.addElement(type);\r\n        if (success === true) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return success;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues?: Object, layout?: boolean, dontDraw?: boolean): DiagramElement {\r\n        let element = this.$graphModel.addElementWithValues(type, optionalValues);\r\n        if (element && layout) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public layout(dontDraw?: boolean): Graph {\r\n        this.getLayout().layout(this, this.$graphModel);\r\n\r\n        if (dontDraw) {\r\n            return this;\r\n        }\r\n\r\n        this.draw();\r\n        return this;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTDRAGOVER, EventBus.ELEMENTDRAGLEAVE, EventBus.ELEMENTDROP];\r\n    }\r\n\r\n    public draw() {\r\n        this.clearSvgRoot();\r\n        let model = this.$graphModel;\r\n        let root = this.root;\r\n        let max: Point = new Point();\r\n        if (this.options) {\r\n            max.x = this.options.minWidth || 0;\r\n            max.y = this.options.minHeight || 0;\r\n        }\r\n\r\n        for (let node of model.nodes) {\r\n            let svg = node.getSVG();\r\n            EventBus.register(node, svg);\r\n            root.appendChild(svg);\r\n\r\n            let temp: number;\r\n            temp = node.getPos().x + node.getSize().x;\r\n            if (temp > max.x) {\r\n                max.x = temp;\r\n            }\r\n            temp = node.getPos().y + node.getSize().y;\r\n            if (temp > max.y) {\r\n                max.y = temp;\r\n            }\r\n\r\n        }\r\n        Util.setAttributeSize(this.root, max.x + 60, max.y + 40);\r\n\r\n        for (let edge of model.edges) {\r\n            let svg = edge.getSVG();\r\n            EventBus.register(edge, svg);\r\n            root.appendChild(svg);\r\n        }\r\n    }\r\n\r\n    public getNode(id: string) {\r\n        return this.$graphModel.getNodeById(id);\r\n    }\r\n\r\n    public drawElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let svg = element.getSVG();\r\n        this.root.appendChild(svg);\r\n\r\n        // actualize root width size, if neccessary\r\n        // get current width of root\r\n        let rootSize = this.getRootSize();\r\n        let newWidth = element.getPos().x + element.getSize().x + 40;\r\n        let newHeight = element.getPos().y + element.getSize().y;\r\n\r\n        if (rootSize.width < newWidth) {\r\n            this.root.setAttributeNS(null, 'width', '' + newWidth);\r\n        }\r\n\r\n        if (rootSize.height < newHeight) {\r\n            this.root.setAttributeNS(null, 'height', '' + newHeight);\r\n        }\r\n\r\n        // draw edge\r\n        if (element instanceof Association) {\r\n            let edge = <Association>element;\r\n            edge.redraw(edge.$sNode);\r\n            let srcSvg = element.$sNode.getAlreadyDisplayingSVG();\r\n            let targetSvg = element.$tNode.getAlreadyDisplayingSVG();\r\n\r\n            this.root.appendChild(srcSvg);\r\n            this.root.appendChild(targetSvg);\r\n        }\r\n\r\n        EventBus.register(element, svg);\r\n    }\r\n\r\n    public removeElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let alreadyDisplayingSvg = element.getAlreadyDisplayingSVG();\r\n        if (Util.isParentOfChild(this.root, alreadyDisplayingSvg)) {\r\n            this.root.removeChild(alreadyDisplayingSvg);\r\n        }\r\n    }\r\n\r\n    public generate(packageName: string, path?: string) {\r\n        this.$graphModel.package = packageName;\r\n        this.$graphModel.genPath = path;\r\n\r\n        let data, result = Util.toJson(this.$graphModel);\r\n        data = JSON.stringify(result, null, '\\t');\r\n        if (window['java'] && typeof window['java'].generate === 'function') {\r\n            window['java'].generate(data);\r\n        }\r\n    }\r\n// REFACTORING dd\r\n    private readElement(parent: any, origData: any): void {\r\n        let children = parent.childNodes;\r\n        let origChildDat = origData.childNodes;\r\n\r\n        for (let cd = 0; cd < children.length; cd++) {\r\n            let child = children[cd];\r\n\r\n            let tagName = child.tagName;\r\n            if (this.containerElements.indexOf(tagName) !== -1) {\r\n                this.readElement(child, origChildDat[cd]);\r\n            } else if (tagName in this.relevantStyles) {\r\n                let styleDef = window.getComputedStyle(origChildDat[cd]);\r\n\r\n                let styleString = '';\r\n                for (let st = 0; st < this.relevantStyles[tagName].length; st++) {\r\n                    styleString += this.relevantStyles[tagName][st] + ':' + styleDef.getPropertyValue(this.relevantStyles[tagName][st]) + '; ';\r\n                }\r\n\r\n                child.setAttribute('style', styleString);\r\n            }\r\n        }\r\n    }\r\n\r\n    private createPattern(): Element {\r\n        const defs = Util.createShape({ tag: 'defs' });\r\n        const pattern = Util.createShape({\r\n            tag: 'pattern',\r\n            id: 'raster',\r\n            patternUnits: 'userSpaceOnUse',\r\n            width: 40,\r\n            height: 40\r\n        });\r\n        const path = 'M0 4 L0 0 L4 0 M36 0 L40 0 L40 4 M40 36 L40 40 L36 40 M4 40 L0 40 L0 36';\r\n        const cross = Util.createShape({\r\n            tag: 'path',\r\n            d: path,\r\n            stroke: '#DDD',\r\n            'stroke-width': 1,\r\n            fill: 'none'\r\n        });\r\n\r\n        const rect = Util.createShape({\r\n            tag: 'rect',\r\n            x: 0,\r\n            y: 0,\r\n            width: 40,\r\n            height: 40,\r\n            fill: 'none'\r\n        });\r\n        pattern.appendChild(rect);\r\n        pattern.appendChild(cross);\r\n        defs.appendChild(pattern);\r\n        return defs;\r\n    }\r\n\r\n    private clearSvgRoot() {\r\n        const root = this.root;\r\n        this.$graphModel.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n        while (root.firstChild) {\r\n            root.removeChild(root.firstChild);\r\n        }\r\n\r\n        root.appendChild(this.createPattern());\r\n        let fillValue = 'none';\r\n        if (this.options.raster) {\r\n            fillValue = 'url(#raster)';\r\n        }\r\n        let background = Util.createShape({\r\n            tag: 'rect',\r\n            id: 'background',\r\n            width: 5000,\r\n            height: 5000,\r\n            x: 0,\r\n            y: 0,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: fillValue\r\n        });\r\n        root.appendChild(background);\r\n\r\n        // delete inline Edit, if exists\r\n        let inlineEdit = document.getElementById('inlineEdit');\r\n        if (inlineEdit && document.body.contains(inlineEdit)) {\r\n            document.body.removeChild(inlineEdit);\r\n        }\r\n    }\r\n\r\n    private getLayout(): Layout {\r\n        if (this.currentlayout) {\r\n            return this.currentlayout;\r\n        }\r\n\r\n        let layout = this.options.layout || '';\r\n        if (this.layoutFactory[layout]) {\r\n            this.currentlayout = new this.layoutFactory[layout]();\r\n        } else {\r\n            this.currentlayout = new layouts.DagreLayout();\r\n        }\r\n\r\n        return this.currentlayout;\r\n    }\r\n\r\n    private initFactories() {\r\n\r\n        let noder = nodes;\r\n        this.nodeFactory = {};\r\n        for (let id in noder) {\r\n            if (noder.hasOwnProperty(id) === true) {\r\n                this.nodeFactory[id] = noder[id];\r\n            }\r\n        }\r\n\r\n        let edger = edges;\r\n        this.edgeFactory = {};\r\n        for (let id in edger) {\r\n            if (edger.hasOwnProperty(id) === true) {\r\n                this.edgeFactory[id] = edger[id];\r\n            }\r\n        }\r\n\r\n        let layouter = layouts;\r\n        this.layoutFactory = {};\r\n        for (let id in layouter) {\r\n            if (layouter.hasOwnProperty(id) === true) {\r\n                this.layoutFactory[id] = layouter[id];\r\n            }\r\n        }\r\n    }\r\n\r\n    private initCanvas() {\r\n        if (this.options.canvas) {\r\n            this.$view = document.getElementById(this.options.canvas);\r\n        }\r\n        if (!this.$view) {\r\n            this.$view = document.createElement('div');\r\n            this.$view.setAttribute('class', 'diagram');\r\n            document.body.appendChild(this.$view);\r\n        }\r\n    }\r\n\r\n    private initFeatures(features: any) {\r\n\r\n        if (features) {\r\n            if (features.newedge) {\r\n                EventBus.subscribe(new NewEdge(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            this.importFile = new ImportFile(this);\r\n            if (features.import) {\r\n                EventBus.subscribe(this.importFile, 'dragover', 'dragleave', 'drop');\r\n            }\r\n            if (features.zoom) {\r\n                let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n                EventBus.subscribe(new Zoom(this), mousewheel);\r\n            }\r\n            if (features.drag) {\r\n                EventBus.subscribe(new Drag(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            if (features.select) {\r\n                EventBus.subscribe(new Select(this), 'click', 'drag');\r\n            }\r\n            if (features.palette) {\r\n                new Palette(this).show();\r\n            }\r\n            if (features.toolbar) {\r\n                new Toolbar(this).show();\r\n            }\r\n            if (features.properties) {\r\n                let propertyPanel = new PanelGroup(this);\r\n                // let dispatcher = new PropertiesDispatcher(this);\r\n                EventBus.subscribe(propertyPanel, 'dblclick', 'click', EventBus.RELOADPROPERTIES);\r\n                propertyPanel.show();\r\n            }\r\n            if (features.addnode) {\r\n                EventBus.subscribe(new AddNode(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n        }\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport {DiagramElement, Point} from './BaseElements';\r\nimport {Association} from './edges';\r\nimport {Node} from './nodes';\r\nimport {Control} from '../Control';\r\nimport {Util} from '../util';\r\nimport {EventBus} from '../EventBus';\r\n\r\nexport class GraphModel extends DiagramElement {\r\n    nodes: Node[] = [];\r\n    edges: Association[] = [];\r\n    package: string;\r\n    genPath: string;\r\n    $isLoading: boolean;\r\n\r\n    public load(data?: any) {\r\n\r\n        this.$isLoading = true;\r\n        data = data || {};\r\n        this.property = data.type || data.property || 'classdiagram';\r\n        this.id = 'RootElement';\r\n        if (data.nodes) {\r\n            for (let node of data.nodes) {\r\n                this.addNode(node);\r\n            }\r\n        }\r\n        if (data.edges) {\r\n            for (let edge of data.edges) {\r\n                this.addEdge(edge);\r\n            }\r\n        }\r\n\r\n        this.$isLoading = false;\r\n    }\r\n\r\n    public getNodeByPosition(x: number, y: number): Node {\r\n        for (let node of this.nodes) {\r\n            let posOfNode: Point = (<Node>node).getPos();\r\n            let sizeOfNode: Point = (<Node>node).getSize();\r\n\r\n            if ((posOfNode.x <= x && (posOfNode.x + sizeOfNode.x) >= x)\r\n                && (posOfNode.y <= y && (posOfNode.y + sizeOfNode.y) >= y)) {\r\n                return node;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.initCanvas();\r\n        return this;\r\n    }\r\n\r\n    public addElement(type: string): boolean {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n        if (element) {\r\n            Util.saveToLocalStorage(this);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues: Object): DiagramElement {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n\r\n        // position\r\n        if (optionalValues) {\r\n            if (optionalValues.hasOwnProperty('x') && optionalValues.hasOwnProperty('y')) {\r\n                let x = optionalValues['x'];\r\n                let y = optionalValues['y'];\r\n                element.withPos(x, y);\r\n            }\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return element;\r\n    }\r\n\r\n    public removeAllElements(): void {\r\n\r\n        let nodesLength = this.nodes.length;\r\n        for (let i = 0; i < nodesLength; i++) {\r\n            this.removeElement(this.nodes[0].id);\r\n        }\r\n\r\n        this.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n    }\r\n\r\n    public removeElement(id: string): boolean {\r\n\r\n        let element = this.getDiagramElementById(id);\r\n        if (!element) {\r\n            return false;\r\n        }\r\n\r\n        (<Graph>this.$owner).removeElement(element);\r\n\r\n        if (element instanceof Node) {\r\n\r\n            let idxOfNode = this.nodes.indexOf(element);\r\n            if (idxOfNode > -1) {\r\n                this.nodes.splice(idxOfNode, 1);\r\n            }\r\n\r\n            while (element.$edges.length > 0) {\r\n                this.removeElement(element.$edges[0].id);\r\n            }\r\n\r\n            element.$edges = [];\r\n        }\r\n        else if (element instanceof Association) {\r\n\r\n            let idxOfEdge = this.edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                this.edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from source\r\n            idxOfEdge = element.$sNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$sNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from target\r\n            idxOfEdge = element.$tNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$tNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return true;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        const size = 10;\r\n        const path = `M${-size} 0 L${+size} 0 M0 ${-size} L0 ${+size}`;\r\n\r\n        const attr = {\r\n            tag: 'path',\r\n            id: 'origin',\r\n            d: path,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: 'none'\r\n        };\r\n        let shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: 0 - size,\r\n            y: 0 - size / 1.5,\r\n            'text-anchor': 'end',\r\n            'font-family': 'Verdana',\r\n            'font-size': '9',\r\n            fill: '#999'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = '(0, 0)';\r\n\r\n        let group = this.createShape({tag: 'g'});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEUP, EventBus.ELEMENTMOUSELEAVE, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTMOUSEWHEEL, EventBus.ELEMENTCLICK, EventBus.ELEMENTDRAG];\r\n    }\r\n\r\n    public getNewId(prefix?: string): string {\r\n        let id = (prefix ? prefix.toLowerCase() + '-' : '') + Math.floor(Math.random() * 100000);\r\n        return id;\r\n    }\r\n\r\n    public getEdgeById(id: string): Association {\r\n        for (let edge of this.edges) {\r\n            if (edge.id === id) {\r\n                return edge;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    public getDiagramElementById(id: string): DiagramElement {\r\n\r\n        return this.getNodeById(id) || this.getEdgeById(id);\r\n    }\r\n\r\n    /**\r\n     * Add an edge with data in json file. Optional you can say, that the edge should have\r\n     * the points of source node and target node.\r\n     * @param edge information about edge in json\r\n     * @param withPosOfNodes optional. set points to line of source and target node\r\n     */\r\n    public addEdge(edge: any, withPosOfNodes?: boolean): Association {\r\n\r\n        // lookup in factoryedges and check if the edge type realy exists\r\n        if (edge && edge.type) {\r\n            const graph = (<Graph>this.$owner);\r\n            let typeExists = false;\r\n            for (let edgeType in graph.edgeFactory) {\r\n                if (edgeType === edge.type) {\r\n                    typeExists = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!typeExists) {\r\n                edge.type = 'Association';\r\n            }\r\n        }\r\n\r\n        let type = edge.type || 'Association';\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n\r\n        let newEdge = <Association>this.createElement(type, id, edge);\r\n        newEdge.type = type;\r\n\r\n        let source: Node;\r\n        let sourceAsString: string = edge.source.id || edge.source;\r\n        if (sourceAsString) {\r\n            source = this.getNodeById(sourceAsString);\r\n            if (!source) {\r\n                let nodeID = edge.source;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                source = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                source.init(this);\r\n            }\r\n        }\r\n\r\n        let target: Node;\r\n        let targetAsString: string = edge.target.id || edge.target;\r\n        if (targetAsString) {\r\n            target = this.getNodeById(targetAsString);\r\n            if (!target) {\r\n                let nodeID = edge.target;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                target = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                target.init(this);\r\n            }\r\n        }\r\n\r\n        newEdge.withItem(source, target);\r\n\r\n        if (withPosOfNodes) {\r\n            let srcX = source.getPos().x + (source.getSize().x / 2);\r\n            let srcY = source.getPos().y + (source.getSize().y / 2);\r\n\r\n            let targetX = target.getPos().x + (target.getSize().x / 2);\r\n            let targetY = target.getPos().y + (target.getSize().y / 2);\r\n\r\n            newEdge.addPoint(srcX, srcY);\r\n            newEdge.addPoint(targetX, targetY);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public createElement(type: string, id: string, data: Object): DiagramElement {\r\n        const graph = <Graph>this.$owner;\r\n        let element: DiagramElement;\r\n        if (graph.nodeFactory[type]) {\r\n            element = new graph.nodeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.nodes.push(<Node>element);\r\n        }\r\n        if (graph.edgeFactory[type]) {\r\n            element = new graph.edgeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.edges.push(<Association>element);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public getNodeById(id: string): Node {\r\n        for (let node of this.nodes) {\r\n            if (node.id === id) {\r\n                return node;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    private initCanvas() {\r\n        const graph = <Graph>this.$owner;\r\n        graph.canvasSize = {width: graph.$view.clientWidth, height: graph.$view.clientHeight};\r\n        graph.root = Util.createShape({\r\n            tag: 'svg',\r\n            id: 'root',\r\n            width: graph.canvasSize.width,\r\n            height: graph.canvasSize.height\r\n            // FIXME,viewBox: `${this.$graph.options.origin.x * -1} ${this.$graph.options.origin.y * -1} ${this.$graph.canvasSize.width} ${this.$graph.canvasSize.height}`\r\n        });\r\n        this.$view = graph.root;\r\n        graph.$view.appendChild(graph.root);\r\n\r\n        let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    private addNode(node: Node): Node {\r\n        let type = node['type'] || node.property || 'Node';\r\n        type = Util.toPascalCase(type);\r\n        let id = node['id'] || node['name'] || this.getNewId(type);\r\n\r\n        return <Node>this.createElement(type, id, node);\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction } from './index';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\n\r\nexport abstract class Aggregate extends Association {\r\n\r\n    protected $diamond: Element;\r\n\r\n    public getSVG(): Element {\r\n\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled diamond\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n        };\r\n\r\n        this.$diamond = this.createShape(attr);\r\n\r\n        group.appendChild(this.$diamond);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint: Point = this.$points[0];\r\n        let direction: Direction = Direction.Down;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if (this.$sNode.id === startNode.id || this.$points.length == 2) {\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$diamond.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint: Point, direction: Direction): string {\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                path = `M${startX} ${startY} L${startX + 6} ${startY + 10} L${startX} ${startY + 20} L${startX - 6} ${startY + 10} Z`;\r\n                startPoint.y = startPoint.y+20;\r\n                break;\r\n            case Direction.Right:\r\n                path = `M${startX} ${startY} L${startX - 10} ${startY + 6} L${startX - 20} ${startY} L${startX - 10} ${startY - 6} Z`;\r\n                startPoint.x = startPoint.x-20;\r\n                break;\r\n            case Direction.Left:\r\n                path = `M${startX} ${startY} L${startX + 10} ${startY - 6} L${startX + 20} ${startY} L${startX + 10} ${startY + 6} Z`;\r\n                startPoint.x = startPoint.x+20;\r\n                break;\r\n            case Direction.Down:\r\n                path = `M${startX} ${startY} L${startX - 6} ${startY - 10} L${startX} ${startY - 20} L${startX + 6} ${startY - 10} Z`;\r\n                startPoint.y = startPoint.y-20;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Aggregation extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'white');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { DiagramElement, Line, Point } from '../BaseElements';\r\nimport { Node } from '../nodes';\r\nimport { InfoText } from '../nodes/InfoText';\r\nimport { Util } from '../../util';\r\nimport { EventBus } from '../../EventBus';\r\nimport * as edges from '../edges';\r\nimport { Graph } from '../Graph';\r\n\r\nexport const enum Direction {\r\n    Up, Down, Left, Right\r\n}\r\n\r\nexport class Association extends DiagramElement {\r\n    public source: string;\r\n    public target: string;\r\n    public type: string;\r\n    public $sNode: Node;\r\n    public $tNode: Node;\r\n    public lineStyle: string;\r\n    public $points: Point[] = [];\r\n    public $pathSvg: Element;\r\n    public $pathWideSvg: Element;\r\n    public info: InfoText;\r\n    public sourceInfo: InfoText;\r\n    public targetInfo: InfoText;\r\n    $m: number;\r\n    $n: number;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super();\r\n\r\n        this.withData(data);\r\n    }\r\n\r\n    public withData(data: JSON | string | Object | any): Association {\r\n\r\n        if (!data) {\r\n            return this;\r\n        }\r\n        let srcInfo;\r\n        let trgInfo;\r\n\r\n        if (data.source && typeof data.source !== 'string') {\r\n            srcInfo = data.source;\r\n        }\r\n        else if (data.sourceInfo && typeof data.sourceInfo !== 'string') {\r\n            srcInfo = data.sourceInfo;\r\n        }\r\n\r\n        if (srcInfo) {\r\n            this.sourceInfo = new InfoText(srcInfo);\r\n            this.sourceInfo.$owner = this;\r\n        }\r\n\r\n        if (data.target && typeof data.target !== 'string') {\r\n            trgInfo = data.target;\r\n        }\r\n        else if (data.targetInfo && typeof data.targetInfo !== 'string') {\r\n            trgInfo = data.targetInfo;\r\n        }\r\n\r\n        if (trgInfo) {\r\n            this.targetInfo = new InfoText(trgInfo);\r\n            this.targetInfo.$owner = this;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    public updateSrcCardinality(cardinality: string): void {\r\n        this.sourceInfo = this.updateCardinality(this.$sNode, this.sourceInfo, cardinality);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetCardinality(cardinality: string): void {\r\n        this.targetInfo = this.updateCardinality(this.$tNode, this.targetInfo, cardinality);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateSrcProperty(property: string): void {\r\n        this.sourceInfo = this.updateProperty(this.$sNode, this.sourceInfo, property);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetProperty(property: string): void {\r\n        this.targetInfo = this.updateProperty(this.$tNode, this.targetInfo, property);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public withItem(source: Node, target: Node): Association {\r\n        source.$edges.push(this);\r\n        target.$edges.push(this);\r\n        this.$sNode = source;\r\n        this.$tNode = target;\r\n        this.source = source.id;\r\n        this.target = target.id;\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let group = Util.createShape({ tag: 'g', id: this.id, class: 'SVGEdge' });\r\n\r\n        let path: string = this.getPath();\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'none'\r\n        };\r\n        let pathLine = this.createShape(attr);\r\n\r\n        //attr['style'] = 'stroke-width:20;opacity:0;width:20;height:20';\r\n        let extendedPathLine = Util.createShape(attr);\r\n\r\n        group.appendChild(extendedPathLine);\r\n        group.appendChild(pathLine);\r\n\r\n        if (this.sourceInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.sourceInfo.getSVG());\r\n        }\r\n        if (this.targetInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.targetInfo.getSVG());\r\n        }\r\n\r\n        this.$pathWideSvg = extendedPathLine;\r\n        this.$pathSvg = pathLine;\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.EDITOR, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    public convertEdge(type: string, newId: string, redraw?: boolean): Association {\r\n        if (!edges[type]) {\r\n            return this;\r\n        }\r\n\r\n        let newEdge: Association = new edges[type]();\r\n        newEdge.withItem(this.$sNode, this.$tNode);\r\n        newEdge.id = newId;\r\n        newEdge.type = type;\r\n        newEdge.lineStyle = this.lineStyle;\r\n        newEdge.$owner = this.$owner;\r\n\r\n        if (this.sourceInfo) {\r\n            newEdge.sourceInfo = new InfoText({ property: this.sourceInfo.property, cardinality: this.sourceInfo.cardinality });\r\n            newEdge.sourceInfo.$owner = newEdge;\r\n        }\r\n\r\n        if (this.targetInfo) {\r\n            newEdge.targetInfo = new InfoText({ property: this.targetInfo.property, cardinality: this.targetInfo.cardinality });\r\n            newEdge.targetInfo.$owner = newEdge;\r\n        }\r\n\r\n        this.$points.forEach(point => {\r\n            newEdge.addPoint(point.x, point.y);\r\n        });\r\n\r\n        let graph = <Graph>this.getRoot();\r\n        if (!graph) {\r\n            return this;\r\n        }\r\n\r\n        // update model. insert the edge exact on the same index, like the old edge\r\n        let idx = graph.$graphModel.edges.indexOf(this);\r\n        graph.$graphModel.removeElement(this.id);\r\n        if (idx > -1) {\r\n            graph.$graphModel.edges.splice(idx, 0, newEdge);\r\n        }\r\n        else {\r\n            graph.$graphModel.edges.push(newEdge);\r\n        }\r\n\r\n        if (!redraw) {\r\n            return newEdge;\r\n        }\r\n\r\n        let svgRoot: Element;\r\n        if (graph) {\r\n            svgRoot = graph.root;\r\n        }\r\n        else {\r\n            svgRoot = document.getElementById('root');\r\n        }\r\n        let newEdgeSvg = newEdge.getSVG();\r\n\r\n        // update graph\r\n        graph.removeElement(this);\r\n        svgRoot.appendChild(newEdgeSvg);\r\n\r\n        // redraw the edge from both sides to get the correct display\r\n        // if the type is edge, so the path can be redraw.\r\n        // if not, so the inherited class redraw the path with his own logic\r\n\r\n        let dontDrawPath: boolean = (type !== 'Edge');\r\n        newEdge.redraw(newEdge.$sNode, dontDrawPath);\r\n        newEdge.redraw(newEdge.$tNode, dontDrawPath);\r\n\r\n        EventBus.register(newEdge, newEdgeSvg);\r\n\r\n        this.sourceInfo = undefined;\r\n        this.targetInfo = undefined;\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n        // redraw the first point\r\n        // check which point is the near to startnode\r\n        let endPoint: Point;\r\n        let recalcPoint: Point;\r\n        let endPointIdx: number;\r\n\r\n        if (this.$sNode.id === startNode.id) {\r\n            recalcPoint = this.$points[0];\r\n            endPointIdx = 1;\r\n        } else if (this.$tNode.id === startNode.id) {\r\n            recalcPoint = this.$points[this.$points.length - 1];\r\n            endPointIdx = this.$points.length - 2;\r\n        }\r\n\r\n        endPoint = this.$points[endPointIdx];\r\n\r\n        // calculate and set new position of point to redraw\r\n        this.calcIntersection(startNode, recalcPoint, endPoint);\r\n\r\n        // remove the 2nd point next to startnode, if the node was dragged upper the point\r\n        if (this.$points.length > 2 && this.$tNode.id === startNode.id && endPoint.y > (startNode.getPos().y + (startNode.getSize().y / 2))) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$tNode.id === startNode.id && this.$points.length === 2) {\r\n            this.calcIntersection(this.$sNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (this.$points.length > 2 && this.$sNode.id === startNode.id && (startNode.getPos().y + (startNode.getSize().y / 2) > endPoint.y)) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$sNode.id === startNode.id && this.$points.length === 2) {\r\n\r\n            this.calcIntersection(this.$tNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (!dontDrawPoints) {\r\n            this.redrawPointsAndInfo();\r\n        }\r\n    }\r\n\r\n    public getPath(): string {\r\n\r\n        if (this.$points.length === 0) {\r\n            return '';\r\n        }\r\n\r\n        let path: string = 'M';\r\n        for (let i = 0; i < this.$points.length; i++) {\r\n            let point: Point = this.$points[i];\r\n            if (i > 0) {\r\n                path += 'L';\r\n            }\r\n            path += Math.floor(point.x) + ' ' + Math.floor(point.y) + ' ';\r\n        }\r\n\r\n        return path;\r\n    }\r\n    public calcInfoPosNew(infoTxt: InfoText, node: Node): Point {\r\n\r\n        if (!infoTxt || !node) {\r\n            return null;\r\n        }\r\n\r\n        // 1. step: get direction\r\n        let startPoint: Point;\r\n        let nextToStartPoint: Point;\r\n        if (this.$sNode.id === node.id) {\r\n            startPoint = this.$points[0];\r\n            nextToStartPoint = this.$points[1];\r\n        }\r\n        else if (this.$tNode.id === node.id) {\r\n            startPoint = this.$points[this.$points.length - 1];\r\n            nextToStartPoint = this.$points[this.$points.length - 2];\r\n        }\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(node, startPoint);\r\n\r\n        let x: number;\r\n        let y: number;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                break;\r\n            case Direction.Right:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x - (infoTxt.getSize().x) - 5;\r\n                break;\r\n            case Direction.Left:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x + 5;\r\n                break;\r\n            case Direction.Down:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        // assign calculated position to infotext\r\n        return new Point(x, y);\r\n    }\r\n\r\n    public clearPoints(): any {\r\n        this.$points = [];\r\n        this.$points = [];\r\n    }\r\n\r\n    public addPoint(x: number, y: number): Point[] {\r\n        this.$points.push(new Point(x, y));\r\n\r\n        return this.$points;\r\n    }\r\n\r\n    protected redrawPointsAndInfo(): void {\r\n        // redraw the edge with the new position\r\n        let path: string = this.getPath();\r\n        this.$pathSvg.setAttributeNS(null, 'd', path);\r\n        this.$pathWideSvg.setAttributeNS(null, 'd', path);\r\n\r\n        this.redrawSourceInfo();\r\n        this.redrawTargetInfo();\r\n    }\r\n\r\n    protected redrawSourceInfo() {\r\n        if (this.sourceInfo) {\r\n            let newPosOfSrc = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.redrawFromEdge(newPosOfSrc);\r\n        }\r\n    }\r\n\r\n    protected redrawTargetInfo() {\r\n        if (this.targetInfo) {\r\n            let newPosOfTarget = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.redrawFromEdge(newPosOfTarget);\r\n        }\r\n    }\r\n\r\n    protected getDirectionOfPointToNode(node: Node, pointNearNode: Point): Direction {\r\n        /*\r\n            Example to calculate the direction of nearest point to Node\r\n\r\n            node\r\n         x1_ _ _ _\r\n          |       |\r\n          |       |. pointNearNode\r\n          |       |\r\n          |_ _ _ x2\r\n\r\n          the calculation would return Direction.Left\r\n        */\r\n\r\n        let x1: Point = node.getPos();\r\n        let x2: Point = new Point((x1.x + node.getSize().x), (x1.y + node.getSize().y));\r\n        let direction: Direction = Direction.Down;\r\n\r\n        if (x1.y >= pointNearNode.y) {\r\n            direction = Direction.Down;\r\n        }\r\n        if (x2.y <= pointNearNode.y) {\r\n            direction = Direction.Up;\r\n        }\r\n        if (x1.x >= pointNearNode.x) {\r\n            direction = Direction.Right;\r\n        }\r\n        if (x2.x <= pointNearNode.x) {\r\n            direction = Direction.Left;\r\n        }\r\n\r\n        return direction;\r\n    }\r\n\r\n    private updateCardinality(node: Node, infoText: InfoText, cardinality: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'cardinality': cardinality });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.cardinality = cardinality;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateCardinality(cardinality);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private updateProperty(node: Node, infoText: InfoText, property: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'property': property });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.property = property;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateProperty(property);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private calcIntersection(startNode: Node, recalcPoint: Point, endPoint: Point): Point {\r\n\r\n        // https://www.mathelounge.de/21534/schnittpunkt-einer-linie-mit-den-randern-eines-rechtecks\r\n        let h = startNode.getSize().y;\r\n        let w = startNode.getSize().x;\r\n\r\n        let x1: number = startNode.getPos().x + (w / 2);\r\n        let y1: number = startNode.getPos().y + (h / 2);\r\n\r\n        let x2: number = endPoint.x;\r\n        let y2: number = endPoint.y;\r\n\r\n        let newX: number = recalcPoint.x;\r\n        let newY: number = recalcPoint.y;\r\n\r\n        if (x2 > x1) {\r\n            newX = x1 + (w / 2);\r\n        }\r\n        else if (x2 < x1) {\r\n            newX = x1 - (w / 2);\r\n        }\r\n        else {\r\n            newX = x1;\r\n        }\r\n\r\n        if ((x2 - x1) !== 0) {\r\n            newY = ((y2 - y1) / (x2 - x1) * (newX - x1)) + y1;\r\n        }\r\n        else {\r\n            if (y1 > y2) {\r\n                newY = startNode.getPos().y;\r\n            }\r\n            else {\r\n                newY = startNode.getPos().y + h;\r\n            }\r\n        }\r\n\r\n        // if the statement is not true, so the intersection is at the horizontal line\r\n        if (!((y1 - (h / 2) <= newY) && newY <= y1 + (h / 2))) {\r\n\r\n            if (y2 > y1) {\r\n                newY = y1 + (h / 2);\r\n            }\r\n            else {\r\n                newY = y1 - (h / 2);\r\n            }\r\n\r\n            if ((x2 - x1) !== 0) {\r\n                let tmp = ((y2 - y1) / (x2 - x1));\r\n                newX = (newY + (tmp * x1) - y1) / tmp;\r\n            }\r\n            else {\r\n                newX = x1;\r\n            }\r\n        }\r\n\r\n        recalcPoint.x = Math.ceil(newX);\r\n        recalcPoint.y = Math.ceil(newY);\r\n\r\n        return null;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Composition extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'black');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { Association } from './Association';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\nimport { Direction } from '../index';\r\n\r\nexport class Generalisation extends Association {\r\n\r\n    public $TARGET_ELEMENT_HEIGHT : number = 12;\r\n    protected $targetElement: Element;\r\n\r\n    public getSVG(): Element {\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction : Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled arrow\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'white'\r\n          };\r\n\r\n        this.$targetElement = this.createShape(attr);\r\n\r\n        group.appendChild(this.$targetElement);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean) : void {\r\n\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint : Point = this.$points[0];\r\n        let direction : Direction = Direction.Up;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if(this.$sNode.id === startNode.id || this.$points.length == 2){\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$targetElement.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint : Point, direction : Direction) : string{\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch(direction){\r\n            case Direction.Up:\r\n            path = `M${startX} ${startY+3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y+12;\r\n            break;\r\n            case Direction.Right:\r\n            path = `M${startX-3} ${startY} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x-12;\r\n            break;\r\n            case Direction.Left:\r\n            path = `M${startX+3} ${startY} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x+12;\r\n            break;\r\n            case Direction.Down:\r\n            path = `M${startX} ${startY-3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y-12;\r\n            break;\r\n            default :\r\n            break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n\r\n}\r\n","import { Generalisation } from './Generalisation';\r\n\r\nexport class Implements extends Generalisation {\r\n\r\n    public getSVG(): Element {\r\n        let group = super.getSVG();\r\n\r\n        this.$pathSvg.setAttributeNS(null, 'stroke-dasharray', '3, 3');\r\n\r\n        return group;\r\n    }\r\n}\r\n","export * from './Association';\r\nexport * from './Aggregate';\r\nexport * from './Aggregation';\r\nexport * from './Composition';\r\nexport * from './Generalisation';\r\nexport * from './Implements';","export * from './edges';\r\nexport * from './nodes';\r\nexport * from './BaseElements';\r\nexport * from './Graph';\r\nexport * from './Model';\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Attribute extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 28.06.2017.\r\n */\r\nimport {Control} from \"../../Control\";\r\n\r\nexport class AutoComplete extends Control {\r\n    private $inputField:HTMLInputElement;\r\n    private $dataList:HTMLDataListElement;\r\n    private $selected:HTMLSelectElement;\r\n    private $items:HTMLDivElement;\r\n    private isMultiple:boolean;\r\n\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        let div:HTMLDivElement = document.createElement('div');\r\n        this.$view = div;\r\n        this.$inputField = document.createElement('input');\r\n        this.$dataList = document.createElement(\"datalist\");\r\n        this.$dataList.id = \"data_\"+this.id;\r\n        this.$inputField.setAttribute(\"list\", \"data_\"+this.id);\r\n        if(data[\"value\"]) {\r\n            let values = data[\"value\"];\r\n            this.isMultiple = data[\"multiple\"] != null;\r\n            let option:HTMLOptionElement;\r\n            if(this.isMultiple) {\r\n                this.$selected = document.createElement(\"select\");\r\n                this.$selected.className = \"hide\";\r\n                this.$selected.multiple = true;\r\n\r\n                this.$selected.id = this.id;\r\n                this.$items = document.createElement(\"div\");\r\n                this.$items.className = \"selectedList\";\r\n                div.appendChild(this.$items);\r\n                this.$inputField.className = \"selectedInput\";\r\n                div.appendChild(this.$selected);\r\n                this.$view[\"style\"].setProperty(\"float\", \"left\");\r\n                let that = this;\r\n                this.$inputField.oninput = function(){that.onChange();}\r\n            } else {\r\n                this.$inputField.id = this.id;\r\n            }\r\n            for (let attr in values) {\r\n                if (!values.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                option = document.createElement(\"option\");\r\n                option.value = values[attr];\r\n                this.$dataList.appendChild(option);\r\n                if(this.isMultiple) {\r\n                    option = document.createElement(\"option\");\r\n                    option.value = values[attr];\r\n                    option.innerHTML = values[attr];\r\n                    this.$selected.appendChild(option);\r\n                }\r\n        }\r\n\r\n            div.appendChild(this.$inputField);\r\n            div.appendChild(this.$dataList);\r\n        }\r\n\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n            if(this.isMultiple) {\r\n                div.appendChild(this.$selected);\r\n            }\r\n        }\r\n\r\n        parent.appendChild(this);\r\n    }\r\n\r\n    public onChange() : void {\r\n        let textValue:string = this.$inputField.value;\r\n        if(textValue.length<1) {\r\n            return;\r\n        }\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == textValue) {\r\n                if(item.selected == false) {\r\n                    item.selected = true;\r\n                    item.defaultSelected = true;\r\n                    let test = document.createElement(\"li\");\r\n                    let that = this;\r\n                    test.onclick = function() {that.onDelete(item.value, test);};\r\n                    test.className = \"selectedItem\";\r\n                    test.innerHTML = item.value;\r\n                    this.$items.appendChild(test);\r\n                    this.$inputField.value = \"\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n    public onDelete(value:string, selectedItem:HTMLLIElement) : void {\r\n        this.$items.removeChild(selectedItem);\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == value ) {\r\n                if(item.selected) {\r\n                    item.selected = false;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","import {Control} from '../../Control';\r\n\r\nexport class BR extends Control {\r\n    public load(json: JSON): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('br');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            this.$view.setAttribute(attr, data[attr]);\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\nexport class Button extends Control {\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        this.$view = document.createElement('button');\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\nimport { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\nimport { Size } from '../index';\r\nimport ClazzProperty from './ClazzProperty';\r\nimport {SymbolLibary} from './Symbol';\r\nimport {StereoType} from './StereoType';\r\nimport {GraphListener} from '../../handlers/GraphListener';\r\n\r\nexport class Class extends Node {\r\n    public attributes: Attribute[] = [];\r\n    public methods: Method[] = [];\r\n    public modifier: string;\r\n    public stereoType: string;\r\n\r\n    protected $attrHeight = 25;\r\n    protected $attrFontSize = 12;\r\n    protected $labelView: Element;\r\n\r\n    constructor(json: JSON | string | Object | any) {\r\n        super(json);\r\n        return this;\r\n    }\r\n\r\n    public load(json?: any) {\r\n        if (!json) {\r\n            json = {};\r\n        }\r\n        let y = this.$labelHeight;\r\n        let labelObj = json.name || json.id || ('New ' + this.property);\r\n\r\n        let width: number = 150;\r\n        width = Math.max(width, Util.sizeOf(labelObj).width + 60);\r\n\r\n        if (json['attributes']) {\r\n            for (let attr of json['attributes']) {\r\n\r\n                let attrObj = new Attribute(attr);\r\n                attrObj.$owner = this;\r\n                this.attributes.push(attrObj);\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(attrObj.toString()).width);\r\n                let listener = new GraphListener(attrObj);\r\n                attrObj.$data.addListener(listener);\r\n            }\r\n        }\r\n        if (json['stereotype']) {\r\n            this.stereoType = json['stereotype'];\r\n        }\r\n        if (json['methods']) {\r\n            for (let method of json['methods']) {\r\n\r\n                let methodObj = new Method(method);\r\n                methodObj.$owner = this;\r\n                this.methods.push(methodObj);\r\n\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(methodObj.toString()).width);\r\n            }\r\n            y += this.$attrHeight;\r\n        }\r\n        this.withSize(width, y);\r\n    }\r\n\r\n    public getAttributes(): Attribute[] {\r\n        return this.attributes;\r\n    }\r\n\r\n    public getMethods(): Method[] {\r\n        return this.methods;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        let icon = SymbolLibary.draw({type: 'Class', property: 'HTML', width: '50', height: '50', transform: 'translate(-26,-21)'});\r\n        return icon;\r\n        // let group = this.createShape(\r\n//    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n//    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos: Point = this.getPos();\r\n        const size: Point = this.getSize();\r\n\r\n        let group = this.createShape({ tag: 'g', id: this.id, class: 'SVGClazz', transform: 'translate(0 0)' });\r\n\r\n        if (this.stereoType) {\r\n            let type = new StereoType(this.stereoType, pos.x, pos.y);\r\n            group.appendChild(type.getSVG());\r\n        }\r\n\r\n        // Full Shape\r\n        let options = null;\r\n        let style;\r\n        let clazzName;\r\n        if (this.$owner['options']) {\r\n            let options = this.$owner['options'];\r\n            if (options) {\r\n                style = options.style;\r\n            }\r\n        }\r\n        // = = = Background = = =\r\n        if (style === 'modern') {\r\n            clazzName = 'ClazzHeader';\r\n        }\r\n        clazzName = 'ClazzHeader';\r\n        const nodeShape = this.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            height: size.y,\r\n            width: size.x,\r\n            rx: 5,\r\n            ry: 5,\r\n            fill: 'none',\r\n            stroke: 'black',\r\n            'stroke-width': 1\r\n        });\r\n        if (clazzName) {\r\n            nodeShape.setAttribute('className', clazzName);\r\n            let styleHeader = Util.getStyle('ClazzHeader');\r\n            // headerHeight = styleHeader.getNumber('height');\r\n        }\r\n\r\n        // = = = LABEL = = =\r\n        let label = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y + this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': this.$labelFontSize,\r\n            fill: 'black'\r\n        });\r\n        label.textContent = this.id;\r\n        this.$labelView = label;\r\n\r\n        group.appendChild(nodeShape);\r\n        group.appendChild(label);\r\n\r\n        // = = = ATTRIBUTES = = =\r\n        if (this.attributes.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorLabelAttr = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight,\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight,\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorLabelAttr);\r\n\r\n            let groupOfAttributes = this.createShape({ tag: 'g', id: (this.id + 'Attributes') });\r\n            groupOfAttributes.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzAttribute');\r\n            group.appendChild(groupOfAttributes);\r\n\r\n            let y = pos.y + this.$labelHeight + this.$attrHeight / 2;\r\n            for (let attr of this.attributes) {\r\n\r\n                let attrSvg = attr.getSVG();\r\n                attr.$owner = this;\r\n\r\n                attrSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                attrSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfAttributes.appendChild(attrSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        // = = = METHODS = = =\r\n        let height = this.attributes.length * this.$attrHeight;\r\n        let y = pos.y + this.$labelHeight + height + this.$attrHeight / 2;\r\n        if (this.methods.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorAttrMethods = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorAttrMethods);\r\n\r\n            let groupOfMethods = this.createShape({ tag: 'g', id: (this.id + 'Methods') });\r\n            groupOfMethods.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzMethod');\r\n            group.appendChild(groupOfMethods);\r\n\r\n            y += this.$attrHeight / 2;\r\n            for (let method of this.methods) {\r\n\r\n                let methodSvg = method.getSVG();\r\n                method.$owner = this;\r\n\r\n                methodSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                methodSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfMethods.appendChild(methodSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        this.$view = group;\r\n        return group;\r\n    }\r\n\r\n    public copy(): Class {\r\n        let copy: Class;\r\n        copy = <Class>super.copy();\r\n\r\n        // copy label\r\n        copy.id = this.id + 'Copy';\r\n\r\n        // copy attributes\r\n        this.attributes.forEach(attr => {\r\n            copy.attributes.push(new Attribute(attr.toString()));\r\n        });\r\n        // copy methods\r\n        this.methods.forEach(method => {\r\n            copy.methods.push(new Method(method.toString()));\r\n        });\r\n        copy.reCalcSize();\r\n\r\n        return copy;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTCLICK,\r\n                EventBus.ELEMENTDRAG, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES, EventBus.RELOADPROPERTIES];\r\n    }\r\n\r\n    public addProperty(value: string, type: string): any {\r\n        if (!this[type] || !value || value.length === 0) {\r\n            return;\r\n        }\r\n\r\n        let extractedValue;\r\n        if (type === 'attributes') {\r\n            extractedValue = new Attribute(value);\r\n        }\r\n        else if (type === 'methods') {\r\n            extractedValue = new Method(value);\r\n        }\r\n\r\n        for (let valueOfType of this[type]) {\r\n            if (valueOfType.toString() === extractedValue.toString()) {\r\n                alert(extractedValue.toString() + ' already exists.');\r\n                extractedValue = undefined;\r\n                return;\r\n            }\r\n        }\r\n\r\n        this[type].push(extractedValue);\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        return extractedValue;\r\n    }\r\n\r\n    public addAttribute(value: string): Attribute {\r\n        return this.addProperty(value, 'attributes');\r\n    }\r\n\r\n    public addAttributeObj(attr: Attribute): Attribute[] {\r\n        this.attributes.push(attr);\r\n        return this.getAttributes();\r\n    }\r\n\r\n    public addMethodObj(method: Method): Method[] {\r\n        this.methods.push(method);\r\n        return this.getMethods();\r\n    }\r\n\r\n    public addMethod(value: string): Method {\r\n        return this.addProperty(value, 'methods');\r\n    }\r\n\r\n    public removeAttribute(attr: Attribute): void {\r\n        let idx = this.attributes.indexOf(attr);\r\n        this.attributes.splice(idx, 1);\r\n    }\r\n\r\n    public removeMethod(method: Method): void {\r\n        let idx = this.methods.indexOf(method);\r\n        this.methods.splice(idx, 1);\r\n    }\r\n\r\n    public removeProperty(property: ClazzProperty): void {\r\n\r\n        if (property instanceof Attribute) {\r\n            this.removeAttribute(<Attribute>property);\r\n        }\r\n\r\n        if (property instanceof Method) {\r\n            this.removeMethod(<Method>property);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n        let hasSizeChanged: [boolean, Size] = this.hasSizeChanged();\r\n\r\n        if (drawOnlyIfSizeChanged) {\r\n            if (!hasSizeChanged[0]) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n\r\n        // redraw only this clazz\r\n        this.$owner.$view.removeChild(this.$view);\r\n        let newSvg = this.getSVG();\r\n        this.$owner.$view.appendChild(newSvg);\r\n        this.$view = newSvg;\r\n        EventBus.register(this, newSvg);\r\n\r\n        this.redrawEdges();\r\n    }\r\n\r\n    public hasSizeChanged(): [boolean, Size] {\r\n        let oldSize = { width: this.getSize().x, height: this.getSize().y };\r\n        let newSize = this.reCalcSize();\r\n\r\n        // size doenst changed, so nothing to redraw\r\n        if (oldSize.width === newSize.width && oldSize.height === newSize.height) {\r\n            return [false, newSize];\r\n        }\r\n\r\n        return [true, newSize];\r\n    }\r\n\r\n    public updateLabel(newLabel: string): void {\r\n        if (this.$labelView) {\r\n            this.$labelView.textContent = newLabel;\r\n        }\r\n\r\n        // update label in all edges\r\n        this.$edges.forEach(edge => {\r\n            if (this.id === edge.$sNode.id) {\r\n                edge.source = newLabel;\r\n            }\r\n            else if (this.id === edge.$tNode.id) {\r\n                edge.target = newLabel;\r\n            }\r\n        });\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        this.reDraw(true);\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.modifier = modifier;\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reCalcSize(): Size {\r\n        // label\r\n        let newWidth = 150;\r\n        newWidth = Math.max(newWidth, Util.sizeOf(this.id).width + 30);\r\n\r\n        // attributes\r\n        this.attributes.forEach(attrEl => {\r\n\r\n            let widthOfAttr;\r\n            if (attrEl.$view) {\r\n                widthOfAttr = attrEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfAttr = Util.sizeOf(attrEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfAttr + 15);\r\n        });\r\n\r\n        // methods\r\n        this.methods.forEach(methodEl => {\r\n            let widthOfMethod;\r\n            if (methodEl.$view) {\r\n                widthOfMethod = methodEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfMethod = Util.sizeOf(methodEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfMethod + 15);\r\n        });\r\n\r\n        // TODO: height has to be calculated by font-size\r\n        this.getSize().x = newWidth;\r\n        this.getSize().y = this.$labelHeight + ((this.attributes.length + this.methods.length) * this.$attrHeight)\r\n            + this.$attrHeight;\r\n\r\n        let newSize = { width: newWidth, height: this.getSize().y };\r\n\r\n        return newSize;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    private getModernStyle(): Element {\r\n        let width, height, id, size, z, item, rect, g, board, styleHeader, headerHeight, x, y;\r\n        board = this.getRoot()['board'];\r\n        styleHeader = Util.getStyle('ClazzHeader');\r\n        headerHeight = styleHeader.getNumber('height');\r\n        width = 0;\r\n        height = 10 + headerHeight;\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].getType().toLowerCase() === 'objectdiagram') {\r\n            id = this.id.charAt(0).toLowerCase() + this.id.slice(1);\r\n            item = 'Object';\r\n        } else {\r\n            id = this.id;\r\n            item = 'Class';\r\n            if (this['counter']) {\r\n                id += ' (' + this['counter'] + ')';\r\n            }\r\n        }\r\n        g = Util.create({tag: 'g', model: this});\r\n        size = Util.sizeOf(id, this);\r\n        width = Math.max(width, size.width);\r\n        if (this.attributes && this.attributes.length > 0) {\r\n            height = height + this.attributes.length * 25;\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.attributes[z], this).width);\r\n            }\r\n        } else {\r\n            height += 20;\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            height = height + this.methods.length * 25;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.methods[z], this).width);\r\n            }\r\n        }\r\n        width += 20;\r\n\r\n        let pos = this.getPos();\r\n        y = pos.y;\r\n        x = pos.x;\r\n\r\n        rect = {\r\n            tag: 'rect',\r\n            'width': width,\r\n            'height': height,\r\n            'x': x,\r\n            'y': y,\r\n            'class': item + ' draggable',\r\n            'fill': 'none'\r\n        };\r\n        g.appendChild(Util.create(rect));\r\n        g.appendChild(Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            'x': x,\r\n            'y': y,\r\n            height: headerHeight,\r\n            'width': width,\r\n            'class': 'ClazzHeader'\r\n        }));\r\n\r\n        item = Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'class': 'InfoText',\r\n            'text-anchor': 'right',\r\n            'x': x + width / 2 - size.width / 2,\r\n            'y': y + (headerHeight / 2) + (size.height / 2),\r\n            'width': size.width\r\n        });\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].type.toLowerCase() === 'objectdiagram') {\r\n            item.setAttribute('text-decoration', 'underline');\r\n        }\r\n        item.appendChild(document.createTextNode(id));\r\n\r\n        g.appendChild(item);\r\n        g.appendChild(Util.create({\r\n            tag: 'line',\r\n            x1: x,\r\n            y1: y + headerHeight,\r\n            x2: x + width,\r\n            y2: y + headerHeight,\r\n            stroke: '#000'\r\n        }));\r\n        y += headerHeight + 20;\r\n\r\n        if (this.attributes) {\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': (x + 10),\r\n                    'y': y,\r\n                    value: this.attributes[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n            if (this.attributes.length > 0) {\r\n                y -= 10;\r\n            }\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            g.appendChild(Util.create({tag: 'line', x1: x, y1: y, x2: x + width, y2: y, stroke: '#000'}));\r\n            y += 20;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': x + 10,\r\n                    'y': y,\r\n                    value: this.methods[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n        }\r\n        return g;\r\n    }\r\n}\r\n","import {Util} from '../../util';\r\nimport {DiagramElement} from '../BaseElements';\r\nimport Data from '../../Data';\r\n\r\nexport default class ClazzProperty extends DiagramElement {\r\n\r\n    // Public (+)\r\n    // Private (-)\r\n    // Protected (#)\r\n    // Package (~)\r\n\r\n    public $data = new Data();\r\n//    public modifier: string = '+';\r\n//    public name: string;\r\n//    public type: string;\r\n//    public value: string;\r\n\r\n    constructor(data: any | JSON) {\r\n        super();\r\n        this.$data.setValue('modifier', '+');\r\n        this.$data.setValue('name', null);\r\n        this.$data.setValue('type', null);\r\n        this.$data.setValue('value', null);\r\n        this.extractData(data);\r\n    }\r\n\r\n    public update(data: any | JSON): void {\r\n        this.extractData(data);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.$data.setValue('modifier', modifier);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateType(type: string): void {\r\n        this.$data.setValue('type', type);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateValue(value: string): void {\r\n        this.$data.setValue('value', value);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateName(name: string): void {\r\n        this.$data.setValue('name', name);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public getName(): string {\r\n        return this.$data.getValue('name');\r\n    }\r\n\r\n    public getModifier(): string {\r\n        return this.$data.getValue('modifier');\r\n    }\r\n\r\n    public getType(): string {\r\n        return this.$data.getValue('type');\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let attrText = {\r\n            tag: 'text',\r\n            'text-anchor': 'start',\r\n            'alignment-baseline': 'middle',\r\n        };\r\n\r\n        let attrSvg = Util.createShape(attrText);\r\n        attrSvg.textContent = this.toString();\r\n\r\n        this.$view = attrSvg;\r\n\r\n        return attrSvg;\r\n    }\r\n\r\n    public toString(): string {\r\n        let value = this.$data.getValue('value');\r\n        let result = this.$data.getValue('modifier') + ' ';\r\n        result += this.$data.getValue('name') + ' : ';\r\n        result += this.$data.getValue('type');\r\n        if (value && value.length > 0) {\r\n            result += ' = ' + this.$data.getValue('value');\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.$data.setValue('type', data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.$data.setValue('name', data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.$data.setValue('modifier', data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n\r\n            // e.g. name : string or name:string\r\n            let dataSplitted = data.split(':');\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                let name;\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.$data.setValue('modifier', firstChar);\r\n                    name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                }\r\n                else {\r\n                    name = modifierAndNameSplitted;\r\n                }\r\n                // delete whitespaces in name\r\n                name = name.replace(/ /g, '_');\r\n\r\n                this.$data.setValue('name', name);\r\n                let type = dataSplitted[1].trim() || 'String';\r\n\r\n                // if the type was entered with a small begin letter\r\n                if (type.toLowerCase() === 'string') {\r\n                    type = 'String';\r\n                }\r\n                // delete whitespaces in type\r\n                type = type.replace(/ /g, '_');\r\n                this.$data.setValue('type',  type);\r\n            } else {\r\n                dataSplitted = data.split('=');\r\n                if (dataSplitted && dataSplitted.length === 2) {\r\n                    // modifer (and or) name\r\n                    let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                    // first char is +, - or #\r\n                    let firstChar = modifierAndNameSplitted[0];\r\n                    let name;\r\n                    if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                        this.$data.setValue('modifier', firstChar);\r\n                        name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                    }\r\n                    else {\r\n                        name = modifierAndNameSplitted;\r\n                    }\r\n                    // delete whitespaces in name\r\n                    name = name.replace(/ /g, '_');\r\n\r\n                    this.$data.setValue('name', name);\r\n                    let value = dataSplitted[1].trim() || '\"\"';\r\n                    this.$data.setValue('value', value);\r\n                    this.$data.setValue('type', typeof value);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected updateTextOfView() {\r\n        if (this.$view) {\r\n            this.$view.textContent = this.toString();\r\n        }\r\n        if (this.$owner) {\r\n            Util.saveToLocalStorage(this.$owner.$owner);\r\n        }\r\n    }\r\n}\r\n","import {Node} from \"./Node\";\r\n/**\r\n * Created by Stefan on 29.03.2017.\r\n */\r\n\r\nexport class Dice extends Node {\r\n    private value: number;\r\n    private max: number = 6;\r\n    private $animation: SVGElement;\r\n    private $zoom: number = 0.6;\r\n    private $border: number = 0.2;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super(data);\r\n        this.withSize(100, 100);\r\n    }\r\n\r\n    public setNumber(number: number) {\r\n        this.value = number;\r\n        this.refresh();\r\n    }\r\n\r\n    public refresh() {\r\n        if (this.$view) {\r\n            this.reset();\r\n            let group = this.createPointValue();\r\n            if (group) {\r\n                this.$view.appendChild(group);\r\n            }\r\n        }\r\n    }\r\n\r\n    public reset() {\r\n        if (this.$view) {\r\n            while (this.$view.children.length > 1) {\r\n                if(this.$view.children.item(this.$view.children.length - 1).tagName!== \"animateTransform\") {\r\n                    console.log(this.$view.children.item(this.$view.children.length - 1));\r\n                    this.$view.removeChild(this.$view.children.item(this.$view.children.length - 1));\r\n                }else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let dice: SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x + size.x * this.$border,\r\n            y: pos.y + size.y * this.$border,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y * this.$zoom,\r\n            width: size.x * this.$zoom,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        dice.appendChild(this.createShape(attr));\r\n\r\n        let group = this.createPointValue();\r\n        if (group) {\r\n            dice.appendChild(group);\r\n        }\r\n\r\n        this.$view = dice;\r\n        return dice;\r\n    }\r\n\r\n    public animationTimeout(newValues: number[]) {\r\n        if(newValues.length>0) {\r\n            let newValue = newValues.shift();\r\n            this.setNumber(newValue);\r\n            let that=this;\r\n            setTimeout(function() {that.animationTimeout(newValues)}, 100);\r\n        }\r\n    }\r\n\r\n    public roll() {\r\n        this.startAnimation();\r\n        let values:number[]=[];\r\n        let i:number;\r\n        for(i=1;i<this.max;i++) {\r\n            values.push(i);\r\n        }\r\n        for(i=this.max;i>0;i--) {\r\n            values.push(i);\r\n        }\r\n        let that=this;\r\n        values.push( Math.floor(Math.random() * this.max)+1 );\r\n        setTimeout(function() {that.animationTimeout(values)}, 100);\r\n    }\r\n    public startAnimation() {\r\n        if(this.$animation) {\r\n            return;\r\n        }\r\n        let center = this.getPos().x+this.getSize().x /2;\r\n        const attr = {\r\n            tag: 'animateTransform',\r\n            attributeType: \"xml\",\r\n            attributeName:\"transform\",\r\n            type:\"rotate\",\r\n            dur: \"1s\",\r\n            repeatCount:\"1\",\r\n            from:\"0 \"+center+\" \"+center,\r\n            to:\"360 \"+center+\" \"+center\r\n        };\r\n        this.$animation = <SVGElement>this.createShape(attr);\r\n        this.$view.appendChild(this.$animation);\r\n    }\r\n\r\n    public stopAnimation() {\r\n        if(this.$animation) {\r\n            this.$view.removeChild(this.$animation);\r\n            this.$animation = null;\r\n        }\r\n    }\r\n\r\n    public createPointValue() :SVGElement {\r\n        if (this.value == 1) {\r\n           return this.getCircle(2, 2);\r\n        } else if (this.value == 2) {\r\n            return this.getCircle(1, 1, 3, 3);\r\n        } else if (this.value == 3) {\r\n            return this.getCircle(1, 1, 2, 2, 3, 3);\r\n        } else if (this.value == 4) {\r\n            return this.getCircle(1, 1, 1, 3, 3, 1, 3, 3);\r\n        } else if (this.value == 5) {\r\n            return this.getCircle(1, 1, 1, 3, 2, 2, 3, 1, 3, 3);\r\n        } else if (this.value == 6) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 7) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 2, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 8) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 9) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private getCircle(...values:number[]) : SVGElement {\r\n        if (values.length % 2 > 0) {\r\n            return null;\r\n        }\r\n        let size = this.getSize();\r\n        let pos = this.getPos();\r\n        //FIXME let group:SVGElement = <SVGElement>this.createShape({tag: 'g', transform: 'translate(0 0)', height: size.y, width: size.x});\r\n        let group:SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n\r\n\r\n        for (let i: number = 0; i < values.length; i += 2) {\r\n            group.appendChild(this.createCircle(values[i], values[i + 1]));\r\n        }\r\n        return group;\r\n    }\r\n    private createCircle(x:number, y:number) : SVGElement {\r\n        let size = this.getSize();\r\n        let radius = size.x / 10*this.$zoom;\r\n        let border = size.y*this.$border;\r\n        let zoom = size.y*this.$zoom;\r\n        const attr = {\r\n            tag: 'circle',\r\n            r : radius,\r\n            cx: (size.x*this.$zoom * x) / 4 + border,\r\n            cy: (size.y*this.$zoom * y) / 4 + border,\r\n            stroke:\"black\",\r\n            \"stroke-width\":\"3\",\r\n            fill:\"red\",\r\n            style: 'fill:black;stroke:black;stroke-width:2'\r\n        };\r\n        return <SVGElement>this.createShape(attr);\r\n    }\r\n}","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\n\r\nexport class Div extends Control {\r\n    private className: string;\r\n\r\n    public load(data:JSON|any): any {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = <string>data;\r\n        } else {\r\n            id = data.id;\r\n            this.className = data.class;\r\n            this.property = data.property;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let div: HTMLElement = document.getElementById(id);\r\n\r\n        if (!this.property) {\r\n            // if(inputField){\r\n            // TODO disuss how to decide, which property we should listen on...\r\n            // this.property = id;\r\n            this.property = div.getAttribute('Property');\r\n            // }\r\n        }\r\n\r\n        if (div instanceof HTMLDivElement) {\r\n            this.$view = div;\r\n        } else {\r\n            if (!div) {\r\n                this.$view = document.createElement('div');\r\n                this.$view.setAttribute('id', this.id);\r\n                this.$view.setAttribute('property', this.property);\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists+\r\n        if (data.hasOwnProperty('property')) {\r\n            this.setProperty(data['property']);\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        this.$model = entity;\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.className || entity.hasProperty(this.className)) {\r\n                if (entity.id === this.property.split('.')[0]) {\r\n                    entity.addListener(this, this.className);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        this.$view.innerHTML = <string>newValue;\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Form extends Control {\r\n    // private applyingChange: boolean = false;\r\n    private children: Object = {};\r\n    // private property: string = \"\";\r\n\r\n    /**\r\n     * Data should look like the following json:\r\n     *\r\n     * <pre>{\r\n     *      id: \"t1\",\r\n     *      control: \"form\",\r\n     *      elements: [\r\n     *          {id: \"inputField1\", property: \"talk\"},\r\n     *          {id: \"inputField2\", property: \"room\"}\r\n     *      ]\r\n     * }</pre>\r\n     * @param data\r\n     */\r\n    public load(data: any) {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let form: HTMLElement = document.getElementById(id);\r\n\r\n        if (form instanceof HTMLFormElement) {\r\n            this.$view = form;\r\n            if (this.$view.hasAttribute('property')) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            if (!form) {\r\n                this.$view = document.createElement('form');\r\n                this.$view.setAttribute('id', this.id);\r\n\r\n                if (data.hasOwnProperty('property')) {\r\n                    this.property = data['property'];\r\n                }\r\n\r\n                // add all the attributes to the form element\r\n                for (let attr in data) {\r\n                    if (data.hasOwnProperty(attr) === false) {\r\n                        continue;\r\n                    }\r\n                    if (attr === 'elements') {\r\n                        continue;\r\n                    }\r\n                    this.$view.setAttribute(attr, data[attr]);\r\n                }\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists\r\n        let objId = this.property;\r\n        let hasItem = this.$owner.hasItem(objId);\r\n        if (hasItem) {\r\n            let item = this.$owner.getItem(objId);\r\n            item.addListener(this);\r\n            this.$model = item;\r\n        }\r\n\r\n        // now create all the sub input controls\r\n        for (let field of data.elements) {\r\n            // this.createField(field);\r\n            if (field.hasOwnProperty('property')) {\r\n                let property = field['property'];\r\n                property = this.property + '.' + property;\r\n                field['property'] = property;\r\n            }\r\n            if (!field.hasOwnProperty('class')) {\r\n                field['class'] = 'input';\r\n            }\r\n\r\n            // let the Bridge load the subControl\r\n            let control: Control = this.$owner.load(field, this);\r\n\r\n            // add subControl to children\r\n            this.children[control.getId()] = control;\r\n        }\r\n\r\n    }\r\n\r\n    public setProperty(id: string): void {\r\n        this.property = id;\r\n        let keys: string[] = Object.keys(this.children);\r\n        for (let k = 0; k < keys.length; k++) {\r\n            let key = keys[k];\r\n            let childControl = this.children[key];\r\n            // only set Property, if there is a Property defined before\r\n            if (childControl.property) {\r\n                childControl.setProperty(this.property + '.' + childControl.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object,  oldValue?: Object): boolean {\r\n        if (this.$owner != null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    /**\r\n     * Here we create the form elements and put all the attributes to them in order for the Control only having to load\r\n     * the data were appending here. Alternative would be loading with the bridge and afterwards setting\r\n     * the owner to the form instead of the body..\r\n     * @param field\r\n     */\r\n    /*private createField(field: Object) {\r\n     let control = 'input';\r\n     if (field.hasOwnProperty('class')) {\r\n     control = field['class'];\r\n     }\r\n     let input = document.createElement(control);\r\n     input.setAttribute('class', control);\r\n     let id: string;\r\n     if (!field.hasOwnProperty('id')) {\r\n     // TODO: not the best solution for generating unique id's for forms...\r\n     id = this.$owner.getId();\r\n     field['id'] = id;\r\n     }\r\n     if (field.hasOwnProperty('property')) {\r\n     let property = field['property'];\r\n     property = this.id + '.' + property;\r\n     input.setAttribute('property', property);\r\n     }\r\n     for (let attr in field) {\r\n     if (attr === 'property' || attr === 'class' || !field.hasOwnProperty(attr)) {\r\n     continue;\r\n     }\r\n     input.setAttribute(attr, field[attr]);\r\n     }\r\n\r\n     this.$viewElement.appendChild(input);\r\n\r\n     let newcontrol: Control = this.$owner.load(field['id']);\r\n     this.children[newcontrol.getId()] = newcontrol;\r\n     }*/\r\n}\r\n","/**\r\n * Created by Stefan on 01.03.2017.\r\n */\r\nimport {Control} from '../../Control';\r\n\r\nexport class HTML extends Control {\r\n    constructor(data: JSON|Object|any) {\r\n        super();\r\n\r\n        let id: string;\r\n        let tag: string;\r\n\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            data = {};\r\n        } else if (data) {\r\n            id = data.id;\r\n        }\r\n        if (id) {\r\n            this.id = id;\r\n            this.$view = document.getElementById(id);\r\n        }\r\n        if (!this.$view) {\r\n            if (data) {\r\n                tag = data['tag'] || 'div';\r\n            } else {\r\n                tag = 'div';\r\n            }\r\n            this.$view = document.createElement(tag);\r\n            let parent = document.getElementsByTagName('body')[0];\r\n            parent.appendChild(this.$view);\r\n        }\r\n        if (!parent) {\r\n            return;\r\n        }\r\n        this.writeAttribute(data, this.$view);\r\n    }\r\n\r\n    private writeAttribute(properties: Object, entity?: any) {\r\n        let lowKey;\r\n        if (!entity) {\r\n            lowKey = properties['tag'] || 'div';\r\n            entity = document.createElement(lowKey);\r\n        }\r\n        for (let key in properties) {\r\n            if (!properties.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            lowKey = key.toLowerCase();\r\n            if (properties[key] === null) {\r\n                entity.setAttribute(key, '');\r\n                continue;\r\n            }\r\n\r\n            if (lowKey === 'tag' || lowKey.charAt(0) === '$' || lowKey === '$graphModel' || lowKey === 'class') {\r\n                continue;\r\n            }\r\n            if (lowKey === 'children') {\r\n                if (Array.isArray(properties[key])) {\r\n                    for (let item in properties[key]) {\r\n                        if (properties[key].hasOwnProperty(item) === false) {\r\n                            continue;\r\n                        }\r\n                        let child = this.writeAttribute(item);\r\n                        if (child) {\r\n                            entity.appendChild(child);\r\n                        }\r\n                    }\r\n                } else {\r\n                    let child = this.writeAttribute(properties[key]);\r\n                    if (child) {\r\n                        entity.appendChild(child);\r\n                    }\r\n                }\r\n                continue;\r\n            }\r\n            entity[key] = properties[key];\r\n        }\r\n        return entity;\r\n    }\r\n}\r\n","import { Point } from '../BaseElements';\r\nimport { Util } from '../../util';\r\nimport { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\n\r\nexport class InfoText extends Node {\r\n\r\n    public cardinality: string = '';\r\n    private $heightOfOneTextItem: number;\r\n    private $cardinalitySvg: Element;\r\n    private $propertySvg: Element;\r\n    private $rectBackground: Element;\r\n\r\n    constructor(info: any) {\r\n        super(info);\r\n        if (typeof (info) === 'string') {\r\n            this.id = info;\r\n        } else {\r\n            if (info.property) {\r\n                this.property = info.property;\r\n            }\r\n            if (info.cardinality) {\r\n                this.cardinality = info.cardinality;\r\n            }\r\n        }\r\n        this.$isDraggable = true;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n    }\r\n\r\n    public updateCardinality(cardinality: string): void {\r\n        this.cardinality = cardinality;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (this.$rectBackground) {\r\n            this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n            this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n        }\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((cardinality.length === 0 && this.property.length > 0) || !this.$cardinalitySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$cardinalitySvg) {\r\n            this.$cardinalitySvg.textContent = cardinality;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.property.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    public updateProperty(property: string): void {\r\n        this.property = property;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((property.length === 0 && this.cardinality.length > 0) || !this.$propertySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$propertySvg) {\r\n            this.$propertySvg.textContent = property;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.cardinality.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos: Point = this.getPos();\r\n        let group = Util.create({ tag: 'g', class: 'SVGEdgeInfo', transform: 'translate(0, 0)' });\r\n\r\n        // append rect as background for text items\r\n        this.$rectBackground = Util.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y - this.$heightOfOneTextItem + 3,\r\n            width: this.getSize().x,\r\n            height: this.getSize().y,\r\n            fill: '#DDD',\r\n            'stroke-width': 0,\r\n            rx: '5',\r\n            ry: '5'\r\n        });\r\n        group.appendChild(this.$rectBackground);\r\n\r\n        let y = pos.y;\r\n        if (this.property) {\r\n            // property\r\n            this.$propertySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$propertySvg.textContent = this.property;\r\n            group.appendChild(this.$propertySvg);\r\n\r\n            y += this.$heightOfOneTextItem;\r\n        }\r\n\r\n        // cardinality\r\n        if (this.cardinality) {\r\n            this.$cardinalitySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$cardinalitySvg.textContent = this.cardinality;\r\n            group.appendChild(this.$cardinalitySvg);\r\n        }\r\n\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        let cardinalityAvailable = this.cardinality && this.cardinality.length > 0;\r\n        let propertyAvailable = this.property && this.property.length > 0;\r\n\r\n        return !propertyAvailable && !cardinalityAvailable;\r\n    }\r\n\r\n    public redrawFromEdge(newPos: Point): void {\r\n\r\n        if (!newPos) {\r\n            return;\r\n        }\r\n\r\n        let oldPos = this.getPos();\r\n\r\n        // get difference between new and the old position\r\n        let diffPos = new Point();\r\n        diffPos.x = newPos.x - oldPos.x;\r\n        diffPos.y = newPos.y - oldPos.y;\r\n\r\n        // get translate information\r\n        let translation = this.$view.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        let sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        // set new traslation values\r\n        let newTransX = (sx + diffPos.x);\r\n        let newTransY = (sy + diffPos.y);\r\n        this.$view.setAttributeNS(null, 'transform', 'translate(' + newTransX + ' ' + newTransY + ')');\r\n\r\n        // set new position of svg\r\n        this.getPos().x = newPos.x;\r\n        this.getPos().y = newPos.y;\r\n    }\r\n\r\n    public getText(): string {\r\n        let infoTxt: string = '';\r\n\r\n        if (this.property) {\r\n            infoTxt = this.property;\r\n        }\r\n        if (this.cardinality) {\r\n            if (infoTxt.length > 0) {\r\n                infoTxt += '\\n';\r\n            }\r\n            infoTxt += this.cardinality;\r\n        }\r\n\r\n        return infoTxt;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    private calcSize(): Point {\r\n        let text: string = this.getText();\r\n        let items: Array<string> = text.split('\\n');\r\n\r\n        let maxSize = new Point(0, 0);\r\n        if (text.length === 0) {\r\n            return maxSize;\r\n        }\r\n\r\n        for (let i = 0; i < items.length; i += 1) {\r\n            // calculate size\r\n            let sizeOfText: ClientRect = Util.sizeOf(items[i]);\r\n            maxSize.x = Math.max(maxSize.x, sizeOfText.width);\r\n            maxSize.y += sizeOfText.height;\r\n\r\n            this.$heightOfOneTextItem = sizeOfText.height;\r\n        }\r\n\r\n        return maxSize;\r\n    }\r\n    private resetAllSvgElements() {\r\n        this.$cardinalitySvg = undefined;\r\n        this.$view = undefined;\r\n        this.$propertySvg = undefined;\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\nimport {PropertyBinder} from '../../PropertyBinder';\r\n\r\nexport class Input extends Control {\r\n    private type: string;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data = super.initViewDataProperties(oldData);\r\n        if ('checkbox' === this.type || 'radio' === this.type) {\r\n            data.addFrom('checked', oldData);\r\n        }\r\n        data.addFrom('value', oldData);\r\n        data.addFrom('type', oldData);\r\n        return data;\r\n    }\r\n\r\n    public load(data: any) {\r\n        let id: string;\r\n        let inputField: HTMLElement;\r\n        let useData: boolean;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            useData = true;\r\n        } else {\r\n            id = data.id;\r\n            if (data.type) {\r\n                this.setType(data['type']);\r\n            } else {\r\n                this.setType('text');\r\n            }\r\n            if (data.hasOwnProperty('property')) {\r\n                this.setProperty(data['property']);\r\n            }\r\n            useData = false;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n\r\n        inputField = document.getElementById(id);\r\n\r\n        if (useData) {\r\n            if (inputField) {\r\n                // TODO disuss how to decide, which property we should listen on...\r\n                // this.property = id;\r\n                if (inputField.hasAttribute('Property')) {\r\n                    this.setProperty(inputField.getAttribute('Property'));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (inputField instanceof HTMLInputElement) {\r\n            this.setView(inputField);\r\n            this.type = inputField.type;\r\n            // useData = false;\r\n        } else {\r\n            if (!inputField) {\r\n                this.setView(document.createElement('input'));\r\n                this.$viewData = this.initViewDataProperties(this.$viewData);\r\n                // append viewListener\r\n                // this.$view.addEventListener('change', this.$viewListener);\r\n                if (typeof(data) !== 'string') {\r\n                    for (let attr in data) {\r\n                        if (data.hasOwnProperty(attr) === false) {\r\n                            continue;\r\n                        }\r\n                        // this.$view[attr] = data[attr];\r\n                        this.$viewData.setValue(attr, data[attr]);\r\n                    }\r\n                } else {\r\n                    if (this.type) {\r\n                        this.$view.setAttribute('type', this.type);\r\n                    }\r\n                    if (data.hasOwnProperty('class')) {\r\n                        this.$view.setAttribute('class', data['class']);\r\n                    }\r\n                    this.$view.setAttribute('id', this.id);\r\n                    this.$view.setAttribute('property', this.property);\r\n                }\r\n\r\n                if (data.value) {\r\n                    // if theres a value at the control, we want to change the model to the new value\r\n                    if (this.$model) {\r\n                        this.$model.setValue(this.lastProperty, data.value);\r\n                    }\r\n                }\r\n                if (this.$model) {\r\n                    PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                }\r\n\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (this.property && entity) {\r\n            if (entity.id === this.property.split('.')[0]) {\r\n                this.$model = entity;\r\n                PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                // entity.addListener(this, this.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n    // TODO FIXME protected updateElement(property: string, value: string) {\r\n    //     if (this.$view instanceof HTMLInputElement) {\r\n    //         if (value != null) {\r\n    //             if(property == this.lastProperty) {\r\n    //                 (<HTMLInputElement>this.$view)[this.getStandardProperty()] = value;\r\n    //             } else {\r\n    //                 // this.getRoot().setValue(this, property, value, (<HTMLInputElement>this.$view)[property]);\r\n    //                 (<HTMLInputElement>this.$view)[property] = value;\r\n    //             }\r\n    //         } else {\r\n    //             delete (<HTMLInputElement>this.$view)[property];\r\n    //         }\r\n    //     }\r\n    // }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            super.controlChanged(ev);\r\n        }\r\n// <<<<<<< HEAD\r\n//             let newVal = element[this.getStandardProperty()];\r\n//             if (this.isKeyOnly()) {\r\n//                 // we expect, element[this.lastProperty] to be boolean:\r\n//                 if (!newVal) {\r\n//                     newVal = null;\r\n//                 }\r\n//             } else {\r\n//             }\r\n        // let $graphModel;\r\n        // let value;\r\n        /*if (this.$graphModel) {\r\n            $graphModel = this.$graphModel;\r\n            value = this.$graphModel.getValue(this.lastProperty);\r\n        } else {\r\n            $graphModel = this;\r\n            if (this.$view) {\r\n                value = this.$view[this.lastProperty];\r\n            }\r\n        }*/\r\n        // this.$model.setValue(this.lastProperty, newVal);\r\n        // this.propertyChange(this.$graphModel,this.lastProperty, this.$graphModel.getValue(this.lastProperty), newVal);\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n// =======\r\n        // let newVal = element[this.lastProperty];\r\n        // if (this.isKeyOnly()) {\r\n        //     // we expect, element[this.lastProperty] to be boolean:\r\n        //     if (!newVal) {\r\n        //         newVal = null;\r\n        //     }\r\n        // } else {\r\n        // }\r\n        // let $graphModel;\r\n        // let value;\r\n\r\n        // $graphModel = this.getViewData();\r\n        // if (this.$graphModel) {\r\n        //     $graphModel = this.$graphModel;\r\n        //     value = this.$graphModel.getValue(this.lastProperty);\r\n        // } else {\r\n        //     $graphModel = this;\r\n        //     if (this.$view) {\r\n        //         value = this.$view[this.lastProperty];\r\n        //     }\r\n        // }\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n//            this.saveViewInData();\r\n// >>>>>>> addOldFunctions\r\n//         } else {\r\n//             console.log('value does not match the pattern...');\r\n//         }\r\n    }\r\n\r\n    public setType(type: string): void {\r\n        let oldValue: string = this.type;\r\n        if (oldValue === type) {\r\n            return;\r\n        }\r\n        if (type === 'radio') {\r\n            this.$viewData.setValue('checked', null);\r\n        } else {\r\n            this.$viewData.removeKey('checked');\r\n        }\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\n\r\nexport class Label extends Control {\r\n    public load(data: JSON): any {\r\n        this.createControl(this.$owner, data);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('label');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr === 'textContent') {\r\n                this.$view.textContent = data['textContent'];\r\n            } else {\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Method extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.updateType(data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.updateType(data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.updateType(data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n            // e.g. setName() : string or name:string\r\n            let dataSplitted = data.split(':');\r\n\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }\r\n                else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType(dataSplitted[1].trim() || 'void');\r\n            }\r\n            // set default return type of void\r\n            else {\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = data.trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }  else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType('void');\r\n            }\r\n        }\r\n\r\n        if (Util.includes(this.$data.getValue('name'), '(') && !Util.includes(this.$data.getValue('name'), ')') === false) {\r\n            this.$data.setValue('name', this.$data.getValue('name') + '()');\r\n        }\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\nimport {Association} from '../edges';\r\nimport { GraphModel } from '..';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\n\r\nexport class Node extends DiagramElement {\r\n    public $edges: Association[] = [];\r\n    public $minWidth: number = 150;\r\n    public $minheight: number = 25;\r\n    public $defaulEdgeType: string;\r\n\r\n    constructor(data: JSON|string|Object|any) {\r\n        super();\r\n\r\n        // default size\r\n        this.withSize(this.$minWidth, this.$minheight);\r\n\r\n        if (data) {\r\n            if (data['x'] && data['y']) {\r\n                this.withPos(data['x'], data['y']);\r\n            }\r\n            if (data['width'] || data['height']) {\r\n                this.withSize(data['width'], data['height']);\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos = this.getPos();\r\n        const size = this.getSize();\r\n\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x - size.x / 2,\r\n            y: pos.y - size.y / 2,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y,\r\n            width: size.x,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        const shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'middle',\r\n            'font-family': 'Verdana',\r\n            'font-size': '14',\r\n            fill: 'black'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = this.id;\r\n\r\n        let group = this.createShape({tag: 'g', id: this.id});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public copy(): Node {\r\n        let copy: Node;\r\n        // create new id\r\n        let model = <GraphModel>this.$owner || <GraphModel>this.getRoot();\r\n        if (model) {\r\n            let type = this.property || Node.name;\r\n            let newId = model.getNewId(type);\r\n            copy = <Node>model.createElement(type, newId, null);\r\n            copy.withSize(this.getSize().x, this.getSize().y);\r\n            copy.$owner = model;\r\n        } else {\r\n            copy.id = this.id + '-copy';\r\n            copy.$owner = this.getRoot();\r\n        }\r\n        return copy;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n// EMPTY\r\n    }\r\n    public addAttribute(value: string): Attribute {\r\n        return null;\r\n    }\r\n    public getAttributes(): Attribute[] {\r\n        return null;\r\n    }\r\n    public addMethod(value: string): Method {\r\n        return null;\r\n    }\r\n    public updateLabel(newLabel: string): void {\r\n// EMPTY\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\n\r\nexport class SO extends DiagramElement {\r\n    public static create(element: Object) {\r\n        let result: SO = new SO();\r\n        for (let key in element) {\r\n            if (element.hasOwnProperty(key) === false) {\r\n                continue;\r\n            }\r\n            result.withKeyValue(key, element[key]);\r\n\r\n        }\r\n        return result;\r\n    }\r\n\r\n    public withKeyValue(key: string, value: any): SO {\r\n        if (key === 'typ') {\r\n            this.property = value;\r\n        } else if (key === 'x') {\r\n            this.withPos(value, null);\r\n        } else if (key === 'y') {\r\n            this.withPos(null, value);\r\n        } else if (key === 'width') {\r\n            this.withSize(value, null);\r\n        } else if (key === 'height') {\r\n            this.withSize(null, value);\r\n        } else {\r\n            this[key] = value;\r\n        }\r\n        return this;\r\n    }\r\n}\r\n","import {Point} from '../BaseElements';\r\nimport {Node} from './Node';\r\n\r\nexport class StereoType extends Node {\r\n\r\n    protected stereoType: string;\r\n\r\n    constructor (type: string, x: number, y: number) {\r\n        super('');\r\n        this.withPos(x, y);\r\n        this.setStereoType(type);\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        let pos: Point = this.getPos();\r\n        let size: Point = this.getSize();\r\n\r\n               // = = = STEREOTYPE = = =\r\n        let stereoType = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y - this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': 10,\r\n            'font-weight': 'bold',\r\n            fill: 'black'\r\n        });\r\n        stereoType.textContent = this.stereoType;\r\n\r\n        this.$view = stereoType;\r\n        return stereoType;\r\n    }\r\n\r\n    public setStereoType(value: string): void {\r\n        this.stereoType = '<<' + value + '>>';\r\n    }\r\n\r\n    public getStereoType(): string {\r\n        return this.stereoType;\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { SO } from './SO';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport { Util } from '../../util';\r\n\r\nexport class Symbol extends Node {\r\n    public $heightMax: number = 0;\r\n    public $heightMin: number = 0;\r\n\r\n    constructor(typ: string) {\r\n        super(typ);\r\n    }\r\n\r\n    public draw(typ?: string): SVGElement {\r\n        return SymbolLibary.draw(this);\r\n    }\r\n}\r\n\r\n// \t\t\t\t###################################################### SymbolLibary ####################################################################################\r\n// Example Items\r\n// {tag: 'path', d: ''}\r\n// {tag: 'rect', width:46, height:34}\r\n// {tag: 'ellipse', width:23, height:4}\r\n// {tag: 'line', x1:650, y1:-286, x2:650, y2:-252}\r\n// {tag: 'circle', r:5, x:12, y:0}\r\n// {tag: 'image', height: 30, width: 50, content$src: hallo}\r\n// {tag: 'text', 'text-anchor': 'left', x: '10'}\r\nexport class SymbolLibary {\r\n\r\n    public static drawSVG(node: any): SVGSVGElement {\r\n        // const lib = new SymbolLibary();\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            const parent = SO.create(node);\r\n            parent['property'] = 'SVG';\r\n            symbol = fn(parent);\r\n            // symbol = fn.apply(lib, parent);\r\n\r\n            return SymbolLibary.createGroup(parent, symbol);\r\n        }\r\n        return symbol;\r\n    }\r\n\r\n    public static draw(node: any, parent?: Object): SVGElement {\r\n        // Node is Symbol or simple Object\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            if (!(node instanceof DiagramElement)) {\r\n                node = SO.create(node);\r\n                if (!node.property) {\r\n                    node.property = 'SVG';\r\n                }\r\n            }\r\n            symbol = fn.apply(this, [node]);\r\n            if (!parent) {\r\n                return SymbolLibary.createGroup(node, symbol);\r\n            }\r\n            return SymbolLibary.createGroup(node, symbol);\r\n        } else if (node.property) {\r\n            symbol = new Symbol(node.property);\r\n            symbol.init(node);\r\n            let pos = node.getPos();\r\n            let size = node.getSize();\r\n            symbol.withPos(pos.x, pos.y);\r\n            symbol.withSize(size.x, size.y);\r\n            symbol['value'] = node['value'];\r\n            parent = node['$parent'];\r\n            return SymbolLibary.draw(symbol, parent);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public static upFirstChar(txt: string): string {\r\n        return txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase();\r\n    }\r\n\r\n    public static isSymbolName(typ: string): boolean {\r\n        let fn = SymbolLibary['draw' + SymbolLibary.upFirstChar(typ)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static isSymbol(node: Symbol) {\r\n        let fn = SymbolLibary[SymbolLibary.getName(node)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static getName(node: any): string {\r\n        if (node['type']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['type']);\r\n        }\r\n        if (node.property) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node.property);\r\n        }\r\n        if (node['src']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['src']);\r\n        }\r\n        return 'drawNode';\r\n    }\r\n\r\n    /*FIXME   public static createImage(node: Symbol, $graphModel:Node) {\r\n           let n, img: HTMLElement;\r\n           // node.$graphModel = node;\r\n           if (SymbolLibary.isSymbol(node)) {\r\n               return SymbolLibary.draw(null, node);\r\n           }\r\n           n = {tag: 'img', $graphModel: node, src: node['src']};\r\n           let size = node.getSize();\r\n           if (size.isEmpty() === false) {\r\n               n['width'] = size.x;\r\n               n['height'] = size.y;\r\n           } else {\r\n               n['xmlns'] = 'http://www.w3.org/1999/xhtml';\r\n           }\r\n           img = Util.create(n);\r\n           if (size.isEmpty()) {\r\n               $graphModel.appendImage(img);\r\n               return null;\r\n           }\r\n           return img;\r\n       }*/\r\n\r\n    public static createGroup(node: DiagramElement, group: any) {\r\n        let func, y: number, z: number, box, item: Element, transform, i, offsetX = 0, offsetY = 0;\r\n        let svg: any;\r\n        if (node.property.toUpperCase() === 'HTML') {\r\n            let so = {\r\n                tag: 'svg',\r\n                style: { left: (group.x | 0) + node.getPos().x, top: (group.y | 0) + node.getPos().y, position: 'absolute' }\r\n            };\r\n            if (node['transform']) {\r\n                so['transform'] = node['transform'];\r\n            }\r\n            svg = Util.create(so);\r\n        } else {\r\n            svg = Util.create({ tag: 'g' });\r\n            transform = 'translate(' + group.getPos().x + ' ' + group.getPos().y + ')';\r\n            if (group.scale) {\r\n                transform += ' scale(' + group.scale + ')';\r\n            }\r\n            if (group.rotate) {\r\n                transform += ' rotate(' + group.rotate + ')';\r\n            }\r\n            svg.setAttribute('transform', transform);\r\n            if (group['id']) {\r\n                svg.id = group['id'];\r\n            }\r\n        }\r\n\r\n        if (node['tooltip']) {\r\n            const tooltipTitleAttr = {\r\n                tag: 'title'\r\n            };\r\n            let tooltipTitle = Util.createShape(tooltipTitleAttr);\r\n            tooltipTitle.textContent = node['tooltip'];\r\n            svg.appendChild(tooltipTitle);\r\n        }\r\n\r\n        if (node['background']) {\r\n            const attrCircle = {\r\n                tag: 'circle',\r\n                cx: 20,\r\n                cy: 20,\r\n                r: 17,\r\n                stroke: '#888',\r\n                'stroke-width': 0,\r\n                fill: '#DDD'\r\n            };\r\n            svg.appendChild(Util.create(attrCircle));\r\n        }\r\n\r\n        for (i = 0; i < group.items.length; i += 1) {\r\n            svg.appendChild(Util.create(group.items[i]));\r\n        }\r\n        let elements = node['elements'];\r\n        Util.setSize(svg, group.width + node.getSize().x, group.height + node.getSize().y);\r\n        node['$heightMin'] = node.getSize().y;\r\n        if (elements) {\r\n            for (i = 0; i < elements.length; i += 1) {\r\n                if (!elements[i] && elements[i].length < 1) {\r\n                    elements.splice(i, 1);\r\n                    i -= 1;\r\n                }\r\n            }\r\n            box = Util.create({ tag: 'g' });\r\n            // Calculate new Height\r\n            let c: number;\r\n            z = 0;\r\n            for (c = 0; c < elements.length; c += 1) {\r\n                if (typeof elements[c] === 'string') {\r\n                    z += 1;\r\n                } else {\r\n                    z += elements[c].length;\r\n                }\r\n            }\r\n            z = z * 25 + 6;\r\n            box.appendChild(Util.create({\r\n                tag: 'rect',\r\n                rx: 0,\r\n                x: offsetX,\r\n                y: (offsetY + 28),\r\n                width: 70,\r\n                height: z,\r\n                stroke: '#000',\r\n                fill: '#fff',\r\n                opacity: '0.7'\r\n            }));\r\n            node['$heightMax'] = z + node['$heightMin'];\r\n\r\n            svg['elements'] = elements;\r\n            if (node['type'] === 'DropDown') {\r\n                svg['activ'] = Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': 60,\r\n                    'x': (10 + offsetX),\r\n                    'y': 20,\r\n                    value: node['activText']\r\n                });\r\n                svg.appendChild(svg.activ);\r\n            }\r\n\r\n            y = offsetY + 46;\r\n            // 46 -28 = 18\r\n\r\n            func = function (event: Event) {\r\n                if (svg.activ) {\r\n                    svg.activ.textContent = (<any>event.currentTarget).value;\r\n                }\r\n            };\r\n            let txt: string;\r\n            let textClass = 'SVGTEXT';\r\n            for (z = 0; z < elements.length; z += 1) {\r\n                if (typeof elements[z] === 'string') {\r\n                    txt = elements[z];\r\n                } else {\r\n                    item = this.addText(y, offsetX, box, elements[z][0], 'SVGTEXT');\r\n                    y += 26;\r\n                    for (c = 1; c < elements[z].length; c += 1) {\r\n                        item = this.addText(y, offsetX, box, '* ' + elements[z][c], 'SVGTEXTITEM');\r\n\r\n                        item['value'] = elements[z];\r\n                        if (node['action']) {\r\n                            item['onclick'] = node['action'];\r\n                        } else {\r\n                            item['onclick'] = func;\r\n                        }\r\n                        y += 26;\r\n                    }\r\n                    txt = elements[z];\r\n                    let subBox = Util.create({\r\n                        tag: 'rect',\r\n                        rx: 0,\r\n                        x: offsetX,\r\n                        y: (offsetY + 28),\r\n                        width: 60,\r\n                        height: z,\r\n                        stroke: '#000',\r\n                        fill: '#fff',\r\n                        opacity: '0.7'\r\n                    });\r\n                    continue;\r\n                }\r\n                // let txt = elements[z];\r\n                item = this.addText(y, offsetX, box, txt, textClass);\r\n\r\n                item['value'] = elements[z];\r\n                if (node['action']) {\r\n                    item['onclick'] = node['action'];\r\n                } else {\r\n                    item['onclick'] = func;\r\n                }\r\n                y += 26;\r\n            }\r\n            svg.choicebox = box;\r\n        }\r\n        svg.tool = node;\r\n        svg.onclick = function () {\r\n            if (svg.status === 'close') {\r\n                svg.open();\r\n            } else {\r\n                svg.close();\r\n            }\r\n        };\r\n        svg.close = function () {\r\n            if (svg.status === 'open' && svg.choicebox) {\r\n                this.removeChild(svg.choicebox);\r\n            }\r\n            svg.status = 'close';\r\n            svg.tool.$size.height = svg.tool.heightMin;\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x, g.tool.height + g.tool.y);\r\n            Util.setSize(svg, svg.tool.$size.x, svg.tool.$size.y);\r\n        };\r\n        svg.open = function () {\r\n            if (this.tagName === 'svg') {\r\n                return;\r\n            }\r\n            if (svg.status === 'close' && svg.choicebox) {\r\n                this.appendChild(svg.choicebox);\r\n            }\r\n            svg.status = 'open';\r\n            svg.tool.$size.height = svg.tool.heightMax;\r\n            Util.setSize(svg, svg.tool.width, svg.tool.height);\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x + 10, g.tool.height + g.tool.y + 10);\r\n        };\r\n        svg.close();\r\n        return svg;\r\n    }\r\n\r\n    public static addChild(parent: SVGElement, json: JSON | Element): void {\r\n        let item: Element;\r\n        if ((<any>json).offsetLeft) {\r\n            item = <Element>json;\r\n        } else {\r\n            item = Util.create(json);\r\n        }\r\n        item.setAttribute('class', 'draggable');\r\n        parent.appendChild(item);\r\n    }\r\n\r\n    public static all(node: any): void {\r\n        SymbolLibary.drawSmiley(node);\r\n        SymbolLibary.drawDatabase(node);\r\n        SymbolLibary.drawLetter(node);\r\n        SymbolLibary.drawMobilephone(node);\r\n        SymbolLibary.drawWall(node);\r\n        SymbolLibary.drawActor(node);\r\n        SymbolLibary.drawLamp(node);\r\n        SymbolLibary.drawArrow(node);\r\n        SymbolLibary.drawButton(node);\r\n        SymbolLibary.drawDropdown(node);\r\n        SymbolLibary.drawClassicon(node);\r\n        SymbolLibary.drawClassWithEdgeicon(node);\r\n    }\r\n\r\n    public static drawHamburger(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'circle', r: 10, fill: '#ccc', cx: 12, cy: 12, 'stroke-width': 1, stroke: 'black'},\r\n                { tag: 'path', d: 'M 8,7 H 16 M 8,12 H 16 M 8,17 H 16', stroke: 'black', fill: 'none' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawSmiley(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'path', d: 'm49.01774,25.64542a24.5001,24.5 0 1 1 -49.0001,0a24.5001,24.5 0 1 1 49.0001,0z', stroke: 'black', fill: 'none' }, { tag: 'path', d: 'm8,31.5c16,20 32,0.3 32,0.3' },\r\n                { tag: 'path', d: 'm19.15,20.32a1.74,2.52 0 1 1 -3.49,0a1.74,2.52 0 1 1 3.49,0z' },\r\n                { tag: 'path', d: 'm33,20.32a1.74,2.52 0 1 1 -3.48,0a1.74,2.52 0 1 1 3.48,0z' },\r\n                { tag: 'path', d: 'm5.57,31.65c3.39,0.91 4.03,-2.20 4.03,-2.20' },\r\n                { tag: 'path', d: 'm43,32c-3,0.91 -4,-2.20 -4.04,-2.20' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDatabase(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 40,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,-6.26 25.03,-6.26 25.03,0l0,25.82c0,6.26 -25.03,6.26 -25.03,0l0,-25.82z',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLetter(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 17,\r\n            items: [\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1,1l22,0l0,14l-22,0l0,-14z' },\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1.06,1.14l10.94,6.81l10.91,-6.91' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMobilephone(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 4.2 0.5 15.61 0c 2 0 3.7 1.65 3.7 3.7l 0 41.6c 0 2-1.65 3.7-3.7 3.7l-15.6 0c-2 0-3.7-1.6-3.7-3.7l 0-41.6c 0-2 1.6-3.7 3.7-3.7z',\r\n                    fill: 'none',\r\n                    stroke: 'black'\r\n                },\r\n                { tag: 'path', d: 'm 12.5 2.73a 0.5 0.5 0 1 1-1 0 0.5 0.5 0 1 1 1 0z' },\r\n                { tag: 'path', d: 'm 14 46a 2 2 0 1 1-4 0 2 2 0 1 1 4 0z' },\r\n                { tag: 'path', d: 'm 8 5 7 0' },\r\n                { tag: 'path', d: 'm 1.63 7.54 20.73 0 0 34-20.73 0z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawWall(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'path', d: 'm26,45.44l-5,3.56l-21,-9l0,-36.41l5,-3.56l20.96,9l-0,36.4z' },\r\n                {\r\n                    tag: 'path',\r\n                    stroke: 'white',\r\n                    d: 'm2.21,11l18.34,7.91m-14.46,-12.57l0,6.3m8.2,21.74l0,6.35m-8.6,-10l0,6.351m4.1,-10.67l0,6.3m4.8,-10.2l0,6.3m-8.87,-10.23l0,6.35m4.78,-10.22l0,6.35m-8,14.5l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m0,-13l0,34m-18.23,-41.84l18.3,8m0,0.11l5,-3.57'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawActor(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'line', stroke: '#000', x1: '12', y1: '10', x2: '12', y2: '30' },\r\n                { tag: 'circle', stroke: '#000', cy: '5', cx: '12', r: '5' },\r\n                { tag: 'line', stroke: '#000', y2: '18', x2: '25', y1: '18', x1: '0' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '5', y1: '30', x1: '12' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '20', y1: '30', x1: '12' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLamp(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 22.47 10.58c-6.57 0-11.89 5.17-11.89 11.54 0 2.35 0.74 4.54 2 6.36 2 4 4.36 5.63 4.42 10.4l 11.15 0c 0.12-4.9 2.5-6.8 4.43-10.4 1.39-1.5 1.8-4.5 1.8-6.4 0-6.4-5.3-11.5-11.9-11.5z',\r\n                    fill: 'white',\r\n                    stroke: 'black'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 40 8 0c 0.58 0 1 0.5 1 1 0 0.6-0.5 1-1 1l-8 0c-0.6 0-1-0.47-1-1 0-0.58 0.47-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 42.7 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 45.3 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                { tag: 'path', d: 'm 19.5 48c 0.37 0.8 1 1.3 1.9 1.7 0.6 0.3 1.5 0.3 2 0 0.8-0.3 1.4-0.8 1.9-1.8z' },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 6 37.5 4.2-4c 0.3-0.3 0.8-0.3 1 0 0.3 0.3 0.3 0.8 0 1.1l-4.2 4c-0.3 0.3-0.8 0.3-1.1 0-0.3-0.3-0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 39 37.56-4.15-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 38 23 5.8 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.8 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 1.3 23 6 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.9 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 34.75 11.2 4-4.1c 0.3-0.3 0.3-0.8 0-1-0.3-0.3-0.8-0.3-1 0l-4 4.1c-0.3 0.3-0.3 0.8 0 1 0.3 0.3 0.8 0.3 1 0z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 11.23 10-4-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 21.64 1.3 0 5.8c 0 0.4 0.3 0.8 0.8 0.8 0.4 0 0.8-0.3 0.8-0.8l 0-5.8c 0-0.4-0.3-0.8-0.8-0.8-0.4 0-0.8 0.3-0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 26.1 24.3c-0.5 0-1 0.2-1.3 0.4-1.1 0.6-2 3-2.27 3.5-0.26-0.69-1.14-2.9-2.2-3.5-0.7-0.4-2-0.7-2.5 0-0.6 0.8 0.2 2.2 0.9 2.9 1 0.9 3.9 0.9 3.9 0.9 0 0 0 0 0 0 0.54 0 2.8 0 3.7-0.9 0.7-0.7 1.5-2 0.9-2.9-0.2-0.3-0.7-0.4-1.2-0.4z'\r\n                },\r\n                { tag: 'path', d: 'm 22.5 28.57 0 10.7' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawStop(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 30,\r\n            height: 30,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: '#FFF',\r\n                    'stroke-width': '2',\r\n                    stroke: '#B00',\r\n                    d: 'm 6,6 a 14,14 0 1 0 0.06,-0.06 z m 0,0 20,21'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMin(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    d: 'm 0,0 19,0 0,19 -19,0 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 13,-0.04'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawArrow(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 10,\r\n            height: 9,\r\n            rotate: node['rotate'],\r\n            items: [\r\n                { tag: 'path', fill: '#000', stroke: '#000', d: 'M 0,0 10,4 0,9 z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMax(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    'stroke-dashoffset': 2,\r\n                    'stroke-dasharray': '4.8,4.8',\r\n                    d: 'm 0,0 4.91187,0 5.44643,0 9.11886,0 0,19.47716 -19.47716,0 0,-15.88809 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 6,0.006 0.02,5 0.01,-11 -0.03,6.02 c 2,-0.01 4,-0.002 6,0.01'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawButton(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight, btnValue;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        btnValue = node['value'] || '';\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: 60,\r\n            height: 28,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 8,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    filter: 'url(#drop-shadow)',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                { tag: 'text', $font: true, x: 10, y: 18, fill: 'black', value: btnValue, 'class': 'hand' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDropdown(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 0,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth - 20,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 2,\r\n                    x: btnWidth - 20,\r\n                    y: 0,\r\n                    width: 20,\r\n                    height: 28,\r\n                    stroke: '#000',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    style: 'fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1',\r\n                    d: 'm ' + (btnWidth - 15) + ',13 10,0 L ' + (btnWidth - 10) + ',20 z'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassicon(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.19999l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm25.68807,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.2l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                { tag: 'line', x1: 11, y1: 7, x2: 25, y2: 7, stroke: '#000' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassWithEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M2,10 20,10 20,35 2,35 Z M2,17 20,17 M20,10 28,5 28,9 M 28.5,4.7 24,4',\r\n                    style: 'fill:none;stroke:#000000;transform:scale(0.8);'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClass(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: '100%',\r\n            height: '100%',\r\n            items: [\r\n                { tag: 'rect', width: 50, height: 40, x: 0, y: 0, 'stroke-width': 2, stroke: 'black', fill: 'none'},\r\n                { tag: 'rect', width: 50, height: 12, x: 0, y: 18, 'stroke-width': 1, stroke: 'black', fill: 'none'},\r\n                { tag: 'text', x: 27, y: 14, 'text-anchor': 'middle', 'font-size': 11, value: 'Class'},\r\n                { tag: 'text', x: 5, y: 24, 'font-size': 5, value: '+ field: type'},\r\n                { tag: 'text', x: 5, y: 36, 'font-size': 5, value: '+ method(type)'}\r\n            ]\r\n        });\r\n    }\r\n/*\r\n<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n    <g>\r\n    <text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text>\r\n        <text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>\r\n*/\r\n\r\n    public static drawEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M10,30 30,10 M19,10 30,10 30,21',\r\n                    style: 'fill:none;stroke:#555;stroke-width:2;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawCopynode(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M5 5 L15 5 L15 20 L5 20 Z M5 10 L15 10',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M8 2 L18 2 L18 17 L8 17 Z M8 7 L18 7'\r\n                        + 'M11 4.5 L15 4.5 '\r\n                        + 'M10 10 L16 10 '\r\n                        + 'M10 13 L16 13 ',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawBasket(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M12 12 L18 12 L18 11 L22 11 L22 12 L28 12 L28 14 L27 14 L27 29 L13 29 L13 14 L12 14 Z M13 14 L27 14 M20 17 L20 26 M17 16 L17 27 M23 16 L23 27',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawPencil(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M6 20 L12 23 L33 23 L33 17 L12 17 Z M30 17 L30 23 M12 17 L12 23 M15 19 L28 19 M15 21 L28 21',\r\n                    stroke: '#000',\r\n                    'stroke-width': 1,\r\n                    fill: 'white'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    private static addText(y: number, offsetX: number, box: Element, text: string, textClass: string): Element {\r\n        let item: Element;\r\n        box.appendChild(Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'text-anchor': 'left',\r\n            width: 70,\r\n            x: 10,\r\n            y: y,\r\n            class: textClass,\r\n            value: text,\r\n            eventValue: text\r\n        }));\r\n        if (textClass === 'SVGTEXT') {\r\n            textClass = 'SVGChoiceText';\r\n        } else {\r\n            textClass = 'SVGChoice';\r\n        }\r\n\r\n        item = Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            x: offsetX,\r\n            y: y - 18,\r\n            width: 70,\r\n            height: 24,\r\n            stroke: 'none',\r\n            class: textClass,\r\n        });\r\n        item['eventValue'] = text;\r\n        box.appendChild(item);\r\n        return item;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n}\r\n","import {Control} from '../../Control';\r\nimport BridgeElement from '../../BridgeElement';\r\nimport Data from '../../Data';\r\nimport {Util} from '../../util';\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Table extends Control {\r\n    protected items: BridgeElement[] = [];\r\n    private columns: Column[] = [];\r\n    private cells: Object = {};\r\n    private $bodysection: HTMLTableSectionElement;\r\n    private $headersection: HTMLTableSectionElement;\r\n    private showedItems: Array<BridgeElement> = [];\r\n    // BridgeElements:\r\n    private itemsIds: Object = {};\r\n    private countElement: HTMLElement;\r\n    private countColumn: HTMLElement;\r\n    private countColumnPos: number;\r\n    private resultColumn: string;\r\n    private lastSearchText: string;\r\n    private searchColumns: Array<string> = [];\r\n    private searchText: Array<string> = [];\r\n    private sortColumn: Column;\r\n    private direction: number;\r\n    private moveElement: Column = null;\r\n    private isDrag: boolean = false;\r\n    private moveTimeStamp: number;\r\n    private moveX: number;\r\n    private movePos: number;\r\n    private dragColumn: Column;\r\n    private dragPos: number;\r\n    private tableOption: HTMLTableHeaderCellElement;\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    private static indexOfChild(item: BridgeElement) {\r\n        let i: number = 0;\r\n        let child: Node = item.gui;\r\n        while ((child = child.previousSibling) !== null) {\r\n            i++;\r\n        }\r\n        return i;\r\n    }\r\n\r\n    public load(data: any): void {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n            if (data.property) {\r\n                this.property = data.property;\r\n            }\r\n\r\n            if (data.searchColumns) {\r\n                let search: Array<string> = [];\r\n                if (typeof(data.searchColumns) === 'string') {\r\n                    search = data.searchColumns.split(' ');\r\n                } else {\r\n                    search = data.searchColumns;\r\n                }\r\n                for (let z: number = 0; z < search.length; z++) {\r\n                    let item = search[z].trim();\r\n                    if (item.length > 0) {\r\n                        if (this.searchColumns.indexOf(item) < 0) {\r\n                            this.searchColumns.push(item);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        if (this.$view) {\r\n            // Must be an Update\r\n            if (data['columns']) {\r\n                // It is a json must add all things and generate HTML\r\n                for (let i in data['columns']) {\r\n                    if (data['columns'].hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    let col = this.parseData(data['columns'][i]);\r\n                    this.addHeaderInfo(col);\r\n                    this.columns.push(col);\r\n                    this.tableOption.parentElement.insertBefore(col.$element, this.tableOption);\r\n                }\r\n                for (let i in this.showedItems) {\r\n                    let item: BridgeElement = this.showedItems[i];\r\n                    let cell;\r\n                    // Now Add some Children\r\n                    while (item.gui.children.length < this.columns.length) {\r\n                        cell = document.createElement('td');\r\n                        item.gui.appendChild(cell);\r\n                    }\r\n                    // Now Remove Some Children\r\n                    while (item.gui.children.length > this.columns.length) {\r\n                        item.gui.removeChild(item.gui.children[item.gui.children.length - 1]);\r\n                    }\r\n                    for (let c: number = 0; c < this.columns.length; c++) {\r\n                        let name = this.columns[c].attribute;\r\n                        // let count = this.columns.length;\r\n                        cell = item.gui.children[c];\r\n                        cell.innerHTML = item.model.getValue(name);\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n\r\n        this.$view = document.getElementById(id);\r\n        let headerrow: HTMLTableRowElement;\r\n        if (this.$view) {\r\n            if (!this.property) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('table');\r\n            this.$owner.appendChild(this);\r\n        }\r\n        if (!this.$bodysection) {\r\n            // add tbody element if missing\r\n            this.$bodysection = document.createElement('tbody');\r\n            this.$view.appendChild(this.$bodysection);\r\n        }\r\n        if (data['classname']) {\r\n            this.$view.className = data['classname'];\r\n        } else {\r\n            this.$view.className = 'mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp';\r\n        }\r\n\r\n        this.id = id;\r\n        this.$view.id = id;\r\n        this.$view.setAttribute('type', this.constructor['name'].toLowerCase());\r\n        let counter = 0;\r\n        for (let c = 0; c < this.$view.children.length; c++) {\r\n            let row: HTMLTableRowElement = <HTMLTableRowElement>this.$view.children[c];\r\n            if (row instanceof HTMLTableSectionElement) {\r\n                if (row.tagName === 'THEAD') {\r\n                    headerrow = row;\r\n                    // Its a thead\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingHeader(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                } else {\r\n                    // Its a tbody\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingData(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                }\r\n            } else {\r\n                // fallback, if there are no thead and tbody...\r\n                if (counter === 0) {\r\n                    headerrow = row;\r\n                    this.parsingHeader(row);\r\n                } else {\r\n                    this.parsingData(row);\r\n                }\r\n            }\r\n            counter++;\r\n        }\r\n        if (!headerrow || !this.$headersection) {\r\n            if (!this.$headersection) {\r\n                // find eventually existing thead\r\n                let header = this.$view.getElementsByTagName('thead');\r\n                if (header.length === 0) {\r\n                    this.$headersection = document.createElement('thead');\r\n                    this.$view.appendChild(this.$headersection);\r\n                } else {\r\n                    // take first thead element\r\n                    this.$headersection = <HTMLTableSectionElement>header.item(0);\r\n                }\r\n            }\r\n            if (!headerrow) {\r\n                headerrow = document.createElement('tr');\r\n                this.$headersection.appendChild(headerrow);\r\n            }\r\n        }\r\n\r\n        if (data['columns']) {\r\n            // It is a json must add all things and generate HTML\r\n            for (let i in data['columns']) {\r\n                if (data['columns'].hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                let col = this.parseData(data['columns'][i]);\r\n                this.addHeaderInfo(col);\r\n                this.columns.push(col);\r\n                headerrow.appendChild(col.$element);\r\n            }\r\n            this.tableOption = document.createElement('th');\r\n            this.tableOption.classList.add('tableOption');\r\n            headerrow.appendChild(this.tableOption);\r\n            let context: HTMLElement = this.addOptionItem(null, this.tableOption, true);\r\n            let contentChild: HTMLElement = this.addOptionItem('show', context, true);\r\n            // let simpleLink: HTMLElement = this.addOptionItem('show', contentChild, false);\r\n            this.addOptionItem('show', contentChild, false);\r\n        }\r\n        this.registerEvents(['mousemove', 'mousedown', 'mouseup', 'resize', 'dragstart', 'dragover', 'drop', 'dragend']);\r\n\r\n        // Check for SearchBar\r\n        // if(data[\"searchproperty\"]){\r\n        // Create Full Row\r\n        let searchBar = document.createElement('tr');\r\n        let cell = document.createElement('td');\r\n        cell.setAttribute('colspan', '' + (this.columns.length));\r\n        searchBar.appendChild(cell);\r\n\r\n        let search = document.createElement('input');\r\n        search.className = 'search';\r\n        let that = this;\r\n        search.addEventListener('keyup', function (evt) {\r\n            that.search(evt.target['value']);\r\n        });\r\n\r\n        cell.appendChild(search);\r\n        if (this.resultColumn) {\r\n            if (this.resultColumn.indexOf('#') !== 0) {\r\n                this.countElement = document.createElement('div');\r\n                searchBar.appendChild(this.countElement);\r\n            } else {\r\n                for (let z: number = 0; z < this.$headersection.children.length; z++) {\r\n                    if (this.$headersection.children[z].innerHTML === this.resultColumn) {\r\n                        this.countColumn = <HTMLElement> this.$headersection.children[z];\r\n                        this.countColumnPos = z;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        let first = this.$headersection.children.item(0);\r\n        this.$headersection.insertBefore(searchBar, first);\r\n\r\n        this.updateElement(this.property, null);\r\n\r\n        // now update those elements, that were not loaded currently\r\n    }\r\n\r\n    public tableEvent(type: string, e: Event) {\r\n        let button: number = 0;\r\n        let eventX: number = 0;\r\n        if (e instanceof MouseEvent) {\r\n            button = e.buttons;\r\n            eventX = e.pageX;\r\n        }\r\n        if (type === 'mouseup') {\r\n            this.moveElement = null;\r\n        } else if (type === 'mousedown' || type === 'resize') {\r\n            // End to Resize\r\n            this.moveElement = null;\r\n            if (button === 1) {\r\n                let c: number;\r\n                for (c = 0; c < this.columns.length; c++) {\r\n                    if (this.columns[c].$resize === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = false;\r\n                        break;\r\n                    } else if (this.columns[c].$element === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = true;\r\n                    }\r\n                }\r\n                this.moveTimeStamp = e.timeStamp;\r\n                this.moveX = eventX;\r\n            } else {\r\n                this.moveTimeStamp = 0;\r\n            }\r\n        } else if (type === 'mousemove') {\r\n            if (button === 1 && this.moveElement) {\r\n                if (this.moveTimeStamp && e.timeStamp - this.moveTimeStamp < 2000) {\r\n                    if (this.isDrag) {\r\n                        // FIXME\r\n                    } else {\r\n                        let x = eventX - this.moveX;\r\n                        let width = this.moveElement.$element.offsetWidth;\r\n                        this.moveElement.$element.width = '' + (width + x);\r\n                        e.stopPropagation();\r\n                    }\r\n                }\r\n                this.moveX = eventX;\r\n                this.moveTimeStamp = e.timeStamp;\r\n            }\r\n        } else if (this.isDrag) {\r\n            this.columnDragEvent(type, <DragEvent> e);\r\n        }\r\n    }\r\n\r\n    public parsingHeader(row: HTMLTableRowElement) {\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let column: HTMLTableHeaderCellElement = <HTMLTableHeaderCellElement>row.children[i];\r\n            let id = column.innerHTML.trim();\r\n            let col: Column = null;\r\n            for (let c in this.columns) {\r\n                if (this.columns.hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                if (this.columns[c].label === id) {\r\n                    col = this.columns[c];\r\n                    col.$element = column;\r\n                    break;\r\n                }\r\n            }\r\n            if (col === null) {\r\n                col = new Column();\r\n                col.label = id;\r\n                col.attribute = column.getAttribute('attribute');\r\n                col.$element = column;\r\n                this.columns.push(col);\r\n            }\r\n            this.addHeaderInfo(col);\r\n        }\r\n    }\r\n\r\n    public parsingData(row: HTMLTableRowElement) {\r\n        let id = row.getAttribute('id');\r\n        let item: Data = this.$owner.getItem(id);\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let cell: HTMLTableCellElement = <HTMLTableCellElement>row.children[i];\r\n            let colAttribute = this.columns[i].attribute;\r\n            if (colAttribute.indexOf('\\.') < 0) {\r\n                item[colAttribute] = cell.innerHTML.trim();\r\n            }\r\n        }\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: Object, newValue: Object) {\r\n        if (entity) {\r\n            // Check for Show\r\n            if (this.property && !entity.hasProperty(property)) {\r\n                return;\r\n            }\r\n        }\r\n        if (entity.id === undefined) {\r\n            return;\r\n        }\r\n        let item: BridgeElement = <BridgeElement>this.itemsIds[entity.id];\r\n        let row: HTMLTableRowElement;\r\n        if (!item) {\r\n            item = new BridgeElement(entity);\r\n            this.items.push(item);\r\n            this.itemsIds[entity.id] = item;\r\n        }\r\n        row = this.cells[entity.id];\r\n        if (row) {\r\n            item.gui = row;\r\n        }\r\n        if (this.searching(item) === false) {\r\n            return;\r\n        }\r\n        let cell;\r\n        let showItem = false;\r\n\r\n        if (!row) {\r\n            showItem = true;\r\n            row = document.createElement('tr');\r\n            let count = this.columns.length;\r\n            for (let i = 0; i < count; i++) {\r\n                cell = document.createElement('td');\r\n                row.appendChild(cell);\r\n            }\r\n            this.cells[entity.id] = row;\r\n            item.gui = row;\r\n        }\r\n        for (let c: number = 0; c < this.columns.length; c++) {\r\n            let name = this.columns[c].attribute;\r\n            if (name === property) {\r\n                cell = row.children[c];\r\n                cell.innerHTML = <string>newValue;\r\n            }\r\n        }\r\n        if (showItem) {\r\n            this.showItem(item, true);\r\n        }\r\n        // super.propertyChange(entity, property, newValue, oldValue);\r\n    }\r\n\r\n    public sort(column: Column) {\r\n        if (this.sortColumn === column) {\r\n            if (this.direction === 1) {\r\n                this.direction = -1;\r\n                column.$element.classList.remove('asc');\r\n                column.$element.classList.add('desc');\r\n            } else {\r\n                this.direction = 1;\r\n                column.$element.classList.remove('desc');\r\n                column.$element.classList.add('asc');\r\n            }\r\n        } else {\r\n            if (this.sortColumn !== null) {\r\n                this.sortColumn.$element.classList.remove('desc');\r\n                this.sortColumn.$element.classList.remove('asc');\r\n            }\r\n            this.sortColumn = column;\r\n            this.sortColumn.$element.classList.add('asc');\r\n            this.direction = 1;\r\n        }\r\n        let that = this;\r\n        let sort = function (a: BridgeElement, b: BridgeElement) {\r\n            return that.sorting(a, b);\r\n        };\r\n        this.showedItems.sort(sort);\r\n        let len: number = this.showedItems.length;\r\n        let body = this.$bodysection;\r\n        let i = 0;\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            if (i !== Table.indexOfChild(item)) {\r\n                break;\r\n            }\r\n            i = i + 1;\r\n        }\r\n        while (body.children.length > i) {\r\n            body.removeChild(body.children.item(body.children.length - 1));\r\n        }\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            body.appendChild(item.gui);\r\n            i = i + 1;\r\n        }\r\n\r\n        //      body.removeChild(item.gui);\r\n        //      body.remove\r\n    }\r\n\r\n    public sorting(a: BridgeElement, b: BridgeElement): number {\r\n        let path: string[] = this.sortColumn.attribute.split('.');\r\n        let itemA = a.model.prop;\r\n        let itemB = b.model.prop;\r\n        let check = this.sortColumn.attribute;\r\n        for (let p = 0; p < path.length; p++) {\r\n            check = path[p];\r\n            if (itemA[check]) {\r\n                itemA = itemA[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n            if (itemB[check]) {\r\n                itemB = itemB[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n        if (itemA !== itemB) {\r\n            if (this.direction === 1) {\r\n                return (itemA < itemB) ? -1 : 1;\r\n            }\r\n            return (itemA < itemB) ? 1 : -1;\r\n\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    // Searching\r\n    public search(origSearchText: string): void {\r\n        if (!origSearchText) {\r\n            origSearchText = '';\r\n        }\r\n        let searchText: string = origSearchText.trim().toLowerCase();\r\n        if (searchText === this.lastSearchText && searchText !== '') {\r\n            return; // <==== nothing to be done\r\n        }\r\n        let oldSearch: string = this.lastSearchText;\r\n        this.lastSearchText = searchText;\r\n\r\n        this.parseSearchArray();\r\n        if (searchText !== '' && oldSearch !== null && searchText.indexOf(oldSearch) >= 0 && searchText.indexOf('|') < 0) {\r\n            this.searchArray(this.showedItems);\r\n        } else {\r\n            this.searchSet(this.items);\r\n        }\r\n        this.refreshCounter();\r\n    }\r\n\r\n    public refreshCounter() {\r\n        if (this.countColumn) {\r\n            this.countColumn.innerHTML = this.columns[this.countColumnPos].label + ' (' + this.showedItems.length + ')';\r\n        }\r\n        // var countElement = document.getElementById('talkCount');\r\n        //  if (countElement) {\r\n        //     var txt = (this.showedItems.size() > 0 && searchText.length > 0 ) ? this.options.TEXT_SEARCHLIST : this.options.TEXT_SEARCHFULLLIST;\r\n        //     countElement.innerHTML = txt.replace(\"%LEN%\", this.root['children'].length).replace(\"%COUNT%\", this.showedItems.size()).replace(\"%SEARCH%\", origSearchText);\r\n        // }\r\n        // if (this.countColumn) {\r\n        //     this.countColu1mn.innerHTML = this.countColumn[\"label\"] + \" (\" + this.showedItems.size() + \")\";\r\n        // }\r\n    }\r\n\r\n    public parseSearchArray() {\r\n        let pos: number = 0;\r\n        let split: Array<string> = [];\r\n        let quote: boolean = false;\r\n        for (let i: number = 0; i < this.lastSearchText.length; i++) {\r\n            if ((this.lastSearchText.charAt(i) === ' ') && !quote) {\r\n                let txt = this.lastSearchText.substring(pos, i).trim();\r\n                if (txt.length > 0) {\r\n                    split.push(txt);\r\n                }\r\n                pos = i + 1;\r\n            } else if (this.lastSearchText.charAt(i) === '\\\"') {\r\n                if (quote) {\r\n                    let txt = this.lastSearchText.substring(pos, i).trim();\r\n                    if (txt.length > 0) {\r\n                        split.push(txt);\r\n                    }\r\n                    pos = i + 1;\r\n                } else {\r\n                    pos = i + 1;\r\n                }\r\n                quote = !quote;\r\n            }\r\n        }\r\n        if (pos < this.lastSearchText.length) {\r\n            split.push(this.lastSearchText.substring(pos, this.lastSearchText.length).trim());\r\n        }\r\n        this.searchText = split;\r\n        return split;\r\n    }\r\n\r\n    public searchArray(root: Array<BridgeElement>) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let i: number = 0; i < root.length; i++) {\r\n            let item: BridgeElement = root[i];\r\n            this.showItem(item, this.searching(item));\r\n        }\r\n    }\r\n\r\n    public searchSet(root: BridgeElement[]) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let item of root) {\r\n            let child: BridgeElement = <BridgeElement>item;\r\n            this.showItem(child, this.searching(child));\r\n        }\r\n    }\r\n\r\n    public showItem(item: BridgeElement, visible: boolean) {\r\n        if (visible) {\r\n            this.showedItems.push(item);\r\n            this.$bodysection.appendChild(item.gui);\r\n        } else if (item.gui && item.gui.parentElement) {\r\n            this.$bodysection.removeChild(item.gui);\r\n        }\r\n    }\r\n\r\n    public searching(item: BridgeElement): boolean {\r\n        let fullText: string = '';\r\n        for (let i: number = 0; i < this.searchColumns.length; i++) {\r\n            fullText = fullText + ' ' + item.model.getValue(this.searchColumns[i]);\r\n        }\r\n        fullText = fullText.trim().toLowerCase();\r\n        for (let z: number = 0; z < this.searchText.length; z++) {\r\n            if ('' !== this.searchText[z]) {\r\n                let orSplit: Array<string>;\r\n                if (this.searchText[z].indexOf('|') > 0) {\r\n                    orSplit = this.searchText[z].split('|');\r\n                } else {\r\n                    orSplit = [this.searchText[z]];\r\n                }\r\n                let o: number = 0;\r\n                for (; o < orSplit.length; o++) {\r\n                    let pos: number = orSplit[o].indexOf(':');\r\n                    if (orSplit[o].indexOf('#') === 0 && pos > 1) {\r\n                        // if (searchProperties.contains(propString)) {\r\n                        let value: string = orSplit[o].substring(pos + 1);\r\n                        let column: string = orSplit[o].substring(1, pos - 1);\r\n                        let dataValue: Object = item.model.getValue(column);\r\n                        if (dataValue) {\r\n                            if (dataValue.toString().toLowerCase().indexOf(value) >= 0) {\r\n                                // Search for simple Property\r\n                                break;\r\n                            }\r\n                        }\r\n                    } else if (orSplit[o].length > 1 && orSplit[o].indexOf('-') === 0) {\r\n                        if (fullText.indexOf(orSplit[o].substring(1)) < 0) {\r\n                            break;\r\n                        }\r\n                    } else if (fullText.indexOf(orSplit[o]) >= 0) {\r\n                        // his search word is found in full text\r\n                        break;\r\n                    }\r\n                }\r\n                if (o === orSplit.length) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public getColumn(): Column[] {\r\n        return this.columns;\r\n    }\r\n\r\n    public updateElement(property: string, value: string): void {\r\n        // first clear all elements inside the table:\r\n        for (let item of this.items) {\r\n            if (item instanceof BridgeElement) {\r\n                (<BridgeElement>item).model.removeListener(this);\r\n            }\r\n        }\r\n\r\n        this.items = [];\r\n        this.itemsIds = {};\r\n\r\n        // load all entitys that match the property\r\n        if (this.property !== undefined) {\r\n            let items = this.$owner.getItems();\r\n            for (let j in items) {\r\n                if (items.hasOwnProperty(j)) {\r\n                    let item = items[j];\r\n                    if (item instanceof Data) {\r\n                        if (property === j) {\r\n                            // if (property == item.property) {\r\n                            let i = new BridgeElement(<Data>item);\r\n                            this.items.push(i);\r\n                            this.itemsIds[item.id] = i;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            this.redrawAllElements();\r\n        }\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        if (this.$owner !== null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    protected redrawAllElements() {\r\n        let children: HTMLCollection = this.$bodysection.children;\r\n        // remove old children\r\n        for (let i = 0; i < children.length; i++) {\r\n            let child = children.item(i);\r\n            // remove child\r\n            this.$bodysection.removeChild(child);\r\n        }\r\n\r\n        // load new children\r\n        for (let obj of this.items) {\r\n            // register listeners\r\n            obj.model.addListener(this);\r\n            // create tr\r\n            let row = this.createRow(obj);\r\n            this.$bodysection.appendChild(row);\r\n            this.cells[obj.id] = row;\r\n        }\r\n    }\r\n\r\n    private parseData(column: any): Column {\r\n        let col = new Column();\r\n        col.label = column.label || column.id;\r\n        col.attribute = column.attribute || column.label || column.id;\r\n        col.$element = document.createElement('th');\r\n        col.$element.innerHTML = col.label;\r\n        col.$element.draggable = true;\r\n\r\n        // resize Header\r\n        col.$resize = document.createElement('div');\r\n        col.$resize.classList.add('resize');\r\n        col.$element.appendChild(col.$resize);\r\n\r\n        return col;\r\n    }\r\n\r\n    private createRow(data: BridgeElement): HTMLTableRowElement {\r\n        let tr: HTMLTableRowElement = document.createElement('tr');\r\n\r\n        for (let id of this.columns) {\r\n            let td: HTMLTableDataCellElement = document.createElement('td');\r\n            tr.appendChild(td);\r\n            td.innerHTML = data.model.getValue(id.attribute);\r\n        }\r\n        return tr;\r\n    }\r\n\r\n    private addHeaderInfo(col: Column) {\r\n        let element: HTMLTableCellElement = col.$element;\r\n        let that = this;\r\n        element.classList.add('sort');\r\n        element.addEventListener('click',\r\n            function () {\r\n                that.sort(col);\r\n            },\r\n            false);\r\n    }\r\n\r\n    private columnDragEvent(type: string, e: DragEvent) {\r\n        if (type === 'dragstart') {\r\n            // Target (this) element is the source node.\r\n            this.moveElement.$element.style.opacity = '0.4';\r\n            e.dataTransfer.effectAllowed = 'move';\r\n            e.dataTransfer.setData('text/json', JSON.stringify(Util.toJson(this.moveElement)));\r\n        } else if (type === 'dragenter') {\r\n            // TO Nothing\r\n        } else if (type === 'dragleave') {\r\n            this.moveElement.$element.classList.remove('over');\r\n        } else if (type === 'dragover') {\r\n            if (e.preventDefault) {\r\n                e.preventDefault(); // Necessary. Allows us to drop.\r\n            }\r\n            for (let c = 0; c < this.columns.length; c++) {\r\n                if (this.columns[c].$element === e.target) {\r\n                    this.dragColumn = this.columns[c];\r\n                    this.dragPos = c;\r\n                    this.columns[c].$element.classList.add('over');\r\n                } else {\r\n                    this.columns[c].$element.classList.remove('over');\r\n                }\r\n            }\r\n            if (e.target === this.tableOption) {\r\n                this.tableOption.classList.add('over');\r\n                this.dragPos = this.columns.length;\r\n            } else {\r\n                this.tableOption.classList.remove('over');\r\n            }\r\n            e.dataTransfer.dropEffect = 'move';  // See the section on the DataTransfer object.\r\n        } else if (type === 'drop') {\r\n            // this / e.target is current target element.\r\n            if (e.stopPropagation) {\r\n                e.stopPropagation(); // stops the browser from redirecting.\r\n            }\r\n            if (this.movePos === this.dragPos) {\r\n                return;\r\n            }\r\n            // movePos -> dragPos\r\n            // See the section on the DataTransfer object.\r\n            // DataModel\r\n            this.columns.splice(this.movePos, 1);\r\n            if (this.movePos >= this.dragPos) {\r\n                this.columns.splice(this.dragPos, 0, this.moveElement);\r\n            } else {\r\n                this.columns.splice(this.dragPos - 1, 0, this.moveElement);\r\n            }\r\n\r\n            // Header Line\r\n            let line: HTMLElement = this.moveElement.$element.parentElement;\r\n            line.removeChild(this.moveElement.$element);\r\n            if (this.dragPos < this.columns.length) {\r\n                line.insertBefore(this.moveElement.$element, this.dragColumn.$element);\r\n            } else {\r\n                line.insertBefore(this.moveElement.$element, this.tableOption);\r\n            }\r\n\r\n            let oldElement: Element;\r\n            let newElement: Element;\r\n\r\n            // Now all Childs\r\n            for (let i = 0; i < this.$bodysection.children.length; i++) {\r\n                // Each line\r\n                line = <HTMLElement>this.$bodysection.children.item(i);\r\n                oldElement = line.children.item(this.movePos);\r\n                newElement = line.children.item(this.dragPos);\r\n                line.removeChild(oldElement);\r\n                line.insertBefore(oldElement, newElement);\r\n            }\r\n        } else if (type === 'dragend') {\r\n            // this/e.target is the source node.\r\n            this.moveElement.$element.style.opacity = '1';\r\n            for (let i = 0; i < this.columns.length; i++) {\r\n                this.columns[i].$element.classList.remove('over');\r\n            }\r\n            this.tableOption.classList.remove('over');\r\n        }\r\n    }\r\n\r\n    private addOptionItem(label: string, parent: HTMLElement, sub: boolean): HTMLElement {\r\n        let labelControl;\r\n        if (label) {\r\n            labelControl = document.createElement('a');\r\n            labelControl.appendChild(document.createTextNode(label));\r\n            labelControl.href = 'javascript:void(0);';\r\n            parent.appendChild(labelControl);\r\n        }\r\n        if (sub) {\r\n            let context = document.createElement('div');\r\n            context.classList.add('dropdown-content');\r\n            context.style.setProperty('position', 'absolute');\r\n            parent.appendChild(context);\r\n\r\n            /* When the user clicks on the button,\r\n             toggle between hiding and showing the dropdown content */\r\n            parent.addEventListener(\r\n                'click',\r\n                function () {\r\n                    context.classList.toggle('show');\r\n                },\r\n                false);\r\n            return context;\r\n        }\r\n        return labelControl;\r\n    }\r\n\r\n    private registerEvents(events: string[]) {\r\n        let that = this;\r\n        for (let i = 0; i < events.length; i++) {\r\n            this.$view.addEventListener(events[i], function (evt) {\r\n                return that.tableEvent(events[i], evt);\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\nclass Column {\r\n    label: string;\r\n    attribute: string;\r\n    $element: HTMLTableHeaderCellElement;\r\n    $resize: HTMLDivElement;\r\n    visible: boolean;\r\n}\r\n","import { AutoComplete } from './AutoComplete';\r\nimport { BR } from './BR';\r\nimport { Div } from './Div';\r\nimport { Label } from './Label';\r\n\r\nexport * from './Node';\r\nexport * from './Class';\r\nexport * from './SO';\r\nexport * from './Symbol';\r\n\r\nexport * from './BR';\r\nexport * from './Button';\r\nexport * from './Div';\r\nexport * from './Form';\r\nexport * from './Input';\r\nexport * from './Label';\r\nexport * from './Table';\r\nexport * from './HTML';\r\nexport * from './Dice';\r\nexport * from './AutoComplete';\r\nexport * from './Attribute';\r\nexport * from './Method';\r\nexport * from './ClazzProperty';\r\n\r\nnew AutoComplete();\r\nnew BR();\r\nnew Div();\r\nnew Label();\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class AddNode implements EventHandler {\r\n\r\n    public MIN_SIZE_TO_ADD_NODE: number = 30;\r\n    public MIN_SIZE_TO_ADD_TEXT: number = 10;\r\n    private graph: Graph;\r\n    private svgRect: SVGSVGElement;\r\n    private svgGroupAddNode: SVGSVGElement;\r\n    private svgTextAddNode: SVGSVGElement;\r\n    private svgTextRectAddNode: SVGSVGElement;\r\n    private isRectDrawing: boolean;\r\n    private isDrawToLeft: boolean;\r\n    private isDrawToTop: boolean;\r\n    private isBigEnoughForAddNode: boolean;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(AddNode.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(AddNode.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!this.canHandle()) {\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element.id !== 'RootElement') {\r\n            return false;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element.id === 'RootElement') {\r\n                    this.start(event, element);\r\n\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mousemove':\r\n                this.drawRect(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.removeRect();\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.addNode();\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawRect(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isRectDrawing) {\r\n            return;\r\n        }\r\n\r\n        evt.stopPropagation();\r\n\r\n        let width = Util.getEventX(evt) - this.x;\r\n        let height = Util.getEventY(evt) - this.y;\r\n\r\n        // rectangle is in a negative area, drawn to upper case. not possibble with svg\r\n        if (width < 0) {\r\n            this.isDrawToLeft = true;\r\n            width *= -1;\r\n        } else {\r\n            this.isDrawToLeft = false;\r\n        }\r\n\r\n        if (height < 0) {\r\n            this.isDrawToTop = true;\r\n            height *= -1;\r\n        } else {\r\n            this.isDrawToTop = false;\r\n        }\r\n\r\n        if (width > this.MIN_SIZE_TO_ADD_NODE && height > this.MIN_SIZE_TO_ADD_NODE) {\r\n            this.isBigEnoughForAddNode = true;\r\n        } else {\r\n            this.isBigEnoughForAddNode = false;\r\n        }\r\n\r\n        this.graph.root.style.cursor = 'pointer';\r\n\r\n        // if line wasnt draw\r\n        if (!this.svgRect) {\r\n\r\n            let rectAddNode = Util.createShape({\r\n                tag: 'rect',\r\n                id: 'addNodeRect',\r\n                x: this.x,\r\n                y: this.y,\r\n                width: 1,\r\n                height: 1,\r\n                class: 'SVGAddNode'\r\n            });\r\n\r\n            let group = Util.createShape({ tag: 'g', id: 'groupAddNode' });\r\n            group.appendChild(rectAddNode);\r\n\r\n            this.graph.root.appendChild(group);\r\n            this.svgRect = rectAddNode;\r\n            this.svgGroupAddNode = group;\r\n        }\r\n        else {\r\n\r\n            let svgRectBBox = this.svgRect.getBBox();\r\n\r\n            // if rect is big enough, show text as helper\r\n            if ((svgRectBBox.width > this.MIN_SIZE_TO_ADD_TEXT\r\n                || svgRectBBox.height > this.MIN_SIZE_TO_ADD_TEXT) && !this.svgTextAddNode) {\r\n\r\n                let textAddNode = Util.createShape({\r\n                    tag: 'text',\r\n                    x: this.x,\r\n                    y: this.y - 5,\r\n                    'font-family': 'Verdana',\r\n                    'font-size': 12,\r\n                    fill: 'black'\r\n                });\r\n                textAddNode.textContent = 'Hold on and move to create a new class';\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n\r\n\r\n                // get correct size of text node\r\n                let sizeClientRect: ClientRect = textAddNode.getBoundingClientRect();\r\n\r\n                let rectBackgroundForText = Util.createShape({\r\n                    tag: 'rect',\r\n                    x: this.x,\r\n                    y: this.y - sizeClientRect.height,\r\n                    width: sizeClientRect.width,\r\n                    height: sizeClientRect.height,\r\n                    fill: '#DDD',\r\n                    'stroke-width': 0\r\n                });\r\n\r\n                this.svgTextRectAddNode = rectBackgroundForText;\r\n                this.svgTextAddNode = textAddNode;\r\n                this.svgGroupAddNode.appendChild(rectBackgroundForText);\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n            }\r\n\r\n            if (this.isDrawToLeft) {\r\n                this.svgRect.setAttributeNS(null, 'x', '' + Util.getEventX(evt));\r\n            }\r\n\r\n            if (this.isDrawToTop) {\r\n                this.svgRect.setAttributeNS(null, 'y', '' + Util.getEventY(evt));\r\n            }\r\n\r\n            // set width and height\r\n            this.svgRect.setAttributeNS(null, 'width', width.toString());\r\n            this.svgRect.setAttributeNS(null, 'height', height.toString());\r\n\r\n            // set color\r\n            if (this.isBigEnoughForAddNode) {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode-ready');\r\n\r\n                // draw text\r\n            }\r\n            else {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeRect(): void {\r\n        this.isRectDrawing = false;\r\n        this.isBigEnoughForAddNode = false;\r\n\r\n        this.graph.root.style.cursor = 'default';\r\n\r\n        if (this.svgGroupAddNode) {\r\n            this.graph.root.removeChild(this.svgGroupAddNode);\r\n            this.svgGroupAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgRect) {\r\n            this.svgRect = undefined;\r\n        }\r\n\r\n        if (this.svgTextAddNode) {\r\n            this.svgTextAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgTextRectAddNode) {\r\n            this.svgTextRectAddNode = undefined;\r\n        }\r\n    }\r\n\r\n    private addNode(): void {\r\n\r\n        if (!this.isBigEnoughForAddNode) {\r\n            this.removeRect();\r\n            return;\r\n        }\r\n\r\n        this.removeRect();\r\n        let node = this.graph.addElementWithValues('Class', { x: this.x, y: this.y });\r\n        this.graph.drawElement(node);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isRectDrawing) {\r\n            return;\r\n        }\r\n        this.isRectDrawing = true;\r\n\r\n        this.x = Util.getEventX(evt);\r\n        this.y = Util.getEventY(evt);\r\n    }\r\n\r\n}\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement, Point } from '../elements/BaseElements';\r\nimport { GraphModel } from '../elements/Model';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Control } from '../Control';\r\nimport { Util } from '../util';\r\n\r\nexport class Drag implements EventHandler {\r\n\r\n    private element: DiagramElement;\r\n    private svgElement: SVGSVGElement;\r\n    private dragging = false;\r\n    private reinsert = false;\r\n    private mouseOffset = new Point();\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        if (!this.canHandle()) {\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if ((!this.dragging) && (element.id !== 'RootElement')) {\r\n                    this.element = element;\r\n                    this.svgElement = <SVGSVGElement>element.$view;\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mouseup':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n\r\n                break;\r\n            case 'mousemove':\r\n                if (this.dragging) {\r\n                    this.drag(event, element);\r\n                }\r\n                break;\r\n            case 'mouseleave':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Drag.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Drag.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private reset() {\r\n        this.dragging = false;\r\n        this.svgElement.style.cursor = 'pointer';\r\n\r\n        /*  WORKAROUND\r\n            Chrome got problem with the Node.appendChild() method.\r\n            Sometimes it works, sometimes not.\r\n            So the background is, in the drag method will the current element be appended\r\n            to front of the svg root.\r\n            If this happend, the click event won't fire.\r\n            So it will be fired manually.\r\n            This problem occurs only in chrome.\r\n        */\r\n        if (Util.isChrome()) {\r\n            let clickEvt = Util.createCustomEvent('click');\r\n            this.svgElement.dispatchEvent(clickEvt);\r\n        }\r\n    }\r\n\r\n    private start(evt: Event | any, element: Control) {\r\n\r\n        this.dragging = true;\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n        this.reinsert = true;\r\n\r\n        this.svgElement.style.cursor = 'move';\r\n    }\r\n\r\n    private drag(evt: Event | any, element: DiagramElement) {\r\n\r\n        if (this.reinsert) {\r\n            if (this.element.id !== 'RootElement') {\r\n                // nesseccary to set the dragged object on top of svg children\r\n                this.graph.root.appendChild(this.svgElement);\r\n            }\r\n\r\n            let dragEvent = Util.createCustomEvent('drag');\r\n            element.$view.dispatchEvent(dragEvent);\r\n        }\r\n        this.reinsert = false;\r\n\r\n        evt.stopPropagation();\r\n\r\n        const translation = this.svgElement.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        const sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        const transX = sx + evt.clientX - this.mouseOffset.x;\r\n        const transY = sy + evt.clientY - this.mouseOffset.y;\r\n        this.svgElement.setAttributeNS(null, 'transform', 'translate(' + transX + ' ' + transY + ')');\r\n        this.element.getPos().addNum(transX - sx, transY - sy);\r\n\r\n        if (this.element instanceof Node) {\r\n            (<Node>this.element).redrawEdges();\r\n        }\r\n\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n\r\n\r\n        // resize svg root\r\n        let maxX = this.element.getPos().x + this.element.getSize().x;\r\n        let maxY = this.element.getPos().y + this.element.getSize().y;\r\n\r\n        let domRectRoot = this.graph.root.getBoundingClientRect();\r\n        if(!domRectRoot){\r\n            return;\r\n        }\r\n\r\n        if(maxX > domRectRoot.width){\r\n            this.graph.root.setAttributeNS(null, 'width', '' + maxX);\r\n        }\r\n        \r\n        if(maxY > domRectRoot.height){\r\n            this.graph.root.setAttributeNS(null, 'height', '' + maxY);\r\n        }\r\n    }\r\n}\r\n","import PropertyChangeSupport from '../PropertyChangeSupport';\r\nimport Data from '../Data';\r\nimport {Adapter} from '../Adapter';\r\nimport ClazzProperty from '../elements/nodes/ClazzProperty';\r\n\r\nexport class GraphListener implements PropertyChangeSupport {\r\n    private $owner: ClazzProperty;\r\n\r\n    constructor(owner: ClazzProperty) {\r\n        this.$owner = owner;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        let adapter = this.$owner.getRoot().getAdapter();\r\n        if (adapter) {\r\n            // messages.add(\"{\\\"class\\\":\\\"de.uniks.networkparser.test.model.House\\\",\\\"id\\\":\\\"H1\\\",\\\"rem\\\":{\\\"floor\\\":4},\\\"upd\\\":{\\\"floor\\\":42}}\");\r\n            let myId =  this.$owner.$owner.getId();\r\n            if (myId && myId.length > 0) {\r\n                let pos = myId.indexOf(':');\r\n                if (pos > 0) {\r\n                    myId = myId.substring(0, pos).trim();\r\n                }\r\n            }\r\n            let myName = this.$owner.getName();\r\n            let remJson = {};\r\n            remJson[myName] = oldValue;\r\n            let updJson = {};\r\n            updJson[myName] = newValue;\r\n            let json = {};\r\n            json['id'] = myId;\r\n            json['rem'] = remJson;\r\n            json['upd'] = updJson;\r\n            let message = JSON.stringify(json);\r\n            (<Adapter> adapter).update(message);\r\n        }\r\n    }\r\n}\r\n","import {Graph} from '../elements/';\r\nimport {EventHandler, EventBus} from '../EventBus';\r\nimport {DiagramElement} from '../elements/';\r\nimport {Util} from '../util';\r\n\r\nexport class ImportFile implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(ImportFile.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(ImportFile.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        let type: string = typeof event;\r\n        if (type !== 'DragEvent') {\r\n            return false;\r\n        }\r\n        let evt: DragEvent = <DragEvent>event;\r\n        if (evt.type === 'dragover') {\r\n            this.handleDragOver(evt);\r\n        } else if (evt.type === 'dragleave') {\r\n            if (this.graph.$view !== evt.target) {\r\n                return false;\r\n            }\r\n            this.setBoardStyle('dragleave');\r\n        } else if (evt.type === 'drop') {\r\n            this.handleLoadFile(evt);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public setBoardStyle(typ: string): boolean {\r\n        let b = this.graph.$view;\r\n        Util.removeClass(b, 'Error');\r\n        Util.removeClass(b, 'Ok');\r\n        Util.removeClass(b, 'Add');\r\n        if (typ === 'dragleave') {\r\n            if (b['errorText']) {\r\n                b.removeChild(b['errorText']);\r\n                b['errorText'] = null;\r\n            }\r\n            return true;\r\n        }\r\n        Util.addClass(b, typ);\r\n        if (typ === 'Error') {\r\n            if (!b['errorText']) {\r\n                b['errorText'] = Util.create({tag: 'div', style: 'margin-top: 30%', value: 'NO TEXTFILE'});\r\n                b.appendChild(b['errorText']);\r\n            }\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private handleLoadFile(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n\r\n        let files = evt.dataTransfer.files; // FileList object.\r\n\r\n        if (files.length > 1) {\r\n            evt.dataTransfer.dropEffect = 'none';\r\n            return;\r\n        }\r\n\r\n        // files is a FileList of File objects. List some properties.\r\n        let reader  = new FileReader();\r\n        let output = [];\r\n        let htmlResult = '';\r\n        let that = this;\r\n        for (let i = 0, f; f = files[i]; i++) {\r\n            reader.onload = function(event) {\r\n                htmlResult = event.target['result'];\r\n                console.log('fileContent: ' + htmlResult);\r\n\r\n                // CHANGE TO INTERNAL OBJECT\r\n                if (that.graph) {\r\n                    that.graph.import(htmlResult);\r\n                }\r\n            };\r\n            reader.readAsText(f);\r\n        }\r\n        this.setBoardStyle('dragleave');\r\n    }\r\n\r\n    private handleDragOver(evt: DragEvent): void {\r\n        let error: boolean = true, n: string, f;\r\n        let files = evt.dataTransfer.files;\r\n        // process all File objects\r\n        if (files && files.length > 0) {\r\n            for (let i: number = 0; i < files.length; i += 1) {\r\n                f = files[i];\r\n                if (f.type.indexOf('text') === 0) {\r\n                    error = false;\r\n                } else if (f.type === '') {\r\n                    n = f.name.toLowerCase();\r\n                    if (n.indexOf('json', n.length - 4) !== -1) {\r\n                        error = false;\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            let items = evt.dataTransfer.items;\r\n            if (items && items.length > 0) {\r\n                for (let z = 0; z < items.length; z ++) {\r\n                    if (items[z].type === '' || items[z].type === 'text/plain') {\r\n                        error = false;\r\n                    }\r\n                }\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.\r\n        if (error) {\r\n            this.dragStyler(evt, 'Error');\r\n        } else if (evt.ctrlKey) {\r\n            this.dragStyler(evt, 'Add');\r\n        } else {\r\n            this.dragStyler(evt, 'Ok');\r\n        }\r\n        /* //evt.target['className'] += ' diagramLoadFile';\r\n        '//console.log('handDragOver');*/\r\n    }\r\n\r\n    private dragStyler(event: Event, typ: string) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n        this.setBoardStyle(typ);\r\n    }\r\n\r\n    private handleDragLeave(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n        evt.dataTransfer.dropEffect = 'link'; // Explicitly show this is a copy.\r\n        evt.target['className'] = 'diagram';\r\n        console.log('handDragLeave');\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Class } from '../elements/nodes/Class';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Association } from '../elements/index';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class NewEdge implements EventHandler {\r\n    private graph: Graph;\r\n    private svgLine: SVGSVGElement;\r\n    private isEdgeDrawing: boolean;\r\n    private sourceNode: Node;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    private lastTargetNode: Node;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(NewEdge.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(NewEdge.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!((<KeyboardEvent>event).ctrlKey || EventBus.isHandlerActiveOrFree('NewEdge', true))) {\r\n            this.removeLine();\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element instanceof Node) {\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n\r\n            case 'mousemove':\r\n                this.drawEdge(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.setNewEdgeToNode(event);\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default: break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawEdge(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        let lineToX = Util.getEventX(evt);\r\n        let lineToy = Util.getEventY(evt);\r\n\r\n        let path = `M${this.x} ${this.y} L${lineToX} ${lineToy}`;\r\n        // if line wasnt draw\r\n        if (!this.svgLine) {\r\n\r\n            let attr = {\r\n                tag: 'path',\r\n                id: 'newEdgePath',\r\n                d: path,\r\n                class: 'SVGEdge'\r\n            };\r\n\r\n            let shape = Util.createShape(attr);\r\n            this.svgLine = shape;\r\n\r\n            this.graph.root.appendChild(shape);\r\n            this.graph.root.appendChild(this.sourceNode.$view);\r\n        }\r\n        else {\r\n\r\n            // set new L path\r\n            this.svgLine.setAttributeNS(null, 'd', path);\r\n\r\n            // get node from position\r\n            let targetNode = this.graph.$graphModel.getNodeByPosition(Util.getEventX(evt), Util.getEventY(evt));\r\n\r\n            // if some targetnode is available, so highlight the node\r\n            if (targetNode) {\r\n\r\n                // reset the last one\r\n                if (this.lastTargetNode && this.lastTargetNode.id !== targetNode.id) {\r\n                    this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n                }\r\n\r\n                this.lastTargetNode = targetNode;\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz-drawedge');\r\n            }\r\n            else if (this.lastTargetNode) {\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeLine(): void {\r\n        this.isEdgeDrawing = false;\r\n\r\n        if (this.svgLine) {\r\n            this.graph.root.removeChild(this.svgLine);\r\n            this.svgLine = null;\r\n        }\r\n\r\n        if (this.lastTargetNode) {\r\n            this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n        }\r\n    }\r\n\r\n    private setNewEdgeToNode(event: Event | any): void {\r\n        // get node from position\r\n        let targetNode = this.graph.$graphModel\r\n            .getNodeByPosition(Util.getEventX(event), Util.getEventY(event));\r\n\r\n        if (!targetNode) {\r\n            this.removeLine();\r\n\r\n            return;\r\n        }\r\n\r\n        this.removeLine();\r\n        let edgeType = this.sourceNode.$defaulEdgeType || 'Association';\r\n\r\n        let jsonData = {\r\n            type: edgeType,\r\n            source: this.sourceNode.id,\r\n            target: targetNode.id\r\n        };\r\n\r\n        let newEdge = this.graph.$graphModel.addEdge(<any>jsonData, true);\r\n        this.graph.drawElement(newEdge);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        this.isEdgeDrawing = true;\r\n        this.sourceNode = element as Class;\r\n\r\n        this.x = this.sourceNode.getPos().x + (this.sourceNode.getSize().x / 2);\r\n        this.y = this.sourceNode.getPos().y + (this.sourceNode.getSize().y / 2);\r\n\r\n        // TODO: get this into util or select\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Node } from '../elements/nodes';\r\nimport { Association } from '../elements/edges';\r\nimport { Util } from '../util';\r\nimport { SymbolLibary } from '../elements/nodes/Symbol';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\nimport Attribute from '../elements/nodes/Attribute';\r\n\r\nexport class Select implements EventHandler {\r\n\r\n    private deleteShape: SVGSVGElement;\r\n    private addEdgeShape: SVGSVGElement;\r\n    private copyNodeShape: SVGSVGElement;\r\n    private graph: Graph;\r\n    private padding = 5;\r\n\r\n    private lastSelectedNode: Element;\r\n    private lastSelectedEdge: Element;\r\n\r\n    private isDragged: boolean;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.deleteShape = SymbolLibary.drawSVG({ type: 'Basket', background: true, id: 'trashcan', tooltip: 'Delete class' });\r\n        this.copyNodeShape = SymbolLibary.drawSVG({ type: 'Copynode', background: true, id: 'copyNode', tooltip: 'Copy class' });\r\n        this.addEdgeShape = SymbolLibary.drawSVG({ type: 'Edgeicon', background: true, id: 'addEdge', tooltip: 'Click and drag to connect this class' });\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        let x = Util.getEventX(event);\r\n        let y = Util.getEventY(event);\r\n\r\n        event.stopPropagation();\r\n        if (event.type === 'drag') {\r\n            this.isDragged = true;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            if (element instanceof Node) {\r\n                this.lastSelectedNode = <Element>element.$view;\r\n            }\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n        }\r\n\r\n        if (event.target['id'] === 'background' || element === this.graph.$graphModel) {\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let e = <Node>element;\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.graph.root.appendChild(this.addEdgeShape);\r\n            this.graph.root.appendChild(this.copyNodeShape);\r\n            this.graph.root.appendChild(element.$view);\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'visible');\r\n\r\n            let x = (e.getPos().x + e.getSize().x) + 5;\r\n            let y = e.getPos().y;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y + this.padding})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.copyNodeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 40 + this.padding})`);\r\n            this.copyNodeShape.onclick = (evt) => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let copyClass = (element).copy();\r\n                copyClass.withPos(nextFreePosition.x, nextFreePosition.y);\r\n                this.graph.drawElement(copyClass);\r\n            };\r\n\r\n            this.addEdgeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 80 + this.padding})`);\r\n            this.addEdgeShape.onmousedown = function () {\r\n                EventBus.setActiveHandler('NewEdge');\r\n                element.$view.dispatchEvent(Util.createCustomEvent('mousedown'));\r\n            };\r\n        }\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let clazz = <Node>element;\r\n\r\n            if (Util.isChrome()) {\r\n                if (this.lastSelectedNode && element.id === this.lastSelectedNode.id && !this.isDragged) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            this.isDragged = false;\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            this.lastSelectedNode = <Element>element.$view;\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete class');\r\n\r\n            // draw textbox to edit clazz in one line\r\n            let divInlineEdit = document.createElement('div');\r\n            divInlineEdit.id = 'inlineEdit';\r\n            divInlineEdit.style.position = 'absolute';\r\n            divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n            divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n            divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n            divInlineEdit.style.zIndex = '42';\r\n\r\n            let inputText = document.createElement('input');\r\n            inputText.type = 'text';\r\n            inputText.style.width = '100%';\r\n            inputText.placeholder = 'Add properties, edit label';\r\n\r\n            divInlineEdit.appendChild(inputText);\r\n            document.body.appendChild(divInlineEdit);\r\n\r\n            inputText.addEventListener('focusout', (evt) => {\r\n\r\n                if (Util.isChrome()) {\r\n                    // only if input is empty, remove the inline edit function\r\n                    if ((!inputText.value || inputText.value.length === 0) && (!this.lastSelectedNode || element.id !== this.lastSelectedNode.id)) {\r\n                        this.removeLastInlineEdit();\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                // only if input is empty, remove the inline edit function\r\n                if ((!inputText.value || inputText.value.length === 0)) {\r\n                    this.removeLastInlineEdit();\r\n                }\r\n            });\r\n\r\n            let g = this.graph;\r\n            let propertyTypes: string[] = ['boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'short', 'String', 'void'];\r\n            inputText.addEventListener('keydown', function (evt) {\r\n\r\n                let keyCode = (<any>evt).which;\r\n                let inputValue = <any>inputText.value;\r\n\r\n                if (Util.endsWith(inputValue, ':') && !document.getElementById('selectPropertyType')) {\r\n                    let selectType = document.createElement('select');\r\n                    selectType.id = 'selectPropertyType';\r\n                    selectType.style.width = '100%';\r\n\r\n                    for (let type of propertyTypes) {\r\n                        let selectOption = document.createElement('option');\r\n                        selectOption.value = type;\r\n                        selectOption.innerHTML = type;\r\n                        selectType.appendChild(selectOption);\r\n                    }\r\n\r\n                    selectType.addEventListener('change', function (evt) {\r\n                        let inputValueSplitted = inputValue.split(':');\r\n                        let selectedPropertyType = selectType.options[selectType.selectedIndex].value;\r\n\r\n                        if (inputValueSplitted.length >= 1) {\r\n                            inputText.value = inputValueSplitted[0].trim() + ' : ' + selectedPropertyType;\r\n                            inputText.focus();\r\n                        }\r\n                    });\r\n\r\n                    divInlineEdit.appendChild(selectType);\r\n                }\r\n                else if (!Util.includes(inputValue, ':')) {\r\n                    let selectType = document.getElementById('selectPropertyType');\r\n\r\n                    if (selectType) {\r\n                        selectType.remove();\r\n                    }\r\n                }\r\n\r\n                if (keyCode !== 13) {\r\n                    return;\r\n                }\r\n\r\n                // attribute\r\n                if ((Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) === false) {\r\n                    if (Util.includes(inputValue, ':')) {\r\n                        clazz.addAttribute(inputValue.trim());\r\n                        clazz.reDraw();\r\n                    } else if (Util.includes(inputValue, '=') ) {\r\n                        let attr: Attribute = null;\r\n                        let name = inputValue.substring(0, inputValue.indexOf('=')).trim();\r\n                        for (let child of clazz.getAttributes() ) {\r\n                            if ( name === child.getName()) {\r\n                                attr = child;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (attr) {\r\n                            attr.updateValue(inputValue.substring(inputValue.indexOf('=') + 1).trim());\r\n                        }\r\n                        clazz.reDraw();\r\n                    }\r\n                }\r\n\r\n                // method\r\n                else if (Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) {\r\n                    clazz.addMethod(inputValue.trim());\r\n                    clazz.reDraw();\r\n                }\r\n                // label\r\n                else if (inputValue.trim().split(' ').length === 1 && inputValue.trim().length > 0) {\r\n                    clazz.updateLabel(inputValue.trim());\r\n                }\r\n\r\n                // reset size\r\n                divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n                divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n                divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n\r\n                inputText.value = '';\r\n\r\n                // remove combobox to select type of property\r\n                let selectType = document.getElementById('selectPropertyType');\r\n\r\n                if (selectType) {\r\n                    selectType.remove();\r\n                }\r\n\r\n                // TODO: reload propertiespanel. not working!\r\n                // event wont dispatch\r\n                // let customEvt = Util.createCustomEvent(EventBus.RELOADPROPERTIES);\r\n                // element.$view.dispatchEvent(customEvt);\r\n            });\r\n\r\n            (<any>divInlineEdit.children[0]).focus();\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Association) {\r\n            this.graph.root.appendChild(element.$view);\r\n            this.graph.root.appendChild(element.$sNode.$view);\r\n            this.graph.root.appendChild(element.$tNode.$view);\r\n\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete edge');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            let edge = <Association>element;\r\n            this.lastSelectedEdge = edge.$view;\r\n\r\n            Util.addClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Select.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Select.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private setTooltipOfShape(shape: SVGSVGElement, tooltip: string): void {\r\n        if (!shape || !shape.hasChildNodes()) {\r\n            return;\r\n        }\r\n\r\n        let titleElement = <SVGSVGElement>shape.childNodes[0];\r\n        if (!titleElement || titleElement.tagName !== 'title') {\r\n            return;\r\n        }\r\n\r\n        titleElement.textContent = tooltip;\r\n    }\r\n\r\n    private resetLastSelectedElements() {\r\n        // reset the last one\r\n        if (this.lastSelectedNode) {\r\n            Util.removeClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.lastSelectedNode = undefined;\r\n        }\r\n\r\n        if (this.lastSelectedEdge) {\r\n            Util.removeClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n            this.lastSelectedEdge = undefined;\r\n        }\r\n\r\n        this.removeLastInlineEdit();\r\n    }\r\n\r\n    private removeLastInlineEdit(): void {\r\n        // remove last inline edit of clazz\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n\r\n            // its not supported in internet explorer\r\n            // lastInlineEdit.remove();\r\n        }\r\n    }\r\n\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\n\r\nexport class Zoom implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n    }\r\n\r\n    public handle(e: any, element: DiagramElement): boolean {\r\n        let delta = e.deltaY || e.wheelDeltaY || -e.wheelDelta;\r\n        let d = 1 + (delta / 1000);\r\n\r\n        let values = this.graph.root.getAttribute('viewBox').split(' ');\r\n        const newViewBox = `${values[0]} ${values[1]} ${parseInt(values[2]) * d} ${parseInt(values[3]) * d}`;\r\n        this.graph.root.setAttribute('viewBox', newViewBox);\r\n\r\n        e.preventDefault();\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Zoom.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Zoom.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n}\r\n","export * from './Drag';\r\nexport * from './Select';\r\nexport * from './Zoom';\r\nexport * from './NewEdge';\r\nexport * from './ImportFile';\r\nexport * from './AddNode';\r\n","import { Association } from '../elements/edges';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport Layout from './Layout';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\n\r\nexport class DagreLayout implements Layout {\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        if (!window['dagre']) {\r\n            return;\r\n        }\r\n        let model = graph.$graphModel;\r\n        let g = new window['dagre'].graphlib.Graph();\r\n\r\n        g.setGraph({ marginx: 100, marginy: 20 }).setDefaultEdgeLabel(function () {\r\n            return {};\r\n        });\r\n\r\n        for (let node of model.nodes) {\r\n            g.setNode(node.id, { width: node.getSize().x, height: node.getSize().y });\r\n        }\r\n\r\n        for (let edge of model.edges) {\r\n            g.setEdge(edge.$sNode.id, edge.$tNode.id);\r\n        }\r\n\r\n        window['dagre'].layout(g);\r\n\r\n        g.nodes().forEach(function (nodeId: string) {\r\n            for (let node of model.nodes) {\r\n                if (node.id === nodeId) {\r\n                    node.withPos(g.node(nodeId).x - g.node(nodeId).width / 2, g.node(nodeId).y - g.node(nodeId).height / 2);\r\n                }\r\n            }\r\n        });\r\n        g.edges().forEach(function (e: any) {\r\n            for (let edge of model.edges) {\r\n                if (edge.$sNode.id === e.v && edge.$tNode.id === e.w) {\r\n                    let size = g.edge(e).points.length;\r\n                    edge.clearPoints();\r\n                    for (let i = 0; i < size; i++) {\r\n                        let point: SVGPoint = g.edge(e).points[i];\r\n                        edge.addPoint(point.x, point.y);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n}\r\n","import {DiagramElement} from '../elements/BaseElements';\r\nimport Layout from './Layout';\r\nimport {Graph} from '../elements/Graph';\r\nimport {Association} from '../elements/edges/Association';\r\nimport {Node} from '../elements/nodes/Node';\r\nimport {Control} from '../Control';\r\n\r\nexport class LayoutGraphMin {\r\n    public nodes: Object = {};\r\n    public edges: Array<Object> = [];\r\n    public outEdges: Object = {};\r\n    public inEdges: Object = {};\r\n    public dummyNodes: Array<LayoutGraphNode> = [];\r\n    public dummyEdges: Object = {};\r\n    public count: number = 0;\r\n    public minRank: number = Number.POSITIVE_INFINITY;\r\n    public maxRank: number = 0;\r\n    public maxHeight: number = 0;\r\n    public maxWidth: number = 0;\r\n    public ranksep: number = 0;\r\n    public edgesLabel: Array<Object> = [];\r\n\r\n    public nodeCount(): number {\r\n        return this.count;\r\n    }\r\n\r\n    public node(id: string) {\r\n        return this.nodes[id];\r\n    }\r\n\r\n    public setNode(id: string, n: LayoutGraphNode) {\r\n        if (n && !this.nodes[id]) {\r\n            this.nodes[id] = n;\r\n            this.count = this.count + 1;\r\n        } else if (!n && this.nodes[id]) {\r\n            delete this.nodes[id];\r\n        }\r\n    }\r\n}\r\n\r\nexport class LayoutGraphNode {\r\n    public id: string;\r\n    public width: number;\r\n    public height: number;\r\n    public x: number;\r\n    public y: number;\r\n    public edgeObj: LayoutGraphEdge;\r\n    public rank: number;\r\n\r\n    constructor(id: string, width: number, height: number, x: number, y: number) {\r\n        this.id = id;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n\r\nexport class LayoutGraphEdge {\r\n    public source: string;\r\n    public target: string;\r\n}\r\n\r\n// \t\t\t\t######################################################### DagreGraph #########################################################\r\nexport class DagreLayoutMin implements Layout {\r\n    public static EDGE_KEY_DELIM = '\\x01';\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        let g, layoutNode, nodes, newEdge, edges;\r\n        let i, n, x, y, sId, tId, split = DagreLayoutMin.EDGE_KEY_DELIM;\r\n        let e: Association;\r\n\r\n        nodes = node['nodes'];\r\n        edges = node['edges'];\r\n        g = new LayoutGraphMin();\r\n\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            g.setNode(n.id, new LayoutGraphNode(n.id, n.getSize().x, n.getSize().y, n.getPos().x, n.getPos().y));\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            sId = this.getNodeId(e.$sNode);\r\n            tId = this.getNodeId(e.$tNode);\r\n            if (sId > tId) {\r\n                let tmp = tId;\r\n                tId = sId;\r\n                sId = tmp;\r\n            }\r\n            let idAB = sId + split + tId + split;\r\n            let idBA = tId + split + sId + split;\r\n            if (sId !== tId && g.edgesLabel.indexOf(idAB) < 0 && g.edgesLabel.indexOf(idBA) < 0) {\r\n                newEdge = {source: sId, target: tId, minlen: 1, weight: 1};\r\n                g.edges.push(newEdge);\r\n                g.edgesLabel.push(idAB);\r\n                // In Edges\r\n                if (!g.inEdges[tId]) {\r\n                    g.inEdges[tId] = [];\r\n                }\r\n                g.inEdges[tId].push(newEdge);\r\n\r\n                // Out Edges\r\n                if (!g.outEdges[sId]) {\r\n                    g.outEdges[sId] = [];\r\n                }\r\n                g.outEdges[sId].push(newEdge);\r\n            }\r\n        }\r\n        this.layouting(g);\r\n        // Set the layouting back\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            layoutNode = g.node(n.id);\r\n            x = n.getPos().x;\r\n            y = n.getPos().y;\r\n            if (x < 1 && y < 1) {\r\n                n.withPos(Math.ceil(layoutNode.x), Math.ceil(layoutNode.y));\r\n            }\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            // OBSOLETE method:  e.calc(graph.canvas);\r\n        }\r\n        graph.draw();\r\n    }\r\n\r\n    public getNodeId(node: Control): string {\r\n        if (node.$owner) {\r\n            return this.getNodeId(node.$owner) || node.id;\r\n        }\r\n        return node.id;\r\n    }\r\n\r\n    public layouting(g: LayoutGraphMin) {\r\n        this.longestPath(g);\r\n        this.normalizeRanks(g);\r\n        this.normalizeEdge(g);\r\n        // this.setSimpleOrder(g);\r\n        this.order(g);\r\n        g.ranksep = 25;\r\n        // remove Dummy\r\n        this.removeDummy(g);\r\n        this.position(g);\r\n    }\r\n\r\n    public setSimpleOrder(g: LayoutGraphMin) {\r\n        let i, n;\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            n.order = n.rank;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Applies heuristics to minimize edge crossings in the graph and sets the best\r\n     * order solution as an order attribute on each node.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Graph must be DAG\r\n     *    2. Graph nodes must be objects with a \"rank\" attribute\r\n     *    3. Graph edges must have the \"weight\" attribute\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Graph nodes will have an \"order\" attribute based on the results of the\r\n     *       algorithm.\r\n     */\r\n    public order(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        let visited = {};\r\n        let node, n, order, i;\r\n        for (i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (n in g.nodes) {\r\n            if (visited[n]) {\r\n                continue;\r\n            }\r\n            visited[n] = true;\r\n            node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank].push(n);\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                g.nodes[layering[order][n]].order = parseInt(n);\r\n            }\r\n        }\r\n        // Fix resolve conflict\r\n        for (order in layering) {\r\n            if (layering[order].length > 1) {\r\n                for (n in layering[order]) {\r\n                    if (layering[order].hasOwnProperty(n) === false) {\r\n                        continue;\r\n                    }\r\n                    let name = layering[order][n];\r\n                    let sum = 0;\r\n                    let weight = 1;\r\n                    let edges = g.dummyEdges[name];\r\n                    if (edges) {\r\n                        for (i in edges) {\r\n                            if (edges.hasOwnProperty(i) === false) {\r\n                                continue;\r\n                            }\r\n                            let edge = edges[i];\r\n                            let nodeU = g.node(edge.target);\r\n                            sum = sum + (edge.weight * nodeU.order);\r\n                            weight = weight + edge.weight;\r\n                        }\r\n                    }\r\n                    g.node(name).barycenter = sum / weight;\r\n                    g.node(name).weight = weight;\r\n                }\r\n            } else if (layering[order].length > 0) {\r\n                for (n in layering[order]) {\r\n                    let name = layering[order][n];\r\n                    g.node(name).barycenter = 1;\r\n                    g.node(name).weight = 1;\r\n                }\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                let node = g.nodes[layering[order][n]];\r\n                node.order = parseInt(n) + node.barycenter * node.weight;\r\n                if (isNaN(node.order)) {\r\n                    console.log('ERROR');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public removeDummy(g: LayoutGraphMin) {\r\n        for (let z in g.dummyNodes) {\r\n            let node = g.dummyNodes[z];\r\n            g.setNode(node.id, null);\r\n        }\r\n        g.dummyNodes = [];\r\n        g.dummyEdges = {};\r\n    }\r\n\r\n    /*\r\n     * Breaks any long edges in the graph into short segments that span 1 layer\r\n     * each. This operation is undoable with the denormalize function.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. The input graph is a DAG.\r\n     *    2. Each node in the graph has a \"rank\" property.\r\n     *\r\n     * Post-condition:\r\n     *\r\n     *    1. All edges in the graph have a length of 1.\r\n     *    2. Dummy nodes are added where edges have been split into segments.\r\n     *    3. The graph is augmented with a \"dummyChains\" attribute which contains\r\n     *       the first dummy in each chain of dummy nodes produced.\r\n     */\r\n    public normalizeEdge(g: LayoutGraphMin): void {\r\n        let i: number = 1;\r\n        for (let id in g.edges) {\r\n            let e: LayoutGraphEdge = <LayoutGraphEdge>g.edges[id];\r\n            let v: string = e.source;\r\n            let vRank = g.node(v).rank;\r\n            const w: string = e.target;\r\n            const wRank: number = g.node(w).rank;\r\n            let name: string;\r\n\r\n            if (wRank === vRank + 1) {\r\n                continue;\r\n            }\r\n\r\n            let dummy;\r\n            for (vRank = vRank + 1; vRank < wRank; ++vRank) {\r\n                name = '_d' + e.source + e.target + (i++);\r\n                let newEdge = {source: v, target: name, minlen: 1, weight: 1};\r\n                dummy = new LayoutGraphNode(name, 0, 0, 0, 0);\r\n                dummy.edgeObj = e;\r\n                dummy.rank = vRank;\r\n                // Dummy Edges\r\n                if (!g.dummyEdges[v]) {\r\n                    g.dummyEdges[v] = [];\r\n                }\r\n                g.dummyEdges[v].push(newEdge);\r\n\r\n                g.dummyNodes.push(dummy);\r\n                g.setNode(dummy.id, dummy);\r\n                v = name;\r\n            }\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Initializes ranks for the input graph using the longest path algorithm. This\r\n     * algorithm scales well and is fast in practice, it yields rather poor\r\n     * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\r\n     * ranks wide and leaving edges longer than necessary. However, due to its\r\n     * speed, this algorithm is good for getting an initial ranking that can be fed\r\n     * into other algorithms.\r\n     *\r\n     * This algorithm does not normalize layers because it will be used by other\r\n     * algorithms in most cases. If using this algorithm directly, be sure to\r\n     * run normalize at the end.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Input graph is a DAG.\r\n     *    2. Input graph node labels can be assigned properties.\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Each node will be assign an (unnormalized) \"rank\" property.\r\n     */\r\n    public longestPath(g: LayoutGraphMin) {\r\n        let i, n, visited = [];\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            visited.push(i);\r\n            n.rank = this.findAllPaths(g, n, 0, visited);\r\n            g.minRank = Math.min(g.minRank, n.rank);\r\n        }\r\n    }\r\n\r\n    public findAllPaths(g: LayoutGraphMin, n: Node, currentCost: number, path: Array<String>) {\r\n        let min: number = 0;\r\n        let id: string;\r\n        let z: number;\r\n        let target;\r\n        if (g.outEdges[n.id]) {\r\n            for (z = 0; z < g.outEdges[n.id].length; z++) {\r\n                id = g.outEdges[n.id][z].target;\r\n                target = g.nodes[id];\r\n                if (path[id]) {\r\n                    min = Math.min(min, target.rank);\r\n                } else if (path.indexOf(id) < 0) {\r\n                    min = Math.min(min, this.findAllPaths(g, target, currentCost - 2, path));\r\n                } else {\r\n                    min = currentCost;\r\n                }\r\n            }\r\n            return min;\r\n        }\r\n        return currentCost;\r\n    }\r\n\r\n    /*\r\n     * Adjusts the ranks for all nodes in the graph such that all nodes v have\r\n     * rank(v) >= 0 and at least one node w has rank(w) = 0.\r\n     */\r\n    public normalizeRanks(g: LayoutGraphMin) {\r\n        let min = g.minRank;\r\n        let value;\r\n        g.maxRank = Number.NEGATIVE_INFINITY;\r\n        g.maxHeight = 0;\r\n        g.maxWidth = 0;\r\n        for (let i in g.nodes) {\r\n            let node = g.nodes[i];\r\n            if (node.rank !== undefined) {\r\n                node.rank -= min;\r\n                value = Math.abs(node.rank);\r\n                if (value > g.maxRank) {\r\n                    g.maxRank = value;\r\n                }\r\n                g.maxHeight = Math.max(g.maxHeight, node.height);\r\n                g.maxWidth = Math.max(g.maxWidth, node.width);\r\n            }\r\n        }\r\n    }\r\n\r\n    public position(g: LayoutGraphMin) {\r\n        this.positionY(g);\r\n        let list = this.positionX(g);\r\n        for (let i in list) {\r\n            for (let pos in list[i]) {\r\n                if (list[i].hasOwnProperty(pos) === false) {\r\n                    continue;\r\n                }\r\n                if (g.node(list[i][pos])) {\r\n                    g.node(list[i][pos]).x = parseInt(pos) * g.maxWidth;\r\n                }\r\n            }\r\n\r\n        }\r\n    }\r\n\r\n    public positionY(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        let rankSep = g.ranksep;\r\n        let prevY = 0;\r\n        for (let layer in layering) {\r\n            let maxHeight = g.maxHeight;\r\n            for (let v in layering[layer]) {\r\n                if (layering[layer].hasOwnProperty(v) === false) {\r\n                    continue;\r\n                }\r\n                let id = layering[layer][v];\r\n                g.nodes[id].y = prevY + maxHeight / 2;\r\n            }\r\n            prevY += maxHeight + rankSep;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\r\n     * function will produce a matrix with the ids of each node.\r\n     */\r\n    public buildLayerMatrix(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        for (let i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (let n in g.nodes) {\r\n            let node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank][node.order] = n;\r\n            }\r\n        }\r\n        return layering;\r\n    }\r\n\r\n    public positionX(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        return layering;\r\n    }\r\n}\r\n","import { Point } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport Layout from './Layout';\r\n\r\nexport class Random implements Layout {\r\n\r\n  public layout(graph: Graph) {\r\n\r\n    let model = graph.$graphModel;\r\n\r\n    if (model.nodes) {\r\n      for (let node of model.nodes) {\r\n        let pos: Point = node.getPos();\r\n        if (pos.x === 0 && pos.y === 0) {\r\n          let x = Util.getRandomInt(0, graph.canvasSize.width);\r\n          let y = Util.getRandomInt(0, graph.canvasSize.height);\r\n          node.withPos(x, y);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","export * from './DagreLayout';\r\nexport * from './Random';\r\nexport * from './DagreLayoutMin';\r\n\r\nimport {DagreLayout} from './DagreLayout';\r\nimport {DagreLayoutMin} from './DagreLayoutMin';\r\nimport {Random} from './Random';\r\nnew DagreLayout();\r\nnew DagreLayoutMin();\r\nnew Random();\r\n","import {VirtualKeyBoard} from './VirtualKeyBoard';\r\n\r\nexport {Point} from './elements/BaseElements';\r\nexport {Bridge, DelegateAdapter} from './Bridge';\r\nexport {Graph} from './elements/Graph';\r\nexport * from './elements/nodes';\r\nexport * from './elements/edges';\r\nexport * from './adapters';\r\nexport * from './UML';\r\nimport {Point} from './elements/BaseElements';\r\nimport {Graph} from './elements/Graph';\r\nimport {ClassEditor} from './elements/ClassEditor';\r\nimport {Bridge} from './Bridge';\r\nimport {Util} from './util';\r\nimport * as nodes  from './elements/nodes';\r\nimport * as edges from './elements/edges';\r\nimport {ScrumBoard} from './ScrumBoard';\r\n\r\nif (!window['Point']) {\r\n    window['Point'] = Point;\r\n    window['Graph'] = Graph;\r\n    window['bridge'] = new Bridge();\r\n    window['Util'] = Util;\r\n    window['Class'] = nodes.Class;\r\n    window['Association'] = edges.Association;\r\n    window['SymbolLibary'] = nodes.SymbolLibary;\r\n    window['ClassEditor'] = ClassEditor;\r\n    window['VirtualKeyBoard'] = VirtualKeyBoard;\r\n    window['ScrumBoard'] = ScrumBoard;\r\n}\r\n","'use strict';\r\nimport { CSS } from './CSS';\r\nimport { Node } from './elements/nodes/Node';\r\nimport { DiagramElement, Point } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport class Util {\r\n\r\n    public static isAutoSave: boolean;\r\n\r\n    static getRandomInt(min: number, max: number): number {\r\n        return Math.floor(Math.random() * (max - min + 1)) + min;\r\n    }\r\n\r\n    static createShape(attrs: any): SVGSVGElement {\r\n        let xmlns = attrs.xmlns || 'http://www.w3.org/2000/svg';\r\n        let shape = document.createElementNS(xmlns, attrs.tag);\r\n\r\n        for (let attr in attrs) {\r\n            if (!attrs.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr !== 'tag') {\r\n                shape.setAttribute(attr, attrs[attr]);\r\n\r\n            }\r\n        }\r\n        return <SVGSVGElement><any>shape;\r\n    }\r\n\r\n    static toPascalCase(value: string): string {\r\n        value = value.charAt(0).toUpperCase() + value.substring(1).toLowerCase();\r\n        return value;\r\n    }\r\n\r\n    static isSVG(tag: string): boolean {\r\n        let i,\r\n            list = ['svg', 'path', 'polygon', 'polyline', 'line', 'title', 'rect', 'filter', 'feGaussianBlur', 'feOffset', 'feBlend', 'linearGradient', 'stop', 'text', 'symbol', 'textPath', 'defs', 'fegaussianblur', 'feoffset', 'feblend', 'circle', 'ellipse', 'g'];\r\n        for (i = 0; i < list.length; i += 1) {\r\n            if (list[i] === tag) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    static createHTML(node: any): HTMLElement {\r\n        return <HTMLElement>this.create(node);\r\n    }\r\n    static create(node: any): Element {\r\n        let style, item, xmlns, key, tag, k;\r\n        if (document.createElementNS && (this.isSVG(node.tag) || node.xmlns)) {\r\n            if (node.xmlns) {\r\n                xmlns = node.xmlns;\r\n            } else {\r\n                xmlns = 'http://www.w3.org/2000/svg';\r\n            }\r\n            if (node.tag === 'img' && xmlns) {\r\n                item = document.createElementNS(xmlns, 'image');\r\n                item.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\r\n                item.setAttributeNS('http://www.w3.org/1999/xlink', 'href', node.src);\r\n            } else {\r\n                item = document.createElementNS(xmlns, node.tag);\r\n            }\r\n        } else {\r\n            item = document.createElement(node.tag);\r\n        }\r\n        tag = node.tag.toLowerCase();\r\n        for (key in node) {\r\n            if (!node.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            k = key.toLowerCase();\r\n            if (node[key] === null) {\r\n                continue;\r\n            }\r\n            if (k === 'tag' || k.charAt(0) === '$' || k === '$graphModel') {\r\n                continue;\r\n            }\r\n            if (k.charAt(0) === '#') {\r\n                item[k.substring(1)] = node[key];\r\n                continue;\r\n            }\r\n            if (k === 'rotate') {\r\n                item.setAttribute('transform', 'rotate(' + node[key] + ',' + node.$graphModel.x + ',' + node.$graphModel.y + ')');\r\n                continue;\r\n            }\r\n            if (k === 'value') {\r\n                if (!node[key]) {\r\n                    continue;\r\n                }\r\n                if (tag !== 'input') {\r\n                    if (tag === 'text') {// SVG\r\n                        item.appendChild(document.createTextNode(node[key]));\r\n                    } else {\r\n                        item.innerHTML = node[key];\r\n                    }\r\n                } else {\r\n                    item[key] = node[key];\r\n                }\r\n                continue;\r\n            }\r\n            if (k.indexOf('on') === 0) {\r\n                this.bind(item, k.substring(2), node[key]);\r\n                continue;\r\n            }\r\n            if (k.indexOf('-') >= 0) {\r\n                item.style[key] = node[key];\r\n            } else {\r\n                if (k === 'style' && typeof (node[key]) === 'object') {\r\n                    for (style in node[key]) {\r\n                        if (!node[key].hasOwnProperty(style)) {\r\n                            continue;\r\n                        }\r\n                        if (node[key][style]) {\r\n                            if ('transform' === style) {\r\n                                item.style.transform = node[key][style];\r\n                                item.style.msTransform = item.style.MozTransform = item.style.WebkitTransform = item.style.OTransform = node[key][style];\r\n                            } else {\r\n                                item.style[style] = node[key][style];\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    item.setAttribute(key, node[key]);\r\n                }\r\n            }\r\n        }\r\n        if (node.$parent) {\r\n            node.$parent.appendChild(item);\r\n        }\r\n        if (node.$graphModel) {\r\n            item.$graphModel = node.$graphModel;\r\n        }\r\n        return item;\r\n    }\r\n\r\n    static setSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttribute('width', value);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.setAttribute('height', value);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setAttributeSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttributeNS(null, 'width', value);\r\n        value = Util.getValue(height);\r\n        item.setAttributeNS(null, 'height', value);\r\n    }\r\n\r\n    static setStyleSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setPos(item: any, x: number, y: number): void {\r\n        if (item.x && item.x.baseVal) {\r\n            item.style.left = x + 'px';\r\n            item.style.top = y + 'px';\r\n        } else {\r\n            item.x = x;\r\n            item.y = y;\r\n        }\r\n    }\r\n\r\n    static getValue(value: string | number): number {\r\n        return parseInt(('0' + value).replace('px', ''), 10);\r\n    }\r\n\r\n    static isIE(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('.net') > -1;\r\n    }\r\n\r\n    static isEdge(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('edge') > -1;\r\n    }\r\n\r\n    static isFireFox(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n    }\r\n\r\n    static isSafari(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        return navigator.userAgent.toLowerCase().indexOf('safari') > -1 && !isEdge;\r\n    }\r\n\r\n    static isOpera(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('opera') > -1;\r\n    }\r\n\r\n    static isChrome(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        let isSafari = Util.isSafari();\r\n        return navigator.userAgent.toLowerCase().indexOf('chrome') > -1 && !isEdge && isSafari;\r\n    }\r\n\r\n    static getEventX(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetX'] : event.layerX;\r\n    }\r\n\r\n    static getEventY(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetY'] : event.layerY;\r\n    }\r\n\r\n    static getNumber(str: string): number {\r\n        return parseInt((str || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    static getStyle(styleProp: string): CSS {\r\n        let i, style, diff, current, ref, el = document.createElement('div'), css;\r\n        document.body.appendChild(el);\r\n        css = new CSS(styleProp);\r\n        ref = new CSS(styleProp, el).css;\r\n        style = window.getComputedStyle(el, null);\r\n        el.className = styleProp;\r\n        current = new CSS(styleProp, el).css;\r\n        diff = Util.getNumber(style.getPropertyValue('border-width'));\r\n        for (i in current) {\r\n            if (!current.hasOwnProperty(i)) {\r\n                continue;\r\n            }\r\n            if (i === 'width' || i === 'height') {\r\n                if (Util.getNumber(current[i]) !== 0 && Util.getNumber(current[i]) + diff * 2 !== Util.getNumber(ref[i])) {\r\n                    css.add(i, current[i]);\r\n                }\r\n            } else if (current[i] !== ref[i]) {\r\n                css.add(i, current[i]);\r\n            }\r\n        }\r\n        document.body.removeChild(el);\r\n        return css;\r\n    }\r\n\r\n    static sizeOf(item: string | any, node?: Node): ClientRect {\r\n        let board;\r\n        let rect: ClientRect;\r\n        let addBoard: boolean;\r\n        if (!item) {\r\n            return undefined;\r\n        }\r\n        if (node) {\r\n            board = node.$owner.$view;\r\n            addBoard = false;\r\n        }\r\n\r\n        if (!board) {\r\n            addBoard = true;\r\n            board = Util.createShape({ tag: 'svg', id: 'root', width: 200, height: 200 });\r\n            document.body.appendChild(board);\r\n        }\r\n        if (board.tagName === 'svg') {\r\n            if (typeof item === 'string') {\r\n                item = Util.create({ tag: 'text', $font: true, value: item });\r\n                item.setAttribute('width', '5px');\r\n            }\r\n        } else if (typeof item === 'string') {\r\n            item = document.createTextNode(item);\r\n        }\r\n        board.appendChild(item);\r\n        rect = item.getBoundingClientRect();\r\n        board.removeChild(item);\r\n\r\n        if (addBoard) {\r\n            document.body.removeChild(board);\r\n        }\r\n        return rect;\r\n    }\r\n\r\n    static getColor(style: string, defaultColor?: string) {\r\n        if (style) {\r\n            if (style.toLowerCase() === 'create') {\r\n                return '#008000';\r\n            }\r\n            if (style.toLowerCase() === 'nac') {\r\n                return '#FE3E3E';\r\n            }\r\n            if (style.indexOf('#') === 0) {\r\n                return style;\r\n            }\r\n        }\r\n        if (defaultColor) {\r\n            return defaultColor;\r\n        }\r\n        return '#000';\r\n    }\r\n\r\n    public static utf8$to$b64(str: string): string {\r\n        return window.btoa(encodeURIComponent(str));\r\n    }\r\n\r\n    public static showSVG(control: DiagramElement) {\r\n        let svg = Util.create({\r\n            tag: 'svg',\r\n            style: { left: control.getPos().x, top: control.getPos().y, position: 'absolute' }\r\n        });\r\n        let child = control.getSVG();\r\n        if (child) {\r\n            svg.appendChild(child);\r\n        }\r\n        Util.setSize(svg, control.getSize().x, control.getSize().y);\r\n        document.body.appendChild(svg);\r\n    }\r\n\r\n    public static toJson(ref: JSON | Object): Object {\r\n        let result = {};\r\n        return Util.copy(result, ref, false, false);\r\n    }\r\n\r\n    public static initControl(parent: Control, control: Control, type: string, id: string, json: JSON | Object) {\r\n        if (typeof control.init === 'function') {\r\n            control.init(parent, type, id);\r\n        }\r\n        if (typeof control.load === 'function') {\r\n            control.load(json);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * copy One Json into another\r\n     * @function\r\n     * @param ref reference Json\r\n     * @param src source Json\r\n     * @param full all attributes include privet $\r\n     * @param replace set the original reference or copy it\r\n     * @returns ref\r\n     * @name copy\r\n     */\r\n    public static copy(ref: JSON | Object, src: JSON | Object, full: boolean, replace: boolean) {\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (replace) {\r\n                        ref[i] = src[i];\r\n                        continue;\r\n                    }\r\n                    if (!ref[i]) {\r\n                        if (src[i] instanceof Array) {\r\n                            ref[i] = [];\r\n                        } else {\r\n                            ref[i] = {};\r\n                        }\r\n                    }\r\n                    Util.copy(ref[i], src[i], full, false);\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref[i] = src[i];\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    public static xmlstringify(text: string): string {\r\n        text = text.replace('<', '&lt;');\r\n        text = text.replace('>', '&gt;');\r\n        return text;\r\n    }\r\n\r\n    public static toXML(ref: JSON | Object | any, src: JSON | Object | any, full: boolean, doc: Document): any {\r\n        let name;\r\n        if (!ref) {\r\n            name = src.constructor.name;\r\n            doc = document.implementation.createDocument(null, name, null);\r\n            ref = doc.childNodes[0];\r\n        }\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (!ref.getAttribute(i)) {\r\n                        if (src[i] instanceof Array) {\r\n                            for (let c in src[i]) {\r\n                                if (!src[i].hasOwnProperty(c)) {\r\n                                    continue;\r\n                                }\r\n                                name = src[i][c].constructor.name;\r\n                                let child = doc.createElement(name);\r\n                                ref.appendChild(child);\r\n                                Util.toXML(child, src[i][c], full, doc);\r\n                            }\r\n                        } else {\r\n                            name = src[i].constructor.name;\r\n                            let child = doc.createElement(name);\r\n                            ref.appendChild(child);\r\n                            Util.toXML(child, src[i], full, doc);\r\n                        }\r\n                    } else {\r\n                        Util.toXML(ref.getAttribute(i), src[i], full, doc);\r\n                    }\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref.setAttribute(i, src[i]);\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    static Range(min: Point, max: Point, x: number, y: number) {\r\n        max.x = Math.max(max.x, x);\r\n        max.y = Math.max(max.y, y);\r\n        min.x = Math.min(min.x, x);\r\n        min.y = Math.min(min.y, y);\r\n    }\r\n\r\n    public static getPosition(m: number, n: number, entity: DiagramElement, refCenter: Point) {\r\n        let t, p = [], list, distance = [], min = 999999999, position, i, step = 15;\r\n        let pos: Point = entity.getPos();\r\n        let size: Point = entity.getSize();\r\n        list = [Point.LEFT, Point.RIGHT];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = this.getLRPosition(m, n, entity, list[i]);\r\n            if (t.y >= pos.y && t.y <= (pos.y + size.y + 1)) {\r\n                t.y += (entity['$' + list[i]] * step);\r\n                if (t.y > (pos.y + size.y)) {\r\n                    // Alternative\r\n                    t = Util.getUDPosition(m, n, entity, Point.DOWN, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        list = [Point.UP, Point.DOWN];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = Util.getUDPosition(m, n, entity, list[i]);\r\n            if (t.x >= pos.x && t.x <= (pos.x + size.x + 1)) {\r\n                t.x += (entity['$' + list[i]] * step);\r\n                if (t.x > (pos.x + size.x)) {\r\n                    // Alternative\r\n                    t = this.getLRPosition(m, n, entity, Point.RIGHT, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        for (i = 0; i < p.length; i += 1) {\r\n            if (distance[i] < min) {\r\n                min = distance[i];\r\n                position = p[i];\r\n            }\r\n        }\r\n        return position;\r\n    }\r\n\r\n    public static getUDPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let x, y: number = pos.y;\r\n        if (p === Point.DOWN) {\r\n            y += size.y;\r\n        }\r\n        x = (y - n) / m;\r\n        if (step) {\r\n            x += e['$' + p] * step;\r\n            if (x < pos.x) {\r\n                x = pos.x;\r\n            } else if (x > (pos.x + size.x)) {\r\n                x = pos.x + size.x;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static getLRPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let y: number, x: number = pos.x;\r\n        if (p === Point.RIGHT) {\r\n            x += size.x;\r\n        }\r\n        y = m * x + n;\r\n        if (step) {\r\n            y += e['$' + p] * step;\r\n            if (y < pos.y) {\r\n                y = pos.y;\r\n            } else if (y > (pos.y + size.y)) {\r\n                y = pos.y + size.y;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static hasClass(element: Element, cls: string) {\r\n        let className = element.getAttribute('class');\r\n        return className.indexOf(cls) > 0;\r\n    }\r\n    public static addClass(element: Element, cls: string) {\r\n        if (!Util.hasClass(element, cls)) {\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className + ' ' + cls);\r\n        }\r\n    }\r\n    public static removeClass(element: Element, cls: string) {\r\n        if (Util.hasClass(element, cls)) {\r\n            let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className.replace(reg, ' ').trim());\r\n        }\r\n    }\r\n\r\n    public static startsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.startsWith) {\r\n            return s.indexOf(searchS) === 0;\r\n        }\r\n\r\n        return s.startsWith(searchS);\r\n    }\r\n\r\n    public static endsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.endsWith) {\r\n            let lastIndex = s.lastIndexOf(searchS);\r\n            return lastIndex !== -1 && lastIndex === (s.length - 1);\r\n        }\r\n\r\n        return s.endsWith(searchS);\r\n    }\r\n\r\n    public static includes(s: string, searchS: string): boolean {\r\n        if (!String.prototype.includes) {\r\n            let idx = s.indexOf(searchS);\r\n            return idx > -1;\r\n        }\r\n        if (s === null) {\r\n            return false;\r\n        }\r\n\r\n        return s.includes(searchS);\r\n    }\r\n\r\n    public static isParentOfChild(parent: Element, child: Element): boolean {\r\n\r\n        if (!parent || !child) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isIE()) {\r\n            let children = parent.childNodes;\r\n            // let found = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                let childItem = children[i];\r\n                if (childItem === child) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        return parent.contains(child);\r\n    }\r\n\r\n    public static createCustomEvent(type: string, params?: any): CustomEvent {\r\n        let evt: CustomEvent;\r\n\r\n        if (typeof window['CustomEvent'] !== 'function') {\r\n            params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n            evt = document.createEvent('CustomEvent');\r\n            evt.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\r\n            return evt;\r\n        }\r\n\r\n        evt = new CustomEvent(type);\r\n\r\n        return evt;\r\n    }\r\n\r\n    public static saveToLocalStorage(model: any): boolean {\r\n        if (!this.isAutoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isLocalStorageSupported()) {\r\n            if (model) {\r\n                if (model.$isLoading) {\r\n                    return false;\r\n                }\r\n                let jsonObj = Util.toJson(model);\r\n                let data = JSON.stringify(jsonObj, null, '\\t');\r\n                localStorage.setItem('diagram', data);\r\n            } else {\r\n                localStorage.removeItem('diagram');\r\n            }\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static getDiagramFromLocalStorage(): string {\r\n        if (Util.isLocalStorageSupported()) {\r\n            return localStorage.getItem('diagram');\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    public static isLocalStorageSupported(): boolean {\r\n        if (this.isEdge()) {\r\n            return false;\r\n        }\r\n        return localStorage !== undefined;\r\n    }\r\n}\r\n"],"sourceRoot":""}
Severity: Minor
Found in doc/diagram.js.map by fixme

FIXME found
Open

{"version":3,"sources":["webpack://DiagramJS/webpack/bootstrap","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Adapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Bridge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/BridgeElement.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/CSS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Control.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Data.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventBus.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/JSEPS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Palette.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertiesPanel.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertyBinder.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/RGBColor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/SVGConverter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/ScrumBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Toolbar.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/UML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/VirtualKeyBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/JavaAdapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/BaseElements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/ClassEditor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Graph.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Model.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregate.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Association.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Composition.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Generalisation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Implements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Attribute.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/AutoComplete.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/BR.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Button.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Class.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/ClazzProperty.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Dice.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Div.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Form.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/HTML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/InfoText.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Input.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Label.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Method.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Node.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/SO.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/StereoType.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Symbol.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Table.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/AddNode.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Drag.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/GraphListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/ImportFile.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/NewEdge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Select.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Zoom.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayout.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayoutMin.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/Random.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/main.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/util.ts"],"names":[],"mappings":"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","file":"diagram.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./main.ts\");\n","export abstract class Adapter {\r\n    public id: string = null;\r\n\r\n    abstract update(evt: Object): boolean;\r\n}\r\n","'use strict';\r\n\r\nimport * as controls from './elements/nodes';\r\nimport * as adapters from './adapters';\r\nimport Data from './Data';\r\nimport {Control} from './Control';\r\nimport {Adapter} from './Adapter';\r\nimport {Graph} from './elements';\r\nimport {Util} from './util';\r\nimport {Point} from './elements';\r\n\r\nexport class Bridge extends Control {\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public static version: string = '0.42.01.1601007-1739';\r\n    private controlFactory: Object = {};\r\n    private adapterFactory: Object = {};\r\n    private controls: Object = {};\r\n    private adapters: Object = {};\r\n    private items: Object = {};\r\n    private controlNo: number = 1;\r\n    private online: boolean = true;\r\n    private language: string = navigator.language.toUpperCase();\r\n    private toolBar: HTMLElement;\r\n\r\n    constructor(viewRoot?: HTMLElement) {\r\n        super();\r\n        let i;\r\n\r\n        if (viewRoot) {\r\n            this.$view = viewRoot;\r\n        }\r\n\r\n        let keys: string[] = Object.keys(adapters);\r\n        for (i = 0; i < keys.length; i++) {\r\n            let child = adapters[keys[i]];\r\n            if (child && child.id) {\r\n                this.adapterFactory[child.id.toLowerCase()] = child;\r\n            }\r\n        }\r\n\r\n        keys = Object.keys(controls);\r\n        for (i = 0; i < keys.length; i++) {\r\n            this.addControl(controls[keys[i]]);\r\n        }\r\n        this.addControl(Graph);\r\n\r\n        let that = this;\r\n        window.addEventListener('load', function () {\r\n            let updateOnlineStatus = function updateOnlineStatus() {\r\n                that.setOnline(navigator.onLine);\r\n            };\r\n            window.addEventListener('online', updateOnlineStatus);\r\n            window.addEventListener('offline', updateOnlineStatus);\r\n        });\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public setOnline(value: boolean) {\r\n        this.online = value;\r\n        if (this.toolBar.children[0]) {\r\n            this.toolBar.children[0].className = value ? 'online' : 'offline';\r\n        }\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addToolbar(): boolean {\r\n        if (this.toolBar) {\r\n            return false;\r\n        }\r\n        this.toolBar = document.createElement('div');\r\n        this.toolBar.className = 'onlineStatus';\r\n        let child = document.createElement('div');\r\n        child.className = 'online';\r\n        this.toolBar.appendChild(child);\r\n        child = document.createElement('div');\r\n        child.className = 'lang';\r\n        child.innerHTML = this.language;\r\n        this.toolBar.appendChild(child);\r\n\r\n        let body: HTMLElement = document.getElementsByTagName('body')[0];\r\n        body.insertBefore(this.toolBar, body.firstChild);\r\n        // Refresh Online Status\r\n        this.setOnline(this.online);\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addListener = function (listener: any) {\r\n        this.listener.push(listener);\r\n    };\r\n\r\n    public addControl(control: any) {\r\n        if (control && control.name) {\r\n            this.controlFactory[control.name.toLowerCase()] = control;\r\n        }\r\n    }\r\n\r\n    public getId(): string {\r\n        return 'control' + (this.controlNo++);\r\n    }\r\n\r\n    public adapterUpdate(message: string) {\r\n        let keys: string[] = Object.keys(this.adapters);\r\n        if (keys.length > 0) {\r\n            let i;\r\n            for (i = 0; i < keys.length; i++) {\r\n                let adapterList = this.adapters[keys[i]];\r\n                if (adapterList instanceof Adapter) {\r\n                    adapterList.update(message);\r\n                } else {\r\n                    for (let adapter of adapterList) {\r\n                        adapter.update(message);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        let config = {}, className: string, id: string;\r\n        if (typeof(json) === 'string') {\r\n            // Only a String\r\n            config['id'] = '' + json;\r\n            let item = document.getElementById(config['id']);\r\n            let className: string;\r\n            if (item) {\r\n                className = item.getAttribute('class');\r\n                if (!className) {\r\n                    className = item.getAttribute('classname') || '';\r\n                }\r\n                // Found Element and now config Data element\r\n                if (item.getAttribute('property')) {\r\n                    if (this.hasItem(item.getAttribute('property'))) {\r\n                        let data = this.getItem(item.getAttribute('property'));\r\n                        for (let key in data.prop) {\r\n                            if (item.getAttribute(key)) {\r\n                                data.setValue(key, item.getAttribute(key));\r\n                            }\r\n                        }\r\n                        if (item.getAttribute('property')) {\r\n                            // TODO: FIXME!!!\r\n                            // data.property = item.getAttribute(\"property\");\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                className = '' + json;\r\n            }\r\n            className = className.toLowerCase();\r\n            config['className'] = className;\r\n        } else {\r\n            config = <JSON>json;\r\n        }\r\n        // Config validate\r\n        if (!config['id']) {\r\n            config['id'] = this.getId();\r\n        }\r\n        // Backup for Old Graph\r\n        if (!config['className'] && (config['type'] === 'clazzdiagram' || config['type'] === 'objectdiagram')) {\r\n            config['className'] = 'graph';\r\n        }\r\n\r\n        className = config['className'] || config['class'];\r\n        className = className.toLocaleLowerCase();\r\n        id = config['id'];\r\n\r\n        // Check For Control or Data\r\n        if ((config['prop'] || config['upd'] || config['rem']) && this.controls[id] === null) {\r\n            // Its Data\r\n            let newData = !this.hasItem(config['id']);\r\n            let item: Data = this.getItem(config['id']);\r\n            // TODO: FIXME!!!\r\n            // if (id && className && !item.property) {\r\n            //      item.property = className;\r\n            // }\r\n            if (newData) {\r\n                for (let i in this.controls) {\r\n                    if (this.controls.hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    this.controls[i].addItem(this, item);\r\n                }\r\n            }\r\n            // Add all Values to item\r\n            item.addProperties(config);\r\n            // Bridge.addProperties(config['prop'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return item;\r\n        }\r\n\r\n        let control;\r\n        if (this.controls[id]) {\r\n            control = this.controls[id];\r\n            control.initControl(json);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return control;\r\n        }\r\n\r\n        if (typeof(this.controlFactory[className]) === 'object' || typeof(this.controlFactory[className]) === 'function') {\r\n            let obj = this.controlFactory[className];\r\n            control = new obj(json);\r\n            Util.initControl(owner || this, control, config['property'], id, json);\r\n\r\n            if (control.id) {\r\n                this.controls[control.id] = control;\r\n            } else {\r\n                this.controls[id] = control;\r\n            }\r\n\r\n            // create DataObject and register this control as listener to it\r\n            // let obj = {id:id};\r\n            // let data: Data = this.load(obj);\r\n            // data.addListener(this);\r\n\r\n            // Try to Show\r\n            if (typeof control.getSVG === 'function' && typeof control.getSize === 'function') {\r\n                let size: Point = control.getSize();\r\n\r\n                let svg = Util.createShape({\r\n                    tag: 'svg',\r\n                    id: 'root',\r\n                    width: size.x,\r\n                    height: size.y\r\n                });\r\n\r\n                let view = control.getSVG();\r\n                svg.appendChild(view);\r\n                document.getElementsByTagName('body')[0].appendChild(svg);\r\n            }\r\n            return control;\r\n        }\r\n        return null;\r\n        // bridge.load('{class:table, columns:[{id:'firstname'}, {id:'lastname'}]}');\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n\r\n        if (this.items[id] !== undefined) {\r\n            return true;\r\n        }\r\n        id = id.split('.')[0];\r\n        return (this.items[id] !== undefined);\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return this.items;\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        let item = this.items[id];\r\n        if (!item) {\r\n            id = id.split('.')[0];\r\n            item = this.items[id];\r\n            if (!item) {\r\n                item = new Data();\r\n                item.id = id;\r\n                this.items[id] = item;\r\n            }\r\n        }\r\n        return item;\r\n    }\r\n\r\n    /**\r\n     * Method for executing user input -> Event\r\n     * @param object\r\n     * @param attribute\r\n     * @param oldValue\r\n     * @param newValue\r\n     * @returns {boolean}\r\n     */\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        alert('Bridge.setValue: oldVal:' + oldValue + ', newVal: ' +  + newValue + ', attribute: ' + attribute + ', object: ' + JSON.stringify(object));\r\n        let obj: Data;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n\r\n        } else if (object instanceof Data) {\r\n            obj = object;\r\n            id = object.id;\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = <Data>object;\r\n            id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return false;\r\n        }\r\n        if (obj) {\r\n            // Execute Update to Data\r\n            obj.setValue(attribute, newValue);\r\n            // Could be done here, but currently is done at this.execueChange..:\r\n            // obj[attribute] = value;\r\n        }\r\n\r\n        /*let tmp = {'id': id};\r\n        if (typeof(newValue) !== 'undefined' && newValue !== null) {\r\n            let upd = {};\r\n            upd[attribute] = newValue;\r\n            tmp['upd'] = upd;\r\n        }\r\n        if (typeof(oldValue) !== 'undefined' && oldValue !== null) {\r\n            let rem = {};\r\n            rem[attribute] = oldValue;\r\n            tmp['rem'] = rem;\r\n        }*/\r\n        // this.load(tmp);\r\n        return true;\r\n    }\r\n\r\n    public getValue(object: Object, attribute: string): any {\r\n        let obj: Object;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = object;\r\n            // id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return;\r\n        }\r\n        if (obj) {\r\n            if (obj.hasOwnProperty(attribute)) {\r\n                return obj[attribute];\r\n            } else if (obj instanceof Data) {\r\n                return (<Data>obj).getValue(attribute);\r\n            } else {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    public getNumber(object: Object, attribute: string, defaultValue: number = 0): number {\r\n        let res = <number>this.getValue(object, attribute);\r\n        if (typeof res === 'number') {\r\n            return res;\r\n        } else if (typeof res === 'string') {\r\n            // check whether res is a number\r\n            let value = Number(res);\r\n            if (value || value === 0) {\r\n                return value;\r\n            }\r\n        }\r\n        return defaultValue;\r\n    }\r\n\r\n    getControl(controlId: string) {\r\n        return this.controls[controlId];\r\n    }\r\n\r\n    public registerListener(eventType: string, control: Control, callBackfunction: string): Control {\r\n        if (typeof control === 'string') {\r\n            control = this.getControl(<string>control);\r\n        }\r\n        if (!control) {\r\n            return null;\r\n        }\r\n        if (eventType) {\r\n            eventType = eventType.toLowerCase();\r\n        }\r\n        control.registerListenerOnHTMLObject(eventType);\r\n        if (callBackfunction) {\r\n            let adapter: DelegateAdapter = new DelegateAdapter();\r\n            adapter.callBackfunction = callBackfunction;\r\n            adapter.id = control.getId();\r\n            this.addAdapter(adapter, eventType);\r\n        }\r\n        return control;\r\n    }\r\n\r\n    public addAdapter(adapter: Adapter | string, eventType: string): Adapter {\r\n        if (!eventType) {\r\n            eventType = '';\r\n        }\r\n        let result: Adapter;\r\n        if (adapter instanceof String) {\r\n            let obj = this.adapterFactory[adapter.toLowerCase()];\r\n            result = new obj();\r\n        } else {\r\n            result = <Adapter>adapter;\r\n        }\r\n        let handlers = this.adapters[eventType];\r\n\r\n        if (handlers === null || handlers === undefined) {\r\n            handlers = [];\r\n            this.adapters[eventType] = handlers;\r\n        }\r\n        handlers.push(result);\r\n        return result;\r\n    }\r\n\r\n    public fireEvent(evt: Event): void {\r\n        let handlers = this.adapters[''];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n        handlers = this.adapters[evt['eventType']];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport class DelegateAdapter extends Adapter {\r\n    adapter: Adapter;\r\n    callBackfunction: string;\r\n\r\n    update(evt: Event): boolean {\r\n        if (this.adapter) {\r\n            this.adapter.update(evt);\r\n            return true;\r\n        } else if (this.callBackfunction) {\r\n            return this.executeFunction(this.callBackfunction, evt);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public setAdapter(adapter: Adapter): boolean {\r\n        this.adapter = adapter;\r\n        return true;\r\n    }\r\n\r\n    private executeFunction(strValue: string, evt: Event): boolean {\r\n        let scope = window;\r\n        let scopeSplit = strValue.split('.');\r\n        for (let i = 0; i < scopeSplit.length - 1; i++) {\r\n            scope = scope[scopeSplit[i]];\r\n            if (scope === undefined) {\r\n                return false;\r\n            }\r\n        }\r\n        let fn: any = scope[scopeSplit[scopeSplit.length - 1]];\r\n        if (typeof fn === 'function') {\r\n            fn.call(scope);\r\n            return true;\r\n        } else {\r\n            window['callBack1'].update(evt);\r\n\r\n        }\r\n        return false;\r\n    }\r\n}\r\n","'use strict';\r\nimport Data from './Data';\r\n\r\nexport default class BridgeElement {\r\n    private static elementSet: BridgeElement[] = [];\r\n    public model: Data;\r\n    public id: string;\r\n    public gui: HTMLElement;\r\n\r\n    constructor(model: Data) {\r\n        this.model = model;\r\n        this.id = model.id;\r\n        BridgeElement.elementSet.push(this);\r\n    }\r\n}\r\n","import {Util} from './util';\r\n\r\n// \t\t\t\t######################################################### CSS #########################################################\r\nexport class CSS {\r\n    public css: Object;\r\n    private name: string;\r\n\r\n    constructor(name: string, item?: any) {\r\n        let i, value, border: string, prop, el;\r\n        this.name = name;\r\n        this.css = {};\r\n        if (!item) {\r\n            return;\r\n        }\r\n\r\n        el = window.getComputedStyle(item, null);\r\n        border = el.getPropertyValue('border');\r\n        for (i in el) {\r\n            prop = i;\r\n            value = el.getPropertyValue(prop);\r\n            if (value && value !== '') {\r\n                // optimize CSS\r\n                if (border) {\r\n                    if (prop === 'border-bottom' || prop === 'border-right' || prop === 'border-top' || prop === 'border-left') {\r\n                        if (value !== border) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-color' || prop === 'border-bottom-color' || prop === 'border-right-color' || prop === 'border-top-color' || prop === 'border-left-color') {\r\n                        if (border.substring(border.length - value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-width') {\r\n                        if (border.substring(0, value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else {\r\n                        this.css[prop] = value;\r\n                    }\r\n                } else {\r\n                    this.css[prop] = value;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public static getStdDef() {\r\n        let child, def = Util.create({tag: 'defs'});\r\n\r\n        child = Util.create({tag: 'filter', id: 'drop-shadow'});\r\n        child.appendChild(Util.create({tag: 'feGaussianBlur', 'in': 'SourceAlpha', result: 'blur-out', stdDeviation: 2}));\r\n        child.appendChild(Util.create({tag: 'feOffset', 'in': 'blur-out', dx: 2, dy: 2}));\r\n        child.appendChild(Util.create({tag: 'feBlend', 'in': 'SourceGraphic', mode: 'normal'}));\r\n        def.appendChild(child);\r\n        child = Util.create({tag: 'linearGradient', id: 'reflect', x1: 0, x2: 0, y1: '50%', y2: 0, spreadMethod: 'reflect'});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#aaa', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#eee', offset: '100%'}));\r\n        def.appendChild(child);\r\n\r\n        child = Util.create({tag: 'linearGradient', id: 'classelement', x1: 0, x2: '100%', y1: '100%', y2: 0});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#fff', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#d3d3d3', offset: 1}));\r\n        def.appendChild(child);\r\n\r\n        return def;\r\n    }\r\n\r\n    public static getSubstring(str: string, search: string, startChar: string, endChar: string, splitter: string): any {\r\n        let pos, end, count = 0, array = [];\r\n        pos = str.indexOf(search);\r\n        if (pos > 0) {\r\n            end = str.indexOf(startChar, pos);\r\n            pos = end + 1;\r\n            if (end > 0) {\r\n                while (end < str.length) {\r\n                    if (str.charAt(end) === startChar) {\r\n                        count += 1;\r\n                    }\r\n                    if (str.charAt(end) === endChar) {\r\n                        count -= 1;\r\n                        if (count === 0) {\r\n                            if (splitter && pos !== end) {\r\n                                array.push(str.substring(pos, end).trim());\r\n                            }\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (str.charAt(end) === splitter && count === 1) {\r\n                        array.push(str.substring(pos, end).trim());\r\n                        pos = end + 1;\r\n                    }\r\n\r\n                    end += 1;\r\n                }\r\n                if (splitter) {\r\n                    return array;\r\n                }\r\n                return str.substring(pos, end);\r\n            }\r\n            return str.substring(pos);\r\n        }\r\n        return '';\r\n    }\r\n\r\n    public static addStyle(board: SVGElement, styleName: any) {\r\n        let defs, style: any, css;\r\n        if (styleName.baseVal || styleName.baseVal === '') {\r\n            styleName = styleName.baseVal;\r\n        }\r\n        if (!styleName) {\r\n            return;\r\n        }\r\n        defs = CSS.getDefs(board);\r\n        if (defs.getElementsByTagName('style').length > 0) {\r\n            style = defs.getElementsByTagName('style')[0];\r\n        } else {\r\n            style = Util.create({tag: 'style'});\r\n            style.item = {};\r\n            defs.appendChild(style);\r\n        }\r\n        if (!style.item[styleName]) {\r\n            css = Util.getStyle(styleName);\r\n            style.item[styleName] = css;\r\n            style.innerHTML = style.innerHTML + '\\n.' + styleName + css.getSVGString(board);\r\n        }\r\n    }\r\n\r\n    public static addStyles(board: SVGElement, item: any) {\r\n        if (!item) {\r\n            return;\r\n        }\r\n        let items, i, className: any = item.className;\r\n\r\n        if (className) {\r\n            if (className.baseVal || className.baseVal === '') {\r\n                className = className.baseVal;\r\n            }\r\n        }\r\n        if (className) {\r\n            items = className.split(' ');\r\n            for (i = 0; i < items.length; i += 1) {\r\n                CSS.addStyle(board, items[i].trim());\r\n            }\r\n        }\r\n        for (i = 0; i < item.childNodes.length; i += 1) {\r\n            this.addStyles(board, item.childNodes[i]);\r\n        }\r\n    }\r\n\r\n    public static getDefs(board: SVGElement) {\r\n        let defs;\r\n        if (board.getElementsByTagName('defs').length < 1) {\r\n            defs = Util.create({tag: 'defs'});\r\n            board.insertBefore(defs, board.childNodes[0]);\r\n        } else {\r\n            defs = board.getElementsByTagName('defs')[0];\r\n        }\r\n        return defs;\r\n    }\r\n\r\n    public add(key: string, value: string) {\r\n        this.css[key] = value;\r\n    }\r\n\r\n    public get(key: string): any {\r\n        let i;\r\n        for (i in this.css) {\r\n            if (i === key) {\r\n                return this.css[key];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public getNumber(key: string) {\r\n        return parseInt((this.get(key) || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    public getSVGString(board: SVGElement) {\r\n        let str, pos, style, defs, value, filter, z;\r\n        str = '{';\r\n        for (style in this.css) {\r\n            if (!this.css.hasOwnProperty(style)) {\r\n                continue;\r\n            }\r\n            if (style === 'border') {\r\n                pos = this.css[style].indexOf(' ');\r\n                str = str + 'stroke-width: ' + this.css[style].substring(0, pos) + ';';\r\n                pos = this.css[style].indexOf(' ', pos + 1);\r\n                str = str + 'stroke:' + this.css[style].substring(pos) + ';';\r\n            } else if (style === 'background-color') {\r\n                str = str + 'fill: ' + this.css[style] + ';';\r\n            } else if (style === 'background') {\r\n                value = CSS.getSubstring(this.css[style], 'linear-gradient', '(', ')', ',');\r\n                if (value.length > 0) {\r\n                    defs = CSS.getDefs(board);\r\n                    if (value[0] === '45deg') {\r\n                        pos = 1;\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '100%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                    } else {\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '0%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                        pos = 0;\r\n                    }\r\n                    defs.appendChild(filter);\r\n                    while (pos < value.length) {\r\n                        value[pos] = value[pos].trim();\r\n                        z = value[pos].lastIndexOf(' ');\r\n                        filter.appendChild(Util.create({\r\n                            tag: 'stop',\r\n                            'offset': value[pos].substring(z + 1),\r\n                            style: {'stop-color': value[pos].substring(0, z)}\r\n                        }));\r\n                        pos += 1;\r\n                    }\r\n                    str = str + 'fill: url(#' + this.name + ');';\r\n                    continue;\r\n                }\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n                // box-shadow: inset 0 3px 4px #888;\r\n// \t\t\t\t<defs>\r\n// \t\t\t\t\t<filter id='drop-shadow'>\r\n// \t\t\t\t\t\t<feGaussianBlur in='SourceAlpha' result='blur-out' stdDeviation='2'></feGaussianBlur>\r\n// \t\t\t\t\t\t<feOffset in='blur-out' dx='2' dy='2'></feOffset>\r\n// \t\t\t\t\t\t<feBlend in='SourceGraphic' mode='normal'></feBlend>\r\n// \t\t\t\t\t</filter>\r\n// \t\t\t\t</defs>\r\n            } else {\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n            }\r\n        }\r\n        str = str + '}';\r\n        return str;\r\n    }\r\n}\r\n","import {Bridge} from './Bridge';\r\nimport Data from './Data';\r\nimport EventListener from './EventListener';\r\n\r\nexport abstract class Control {\r\n    public $owner: Control;\r\n    /**\r\n     *\r\n     */\r\n    public property: string;\r\n    public id: string;\r\n    public $view: Element;\r\n    public $viewData: Data = null;\r\n\r\n    protected $model: Data;\r\n    protected $viewListener: EventListenerOrEventListenerObject;\r\n\r\n    /**\r\n     * The properties, we want to listen to\r\n     */\r\n    // static defaultProperties: string[] = [];\r\n\r\n    // public getProperties(): string[] {\r\n    //     return this.properties;\r\n    // }\r\n\r\n    constructor() {\r\n        // e.g. this.properties.push(\"key\");\r\n        // this.properties.push(\"property\");\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data: Data = new Data();\r\n        if (oldData) {\r\n            oldData.removeListener(this);\r\n            const keys: string[] = oldData.getKeys();\r\n            for (let i = 0; i < keys.length; i++) {\r\n                let attr = keys[i];\r\n                if (this.$view) {\r\n                    if (this.$view[attr] === null) {\r\n                        continue;\r\n                    }\r\n                    data.setValue(attr, this.$view[attr]);\r\n                } else {\r\n                    data.setValue(attr, null);\r\n                }\r\n            }\r\n        }\r\n        data.addListener(this);\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     *  Set the new HTMLElement and attach listener to it.\r\n     *  Also remove Listeners from old one and return the old one, if present.\r\n     * @param element\r\n     * @returns The previous Element\r\n     */\r\n    public setView(element: Element): Element {\r\n        let oldElement: Element = null;\r\n        if (this.$view) {\r\n            oldElement = this.$view;\r\n            if (this.$viewListener) {\r\n                oldElement.removeEventListener('change', this.$viewListener);\r\n            }\r\n        }\r\n        this.$view = element;\r\n\r\n        if (this.$viewListener) {\r\n            element.addEventListener('change', this.$viewListener);\r\n        }\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n        return element;\r\n    }\r\n\r\n    public init(owner: Control, property ?: string, id ?: string): Control {\r\n        if (!this.$owner) {\r\n            this.$owner = owner;\r\n        }\r\n        if (!this.id) {\r\n            this.id = id;\r\n        }\r\n        if (!this.property) {\r\n            this.property = this.generateID(property, id);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public createEventListener(): EventListener {\r\n        return new EventListener();\r\n    }\r\n\r\n    public getRoot(): Control {\r\n        if (this.$owner) {\r\n            return this.$owner.getRoot();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return null;\r\n    }\r\n\r\n    public initControl(data: any): void {\r\n        if (this.$view === null || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (data.hasOwnProperty('prop')) {\r\n            for (let key in data.prop) {\r\n                let oldValue = this.$viewData.getValue(key);\r\n                if (this.$view) {\r\n                    this.updateElement(key, oldValue, data.prop[key]);\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        let hasRem = data.hasOwnProperty('rem');\r\n        let removed: any[] = [];\r\n        if (data.hasOwnProperty('upd')) {\r\n            for (let key in data.upd) {\r\n                let oldValue;\r\n                let newValue = data.upd[key];\r\n                let entity;\r\n                const temp = false;\r\n                if (temp) {\r\n//                if (newValue == this.getViewData().getValue(key)) {\r\n                    // new Value assertEquals old value, so we don't need to change anything..\r\n                    // delete data.rem[key];\r\n                    if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                        removed.push(data.rem[key]);\r\n                    }\r\n                    continue;\r\n                }\r\n                if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                    // if there's a rem, the oldValue from rem will be used and expected to be right..\r\n                    oldValue = data.rem[key];\r\n                    if (this.$model && this.$model.getValue(key) === oldValue) {\r\n                        entity = this.$model;\r\n//                    } else if (oldValue == this.getViewData().getValue(key)) {\r\n//                        $graphModel = this.getViewData();\r\n                    }\r\n                    delete data.rem[key];\r\n\r\n                    if (entity === null) {\r\n                        continue;\r\n                    }\r\n                }\r\n                if (entity) {\r\n                    if (!hasRem) {\r\n                        if (entity === this.$model) {\r\n                            oldValue = this.$model.getValue(key);\r\n                        } else {\r\n//                           oldValue = this.getViewData().getValue(key);\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (this.$model) {\r\n                        // try to get the oldValue directly from the $graphModel...\r\n                        oldValue = this.$model.getValue(key);\r\n                        entity = this.$model;\r\n                    }\r\n                    if (oldValue === null) {\r\n                        // if there was no data in the entity, we try to get oldValue from the $view\r\n//                        oldValue = this.getViewData().getValue(key);\r\n//                        entity = this.getViewData();\r\n                    }\r\n                }\r\n\r\n                //  || oldValue !== this.$viewData.getValue(key)\r\n                if (newValue === oldValue) {\r\n                    // no match, so update should be wrong...\r\n                    continue;\r\n                }\r\n                const viewDataOldValue = this.$viewData.getValue(key);\r\n                if (entity === this.$viewData) {\r\n\r\n                    // this.getViewData().setValue(key, newValue);\r\n                    if (this.$view) {\r\n                        this.updateElement(key, viewDataOldValue, newValue);\r\n                    }\r\n                } else {\r\n                    this.updateElement(key, viewDataOldValue, newValue);\r\n                }\r\n                this.getRoot().setValue(entity, key, newValue, oldValue);\r\n            }\r\n            // this.saveViewInData();\r\n        }\r\n        if (hasRem) {\r\n            for (let key in data.rem) {\r\n                if (removed.hasOwnProperty(key)) {\r\n                    continue;\r\n                }\r\n                let oldValue;\r\n//                    this.getViewData().getValue(key);\r\n//                if (oldValue != data.rem[key] || data.upd !== undefined && (data.upd[key] == oldValue || this.getViewData().getValue(key) == data.upd[key])) {\r\n                // if rem is invalid, or if the change is already applied, don't do anything..\r\n                //                  continue;\r\n                //            }\r\n                // delete this.$viewData.getValue(key);\r\n                // this.saveViewInData();\r\n                this.updateElement(key, null, null);\r\n                // this.$view.removeAttribute(key);\r\n                if (this.$model) {\r\n//                    this.getRoot().setValue(this.$graphModel, key, this.getViewData().getValue(key), oldValue);\r\n                }\r\n            }\r\n        }\r\n        if (this.property) {\r\n            // Add listener to Input field:\r\n            this.$view['onchange'] = ((ev: Event) => {\r\n                    this.controlChanged(ev);\r\n                }\r\n            );\r\n        }\r\n//        this.saveViewInData();\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        return null;\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n        return false;\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return new Object();\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue ?: Object): boolean {\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Is called when a object, that the Control is listening to, changes its value.\r\n     * @param entity\r\n     * @param property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        if (oldValue === newValue || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (oldValue === this.$viewData.getValue(property)) {\r\n            return;\r\n        }\r\n        // Set NewData to ViewData and Fire PC\r\n        this.$viewData.setValue(property, newValue);\r\n\r\n//\r\n//\r\n//         // if (entity == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.entity) {\r\n//                 alert(\"entity = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.entity.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.entity, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the entity is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"entity = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n// >>>>>>> addOldFunctions\r\n        if (this.$viewData) {\r\n            this.$viewData.setValue(property, newValue);\r\n        }\r\n        if (this.$model) {\r\n            this.$model.setValue(property, newValue);\r\n        }\r\n        this.updateElement(property, oldValue, newValue);\r\n    }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            // Do Nothing\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  Update GUI Element\r\n     * @param {string} property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        if (this.$view && this.$view.hasAttribute(property)) {\r\n            this.$view.setAttribute(property, newValue);\r\n        }\r\n    }\r\n\r\n//        if (oldValue == newValue) {\r\n//            return;\r\n//        }\r\n//        if (oldValue == this.$viewData.getValue(property)) {\r\n//            return;\r\n//        }\r\n//        // Set NewData to ViewData and Fire PC\r\n//        this.$viewData.setValue(property, newValue);\r\n//\r\n//\r\n//\r\n//         // if ($graphModel == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.$graphModel) {\r\n//                 alert(\"$graphModel = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.$graphModel.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.$graphModel, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the $graphModel is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"$graphModel = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n\r\n    public getId(): string {\r\n        return this.id;\r\n    }\r\n\r\n    public load(json: JSON | Object, owner ?: Control): any {\r\n        // Do Nothing\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.property || entity.hasProperty(this.property)) {\r\n                entity.addListener(this, this.property);\r\n                this.$model = entity;\r\n            }\r\n        }\r\n    }\r\n\r\n    public appendChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.appendChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].appendChild(child.$view);\r\n        }\r\n    }\r\n\r\n    public removeChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.removeChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].removeChild(child.$view);\r\n        }\r\n    }\r\n\r\n    /*\r\n     Property looks like: 't1.talk'\r\n     */\r\n    public setProperty(property: string): void {\r\n        if (!this.property) {\r\n            return;\r\n        }\r\n        let objId = property.split('.')[0];\r\n        let object = null;\r\n        if (this.$owner.hasItem(objId)) {\r\n            object = this.$owner.getItem(objId);\r\n        }\r\n\r\n        // remove listener on old object\r\n        if (this.$model) {\r\n            // this.$graphModel.removeListener(this);\r\n            this.$model.removeListener(this, this.lastProperty);\r\n        }\r\n        this.property = property;\r\n\r\n        // add listener to object..\r\n        if (object) {\r\n            object.addListener(this, this.lastProperty);\r\n            this.$model = object;\r\n            this.updateElement(this.lastProperty, this.$viewData.getValue(this.lastProperty), object.prop[this.lastProperty]);\r\n        }\r\n    }\r\n\r\n    public registerListenerOnHTMLObject(eventType: string): boolean {\r\n        return this.registerEventListener(eventType, <HTMLElement>this.$view);\r\n    }\r\n\r\n    // Normal Event HTML-Event\r\n    // Eventtype:string,\r\n    // id:string of Control\r\n    public fireEvent(evt: Event): void {\r\n        // Do Nothing\r\n    }\r\n\r\n    public isClosed(): boolean {\r\n        return this['closed'];\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        if (this.isClosed()) {\r\n            return this.$owner.getShowed();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * the id of the Data object, that contains the properties of the view\r\n     * @returns {string}\r\n     */\r\n    protected getControlDataID() {\r\n        return this.id + '_data';\r\n    }\r\n\r\n    protected generateID(property ?: string, id ?: string): string {\r\n        if (property) {\r\n            return property;\r\n        }\r\n        if (id) {\r\n            // will generate a data Object suitable for the Control..\r\n            // must be overridden, if the changeEvent shouldn't listen on value...\r\n//            return id + '.' + this.getStandardProperty();//+ \"_data\"\r\n            return id + '.' + '_data';\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected updateViewData() {\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n        const keys: string[] = this.$viewData.getKeys();\r\n        for (let i = 0; i < keys.length; i++) {\r\n            let attr = keys[i];\r\n            if (this.$view[attr] === null) {\r\n                continue;\r\n            }\r\n            this.$viewData.setValue(attr, this.$view[attr]);\r\n        }\r\n    }\r\n\r\n    protected registerEventListener(eventType: string, htmlElement: HTMLElement): boolean {\r\n        if (!htmlElement) {\r\n            return false;\r\n        }\r\n        if (htmlElement instanceof HTMLElement === false) {\r\n            return false;\r\n        }\r\n        let control = this;\r\n        let listener = (t: any) => {\r\n            t.eventType = eventType;\r\n            t.id = control.id;\r\n            control.$owner.fireEvent(t);\r\n        };\r\n        htmlElement.addEventListener(eventType, listener);\r\n        return true;\r\n    }\r\n\r\n    get lastProperty(): string {\r\n        if (!this.property) {\r\n            return '';\r\n        }\r\n        let arr: string[] = this.property.split('.');\r\n        return arr[arr.length - 1];\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\n\r\nexport default class Data {\r\n    public prop = {};\r\n    id: string;\r\n    // $listener: Control[] = [];\r\n    $listener: Object = {};\r\n\r\n    private static nullCheck(property: string): string {\r\n        if (property === undefined || property === null) {\r\n            property = '';\r\n        }\r\n        return property;\r\n    }\r\n    public getKeys(): string[] {\r\n        return Object.keys(this.prop);\r\n    }\r\n\r\n    public addProperties(values: Object) {\r\n        if (!values) {\r\n            return;\r\n        }\r\n        if (values['prop']) {\r\n            let prop = values['prop'];\r\n            for (let property in prop) {\r\n                if (prop.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (prop[property] !== null && '' !== prop[property]) {\r\n                    this.setValue(property, prop[property]);\r\n                }\r\n            }\r\n        } else {\r\n            let upd = values['upd'] || {};\r\n            let rem = values['rem'] || {};\r\n\r\n            for (let property in upd) {\r\n                if (upd.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (rem.hasOwnProperty(property) === false) {\r\n                    this.setValue(property, upd[property]);\r\n                } else {\r\n                    // if we have a rem, we wan't to check, if its a valid change (teh old value is the value in rem)\r\n                    if (this.getValue(property) === rem[property]) {\r\n                        this.setValue(property, upd[property]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getValue(attribute: string) {\r\n        return this.prop[attribute];\r\n    }\r\n\r\n    public setValue(attribute: string, newValue: any): void {\r\n        let oldValue = this.prop[attribute];\r\n        if (oldValue === newValue && newValue !== null) {\r\n            return;\r\n        }\r\n        this.prop[attribute] = newValue;\r\n        this.firePropertyChange(attribute, oldValue, newValue);\r\n    }\r\n\r\n    public addTo(attribute: string, newValue: any): boolean {\r\n        let add: boolean;\r\n        if (this.prop[attribute]) {\r\n            if (this.prop[attribute].contains(newValue) === false) {\r\n                add = true;\r\n            }\r\n        } else {\r\n            this.prop[attribute] = [];\r\n            add = true;\r\n        }\r\n        if (add) {\r\n            this.prop[attribute].push(newValue);\r\n            this.firePropertyChange(attribute, null, newValue);\r\n        }\r\n        return add;\r\n    }\r\n\r\n    public removeFrom(attribute: string, newValue: any): boolean {\r\n        if (!this.prop[attribute]) {\r\n            return true;\r\n        }\r\n        let pos: number = this.prop[attribute].indexOf(newValue);\r\n        if (pos < 0) {\r\n            return true;\r\n        }\r\n        this.prop[attribute].splice(pos, 1);\r\n        this.firePropertyChange(attribute, newValue, null);\r\n        return true;\r\n    }\r\n\r\n    public addListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(property);\r\n        if (!listeners) {\r\n            listeners = [];\r\n            this.$listener[Data.nullCheck(property)] = listeners;\r\n        }\r\n        listeners.push(control);\r\n    }\r\n\r\n    public removeListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners = this.getListeners(property);\r\n        if (listeners === null) {\r\n            return;\r\n        }\r\n        let pos = listeners.indexOf(control);\r\n        if (pos >= 0) {\r\n            listeners.splice(pos, 1);\r\n        }\r\n        if (listeners.length === 0 && Data.nullCheck(property) !== '') {\r\n            // only remove, if it's not the default listener list...\r\n            delete this.$listener[property];\r\n        }\r\n    }\r\n\r\n    public hasProperty(property: string): boolean {\r\n        return this.prop.hasOwnProperty(property);\r\n    }\r\n\r\n    public addFrom(attribute: string, oldData: Data): void {\r\n        if (oldData) {\r\n            this.setValue(attribute, oldData.getValue(attribute));\r\n        } else {\r\n            this.setValue(attribute, null);\r\n        }\r\n    }\r\n\r\n    public removeKey(key: string): any {\r\n        if (this.hasProperty(key)) {\r\n            const oldValue = this.prop[key];\r\n            delete this.prop[key];\r\n            return oldValue;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected getListeners(property: string): PropertyChangeSupport[] {\r\n        property = Data.nullCheck(property);\r\n        return this.$listener[property];\r\n    }\r\n\r\n    protected firePropertyChange(attribute: string, oldValue: Object, newValue: Object) {\r\n        attribute = Data.nullCheck(attribute);\r\n        // at first fire for the given property\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(attribute);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n        // now we need to fire the Listeners that wan't to listen to everything\r\n        listeners = this.getListeners(null);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport interface EventHandler {\r\n    canHandle(): boolean;\r\n    handle(event: Event, element: DiagramElement): boolean;\r\n    setActive(active: boolean): void;\r\n}\r\n\r\nexport class EventBus {\r\n    public static CREATE: string = 'Create';\r\n    public static EDITOR: string = 'Editor';\r\n    public static OPENPROPERTIES: string = 'openProperties';\r\n    public static RELOADPROPERTIES: string = 'reloadProperties';\r\n    public static ELEMENTMOUSEDOWN: string = 'ELEMENT:MOUSEDOWN';\r\n    public static ELEMENTMOUSEUP: string = 'ELEMENT:MOUSEUP';\r\n    public static ELEMENTMOUSELEAVE: string = 'ELEMENT:MOUSELEAVE';\r\n    public static ELEMENTMOUSEMOVE: string = 'ELEMENT:MOUSEMOVE';\r\n    public static ELEMENTMOUSEWHEEL: string = 'ELEMENT:MOUSEWHEEL';\r\n    public static ELEMENTCLICK: string = 'ELEMENT:CLICK';\r\n    public static ELEMENTDBLCLICK: string = 'ELEMENT:DBLCLICK';\r\n    public static ELEMENTDRAG: string = 'ELEMENT:DRAG';\r\n    public static ELEMENTDRAGOVER: string = 'ELEMENT:DRAGOVER';\r\n    public static ELEMENTDROP: string = 'ELEMENT:DROP';\r\n    public static ELEMENTDRAGLEAVE: string = 'ELEMENT:DRAGLEAVE';\r\n\r\n    public static EVENTS: string[] = [\r\n        EventBus.CREATE,\r\n        EventBus.EDITOR,\r\n        EventBus.OPENPROPERTIES,\r\n        EventBus.RELOADPROPERTIES,\r\n        EventBus.ELEMENTMOUSEDOWN,\r\n        EventBus.ELEMENTMOUSEUP,\r\n        EventBus.ELEMENTMOUSELEAVE,\r\n        EventBus.ELEMENTMOUSEMOVE,\r\n        EventBus.ELEMENTMOUSEWHEEL,\r\n        EventBus.ELEMENTCLICK,\r\n        EventBus.ELEMENTDRAG,\r\n        EventBus.ELEMENTDBLCLICK,\r\n        EventBus.ELEMENTDRAGOVER,\r\n        EventBus.ELEMENTDROP,\r\n        EventBus.ELEMENTDRAGLEAVE,\r\n    ];\r\n\r\n    private static handlers = {};\r\n\r\n    private static $activeHandler: string = '';\r\n\r\n    public static setActiveHandler(handler: string): void {\r\n        this.$activeHandler = handler;\r\n    }\r\n\r\n    public static isHandlerActiveOrFree(handler: string, notEmpty?: boolean): boolean {\r\n        if (notEmpty) {\r\n            return this.$activeHandler === handler;\r\n        }\r\n        return this.$activeHandler === handler || this.$activeHandler === '' || this.$activeHandler === undefined;\r\n    }\r\n\r\n    public static isAnyHandlerActive(): boolean {\r\n        return !(this.$activeHandler === '' || this.$activeHandler === undefined);\r\n    }\r\n\r\n    public static releaseActiveHandler(): void {\r\n        this.$activeHandler = '';\r\n    }\r\n\r\n    public static getActiveHandler(): string {\r\n        return this.$activeHandler;\r\n    }\r\n\r\n    static register(control: Control, view: Element) {\r\n        let events: string[];\r\n        if (typeof control['getEvents'] === 'function') {\r\n            events = control['getEvents']();\r\n        }\r\n\r\n        if (!events || !view) {\r\n            return;\r\n        }\r\n        for (let event of events) {\r\n            this.registerEvent(view, event, control);\r\n        }\r\n    }\r\n\r\n    static registerEvent(view: Element, event: string, control?: any) {\r\n        const pos: number = event.indexOf(':');\r\n        if (pos > 0) {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        } else {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        }\r\n    }\r\n\r\n    public static publish(element: DiagramElement, evt: Event) {\r\n        let handlers = EventBus.handlers[evt.type];\r\n        if (handlers) {\r\n            for (let handler of handlers) {\r\n                handler.handle(evt, element);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static subscribe(handler: EventHandler, ...eventTypes: string[]) {\r\n        for (let event of eventTypes) {\r\n            let handlers = EventBus.handlers[event];\r\n            if (handlers === null || handlers === undefined) {\r\n                handlers = [];\r\n                EventBus.handlers[event] = handlers;\r\n            }\r\n            handlers.push(handler);\r\n        }\r\n    }\r\n}\r\n","import SimpleEvent from './Event';\r\n\r\nexport default class EventListener {\r\n    private $onUpdate: Function;\r\n\r\n    get onUpdate(): Function {\r\n        return this.$onUpdate;\r\n    }\r\n\r\n    set onUpdate(value: Function) {\r\n        this.$onUpdate = value;\r\n    }\r\n\r\n    update(event: SimpleEvent) {\r\n        this.$onUpdate(event);\r\n    }\r\n}\r\n","// ################################## jsEPS ####################################################\r\nimport {SVGConverter} from './SVGConverter';\r\n\r\nexport class JSEPS {\r\n    private max: number;\r\n    private min: number;\r\n    private inverting: boolean;\r\n    private output: string[];\r\n    private font: number;\r\n\r\n    constructor(options: any) {\r\n        this.max = 0;\r\n        this.min = 999;\r\n        let hasInverting = typeof (options.inverting);\r\n        this.inverting = (options && hasInverting !== 'undefined' ? options.inverting : true);\r\n        this.output = ['%!PS-Adobe-3.0 EPSF-3.0', '1 setlinewidth'];\r\n        this.out('/FSD {findfont exch scalefont def} bind def % In the document prolog: define');\r\n        this.out('/SMS {setfont moveto show} bind def % some useful procedures');\r\n        this.out('/MS {moveto show} bind def');\r\n        this.out('/F1  10  /Helvetica  FSD % At the start of the script: set up');\r\n        this.font = 1;\r\n    }\r\n\r\n    public out(value: string) {this.output.push(value); }\r\n    public rect(x: number, y: number, width: number, height: number, style: string) {\r\n        y = y + (this.inverting ? height : 0);\r\n        if (style && style.indexOf('fill:url(#classelement);') >= 0) {\r\n            this.out('gsave 0.93 0.93 0.93 setrgbcolor newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectfill grestore');\r\n        } else {\r\n            this.out('newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectstroke');\r\n        }\r\n    }\r\n    public setFillColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public y(value: number) {this.max = Math.max(this.max, value); this.min = Math.min(this.min, value); return this.inverting ? '%y(' + value + ')' : value; }\r\n    public getType(): string {\r\n        return 'application/postscript';\r\n    }\r\n\r\n    public getData(): string {\r\n        let t, end, url, text, typ = 'application/postscript', a = document.createElement('a'), data = '', pos, i;\r\n        for (i = 0; i < this.output.length; i += 1) {\r\n            text = this.output[i];\r\n            if (this.inverting) {\r\n                while ((pos = text.indexOf('%y')) >= 0) {\r\n                    end = text.indexOf(')', pos);\r\n                    t = this.max - parseInt(text.substring(pos + 3, end), 10);\r\n                    text = text.substring(0, pos) + t + text.substring(end + 1);\r\n                }\r\n            }\r\n            data = data + text + '\\r\\n';\r\n        }\r\n        return data;\r\n    }\r\n\r\n    public setDrawColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public ellipse(cx: number, cy: number, rx: number, ry: number, colorMode: string) {/*FIXME*/}\r\n    public circle(cx: number, cy: number, r: number, colorMode: string) {/*FIXME*/}\r\n    public setTextColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public text(x: number, y: number, text: string) {this.out('(' + text.replace('&lt;', '<').replace('&gt;', '>') + ') ' + x + ' ' + this.y(y) + ' F1 SMS'); }\r\n    public lineto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' lineto'); this.out('stroke'); }\r\n    public moveto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' moveto'); }\r\n    public line(x1: number, y1: number, x2: number, y2: number) {this.out('newpath ' + x1 + ' ' + this.y(y1) + ' moveto ' + x2 + ' ' + this.y(y2) + ' lineto stroke'); }\r\n    public setLineWidth(value: string) {this.out(value + ' setlinewidth'); }\r\n    public setFont(value: string) {this.out('/F' + (this.font += 1) + ' 10 /' + value + ' FSD'); }\r\n}\r\n","import { Graph } from './elements/Graph';\r\n\r\n/*const buttons = {\r\n    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    clazz: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n};\r\n*/\r\nexport default class Palette {\r\n\r\n    private graph: Graph;\r\n    private palette: Element;\r\n    private root: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n        let div = document.createElement('div');\r\n        div.className = 'palette';\r\n        div.id = 'palette';\r\n        this.root = div;\r\n        this.palette = div;\r\n        for (let key in graph.nodeFactory) {\r\n            let element = graph.nodeFactory[key];\r\n            let control = new element();\r\n            let icon = control.getToolBarIcon();\r\n            if (icon) {\r\n                let button = <HTMLButtonElement>document.createElement('button');\r\n                button.className = 'add' + key + 'Btn';\r\n                button.innerHTML = icon.outerHTML;\r\n                button.onclick = e => {\r\n                    let nextFreePosition = this.graph.getNextFreePosition();\r\n                    // let node = this.graph.addElementWithValues(graph.nodeFactory[key], {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    let node = this.graph.addElementWithValues(key, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    this.graph.drawElement(node);\r\n                };\r\n                this.palette.appendChild(button);\r\n            }\r\n        }\r\n        // this.graph.nodeFactory\r\n//        this.addButtons();\r\n    }\r\n\r\n    public show() {\r\n        document.body.appendChild(this.root);\r\n    }\r\n\r\n    private addButtons() {\r\n        /*for (let btn in buttons) {\r\n            let button = <HTMLButtonElement>document.createElement('button');\r\n            button.className = 'add' + btn + 'Btn';\r\n            button.innerHTML = buttons[btn];\r\n            button.onclick = e => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let node = this.graph.addElementWithValues(btn, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                this.graph.drawElement(node);\r\n            };\r\n            this.palette.appendChild(button);\r\n        }*/\r\n    }\r\n}\r\n","import {Graph} from './elements/Graph';\r\nimport * as edges from './elements/edges';\r\nimport {EventBus, EventHandler} from './EventBus';\r\nimport {DiagramElement} from './elements/BaseElements';\r\nimport {Util} from './util';\r\n\r\nexport class PanelGroup implements EventHandler {\r\n    private graph: Graph;\r\n    private selectedElement: DiagramElement;\r\n    private clearPanel: Panel;\r\n    private generatePanel: Panel;\r\n    private propertiesMasterPanel: HTMLDivElement;\r\n    private propertiesContent: HTMLDivElement;\r\n    private propHeaderLabel: HTMLDivElement;\r\n    private propHeaderButton: HTMLButtonElement;\r\n    private selectedPanel: Panel;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.clearPanel = new ClearPanel(this);\r\n        this.generatePanel = new GeneratePanel(this);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        this.handleOpenProperties(event, element);\r\n\r\n        if (event.type === EventBus.RELOADPROPERTIES\r\n            && this.selectedElement && element.id === this.selectedElement.id) {\r\n            this.handleEvent(event, element);\r\n        }\r\n\r\n        // the same element was clicked. do nothing\r\n        if (this.selectedElement && this.selectedElement.id === element.id) {\r\n            return true;\r\n        }\r\n        if (element.id === 'RootElement') {\r\n            this.setActivePanel(this.clearPanel);\r\n        }\r\n        if (element.id === 'GenerateProp') {\r\n            this.setActivePanel(this.generatePanel);\r\n        }\r\n        this.selectedElement = element;\r\n\r\n        return true;\r\n    }\r\n\r\n    public getGraph(): Graph {\r\n        return this.graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(PanelGroup.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(PanelGroup.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n     public handleEvent(event: any, element: any) {\r\n        // DO NOTHING\r\n    }\r\n\r\n    public show() {\r\n        // main div to display any properties, class, edge, etc.\r\n        this.propertiesMasterPanel = document.createElement('div');\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n\r\n        this.propertiesContent = document.createElement('div');\r\n        this.propertiesContent.className = 'properties-hidden';\r\n\r\n        this.propHeaderLabel = document.createElement('div');\r\n        this.propHeaderLabel.style.display = 'inherit';\r\n        this.propHeaderLabel.style.cursor = 'pointer';\r\n        this.propHeaderLabel.onclick = e => this.toogleProperties(e);\r\n\r\n        // button to display and hide the properties of e.g. a class\r\n        this.propHeaderButton = document.createElement('button');\r\n        this.propHeaderButton.className = 'btnHideProp';\r\n        this.propHeaderButton.style.cssFloat = 'right';\r\n        this.propHeaderButton.onclick = e => this.toogleProperties(e);\r\n\r\n        let propertiesHeader = document.createElement('div');\r\n        propertiesHeader.style.display = 'inline';\r\n        propertiesHeader.appendChild(this.propHeaderLabel);\r\n        propertiesHeader.appendChild(this.propHeaderButton);\r\n\r\n        this.propertiesMasterPanel.appendChild(propertiesHeader);\r\n        this.propertiesMasterPanel.appendChild(this.propertiesContent);\r\n        document.body.appendChild(this.propertiesMasterPanel);\r\n\r\n        this.setActivePanel(this.clearPanel);\r\n    }\r\n\r\n    public setActivePanel(panel: Panel) {\r\n        this.selectedPanel = panel;\r\n        this.propHeaderLabel.innerHTML = panel.getHeaderText();\r\n        if (this.propertiesContent) {\r\n            while (this.propertiesContent.hasChildNodes()) {\r\n                this.propertiesContent.removeChild(this.propertiesContent.childNodes[0]);\r\n            }\r\n        }\r\n        panel.show();\r\n\r\n        panel.showFirstTab();\r\n        if (panel !== this.clearPanel) {\r\n            this.showProperties(null);\r\n        } else {\r\n            this.hideProperties(null);\r\n        }\r\n    }\r\n\r\n    public getProperiesContent(): HTMLDivElement {\r\n        return this.propertiesContent;\r\n    }\r\n\r\n    private handleOpenProperties(event: Event, element: DiagramElement) {\r\n        if (event.type === 'dblclick') {\r\n            this.showProperties(event);\r\n        }\r\n    }\r\n\r\n    private showProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Show\r\n        this.propHeaderButton.innerHTML = '&#8897;';\r\n        this.propHeaderButton.title = 'Hide properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel';\r\n        this.propertiesContent.className = 'properties';\r\n    }\r\n\r\n    private toogleProperties(evt: Event): void {\r\n        if (this.propHeaderButton.title === 'Show properties') {\r\n            this.showProperties(evt);\r\n        } else {\r\n            this.hideProperties(evt);\r\n        }\r\n    }\r\n\r\n    private hideProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Hide\r\n        this.propHeaderButton.innerHTML = '&#8896;';\r\n        this.propHeaderButton.title = 'Show properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n        this.propertiesContent.className = 'properties-hidden';\r\n    }\r\n}\r\n\r\nexport abstract class Panel {\r\n    protected divPropertiesPanel: HTMLDivElement;\r\n    protected divPropertiesTabbedPanel: HTMLDivElement;\r\n    protected element: any;\r\n    protected group: PanelGroup;\r\n    private panelItem: PanelItem[] = [];\r\n\r\n    constructor(group: PanelGroup, element: any) {\r\n        // get the properties content panel\r\n        this.divPropertiesPanel = document.createElement('div');\r\n        this.element = element;\r\n        this.group = group;\r\n\r\n        this.divPropertiesTabbedPanel = document.createElement('div');\r\n        this.divPropertiesTabbedPanel.className = 'tabbedpane';\r\n\r\n        // add tabbed panel\r\n        this.divPropertiesPanel.appendChild(this.divPropertiesTabbedPanel);\r\n    }\r\n\r\n    public show(): void {\r\n        let propertiesContent: HTMLDivElement = this.group.getProperiesContent();\r\n        if (this.panelItem.length > 1) {\r\n            propertiesContent.appendChild(this.getPropertiesTabbedPanel());\r\n        }\r\n\r\n        propertiesContent.appendChild(this.getPropertiesPanel());\r\n    }\r\n\r\n    public getPropertiesTabbedPanel(): HTMLDivElement {\r\n        return this.divPropertiesTabbedPanel;\r\n    }\r\n\r\n    public getPropertiesPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return '';\r\n    }\r\n\r\n    public showFirstTab(): void {\r\n        if (this.panelItem.length > 0) {\r\n            this.openTab(this.panelItem[0]);\r\n        }\r\n    }\r\n\r\n    protected createTabElement(tabText: string, tabValue: string, item: PanelItem): PanelItem {\r\n        let tabElementBtn = document.createElement('button');\r\n        tabElementBtn.className = 'tablinks';\r\n        tabElementBtn.innerText = tabText;\r\n        tabElementBtn.value = tabValue;\r\n\r\n        if (item === null) {\r\n            item = new PanelItem(this);\r\n        }\r\n        item.withButton(tabElementBtn);\r\n\r\n        tabElementBtn.onclick = () => this.openTab(item);\r\n        this.divPropertiesTabbedPanel.appendChild(tabElementBtn);\r\n        this.panelItem.push(item);\r\n        return item;\r\n    }\r\n\r\n    protected openTab(panelItem: PanelItem): void {\r\n        for (let key in this.panelItem) {\r\n            let child = this.panelItem[key];\r\n            if (child !== panelItem) {\r\n                 child.deactive();\r\n            }\r\n        }\r\n        panelItem.active();\r\n        // hide other tabcontent\r\n        if (this.divPropertiesPanel) {\r\n            while (this.divPropertiesPanel.hasChildNodes()) {\r\n                this.divPropertiesPanel.removeChild(this.divPropertiesPanel.childNodes[0]);\r\n            }\r\n        }\r\n\r\n        // ADD\r\n        if (panelItem.getContent()) {\r\n            this.divPropertiesPanel.appendChild(panelItem.getContent());\r\n        }\r\n    }\r\n}\r\n\r\nexport class GeneratePanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n\r\n        let item: PanelItem = this.createTabElement('General', 'General', null);\r\n\r\n        // Workspace and generate code stuff\r\n        let inputGenerateWorkspace: HTMLInputElement =  <HTMLInputElement> Util.createHTML({tag: 'input', id: 'workspace', type: 'text', placeholder: 'Type your Folder for generated code...', value: 'src/main/java', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Folder:', inputGenerateWorkspace);\r\n\r\n        let inputGeneratePackage: HTMLInputElement = <HTMLInputElement> Util.createHTML({tag: 'input', id: 'package', type: 'text', placeholder: 'Type your workspace for generated code...', value: '', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Package:', inputGeneratePackage);\r\n\r\n        let options = document.createElement('div');\r\n        options.style.textAlign = 'center';\r\n        options.style.margin = '3';\r\n        options.style.padding = '5';\r\n\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(options);\r\n\r\n        options.style.borderStyle = 'groove';\r\n        options.style.borderRadius = '10px';\r\n\r\n        let btnGenerate = document.createElement('button');\r\n        btnGenerate.textContent = 'Generate';\r\n        btnGenerate.title = 'Generate code into your workspace';\r\n        btnGenerate.className = 'OptionElement';\r\n\r\n        let that = this;\r\n        btnGenerate.onclick = () => {\r\n            let workspace = inputGeneratePackage.value;\r\n            if (workspace.length === 0) {\r\n                alert('No workspace set.\\nEnter first your workspace');\r\n                inputGeneratePackage.focus();\r\n                return;\r\n            }\r\n            that.group.getGraph().generate(workspace, inputGenerateWorkspace.value);\r\n        };\r\n        options.appendChild(btnGenerate);\r\n        options.appendChild(document.createElement('hr'));\r\n        options.appendChild(document.createElement('br'));\r\n\r\n        let btnAutoLayout = Util.createHTML({tag: 'button', className: 'OptionElement', value: 'Auto Layout', style: {marginRight: '10px'}, onclick: () => {\r\n                that.group.getGraph().layout();\r\n            }});\r\n\r\n        options.appendChild(btnAutoLayout);\r\n\r\n        // delete all nodes\r\n        let btnDeleteAll = document.createElement('button');\r\n        btnDeleteAll.className = 'OptionElement';\r\n        btnDeleteAll.textContent = 'Delete All';\r\n        btnDeleteAll.title = 'Delete all nodes from diagram';\r\n\r\n        btnDeleteAll.onclick = () => {\r\n            let confirmDelete = confirm('All classes will be deleted!');\r\n            if (!confirmDelete) {\r\n                return;\r\n            }\r\n            that.group.getGraph().$graphModel.removeAllElements();\r\n        };\r\n        btnDeleteAll.style.marginRight = '10px';\r\n        options.appendChild(btnDeleteAll);\r\n\r\n        // export stuff\r\n        let exportTypes: string[] = ['Export', 'HTML', 'JSON', 'PDF', 'PNG', 'SVG'];\r\n        let selectExport = document.createElement('select');\r\n\r\n        exportTypes.forEach(type => {\r\n            if (!(!window['jsPDF'] && type === 'PDF')) {\r\n                let option = document.createElement('option');\r\n                option.value = type;\r\n                option.textContent = type;\r\n                selectExport.appendChild(option);\r\n            }\r\n        });\r\n\r\n        selectExport.onchange = (evt) => {\r\n            let selectedExportType = selectExport.options[selectExport.selectedIndex].value;\r\n            selectExport.selectedIndex = 0;\r\n            that.group.getGraph().saveAs(selectedExportType);\r\n        };\r\n        selectExport.className = 'OptionElement';\r\n        options.appendChild(selectExport);\r\n        options.appendChild(document.createElement('br'));\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Properties';\r\n    }\r\n\r\n}\r\n\r\nexport class ClearPanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Select any element to see its properties';\r\n    }\r\n}\r\n\r\nexport class PanelItem {\r\n    protected panel: Panel;\r\n    protected label: string;\r\n    protected button: HTMLButtonElement;\r\n    protected content: HTMLDivElement = <HTMLDivElement>Util.create({tag: 'div', className: 'tabContent'});\r\n\r\n    constructor(panel: Panel, label?: string) {\r\n        this.panel = panel;\r\n        this.label = label;\r\n    }\r\n\r\n    public active(): void {\r\n        if (this.getButton()) {\r\n            this.getButton().className += ' active';\r\n        }\r\n    }\r\n\r\n    public deactive(): void {\r\n        if (this.getButton()) {\r\n            Util.removeClass(this.getButton(), 'active');\r\n        }\r\n    }\r\n\r\n    public withButton(button: HTMLButtonElement): PanelItem {\r\n        this.button = button;\r\n        return this;\r\n    }\r\n\r\n    public withContent(element: HTMLElement): PanelItem {\r\n        this.content.appendChild(element);\r\n        return this;\r\n    }\r\n\r\n    public withInput(labelText: string, element: HTMLElement): PanelItem {\r\n        let group: HTMLDivElement = <HTMLDivElement> Util.createHTML({tag: 'div'});\r\n        let label = Util.createHTML({tag: 'label', for: element.id, value: labelText});\r\n        group.appendChild(label);\r\n        group.appendChild(element);\r\n\r\n        this.content.appendChild(group);\r\n        return this;\r\n    }\r\n\r\n    public getButton(): HTMLButtonElement {\r\n        return this.button;\r\n    }\r\n\r\n    public getContent(): HTMLDivElement {\r\n        return this.content;\r\n    }\r\n\r\n   public getHeader(): string {\r\n        return this.label;\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\nimport Data from './Data';\r\n\r\nexport class PropertyBinder implements PropertyChangeSupport {\r\n    private propertyClass1: string;\r\n    private propertyClass2: string;\r\n    private data1: Data;\r\n    private data2: Data;\r\n    // works like a lock\r\n    private applyingChange: boolean = false;\r\n\r\n    constructor(data1: Data, data2: Data, propertyClass1: string, propertyClass2: string) {\r\n        this.data1 = data1;\r\n        this.data2 = data2;\r\n        this.propertyClass1 = propertyClass1;\r\n        this.propertyClass2 = propertyClass2;\r\n    }\r\n    static bind(data1: Data, data2: Data, property1: string, property2: string) {\r\n        if (!data1 || !data2 || !property1) {\r\n            console.error('NullValue!!');\r\n            return null;\r\n        }\r\n        const propertyBinder = new PropertyBinder(data1, data2, property1, property2);\r\n        propertyBinder.bind();\r\n        return propertyBinder;\r\n    }\r\n\r\n    propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        if (!this.applyingChange) {\r\n            this.applyingChange = true;\r\n            if (entity === this.data1) {\r\n                // fire to data2\r\n                this.data2.setValue(this.propertyClass2, newValue);\r\n            } else if (entity === this.data2) {\r\n                // fire to data1\r\n                this.data1.setValue(this.propertyClass1, newValue);\r\n            }\r\n            this.applyingChange = false;\r\n        }\r\n    }\r\n\r\n    protected bind() {\r\n        // public addListener(control: Control, property?: string)\r\n        // todo: set value immediately\r\n        this.data1.setValue(this.propertyClass1, this.data2.getValue(this.propertyClass2));\r\n\r\n        this.data1.addListener(this, this.propertyClass1);\r\n        this.data2.addListener(this, this.propertyClass2);\r\n    }\r\n\r\n    protected unbind() {\r\n        // public addListener(control: Control, property?: string)\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n    }\r\n}\r\n","// ################################## RGBColor ####################################################\r\nexport class RGBColor {\r\n    public  ok: boolean;\r\n    public r: number;\r\n    public g: number;\r\n    public b: number;\r\n\r\n    constructor(value: string) {\r\n        this.ok = false;\r\n        if (value === 'none') {\r\n            return;\r\n        }\r\n        let computedColor, div = document.createElement('div');\r\n        div.style.backgroundColor = value;\r\n        document.body.appendChild(div);\r\n        computedColor = window.getComputedStyle(div).backgroundColor;\r\n        // cleanup temporary div.\r\n        document.body.removeChild(div);\r\n        this.convert(computedColor);\r\n    }\r\n    public convert(value: any) {\r\n        let values, regex = /rgb *\\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\\)/;\r\n        values = regex.exec(value);\r\n        this.r = parseInt(values[1], 10);\r\n        this.g = parseInt(values[2], 10);\r\n        this.b = parseInt(values[3], 10);\r\n        this.ok = true;\r\n    }\r\n\r\n    public toRGB(): string {return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; }\r\n    public toHex(): string {\r\n        return '#' + (this.r + 0x10000).toString(16).substring(3).toUpperCase() + (this.g + 0x10000).toString(16).substring(3).toUpperCase() + (this.b + 0x10000).toString(16).substring(3).toUpperCase();\r\n    }\r\n}\r\n","/*\r\n NetworkParser\r\n Copyright (c) 2011 - 2014, Stefan Lindel\r\n All rights reserved.\r\n\r\n Licensed under the EUPL, Version 1.1 or (as soon they\r\n will be approved by the European Commission) subsequent\r\n versions of the EUPL (the \"Licence\");\r\n You may not use this work except in compliance with the Licence.\r\n You may obtain a copy of the Licence at:\r\n\r\n http://ec.europa.eu/idabc/eupl5\r\n\r\n Unless required by applicable law or agreed to in\r\n writing, software distributed under the Licence is\r\n distributed on an \"AS IS\" basis,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\r\n express or implied.\r\n See the Licence for the specific language governing\r\n permissions and limitations under the Licence.\r\n*/\r\nimport {RGBColor} from './RGBColor';\r\nimport {JSEPS} from \"./JSEPS\";\r\n\r\nconst epsSvgAttr = {\r\n    // allowed attributes. all others are removed from the preview.\r\n    g: ['stroke', 'fill', 'stroke-width'],\r\n    line: ['x1', 'y1', 'x2', 'y2', 'stroke', 'stroke-width'],\r\n    rect: ['x', 'y', 'width', 'height', 'stroke', 'fill', 'stroke-width'],\r\n    ellipse: ['cx', 'cy', 'rx', 'ry', 'stroke', 'fill', 'stroke-width'],\r\n    circle: ['cx', 'cy', 'r', 'stroke', 'fill', 'stroke-width'],\r\n    text: ['x', 'y', 'font-size', 'font-family', 'text-anchor', 'font-weight', 'font-style', 'fill'],\r\n    path: ['']\r\n};\r\nexport class SVGConverter {\r\n    private k: number;\r\n    private remove: boolean;\r\n    private target: any;\r\n\r\n    constructor(element: any, target: any, options: any) {\r\n        this.k = 1.0;\r\n        let hasScale = typeof (options.scale), hasRemoveInvalid = typeof (options.removeInvalid);\r\n        this.k = (options && hasScale !== 'undefined' ? options.scale : 1.0);\r\n        this.remove = (options && hasRemoveInvalid !== 'undefined' ? options.removeInvalid : false);\r\n        this.target = target;\r\n        this.parse(element);\r\n    }\r\n\r\n    public parse(element: any) {\r\n        let el, i, n, colorMode, hasFillColor, fillRGB, fillColor, strokeColor, strokeRGB, fontType, pdfFontSize, x, y,\r\n            box, xOffset;\r\n        if (!element) {\r\n            return;\r\n        }\r\n        if (typeof element === 'string') {\r\n            el = document.createElement('div');\r\n            el.innerHTML = element;\r\n            element = el.childNodes[0];\r\n        }\r\n        for (i = 0; i < element.children.length; i += 1) {\r\n            n = element.children[i];\r\n            colorMode = null;\r\n            hasFillColor = false;\r\n            if ('g,line,rect,ellipse,circle,text'.indexOf(n.tagName) >= 0) {\r\n                fillColor = n.getAttribute('fill');\r\n                if (fillColor) {\r\n                    fillRGB = new RGBColor(fillColor);\r\n                    if (fillRGB.ok) {\r\n                        hasFillColor = true;\r\n                        colorMode = 'F';\r\n                    }\r\n                }\r\n            }\r\n            if ('g,line,rect,ellipse,circle'.indexOf(n.tagName) >= 0) {\r\n                if (hasFillColor) {\r\n                    this.target.setFillColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                }\r\n                strokeColor = n.getAttribute('stroke');\r\n                if (n.hasAttribute('stroke-width')) {\r\n                    this.target.setLineWidth(this.attr(n, 'stroke-width'));\r\n                }\r\n                if (strokeColor) {\r\n                    strokeRGB = new RGBColor(strokeColor);\r\n                    if (strokeRGB.ok) {\r\n                        this.target.setDrawColor(strokeRGB.r, strokeRGB.g, strokeRGB.b);\r\n                        if (colorMode === 'F') {\r\n                            colorMode = 'FD';\r\n                        } else if (!hasFillColor) {\r\n                            colorMode = 'S';\r\n                        }\r\n                    } else {\r\n                        colorMode = null;\r\n                    }\r\n                }\r\n            }\r\n            // console.log(\"write \"+n.tagName);\r\n            switch (n.tagName.toLowerCase()) {\r\n                case 'svg':\r\n                case 'a':\r\n                case 'g':\r\n                    this.parse(n);\r\n                    break;\r\n                case 'line':\r\n                    this.target.line(this.attr(n, 'x1'), this.attr(n, 'y1'), this.attr(n, 'x2'), this.attr(n, 'y2'));\r\n                    break;\r\n                case 'rect':\r\n                    this.target.rect(this.attr(n, 'x'), this.attr(n, 'y'), this.attr(n, 'width'), this.attr(n, 'height'), n.getAttribute('style'));\r\n                    break;\r\n                case 'ellipse':\r\n                    this.target.ellipse(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'rx'), this.attr(n, 'ry'), colorMode);\r\n                    break;\r\n                case 'circle':\r\n                    this.target.circle(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'r'), colorMode);\r\n                    break;\r\n                case 'text':\r\n                    if (n.hasAttribute('font-family')) {\r\n                        switch (n.getAttribute('font-family').toLowerCase()) {\r\n                            case 'serif':\r\n                                this.target.setFont('times');\r\n                                break;\r\n                            case 'monospace':\r\n                                this.target.setFont('courier');\r\n                                break;\r\n                            default:\r\n                                n.getAttribute('font-family', 'sans-serif');\r\n                                this.target.setFont('Helvetica');\r\n                        }\r\n                    }\r\n                    if (hasFillColor) {\r\n                        this.target.setTextColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                    }\r\n                    if (this.target instanceof JSEPS) {\r\n                        this.target.text(this.attr(n, 'x'), this.attr(n, 'y'), n.innerHTML);\r\n                        break;\r\n                    }\r\n                    fontType = '';\r\n                    if (n.hasAttribute('font-weight')) {\r\n                        if (n.getAttribute('font-weight') === 'bold') {\r\n                            fontType = 'bold';\r\n                        }\r\n                    }\r\n                    if (n.hasAttribute('font-style')) {\r\n                        if (n.getAttribute('font-style') === 'italic') {\r\n                            fontType += 'italic';\r\n                        }\r\n                    }\r\n                    this.target.setFontType(fontType);\r\n                    pdfFontSize = 16;\r\n                    if (n.hasAttribute('font-size')) {\r\n                        pdfFontSize = parseInt(n.getAttribute('font-size'), 10);\r\n                    }\r\n                    box = n.getBBox();\r\n                    // FIXME: use more accurate positioning!!\r\n                    x = this.attr(n, 'x');\r\n                    y = this.attr(n, 'y');\r\n                    xOffset = 0;\r\n                    if (n.hasAttribute('text-anchor')) {\r\n                        switch (n.getAttribute('text-anchor')) {\r\n                            case 'end':\r\n                                xOffset = box.width;\r\n                                break;\r\n                            case 'middle':\r\n                                xOffset = box.width / 2;\r\n                                break;\r\n                            case 'start':\r\n                                break;\r\n                            case 'default':\r\n                                n.getAttribute('text-anchor', 'start');\r\n                                break;\r\n                        }\r\n                        x = x - (xOffset * this.k);\r\n                    }\r\n                    this.target.setFontSize(pdfFontSize).text(x, y, n.innerHTML);\r\n                    break;\r\n                default:\r\n                    if (this.remove) {\r\n                        console.log('cant translate to target:', n);\r\n                        element.removeChild(n);\r\n                        i -= 1;\r\n                    }\r\n            }\r\n        }\r\n    }\r\n\r\n    public attr(node: any, name: string) {\r\n        return this.k * parseInt(node.getAttribute(name), 10);\r\n    }\r\n}\r\n","import {Control} from './Control';\r\n\r\nexport class ScrumBoard extends Control {\r\n    public static cards = [0, 0.5, 1, 2, 3, 5, 8, 13, 20, 40, 100, '?', 'Coffee'];\r\n    private $selected: HTMLDivElement;\r\n    private $board: HTMLDivElement;\r\n\r\n    constructor() {\r\n        super();\r\n        this.redraw();\r\n    }\r\n\r\n    public redraw(): void {\r\n        if (this.$board) {\r\n            while (this.$board.children.length > 0 ) {\r\n                this.$board.removeChild(this.$board.children[0]);\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('div');\r\n            this.$selected = document.createElement('div');\r\n            this.$board = document.createElement('div');\r\n            this.$view.appendChild(this.$board);\r\n            this.$view.appendChild(this.$selected);\r\n        }\r\n        this.$view.className = 'ScrumBoard';\r\n        for ( let i = 0; i < ScrumBoard.cards.length; i++) {\r\n            let card = document.createElement('div');\r\n            card.className = 'ScrumCard';\r\n            card.innerHTML = <string>ScrumBoard.cards[i];\r\n            card['pokervalue'] = <string>ScrumBoard.cards[i];\r\n            card.onclick = e => {\r\n                this.onClick(<HTMLDivElement>e.target);\r\n            };\r\n            this.$board.appendChild(card);\r\n        }\r\n    }\r\n\r\n    public getSVG() {\r\n        this.redraw();\r\n        return this.$view;\r\n    }\r\n\r\n    public onClick(target: HTMLDivElement): void {\r\n        console.log(target['pokervalue']);\r\n\r\n        while (this.$selected.children.length > 0 ) {\r\n            this.$selected.removeChild(this.$selected.children[0]);\r\n        }\r\n        let card = document.createElement('div');\r\n        card.className = 'ScrumCard';\r\n        card['pokervalue'] = target['pokervalue'];\r\n        card.onclick = e => {\r\n            this.onShow(<HTMLDivElement>e.target);\r\n        };\r\n        this.$selected.appendChild(card);\r\n        this.$board['style']['display'] = 'none';\r\n    }\r\n\r\n    public onShow(target: HTMLDivElement): void {\r\n        target.innerHTML = target['pokervalue'];\r\n    }\r\n}\r\n","import {Graph} from './main';\r\nimport {SymbolLibary} from './elements/nodes/Symbol';\r\nimport {EventBus} from './EventBus';\r\n\r\nexport class Toolbar {\r\n\r\n    private graph: Graph;\r\n    private mainDiv: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public show(): void {\r\n        if (this.mainDiv) {\r\n            return;\r\n        }\r\n\r\n        this.mainDiv = document.createElement('div');\r\n        this.mainDiv.className = 'toolbar';\r\n\r\n        let h1Logo = document.createElement('h1');\r\n        h1Logo.className = 'logo';\r\n        h1Logo.textContent = 'DiagramJS';\r\n\r\n        let node = {type: 'Hamburger', property: 'HTML', width: 24, height: 24, id: 'GenerateProp'};\r\n        let hamburger = SymbolLibary.draw( node);\r\n        EventBus.registerEvent(hamburger, 'click', node);\r\n        this.mainDiv.appendChild(hamburger);\r\n\r\n        this.mainDiv.appendChild(h1Logo);\r\n        document.body.appendChild(this.mainDiv);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 06.03.2017.\r\n */\r\nimport Data from './Data';\r\n\r\n// export default class Data {\r\n//    public values = {};\r\n//    id: string;\r\n//    $listener: Control[] = [];\r\n//    property: string;\r\nexport namespace UML {\r\n    export class Clazz extends Data {\r\n        public static NAME: string = 'name';\r\n        public static ATTRIBUTES: string = 'attributes';\r\n        public static METHODS: string = 'methods';\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Clazz';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n\r\n        public getAttributes() {\r\n            return this.prop[Clazz.ATTRIBUTES];\r\n        }\r\n\r\n        public addToAttributes(newValue: string) {\r\n            this.addTo(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n\r\n        public removeFromAttributes(newValue: string) {\r\n            this.removeFrom(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n    }\r\n\r\n    export class Attribute extends Data {\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Attribute';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n    }\r\n\r\n    export class Methods extends Data {\r\n\r\n    }\r\n}\r\n\r\nwindow['UML'] = UML;\r\n","import {Control} from './Control';\r\n\r\nexport class VirtualKeyBoard extends Control {\r\n    constructor(data: any) {\r\n        super();\r\n        if (!data) {\r\n            data = this.getDefault();\r\n        }\r\n        let board = document.createElement('div');\r\n        this.$viewData = data;\r\n\r\n        for (let type in data) {\r\n            if (type === 'normal') {\r\n                for (let line in data[type]) {\r\n                    let lineBoard = document.createElement('div');\r\n                    lineBoard.className = 'vkLine';\r\n                    for (let key in data[type][line]) {\r\n                        let btn: HTMLButtonElement = document.createElement('button');\r\n                        let keyTag = data[type][line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                        btn.ontouchend = () => {this.action(btn); };\r\n                        btn.onclick = () => {this.action(btn); };\r\n                        lineBoard.appendChild(btn);\r\n                    }\r\n                    board.appendChild(lineBoard);\r\n                }\r\n            }\r\n        }\r\n        this.$view = board;\r\n    }\r\n\r\n    public action(btn: HTMLButtonElement) {\r\n        if (btn['key'] === '{Shift}') {\r\n            if ( btn.className === 'vkbuttonAction') {\r\n                let keys = this.$viewData['normal'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                    }\r\n                }\r\n            } else if ( btn.className === 'vkbutton') {\r\n                let keys = this.$viewData['shift'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbuttonAction');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        alert(btn);\r\n    }\r\n\r\n    public getDefault(): any {\r\n        let format = {\r\n            normal: [\r\n                ['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '?', '´', '{Bksp}'],\r\n                ['{Tab}', 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+'],\r\n                ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '#', '{enter}'],\r\n                ['{Shift}', '<', 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n// '{left}', '{up}', '{down}','{right}', '{Cancel}']\r\n            ],\r\n            shift: [\r\n                ['°', '!', '\"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '`', '{Bksp}'],\r\n                ['{Tab}', 'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', 'O', 'P', 'Ü', '*'],\r\n                ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', '\\'', '{enter}'],\r\n                ['{Shift}', '>', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n            ]\r\n        };\r\n        return format;\r\n    }\r\n\r\n    public getBoard() {\r\n        return this.$view;\r\n    }\r\n\r\n    private setButtonValue(keyTag: string, btn: HTMLButtonElement, shiftClass: string) {\r\n        btn.className = 'vkbutton';\r\n        btn['key'] = keyTag;\r\n        btn['type'] = 'normal';\r\n        if (keyTag.substring(0, 1) === '{') {\r\n            if (keyTag === '{Bksp}') {\r\n                btn.innerHTML = 'Bksp';\r\n            } else if (keyTag === '{Tab}') {\r\n                btn.innerHTML = '&#8677; Tab';\r\n            } else if (keyTag === '{enter}') {\r\n                btn.innerHTML = 'enter';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Shift}') {\r\n                btn.innerHTML = 'Shift';\r\n                btn.className = shiftClass;\r\n            } else if (keyTag === '{Accept}') {\r\n                btn.innerHTML = 'Accept';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Alt}') {\r\n                btn.innerHTML = 'Alt';\r\n            } else if (keyTag === '{Space}') {\r\n                btn.innerHTML = '&nbsp;';\r\n                btn.className = 'vkbuttonSpace';\r\n            } else if (keyTag === '{left}') {\r\n                btn.innerHTML = '&#8592';\r\n            } else if (keyTag === '{right}') {\r\n                btn.innerHTML = '&#8594;';\r\n            } else if (keyTag === '{up}') {\r\n                btn.innerHTML = '&#8593;';\r\n            } else if (keyTag === '{down}') {\r\n                btn.innerHTML = '&#8595;';\r\n            } else if (keyTag === '{Cancel}') {\r\n                btn.innerHTML = 'Cancel';\r\n                btn.className = 'vkbuttonAction';\r\n            }\r\n        } else {\r\n            btn.innerHTML = keyTag;\r\n        }\r\n    }\r\n}\r\n","import {Adapter} from '../Adapter';\r\n\r\nexport class JavaAdapter extends Adapter {\r\n    constructor() {\r\n        super();\r\n        this.id = 'JavaAdapter';\r\n    }\r\n    update(evt: Object): boolean {\r\n        if (this.isActive()) {\r\n            window['JavaBridge'].executeChange(evt);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public isActive(): boolean {\r\n        return window['JavaBridge'];\r\n    }\r\n}\r\n","export * from './JavaAdapter';\r\n","import { Util } from '../util';\r\nimport { Control } from '../Control';\r\n\r\nexport interface Size {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\ninterface GraphElement {\r\n    getSize(): Point;\r\n\r\n    getPos(): Point;\r\n\r\n    getCenter(): Point;\r\n\r\n    getSVG(): Element;\r\n\r\n    getCanvas(): Element;\r\n\r\n    getEvents(): string[];\r\n\r\n    withPos(x: number, y: number): GraphElement;\r\n\r\n    load(data: any): any;\r\n\r\n    getToolBarIcon(): Element;\r\n\r\n    loadProperties(properties: any): void;\r\n}\r\n\r\nexport abstract class DiagramElement extends Control implements GraphElement {\r\n\r\n    protected $isDraggable: boolean = true;\r\n    protected $labelHeight = 25;\r\n    protected $labelFontSize = 14;\r\n    private $pos: Point = new Point();\r\n    private $size: Point = new Point();\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getPos(): Point {\r\n        return this.$pos;\r\n    }\r\n\r\n    public getSize(): Point {\r\n        return this.$size;\r\n    }\r\n\r\n    public getCenter(): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        return new Point(pos.x + size.x / 2, pos.y + size.y / 2);\r\n    }\r\n\r\n    public getCenterPosition(p: string): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let offset = this['$' + p];\r\n        let center = this.getCenter();\r\n        if (p === Point.DOWN) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y + size.y, Point.DOWN);\r\n        }\r\n        if (p === Point.UP) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y, Point.UP);\r\n        }\r\n        if (p === Point.LEFT) {\r\n            return new Point(pos.x, Math.min(center.y + offset, pos.y + size.y), Point.LEFT);\r\n        }\r\n        if (p === Point.RIGHT) {\r\n            return new Point(pos.x + size.x, Math.min(center.y + offset, pos.y + size.y), Point.RIGHT);\r\n        }\r\n        return new Point();\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getCanvas(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return null;\r\n    }\r\n\r\n    public getAlreadyDisplayingSVG(): Element {\r\n        return document.getElementById(this.id) || this.getSVG();\r\n    }\r\n\r\n    public load(data: any) {\r\n        // Do Nothing\r\n    }\r\n\r\n    public withPos(x: number, y: number): GraphElement {\r\n        if (x && y) {\r\n            this.$pos = new Point(x, y);\r\n        } else {\r\n            if (typeof (x) !== 'undefined' && x !== null) {\r\n                this.$pos.x = x;\r\n            }\r\n            if (typeof (y) !== 'undefined' && y !== null) {\r\n                this.$pos.y = y;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public withSize(width: number, height: number): DiagramElement {\r\n        if (width && height) {\r\n            this.$size = new Point(width, height);\r\n        } else {\r\n            if (typeof (width) !== 'undefined' && width !== null) {\r\n                this.$size.x = width;\r\n            }\r\n            if (typeof (height) !== 'undefined' && height !== null) {\r\n                this.$size.y = height;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        // FIXME if (this.status === 'close') {\r\n        // if (!this.$owner.isClosed()) {\r\n        //        return this;\r\n        //    }\r\n        // }\r\n        return super.getShowed();\r\n    }\r\n\r\n    public loadProperties(properties: any) {\r\n        // DO Nothing\r\n    }\r\n\r\n    protected createShape(attrs: any): Element {\r\n        return Util.createShape(attrs);\r\n    }\r\n}\r\n\r\nexport class Point {\r\n    public static UP: string = 'UP';\r\n    public static LEFT: string = 'LEFT';\r\n    public static RIGHT: string = 'RIGHT';\r\n    public static DOWN: string = 'DOWN';\r\n    x: number = 0;\r\n    y: number = 0;\r\n\r\n    //    pos:string = '';\r\n\r\n    constructor(x?: number, y?: number, pos?: string) {\r\n        this.x = Math.ceil(x || 0);\r\n        this.y = Math.ceil(y || 0);\r\n        if (pos) {\r\n            this['pos'] = pos;\r\n        }\r\n    }\r\n\r\n    public add(pos: Point) {\r\n        this.x += pos.x;\r\n        this.y += pos.y;\r\n        return this;\r\n    }\r\n\r\n    public getPosition(): string {\r\n        if (!this['pos']) {\r\n            return '';\r\n        }\r\n        return this['pos'];\r\n    }\r\n\r\n    public addNum(x: number, y: number) {\r\n        this.x += x;\r\n        this.y += y;\r\n        return this;\r\n    }\r\n\r\n    public sum(pos: Point) {\r\n        let sum = new Point(this.x, this.y);\r\n        sum.add(pos);\r\n        return sum;\r\n    }\r\n\r\n    public center(posA: Point, posB: Point) {\r\n        let count = 0;\r\n        if (posA) {\r\n            this.x += posA.x;\r\n            this.y += posA.y;\r\n            count++;\r\n        }\r\n        if (posB) {\r\n            this.x += posB.x;\r\n            this.y += posB.y;\r\n            count++;\r\n        }\r\n        if (count > 0) {\r\n            this.x = (this.x / count);\r\n            this.y = (this.y / count);\r\n        }\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        return this.x < 1 && this.y < 1;\r\n    }\r\n\r\n    public size(posA: Point, posB: Point) {\r\n        let x1 = 0, x2 = 0, y1 = 0, y2 = 0;\r\n        if (posA) {\r\n            x1 = posA.x;\r\n            y1 = posA.y;\r\n        }\r\n        if (posB) {\r\n            x2 = posB.x;\r\n            y2 = posB.y;\r\n        }\r\n        if (x1 > x2) {\r\n            this.x = x1 - x2;\r\n        } else {\r\n            this.x = x2 - x1;\r\n        }\r\n        if (y1 > y2) {\r\n            this.y = y1 - y2;\r\n        } else {\r\n            this.y = y2 - y1;\r\n        }\r\n    }\r\n}\r\n\r\n// \t\t\t\t######################################################### Line #########################################################\r\nexport class Line extends DiagramElement {\r\n    public static FORMAT = { SOLID: 'SOLID', DOTTED: 'DOTTED', PATH: 'PATH' };\r\n    public source: Point;\r\n    public target: Point;\r\n    public color: string;\r\n    public lineType: string;\r\n    private path: string;\r\n    private angle: Number;\r\n\r\n    constructor(lineType: string) {\r\n        super();\r\n        this.lineType = lineType;\r\n    }\r\n\r\n    public getTyp(): string {\r\n        return 'SVG';\r\n    }\r\n\r\n    public getPos() {\r\n        let pos = new Point();\r\n        pos.center(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public getSize() {\r\n        let pos = new Point();\r\n        pos.size(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public withColor(color: string): Line {\r\n        this.color = color;\r\n        return this;\r\n    }\r\n\r\n    public withSize(x: number, y: number): DiagramElement {\r\n        return this;\r\n    }\r\n\r\n    public withPath(path: Array<Point>, close: boolean, angle?: any): Line {\r\n        let i: number, d: string = 'M' + path[0].x + ' ' + path[0].y;\r\n        this.lineType = Line.FORMAT.PATH; // It is a Path not a Line\r\n        for (i = 1; i < path.length; i += 1) {\r\n            d = d + 'L ' + path[i].x + ' ' + path[i].y;\r\n        }\r\n        if (close) {\r\n            d = d + ' Z';\r\n            this.target = path[0];\r\n        } else {\r\n            this.target = path[path.length - 1];\r\n        }\r\n        this.path = d;\r\n        if (angle instanceof Number) {\r\n            this.angle = angle;\r\n        } else if (angle) {\r\n            // var lineangle, start = path[0], end = path[path.length - 1];\r\n            // lineangle = Math.atan2(end.y - start.y, end.x - start.x);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): SVGGElement {\r\n        if (this.lineType === 'PATH') {\r\n            return <SVGGElement>Util.create({\r\n                tag: 'path',\r\n                'd': this.path,\r\n                'fill': this.color,\r\n                stroke: '#000',\r\n                'stroke-width': '1px'\r\n            });\r\n        }\r\n        let line: SVGGElement = <SVGGElement>Util.create({\r\n            tag: 'line',\r\n            'x1': this.source.x,\r\n            'y1': this.source.y,\r\n            'x2': this.target.x,\r\n            'y2': this.target.y,\r\n            'stroke': Util.getColor(this.color)\r\n        });\r\n        if (this.lineType && this.lineType.toLowerCase() === 'dotted') {\r\n            line.setAttribute('stroke-miterlimit', '4');\r\n            line.setAttribute('stroke-dasharray', '1,1');\r\n        }\r\n        return line;\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport Options from '../Options';\r\nimport {JavaAdapter} from '../adapters';\r\n\r\nexport class ClassEditor extends Graph {\r\n    private adapter: JavaAdapter;\r\n    constructor(json: any, options: Options) {\r\n        if (!options ) {\r\n            options = {};\r\n        }\r\n        options.canvas = options.canvas || 'canvas';\r\n        // options.origin = options.origin || new Point(150, 45);\r\n//            layout: \"DagreLayout\",\r\n        options.autoSave = options.autoSave || true;\r\n        if (!options.features) {\r\n            options.features = {\r\n                drag: true,\r\n                editor: true,\r\n                palette: true,\r\n                select: true,\r\n                zoom: true,\r\n                toolbar: true,\r\n                import: true,\r\n                properties: true,\r\n                addnode: true,\r\n                newedge: true\r\n            };\r\n        }\r\n        super(json, options);\r\n    }\r\n\r\n    public setBoardStyle(value: string) {\r\n        console.log(value);\r\n        this.importFile.setBoardStyle(value);\r\n    }\r\n\r\n    public registerListener(): void {\r\n        this.adapter = new JavaAdapter();\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return this.adapter;\r\n    }\r\n}\r\n","import * as edges from './edges';\r\nimport { Association } from './edges';\r\nimport * as nodes from './nodes';\r\nimport * as layouts from '../layouts';\r\nimport Layout from '../layouts/Layout';\r\nimport { GraphModel } from './Model';\r\nimport { Point, Size } from './BaseElements';\r\nimport { Util } from '../util';\r\nimport { Control } from '../Control';\r\nimport Data from '../Data';\r\nimport { EventBus } from '../EventBus';\r\nimport { AddNode, Drag, NewEdge, Select, Zoom } from '../handlers';\r\nimport Options from '../Options';\r\nimport { ImportFile } from '../handlers/ImportFile';\r\nimport { CSS } from '../CSS';\r\nimport { DiagramElement } from './index';\r\nimport { Toolbar } from '../Toolbar';\r\nimport {JSEPS} from '../JSEPS';\r\nimport {SVGConverter} from '../SVGConverter';\r\nimport Palette from '../Palette';\r\nimport {PanelGroup} from '../PropertiesPanel';\r\n\r\nexport class Graph extends Control {\r\n    // canvas: HTMLElement;\r\n    root: SVGElement;\r\n    $graphModel: GraphModel;\r\n    options: Options;\r\n    canvasSize: Size;\r\n    nodeFactory: Object;\r\n    edgeFactory: Object;\r\n    layoutFactory: Object;\r\n    protected importFile: ImportFile;\r\n    private currentlayout: Layout;\r\n    // private layerToolBar: SVGSVGElement;\r\n    // https://stackoverflow.com/questions/15181452/how-to-save-export-inline-svg-styled-with-css-from-browser-to-image-file\r\n    private containerElements = ['svg', 'g'];\r\n    private relevantStyles = {\r\n        'rect': ['fill', 'stroke', 'stroke-width'],\r\n        'path': ['fill', 'stroke', 'stroke-width', 'opacity'],\r\n        'circle': ['fill', 'stroke', 'stroke-width'],\r\n        'line': ['stroke', 'stroke-width'],\r\n        'text': ['fill', 'font-size', 'text-anchor', 'font-family'],\r\n        'polygon': ['stroke', 'fill']\r\n    };\r\n\r\n    constructor(json: any, options: Options) {\r\n        super();\r\n        json = json || {};\r\n        if (json['data']) {\r\n            options = json['options'];\r\n            json = json['data'];\r\n            this.id = json['id'];\r\n        }\r\n        this.options = options || {features: { drag: true}};\r\n        if (json['init']) {\r\n            return;\r\n        }\r\n        if (!this.options.origin) {\r\n            this.options.origin = new Point(150, 45);\r\n        }\r\n        if (!this.options.style) {\r\n            // Style can be classic or modern\r\n            this.options.style = 'classic';\r\n        }\r\n        if (this.options.autoSave) {\r\n            Util.isAutoSave = options.autoSave;\r\n        }\r\n\r\n        this.initFactories();\r\n        this.initCanvas();\r\n        this.initFeatures(this.options.features);\r\n\r\n        // load previous session, if user wants it\r\n        // otherwise load the json data\r\n        if (!this.lookupInLocalStorage()) {\r\n            this.load(json);\r\n        }\r\n\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    public lookupInLocalStorage(): boolean {\r\n        if (!this.options.autoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (!Util.isLocalStorageSupported()) {\r\n            return false;\r\n        }\r\n        let diagram = Util.getDiagramFromLocalStorage();\r\n        if (diagram && diagram.length > 0) {\r\n            if (confirm('Restore previous session?')) {\r\n                let jsonData: JSON = JSON.parse(diagram);\r\n                this.load(jsonData);\r\n                this.layout();\r\n                return true;\r\n            } else {\r\n                Util.saveToLocalStorage( null);\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public fitSizeOnNodes(): void {\r\n        let maxWidth: number = 0;\r\n        let maxHeight: number = 0;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            let nodePos = node.getPos();\r\n            let nodeSize = node.getSize();\r\n            let nodeWidestPosX = nodePos.x + nodeSize.x;\r\n            let nodeWidestPosY = nodePos.y + nodeSize.y;\r\n\r\n            if (nodeWidestPosX > maxWidth) {\r\n                maxWidth = nodeWidestPosX;\r\n            }\r\n\r\n            if (nodeWidestPosY > maxHeight) {\r\n                maxHeight = nodeWidestPosY;\r\n            }\r\n        }\r\n\r\n        this.root.setAttributeNS(null, 'width', '' + (maxWidth + 100));\r\n        this.root.setAttributeNS(null, 'height', '' + (maxHeight + 50));\r\n    }\r\n\r\n    public saveAs(typ: string) {\r\n        typ = typ.toLowerCase();\r\n\r\n        // shrink size of graph to minimum. only to show up nodes\r\n        const currentSize = this.getRootSize();\r\n        this.fitSizeOnNodes();\r\n\r\n        if (typ === 'svg') {\r\n            this.exportSvg();\r\n        } else if (typ === 'png') {\r\n            this.exportPng();\r\n        } else if (typ === 'html') {\r\n            this.exportHtml();\r\n\r\n        } else if (typ === 'pdf') {\r\n            this.exportPdf();\r\n            // } else if (typ === 'eps') {\r\n            // this.ExportEPS();\r\n        }\r\n        else if (typ === 'json') {\r\n            this.exportJson();\r\n        }\r\n\r\n        // set the size back to default\r\n        this.root.setAttributeNS(null, 'width', '' + currentSize.width);\r\n        this.root.setAttributeNS(null, 'height', '' + currentSize.height);\r\n    }\r\n\r\n    /**\r\n     * generates a blob file and makes it available for download.\r\n     * @param type type of file\r\n     * @param data raw data\r\n     * @param name name of download file\r\n     */\r\n    public save(type: string, data: any, name: string, context: string) {\r\n        if (window['java']) {\r\n            window['java'].export(type, data, name, context);\r\n            return;\r\n        }\r\n        let a = document.createElement('a');\r\n        a.href = window.URL.createObjectURL(new Blob([data], { type: context }));\r\n        a.download = name;\r\n        document.body.appendChild(a);\r\n        a.click();\r\n        document.body.removeChild(a);\r\n    }\r\n\r\n    /** Exports the diagram as svg. */\r\n    public exportSvg(): void {\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        this.save('svg', this.serializeXmlNode(wellFormatedSvgDom), 'class_diagram.svg', 'image/svg+xml');\r\n    }\r\n\r\n    /** Exports the diagram as html. */\r\n    public exportHtml(): void {\r\n        let htmlFacade = '<html><head><title>DiagramJS - Classdiagram</title></head><body>$content</body></html>';\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        let svgAsXml = this.serializeXmlNode(wellFormatedSvgDom);\r\n\r\n        let htmlResult = htmlFacade.replace('$content', svgAsXml);\r\n\r\n        this.save('html', htmlResult, 'class_diagram.htm', 'text/plain');\r\n    }\r\n\r\n    /** Exports the diagram as json. */\r\n    public exportJson(): void {\r\n        let type = 'text/plain';\r\n        let jsonObj = Util.toJson(this.$graphModel);\r\n        let data = JSON.stringify(jsonObj, null, '\\t');\r\n\r\n        this.save('json', data, 'class_diagram.json', type);\r\n    }\r\n\r\n    /** Exports the diagram as pdf. */\r\n    public exportPdf(): void {\r\n        if (!window['jsPDF']) {\r\n            console.log('jspdf n.a.');\r\n            return;\r\n        }\r\n        let type = 'image/svg+xml';\r\n        let converter, pdf = new window['jsPDF']('l', 'px', [this.$graphModel.getSize().x, this.$graphModel.getSize().y]);\r\n        converter = new SVGConverter(this.$view, pdf, {removeInvalid: false});\r\n        pdf.save('Download.pdf');\r\n/*        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let canvas, context, a, image = new Image();\r\n        let size = this.getRootSize();\r\n\r\n        // create the loaded img source into a canvas. to generate a picture. then place this picture in the pdf\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            let pdf = new window['jsPDF']();\r\n\r\n            pdf.addImage(canvas.toDataURL('image/jpeg'), 'jpeg', 15, 40, 180, 160);\r\n            pdf.save('class_diagram.pdf');\r\n\r\n        };\r\n\r\n        image.src = url;\r\n        */\r\n    }\r\n\r\n    public import(data: string): void {\r\n        let rootElement = this.$graphModel.$view;\r\n        while (rootElement.hasChildNodes()) {\r\n            rootElement.removeChild(rootElement.firstChild);\r\n        }\r\n\r\n        while (this.$view.hasChildNodes()) {\r\n            this.$view.removeChild(this.$view.firstChild);\r\n        }\r\n\r\n        this.clearModel();\r\n        let jsonData = JSON.parse(data);\r\n        this.load(jsonData);\r\n        this.layout();\r\n    }\r\n\r\n    public exportEPS(): void {\r\n          let converter, doc = new JSEPS({inverting: true});\r\n            converter = new SVGConverter(this.$view, doc, {removeInvalid: false});\r\n            this.save('eps', doc.getData(), 'diagram.eps', doc.getType());\r\n    }\r\n\r\n    /** Exports the diagram as png. */\r\n    public exportPng(): void {\r\n        let canvas, context, a, image = new Image();\r\n        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let typ = 'image/svg+xml';\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let size = this.getRootSize();\r\n\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            a = document.createElement('a');\r\n            a.download = 'class_diagram.png';\r\n            a.href = canvas.toDataURL('image/png');\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            document.body.removeChild(a);\r\n        };\r\n\r\n        image.src = url;\r\n\r\n    }\r\n\r\n    public getSvgWithStyleAttributes(): Node {\r\n        let oDOM = this.$graphModel.$view.cloneNode(true);\r\n        this.readElement(oDOM, this.$graphModel.$view);\r\n\r\n        return oDOM;\r\n    }\r\n\r\n    public serializeXmlNode(xmlNode: any) {\r\n        if (window['XMLSerializer'] !== undefined) {\r\n            return (new window['XMLSerializer']()).serializeToString(xmlNode);\r\n        }\r\n        if (xmlNode.xml !== undefined) {\r\n            return xmlNode.xml;\r\n        }\r\n        return xmlNode.outerHTML;\r\n    }\r\n\r\n    public getRootSize(): Size {\r\n        let width: number;\r\n        let height: number;\r\n        width = +this.root.getAttribute('width');\r\n        height = +this.root.getAttribute('height');\r\n\r\n        return { width: width, height: height };\r\n    }\r\n\r\n        // Graph.prototype.ExportEPS = function () {\r\n        //     var converter, doc = new svgConverter.jsEPS({inverting: true});\r\n        //     converter = new svgConverter(this.board, doc, {removeInvalid: false});\r\n        //     doc.save();\r\n        // };\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        this.$graphModel = new GraphModel();\r\n        this.$graphModel.init(this);\r\n        this.$graphModel.load(json);\r\n    }\r\n\r\n    public clearModel(): void {\r\n        this.$graphModel.removeAllElements();\r\n        this.clearSvgRoot();\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.layout();\r\n        return this;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        return;\r\n    }\r\n\r\n    public getNextFreePosition(): Point {\r\n\r\n        if (!this.$graphModel) {\r\n            return new Point(50, 50);\r\n        }\r\n\r\n        let point = new Point(0, 50);\r\n\r\n        let maxX = 0;\r\n        let minX = 9000;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            maxX = Math.max(maxX, node.getPos().x);\r\n            minX = Math.min(minX, node.getPos().x);\r\n        }\r\n\r\n        if (minX > 170) {\r\n            point.x = 10;\r\n        }\r\n        else {\r\n            point.x = maxX + 200;\r\n        }\r\n\r\n        return point;\r\n    }\r\n\r\n    public addElement(type: string, dontDraw?: boolean): boolean {\r\n        let success = this.$graphModel.addElement(type);\r\n        if (success === true) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return success;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues?: Object, layout?: boolean, dontDraw?: boolean): DiagramElement {\r\n        let element = this.$graphModel.addElementWithValues(type, optionalValues);\r\n        if (element && layout) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public layout(dontDraw?: boolean): Graph {\r\n        this.getLayout().layout(this, this.$graphModel);\r\n\r\n        if (dontDraw) {\r\n            return this;\r\n        }\r\n\r\n        this.draw();\r\n        return this;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTDRAGOVER, EventBus.ELEMENTDRAGLEAVE, EventBus.ELEMENTDROP];\r\n    }\r\n\r\n    public draw() {\r\n        this.clearSvgRoot();\r\n        let model = this.$graphModel;\r\n        let root = this.root;\r\n        let max: Point = new Point();\r\n        if (this.options) {\r\n            max.x = this.options.minWidth || 0;\r\n            max.y = this.options.minHeight || 0;\r\n        }\r\n\r\n        for (let node of model.nodes) {\r\n            let svg = node.getSVG();\r\n            EventBus.register(node, svg);\r\n            root.appendChild(svg);\r\n\r\n            let temp: number;\r\n            temp = node.getPos().x + node.getSize().x;\r\n            if (temp > max.x) {\r\n                max.x = temp;\r\n            }\r\n            temp = node.getPos().y + node.getSize().y;\r\n            if (temp > max.y) {\r\n                max.y = temp;\r\n            }\r\n\r\n        }\r\n        Util.setAttributeSize(this.root, max.x + 60, max.y + 40);\r\n\r\n        for (let edge of model.edges) {\r\n            let svg = edge.getSVG();\r\n            EventBus.register(edge, svg);\r\n            root.appendChild(svg);\r\n        }\r\n    }\r\n\r\n    public getNode(id: string) {\r\n        return this.$graphModel.getNodeById(id);\r\n    }\r\n\r\n    public drawElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let svg = element.getSVG();\r\n        this.root.appendChild(svg);\r\n\r\n        // actualize root width size, if neccessary\r\n        // get current width of root\r\n        let rootSize = this.getRootSize();\r\n        let newWidth = element.getPos().x + element.getSize().x + 40;\r\n        let newHeight = element.getPos().y + element.getSize().y;\r\n\r\n        if (rootSize.width < newWidth) {\r\n            this.root.setAttributeNS(null, 'width', '' + newWidth);\r\n        }\r\n\r\n        if (rootSize.height < newHeight) {\r\n            this.root.setAttributeNS(null, 'height', '' + newHeight);\r\n        }\r\n\r\n        // draw edge\r\n        if (element instanceof Association) {\r\n            let edge = <Association>element;\r\n            edge.redraw(edge.$sNode);\r\n            let srcSvg = element.$sNode.getAlreadyDisplayingSVG();\r\n            let targetSvg = element.$tNode.getAlreadyDisplayingSVG();\r\n\r\n            this.root.appendChild(srcSvg);\r\n            this.root.appendChild(targetSvg);\r\n        }\r\n\r\n        EventBus.register(element, svg);\r\n    }\r\n\r\n    public removeElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let alreadyDisplayingSvg = element.getAlreadyDisplayingSVG();\r\n        if (Util.isParentOfChild(this.root, alreadyDisplayingSvg)) {\r\n            this.root.removeChild(alreadyDisplayingSvg);\r\n        }\r\n    }\r\n\r\n    public generate(packageName: string, path?: string) {\r\n        this.$graphModel.package = packageName;\r\n        this.$graphModel.genPath = path;\r\n\r\n        let data, result = Util.toJson(this.$graphModel);\r\n        data = JSON.stringify(result, null, '\\t');\r\n        if (window['java'] && typeof window['java'].generate === 'function') {\r\n            window['java'].generate(data);\r\n        }\r\n    }\r\n// REFACTORING dd\r\n    private readElement(parent: any, origData: any): void {\r\n        let children = parent.childNodes;\r\n        let origChildDat = origData.childNodes;\r\n\r\n        for (let cd = 0; cd < children.length; cd++) {\r\n            let child = children[cd];\r\n\r\n            let tagName = child.tagName;\r\n            if (this.containerElements.indexOf(tagName) !== -1) {\r\n                this.readElement(child, origChildDat[cd]);\r\n            } else if (tagName in this.relevantStyles) {\r\n                let styleDef = window.getComputedStyle(origChildDat[cd]);\r\n\r\n                let styleString = '';\r\n                for (let st = 0; st < this.relevantStyles[tagName].length; st++) {\r\n                    styleString += this.relevantStyles[tagName][st] + ':' + styleDef.getPropertyValue(this.relevantStyles[tagName][st]) + '; ';\r\n                }\r\n\r\n                child.setAttribute('style', styleString);\r\n            }\r\n        }\r\n    }\r\n\r\n    private createPattern(): Element {\r\n        const defs = Util.createShape({ tag: 'defs' });\r\n        const pattern = Util.createShape({\r\n            tag: 'pattern',\r\n            id: 'raster',\r\n            patternUnits: 'userSpaceOnUse',\r\n            width: 40,\r\n            height: 40\r\n        });\r\n        const path = 'M0 4 L0 0 L4 0 M36 0 L40 0 L40 4 M40 36 L40 40 L36 40 M4 40 L0 40 L0 36';\r\n        const cross = Util.createShape({\r\n            tag: 'path',\r\n            d: path,\r\n            stroke: '#DDD',\r\n            'stroke-width': 1,\r\n            fill: 'none'\r\n        });\r\n\r\n        const rect = Util.createShape({\r\n            tag: 'rect',\r\n            x: 0,\r\n            y: 0,\r\n            width: 40,\r\n            height: 40,\r\n            fill: 'none'\r\n        });\r\n        pattern.appendChild(rect);\r\n        pattern.appendChild(cross);\r\n        defs.appendChild(pattern);\r\n        return defs;\r\n    }\r\n\r\n    private clearSvgRoot() {\r\n        const root = this.root;\r\n        this.$graphModel.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n        while (root.firstChild) {\r\n            root.removeChild(root.firstChild);\r\n        }\r\n\r\n        root.appendChild(this.createPattern());\r\n        let fillValue = 'none';\r\n        if (this.options.raster) {\r\n            fillValue = 'url(#raster)';\r\n        }\r\n        let background = Util.createShape({\r\n            tag: 'rect',\r\n            id: 'background',\r\n            width: 5000,\r\n            height: 5000,\r\n            x: 0,\r\n            y: 0,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: fillValue\r\n        });\r\n        root.appendChild(background);\r\n\r\n        // delete inline Edit, if exists\r\n        let inlineEdit = document.getElementById('inlineEdit');\r\n        if (inlineEdit && document.body.contains(inlineEdit)) {\r\n            document.body.removeChild(inlineEdit);\r\n        }\r\n    }\r\n\r\n    private getLayout(): Layout {\r\n        if (this.currentlayout) {\r\n            return this.currentlayout;\r\n        }\r\n\r\n        let layout = this.options.layout || '';\r\n        if (this.layoutFactory[layout]) {\r\n            this.currentlayout = new this.layoutFactory[layout]();\r\n        } else {\r\n            this.currentlayout = new layouts.DagreLayout();\r\n        }\r\n\r\n        return this.currentlayout;\r\n    }\r\n\r\n    private initFactories() {\r\n\r\n        let noder = nodes;\r\n        this.nodeFactory = {};\r\n        for (let id in noder) {\r\n            if (noder.hasOwnProperty(id) === true) {\r\n                this.nodeFactory[id] = noder[id];\r\n            }\r\n        }\r\n\r\n        let edger = edges;\r\n        this.edgeFactory = {};\r\n        for (let id in edger) {\r\n            if (edger.hasOwnProperty(id) === true) {\r\n                this.edgeFactory[id] = edger[id];\r\n            }\r\n        }\r\n\r\n        let layouter = layouts;\r\n        this.layoutFactory = {};\r\n        for (let id in layouter) {\r\n            if (layouter.hasOwnProperty(id) === true) {\r\n                this.layoutFactory[id] = layouter[id];\r\n            }\r\n        }\r\n    }\r\n\r\n    private initCanvas() {\r\n        if (this.options.canvas) {\r\n            this.$view = document.getElementById(this.options.canvas);\r\n        }\r\n        if (!this.$view) {\r\n            this.$view = document.createElement('div');\r\n            this.$view.setAttribute('class', 'diagram');\r\n            document.body.appendChild(this.$view);\r\n        }\r\n    }\r\n\r\n    private initFeatures(features: any) {\r\n\r\n        if (features) {\r\n            if (features.newedge) {\r\n                EventBus.subscribe(new NewEdge(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            this.importFile = new ImportFile(this);\r\n            if (features.import) {\r\n                EventBus.subscribe(this.importFile, 'dragover', 'dragleave', 'drop');\r\n            }\r\n            if (features.zoom) {\r\n                let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n                EventBus.subscribe(new Zoom(this), mousewheel);\r\n            }\r\n            if (features.drag) {\r\n                EventBus.subscribe(new Drag(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            if (features.select) {\r\n                EventBus.subscribe(new Select(this), 'click', 'drag');\r\n            }\r\n            if (features.palette) {\r\n                new Palette(this).show();\r\n            }\r\n            if (features.toolbar) {\r\n                new Toolbar(this).show();\r\n            }\r\n            if (features.properties) {\r\n                let propertyPanel = new PanelGroup(this);\r\n                // let dispatcher = new PropertiesDispatcher(this);\r\n                EventBus.subscribe(propertyPanel, 'dblclick', 'click', EventBus.RELOADPROPERTIES);\r\n                propertyPanel.show();\r\n            }\r\n            if (features.addnode) {\r\n                EventBus.subscribe(new AddNode(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n        }\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport {DiagramElement, Point} from './BaseElements';\r\nimport {Association} from './edges';\r\nimport {Node} from './nodes';\r\nimport {Control} from '../Control';\r\nimport {Util} from '../util';\r\nimport {EventBus} from '../EventBus';\r\n\r\nexport class GraphModel extends DiagramElement {\r\n    nodes: Node[] = [];\r\n    edges: Association[] = [];\r\n    package: string;\r\n    genPath: string;\r\n    $isLoading: boolean;\r\n\r\n    public load(data?: any) {\r\n\r\n        this.$isLoading = true;\r\n        data = data || {};\r\n        this.property = data.type || data.property || 'classdiagram';\r\n        this.id = 'RootElement';\r\n        if (data.nodes) {\r\n            for (let node of data.nodes) {\r\n                this.addNode(node);\r\n            }\r\n        }\r\n        if (data.edges) {\r\n            for (let edge of data.edges) {\r\n                this.addEdge(edge);\r\n            }\r\n        }\r\n\r\n        this.$isLoading = false;\r\n    }\r\n\r\n    public getNodeByPosition(x: number, y: number): Node {\r\n        for (let node of this.nodes) {\r\n            let posOfNode: Point = (<Node>node).getPos();\r\n            let sizeOfNode: Point = (<Node>node).getSize();\r\n\r\n            if ((posOfNode.x <= x && (posOfNode.x + sizeOfNode.x) >= x)\r\n                && (posOfNode.y <= y && (posOfNode.y + sizeOfNode.y) >= y)) {\r\n                return node;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.initCanvas();\r\n        return this;\r\n    }\r\n\r\n    public addElement(type: string): boolean {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n        if (element) {\r\n            Util.saveToLocalStorage(this);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues: Object): DiagramElement {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n\r\n        // position\r\n        if (optionalValues) {\r\n            if (optionalValues.hasOwnProperty('x') && optionalValues.hasOwnProperty('y')) {\r\n                let x = optionalValues['x'];\r\n                let y = optionalValues['y'];\r\n                element.withPos(x, y);\r\n            }\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return element;\r\n    }\r\n\r\n    public removeAllElements(): void {\r\n\r\n        let nodesLength = this.nodes.length;\r\n        for (let i = 0; i < nodesLength; i++) {\r\n            this.removeElement(this.nodes[0].id);\r\n        }\r\n\r\n        this.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n    }\r\n\r\n    public removeElement(id: string): boolean {\r\n\r\n        let element = this.getDiagramElementById(id);\r\n        if (!element) {\r\n            return false;\r\n        }\r\n\r\n        (<Graph>this.$owner).removeElement(element);\r\n\r\n        if (element instanceof Node) {\r\n\r\n            let idxOfNode = this.nodes.indexOf(element);\r\n            if (idxOfNode > -1) {\r\n                this.nodes.splice(idxOfNode, 1);\r\n            }\r\n\r\n            while (element.$edges.length > 0) {\r\n                this.removeElement(element.$edges[0].id);\r\n            }\r\n\r\n            element.$edges = [];\r\n        }\r\n        else if (element instanceof Association) {\r\n\r\n            let idxOfEdge = this.edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                this.edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from source\r\n            idxOfEdge = element.$sNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$sNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from target\r\n            idxOfEdge = element.$tNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$tNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return true;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        const size = 10;\r\n        const path = `M${-size} 0 L${+size} 0 M0 ${-size} L0 ${+size}`;\r\n\r\n        const attr = {\r\n            tag: 'path',\r\n            id: 'origin',\r\n            d: path,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: 'none'\r\n        };\r\n        let shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: 0 - size,\r\n            y: 0 - size / 1.5,\r\n            'text-anchor': 'end',\r\n            'font-family': 'Verdana',\r\n            'font-size': '9',\r\n            fill: '#999'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = '(0, 0)';\r\n\r\n        let group = this.createShape({tag: 'g'});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEUP, EventBus.ELEMENTMOUSELEAVE, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTMOUSEWHEEL, EventBus.ELEMENTCLICK, EventBus.ELEMENTDRAG];\r\n    }\r\n\r\n    public getNewId(prefix?: string): string {\r\n        let id = (prefix ? prefix.toLowerCase() + '-' : '') + Math.floor(Math.random() * 100000);\r\n        return id;\r\n    }\r\n\r\n    public getEdgeById(id: string): Association {\r\n        for (let edge of this.edges) {\r\n            if (edge.id === id) {\r\n                return edge;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    public getDiagramElementById(id: string): DiagramElement {\r\n\r\n        return this.getNodeById(id) || this.getEdgeById(id);\r\n    }\r\n\r\n    /**\r\n     * Add an edge with data in json file. Optional you can say, that the edge should have\r\n     * the points of source node and target node.\r\n     * @param edge information about edge in json\r\n     * @param withPosOfNodes optional. set points to line of source and target node\r\n     */\r\n    public addEdge(edge: any, withPosOfNodes?: boolean): Association {\r\n\r\n        // lookup in factoryedges and check if the edge type realy exists\r\n        if (edge && edge.type) {\r\n            const graph = (<Graph>this.$owner);\r\n            let typeExists = false;\r\n            for (let edgeType in graph.edgeFactory) {\r\n                if (edgeType === edge.type) {\r\n                    typeExists = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!typeExists) {\r\n                edge.type = 'Association';\r\n            }\r\n        }\r\n\r\n        let type = edge.type || 'Association';\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n\r\n        let newEdge = <Association>this.createElement(type, id, edge);\r\n        newEdge.type = type;\r\n\r\n        let source: Node;\r\n        let sourceAsString: string = edge.source.id || edge.source;\r\n        if (sourceAsString) {\r\n            source = this.getNodeById(sourceAsString);\r\n            if (!source) {\r\n                let nodeID = edge.source;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                source = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                source.init(this);\r\n            }\r\n        }\r\n\r\n        let target: Node;\r\n        let targetAsString: string = edge.target.id || edge.target;\r\n        if (targetAsString) {\r\n            target = this.getNodeById(targetAsString);\r\n            if (!target) {\r\n                let nodeID = edge.target;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                target = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                target.init(this);\r\n            }\r\n        }\r\n\r\n        newEdge.withItem(source, target);\r\n\r\n        if (withPosOfNodes) {\r\n            let srcX = source.getPos().x + (source.getSize().x / 2);\r\n            let srcY = source.getPos().y + (source.getSize().y / 2);\r\n\r\n            let targetX = target.getPos().x + (target.getSize().x / 2);\r\n            let targetY = target.getPos().y + (target.getSize().y / 2);\r\n\r\n            newEdge.addPoint(srcX, srcY);\r\n            newEdge.addPoint(targetX, targetY);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public createElement(type: string, id: string, data: Object): DiagramElement {\r\n        const graph = <Graph>this.$owner;\r\n        let element: DiagramElement;\r\n        if (graph.nodeFactory[type]) {\r\n            element = new graph.nodeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.nodes.push(<Node>element);\r\n        }\r\n        if (graph.edgeFactory[type]) {\r\n            element = new graph.edgeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.edges.push(<Association>element);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public getNodeById(id: string): Node {\r\n        for (let node of this.nodes) {\r\n            if (node.id === id) {\r\n                return node;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    private initCanvas() {\r\n        const graph = <Graph>this.$owner;\r\n        graph.canvasSize = {width: graph.$view.clientWidth, height: graph.$view.clientHeight};\r\n        graph.root = Util.createShape({\r\n            tag: 'svg',\r\n            id: 'root',\r\n            width: graph.canvasSize.width,\r\n            height: graph.canvasSize.height\r\n            // FIXME,viewBox: `${this.$graph.options.origin.x * -1} ${this.$graph.options.origin.y * -1} ${this.$graph.canvasSize.width} ${this.$graph.canvasSize.height}`\r\n        });\r\n        this.$view = graph.root;\r\n        graph.$view.appendChild(graph.root);\r\n\r\n        let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    private addNode(node: Node): Node {\r\n        let type = node['type'] || node.property || 'Node';\r\n        type = Util.toPascalCase(type);\r\n        let id = node['id'] || node['name'] || this.getNewId(type);\r\n\r\n        return <Node>this.createElement(type, id, node);\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction } from './index';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\n\r\nexport abstract class Aggregate extends Association {\r\n\r\n    protected $diamond: Element;\r\n\r\n    public getSVG(): Element {\r\n\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled diamond\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n        };\r\n\r\n        this.$diamond = this.createShape(attr);\r\n\r\n        group.appendChild(this.$diamond);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint: Point = this.$points[0];\r\n        let direction: Direction = Direction.Down;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if (this.$sNode.id === startNode.id || this.$points.length == 2) {\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$diamond.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint: Point, direction: Direction): string {\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                path = `M${startX} ${startY} L${startX + 6} ${startY + 10} L${startX} ${startY + 20} L${startX - 6} ${startY + 10} Z`;\r\n                startPoint.y = startPoint.y+20;\r\n                break;\r\n            case Direction.Right:\r\n                path = `M${startX} ${startY} L${startX - 10} ${startY + 6} L${startX - 20} ${startY} L${startX - 10} ${startY - 6} Z`;\r\n                startPoint.x = startPoint.x-20;\r\n                break;\r\n            case Direction.Left:\r\n                path = `M${startX} ${startY} L${startX + 10} ${startY - 6} L${startX + 20} ${startY} L${startX + 10} ${startY + 6} Z`;\r\n                startPoint.x = startPoint.x+20;\r\n                break;\r\n            case Direction.Down:\r\n                path = `M${startX} ${startY} L${startX - 6} ${startY - 10} L${startX} ${startY - 20} L${startX + 6} ${startY - 10} Z`;\r\n                startPoint.y = startPoint.y-20;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Aggregation extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'white');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { DiagramElement, Line, Point } from '../BaseElements';\r\nimport { Node } from '../nodes';\r\nimport { InfoText } from '../nodes/InfoText';\r\nimport { Util } from '../../util';\r\nimport { EventBus } from '../../EventBus';\r\nimport * as edges from '../edges';\r\nimport { Graph } from '../Graph';\r\n\r\nexport const enum Direction {\r\n    Up, Down, Left, Right\r\n}\r\n\r\nexport class Association extends DiagramElement {\r\n    public source: string;\r\n    public target: string;\r\n    public type: string;\r\n    public $sNode: Node;\r\n    public $tNode: Node;\r\n    public lineStyle: string;\r\n    public $points: Point[] = [];\r\n    public $pathSvg: Element;\r\n    public $pathWideSvg: Element;\r\n    public info: InfoText;\r\n    public sourceInfo: InfoText;\r\n    public targetInfo: InfoText;\r\n    $m: number;\r\n    $n: number;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super();\r\n\r\n        this.withData(data);\r\n    }\r\n\r\n    public withData(data: JSON | string | Object | any): Association {\r\n\r\n        if (!data) {\r\n            return this;\r\n        }\r\n        let srcInfo;\r\n        let trgInfo;\r\n\r\n        if (data.source && typeof data.source !== 'string') {\r\n            srcInfo = data.source;\r\n        }\r\n        else if (data.sourceInfo && typeof data.sourceInfo !== 'string') {\r\n            srcInfo = data.sourceInfo;\r\n        }\r\n\r\n        if (srcInfo) {\r\n            this.sourceInfo = new InfoText(srcInfo);\r\n            this.sourceInfo.$owner = this;\r\n        }\r\n\r\n        if (data.target && typeof data.target !== 'string') {\r\n            trgInfo = data.target;\r\n        }\r\n        else if (data.targetInfo && typeof data.targetInfo !== 'string') {\r\n            trgInfo = data.targetInfo;\r\n        }\r\n\r\n        if (trgInfo) {\r\n            this.targetInfo = new InfoText(trgInfo);\r\n            this.targetInfo.$owner = this;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    public updateSrcCardinality(cardinality: string): void {\r\n        this.sourceInfo = this.updateCardinality(this.$sNode, this.sourceInfo, cardinality);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetCardinality(cardinality: string): void {\r\n        this.targetInfo = this.updateCardinality(this.$tNode, this.targetInfo, cardinality);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateSrcProperty(property: string): void {\r\n        this.sourceInfo = this.updateProperty(this.$sNode, this.sourceInfo, property);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetProperty(property: string): void {\r\n        this.targetInfo = this.updateProperty(this.$tNode, this.targetInfo, property);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public withItem(source: Node, target: Node): Association {\r\n        source.$edges.push(this);\r\n        target.$edges.push(this);\r\n        this.$sNode = source;\r\n        this.$tNode = target;\r\n        this.source = source.id;\r\n        this.target = target.id;\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let group = Util.createShape({ tag: 'g', id: this.id, class: 'SVGEdge' });\r\n\r\n        let path: string = this.getPath();\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'none'\r\n        };\r\n        let pathLine = this.createShape(attr);\r\n\r\n        //attr['style'] = 'stroke-width:20;opacity:0;width:20;height:20';\r\n        let extendedPathLine = Util.createShape(attr);\r\n\r\n        group.appendChild(extendedPathLine);\r\n        group.appendChild(pathLine);\r\n\r\n        if (this.sourceInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.sourceInfo.getSVG());\r\n        }\r\n        if (this.targetInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.targetInfo.getSVG());\r\n        }\r\n\r\n        this.$pathWideSvg = extendedPathLine;\r\n        this.$pathSvg = pathLine;\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.EDITOR, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    public convertEdge(type: string, newId: string, redraw?: boolean): Association {\r\n        if (!edges[type]) {\r\n            return this;\r\n        }\r\n\r\n        let newEdge: Association = new edges[type]();\r\n        newEdge.withItem(this.$sNode, this.$tNode);\r\n        newEdge.id = newId;\r\n        newEdge.type = type;\r\n        newEdge.lineStyle = this.lineStyle;\r\n        newEdge.$owner = this.$owner;\r\n\r\n        if (this.sourceInfo) {\r\n            newEdge.sourceInfo = new InfoText({ property: this.sourceInfo.property, cardinality: this.sourceInfo.cardinality });\r\n            newEdge.sourceInfo.$owner = newEdge;\r\n        }\r\n\r\n        if (this.targetInfo) {\r\n            newEdge.targetInfo = new InfoText({ property: this.targetInfo.property, cardinality: this.targetInfo.cardinality });\r\n            newEdge.targetInfo.$owner = newEdge;\r\n        }\r\n\r\n        this.$points.forEach(point => {\r\n            newEdge.addPoint(point.x, point.y);\r\n        });\r\n\r\n        let graph = <Graph>this.getRoot();\r\n        if (!graph) {\r\n            return this;\r\n        }\r\n\r\n        // update model. insert the edge exact on the same index, like the old edge\r\n        let idx = graph.$graphModel.edges.indexOf(this);\r\n        graph.$graphModel.removeElement(this.id);\r\n        if (idx > -1) {\r\n            graph.$graphModel.edges.splice(idx, 0, newEdge);\r\n        }\r\n        else {\r\n            graph.$graphModel.edges.push(newEdge);\r\n        }\r\n\r\n        if (!redraw) {\r\n            return newEdge;\r\n        }\r\n\r\n        let svgRoot: Element;\r\n        if (graph) {\r\n            svgRoot = graph.root;\r\n        }\r\n        else {\r\n            svgRoot = document.getElementById('root');\r\n        }\r\n        let newEdgeSvg = newEdge.getSVG();\r\n\r\n        // update graph\r\n        graph.removeElement(this);\r\n        svgRoot.appendChild(newEdgeSvg);\r\n\r\n        // redraw the edge from both sides to get the correct display\r\n        // if the type is edge, so the path can be redraw.\r\n        // if not, so the inherited class redraw the path with his own logic\r\n\r\n        let dontDrawPath: boolean = (type !== 'Edge');\r\n        newEdge.redraw(newEdge.$sNode, dontDrawPath);\r\n        newEdge.redraw(newEdge.$tNode, dontDrawPath);\r\n\r\n        EventBus.register(newEdge, newEdgeSvg);\r\n\r\n        this.sourceInfo = undefined;\r\n        this.targetInfo = undefined;\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n        // redraw the first point\r\n        // check which point is the near to startnode\r\n        let endPoint: Point;\r\n        let recalcPoint: Point;\r\n        let endPointIdx: number;\r\n\r\n        if (this.$sNode.id === startNode.id) {\r\n            recalcPoint = this.$points[0];\r\n            endPointIdx = 1;\r\n        } else if (this.$tNode.id === startNode.id) {\r\n            recalcPoint = this.$points[this.$points.length - 1];\r\n            endPointIdx = this.$points.length - 2;\r\n        }\r\n\r\n        endPoint = this.$points[endPointIdx];\r\n\r\n        // calculate and set new position of point to redraw\r\n        this.calcIntersection(startNode, recalcPoint, endPoint);\r\n\r\n        // remove the 2nd point next to startnode, if the node was dragged upper the point\r\n        if (this.$points.length > 2 && this.$tNode.id === startNode.id && endPoint.y > (startNode.getPos().y + (startNode.getSize().y / 2))) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$tNode.id === startNode.id && this.$points.length === 2) {\r\n            this.calcIntersection(this.$sNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (this.$points.length > 2 && this.$sNode.id === startNode.id && (startNode.getPos().y + (startNode.getSize().y / 2) > endPoint.y)) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$sNode.id === startNode.id && this.$points.length === 2) {\r\n\r\n            this.calcIntersection(this.$tNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (!dontDrawPoints) {\r\n            this.redrawPointsAndInfo();\r\n        }\r\n    }\r\n\r\n    public getPath(): string {\r\n\r\n        if (this.$points.length === 0) {\r\n            return '';\r\n        }\r\n\r\n        let path: string = 'M';\r\n        for (let i = 0; i < this.$points.length; i++) {\r\n            let point: Point = this.$points[i];\r\n            if (i > 0) {\r\n                path += 'L';\r\n            }\r\n            path += Math.floor(point.x) + ' ' + Math.floor(point.y) + ' ';\r\n        }\r\n\r\n        return path;\r\n    }\r\n    public calcInfoPosNew(infoTxt: InfoText, node: Node): Point {\r\n\r\n        if (!infoTxt || !node) {\r\n            return null;\r\n        }\r\n\r\n        // 1. step: get direction\r\n        let startPoint: Point;\r\n        let nextToStartPoint: Point;\r\n        if (this.$sNode.id === node.id) {\r\n            startPoint = this.$points[0];\r\n            nextToStartPoint = this.$points[1];\r\n        }\r\n        else if (this.$tNode.id === node.id) {\r\n            startPoint = this.$points[this.$points.length - 1];\r\n            nextToStartPoint = this.$points[this.$points.length - 2];\r\n        }\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(node, startPoint);\r\n\r\n        let x: number;\r\n        let y: number;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                break;\r\n            case Direction.Right:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x - (infoTxt.getSize().x) - 5;\r\n                break;\r\n            case Direction.Left:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x + 5;\r\n                break;\r\n            case Direction.Down:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        // assign calculated position to infotext\r\n        return new Point(x, y);\r\n    }\r\n\r\n    public clearPoints(): any {\r\n        this.$points = [];\r\n        this.$points = [];\r\n    }\r\n\r\n    public addPoint(x: number, y: number): Point[] {\r\n        this.$points.push(new Point(x, y));\r\n\r\n        return this.$points;\r\n    }\r\n\r\n    protected redrawPointsAndInfo(): void {\r\n        // redraw the edge with the new position\r\n        let path: string = this.getPath();\r\n        this.$pathSvg.setAttributeNS(null, 'd', path);\r\n        this.$pathWideSvg.setAttributeNS(null, 'd', path);\r\n\r\n        this.redrawSourceInfo();\r\n        this.redrawTargetInfo();\r\n    }\r\n\r\n    protected redrawSourceInfo() {\r\n        if (this.sourceInfo) {\r\n            let newPosOfSrc = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.redrawFromEdge(newPosOfSrc);\r\n        }\r\n    }\r\n\r\n    protected redrawTargetInfo() {\r\n        if (this.targetInfo) {\r\n            let newPosOfTarget = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.redrawFromEdge(newPosOfTarget);\r\n        }\r\n    }\r\n\r\n    protected getDirectionOfPointToNode(node: Node, pointNearNode: Point): Direction {\r\n        /*\r\n            Example to calculate the direction of nearest point to Node\r\n\r\n            node\r\n         x1_ _ _ _\r\n          |       |\r\n          |       |. pointNearNode\r\n          |       |\r\n          |_ _ _ x2\r\n\r\n          the calculation would return Direction.Left\r\n        */\r\n\r\n        let x1: Point = node.getPos();\r\n        let x2: Point = new Point((x1.x + node.getSize().x), (x1.y + node.getSize().y));\r\n        let direction: Direction = Direction.Down;\r\n\r\n        if (x1.y >= pointNearNode.y) {\r\n            direction = Direction.Down;\r\n        }\r\n        if (x2.y <= pointNearNode.y) {\r\n            direction = Direction.Up;\r\n        }\r\n        if (x1.x >= pointNearNode.x) {\r\n            direction = Direction.Right;\r\n        }\r\n        if (x2.x <= pointNearNode.x) {\r\n            direction = Direction.Left;\r\n        }\r\n\r\n        return direction;\r\n    }\r\n\r\n    private updateCardinality(node: Node, infoText: InfoText, cardinality: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'cardinality': cardinality });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.cardinality = cardinality;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateCardinality(cardinality);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private updateProperty(node: Node, infoText: InfoText, property: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'property': property });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.property = property;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateProperty(property);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private calcIntersection(startNode: Node, recalcPoint: Point, endPoint: Point): Point {\r\n\r\n        // https://www.mathelounge.de/21534/schnittpunkt-einer-linie-mit-den-randern-eines-rechtecks\r\n        let h = startNode.getSize().y;\r\n        let w = startNode.getSize().x;\r\n\r\n        let x1: number = startNode.getPos().x + (w / 2);\r\n        let y1: number = startNode.getPos().y + (h / 2);\r\n\r\n        let x2: number = endPoint.x;\r\n        let y2: number = endPoint.y;\r\n\r\n        let newX: number = recalcPoint.x;\r\n        let newY: number = recalcPoint.y;\r\n\r\n        if (x2 > x1) {\r\n            newX = x1 + (w / 2);\r\n        }\r\n        else if (x2 < x1) {\r\n            newX = x1 - (w / 2);\r\n        }\r\n        else {\r\n            newX = x1;\r\n        }\r\n\r\n        if ((x2 - x1) !== 0) {\r\n            newY = ((y2 - y1) / (x2 - x1) * (newX - x1)) + y1;\r\n        }\r\n        else {\r\n            if (y1 > y2) {\r\n                newY = startNode.getPos().y;\r\n            }\r\n            else {\r\n                newY = startNode.getPos().y + h;\r\n            }\r\n        }\r\n\r\n        // if the statement is not true, so the intersection is at the horizontal line\r\n        if (!((y1 - (h / 2) <= newY) && newY <= y1 + (h / 2))) {\r\n\r\n            if (y2 > y1) {\r\n                newY = y1 + (h / 2);\r\n            }\r\n            else {\r\n                newY = y1 - (h / 2);\r\n            }\r\n\r\n            if ((x2 - x1) !== 0) {\r\n                let tmp = ((y2 - y1) / (x2 - x1));\r\n                newX = (newY + (tmp * x1) - y1) / tmp;\r\n            }\r\n            else {\r\n                newX = x1;\r\n            }\r\n        }\r\n\r\n        recalcPoint.x = Math.ceil(newX);\r\n        recalcPoint.y = Math.ceil(newY);\r\n\r\n        return null;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Composition extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'black');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { Association } from './Association';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\nimport { Direction } from '../index';\r\n\r\nexport class Generalisation extends Association {\r\n\r\n    public $TARGET_ELEMENT_HEIGHT : number = 12;\r\n    protected $targetElement: Element;\r\n\r\n    public getSVG(): Element {\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction : Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled arrow\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'white'\r\n          };\r\n\r\n        this.$targetElement = this.createShape(attr);\r\n\r\n        group.appendChild(this.$targetElement);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean) : void {\r\n\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint : Point = this.$points[0];\r\n        let direction : Direction = Direction.Up;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if(this.$sNode.id === startNode.id || this.$points.length == 2){\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$targetElement.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint : Point, direction : Direction) : string{\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch(direction){\r\n            case Direction.Up:\r\n            path = `M${startX} ${startY+3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y+12;\r\n            break;\r\n            case Direction.Right:\r\n            path = `M${startX-3} ${startY} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x-12;\r\n            break;\r\n            case Direction.Left:\r\n            path = `M${startX+3} ${startY} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x+12;\r\n            break;\r\n            case Direction.Down:\r\n            path = `M${startX} ${startY-3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y-12;\r\n            break;\r\n            default :\r\n            break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n\r\n}\r\n","import { Generalisation } from './Generalisation';\r\n\r\nexport class Implements extends Generalisation {\r\n\r\n    public getSVG(): Element {\r\n        let group = super.getSVG();\r\n\r\n        this.$pathSvg.setAttributeNS(null, 'stroke-dasharray', '3, 3');\r\n\r\n        return group;\r\n    }\r\n}\r\n","export * from './Association';\r\nexport * from './Aggregate';\r\nexport * from './Aggregation';\r\nexport * from './Composition';\r\nexport * from './Generalisation';\r\nexport * from './Implements';","export * from './edges';\r\nexport * from './nodes';\r\nexport * from './BaseElements';\r\nexport * from './Graph';\r\nexport * from './Model';\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Attribute extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 28.06.2017.\r\n */\r\nimport {Control} from \"../../Control\";\r\n\r\nexport class AutoComplete extends Control {\r\n    private $inputField:HTMLInputElement;\r\n    private $dataList:HTMLDataListElement;\r\n    private $selected:HTMLSelectElement;\r\n    private $items:HTMLDivElement;\r\n    private isMultiple:boolean;\r\n\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        let div:HTMLDivElement = document.createElement('div');\r\n        this.$view = div;\r\n        this.$inputField = document.createElement('input');\r\n        this.$dataList = document.createElement(\"datalist\");\r\n        this.$dataList.id = \"data_\"+this.id;\r\n        this.$inputField.setAttribute(\"list\", \"data_\"+this.id);\r\n        if(data[\"value\"]) {\r\n            let values = data[\"value\"];\r\n            this.isMultiple = data[\"multiple\"] != null;\r\n            let option:HTMLOptionElement;\r\n            if(this.isMultiple) {\r\n                this.$selected = document.createElement(\"select\");\r\n                this.$selected.className = \"hide\";\r\n                this.$selected.multiple = true;\r\n\r\n                this.$selected.id = this.id;\r\n                this.$items = document.createElement(\"div\");\r\n                this.$items.className = \"selectedList\";\r\n                div.appendChild(this.$items);\r\n                this.$inputField.className = \"selectedInput\";\r\n                div.appendChild(this.$selected);\r\n                this.$view[\"style\"].setProperty(\"float\", \"left\");\r\n                let that = this;\r\n                this.$inputField.oninput = function(){that.onChange();}\r\n            } else {\r\n                this.$inputField.id = this.id;\r\n            }\r\n            for (let attr in values) {\r\n                if (!values.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                option = document.createElement(\"option\");\r\n                option.value = values[attr];\r\n                this.$dataList.appendChild(option);\r\n                if(this.isMultiple) {\r\n                    option = document.createElement(\"option\");\r\n                    option.value = values[attr];\r\n                    option.innerHTML = values[attr];\r\n                    this.$selected.appendChild(option);\r\n                }\r\n        }\r\n\r\n            div.appendChild(this.$inputField);\r\n            div.appendChild(this.$dataList);\r\n        }\r\n\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n            if(this.isMultiple) {\r\n                div.appendChild(this.$selected);\r\n            }\r\n        }\r\n\r\n        parent.appendChild(this);\r\n    }\r\n\r\n    public onChange() : void {\r\n        let textValue:string = this.$inputField.value;\r\n        if(textValue.length<1) {\r\n            return;\r\n        }\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == textValue) {\r\n                if(item.selected == false) {\r\n                    item.selected = true;\r\n                    item.defaultSelected = true;\r\n                    let test = document.createElement(\"li\");\r\n                    let that = this;\r\n                    test.onclick = function() {that.onDelete(item.value, test);};\r\n                    test.className = \"selectedItem\";\r\n                    test.innerHTML = item.value;\r\n                    this.$items.appendChild(test);\r\n                    this.$inputField.value = \"\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n    public onDelete(value:string, selectedItem:HTMLLIElement) : void {\r\n        this.$items.removeChild(selectedItem);\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == value ) {\r\n                if(item.selected) {\r\n                    item.selected = false;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","import {Control} from '../../Control';\r\n\r\nexport class BR extends Control {\r\n    public load(json: JSON): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('br');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            this.$view.setAttribute(attr, data[attr]);\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\nexport class Button extends Control {\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        this.$view = document.createElement('button');\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\nimport { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\nimport { Size } from '../index';\r\nimport ClazzProperty from './ClazzProperty';\r\nimport {SymbolLibary} from './Symbol';\r\nimport {StereoType} from './StereoType';\r\nimport {GraphListener} from '../../handlers/GraphListener';\r\n\r\nexport class Class extends Node {\r\n    public attributes: Attribute[] = [];\r\n    public methods: Method[] = [];\r\n    public modifier: string;\r\n    public stereoType: string;\r\n\r\n    protected $attrHeight = 25;\r\n    protected $attrFontSize = 12;\r\n    protected $labelView: Element;\r\n\r\n    constructor(json: JSON | string | Object | any) {\r\n        super(json);\r\n        return this;\r\n    }\r\n\r\n    public load(json?: any) {\r\n        if (!json) {\r\n            json = {};\r\n        }\r\n        let y = this.$labelHeight;\r\n        let labelObj = json.name || json.id || ('New ' + this.property);\r\n\r\n        let width: number = 150;\r\n        width = Math.max(width, Util.sizeOf(labelObj).width + 60);\r\n\r\n        if (json['attributes']) {\r\n            for (let attr of json['attributes']) {\r\n\r\n                let attrObj = new Attribute(attr);\r\n                attrObj.$owner = this;\r\n                this.attributes.push(attrObj);\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(attrObj.toString()).width);\r\n                let listener = new GraphListener(attrObj);\r\n                attrObj.$data.addListener(listener);\r\n            }\r\n        }\r\n        if (json['stereotype']) {\r\n            this.stereoType = json['stereotype'];\r\n        }\r\n        if (json['methods']) {\r\n            for (let method of json['methods']) {\r\n\r\n                let methodObj = new Method(method);\r\n                methodObj.$owner = this;\r\n                this.methods.push(methodObj);\r\n\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(methodObj.toString()).width);\r\n            }\r\n            y += this.$attrHeight;\r\n        }\r\n        this.withSize(width, y);\r\n    }\r\n\r\n    public getAttributes(): Attribute[] {\r\n        return this.attributes;\r\n    }\r\n\r\n    public getMethods(): Method[] {\r\n        return this.methods;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        let icon = SymbolLibary.draw({type: 'Class', property: 'HTML', width: '50', height: '50', transform: 'translate(-26,-21)'});\r\n        return icon;\r\n        // let group = this.createShape(\r\n//    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n//    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos: Point = this.getPos();\r\n        const size: Point = this.getSize();\r\n\r\n        let group = this.createShape({ tag: 'g', id: this.id, class: 'SVGClazz', transform: 'translate(0 0)' });\r\n\r\n        if (this.stereoType) {\r\n            let type = new StereoType(this.stereoType, pos.x, pos.y);\r\n            group.appendChild(type.getSVG());\r\n        }\r\n\r\n        // Full Shape\r\n        let options = null;\r\n        let style;\r\n        let clazzName;\r\n        if (this.$owner['options']) {\r\n            let options = this.$owner['options'];\r\n            if (options) {\r\n                style = options.style;\r\n            }\r\n        }\r\n        // = = = Background = = =\r\n        if (style === 'modern') {\r\n            clazzName = 'ClazzHeader';\r\n        }\r\n        clazzName = 'ClazzHeader';\r\n        const nodeShape = this.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            height: size.y,\r\n            width: size.x,\r\n            rx: 5,\r\n            ry: 5,\r\n            fill: 'none',\r\n            stroke: 'black',\r\n            'stroke-width': 1\r\n        });\r\n        if (clazzName) {\r\n            nodeShape.setAttribute('className', clazzName);\r\n            let styleHeader = Util.getStyle('ClazzHeader');\r\n            // headerHeight = styleHeader.getNumber('height');\r\n        }\r\n\r\n        // = = = LABEL = = =\r\n        let label = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y + this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': this.$labelFontSize,\r\n            fill: 'black'\r\n        });\r\n        label.textContent = this.id;\r\n        this.$labelView = label;\r\n\r\n        group.appendChild(nodeShape);\r\n        group.appendChild(label);\r\n\r\n        // = = = ATTRIBUTES = = =\r\n        if (this.attributes.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorLabelAttr = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight,\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight,\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorLabelAttr);\r\n\r\n            let groupOfAttributes = this.createShape({ tag: 'g', id: (this.id + 'Attributes') });\r\n            groupOfAttributes.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzAttribute');\r\n            group.appendChild(groupOfAttributes);\r\n\r\n            let y = pos.y + this.$labelHeight + this.$attrHeight / 2;\r\n            for (let attr of this.attributes) {\r\n\r\n                let attrSvg = attr.getSVG();\r\n                attr.$owner = this;\r\n\r\n                attrSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                attrSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfAttributes.appendChild(attrSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        // = = = METHODS = = =\r\n        let height = this.attributes.length * this.$attrHeight;\r\n        let y = pos.y + this.$labelHeight + height + this.$attrHeight / 2;\r\n        if (this.methods.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorAttrMethods = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorAttrMethods);\r\n\r\n            let groupOfMethods = this.createShape({ tag: 'g', id: (this.id + 'Methods') });\r\n            groupOfMethods.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzMethod');\r\n            group.appendChild(groupOfMethods);\r\n\r\n            y += this.$attrHeight / 2;\r\n            for (let method of this.methods) {\r\n\r\n                let methodSvg = method.getSVG();\r\n                method.$owner = this;\r\n\r\n                methodSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                methodSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfMethods.appendChild(methodSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        this.$view = group;\r\n        return group;\r\n    }\r\n\r\n    public copy(): Class {\r\n        let copy: Class;\r\n        copy = <Class>super.copy();\r\n\r\n        // copy label\r\n        copy.id = this.id + 'Copy';\r\n\r\n        // copy attributes\r\n        this.attributes.forEach(attr => {\r\n            copy.attributes.push(new Attribute(attr.toString()));\r\n        });\r\n        // copy methods\r\n        this.methods.forEach(method => {\r\n            copy.methods.push(new Method(method.toString()));\r\n        });\r\n        copy.reCalcSize();\r\n\r\n        return copy;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTCLICK,\r\n                EventBus.ELEMENTDRAG, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES, EventBus.RELOADPROPERTIES];\r\n    }\r\n\r\n    public addProperty(value: string, type: string): any {\r\n        if (!this[type] || !value || value.length === 0) {\r\n            return;\r\n        }\r\n\r\n        let extractedValue;\r\n        if (type === 'attributes') {\r\n            extractedValue = new Attribute(value);\r\n        }\r\n        else if (type === 'methods') {\r\n            extractedValue = new Method(value);\r\n        }\r\n\r\n        for (let valueOfType of this[type]) {\r\n            if (valueOfType.toString() === extractedValue.toString()) {\r\n                alert(extractedValue.toString() + ' already exists.');\r\n                extractedValue = undefined;\r\n                return;\r\n            }\r\n        }\r\n\r\n        this[type].push(extractedValue);\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        return extractedValue;\r\n    }\r\n\r\n    public addAttribute(value: string): Attribute {\r\n        return this.addProperty(value, 'attributes');\r\n    }\r\n\r\n    public addAttributeObj(attr: Attribute): Attribute[] {\r\n        this.attributes.push(attr);\r\n        return this.getAttributes();\r\n    }\r\n\r\n    public addMethodObj(method: Method): Method[] {\r\n        this.methods.push(method);\r\n        return this.getMethods();\r\n    }\r\n\r\n    public addMethod(value: string): Method {\r\n        return this.addProperty(value, 'methods');\r\n    }\r\n\r\n    public removeAttribute(attr: Attribute): void {\r\n        let idx = this.attributes.indexOf(attr);\r\n        this.attributes.splice(idx, 1);\r\n    }\r\n\r\n    public removeMethod(method: Method): void {\r\n        let idx = this.methods.indexOf(method);\r\n        this.methods.splice(idx, 1);\r\n    }\r\n\r\n    public removeProperty(property: ClazzProperty): void {\r\n\r\n        if (property instanceof Attribute) {\r\n            this.removeAttribute(<Attribute>property);\r\n        }\r\n\r\n        if (property instanceof Method) {\r\n            this.removeMethod(<Method>property);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n        let hasSizeChanged: [boolean, Size] = this.hasSizeChanged();\r\n\r\n        if (drawOnlyIfSizeChanged) {\r\n            if (!hasSizeChanged[0]) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n\r\n        // redraw only this clazz\r\n        this.$owner.$view.removeChild(this.$view);\r\n        let newSvg = this.getSVG();\r\n        this.$owner.$view.appendChild(newSvg);\r\n        this.$view = newSvg;\r\n        EventBus.register(this, newSvg);\r\n\r\n        this.redrawEdges();\r\n    }\r\n\r\n    public hasSizeChanged(): [boolean, Size] {\r\n        let oldSize = { width: this.getSize().x, height: this.getSize().y };\r\n        let newSize = this.reCalcSize();\r\n\r\n        // size doenst changed, so nothing to redraw\r\n        if (oldSize.width === newSize.width && oldSize.height === newSize.height) {\r\n            return [false, newSize];\r\n        }\r\n\r\n        return [true, newSize];\r\n    }\r\n\r\n    public updateLabel(newLabel: string): void {\r\n        if (this.$labelView) {\r\n            this.$labelView.textContent = newLabel;\r\n        }\r\n\r\n        // update label in all edges\r\n        this.$edges.forEach(edge => {\r\n            if (this.id === edge.$sNode.id) {\r\n                edge.source = newLabel;\r\n            }\r\n            else if (this.id === edge.$tNode.id) {\r\n                edge.target = newLabel;\r\n            }\r\n        });\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        this.reDraw(true);\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.modifier = modifier;\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reCalcSize(): Size {\r\n        // label\r\n        let newWidth = 150;\r\n        newWidth = Math.max(newWidth, Util.sizeOf(this.id).width + 30);\r\n\r\n        // attributes\r\n        this.attributes.forEach(attrEl => {\r\n\r\n            let widthOfAttr;\r\n            if (attrEl.$view) {\r\n                widthOfAttr = attrEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfAttr = Util.sizeOf(attrEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfAttr + 15);\r\n        });\r\n\r\n        // methods\r\n        this.methods.forEach(methodEl => {\r\n            let widthOfMethod;\r\n            if (methodEl.$view) {\r\n                widthOfMethod = methodEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfMethod = Util.sizeOf(methodEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfMethod + 15);\r\n        });\r\n\r\n        // TODO: height has to be calculated by font-size\r\n        this.getSize().x = newWidth;\r\n        this.getSize().y = this.$labelHeight + ((this.attributes.length + this.methods.length) * this.$attrHeight)\r\n            + this.$attrHeight;\r\n\r\n        let newSize = { width: newWidth, height: this.getSize().y };\r\n\r\n        return newSize;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    private getModernStyle(): Element {\r\n        let width, height, id, size, z, item, rect, g, board, styleHeader, headerHeight, x, y;\r\n        board = this.getRoot()['board'];\r\n        styleHeader = Util.getStyle('ClazzHeader');\r\n        headerHeight = styleHeader.getNumber('height');\r\n        width = 0;\r\n        height = 10 + headerHeight;\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].getType().toLowerCase() === 'objectdiagram') {\r\n            id = this.id.charAt(0).toLowerCase() + this.id.slice(1);\r\n            item = 'Object';\r\n        } else {\r\n            id = this.id;\r\n            item = 'Class';\r\n            if (this['counter']) {\r\n                id += ' (' + this['counter'] + ')';\r\n            }\r\n        }\r\n        g = Util.create({tag: 'g', model: this});\r\n        size = Util.sizeOf(id, this);\r\n        width = Math.max(width, size.width);\r\n        if (this.attributes && this.attributes.length > 0) {\r\n            height = height + this.attributes.length * 25;\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.attributes[z], this).width);\r\n            }\r\n        } else {\r\n            height += 20;\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            height = height + this.methods.length * 25;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.methods[z], this).width);\r\n            }\r\n        }\r\n        width += 20;\r\n\r\n        let pos = this.getPos();\r\n        y = pos.y;\r\n        x = pos.x;\r\n\r\n        rect = {\r\n            tag: 'rect',\r\n            'width': width,\r\n            'height': height,\r\n            'x': x,\r\n            'y': y,\r\n            'class': item + ' draggable',\r\n            'fill': 'none'\r\n        };\r\n        g.appendChild(Util.create(rect));\r\n        g.appendChild(Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            'x': x,\r\n            'y': y,\r\n            height: headerHeight,\r\n            'width': width,\r\n            'class': 'ClazzHeader'\r\n        }));\r\n\r\n        item = Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'class': 'InfoText',\r\n            'text-anchor': 'right',\r\n            'x': x + width / 2 - size.width / 2,\r\n            'y': y + (headerHeight / 2) + (size.height / 2),\r\n            'width': size.width\r\n        });\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].type.toLowerCase() === 'objectdiagram') {\r\n            item.setAttribute('text-decoration', 'underline');\r\n        }\r\n        item.appendChild(document.createTextNode(id));\r\n\r\n        g.appendChild(item);\r\n        g.appendChild(Util.create({\r\n            tag: 'line',\r\n            x1: x,\r\n            y1: y + headerHeight,\r\n            x2: x + width,\r\n            y2: y + headerHeight,\r\n            stroke: '#000'\r\n        }));\r\n        y += headerHeight + 20;\r\n\r\n        if (this.attributes) {\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': (x + 10),\r\n                    'y': y,\r\n                    value: this.attributes[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n            if (this.attributes.length > 0) {\r\n                y -= 10;\r\n            }\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            g.appendChild(Util.create({tag: 'line', x1: x, y1: y, x2: x + width, y2: y, stroke: '#000'}));\r\n            y += 20;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': x + 10,\r\n                    'y': y,\r\n                    value: this.methods[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n        }\r\n        return g;\r\n    }\r\n}\r\n","import {Util} from '../../util';\r\nimport {DiagramElement} from '../BaseElements';\r\nimport Data from '../../Data';\r\n\r\nexport default class ClazzProperty extends DiagramElement {\r\n\r\n    // Public (+)\r\n    // Private (-)\r\n    // Protected (#)\r\n    // Package (~)\r\n\r\n    public $data = new Data();\r\n//    public modifier: string = '+';\r\n//    public name: string;\r\n//    public type: string;\r\n//    public value: string;\r\n\r\n    constructor(data: any | JSON) {\r\n        super();\r\n        this.$data.setValue('modifier', '+');\r\n        this.$data.setValue('name', null);\r\n        this.$data.setValue('type', null);\r\n        this.$data.setValue('value', null);\r\n        this.extractData(data);\r\n    }\r\n\r\n    public update(data: any | JSON): void {\r\n        this.extractData(data);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.$data.setValue('modifier', modifier);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateType(type: string): void {\r\n        this.$data.setValue('type', type);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateValue(value: string): void {\r\n        this.$data.setValue('value', value);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateName(name: string): void {\r\n        this.$data.setValue('name', name);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public getName(): string {\r\n        return this.$data.getValue('name');\r\n    }\r\n\r\n    public getModifier(): string {\r\n        return this.$data.getValue('modifier');\r\n    }\r\n\r\n    public getType(): string {\r\n        return this.$data.getValue('type');\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let attrText = {\r\n            tag: 'text',\r\n            'text-anchor': 'start',\r\n            'alignment-baseline': 'middle',\r\n        };\r\n\r\n        let attrSvg = Util.createShape(attrText);\r\n        attrSvg.textContent = this.toString();\r\n\r\n        this.$view = attrSvg;\r\n\r\n        return attrSvg;\r\n    }\r\n\r\n    public toString(): string {\r\n        let value = this.$data.getValue('value');\r\n        let result = this.$data.getValue('modifier') + ' ';\r\n        result += this.$data.getValue('name') + ' : ';\r\n        result += this.$data.getValue('type');\r\n        if (value && value.length > 0) {\r\n            result += ' = ' + this.$data.getValue('value');\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.$data.setValue('type', data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.$data.setValue('name', data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.$data.setValue('modifier', data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n\r\n            // e.g. name : string or name:string\r\n            let dataSplitted = data.split(':');\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                let name;\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.$data.setValue('modifier', firstChar);\r\n                    name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                }\r\n                else {\r\n                    name = modifierAndNameSplitted;\r\n                }\r\n                // delete whitespaces in name\r\n                name = name.replace(/ /g, '_');\r\n\r\n                this.$data.setValue('name', name);\r\n                let type = dataSplitted[1].trim() || 'String';\r\n\r\n                // if the type was entered with a small begin letter\r\n                if (type.toLowerCase() === 'string') {\r\n                    type = 'String';\r\n                }\r\n                // delete whitespaces in type\r\n                type = type.replace(/ /g, '_');\r\n                this.$data.setValue('type',  type);\r\n            } else {\r\n                dataSplitted = data.split('=');\r\n                if (dataSplitted && dataSplitted.length === 2) {\r\n                    // modifer (and or) name\r\n                    let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                    // first char is +, - or #\r\n                    let firstChar = modifierAndNameSplitted[0];\r\n                    let name;\r\n                    if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                        this.$data.setValue('modifier', firstChar);\r\n                        name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                    }\r\n                    else {\r\n                        name = modifierAndNameSplitted;\r\n                    }\r\n                    // delete whitespaces in name\r\n                    name = name.replace(/ /g, '_');\r\n\r\n                    this.$data.setValue('name', name);\r\n                    let value = dataSplitted[1].trim() || '\"\"';\r\n                    this.$data.setValue('value', value);\r\n                    this.$data.setValue('type', typeof value);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected updateTextOfView() {\r\n        if (this.$view) {\r\n            this.$view.textContent = this.toString();\r\n        }\r\n        if (this.$owner) {\r\n            Util.saveToLocalStorage(this.$owner.$owner);\r\n        }\r\n    }\r\n}\r\n","import {Node} from \"./Node\";\r\n/**\r\n * Created by Stefan on 29.03.2017.\r\n */\r\n\r\nexport class Dice extends Node {\r\n    private value: number;\r\n    private max: number = 6;\r\n    private $animation: SVGElement;\r\n    private $zoom: number = 0.6;\r\n    private $border: number = 0.2;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super(data);\r\n        this.withSize(100, 100);\r\n    }\r\n\r\n    public setNumber(number: number) {\r\n        this.value = number;\r\n        this.refresh();\r\n    }\r\n\r\n    public refresh() {\r\n        if (this.$view) {\r\n            this.reset();\r\n            let group = this.createPointValue();\r\n            if (group) {\r\n                this.$view.appendChild(group);\r\n            }\r\n        }\r\n    }\r\n\r\n    public reset() {\r\n        if (this.$view) {\r\n            while (this.$view.children.length > 1) {\r\n                if(this.$view.children.item(this.$view.children.length - 1).tagName!== \"animateTransform\") {\r\n                    console.log(this.$view.children.item(this.$view.children.length - 1));\r\n                    this.$view.removeChild(this.$view.children.item(this.$view.children.length - 1));\r\n                }else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let dice: SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x + size.x * this.$border,\r\n            y: pos.y + size.y * this.$border,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y * this.$zoom,\r\n            width: size.x * this.$zoom,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        dice.appendChild(this.createShape(attr));\r\n\r\n        let group = this.createPointValue();\r\n        if (group) {\r\n            dice.appendChild(group);\r\n        }\r\n\r\n        this.$view = dice;\r\n        return dice;\r\n    }\r\n\r\n    public animationTimeout(newValues: number[]) {\r\n        if(newValues.length>0) {\r\n            let newValue = newValues.shift();\r\n            this.setNumber(newValue);\r\n            let that=this;\r\n            setTimeout(function() {that.animationTimeout(newValues)}, 100);\r\n        }\r\n    }\r\n\r\n    public roll() {\r\n        this.startAnimation();\r\n        let values:number[]=[];\r\n        let i:number;\r\n        for(i=1;i<this.max;i++) {\r\n            values.push(i);\r\n        }\r\n        for(i=this.max;i>0;i--) {\r\n            values.push(i);\r\n        }\r\n        let that=this;\r\n        values.push( Math.floor(Math.random() * this.max)+1 );\r\n        setTimeout(function() {that.animationTimeout(values)}, 100);\r\n    }\r\n    public startAnimation() {\r\n        if(this.$animation) {\r\n            return;\r\n        }\r\n        let center = this.getPos().x+this.getSize().x /2;\r\n        const attr = {\r\n            tag: 'animateTransform',\r\n            attributeType: \"xml\",\r\n            attributeName:\"transform\",\r\n            type:\"rotate\",\r\n            dur: \"1s\",\r\n            repeatCount:\"1\",\r\n            from:\"0 \"+center+\" \"+center,\r\n            to:\"360 \"+center+\" \"+center\r\n        };\r\n        this.$animation = <SVGElement>this.createShape(attr);\r\n        this.$view.appendChild(this.$animation);\r\n    }\r\n\r\n    public stopAnimation() {\r\n        if(this.$animation) {\r\n            this.$view.removeChild(this.$animation);\r\n            this.$animation = null;\r\n        }\r\n    }\r\n\r\n    public createPointValue() :SVGElement {\r\n        if (this.value == 1) {\r\n           return this.getCircle(2, 2);\r\n        } else if (this.value == 2) {\r\n            return this.getCircle(1, 1, 3, 3);\r\n        } else if (this.value == 3) {\r\n            return this.getCircle(1, 1, 2, 2, 3, 3);\r\n        } else if (this.value == 4) {\r\n            return this.getCircle(1, 1, 1, 3, 3, 1, 3, 3);\r\n        } else if (this.value == 5) {\r\n            return this.getCircle(1, 1, 1, 3, 2, 2, 3, 1, 3, 3);\r\n        } else if (this.value == 6) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 7) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 2, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 8) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 9) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private getCircle(...values:number[]) : SVGElement {\r\n        if (values.length % 2 > 0) {\r\n            return null;\r\n        }\r\n        let size = this.getSize();\r\n        let pos = this.getPos();\r\n        //FIXME let group:SVGElement = <SVGElement>this.createShape({tag: 'g', transform: 'translate(0 0)', height: size.y, width: size.x});\r\n        let group:SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n\r\n\r\n        for (let i: number = 0; i < values.length; i += 2) {\r\n            group.appendChild(this.createCircle(values[i], values[i + 1]));\r\n        }\r\n        return group;\r\n    }\r\n    private createCircle(x:number, y:number) : SVGElement {\r\n        let size = this.getSize();\r\n        let radius = size.x / 10*this.$zoom;\r\n        let border = size.y*this.$border;\r\n        let zoom = size.y*this.$zoom;\r\n        const attr = {\r\n            tag: 'circle',\r\n            r : radius,\r\n            cx: (size.x*this.$zoom * x) / 4 + border,\r\n            cy: (size.y*this.$zoom * y) / 4 + border,\r\n            stroke:\"black\",\r\n            \"stroke-width\":\"3\",\r\n            fill:\"red\",\r\n            style: 'fill:black;stroke:black;stroke-width:2'\r\n        };\r\n        return <SVGElement>this.createShape(attr);\r\n    }\r\n}","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\n\r\nexport class Div extends Control {\r\n    private className: string;\r\n\r\n    public load(data:JSON|any): any {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = <string>data;\r\n        } else {\r\n            id = data.id;\r\n            this.className = data.class;\r\n            this.property = data.property;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let div: HTMLElement = document.getElementById(id);\r\n\r\n        if (!this.property) {\r\n            // if(inputField){\r\n            // TODO disuss how to decide, which property we should listen on...\r\n            // this.property = id;\r\n            this.property = div.getAttribute('Property');\r\n            // }\r\n        }\r\n\r\n        if (div instanceof HTMLDivElement) {\r\n            this.$view = div;\r\n        } else {\r\n            if (!div) {\r\n                this.$view = document.createElement('div');\r\n                this.$view.setAttribute('id', this.id);\r\n                this.$view.setAttribute('property', this.property);\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists+\r\n        if (data.hasOwnProperty('property')) {\r\n            this.setProperty(data['property']);\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        this.$model = entity;\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.className || entity.hasProperty(this.className)) {\r\n                if (entity.id === this.property.split('.')[0]) {\r\n                    entity.addListener(this, this.className);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        this.$view.innerHTML = <string>newValue;\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Form extends Control {\r\n    // private applyingChange: boolean = false;\r\n    private children: Object = {};\r\n    // private property: string = \"\";\r\n\r\n    /**\r\n     * Data should look like the following json:\r\n     *\r\n     * <pre>{\r\n     *      id: \"t1\",\r\n     *      control: \"form\",\r\n     *      elements: [\r\n     *          {id: \"inputField1\", property: \"talk\"},\r\n     *          {id: \"inputField2\", property: \"room\"}\r\n     *      ]\r\n     * }</pre>\r\n     * @param data\r\n     */\r\n    public load(data: any) {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let form: HTMLElement = document.getElementById(id);\r\n\r\n        if (form instanceof HTMLFormElement) {\r\n            this.$view = form;\r\n            if (this.$view.hasAttribute('property')) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            if (!form) {\r\n                this.$view = document.createElement('form');\r\n                this.$view.setAttribute('id', this.id);\r\n\r\n                if (data.hasOwnProperty('property')) {\r\n                    this.property = data['property'];\r\n                }\r\n\r\n                // add all the attributes to the form element\r\n                for (let attr in data) {\r\n                    if (data.hasOwnProperty(attr) === false) {\r\n                        continue;\r\n                    }\r\n                    if (attr === 'elements') {\r\n                        continue;\r\n                    }\r\n                    this.$view.setAttribute(attr, data[attr]);\r\n                }\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists\r\n        let objId = this.property;\r\n        let hasItem = this.$owner.hasItem(objId);\r\n        if (hasItem) {\r\n            let item = this.$owner.getItem(objId);\r\n            item.addListener(this);\r\n            this.$model = item;\r\n        }\r\n\r\n        // now create all the sub input controls\r\n        for (let field of data.elements) {\r\n            // this.createField(field);\r\n            if (field.hasOwnProperty('property')) {\r\n                let property = field['property'];\r\n                property = this.property + '.' + property;\r\n                field['property'] = property;\r\n            }\r\n            if (!field.hasOwnProperty('class')) {\r\n                field['class'] = 'input';\r\n            }\r\n\r\n            // let the Bridge load the subControl\r\n            let control: Control = this.$owner.load(field, this);\r\n\r\n            // add subControl to children\r\n            this.children[control.getId()] = control;\r\n        }\r\n\r\n    }\r\n\r\n    public setProperty(id: string): void {\r\n        this.property = id;\r\n        let keys: string[] = Object.keys(this.children);\r\n        for (let k = 0; k < keys.length; k++) {\r\n            let key = keys[k];\r\n            let childControl = this.children[key];\r\n            // only set Property, if there is a Property defined before\r\n            if (childControl.property) {\r\n                childControl.setProperty(this.property + '.' + childControl.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object,  oldValue?: Object): boolean {\r\n        if (this.$owner != null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    /**\r\n     * Here we create the form elements and put all the attributes to them in order for the Control only having to load\r\n     * the data were appending here. Alternative would be loading with the bridge and afterwards setting\r\n     * the owner to the form instead of the body..\r\n     * @param field\r\n     */\r\n    /*private createField(field: Object) {\r\n     let control = 'input';\r\n     if (field.hasOwnProperty('class')) {\r\n     control = field['class'];\r\n     }\r\n     let input = document.createElement(control);\r\n     input.setAttribute('class', control);\r\n     let id: string;\r\n     if (!field.hasOwnProperty('id')) {\r\n     // TODO: not the best solution for generating unique id's for forms...\r\n     id = this.$owner.getId();\r\n     field['id'] = id;\r\n     }\r\n     if (field.hasOwnProperty('property')) {\r\n     let property = field['property'];\r\n     property = this.id + '.' + property;\r\n     input.setAttribute('property', property);\r\n     }\r\n     for (let attr in field) {\r\n     if (attr === 'property' || attr === 'class' || !field.hasOwnProperty(attr)) {\r\n     continue;\r\n     }\r\n     input.setAttribute(attr, field[attr]);\r\n     }\r\n\r\n     this.$viewElement.appendChild(input);\r\n\r\n     let newcontrol: Control = this.$owner.load(field['id']);\r\n     this.children[newcontrol.getId()] = newcontrol;\r\n     }*/\r\n}\r\n","/**\r\n * Created by Stefan on 01.03.2017.\r\n */\r\nimport {Control} from '../../Control';\r\n\r\nexport class HTML extends Control {\r\n    constructor(data: JSON|Object|any) {\r\n        super();\r\n\r\n        let id: string;\r\n        let tag: string;\r\n\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            data = {};\r\n        } else if (data) {\r\n            id = data.id;\r\n        }\r\n        if (id) {\r\n            this.id = id;\r\n            this.$view = document.getElementById(id);\r\n        }\r\n        if (!this.$view) {\r\n            if (data) {\r\n                tag = data['tag'] || 'div';\r\n            } else {\r\n                tag = 'div';\r\n            }\r\n            this.$view = document.createElement(tag);\r\n            let parent = document.getElementsByTagName('body')[0];\r\n            parent.appendChild(this.$view);\r\n        }\r\n        if (!parent) {\r\n            return;\r\n        }\r\n        this.writeAttribute(data, this.$view);\r\n    }\r\n\r\n    private writeAttribute(properties: Object, entity?: any) {\r\n        let lowKey;\r\n        if (!entity) {\r\n            lowKey = properties['tag'] || 'div';\r\n            entity = document.createElement(lowKey);\r\n        }\r\n        for (let key in properties) {\r\n            if (!properties.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            lowKey = key.toLowerCase();\r\n            if (properties[key] === null) {\r\n                entity.setAttribute(key, '');\r\n                continue;\r\n            }\r\n\r\n            if (lowKey === 'tag' || lowKey.charAt(0) === '$' || lowKey === '$graphModel' || lowKey === 'class') {\r\n                continue;\r\n            }\r\n            if (lowKey === 'children') {\r\n                if (Array.isArray(properties[key])) {\r\n                    for (let item in properties[key]) {\r\n                        if (properties[key].hasOwnProperty(item) === false) {\r\n                            continue;\r\n                        }\r\n                        let child = this.writeAttribute(item);\r\n                        if (child) {\r\n                            entity.appendChild(child);\r\n                        }\r\n                    }\r\n                } else {\r\n                    let child = this.writeAttribute(properties[key]);\r\n                    if (child) {\r\n                        entity.appendChild(child);\r\n                    }\r\n                }\r\n                continue;\r\n            }\r\n            entity[key] = properties[key];\r\n        }\r\n        return entity;\r\n    }\r\n}\r\n","import { Point } from '../BaseElements';\r\nimport { Util } from '../../util';\r\nimport { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\n\r\nexport class InfoText extends Node {\r\n\r\n    public cardinality: string = '';\r\n    private $heightOfOneTextItem: number;\r\n    private $cardinalitySvg: Element;\r\n    private $propertySvg: Element;\r\n    private $rectBackground: Element;\r\n\r\n    constructor(info: any) {\r\n        super(info);\r\n        if (typeof (info) === 'string') {\r\n            this.id = info;\r\n        } else {\r\n            if (info.property) {\r\n                this.property = info.property;\r\n            }\r\n            if (info.cardinality) {\r\n                this.cardinality = info.cardinality;\r\n            }\r\n        }\r\n        this.$isDraggable = true;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n    }\r\n\r\n    public updateCardinality(cardinality: string): void {\r\n        this.cardinality = cardinality;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (this.$rectBackground) {\r\n            this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n            this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n        }\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((cardinality.length === 0 && this.property.length > 0) || !this.$cardinalitySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$cardinalitySvg) {\r\n            this.$cardinalitySvg.textContent = cardinality;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.property.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    public updateProperty(property: string): void {\r\n        this.property = property;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((property.length === 0 && this.cardinality.length > 0) || !this.$propertySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$propertySvg) {\r\n            this.$propertySvg.textContent = property;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.cardinality.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos: Point = this.getPos();\r\n        let group = Util.create({ tag: 'g', class: 'SVGEdgeInfo', transform: 'translate(0, 0)' });\r\n\r\n        // append rect as background for text items\r\n        this.$rectBackground = Util.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y - this.$heightOfOneTextItem + 3,\r\n            width: this.getSize().x,\r\n            height: this.getSize().y,\r\n            fill: '#DDD',\r\n            'stroke-width': 0,\r\n            rx: '5',\r\n            ry: '5'\r\n        });\r\n        group.appendChild(this.$rectBackground);\r\n\r\n        let y = pos.y;\r\n        if (this.property) {\r\n            // property\r\n            this.$propertySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$propertySvg.textContent = this.property;\r\n            group.appendChild(this.$propertySvg);\r\n\r\n            y += this.$heightOfOneTextItem;\r\n        }\r\n\r\n        // cardinality\r\n        if (this.cardinality) {\r\n            this.$cardinalitySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$cardinalitySvg.textContent = this.cardinality;\r\n            group.appendChild(this.$cardinalitySvg);\r\n        }\r\n\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        let cardinalityAvailable = this.cardinality && this.cardinality.length > 0;\r\n        let propertyAvailable = this.property && this.property.length > 0;\r\n\r\n        return !propertyAvailable && !cardinalityAvailable;\r\n    }\r\n\r\n    public redrawFromEdge(newPos: Point): void {\r\n\r\n        if (!newPos) {\r\n            return;\r\n        }\r\n\r\n        let oldPos = this.getPos();\r\n\r\n        // get difference between new and the old position\r\n        let diffPos = new Point();\r\n        diffPos.x = newPos.x - oldPos.x;\r\n        diffPos.y = newPos.y - oldPos.y;\r\n\r\n        // get translate information\r\n        let translation = this.$view.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        let sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        // set new traslation values\r\n        let newTransX = (sx + diffPos.x);\r\n        let newTransY = (sy + diffPos.y);\r\n        this.$view.setAttributeNS(null, 'transform', 'translate(' + newTransX + ' ' + newTransY + ')');\r\n\r\n        // set new position of svg\r\n        this.getPos().x = newPos.x;\r\n        this.getPos().y = newPos.y;\r\n    }\r\n\r\n    public getText(): string {\r\n        let infoTxt: string = '';\r\n\r\n        if (this.property) {\r\n            infoTxt = this.property;\r\n        }\r\n        if (this.cardinality) {\r\n            if (infoTxt.length > 0) {\r\n                infoTxt += '\\n';\r\n            }\r\n            infoTxt += this.cardinality;\r\n        }\r\n\r\n        return infoTxt;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    private calcSize(): Point {\r\n        let text: string = this.getText();\r\n        let items: Array<string> = text.split('\\n');\r\n\r\n        let maxSize = new Point(0, 0);\r\n        if (text.length === 0) {\r\n            return maxSize;\r\n        }\r\n\r\n        for (let i = 0; i < items.length; i += 1) {\r\n            // calculate size\r\n            let sizeOfText: ClientRect = Util.sizeOf(items[i]);\r\n            maxSize.x = Math.max(maxSize.x, sizeOfText.width);\r\n            maxSize.y += sizeOfText.height;\r\n\r\n            this.$heightOfOneTextItem = sizeOfText.height;\r\n        }\r\n\r\n        return maxSize;\r\n    }\r\n    private resetAllSvgElements() {\r\n        this.$cardinalitySvg = undefined;\r\n        this.$view = undefined;\r\n        this.$propertySvg = undefined;\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\nimport {PropertyBinder} from '../../PropertyBinder';\r\n\r\nexport class Input extends Control {\r\n    private type: string;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data = super.initViewDataProperties(oldData);\r\n        if ('checkbox' === this.type || 'radio' === this.type) {\r\n            data.addFrom('checked', oldData);\r\n        }\r\n        data.addFrom('value', oldData);\r\n        data.addFrom('type', oldData);\r\n        return data;\r\n    }\r\n\r\n    public load(data: any) {\r\n        let id: string;\r\n        let inputField: HTMLElement;\r\n        let useData: boolean;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            useData = true;\r\n        } else {\r\n            id = data.id;\r\n            if (data.type) {\r\n                this.setType(data['type']);\r\n            } else {\r\n                this.setType('text');\r\n            }\r\n            if (data.hasOwnProperty('property')) {\r\n                this.setProperty(data['property']);\r\n            }\r\n            useData = false;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n\r\n        inputField = document.getElementById(id);\r\n\r\n        if (useData) {\r\n            if (inputField) {\r\n                // TODO disuss how to decide, which property we should listen on...\r\n                // this.property = id;\r\n                if (inputField.hasAttribute('Property')) {\r\n                    this.setProperty(inputField.getAttribute('Property'));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (inputField instanceof HTMLInputElement) {\r\n            this.setView(inputField);\r\n            this.type = inputField.type;\r\n            // useData = false;\r\n        } else {\r\n            if (!inputField) {\r\n                this.setView(document.createElement('input'));\r\n                this.$viewData = this.initViewDataProperties(this.$viewData);\r\n                // append viewListener\r\n                // this.$view.addEventListener('change', this.$viewListener);\r\n                if (typeof(data) !== 'string') {\r\n                    for (let attr in data) {\r\n                        if (data.hasOwnProperty(attr) === false) {\r\n                            continue;\r\n                        }\r\n                        // this.$view[attr] = data[attr];\r\n                        this.$viewData.setValue(attr, data[attr]);\r\n                    }\r\n                } else {\r\n                    if (this.type) {\r\n                        this.$view.setAttribute('type', this.type);\r\n                    }\r\n                    if (data.hasOwnProperty('class')) {\r\n                        this.$view.setAttribute('class', data['class']);\r\n                    }\r\n                    this.$view.setAttribute('id', this.id);\r\n                    this.$view.setAttribute('property', this.property);\r\n                }\r\n\r\n                if (data.value) {\r\n                    // if theres a value at the control, we want to change the model to the new value\r\n                    if (this.$model) {\r\n                        this.$model.setValue(this.lastProperty, data.value);\r\n                    }\r\n                }\r\n                if (this.$model) {\r\n                    PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                }\r\n\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (this.property && entity) {\r\n            if (entity.id === this.property.split('.')[0]) {\r\n                this.$model = entity;\r\n                PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                // entity.addListener(this, this.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n    // TODO FIXME protected updateElement(property: string, value: string) {\r\n    //     if (this.$view instanceof HTMLInputElement) {\r\n    //         if (value != null) {\r\n    //             if(property == this.lastProperty) {\r\n    //                 (<HTMLInputElement>this.$view)[this.getStandardProperty()] = value;\r\n    //             } else {\r\n    //                 // this.getRoot().setValue(this, property, value, (<HTMLInputElement>this.$view)[property]);\r\n    //                 (<HTMLInputElement>this.$view)[property] = value;\r\n    //             }\r\n    //         } else {\r\n    //             delete (<HTMLInputElement>this.$view)[property];\r\n    //         }\r\n    //     }\r\n    // }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            super.controlChanged(ev);\r\n        }\r\n// <<<<<<< HEAD\r\n//             let newVal = element[this.getStandardProperty()];\r\n//             if (this.isKeyOnly()) {\r\n//                 // we expect, element[this.lastProperty] to be boolean:\r\n//                 if (!newVal) {\r\n//                     newVal = null;\r\n//                 }\r\n//             } else {\r\n//             }\r\n        // let $graphModel;\r\n        // let value;\r\n        /*if (this.$graphModel) {\r\n            $graphModel = this.$graphModel;\r\n            value = this.$graphModel.getValue(this.lastProperty);\r\n        } else {\r\n            $graphModel = this;\r\n            if (this.$view) {\r\n                value = this.$view[this.lastProperty];\r\n            }\r\n        }*/\r\n        // this.$model.setValue(this.lastProperty, newVal);\r\n        // this.propertyChange(this.$graphModel,this.lastProperty, this.$graphModel.getValue(this.lastProperty), newVal);\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n// =======\r\n        // let newVal = element[this.lastProperty];\r\n        // if (this.isKeyOnly()) {\r\n        //     // we expect, element[this.lastProperty] to be boolean:\r\n        //     if (!newVal) {\r\n        //         newVal = null;\r\n        //     }\r\n        // } else {\r\n        // }\r\n        // let $graphModel;\r\n        // let value;\r\n\r\n        // $graphModel = this.getViewData();\r\n        // if (this.$graphModel) {\r\n        //     $graphModel = this.$graphModel;\r\n        //     value = this.$graphModel.getValue(this.lastProperty);\r\n        // } else {\r\n        //     $graphModel = this;\r\n        //     if (this.$view) {\r\n        //         value = this.$view[this.lastProperty];\r\n        //     }\r\n        // }\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n//            this.saveViewInData();\r\n// >>>>>>> addOldFunctions\r\n//         } else {\r\n//             console.log('value does not match the pattern...');\r\n//         }\r\n    }\r\n\r\n    public setType(type: string): void {\r\n        let oldValue: string = this.type;\r\n        if (oldValue === type) {\r\n            return;\r\n        }\r\n        if (type === 'radio') {\r\n            this.$viewData.setValue('checked', null);\r\n        } else {\r\n            this.$viewData.removeKey('checked');\r\n        }\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\n\r\nexport class Label extends Control {\r\n    public load(data: JSON): any {\r\n        this.createControl(this.$owner, data);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('label');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr === 'textContent') {\r\n                this.$view.textContent = data['textContent'];\r\n            } else {\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Method extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.updateType(data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.updateType(data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.updateType(data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n            // e.g. setName() : string or name:string\r\n            let dataSplitted = data.split(':');\r\n\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }\r\n                else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType(dataSplitted[1].trim() || 'void');\r\n            }\r\n            // set default return type of void\r\n            else {\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = data.trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }  else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType('void');\r\n            }\r\n        }\r\n\r\n        if (Util.includes(this.$data.getValue('name'), '(') && !Util.includes(this.$data.getValue('name'), ')') === false) {\r\n            this.$data.setValue('name', this.$data.getValue('name') + '()');\r\n        }\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\nimport {Association} from '../edges';\r\nimport { GraphModel } from '..';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\n\r\nexport class Node extends DiagramElement {\r\n    public $edges: Association[] = [];\r\n    public $minWidth: number = 150;\r\n    public $minheight: number = 25;\r\n    public $defaulEdgeType: string;\r\n\r\n    constructor(data: JSON|string|Object|any) {\r\n        super();\r\n\r\n        // default size\r\n        this.withSize(this.$minWidth, this.$minheight);\r\n\r\n        if (data) {\r\n            if (data['x'] && data['y']) {\r\n                this.withPos(data['x'], data['y']);\r\n            }\r\n            if (data['width'] || data['height']) {\r\n                this.withSize(data['width'], data['height']);\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos = this.getPos();\r\n        const size = this.getSize();\r\n\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x - size.x / 2,\r\n            y: pos.y - size.y / 2,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y,\r\n            width: size.x,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        const shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'middle',\r\n            'font-family': 'Verdana',\r\n            'font-size': '14',\r\n            fill: 'black'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = this.id;\r\n\r\n        let group = this.createShape({tag: 'g', id: this.id});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public copy(): Node {\r\n        let copy: Node;\r\n        // create new id\r\n        let model = <GraphModel>this.$owner || <GraphModel>this.getRoot();\r\n        if (model) {\r\n            let type = this.property || Node.name;\r\n            let newId = model.getNewId(type);\r\n            copy = <Node>model.createElement(type, newId, null);\r\n            copy.withSize(this.getSize().x, this.getSize().y);\r\n            copy.$owner = model;\r\n        } else {\r\n            copy.id = this.id + '-copy';\r\n            copy.$owner = this.getRoot();\r\n        }\r\n        return copy;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n// EMPTY\r\n    }\r\n    public addAttribute(value: string): Attribute {\r\n        return null;\r\n    }\r\n    public getAttributes(): Attribute[] {\r\n        return null;\r\n    }\r\n    public addMethod(value: string): Method {\r\n        return null;\r\n    }\r\n    public updateLabel(newLabel: string): void {\r\n// EMPTY\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\n\r\nexport class SO extends DiagramElement {\r\n    public static create(element: Object) {\r\n        let result: SO = new SO();\r\n        for (let key in element) {\r\n            if (element.hasOwnProperty(key) === false) {\r\n                continue;\r\n            }\r\n            result.withKeyValue(key, element[key]);\r\n\r\n        }\r\n        return result;\r\n    }\r\n\r\n    public withKeyValue(key: string, value: any): SO {\r\n        if (key === 'typ') {\r\n            this.property = value;\r\n        } else if (key === 'x') {\r\n            this.withPos(value, null);\r\n        } else if (key === 'y') {\r\n            this.withPos(null, value);\r\n        } else if (key === 'width') {\r\n            this.withSize(value, null);\r\n        } else if (key === 'height') {\r\n            this.withSize(null, value);\r\n        } else {\r\n            this[key] = value;\r\n        }\r\n        return this;\r\n    }\r\n}\r\n","import {Point} from '../BaseElements';\r\nimport {Node} from './Node';\r\n\r\nexport class StereoType extends Node {\r\n\r\n    protected stereoType: string;\r\n\r\n    constructor (type: string, x: number, y: number) {\r\n        super('');\r\n        this.withPos(x, y);\r\n        this.setStereoType(type);\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        let pos: Point = this.getPos();\r\n        let size: Point = this.getSize();\r\n\r\n               // = = = STEREOTYPE = = =\r\n        let stereoType = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y - this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': 10,\r\n            'font-weight': 'bold',\r\n            fill: 'black'\r\n        });\r\n        stereoType.textContent = this.stereoType;\r\n\r\n        this.$view = stereoType;\r\n        return stereoType;\r\n    }\r\n\r\n    public setStereoType(value: string): void {\r\n        this.stereoType = '<<' + value + '>>';\r\n    }\r\n\r\n    public getStereoType(): string {\r\n        return this.stereoType;\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { SO } from './SO';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport { Util } from '../../util';\r\n\r\nexport class Symbol extends Node {\r\n    public $heightMax: number = 0;\r\n    public $heightMin: number = 0;\r\n\r\n    constructor(typ: string) {\r\n        super(typ);\r\n    }\r\n\r\n    public draw(typ?: string): SVGElement {\r\n        return SymbolLibary.draw(this);\r\n    }\r\n}\r\n\r\n// \t\t\t\t###################################################### SymbolLibary ####################################################################################\r\n// Example Items\r\n// {tag: 'path', d: ''}\r\n// {tag: 'rect', width:46, height:34}\r\n// {tag: 'ellipse', width:23, height:4}\r\n// {tag: 'line', x1:650, y1:-286, x2:650, y2:-252}\r\n// {tag: 'circle', r:5, x:12, y:0}\r\n// {tag: 'image', height: 30, width: 50, content$src: hallo}\r\n// {tag: 'text', 'text-anchor': 'left', x: '10'}\r\nexport class SymbolLibary {\r\n\r\n    public static drawSVG(node: any): SVGSVGElement {\r\n        // const lib = new SymbolLibary();\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            const parent = SO.create(node);\r\n            parent['property'] = 'SVG';\r\n            symbol = fn(parent);\r\n            // symbol = fn.apply(lib, parent);\r\n\r\n            return SymbolLibary.createGroup(parent, symbol);\r\n        }\r\n        return symbol;\r\n    }\r\n\r\n    public static draw(node: any, parent?: Object): SVGElement {\r\n        // Node is Symbol or simple Object\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            if (!(node instanceof DiagramElement)) {\r\n                node = SO.create(node);\r\n                if (!node.property) {\r\n                    node.property = 'SVG';\r\n                }\r\n            }\r\n            symbol = fn.apply(this, [node]);\r\n            if (!parent) {\r\n                return SymbolLibary.createGroup(node, symbol);\r\n            }\r\n            return SymbolLibary.createGroup(node, symbol);\r\n        } else if (node.property) {\r\n            symbol = new Symbol(node.property);\r\n            symbol.init(node);\r\n            let pos = node.getPos();\r\n            let size = node.getSize();\r\n            symbol.withPos(pos.x, pos.y);\r\n            symbol.withSize(size.x, size.y);\r\n            symbol['value'] = node['value'];\r\n            parent = node['$parent'];\r\n            return SymbolLibary.draw(symbol, parent);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public static upFirstChar(txt: string): string {\r\n        return txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase();\r\n    }\r\n\r\n    public static isSymbolName(typ: string): boolean {\r\n        let fn = SymbolLibary['draw' + SymbolLibary.upFirstChar(typ)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static isSymbol(node: Symbol) {\r\n        let fn = SymbolLibary[SymbolLibary.getName(node)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static getName(node: any): string {\r\n        if (node['type']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['type']);\r\n        }\r\n        if (node.property) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node.property);\r\n        }\r\n        if (node['src']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['src']);\r\n        }\r\n        return 'drawNode';\r\n    }\r\n\r\n    /*FIXME   public static createImage(node: Symbol, $graphModel:Node) {\r\n           let n, img: HTMLElement;\r\n           // node.$graphModel = node;\r\n           if (SymbolLibary.isSymbol(node)) {\r\n               return SymbolLibary.draw(null, node);\r\n           }\r\n           n = {tag: 'img', $graphModel: node, src: node['src']};\r\n           let size = node.getSize();\r\n           if (size.isEmpty() === false) {\r\n               n['width'] = size.x;\r\n               n['height'] = size.y;\r\n           } else {\r\n               n['xmlns'] = 'http://www.w3.org/1999/xhtml';\r\n           }\r\n           img = Util.create(n);\r\n           if (size.isEmpty()) {\r\n               $graphModel.appendImage(img);\r\n               return null;\r\n           }\r\n           return img;\r\n       }*/\r\n\r\n    public static createGroup(node: DiagramElement, group: any) {\r\n        let func, y: number, z: number, box, item: Element, transform, i, offsetX = 0, offsetY = 0;\r\n        let svg: any;\r\n        if (node.property.toUpperCase() === 'HTML') {\r\n            let so = {\r\n                tag: 'svg',\r\n                style: { left: (group.x | 0) + node.getPos().x, top: (group.y | 0) + node.getPos().y, position: 'absolute' }\r\n            };\r\n            if (node['transform']) {\r\n                so['transform'] = node['transform'];\r\n            }\r\n            svg = Util.create(so);\r\n        } else {\r\n            svg = Util.create({ tag: 'g' });\r\n            transform = 'translate(' + group.getPos().x + ' ' + group.getPos().y + ')';\r\n            if (group.scale) {\r\n                transform += ' scale(' + group.scale + ')';\r\n            }\r\n            if (group.rotate) {\r\n                transform += ' rotate(' + group.rotate + ')';\r\n            }\r\n            svg.setAttribute('transform', transform);\r\n            if (group['id']) {\r\n                svg.id = group['id'];\r\n            }\r\n        }\r\n\r\n        if (node['tooltip']) {\r\n            const tooltipTitleAttr = {\r\n                tag: 'title'\r\n            };\r\n            let tooltipTitle = Util.createShape(tooltipTitleAttr);\r\n            tooltipTitle.textContent = node['tooltip'];\r\n            svg.appendChild(tooltipTitle);\r\n        }\r\n\r\n        if (node['background']) {\r\n            const attrCircle = {\r\n                tag: 'circle',\r\n                cx: 20,\r\n                cy: 20,\r\n                r: 17,\r\n                stroke: '#888',\r\n                'stroke-width': 0,\r\n                fill: '#DDD'\r\n            };\r\n            svg.appendChild(Util.create(attrCircle));\r\n        }\r\n\r\n        for (i = 0; i < group.items.length; i += 1) {\r\n            svg.appendChild(Util.create(group.items[i]));\r\n        }\r\n        let elements = node['elements'];\r\n        Util.setSize(svg, group.width + node.getSize().x, group.height + node.getSize().y);\r\n        node['$heightMin'] = node.getSize().y;\r\n        if (elements) {\r\n            for (i = 0; i < elements.length; i += 1) {\r\n                if (!elements[i] && elements[i].length < 1) {\r\n                    elements.splice(i, 1);\r\n                    i -= 1;\r\n                }\r\n            }\r\n            box = Util.create({ tag: 'g' });\r\n            // Calculate new Height\r\n            let c: number;\r\n            z = 0;\r\n            for (c = 0; c < elements.length; c += 1) {\r\n                if (typeof elements[c] === 'string') {\r\n                    z += 1;\r\n                } else {\r\n                    z += elements[c].length;\r\n                }\r\n            }\r\n            z = z * 25 + 6;\r\n            box.appendChild(Util.create({\r\n                tag: 'rect',\r\n                rx: 0,\r\n                x: offsetX,\r\n                y: (offsetY + 28),\r\n                width: 70,\r\n                height: z,\r\n                stroke: '#000',\r\n                fill: '#fff',\r\n                opacity: '0.7'\r\n            }));\r\n            node['$heightMax'] = z + node['$heightMin'];\r\n\r\n            svg['elements'] = elements;\r\n            if (node['type'] === 'DropDown') {\r\n                svg['activ'] = Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': 60,\r\n                    'x': (10 + offsetX),\r\n                    'y': 20,\r\n                    value: node['activText']\r\n                });\r\n                svg.appendChild(svg.activ);\r\n            }\r\n\r\n            y = offsetY + 46;\r\n            // 46 -28 = 18\r\n\r\n            func = function (event: Event) {\r\n                if (svg.activ) {\r\n                    svg.activ.textContent = (<any>event.currentTarget).value;\r\n                }\r\n            };\r\n            let txt: string;\r\n            let textClass = 'SVGTEXT';\r\n            for (z = 0; z < elements.length; z += 1) {\r\n                if (typeof elements[z] === 'string') {\r\n                    txt = elements[z];\r\n                } else {\r\n                    item = this.addText(y, offsetX, box, elements[z][0], 'SVGTEXT');\r\n                    y += 26;\r\n                    for (c = 1; c < elements[z].length; c += 1) {\r\n                        item = this.addText(y, offsetX, box, '* ' + elements[z][c], 'SVGTEXTITEM');\r\n\r\n                        item['value'] = elements[z];\r\n                        if (node['action']) {\r\n                            item['onclick'] = node['action'];\r\n                        } else {\r\n                            item['onclick'] = func;\r\n                        }\r\n                        y += 26;\r\n                    }\r\n                    txt = elements[z];\r\n                    let subBox = Util.create({\r\n                        tag: 'rect',\r\n                        rx: 0,\r\n                        x: offsetX,\r\n                        y: (offsetY + 28),\r\n                        width: 60,\r\n                        height: z,\r\n                        stroke: '#000',\r\n                        fill: '#fff',\r\n                        opacity: '0.7'\r\n                    });\r\n                    continue;\r\n                }\r\n                // let txt = elements[z];\r\n                item = this.addText(y, offsetX, box, txt, textClass);\r\n\r\n                item['value'] = elements[z];\r\n                if (node['action']) {\r\n                    item['onclick'] = node['action'];\r\n                } else {\r\n                    item['onclick'] = func;\r\n                }\r\n                y += 26;\r\n            }\r\n            svg.choicebox = box;\r\n        }\r\n        svg.tool = node;\r\n        svg.onclick = function () {\r\n            if (svg.status === 'close') {\r\n                svg.open();\r\n            } else {\r\n                svg.close();\r\n            }\r\n        };\r\n        svg.close = function () {\r\n            if (svg.status === 'open' && svg.choicebox) {\r\n                this.removeChild(svg.choicebox);\r\n            }\r\n            svg.status = 'close';\r\n            svg.tool.$size.height = svg.tool.heightMin;\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x, g.tool.height + g.tool.y);\r\n            Util.setSize(svg, svg.tool.$size.x, svg.tool.$size.y);\r\n        };\r\n        svg.open = function () {\r\n            if (this.tagName === 'svg') {\r\n                return;\r\n            }\r\n            if (svg.status === 'close' && svg.choicebox) {\r\n                this.appendChild(svg.choicebox);\r\n            }\r\n            svg.status = 'open';\r\n            svg.tool.$size.height = svg.tool.heightMax;\r\n            Util.setSize(svg, svg.tool.width, svg.tool.height);\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x + 10, g.tool.height + g.tool.y + 10);\r\n        };\r\n        svg.close();\r\n        return svg;\r\n    }\r\n\r\n    public static addChild(parent: SVGElement, json: JSON | Element): void {\r\n        let item: Element;\r\n        if ((<any>json).offsetLeft) {\r\n            item = <Element>json;\r\n        } else {\r\n            item = Util.create(json);\r\n        }\r\n        item.setAttribute('class', 'draggable');\r\n        parent.appendChild(item);\r\n    }\r\n\r\n    public static all(node: any): void {\r\n        SymbolLibary.drawSmiley(node);\r\n        SymbolLibary.drawDatabase(node);\r\n        SymbolLibary.drawLetter(node);\r\n        SymbolLibary.drawMobilephone(node);\r\n        SymbolLibary.drawWall(node);\r\n        SymbolLibary.drawActor(node);\r\n        SymbolLibary.drawLamp(node);\r\n        SymbolLibary.drawArrow(node);\r\n        SymbolLibary.drawButton(node);\r\n        SymbolLibary.drawDropdown(node);\r\n        SymbolLibary.drawClassicon(node);\r\n        SymbolLibary.drawClassWithEdgeicon(node);\r\n    }\r\n\r\n    public static drawHamburger(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'circle', r: 10, fill: '#ccc', cx: 12, cy: 12, 'stroke-width': 1, stroke: 'black'},\r\n                { tag: 'path', d: 'M 8,7 H 16 M 8,12 H 16 M 8,17 H 16', stroke: 'black', fill: 'none' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawSmiley(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'path', d: 'm49.01774,25.64542a24.5001,24.5 0 1 1 -49.0001,0a24.5001,24.5 0 1 1 49.0001,0z', stroke: 'black', fill: 'none' }, { tag: 'path', d: 'm8,31.5c16,20 32,0.3 32,0.3' },\r\n                { tag: 'path', d: 'm19.15,20.32a1.74,2.52 0 1 1 -3.49,0a1.74,2.52 0 1 1 3.49,0z' },\r\n                { tag: 'path', d: 'm33,20.32a1.74,2.52 0 1 1 -3.48,0a1.74,2.52 0 1 1 3.48,0z' },\r\n                { tag: 'path', d: 'm5.57,31.65c3.39,0.91 4.03,-2.20 4.03,-2.20' },\r\n                { tag: 'path', d: 'm43,32c-3,0.91 -4,-2.20 -4.04,-2.20' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDatabase(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 40,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,-6.26 25.03,-6.26 25.03,0l0,25.82c0,6.26 -25.03,6.26 -25.03,0l0,-25.82z',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLetter(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 17,\r\n            items: [\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1,1l22,0l0,14l-22,0l0,-14z' },\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1.06,1.14l10.94,6.81l10.91,-6.91' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMobilephone(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 4.2 0.5 15.61 0c 2 0 3.7 1.65 3.7 3.7l 0 41.6c 0 2-1.65 3.7-3.7 3.7l-15.6 0c-2 0-3.7-1.6-3.7-3.7l 0-41.6c 0-2 1.6-3.7 3.7-3.7z',\r\n                    fill: 'none',\r\n                    stroke: 'black'\r\n                },\r\n                { tag: 'path', d: 'm 12.5 2.73a 0.5 0.5 0 1 1-1 0 0.5 0.5 0 1 1 1 0z' },\r\n                { tag: 'path', d: 'm 14 46a 2 2 0 1 1-4 0 2 2 0 1 1 4 0z' },\r\n                { tag: 'path', d: 'm 8 5 7 0' },\r\n                { tag: 'path', d: 'm 1.63 7.54 20.73 0 0 34-20.73 0z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawWall(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'path', d: 'm26,45.44l-5,3.56l-21,-9l0,-36.41l5,-3.56l20.96,9l-0,36.4z' },\r\n                {\r\n                    tag: 'path',\r\n                    stroke: 'white',\r\n                    d: 'm2.21,11l18.34,7.91m-14.46,-12.57l0,6.3m8.2,21.74l0,6.35m-8.6,-10l0,6.351m4.1,-10.67l0,6.3m4.8,-10.2l0,6.3m-8.87,-10.23l0,6.35m4.78,-10.22l0,6.35m-8,14.5l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m0,-13l0,34m-18.23,-41.84l18.3,8m0,0.11l5,-3.57'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawActor(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'line', stroke: '#000', x1: '12', y1: '10', x2: '12', y2: '30' },\r\n                { tag: 'circle', stroke: '#000', cy: '5', cx: '12', r: '5' },\r\n                { tag: 'line', stroke: '#000', y2: '18', x2: '25', y1: '18', x1: '0' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '5', y1: '30', x1: '12' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '20', y1: '30', x1: '12' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLamp(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 22.47 10.58c-6.57 0-11.89 5.17-11.89 11.54 0 2.35 0.74 4.54 2 6.36 2 4 4.36 5.63 4.42 10.4l 11.15 0c 0.12-4.9 2.5-6.8 4.43-10.4 1.39-1.5 1.8-4.5 1.8-6.4 0-6.4-5.3-11.5-11.9-11.5z',\r\n                    fill: 'white',\r\n                    stroke: 'black'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 40 8 0c 0.58 0 1 0.5 1 1 0 0.6-0.5 1-1 1l-8 0c-0.6 0-1-0.47-1-1 0-0.58 0.47-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 42.7 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 45.3 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                { tag: 'path', d: 'm 19.5 48c 0.37 0.8 1 1.3 1.9 1.7 0.6 0.3 1.5 0.3 2 0 0.8-0.3 1.4-0.8 1.9-1.8z' },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 6 37.5 4.2-4c 0.3-0.3 0.8-0.3 1 0 0.3 0.3 0.3 0.8 0 1.1l-4.2 4c-0.3 0.3-0.8 0.3-1.1 0-0.3-0.3-0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 39 37.56-4.15-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 38 23 5.8 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.8 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 1.3 23 6 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.9 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 34.75 11.2 4-4.1c 0.3-0.3 0.3-0.8 0-1-0.3-0.3-0.8-0.3-1 0l-4 4.1c-0.3 0.3-0.3 0.8 0 1 0.3 0.3 0.8 0.3 1 0z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 11.23 10-4-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 21.64 1.3 0 5.8c 0 0.4 0.3 0.8 0.8 0.8 0.4 0 0.8-0.3 0.8-0.8l 0-5.8c 0-0.4-0.3-0.8-0.8-0.8-0.4 0-0.8 0.3-0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 26.1 24.3c-0.5 0-1 0.2-1.3 0.4-1.1 0.6-2 3-2.27 3.5-0.26-0.69-1.14-2.9-2.2-3.5-0.7-0.4-2-0.7-2.5 0-0.6 0.8 0.2 2.2 0.9 2.9 1 0.9 3.9 0.9 3.9 0.9 0 0 0 0 0 0 0.54 0 2.8 0 3.7-0.9 0.7-0.7 1.5-2 0.9-2.9-0.2-0.3-0.7-0.4-1.2-0.4z'\r\n                },\r\n                { tag: 'path', d: 'm 22.5 28.57 0 10.7' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawStop(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 30,\r\n            height: 30,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: '#FFF',\r\n                    'stroke-width': '2',\r\n                    stroke: '#B00',\r\n                    d: 'm 6,6 a 14,14 0 1 0 0.06,-0.06 z m 0,0 20,21'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMin(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    d: 'm 0,0 19,0 0,19 -19,0 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 13,-0.04'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawArrow(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 10,\r\n            height: 9,\r\n            rotate: node['rotate'],\r\n            items: [\r\n                { tag: 'path', fill: '#000', stroke: '#000', d: 'M 0,0 10,4 0,9 z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMax(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    'stroke-dashoffset': 2,\r\n                    'stroke-dasharray': '4.8,4.8',\r\n                    d: 'm 0,0 4.91187,0 5.44643,0 9.11886,0 0,19.47716 -19.47716,0 0,-15.88809 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 6,0.006 0.02,5 0.01,-11 -0.03,6.02 c 2,-0.01 4,-0.002 6,0.01'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawButton(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight, btnValue;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        btnValue = node['value'] || '';\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: 60,\r\n            height: 28,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 8,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    filter: 'url(#drop-shadow)',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                { tag: 'text', $font: true, x: 10, y: 18, fill: 'black', value: btnValue, 'class': 'hand' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDropdown(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 0,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth - 20,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 2,\r\n                    x: btnWidth - 20,\r\n                    y: 0,\r\n                    width: 20,\r\n                    height: 28,\r\n                    stroke: '#000',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    style: 'fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1',\r\n                    d: 'm ' + (btnWidth - 15) + ',13 10,0 L ' + (btnWidth - 10) + ',20 z'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassicon(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.19999l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm25.68807,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.2l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                { tag: 'line', x1: 11, y1: 7, x2: 25, y2: 7, stroke: '#000' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassWithEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M2,10 20,10 20,35 2,35 Z M2,17 20,17 M20,10 28,5 28,9 M 28.5,4.7 24,4',\r\n                    style: 'fill:none;stroke:#000000;transform:scale(0.8);'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClass(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: '100%',\r\n            height: '100%',\r\n            items: [\r\n                { tag: 'rect', width: 50, height: 40, x: 0, y: 0, 'stroke-width': 2, stroke: 'black', fill: 'none'},\r\n                { tag: 'rect', width: 50, height: 12, x: 0, y: 18, 'stroke-width': 1, stroke: 'black', fill: 'none'},\r\n                { tag: 'text', x: 27, y: 14, 'text-anchor': 'middle', 'font-size': 11, value: 'Class'},\r\n                { tag: 'text', x: 5, y: 24, 'font-size': 5, value: '+ field: type'},\r\n                { tag: 'text', x: 5, y: 36, 'font-size': 5, value: '+ method(type)'}\r\n            ]\r\n        });\r\n    }\r\n/*\r\n<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n    <g>\r\n    <text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text>\r\n        <text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>\r\n*/\r\n\r\n    public static drawEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M10,30 30,10 M19,10 30,10 30,21',\r\n                    style: 'fill:none;stroke:#555;stroke-width:2;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawCopynode(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M5 5 L15 5 L15 20 L5 20 Z M5 10 L15 10',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M8 2 L18 2 L18 17 L8 17 Z M8 7 L18 7'\r\n                        + 'M11 4.5 L15 4.5 '\r\n                        + 'M10 10 L16 10 '\r\n                        + 'M10 13 L16 13 ',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawBasket(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M12 12 L18 12 L18 11 L22 11 L22 12 L28 12 L28 14 L27 14 L27 29 L13 29 L13 14 L12 14 Z M13 14 L27 14 M20 17 L20 26 M17 16 L17 27 M23 16 L23 27',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawPencil(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M6 20 L12 23 L33 23 L33 17 L12 17 Z M30 17 L30 23 M12 17 L12 23 M15 19 L28 19 M15 21 L28 21',\r\n                    stroke: '#000',\r\n                    'stroke-width': 1,\r\n                    fill: 'white'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    private static addText(y: number, offsetX: number, box: Element, text: string, textClass: string): Element {\r\n        let item: Element;\r\n        box.appendChild(Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'text-anchor': 'left',\r\n            width: 70,\r\n            x: 10,\r\n            y: y,\r\n            class: textClass,\r\n            value: text,\r\n            eventValue: text\r\n        }));\r\n        if (textClass === 'SVGTEXT') {\r\n            textClass = 'SVGChoiceText';\r\n        } else {\r\n            textClass = 'SVGChoice';\r\n        }\r\n\r\n        item = Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            x: offsetX,\r\n            y: y - 18,\r\n            width: 70,\r\n            height: 24,\r\n            stroke: 'none',\r\n            class: textClass,\r\n        });\r\n        item['eventValue'] = text;\r\n        box.appendChild(item);\r\n        return item;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n}\r\n","import {Control} from '../../Control';\r\nimport BridgeElement from '../../BridgeElement';\r\nimport Data from '../../Data';\r\nimport {Util} from '../../util';\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Table extends Control {\r\n    protected items: BridgeElement[] = [];\r\n    private columns: Column[] = [];\r\n    private cells: Object = {};\r\n    private $bodysection: HTMLTableSectionElement;\r\n    private $headersection: HTMLTableSectionElement;\r\n    private showedItems: Array<BridgeElement> = [];\r\n    // BridgeElements:\r\n    private itemsIds: Object = {};\r\n    private countElement: HTMLElement;\r\n    private countColumn: HTMLElement;\r\n    private countColumnPos: number;\r\n    private resultColumn: string;\r\n    private lastSearchText: string;\r\n    private searchColumns: Array<string> = [];\r\n    private searchText: Array<string> = [];\r\n    private sortColumn: Column;\r\n    private direction: number;\r\n    private moveElement: Column = null;\r\n    private isDrag: boolean = false;\r\n    private moveTimeStamp: number;\r\n    private moveX: number;\r\n    private movePos: number;\r\n    private dragColumn: Column;\r\n    private dragPos: number;\r\n    private tableOption: HTMLTableHeaderCellElement;\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    private static indexOfChild(item: BridgeElement) {\r\n        let i: number = 0;\r\n        let child: Node = item.gui;\r\n        while ((child = child.previousSibling) !== null) {\r\n            i++;\r\n        }\r\n        return i;\r\n    }\r\n\r\n    public load(data: any): void {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n            if (data.property) {\r\n                this.property = data.property;\r\n            }\r\n\r\n            if (data.searchColumns) {\r\n                let search: Array<string> = [];\r\n                if (typeof(data.searchColumns) === 'string') {\r\n                    search = data.searchColumns.split(' ');\r\n                } else {\r\n                    search = data.searchColumns;\r\n                }\r\n                for (let z: number = 0; z < search.length; z++) {\r\n                    let item = search[z].trim();\r\n                    if (item.length > 0) {\r\n                        if (this.searchColumns.indexOf(item) < 0) {\r\n                            this.searchColumns.push(item);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        if (this.$view) {\r\n            // Must be an Update\r\n            if (data['columns']) {\r\n                // It is a json must add all things and generate HTML\r\n                for (let i in data['columns']) {\r\n                    if (data['columns'].hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    let col = this.parseData(data['columns'][i]);\r\n                    this.addHeaderInfo(col);\r\n                    this.columns.push(col);\r\n                    this.tableOption.parentElement.insertBefore(col.$element, this.tableOption);\r\n                }\r\n                for (let i in this.showedItems) {\r\n                    let item: BridgeElement = this.showedItems[i];\r\n                    let cell;\r\n                    // Now Add some Children\r\n                    while (item.gui.children.length < this.columns.length) {\r\n                        cell = document.createElement('td');\r\n                        item.gui.appendChild(cell);\r\n                    }\r\n                    // Now Remove Some Children\r\n                    while (item.gui.children.length > this.columns.length) {\r\n                        item.gui.removeChild(item.gui.children[item.gui.children.length - 1]);\r\n                    }\r\n                    for (let c: number = 0; c < this.columns.length; c++) {\r\n                        let name = this.columns[c].attribute;\r\n                        // let count = this.columns.length;\r\n                        cell = item.gui.children[c];\r\n                        cell.innerHTML = item.model.getValue(name);\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n\r\n        this.$view = document.getElementById(id);\r\n        let headerrow: HTMLTableRowElement;\r\n        if (this.$view) {\r\n            if (!this.property) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('table');\r\n            this.$owner.appendChild(this);\r\n        }\r\n        if (!this.$bodysection) {\r\n            // add tbody element if missing\r\n            this.$bodysection = document.createElement('tbody');\r\n            this.$view.appendChild(this.$bodysection);\r\n        }\r\n        if (data['classname']) {\r\n            this.$view.className = data['classname'];\r\n        } else {\r\n            this.$view.className = 'mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp';\r\n        }\r\n\r\n        this.id = id;\r\n        this.$view.id = id;\r\n        this.$view.setAttribute('type', this.constructor['name'].toLowerCase());\r\n        let counter = 0;\r\n        for (let c = 0; c < this.$view.children.length; c++) {\r\n            let row: HTMLTableRowElement = <HTMLTableRowElement>this.$view.children[c];\r\n            if (row instanceof HTMLTableSectionElement) {\r\n                if (row.tagName === 'THEAD') {\r\n                    headerrow = row;\r\n                    // Its a thead\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingHeader(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                } else {\r\n                    // Its a tbody\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingData(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                }\r\n            } else {\r\n                // fallback, if there are no thead and tbody...\r\n                if (counter === 0) {\r\n                    headerrow = row;\r\n                    this.parsingHeader(row);\r\n                } else {\r\n                    this.parsingData(row);\r\n                }\r\n            }\r\n            counter++;\r\n        }\r\n        if (!headerrow || !this.$headersection) {\r\n            if (!this.$headersection) {\r\n                // find eventually existing thead\r\n                let header = this.$view.getElementsByTagName('thead');\r\n                if (header.length === 0) {\r\n                    this.$headersection = document.createElement('thead');\r\n                    this.$view.appendChild(this.$headersection);\r\n                } else {\r\n                    // take first thead element\r\n                    this.$headersection = <HTMLTableSectionElement>header.item(0);\r\n                }\r\n            }\r\n            if (!headerrow) {\r\n                headerrow = document.createElement('tr');\r\n                this.$headersection.appendChild(headerrow);\r\n            }\r\n        }\r\n\r\n        if (data['columns']) {\r\n            // It is a json must add all things and generate HTML\r\n            for (let i in data['columns']) {\r\n                if (data['columns'].hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                let col = this.parseData(data['columns'][i]);\r\n                this.addHeaderInfo(col);\r\n                this.columns.push(col);\r\n                headerrow.appendChild(col.$element);\r\n            }\r\n            this.tableOption = document.createElement('th');\r\n            this.tableOption.classList.add('tableOption');\r\n            headerrow.appendChild(this.tableOption);\r\n            let context: HTMLElement = this.addOptionItem(null, this.tableOption, true);\r\n            let contentChild: HTMLElement = this.addOptionItem('show', context, true);\r\n            // let simpleLink: HTMLElement = this.addOptionItem('show', contentChild, false);\r\n            this.addOptionItem('show', contentChild, false);\r\n        }\r\n        this.registerEvents(['mousemove', 'mousedown', 'mouseup', 'resize', 'dragstart', 'dragover', 'drop', 'dragend']);\r\n\r\n        // Check for SearchBar\r\n        // if(data[\"searchproperty\"]){\r\n        // Create Full Row\r\n        let searchBar = document.createElement('tr');\r\n        let cell = document.createElement('td');\r\n        cell.setAttribute('colspan', '' + (this.columns.length));\r\n        searchBar.appendChild(cell);\r\n\r\n        let search = document.createElement('input');\r\n        search.className = 'search';\r\n        let that = this;\r\n        search.addEventListener('keyup', function (evt) {\r\n            that.search(evt.target['value']);\r\n        });\r\n\r\n        cell.appendChild(search);\r\n        if (this.resultColumn) {\r\n            if (this.resultColumn.indexOf('#') !== 0) {\r\n                this.countElement = document.createElement('div');\r\n                searchBar.appendChild(this.countElement);\r\n            } else {\r\n                for (let z: number = 0; z < this.$headersection.children.length; z++) {\r\n                    if (this.$headersection.children[z].innerHTML === this.resultColumn) {\r\n                        this.countColumn = <HTMLElement> this.$headersection.children[z];\r\n                        this.countColumnPos = z;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        let first = this.$headersection.children.item(0);\r\n        this.$headersection.insertBefore(searchBar, first);\r\n\r\n        this.updateElement(this.property, null);\r\n\r\n        // now update those elements, that were not loaded currently\r\n    }\r\n\r\n    public tableEvent(type: string, e: Event) {\r\n        let button: number = 0;\r\n        let eventX: number = 0;\r\n        if (e instanceof MouseEvent) {\r\n            button = e.buttons;\r\n            eventX = e.pageX;\r\n        }\r\n        if (type === 'mouseup') {\r\n            this.moveElement = null;\r\n        } else if (type === 'mousedown' || type === 'resize') {\r\n            // End to Resize\r\n            this.moveElement = null;\r\n            if (button === 1) {\r\n                let c: number;\r\n                for (c = 0; c < this.columns.length; c++) {\r\n                    if (this.columns[c].$resize === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = false;\r\n                        break;\r\n                    } else if (this.columns[c].$element === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = true;\r\n                    }\r\n                }\r\n                this.moveTimeStamp = e.timeStamp;\r\n                this.moveX = eventX;\r\n            } else {\r\n                this.moveTimeStamp = 0;\r\n            }\r\n        } else if (type === 'mousemove') {\r\n            if (button === 1 && this.moveElement) {\r\n                if (this.moveTimeStamp && e.timeStamp - this.moveTimeStamp < 2000) {\r\n                    if (this.isDrag) {\r\n                        // FIXME\r\n                    } else {\r\n                        let x = eventX - this.moveX;\r\n                        let width = this.moveElement.$element.offsetWidth;\r\n                        this.moveElement.$element.width = '' + (width + x);\r\n                        e.stopPropagation();\r\n                    }\r\n                }\r\n                this.moveX = eventX;\r\n                this.moveTimeStamp = e.timeStamp;\r\n            }\r\n        } else if (this.isDrag) {\r\n            this.columnDragEvent(type, <DragEvent> e);\r\n        }\r\n    }\r\n\r\n    public parsingHeader(row: HTMLTableRowElement) {\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let column: HTMLTableHeaderCellElement = <HTMLTableHeaderCellElement>row.children[i];\r\n            let id = column.innerHTML.trim();\r\n            let col: Column = null;\r\n            for (let c in this.columns) {\r\n                if (this.columns.hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                if (this.columns[c].label === id) {\r\n                    col = this.columns[c];\r\n                    col.$element = column;\r\n                    break;\r\n                }\r\n            }\r\n            if (col === null) {\r\n                col = new Column();\r\n                col.label = id;\r\n                col.attribute = column.getAttribute('attribute');\r\n                col.$element = column;\r\n                this.columns.push(col);\r\n            }\r\n            this.addHeaderInfo(col);\r\n        }\r\n    }\r\n\r\n    public parsingData(row: HTMLTableRowElement) {\r\n        let id = row.getAttribute('id');\r\n        let item: Data = this.$owner.getItem(id);\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let cell: HTMLTableCellElement = <HTMLTableCellElement>row.children[i];\r\n            let colAttribute = this.columns[i].attribute;\r\n            if (colAttribute.indexOf('\\.') < 0) {\r\n                item[colAttribute] = cell.innerHTML.trim();\r\n            }\r\n        }\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: Object, newValue: Object) {\r\n        if (entity) {\r\n            // Check for Show\r\n            if (this.property && !entity.hasProperty(property)) {\r\n                return;\r\n            }\r\n        }\r\n        if (entity.id === undefined) {\r\n            return;\r\n        }\r\n        let item: BridgeElement = <BridgeElement>this.itemsIds[entity.id];\r\n        let row: HTMLTableRowElement;\r\n        if (!item) {\r\n            item = new BridgeElement(entity);\r\n            this.items.push(item);\r\n            this.itemsIds[entity.id] = item;\r\n        }\r\n        row = this.cells[entity.id];\r\n        if (row) {\r\n            item.gui = row;\r\n        }\r\n        if (this.searching(item) === false) {\r\n            return;\r\n        }\r\n        let cell;\r\n        let showItem = false;\r\n\r\n        if (!row) {\r\n            showItem = true;\r\n            row = document.createElement('tr');\r\n            let count = this.columns.length;\r\n            for (let i = 0; i < count; i++) {\r\n                cell = document.createElement('td');\r\n                row.appendChild(cell);\r\n            }\r\n            this.cells[entity.id] = row;\r\n            item.gui = row;\r\n        }\r\n        for (let c: number = 0; c < this.columns.length; c++) {\r\n            let name = this.columns[c].attribute;\r\n            if (name === property) {\r\n                cell = row.children[c];\r\n                cell.innerHTML = <string>newValue;\r\n            }\r\n        }\r\n        if (showItem) {\r\n            this.showItem(item, true);\r\n        }\r\n        // super.propertyChange(entity, property, newValue, oldValue);\r\n    }\r\n\r\n    public sort(column: Column) {\r\n        if (this.sortColumn === column) {\r\n            if (this.direction === 1) {\r\n                this.direction = -1;\r\n                column.$element.classList.remove('asc');\r\n                column.$element.classList.add('desc');\r\n            } else {\r\n                this.direction = 1;\r\n                column.$element.classList.remove('desc');\r\n                column.$element.classList.add('asc');\r\n            }\r\n        } else {\r\n            if (this.sortColumn !== null) {\r\n                this.sortColumn.$element.classList.remove('desc');\r\n                this.sortColumn.$element.classList.remove('asc');\r\n            }\r\n            this.sortColumn = column;\r\n            this.sortColumn.$element.classList.add('asc');\r\n            this.direction = 1;\r\n        }\r\n        let that = this;\r\n        let sort = function (a: BridgeElement, b: BridgeElement) {\r\n            return that.sorting(a, b);\r\n        };\r\n        this.showedItems.sort(sort);\r\n        let len: number = this.showedItems.length;\r\n        let body = this.$bodysection;\r\n        let i = 0;\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            if (i !== Table.indexOfChild(item)) {\r\n                break;\r\n            }\r\n            i = i + 1;\r\n        }\r\n        while (body.children.length > i) {\r\n            body.removeChild(body.children.item(body.children.length - 1));\r\n        }\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            body.appendChild(item.gui);\r\n            i = i + 1;\r\n        }\r\n\r\n        //      body.removeChild(item.gui);\r\n        //      body.remove\r\n    }\r\n\r\n    public sorting(a: BridgeElement, b: BridgeElement): number {\r\n        let path: string[] = this.sortColumn.attribute.split('.');\r\n        let itemA = a.model.prop;\r\n        let itemB = b.model.prop;\r\n        let check = this.sortColumn.attribute;\r\n        for (let p = 0; p < path.length; p++) {\r\n            check = path[p];\r\n            if (itemA[check]) {\r\n                itemA = itemA[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n            if (itemB[check]) {\r\n                itemB = itemB[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n        if (itemA !== itemB) {\r\n            if (this.direction === 1) {\r\n                return (itemA < itemB) ? -1 : 1;\r\n            }\r\n            return (itemA < itemB) ? 1 : -1;\r\n\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    // Searching\r\n    public search(origSearchText: string): void {\r\n        if (!origSearchText) {\r\n            origSearchText = '';\r\n        }\r\n        let searchText: string = origSearchText.trim().toLowerCase();\r\n        if (searchText === this.lastSearchText && searchText !== '') {\r\n            return; // <==== nothing to be done\r\n        }\r\n        let oldSearch: string = this.lastSearchText;\r\n        this.lastSearchText = searchText;\r\n\r\n        this.parseSearchArray();\r\n        if (searchText !== '' && oldSearch !== null && searchText.indexOf(oldSearch) >= 0 && searchText.indexOf('|') < 0) {\r\n            this.searchArray(this.showedItems);\r\n        } else {\r\n            this.searchSet(this.items);\r\n        }\r\n        this.refreshCounter();\r\n    }\r\n\r\n    public refreshCounter() {\r\n        if (this.countColumn) {\r\n            this.countColumn.innerHTML = this.columns[this.countColumnPos].label + ' (' + this.showedItems.length + ')';\r\n        }\r\n        // var countElement = document.getElementById('talkCount');\r\n        //  if (countElement) {\r\n        //     var txt = (this.showedItems.size() > 0 && searchText.length > 0 ) ? this.options.TEXT_SEARCHLIST : this.options.TEXT_SEARCHFULLLIST;\r\n        //     countElement.innerHTML = txt.replace(\"%LEN%\", this.root['children'].length).replace(\"%COUNT%\", this.showedItems.size()).replace(\"%SEARCH%\", origSearchText);\r\n        // }\r\n        // if (this.countColumn) {\r\n        //     this.countColu1mn.innerHTML = this.countColumn[\"label\"] + \" (\" + this.showedItems.size() + \")\";\r\n        // }\r\n    }\r\n\r\n    public parseSearchArray() {\r\n        let pos: number = 0;\r\n        let split: Array<string> = [];\r\n        let quote: boolean = false;\r\n        for (let i: number = 0; i < this.lastSearchText.length; i++) {\r\n            if ((this.lastSearchText.charAt(i) === ' ') && !quote) {\r\n                let txt = this.lastSearchText.substring(pos, i).trim();\r\n                if (txt.length > 0) {\r\n                    split.push(txt);\r\n                }\r\n                pos = i + 1;\r\n            } else if (this.lastSearchText.charAt(i) === '\\\"') {\r\n                if (quote) {\r\n                    let txt = this.lastSearchText.substring(pos, i).trim();\r\n                    if (txt.length > 0) {\r\n                        split.push(txt);\r\n                    }\r\n                    pos = i + 1;\r\n                } else {\r\n                    pos = i + 1;\r\n                }\r\n                quote = !quote;\r\n            }\r\n        }\r\n        if (pos < this.lastSearchText.length) {\r\n            split.push(this.lastSearchText.substring(pos, this.lastSearchText.length).trim());\r\n        }\r\n        this.searchText = split;\r\n        return split;\r\n    }\r\n\r\n    public searchArray(root: Array<BridgeElement>) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let i: number = 0; i < root.length; i++) {\r\n            let item: BridgeElement = root[i];\r\n            this.showItem(item, this.searching(item));\r\n        }\r\n    }\r\n\r\n    public searchSet(root: BridgeElement[]) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let item of root) {\r\n            let child: BridgeElement = <BridgeElement>item;\r\n            this.showItem(child, this.searching(child));\r\n        }\r\n    }\r\n\r\n    public showItem(item: BridgeElement, visible: boolean) {\r\n        if (visible) {\r\n            this.showedItems.push(item);\r\n            this.$bodysection.appendChild(item.gui);\r\n        } else if (item.gui && item.gui.parentElement) {\r\n            this.$bodysection.removeChild(item.gui);\r\n        }\r\n    }\r\n\r\n    public searching(item: BridgeElement): boolean {\r\n        let fullText: string = '';\r\n        for (let i: number = 0; i < this.searchColumns.length; i++) {\r\n            fullText = fullText + ' ' + item.model.getValue(this.searchColumns[i]);\r\n        }\r\n        fullText = fullText.trim().toLowerCase();\r\n        for (let z: number = 0; z < this.searchText.length; z++) {\r\n            if ('' !== this.searchText[z]) {\r\n                let orSplit: Array<string>;\r\n                if (this.searchText[z].indexOf('|') > 0) {\r\n                    orSplit = this.searchText[z].split('|');\r\n                } else {\r\n                    orSplit = [this.searchText[z]];\r\n                }\r\n                let o: number = 0;\r\n                for (; o < orSplit.length; o++) {\r\n                    let pos: number = orSplit[o].indexOf(':');\r\n                    if (orSplit[o].indexOf('#') === 0 && pos > 1) {\r\n                        // if (searchProperties.contains(propString)) {\r\n                        let value: string = orSplit[o].substring(pos + 1);\r\n                        let column: string = orSplit[o].substring(1, pos - 1);\r\n                        let dataValue: Object = item.model.getValue(column);\r\n                        if (dataValue) {\r\n                            if (dataValue.toString().toLowerCase().indexOf(value) >= 0) {\r\n                                // Search for simple Property\r\n                                break;\r\n                            }\r\n                        }\r\n                    } else if (orSplit[o].length > 1 && orSplit[o].indexOf('-') === 0) {\r\n                        if (fullText.indexOf(orSplit[o].substring(1)) < 0) {\r\n                            break;\r\n                        }\r\n                    } else if (fullText.indexOf(orSplit[o]) >= 0) {\r\n                        // his search word is found in full text\r\n                        break;\r\n                    }\r\n                }\r\n                if (o === orSplit.length) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public getColumn(): Column[] {\r\n        return this.columns;\r\n    }\r\n\r\n    public updateElement(property: string, value: string): void {\r\n        // first clear all elements inside the table:\r\n        for (let item of this.items) {\r\n            if (item instanceof BridgeElement) {\r\n                (<BridgeElement>item).model.removeListener(this);\r\n            }\r\n        }\r\n\r\n        this.items = [];\r\n        this.itemsIds = {};\r\n\r\n        // load all entitys that match the property\r\n        if (this.property !== undefined) {\r\n            let items = this.$owner.getItems();\r\n            for (let j in items) {\r\n                if (items.hasOwnProperty(j)) {\r\n                    let item = items[j];\r\n                    if (item instanceof Data) {\r\n                        if (property === j) {\r\n                            // if (property == item.property) {\r\n                            let i = new BridgeElement(<Data>item);\r\n                            this.items.push(i);\r\n                            this.itemsIds[item.id] = i;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            this.redrawAllElements();\r\n        }\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        if (this.$owner !== null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    protected redrawAllElements() {\r\n        let children: HTMLCollection = this.$bodysection.children;\r\n        // remove old children\r\n        for (let i = 0; i < children.length; i++) {\r\n            let child = children.item(i);\r\n            // remove child\r\n            this.$bodysection.removeChild(child);\r\n        }\r\n\r\n        // load new children\r\n        for (let obj of this.items) {\r\n            // register listeners\r\n            obj.model.addListener(this);\r\n            // create tr\r\n            let row = this.createRow(obj);\r\n            this.$bodysection.appendChild(row);\r\n            this.cells[obj.id] = row;\r\n        }\r\n    }\r\n\r\n    private parseData(column: any): Column {\r\n        let col = new Column();\r\n        col.label = column.label || column.id;\r\n        col.attribute = column.attribute || column.label || column.id;\r\n        col.$element = document.createElement('th');\r\n        col.$element.innerHTML = col.label;\r\n        col.$element.draggable = true;\r\n\r\n        // resize Header\r\n        col.$resize = document.createElement('div');\r\n        col.$resize.classList.add('resize');\r\n        col.$element.appendChild(col.$resize);\r\n\r\n        return col;\r\n    }\r\n\r\n    private createRow(data: BridgeElement): HTMLTableRowElement {\r\n        let tr: HTMLTableRowElement = document.createElement('tr');\r\n\r\n        for (let id of this.columns) {\r\n            let td: HTMLTableDataCellElement = document.createElement('td');\r\n            tr.appendChild(td);\r\n            td.innerHTML = data.model.getValue(id.attribute);\r\n        }\r\n        return tr;\r\n    }\r\n\r\n    private addHeaderInfo(col: Column) {\r\n        let element: HTMLTableCellElement = col.$element;\r\n        let that = this;\r\n        element.classList.add('sort');\r\n        element.addEventListener('click',\r\n            function () {\r\n                that.sort(col);\r\n            },\r\n            false);\r\n    }\r\n\r\n    private columnDragEvent(type: string, e: DragEvent) {\r\n        if (type === 'dragstart') {\r\n            // Target (this) element is the source node.\r\n            this.moveElement.$element.style.opacity = '0.4';\r\n            e.dataTransfer.effectAllowed = 'move';\r\n            e.dataTransfer.setData('text/json', JSON.stringify(Util.toJson(this.moveElement)));\r\n        } else if (type === 'dragenter') {\r\n            // TO Nothing\r\n        } else if (type === 'dragleave') {\r\n            this.moveElement.$element.classList.remove('over');\r\n        } else if (type === 'dragover') {\r\n            if (e.preventDefault) {\r\n                e.preventDefault(); // Necessary. Allows us to drop.\r\n            }\r\n            for (let c = 0; c < this.columns.length; c++) {\r\n                if (this.columns[c].$element === e.target) {\r\n                    this.dragColumn = this.columns[c];\r\n                    this.dragPos = c;\r\n                    this.columns[c].$element.classList.add('over');\r\n                } else {\r\n                    this.columns[c].$element.classList.remove('over');\r\n                }\r\n            }\r\n            if (e.target === this.tableOption) {\r\n                this.tableOption.classList.add('over');\r\n                this.dragPos = this.columns.length;\r\n            } else {\r\n                this.tableOption.classList.remove('over');\r\n            }\r\n            e.dataTransfer.dropEffect = 'move';  // See the section on the DataTransfer object.\r\n        } else if (type === 'drop') {\r\n            // this / e.target is current target element.\r\n            if (e.stopPropagation) {\r\n                e.stopPropagation(); // stops the browser from redirecting.\r\n            }\r\n            if (this.movePos === this.dragPos) {\r\n                return;\r\n            }\r\n            // movePos -> dragPos\r\n            // See the section on the DataTransfer object.\r\n            // DataModel\r\n            this.columns.splice(this.movePos, 1);\r\n            if (this.movePos >= this.dragPos) {\r\n                this.columns.splice(this.dragPos, 0, this.moveElement);\r\n            } else {\r\n                this.columns.splice(this.dragPos - 1, 0, this.moveElement);\r\n            }\r\n\r\n            // Header Line\r\n            let line: HTMLElement = this.moveElement.$element.parentElement;\r\n            line.removeChild(this.moveElement.$element);\r\n            if (this.dragPos < this.columns.length) {\r\n                line.insertBefore(this.moveElement.$element, this.dragColumn.$element);\r\n            } else {\r\n                line.insertBefore(this.moveElement.$element, this.tableOption);\r\n            }\r\n\r\n            let oldElement: Element;\r\n            let newElement: Element;\r\n\r\n            // Now all Childs\r\n            for (let i = 0; i < this.$bodysection.children.length; i++) {\r\n                // Each line\r\n                line = <HTMLElement>this.$bodysection.children.item(i);\r\n                oldElement = line.children.item(this.movePos);\r\n                newElement = line.children.item(this.dragPos);\r\n                line.removeChild(oldElement);\r\n                line.insertBefore(oldElement, newElement);\r\n            }\r\n        } else if (type === 'dragend') {\r\n            // this/e.target is the source node.\r\n            this.moveElement.$element.style.opacity = '1';\r\n            for (let i = 0; i < this.columns.length; i++) {\r\n                this.columns[i].$element.classList.remove('over');\r\n            }\r\n            this.tableOption.classList.remove('over');\r\n        }\r\n    }\r\n\r\n    private addOptionItem(label: string, parent: HTMLElement, sub: boolean): HTMLElement {\r\n        let labelControl;\r\n        if (label) {\r\n            labelControl = document.createElement('a');\r\n            labelControl.appendChild(document.createTextNode(label));\r\n            labelControl.href = 'javascript:void(0);';\r\n            parent.appendChild(labelControl);\r\n        }\r\n        if (sub) {\r\n            let context = document.createElement('div');\r\n            context.classList.add('dropdown-content');\r\n            context.style.setProperty('position', 'absolute');\r\n            parent.appendChild(context);\r\n\r\n            /* When the user clicks on the button,\r\n             toggle between hiding and showing the dropdown content */\r\n            parent.addEventListener(\r\n                'click',\r\n                function () {\r\n                    context.classList.toggle('show');\r\n                },\r\n                false);\r\n            return context;\r\n        }\r\n        return labelControl;\r\n    }\r\n\r\n    private registerEvents(events: string[]) {\r\n        let that = this;\r\n        for (let i = 0; i < events.length; i++) {\r\n            this.$view.addEventListener(events[i], function (evt) {\r\n                return that.tableEvent(events[i], evt);\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\nclass Column {\r\n    label: string;\r\n    attribute: string;\r\n    $element: HTMLTableHeaderCellElement;\r\n    $resize: HTMLDivElement;\r\n    visible: boolean;\r\n}\r\n","import { AutoComplete } from './AutoComplete';\r\nimport { BR } from './BR';\r\nimport { Div } from './Div';\r\nimport { Label } from './Label';\r\n\r\nexport * from './Node';\r\nexport * from './Class';\r\nexport * from './SO';\r\nexport * from './Symbol';\r\n\r\nexport * from './BR';\r\nexport * from './Button';\r\nexport * from './Div';\r\nexport * from './Form';\r\nexport * from './Input';\r\nexport * from './Label';\r\nexport * from './Table';\r\nexport * from './HTML';\r\nexport * from './Dice';\r\nexport * from './AutoComplete';\r\nexport * from './Attribute';\r\nexport * from './Method';\r\nexport * from './ClazzProperty';\r\n\r\nnew AutoComplete();\r\nnew BR();\r\nnew Div();\r\nnew Label();\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class AddNode implements EventHandler {\r\n\r\n    public MIN_SIZE_TO_ADD_NODE: number = 30;\r\n    public MIN_SIZE_TO_ADD_TEXT: number = 10;\r\n    private graph: Graph;\r\n    private svgRect: SVGSVGElement;\r\n    private svgGroupAddNode: SVGSVGElement;\r\n    private svgTextAddNode: SVGSVGElement;\r\n    private svgTextRectAddNode: SVGSVGElement;\r\n    private isRectDrawing: boolean;\r\n    private isDrawToLeft: boolean;\r\n    private isDrawToTop: boolean;\r\n    private isBigEnoughForAddNode: boolean;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(AddNode.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(AddNode.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!this.canHandle()) {\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element.id !== 'RootElement') {\r\n            return false;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element.id === 'RootElement') {\r\n                    this.start(event, element);\r\n\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mousemove':\r\n                this.drawRect(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.removeRect();\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.addNode();\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawRect(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isRectDrawing) {\r\n            return;\r\n        }\r\n\r\n        evt.stopPropagation();\r\n\r\n        let width = Util.getEventX(evt) - this.x;\r\n        let height = Util.getEventY(evt) - this.y;\r\n\r\n        // rectangle is in a negative area, drawn to upper case. not possibble with svg\r\n        if (width < 0) {\r\n            this.isDrawToLeft = true;\r\n            width *= -1;\r\n        } else {\r\n            this.isDrawToLeft = false;\r\n        }\r\n\r\n        if (height < 0) {\r\n            this.isDrawToTop = true;\r\n            height *= -1;\r\n        } else {\r\n            this.isDrawToTop = false;\r\n        }\r\n\r\n        if (width > this.MIN_SIZE_TO_ADD_NODE && height > this.MIN_SIZE_TO_ADD_NODE) {\r\n            this.isBigEnoughForAddNode = true;\r\n        } else {\r\n            this.isBigEnoughForAddNode = false;\r\n        }\r\n\r\n        this.graph.root.style.cursor = 'pointer';\r\n\r\n        // if line wasnt draw\r\n        if (!this.svgRect) {\r\n\r\n            let rectAddNode = Util.createShape({\r\n                tag: 'rect',\r\n                id: 'addNodeRect',\r\n                x: this.x,\r\n                y: this.y,\r\n                width: 1,\r\n                height: 1,\r\n                class: 'SVGAddNode'\r\n            });\r\n\r\n            let group = Util.createShape({ tag: 'g', id: 'groupAddNode' });\r\n            group.appendChild(rectAddNode);\r\n\r\n            this.graph.root.appendChild(group);\r\n            this.svgRect = rectAddNode;\r\n            this.svgGroupAddNode = group;\r\n        }\r\n        else {\r\n\r\n            let svgRectBBox = this.svgRect.getBBox();\r\n\r\n            // if rect is big enough, show text as helper\r\n            if ((svgRectBBox.width > this.MIN_SIZE_TO_ADD_TEXT\r\n                || svgRectBBox.height > this.MIN_SIZE_TO_ADD_TEXT) && !this.svgTextAddNode) {\r\n\r\n                let textAddNode = Util.createShape({\r\n                    tag: 'text',\r\n                    x: this.x,\r\n                    y: this.y - 5,\r\n                    'font-family': 'Verdana',\r\n                    'font-size': 12,\r\n                    fill: 'black'\r\n                });\r\n                textAddNode.textContent = 'Hold on and move to create a new class';\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n\r\n\r\n                // get correct size of text node\r\n                let sizeClientRect: ClientRect = textAddNode.getBoundingClientRect();\r\n\r\n                let rectBackgroundForText = Util.createShape({\r\n                    tag: 'rect',\r\n                    x: this.x,\r\n                    y: this.y - sizeClientRect.height,\r\n                    width: sizeClientRect.width,\r\n                    height: sizeClientRect.height,\r\n                    fill: '#DDD',\r\n                    'stroke-width': 0\r\n                });\r\n\r\n                this.svgTextRectAddNode = rectBackgroundForText;\r\n                this.svgTextAddNode = textAddNode;\r\n                this.svgGroupAddNode.appendChild(rectBackgroundForText);\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n            }\r\n\r\n            if (this.isDrawToLeft) {\r\n                this.svgRect.setAttributeNS(null, 'x', '' + Util.getEventX(evt));\r\n            }\r\n\r\n            if (this.isDrawToTop) {\r\n                this.svgRect.setAttributeNS(null, 'y', '' + Util.getEventY(evt));\r\n            }\r\n\r\n            // set width and height\r\n            this.svgRect.setAttributeNS(null, 'width', width.toString());\r\n            this.svgRect.setAttributeNS(null, 'height', height.toString());\r\n\r\n            // set color\r\n            if (this.isBigEnoughForAddNode) {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode-ready');\r\n\r\n                // draw text\r\n            }\r\n            else {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeRect(): void {\r\n        this.isRectDrawing = false;\r\n        this.isBigEnoughForAddNode = false;\r\n\r\n        this.graph.root.style.cursor = 'default';\r\n\r\n        if (this.svgGroupAddNode) {\r\n            this.graph.root.removeChild(this.svgGroupAddNode);\r\n            this.svgGroupAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgRect) {\r\n            this.svgRect = undefined;\r\n        }\r\n\r\n        if (this.svgTextAddNode) {\r\n            this.svgTextAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgTextRectAddNode) {\r\n            this.svgTextRectAddNode = undefined;\r\n        }\r\n    }\r\n\r\n    private addNode(): void {\r\n\r\n        if (!this.isBigEnoughForAddNode) {\r\n            this.removeRect();\r\n            return;\r\n        }\r\n\r\n        this.removeRect();\r\n        let node = this.graph.addElementWithValues('Class', { x: this.x, y: this.y });\r\n        this.graph.drawElement(node);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isRectDrawing) {\r\n            return;\r\n        }\r\n        this.isRectDrawing = true;\r\n\r\n        this.x = Util.getEventX(evt);\r\n        this.y = Util.getEventY(evt);\r\n    }\r\n\r\n}\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement, Point } from '../elements/BaseElements';\r\nimport { GraphModel } from '../elements/Model';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Control } from '../Control';\r\nimport { Util } from '../util';\r\n\r\nexport class Drag implements EventHandler {\r\n\r\n    private element: DiagramElement;\r\n    private svgElement: SVGSVGElement;\r\n    private dragging = false;\r\n    private reinsert = false;\r\n    private mouseOffset = new Point();\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        if (!this.canHandle()) {\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if ((!this.dragging) && (element.id !== 'RootElement')) {\r\n                    this.element = element;\r\n                    this.svgElement = <SVGSVGElement>element.$view;\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mouseup':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n\r\n                break;\r\n            case 'mousemove':\r\n                if (this.dragging) {\r\n                    this.drag(event, element);\r\n                }\r\n                break;\r\n            case 'mouseleave':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Drag.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Drag.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private reset() {\r\n        this.dragging = false;\r\n        this.svgElement.style.cursor = 'pointer';\r\n\r\n        /*  WORKAROUND\r\n            Chrome got problem with the Node.appendChild() method.\r\n            Sometimes it works, sometimes not.\r\n            So the background is, in the drag method will the current element be appended\r\n            to front of the svg root.\r\n            If this happend, the click event won't fire.\r\n            So it will be fired manually.\r\n            This problem occurs only in chrome.\r\n        */\r\n        if (Util.isChrome()) {\r\n            let clickEvt = Util.createCustomEvent('click');\r\n            this.svgElement.dispatchEvent(clickEvt);\r\n        }\r\n    }\r\n\r\n    private start(evt: Event | any, element: Control) {\r\n\r\n        this.dragging = true;\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n        this.reinsert = true;\r\n\r\n        this.svgElement.style.cursor = 'move';\r\n    }\r\n\r\n    private drag(evt: Event | any, element: DiagramElement) {\r\n\r\n        if (this.reinsert) {\r\n            if (this.element.id !== 'RootElement') {\r\n                // nesseccary to set the dragged object on top of svg children\r\n                this.graph.root.appendChild(this.svgElement);\r\n            }\r\n\r\n            let dragEvent = Util.createCustomEvent('drag');\r\n            element.$view.dispatchEvent(dragEvent);\r\n        }\r\n        this.reinsert = false;\r\n\r\n        evt.stopPropagation();\r\n\r\n        const translation = this.svgElement.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        const sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        const transX = sx + evt.clientX - this.mouseOffset.x;\r\n        const transY = sy + evt.clientY - this.mouseOffset.y;\r\n        this.svgElement.setAttributeNS(null, 'transform', 'translate(' + transX + ' ' + transY + ')');\r\n        this.element.getPos().addNum(transX - sx, transY - sy);\r\n\r\n        if (this.element instanceof Node) {\r\n            (<Node>this.element).redrawEdges();\r\n        }\r\n\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n\r\n\r\n        // resize svg root\r\n        let maxX = this.element.getPos().x + this.element.getSize().x;\r\n        let maxY = this.element.getPos().y + this.element.getSize().y;\r\n\r\n        let domRectRoot = this.graph.root.getBoundingClientRect();\r\n        if(!domRectRoot){\r\n            return;\r\n        }\r\n\r\n        if(maxX > domRectRoot.width){\r\n            this.graph.root.setAttributeNS(null, 'width', '' + maxX);\r\n        }\r\n        \r\n        if(maxY > domRectRoot.height){\r\n            this.graph.root.setAttributeNS(null, 'height', '' + maxY);\r\n        }\r\n    }\r\n}\r\n","import PropertyChangeSupport from '../PropertyChangeSupport';\r\nimport Data from '../Data';\r\nimport {Adapter} from '../Adapter';\r\nimport ClazzProperty from '../elements/nodes/ClazzProperty';\r\n\r\nexport class GraphListener implements PropertyChangeSupport {\r\n    private $owner: ClazzProperty;\r\n\r\n    constructor(owner: ClazzProperty) {\r\n        this.$owner = owner;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        let adapter = this.$owner.getRoot().getAdapter();\r\n        if (adapter) {\r\n            // messages.add(\"{\\\"class\\\":\\\"de.uniks.networkparser.test.model.House\\\",\\\"id\\\":\\\"H1\\\",\\\"rem\\\":{\\\"floor\\\":4},\\\"upd\\\":{\\\"floor\\\":42}}\");\r\n            let myId =  this.$owner.$owner.getId();\r\n            if (myId && myId.length > 0) {\r\n                let pos = myId.indexOf(':');\r\n                if (pos > 0) {\r\n                    myId = myId.substring(0, pos).trim();\r\n                }\r\n            }\r\n            let myName = this.$owner.getName();\r\n            let remJson = {};\r\n            remJson[myName] = oldValue;\r\n            let updJson = {};\r\n            updJson[myName] = newValue;\r\n            let json = {};\r\n            json['id'] = myId;\r\n            json['rem'] = remJson;\r\n            json['upd'] = updJson;\r\n            let message = JSON.stringify(json);\r\n            (<Adapter> adapter).update(message);\r\n        }\r\n    }\r\n}\r\n","import {Graph} from '../elements/';\r\nimport {EventHandler, EventBus} from '../EventBus';\r\nimport {DiagramElement} from '../elements/';\r\nimport {Util} from '../util';\r\n\r\nexport class ImportFile implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(ImportFile.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(ImportFile.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        let type: string = typeof event;\r\n        if (type !== 'DragEvent') {\r\n            return false;\r\n        }\r\n        let evt: DragEvent = <DragEvent>event;\r\n        if (evt.type === 'dragover') {\r\n            this.handleDragOver(evt);\r\n        } else if (evt.type === 'dragleave') {\r\n            if (this.graph.$view !== evt.target) {\r\n                return false;\r\n            }\r\n            this.setBoardStyle('dragleave');\r\n        } else if (evt.type === 'drop') {\r\n            this.handleLoadFile(evt);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public setBoardStyle(typ: string): boolean {\r\n        let b = this.graph.$view;\r\n        Util.removeClass(b, 'Error');\r\n        Util.removeClass(b, 'Ok');\r\n        Util.removeClass(b, 'Add');\r\n        if (typ === 'dragleave') {\r\n            if (b['errorText']) {\r\n                b.removeChild(b['errorText']);\r\n                b['errorText'] = null;\r\n            }\r\n            return true;\r\n        }\r\n        Util.addClass(b, typ);\r\n        if (typ === 'Error') {\r\n            if (!b['errorText']) {\r\n                b['errorText'] = Util.create({tag: 'div', style: 'margin-top: 30%', value: 'NO TEXTFILE'});\r\n                b.appendChild(b['errorText']);\r\n            }\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private handleLoadFile(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n\r\n        let files = evt.dataTransfer.files; // FileList object.\r\n\r\n        if (files.length > 1) {\r\n            evt.dataTransfer.dropEffect = 'none';\r\n            return;\r\n        }\r\n\r\n        // files is a FileList of File objects. List some properties.\r\n        let reader  = new FileReader();\r\n        let output = [];\r\n        let htmlResult = '';\r\n        let that = this;\r\n        for (let i = 0, f; f = files[i]; i++) {\r\n            reader.onload = function(event) {\r\n                htmlResult = event.target['result'];\r\n                console.log('fileContent: ' + htmlResult);\r\n\r\n                // CHANGE TO INTERNAL OBJECT\r\n                if (that.graph) {\r\n                    that.graph.import(htmlResult);\r\n                }\r\n            };\r\n            reader.readAsText(f);\r\n        }\r\n        this.setBoardStyle('dragleave');\r\n    }\r\n\r\n    private handleDragOver(evt: DragEvent): void {\r\n        let error: boolean = true, n: string, f;\r\n        let files = evt.dataTransfer.files;\r\n        // process all File objects\r\n        if (files && files.length > 0) {\r\n            for (let i: number = 0; i < files.length; i += 1) {\r\n                f = files[i];\r\n                if (f.type.indexOf('text') === 0) {\r\n                    error = false;\r\n                } else if (f.type === '') {\r\n                    n = f.name.toLowerCase();\r\n                    if (n.indexOf('json', n.length - 4) !== -1) {\r\n                        error = false;\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            let items = evt.dataTransfer.items;\r\n            if (items && items.length > 0) {\r\n                for (let z = 0; z < items.length; z ++) {\r\n                    if (items[z].type === '' || items[z].type === 'text/plain') {\r\n                        error = false;\r\n                    }\r\n                }\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.\r\n        if (error) {\r\n            this.dragStyler(evt, 'Error');\r\n        } else if (evt.ctrlKey) {\r\n            this.dragStyler(evt, 'Add');\r\n        } else {\r\n            this.dragStyler(evt, 'Ok');\r\n        }\r\n        /* //evt.target['className'] += ' diagramLoadFile';\r\n        '//console.log('handDragOver');*/\r\n    }\r\n\r\n    private dragStyler(event: Event, typ: string) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n        this.setBoardStyle(typ);\r\n    }\r\n\r\n    private handleDragLeave(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n        evt.dataTransfer.dropEffect = 'link'; // Explicitly show this is a copy.\r\n        evt.target['className'] = 'diagram';\r\n        console.log('handDragLeave');\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Class } from '../elements/nodes/Class';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Association } from '../elements/index';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class NewEdge implements EventHandler {\r\n    private graph: Graph;\r\n    private svgLine: SVGSVGElement;\r\n    private isEdgeDrawing: boolean;\r\n    private sourceNode: Node;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    private lastTargetNode: Node;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(NewEdge.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(NewEdge.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!((<KeyboardEvent>event).ctrlKey || EventBus.isHandlerActiveOrFree('NewEdge', true))) {\r\n            this.removeLine();\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element instanceof Node) {\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n\r\n            case 'mousemove':\r\n                this.drawEdge(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.setNewEdgeToNode(event);\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default: break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawEdge(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        let lineToX = Util.getEventX(evt);\r\n        let lineToy = Util.getEventY(evt);\r\n\r\n        let path = `M${this.x} ${this.y} L${lineToX} ${lineToy}`;\r\n        // if line wasnt draw\r\n        if (!this.svgLine) {\r\n\r\n            let attr = {\r\n                tag: 'path',\r\n                id: 'newEdgePath',\r\n                d: path,\r\n                class: 'SVGEdge'\r\n            };\r\n\r\n            let shape = Util.createShape(attr);\r\n            this.svgLine = shape;\r\n\r\n            this.graph.root.appendChild(shape);\r\n            this.graph.root.appendChild(this.sourceNode.$view);\r\n        }\r\n        else {\r\n\r\n            // set new L path\r\n            this.svgLine.setAttributeNS(null, 'd', path);\r\n\r\n            // get node from position\r\n            let targetNode = this.graph.$graphModel.getNodeByPosition(Util.getEventX(evt), Util.getEventY(evt));\r\n\r\n            // if some targetnode is available, so highlight the node\r\n            if (targetNode) {\r\n\r\n                // reset the last one\r\n                if (this.lastTargetNode && this.lastTargetNode.id !== targetNode.id) {\r\n                    this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n                }\r\n\r\n                this.lastTargetNode = targetNode;\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz-drawedge');\r\n            }\r\n            else if (this.lastTargetNode) {\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeLine(): void {\r\n        this.isEdgeDrawing = false;\r\n\r\n        if (this.svgLine) {\r\n            this.graph.root.removeChild(this.svgLine);\r\n            this.svgLine = null;\r\n        }\r\n\r\n        if (this.lastTargetNode) {\r\n            this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n        }\r\n    }\r\n\r\n    private setNewEdgeToNode(event: Event | any): void {\r\n        // get node from position\r\n        let targetNode = this.graph.$graphModel\r\n            .getNodeByPosition(Util.getEventX(event), Util.getEventY(event));\r\n\r\n        if (!targetNode) {\r\n            this.removeLine();\r\n\r\n            return;\r\n        }\r\n\r\n        this.removeLine();\r\n        let edgeType = this.sourceNode.$defaulEdgeType || 'Association';\r\n\r\n        let jsonData = {\r\n            type: edgeType,\r\n            source: this.sourceNode.id,\r\n            target: targetNode.id\r\n        };\r\n\r\n        let newEdge = this.graph.$graphModel.addEdge(<any>jsonData, true);\r\n        this.graph.drawElement(newEdge);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        this.isEdgeDrawing = true;\r\n        this.sourceNode = element as Class;\r\n\r\n        this.x = this.sourceNode.getPos().x + (this.sourceNode.getSize().x / 2);\r\n        this.y = this.sourceNode.getPos().y + (this.sourceNode.getSize().y / 2);\r\n\r\n        // TODO: get this into util or select\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Node } from '../elements/nodes';\r\nimport { Association } from '../elements/edges';\r\nimport { Util } from '../util';\r\nimport { SymbolLibary } from '../elements/nodes/Symbol';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\nimport Attribute from '../elements/nodes/Attribute';\r\n\r\nexport class Select implements EventHandler {\r\n\r\n    private deleteShape: SVGSVGElement;\r\n    private addEdgeShape: SVGSVGElement;\r\n    private copyNodeShape: SVGSVGElement;\r\n    private graph: Graph;\r\n    private padding = 5;\r\n\r\n    private lastSelectedNode: Element;\r\n    private lastSelectedEdge: Element;\r\n\r\n    private isDragged: boolean;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.deleteShape = SymbolLibary.drawSVG({ type: 'Basket', background: true, id: 'trashcan', tooltip: 'Delete class' });\r\n        this.copyNodeShape = SymbolLibary.drawSVG({ type: 'Copynode', background: true, id: 'copyNode', tooltip: 'Copy class' });\r\n        this.addEdgeShape = SymbolLibary.drawSVG({ type: 'Edgeicon', background: true, id: 'addEdge', tooltip: 'Click and drag to connect this class' });\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        let x = Util.getEventX(event);\r\n        let y = Util.getEventY(event);\r\n\r\n        event.stopPropagation();\r\n        if (event.type === 'drag') {\r\n            this.isDragged = true;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            if (element instanceof Node) {\r\n                this.lastSelectedNode = <Element>element.$view;\r\n            }\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n        }\r\n\r\n        if (event.target['id'] === 'background' || element === this.graph.$graphModel) {\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let e = <Node>element;\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.graph.root.appendChild(this.addEdgeShape);\r\n            this.graph.root.appendChild(this.copyNodeShape);\r\n            this.graph.root.appendChild(element.$view);\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'visible');\r\n\r\n            let x = (e.getPos().x + e.getSize().x) + 5;\r\n            let y = e.getPos().y;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y + this.padding})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.copyNodeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 40 + this.padding})`);\r\n            this.copyNodeShape.onclick = (evt) => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let copyClass = (element).copy();\r\n                copyClass.withPos(nextFreePosition.x, nextFreePosition.y);\r\n                this.graph.drawElement(copyClass);\r\n            };\r\n\r\n            this.addEdgeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 80 + this.padding})`);\r\n            this.addEdgeShape.onmousedown = function () {\r\n                EventBus.setActiveHandler('NewEdge');\r\n                element.$view.dispatchEvent(Util.createCustomEvent('mousedown'));\r\n            };\r\n        }\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let clazz = <Node>element;\r\n\r\n            if (Util.isChrome()) {\r\n                if (this.lastSelectedNode && element.id === this.lastSelectedNode.id && !this.isDragged) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            this.isDragged = false;\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            this.lastSelectedNode = <Element>element.$view;\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete class');\r\n\r\n            // draw textbox to edit clazz in one line\r\n            let divInlineEdit = document.createElement('div');\r\n            divInlineEdit.id = 'inlineEdit';\r\n            divInlineEdit.style.position = 'absolute';\r\n            divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n            divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n            divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n            divInlineEdit.style.zIndex = '42';\r\n\r\n            let inputText = document.createElement('input');\r\n            inputText.type = 'text';\r\n            inputText.style.width = '100%';\r\n            inputText.placeholder = 'Add properties, edit label';\r\n\r\n            divInlineEdit.appendChild(inputText);\r\n            document.body.appendChild(divInlineEdit);\r\n\r\n            inputText.addEventListener('focusout', (evt) => {\r\n\r\n                if (Util.isChrome()) {\r\n                    // only if input is empty, remove the inline edit function\r\n                    if ((!inputText.value || inputText.value.length === 0) && (!this.lastSelectedNode || element.id !== this.lastSelectedNode.id)) {\r\n                        this.removeLastInlineEdit();\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                // only if input is empty, remove the inline edit function\r\n                if ((!inputText.value || inputText.value.length === 0)) {\r\n                    this.removeLastInlineEdit();\r\n                }\r\n            });\r\n\r\n            let g = this.graph;\r\n            let propertyTypes: string[] = ['boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'short', 'String', 'void'];\r\n            inputText.addEventListener('keydown', function (evt) {\r\n\r\n                let keyCode = (<any>evt).which;\r\n                let inputValue = <any>inputText.value;\r\n\r\n                if (Util.endsWith(inputValue, ':') && !document.getElementById('selectPropertyType')) {\r\n                    let selectType = document.createElement('select');\r\n                    selectType.id = 'selectPropertyType';\r\n                    selectType.style.width = '100%';\r\n\r\n                    for (let type of propertyTypes) {\r\n                        let selectOption = document.createElement('option');\r\n                        selectOption.value = type;\r\n                        selectOption.innerHTML = type;\r\n                        selectType.appendChild(selectOption);\r\n                    }\r\n\r\n                    selectType.addEventListener('change', function (evt) {\r\n                        let inputValueSplitted = inputValue.split(':');\r\n                        let selectedPropertyType = selectType.options[selectType.selectedIndex].value;\r\n\r\n                        if (inputValueSplitted.length >= 1) {\r\n                            inputText.value = inputValueSplitted[0].trim() + ' : ' + selectedPropertyType;\r\n                            inputText.focus();\r\n                        }\r\n                    });\r\n\r\n                    divInlineEdit.appendChild(selectType);\r\n                }\r\n                else if (!Util.includes(inputValue, ':')) {\r\n                    let selectType = document.getElementById('selectPropertyType');\r\n\r\n                    if (selectType) {\r\n                        selectType.remove();\r\n                    }\r\n                }\r\n\r\n                if (keyCode !== 13) {\r\n                    return;\r\n                }\r\n\r\n                // attribute\r\n                if ((Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) === false) {\r\n                    if (Util.includes(inputValue, ':')) {\r\n                        clazz.addAttribute(inputValue.trim());\r\n                        clazz.reDraw();\r\n                    } else if (Util.includes(inputValue, '=') ) {\r\n                        let attr: Attribute = null;\r\n                        let name = inputValue.substring(0, inputValue.indexOf('=')).trim();\r\n                        for (let child of clazz.getAttributes() ) {\r\n                            if ( name === child.getName()) {\r\n                                attr = child;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (attr) {\r\n                            attr.updateValue(inputValue.substring(inputValue.indexOf('=') + 1).trim());\r\n                        }\r\n                        clazz.reDraw();\r\n                    }\r\n                }\r\n\r\n                // method\r\n                else if (Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) {\r\n                    clazz.addMethod(inputValue.trim());\r\n                    clazz.reDraw();\r\n                }\r\n                // label\r\n                else if (inputValue.trim().split(' ').length === 1 && inputValue.trim().length > 0) {\r\n                    clazz.updateLabel(inputValue.trim());\r\n                }\r\n\r\n                // reset size\r\n                divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n                divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n                divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n\r\n                inputText.value = '';\r\n\r\n                // remove combobox to select type of property\r\n                let selectType = document.getElementById('selectPropertyType');\r\n\r\n                if (selectType) {\r\n                    selectType.remove();\r\n                }\r\n\r\n                // TODO: reload propertiespanel. not working!\r\n                // event wont dispatch\r\n                // let customEvt = Util.createCustomEvent(EventBus.RELOADPROPERTIES);\r\n                // element.$view.dispatchEvent(customEvt);\r\n            });\r\n\r\n            (<any>divInlineEdit.children[0]).focus();\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Association) {\r\n            this.graph.root.appendChild(element.$view);\r\n            this.graph.root.appendChild(element.$sNode.$view);\r\n            this.graph.root.appendChild(element.$tNode.$view);\r\n\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete edge');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            let edge = <Association>element;\r\n            this.lastSelectedEdge = edge.$view;\r\n\r\n            Util.addClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Select.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Select.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private setTooltipOfShape(shape: SVGSVGElement, tooltip: string): void {\r\n        if (!shape || !shape.hasChildNodes()) {\r\n            return;\r\n        }\r\n\r\n        let titleElement = <SVGSVGElement>shape.childNodes[0];\r\n        if (!titleElement || titleElement.tagName !== 'title') {\r\n            return;\r\n        }\r\n\r\n        titleElement.textContent = tooltip;\r\n    }\r\n\r\n    private resetLastSelectedElements() {\r\n        // reset the last one\r\n        if (this.lastSelectedNode) {\r\n            Util.removeClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.lastSelectedNode = undefined;\r\n        }\r\n\r\n        if (this.lastSelectedEdge) {\r\n            Util.removeClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n            this.lastSelectedEdge = undefined;\r\n        }\r\n\r\n        this.removeLastInlineEdit();\r\n    }\r\n\r\n    private removeLastInlineEdit(): void {\r\n        // remove last inline edit of clazz\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n\r\n            // its not supported in internet explorer\r\n            // lastInlineEdit.remove();\r\n        }\r\n    }\r\n\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\n\r\nexport class Zoom implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n    }\r\n\r\n    public handle(e: any, element: DiagramElement): boolean {\r\n        let delta = e.deltaY || e.wheelDeltaY || -e.wheelDelta;\r\n        let d = 1 + (delta / 1000);\r\n\r\n        let values = this.graph.root.getAttribute('viewBox').split(' ');\r\n        const newViewBox = `${values[0]} ${values[1]} ${parseInt(values[2]) * d} ${parseInt(values[3]) * d}`;\r\n        this.graph.root.setAttribute('viewBox', newViewBox);\r\n\r\n        e.preventDefault();\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Zoom.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Zoom.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n}\r\n","export * from './Drag';\r\nexport * from './Select';\r\nexport * from './Zoom';\r\nexport * from './NewEdge';\r\nexport * from './ImportFile';\r\nexport * from './AddNode';\r\n","import { Association } from '../elements/edges';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport Layout from './Layout';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\n\r\nexport class DagreLayout implements Layout {\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        if (!window['dagre']) {\r\n            return;\r\n        }\r\n        let model = graph.$graphModel;\r\n        let g = new window['dagre'].graphlib.Graph();\r\n\r\n        g.setGraph({ marginx: 100, marginy: 20 }).setDefaultEdgeLabel(function () {\r\n            return {};\r\n        });\r\n\r\n        for (let node of model.nodes) {\r\n            g.setNode(node.id, { width: node.getSize().x, height: node.getSize().y });\r\n        }\r\n\r\n        for (let edge of model.edges) {\r\n            g.setEdge(edge.$sNode.id, edge.$tNode.id);\r\n        }\r\n\r\n        window['dagre'].layout(g);\r\n\r\n        g.nodes().forEach(function (nodeId: string) {\r\n            for (let node of model.nodes) {\r\n                if (node.id === nodeId) {\r\n                    node.withPos(g.node(nodeId).x - g.node(nodeId).width / 2, g.node(nodeId).y - g.node(nodeId).height / 2);\r\n                }\r\n            }\r\n        });\r\n        g.edges().forEach(function (e: any) {\r\n            for (let edge of model.edges) {\r\n                if (edge.$sNode.id === e.v && edge.$tNode.id === e.w) {\r\n                    let size = g.edge(e).points.length;\r\n                    edge.clearPoints();\r\n                    for (let i = 0; i < size; i++) {\r\n                        let point: SVGPoint = g.edge(e).points[i];\r\n                        edge.addPoint(point.x, point.y);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n}\r\n","import {DiagramElement} from '../elements/BaseElements';\r\nimport Layout from './Layout';\r\nimport {Graph} from '../elements/Graph';\r\nimport {Association} from '../elements/edges/Association';\r\nimport {Node} from '../elements/nodes/Node';\r\nimport {Control} from '../Control';\r\n\r\nexport class LayoutGraphMin {\r\n    public nodes: Object = {};\r\n    public edges: Array<Object> = [];\r\n    public outEdges: Object = {};\r\n    public inEdges: Object = {};\r\n    public dummyNodes: Array<LayoutGraphNode> = [];\r\n    public dummyEdges: Object = {};\r\n    public count: number = 0;\r\n    public minRank: number = Number.POSITIVE_INFINITY;\r\n    public maxRank: number = 0;\r\n    public maxHeight: number = 0;\r\n    public maxWidth: number = 0;\r\n    public ranksep: number = 0;\r\n    public edgesLabel: Array<Object> = [];\r\n\r\n    public nodeCount(): number {\r\n        return this.count;\r\n    }\r\n\r\n    public node(id: string) {\r\n        return this.nodes[id];\r\n    }\r\n\r\n    public setNode(id: string, n: LayoutGraphNode) {\r\n        if (n && !this.nodes[id]) {\r\n            this.nodes[id] = n;\r\n            this.count = this.count + 1;\r\n        } else if (!n && this.nodes[id]) {\r\n            delete this.nodes[id];\r\n        }\r\n    }\r\n}\r\n\r\nexport class LayoutGraphNode {\r\n    public id: string;\r\n    public width: number;\r\n    public height: number;\r\n    public x: number;\r\n    public y: number;\r\n    public edgeObj: LayoutGraphEdge;\r\n    public rank: number;\r\n\r\n    constructor(id: string, width: number, height: number, x: number, y: number) {\r\n        this.id = id;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n\r\nexport class LayoutGraphEdge {\r\n    public source: string;\r\n    public target: string;\r\n}\r\n\r\n// \t\t\t\t######################################################### DagreGraph #########################################################\r\nexport class DagreLayoutMin implements Layout {\r\n    public static EDGE_KEY_DELIM = '\\x01';\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        let g, layoutNode, nodes, newEdge, edges;\r\n        let i, n, x, y, sId, tId, split = DagreLayoutMin.EDGE_KEY_DELIM;\r\n        let e: Association;\r\n\r\n        nodes = node['nodes'];\r\n        edges = node['edges'];\r\n        g = new LayoutGraphMin();\r\n\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            g.setNode(n.id, new LayoutGraphNode(n.id, n.getSize().x, n.getSize().y, n.getPos().x, n.getPos().y));\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            sId = this.getNodeId(e.$sNode);\r\n            tId = this.getNodeId(e.$tNode);\r\n            if (sId > tId) {\r\n                let tmp = tId;\r\n                tId = sId;\r\n                sId = tmp;\r\n            }\r\n            let idAB = sId + split + tId + split;\r\n            let idBA = tId + split + sId + split;\r\n            if (sId !== tId && g.edgesLabel.indexOf(idAB) < 0 && g.edgesLabel.indexOf(idBA) < 0) {\r\n                newEdge = {source: sId, target: tId, minlen: 1, weight: 1};\r\n                g.edges.push(newEdge);\r\n                g.edgesLabel.push(idAB);\r\n                // In Edges\r\n                if (!g.inEdges[tId]) {\r\n                    g.inEdges[tId] = [];\r\n                }\r\n                g.inEdges[tId].push(newEdge);\r\n\r\n                // Out Edges\r\n                if (!g.outEdges[sId]) {\r\n                    g.outEdges[sId] = [];\r\n                }\r\n                g.outEdges[sId].push(newEdge);\r\n            }\r\n        }\r\n        this.layouting(g);\r\n        // Set the layouting back\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            layoutNode = g.node(n.id);\r\n            x = n.getPos().x;\r\n            y = n.getPos().y;\r\n            if (x < 1 && y < 1) {\r\n                n.withPos(Math.ceil(layoutNode.x), Math.ceil(layoutNode.y));\r\n            }\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            // OBSOLETE method:  e.calc(graph.canvas);\r\n        }\r\n        graph.draw();\r\n    }\r\n\r\n    public getNodeId(node: Control): string {\r\n        if (node.$owner) {\r\n            return this.getNodeId(node.$owner) || node.id;\r\n        }\r\n        return node.id;\r\n    }\r\n\r\n    public layouting(g: LayoutGraphMin) {\r\n        this.longestPath(g);\r\n        this.normalizeRanks(g);\r\n        this.normalizeEdge(g);\r\n        // this.setSimpleOrder(g);\r\n        this.order(g);\r\n        g.ranksep = 25;\r\n        // remove Dummy\r\n        this.removeDummy(g);\r\n        this.position(g);\r\n    }\r\n\r\n    public setSimpleOrder(g: LayoutGraphMin) {\r\n        let i, n;\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            n.order = n.rank;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Applies heuristics to minimize edge crossings in the graph and sets the best\r\n     * order solution as an order attribute on each node.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Graph must be DAG\r\n     *    2. Graph nodes must be objects with a \"rank\" attribute\r\n     *    3. Graph edges must have the \"weight\" attribute\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Graph nodes will have an \"order\" attribute based on the results of the\r\n     *       algorithm.\r\n     */\r\n    public order(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        let visited = {};\r\n        let node, n, order, i;\r\n        for (i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (n in g.nodes) {\r\n            if (visited[n]) {\r\n                continue;\r\n            }\r\n            visited[n] = true;\r\n            node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank].push(n);\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                g.nodes[layering[order][n]].order = parseInt(n);\r\n            }\r\n        }\r\n        // Fix resolve conflict\r\n        for (order in layering) {\r\n            if (layering[order].length > 1) {\r\n                for (n in layering[order]) {\r\n                    if (layering[order].hasOwnProperty(n) === false) {\r\n                        continue;\r\n                    }\r\n                    let name = layering[order][n];\r\n                    let sum = 0;\r\n                    let weight = 1;\r\n                    let edges = g.dummyEdges[name];\r\n                    if (edges) {\r\n                        for (i in edges) {\r\n                            if (edges.hasOwnProperty(i) === false) {\r\n                                continue;\r\n                            }\r\n                            let edge = edges[i];\r\n                            let nodeU = g.node(edge.target);\r\n                            sum = sum + (edge.weight * nodeU.order);\r\n                            weight = weight + edge.weight;\r\n                        }\r\n                    }\r\n                    g.node(name).barycenter = sum / weight;\r\n                    g.node(name).weight = weight;\r\n                }\r\n            } else if (layering[order].length > 0) {\r\n                for (n in layering[order]) {\r\n                    let name = layering[order][n];\r\n                    g.node(name).barycenter = 1;\r\n                    g.node(name).weight = 1;\r\n                }\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                let node = g.nodes[layering[order][n]];\r\n                node.order = parseInt(n) + node.barycenter * node.weight;\r\n                if (isNaN(node.order)) {\r\n                    console.log('ERROR');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public removeDummy(g: LayoutGraphMin) {\r\n        for (let z in g.dummyNodes) {\r\n            let node = g.dummyNodes[z];\r\n            g.setNode(node.id, null);\r\n        }\r\n        g.dummyNodes = [];\r\n        g.dummyEdges = {};\r\n    }\r\n\r\n    /*\r\n     * Breaks any long edges in the graph into short segments that span 1 layer\r\n     * each. This operation is undoable with the denormalize function.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. The input graph is a DAG.\r\n     *    2. Each node in the graph has a \"rank\" property.\r\n     *\r\n     * Post-condition:\r\n     *\r\n     *    1. All edges in the graph have a length of 1.\r\n     *    2. Dummy nodes are added where edges have been split into segments.\r\n     *    3. The graph is augmented with a \"dummyChains\" attribute which contains\r\n     *       the first dummy in each chain of dummy nodes produced.\r\n     */\r\n    public normalizeEdge(g: LayoutGraphMin): void {\r\n        let i: number = 1;\r\n        for (let id in g.edges) {\r\n            let e: LayoutGraphEdge = <LayoutGraphEdge>g.edges[id];\r\n            let v: string = e.source;\r\n            let vRank = g.node(v).rank;\r\n            const w: string = e.target;\r\n            const wRank: number = g.node(w).rank;\r\n            let name: string;\r\n\r\n            if (wRank === vRank + 1) {\r\n                continue;\r\n            }\r\n\r\n            let dummy;\r\n            for (vRank = vRank + 1; vRank < wRank; ++vRank) {\r\n                name = '_d' + e.source + e.target + (i++);\r\n                let newEdge = {source: v, target: name, minlen: 1, weight: 1};\r\n                dummy = new LayoutGraphNode(name, 0, 0, 0, 0);\r\n                dummy.edgeObj = e;\r\n                dummy.rank = vRank;\r\n                // Dummy Edges\r\n                if (!g.dummyEdges[v]) {\r\n                    g.dummyEdges[v] = [];\r\n                }\r\n                g.dummyEdges[v].push(newEdge);\r\n\r\n                g.dummyNodes.push(dummy);\r\n                g.setNode(dummy.id, dummy);\r\n                v = name;\r\n            }\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Initializes ranks for the input graph using the longest path algorithm. This\r\n     * algorithm scales well and is fast in practice, it yields rather poor\r\n     * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\r\n     * ranks wide and leaving edges longer than necessary. However, due to its\r\n     * speed, this algorithm is good for getting an initial ranking that can be fed\r\n     * into other algorithms.\r\n     *\r\n     * This algorithm does not normalize layers because it will be used by other\r\n     * algorithms in most cases. If using this algorithm directly, be sure to\r\n     * run normalize at the end.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Input graph is a DAG.\r\n     *    2. Input graph node labels can be assigned properties.\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Each node will be assign an (unnormalized) \"rank\" property.\r\n     */\r\n    public longestPath(g: LayoutGraphMin) {\r\n        let i, n, visited = [];\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            visited.push(i);\r\n            n.rank = this.findAllPaths(g, n, 0, visited);\r\n            g.minRank = Math.min(g.minRank, n.rank);\r\n        }\r\n    }\r\n\r\n    public findAllPaths(g: LayoutGraphMin, n: Node, currentCost: number, path: Array<String>) {\r\n        let min: number = 0;\r\n        let id: string;\r\n        let z: number;\r\n        let target;\r\n        if (g.outEdges[n.id]) {\r\n            for (z = 0; z < g.outEdges[n.id].length; z++) {\r\n                id = g.outEdges[n.id][z].target;\r\n                target = g.nodes[id];\r\n                if (path[id]) {\r\n                    min = Math.min(min, target.rank);\r\n                } else if (path.indexOf(id) < 0) {\r\n                    min = Math.min(min, this.findAllPaths(g, target, currentCost - 2, path));\r\n                } else {\r\n                    min = currentCost;\r\n                }\r\n            }\r\n            return min;\r\n        }\r\n        return currentCost;\r\n    }\r\n\r\n    /*\r\n     * Adjusts the ranks for all nodes in the graph such that all nodes v have\r\n     * rank(v) >= 0 and at least one node w has rank(w) = 0.\r\n     */\r\n    public normalizeRanks(g: LayoutGraphMin) {\r\n        let min = g.minRank;\r\n        let value;\r\n        g.maxRank = Number.NEGATIVE_INFINITY;\r\n        g.maxHeight = 0;\r\n        g.maxWidth = 0;\r\n        for (let i in g.nodes) {\r\n            let node = g.nodes[i];\r\n            if (node.rank !== undefined) {\r\n                node.rank -= min;\r\n                value = Math.abs(node.rank);\r\n                if (value > g.maxRank) {\r\n                    g.maxRank = value;\r\n                }\r\n                g.maxHeight = Math.max(g.maxHeight, node.height);\r\n                g.maxWidth = Math.max(g.maxWidth, node.width);\r\n            }\r\n        }\r\n    }\r\n\r\n    public position(g: LayoutGraphMin) {\r\n        this.positionY(g);\r\n        let list = this.positionX(g);\r\n        for (let i in list) {\r\n            for (let pos in list[i]) {\r\n                if (list[i].hasOwnProperty(pos) === false) {\r\n                    continue;\r\n                }\r\n                if (g.node(list[i][pos])) {\r\n                    g.node(list[i][pos]).x = parseInt(pos) * g.maxWidth;\r\n                }\r\n            }\r\n\r\n        }\r\n    }\r\n\r\n    public positionY(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        let rankSep = g.ranksep;\r\n        let prevY = 0;\r\n        for (let layer in layering) {\r\n            let maxHeight = g.maxHeight;\r\n            for (let v in layering[layer]) {\r\n                if (layering[layer].hasOwnProperty(v) === false) {\r\n                    continue;\r\n                }\r\n                let id = layering[layer][v];\r\n                g.nodes[id].y = prevY + maxHeight / 2;\r\n            }\r\n            prevY += maxHeight + rankSep;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\r\n     * function will produce a matrix with the ids of each node.\r\n     */\r\n    public buildLayerMatrix(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        for (let i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (let n in g.nodes) {\r\n            let node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank][node.order] = n;\r\n            }\r\n        }\r\n        return layering;\r\n    }\r\n\r\n    public positionX(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        return layering;\r\n    }\r\n}\r\n","import { Point } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport Layout from './Layout';\r\n\r\nexport class Random implements Layout {\r\n\r\n  public layout(graph: Graph) {\r\n\r\n    let model = graph.$graphModel;\r\n\r\n    if (model.nodes) {\r\n      for (let node of model.nodes) {\r\n        let pos: Point = node.getPos();\r\n        if (pos.x === 0 && pos.y === 0) {\r\n          let x = Util.getRandomInt(0, graph.canvasSize.width);\r\n          let y = Util.getRandomInt(0, graph.canvasSize.height);\r\n          node.withPos(x, y);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","export * from './DagreLayout';\r\nexport * from './Random';\r\nexport * from './DagreLayoutMin';\r\n\r\nimport {DagreLayout} from './DagreLayout';\r\nimport {DagreLayoutMin} from './DagreLayoutMin';\r\nimport {Random} from './Random';\r\nnew DagreLayout();\r\nnew DagreLayoutMin();\r\nnew Random();\r\n","import {VirtualKeyBoard} from './VirtualKeyBoard';\r\n\r\nexport {Point} from './elements/BaseElements';\r\nexport {Bridge, DelegateAdapter} from './Bridge';\r\nexport {Graph} from './elements/Graph';\r\nexport * from './elements/nodes';\r\nexport * from './elements/edges';\r\nexport * from './adapters';\r\nexport * from './UML';\r\nimport {Point} from './elements/BaseElements';\r\nimport {Graph} from './elements/Graph';\r\nimport {ClassEditor} from './elements/ClassEditor';\r\nimport {Bridge} from './Bridge';\r\nimport {Util} from './util';\r\nimport * as nodes  from './elements/nodes';\r\nimport * as edges from './elements/edges';\r\nimport {ScrumBoard} from './ScrumBoard';\r\n\r\nif (!window['Point']) {\r\n    window['Point'] = Point;\r\n    window['Graph'] = Graph;\r\n    window['bridge'] = new Bridge();\r\n    window['Util'] = Util;\r\n    window['Class'] = nodes.Class;\r\n    window['Association'] = edges.Association;\r\n    window['SymbolLibary'] = nodes.SymbolLibary;\r\n    window['ClassEditor'] = ClassEditor;\r\n    window['VirtualKeyBoard'] = VirtualKeyBoard;\r\n    window['ScrumBoard'] = ScrumBoard;\r\n}\r\n","'use strict';\r\nimport { CSS } from './CSS';\r\nimport { Node } from './elements/nodes/Node';\r\nimport { DiagramElement, Point } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport class Util {\r\n\r\n    public static isAutoSave: boolean;\r\n\r\n    static getRandomInt(min: number, max: number): number {\r\n        return Math.floor(Math.random() * (max - min + 1)) + min;\r\n    }\r\n\r\n    static createShape(attrs: any): SVGSVGElement {\r\n        let xmlns = attrs.xmlns || 'http://www.w3.org/2000/svg';\r\n        let shape = document.createElementNS(xmlns, attrs.tag);\r\n\r\n        for (let attr in attrs) {\r\n            if (!attrs.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr !== 'tag') {\r\n                shape.setAttribute(attr, attrs[attr]);\r\n\r\n            }\r\n        }\r\n        return <SVGSVGElement><any>shape;\r\n    }\r\n\r\n    static toPascalCase(value: string): string {\r\n        value = value.charAt(0).toUpperCase() + value.substring(1).toLowerCase();\r\n        return value;\r\n    }\r\n\r\n    static isSVG(tag: string): boolean {\r\n        let i,\r\n            list = ['svg', 'path', 'polygon', 'polyline', 'line', 'title', 'rect', 'filter', 'feGaussianBlur', 'feOffset', 'feBlend', 'linearGradient', 'stop', 'text', 'symbol', 'textPath', 'defs', 'fegaussianblur', 'feoffset', 'feblend', 'circle', 'ellipse', 'g'];\r\n        for (i = 0; i < list.length; i += 1) {\r\n            if (list[i] === tag) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    static createHTML(node: any): HTMLElement {\r\n        return <HTMLElement>this.create(node);\r\n    }\r\n    static create(node: any): Element {\r\n        let style, item, xmlns, key, tag, k;\r\n        if (document.createElementNS && (this.isSVG(node.tag) || node.xmlns)) {\r\n            if (node.xmlns) {\r\n                xmlns = node.xmlns;\r\n            } else {\r\n                xmlns = 'http://www.w3.org/2000/svg';\r\n            }\r\n            if (node.tag === 'img' && xmlns) {\r\n                item = document.createElementNS(xmlns, 'image');\r\n                item.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\r\n                item.setAttributeNS('http://www.w3.org/1999/xlink', 'href', node.src);\r\n            } else {\r\n                item = document.createElementNS(xmlns, node.tag);\r\n            }\r\n        } else {\r\n            item = document.createElement(node.tag);\r\n        }\r\n        tag = node.tag.toLowerCase();\r\n        for (key in node) {\r\n            if (!node.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            k = key.toLowerCase();\r\n            if (node[key] === null) {\r\n                continue;\r\n            }\r\n            if (k === 'tag' || k.charAt(0) === '$' || k === '$graphModel') {\r\n                continue;\r\n            }\r\n            if (k.charAt(0) === '#') {\r\n                item[k.substring(1)] = node[key];\r\n                continue;\r\n            }\r\n            if (k === 'rotate') {\r\n                item.setAttribute('transform', 'rotate(' + node[key] + ',' + node.$graphModel.x + ',' + node.$graphModel.y + ')');\r\n                continue;\r\n            }\r\n            if (k === 'value') {\r\n                if (!node[key]) {\r\n                    continue;\r\n                }\r\n                if (tag !== 'input') {\r\n                    if (tag === 'text') {// SVG\r\n                        item.appendChild(document.createTextNode(node[key]));\r\n                    } else {\r\n                        item.innerHTML = node[key];\r\n                    }\r\n                } else {\r\n                    item[key] = node[key];\r\n                }\r\n                continue;\r\n            }\r\n            if (k.indexOf('on') === 0) {\r\n                this.bind(item, k.substring(2), node[key]);\r\n                continue;\r\n            }\r\n            if (k.indexOf('-') >= 0) {\r\n                item.style[key] = node[key];\r\n            } else {\r\n                if (k === 'style' && typeof (node[key]) === 'object') {\r\n                    for (style in node[key]) {\r\n                        if (!node[key].hasOwnProperty(style)) {\r\n                            continue;\r\n                        }\r\n                        if (node[key][style]) {\r\n                            if ('transform' === style) {\r\n                                item.style.transform = node[key][style];\r\n                                item.style.msTransform = item.style.MozTransform = item.style.WebkitTransform = item.style.OTransform = node[key][style];\r\n                            } else {\r\n                                item.style[style] = node[key][style];\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    item.setAttribute(key, node[key]);\r\n                }\r\n            }\r\n        }\r\n        if (node.$parent) {\r\n            node.$parent.appendChild(item);\r\n        }\r\n        if (node.$graphModel) {\r\n            item.$graphModel = node.$graphModel;\r\n        }\r\n        return item;\r\n    }\r\n\r\n    static setSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttribute('width', value);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.setAttribute('height', value);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setAttributeSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttributeNS(null, 'width', value);\r\n        value = Util.getValue(height);\r\n        item.setAttributeNS(null, 'height', value);\r\n    }\r\n\r\n    static setStyleSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setPos(item: any, x: number, y: number): void {\r\n        if (item.x && item.x.baseVal) {\r\n            item.style.left = x + 'px';\r\n            item.style.top = y + 'px';\r\n        } else {\r\n            item.x = x;\r\n            item.y = y;\r\n        }\r\n    }\r\n\r\n    static getValue(value: string | number): number {\r\n        return parseInt(('0' + value).replace('px', ''), 10);\r\n    }\r\n\r\n    static isIE(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('.net') > -1;\r\n    }\r\n\r\n    static isEdge(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('edge') > -1;\r\n    }\r\n\r\n    static isFireFox(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n    }\r\n\r\n    static isSafari(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        return navigator.userAgent.toLowerCase().indexOf('safari') > -1 && !isEdge;\r\n    }\r\n\r\n    static isOpera(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('opera') > -1;\r\n    }\r\n\r\n    static isChrome(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        let isSafari = Util.isSafari();\r\n        return navigator.userAgent.toLowerCase().indexOf('chrome') > -1 && !isEdge && isSafari;\r\n    }\r\n\r\n    static getEventX(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetX'] : event.layerX;\r\n    }\r\n\r\n    static getEventY(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetY'] : event.layerY;\r\n    }\r\n\r\n    static getNumber(str: string): number {\r\n        return parseInt((str || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    static getStyle(styleProp: string): CSS {\r\n        let i, style, diff, current, ref, el = document.createElement('div'), css;\r\n        document.body.appendChild(el);\r\n        css = new CSS(styleProp);\r\n        ref = new CSS(styleProp, el).css;\r\n        style = window.getComputedStyle(el, null);\r\n        el.className = styleProp;\r\n        current = new CSS(styleProp, el).css;\r\n        diff = Util.getNumber(style.getPropertyValue('border-width'));\r\n        for (i in current) {\r\n            if (!current.hasOwnProperty(i)) {\r\n                continue;\r\n            }\r\n            if (i === 'width' || i === 'height') {\r\n                if (Util.getNumber(current[i]) !== 0 && Util.getNumber(current[i]) + diff * 2 !== Util.getNumber(ref[i])) {\r\n                    css.add(i, current[i]);\r\n                }\r\n            } else if (current[i] !== ref[i]) {\r\n                css.add(i, current[i]);\r\n            }\r\n        }\r\n        document.body.removeChild(el);\r\n        return css;\r\n    }\r\n\r\n    static sizeOf(item: string | any, node?: Node): ClientRect {\r\n        let board;\r\n        let rect: ClientRect;\r\n        let addBoard: boolean;\r\n        if (!item) {\r\n            return undefined;\r\n        }\r\n        if (node) {\r\n            board = node.$owner.$view;\r\n            addBoard = false;\r\n        }\r\n\r\n        if (!board) {\r\n            addBoard = true;\r\n            board = Util.createShape({ tag: 'svg', id: 'root', width: 200, height: 200 });\r\n            document.body.appendChild(board);\r\n        }\r\n        if (board.tagName === 'svg') {\r\n            if (typeof item === 'string') {\r\n                item = Util.create({ tag: 'text', $font: true, value: item });\r\n                item.setAttribute('width', '5px');\r\n            }\r\n        } else if (typeof item === 'string') {\r\n            item = document.createTextNode(item);\r\n        }\r\n        board.appendChild(item);\r\n        rect = item.getBoundingClientRect();\r\n        board.removeChild(item);\r\n\r\n        if (addBoard) {\r\n            document.body.removeChild(board);\r\n        }\r\n        return rect;\r\n    }\r\n\r\n    static getColor(style: string, defaultColor?: string) {\r\n        if (style) {\r\n            if (style.toLowerCase() === 'create') {\r\n                return '#008000';\r\n            }\r\n            if (style.toLowerCase() === 'nac') {\r\n                return '#FE3E3E';\r\n            }\r\n            if (style.indexOf('#') === 0) {\r\n                return style;\r\n            }\r\n        }\r\n        if (defaultColor) {\r\n            return defaultColor;\r\n        }\r\n        return '#000';\r\n    }\r\n\r\n    public static utf8$to$b64(str: string): string {\r\n        return window.btoa(encodeURIComponent(str));\r\n    }\r\n\r\n    public static showSVG(control: DiagramElement) {\r\n        let svg = Util.create({\r\n            tag: 'svg',\r\n            style: { left: control.getPos().x, top: control.getPos().y, position: 'absolute' }\r\n        });\r\n        let child = control.getSVG();\r\n        if (child) {\r\n            svg.appendChild(child);\r\n        }\r\n        Util.setSize(svg, control.getSize().x, control.getSize().y);\r\n        document.body.appendChild(svg);\r\n    }\r\n\r\n    public static toJson(ref: JSON | Object): Object {\r\n        let result = {};\r\n        return Util.copy(result, ref, false, false);\r\n    }\r\n\r\n    public static initControl(parent: Control, control: Control, type: string, id: string, json: JSON | Object) {\r\n        if (typeof control.init === 'function') {\r\n            control.init(parent, type, id);\r\n        }\r\n        if (typeof control.load === 'function') {\r\n            control.load(json);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * copy One Json into another\r\n     * @function\r\n     * @param ref reference Json\r\n     * @param src source Json\r\n     * @param full all attributes include privet $\r\n     * @param replace set the original reference or copy it\r\n     * @returns ref\r\n     * @name copy\r\n     */\r\n    public static copy(ref: JSON | Object, src: JSON | Object, full: boolean, replace: boolean) {\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (replace) {\r\n                        ref[i] = src[i];\r\n                        continue;\r\n                    }\r\n                    if (!ref[i]) {\r\n                        if (src[i] instanceof Array) {\r\n                            ref[i] = [];\r\n                        } else {\r\n                            ref[i] = {};\r\n                        }\r\n                    }\r\n                    Util.copy(ref[i], src[i], full, false);\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref[i] = src[i];\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    public static xmlstringify(text: string): string {\r\n        text = text.replace('<', '&lt;');\r\n        text = text.replace('>', '&gt;');\r\n        return text;\r\n    }\r\n\r\n    public static toXML(ref: JSON | Object | any, src: JSON | Object | any, full: boolean, doc: Document): any {\r\n        let name;\r\n        if (!ref) {\r\n            name = src.constructor.name;\r\n            doc = document.implementation.createDocument(null, name, null);\r\n            ref = doc.childNodes[0];\r\n        }\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (!ref.getAttribute(i)) {\r\n                        if (src[i] instanceof Array) {\r\n                            for (let c in src[i]) {\r\n                                if (!src[i].hasOwnProperty(c)) {\r\n                                    continue;\r\n                                }\r\n                                name = src[i][c].constructor.name;\r\n                                let child = doc.createElement(name);\r\n                                ref.appendChild(child);\r\n                                Util.toXML(child, src[i][c], full, doc);\r\n                            }\r\n                        } else {\r\n                            name = src[i].constructor.name;\r\n                            let child = doc.createElement(name);\r\n                            ref.appendChild(child);\r\n                            Util.toXML(child, src[i], full, doc);\r\n                        }\r\n                    } else {\r\n                        Util.toXML(ref.getAttribute(i), src[i], full, doc);\r\n                    }\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref.setAttribute(i, src[i]);\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    static Range(min: Point, max: Point, x: number, y: number) {\r\n        max.x = Math.max(max.x, x);\r\n        max.y = Math.max(max.y, y);\r\n        min.x = Math.min(min.x, x);\r\n        min.y = Math.min(min.y, y);\r\n    }\r\n\r\n    public static getPosition(m: number, n: number, entity: DiagramElement, refCenter: Point) {\r\n        let t, p = [], list, distance = [], min = 999999999, position, i, step = 15;\r\n        let pos: Point = entity.getPos();\r\n        let size: Point = entity.getSize();\r\n        list = [Point.LEFT, Point.RIGHT];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = this.getLRPosition(m, n, entity, list[i]);\r\n            if (t.y >= pos.y && t.y <= (pos.y + size.y + 1)) {\r\n                t.y += (entity['$' + list[i]] * step);\r\n                if (t.y > (pos.y + size.y)) {\r\n                    // Alternative\r\n                    t = Util.getUDPosition(m, n, entity, Point.DOWN, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        list = [Point.UP, Point.DOWN];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = Util.getUDPosition(m, n, entity, list[i]);\r\n            if (t.x >= pos.x && t.x <= (pos.x + size.x + 1)) {\r\n                t.x += (entity['$' + list[i]] * step);\r\n                if (t.x > (pos.x + size.x)) {\r\n                    // Alternative\r\n                    t = this.getLRPosition(m, n, entity, Point.RIGHT, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        for (i = 0; i < p.length; i += 1) {\r\n            if (distance[i] < min) {\r\n                min = distance[i];\r\n                position = p[i];\r\n            }\r\n        }\r\n        return position;\r\n    }\r\n\r\n    public static getUDPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let x, y: number = pos.y;\r\n        if (p === Point.DOWN) {\r\n            y += size.y;\r\n        }\r\n        x = (y - n) / m;\r\n        if (step) {\r\n            x += e['$' + p] * step;\r\n            if (x < pos.x) {\r\n                x = pos.x;\r\n            } else if (x > (pos.x + size.x)) {\r\n                x = pos.x + size.x;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static getLRPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let y: number, x: number = pos.x;\r\n        if (p === Point.RIGHT) {\r\n            x += size.x;\r\n        }\r\n        y = m * x + n;\r\n        if (step) {\r\n            y += e['$' + p] * step;\r\n            if (y < pos.y) {\r\n                y = pos.y;\r\n            } else if (y > (pos.y + size.y)) {\r\n                y = pos.y + size.y;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static hasClass(element: Element, cls: string) {\r\n        let className = element.getAttribute('class');\r\n        return className.indexOf(cls) > 0;\r\n    }\r\n    public static addClass(element: Element, cls: string) {\r\n        if (!Util.hasClass(element, cls)) {\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className + ' ' + cls);\r\n        }\r\n    }\r\n    public static removeClass(element: Element, cls: string) {\r\n        if (Util.hasClass(element, cls)) {\r\n            let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className.replace(reg, ' ').trim());\r\n        }\r\n    }\r\n\r\n    public static startsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.startsWith) {\r\n            return s.indexOf(searchS) === 0;\r\n        }\r\n\r\n        return s.startsWith(searchS);\r\n    }\r\n\r\n    public static endsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.endsWith) {\r\n            let lastIndex = s.lastIndexOf(searchS);\r\n            return lastIndex !== -1 && lastIndex === (s.length - 1);\r\n        }\r\n\r\n        return s.endsWith(searchS);\r\n    }\r\n\r\n    public static includes(s: string, searchS: string): boolean {\r\n        if (!String.prototype.includes) {\r\n            let idx = s.indexOf(searchS);\r\n            return idx > -1;\r\n        }\r\n        if (s === null) {\r\n            return false;\r\n        }\r\n\r\n        return s.includes(searchS);\r\n    }\r\n\r\n    public static isParentOfChild(parent: Element, child: Element): boolean {\r\n\r\n        if (!parent || !child) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isIE()) {\r\n            let children = parent.childNodes;\r\n            // let found = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                let childItem = children[i];\r\n                if (childItem === child) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        return parent.contains(child);\r\n    }\r\n\r\n    public static createCustomEvent(type: string, params?: any): CustomEvent {\r\n        let evt: CustomEvent;\r\n\r\n        if (typeof window['CustomEvent'] !== 'function') {\r\n            params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n            evt = document.createEvent('CustomEvent');\r\n            evt.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\r\n            return evt;\r\n        }\r\n\r\n        evt = new CustomEvent(type);\r\n\r\n        return evt;\r\n    }\r\n\r\n    public static saveToLocalStorage(model: any): boolean {\r\n        if (!this.isAutoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isLocalStorageSupported()) {\r\n            if (model) {\r\n                if (model.$isLoading) {\r\n                    return false;\r\n                }\r\n                let jsonObj = Util.toJson(model);\r\n                let data = JSON.stringify(jsonObj, null, '\\t');\r\n                localStorage.setItem('diagram', data);\r\n            } else {\r\n                localStorage.removeItem('diagram');\r\n            }\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static getDiagramFromLocalStorage(): string {\r\n        if (Util.isLocalStorageSupported()) {\r\n            return localStorage.getItem('diagram');\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    public static isLocalStorageSupported(): boolean {\r\n        if (this.isEdge()) {\r\n            return false;\r\n        }\r\n        return localStorage !== undefined;\r\n    }\r\n}\r\n"],"sourceRoot":""}
Severity: Minor
Found in doc/diagram.js.map by fixme

FIXME found
Open

{"version":3,"sources":["webpack://DiagramJS/webpack/bootstrap","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Adapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Bridge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/BridgeElement.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/CSS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Control.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Data.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventBus.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/JSEPS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Palette.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertiesPanel.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertyBinder.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/RGBColor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/SVGConverter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/ScrumBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Toolbar.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/UML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/VirtualKeyBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/JavaAdapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/BaseElements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/ClassEditor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Graph.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Model.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregate.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Association.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Composition.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Generalisation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Implements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Attribute.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/AutoComplete.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/BR.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Button.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Class.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/ClazzProperty.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Dice.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Div.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Form.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/HTML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/InfoText.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Input.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Label.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Method.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Node.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/SO.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/StereoType.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Symbol.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Table.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/AddNode.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Drag.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/GraphListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/ImportFile.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/NewEdge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Select.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Zoom.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayout.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayoutMin.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/Random.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/main.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/util.ts"],"names":[],"mappings":"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","file":"diagram.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./main.ts\");\n","export abstract class Adapter {\r\n    public id: string = null;\r\n\r\n    abstract update(evt: Object): boolean;\r\n}\r\n","'use strict';\r\n\r\nimport * as controls from './elements/nodes';\r\nimport * as adapters from './adapters';\r\nimport Data from './Data';\r\nimport {Control} from './Control';\r\nimport {Adapter} from './Adapter';\r\nimport {Graph} from './elements';\r\nimport {Util} from './util';\r\nimport {Point} from './elements';\r\n\r\nexport class Bridge extends Control {\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public static version: string = '0.42.01.1601007-1739';\r\n    private controlFactory: Object = {};\r\n    private adapterFactory: Object = {};\r\n    private controls: Object = {};\r\n    private adapters: Object = {};\r\n    private items: Object = {};\r\n    private controlNo: number = 1;\r\n    private online: boolean = true;\r\n    private language: string = navigator.language.toUpperCase();\r\n    private toolBar: HTMLElement;\r\n\r\n    constructor(viewRoot?: HTMLElement) {\r\n        super();\r\n        let i;\r\n\r\n        if (viewRoot) {\r\n            this.$view = viewRoot;\r\n        }\r\n\r\n        let keys: string[] = Object.keys(adapters);\r\n        for (i = 0; i < keys.length; i++) {\r\n            let child = adapters[keys[i]];\r\n            if (child && child.id) {\r\n                this.adapterFactory[child.id.toLowerCase()] = child;\r\n            }\r\n        }\r\n\r\n        keys = Object.keys(controls);\r\n        for (i = 0; i < keys.length; i++) {\r\n            this.addControl(controls[keys[i]]);\r\n        }\r\n        this.addControl(Graph);\r\n\r\n        let that = this;\r\n        window.addEventListener('load', function () {\r\n            let updateOnlineStatus = function updateOnlineStatus() {\r\n                that.setOnline(navigator.onLine);\r\n            };\r\n            window.addEventListener('online', updateOnlineStatus);\r\n            window.addEventListener('offline', updateOnlineStatus);\r\n        });\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public setOnline(value: boolean) {\r\n        this.online = value;\r\n        if (this.toolBar.children[0]) {\r\n            this.toolBar.children[0].className = value ? 'online' : 'offline';\r\n        }\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addToolbar(): boolean {\r\n        if (this.toolBar) {\r\n            return false;\r\n        }\r\n        this.toolBar = document.createElement('div');\r\n        this.toolBar.className = 'onlineStatus';\r\n        let child = document.createElement('div');\r\n        child.className = 'online';\r\n        this.toolBar.appendChild(child);\r\n        child = document.createElement('div');\r\n        child.className = 'lang';\r\n        child.innerHTML = this.language;\r\n        this.toolBar.appendChild(child);\r\n\r\n        let body: HTMLElement = document.getElementsByTagName('body')[0];\r\n        body.insertBefore(this.toolBar, body.firstChild);\r\n        // Refresh Online Status\r\n        this.setOnline(this.online);\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addListener = function (listener: any) {\r\n        this.listener.push(listener);\r\n    };\r\n\r\n    public addControl(control: any) {\r\n        if (control && control.name) {\r\n            this.controlFactory[control.name.toLowerCase()] = control;\r\n        }\r\n    }\r\n\r\n    public getId(): string {\r\n        return 'control' + (this.controlNo++);\r\n    }\r\n\r\n    public adapterUpdate(message: string) {\r\n        let keys: string[] = Object.keys(this.adapters);\r\n        if (keys.length > 0) {\r\n            let i;\r\n            for (i = 0; i < keys.length; i++) {\r\n                let adapterList = this.adapters[keys[i]];\r\n                if (adapterList instanceof Adapter) {\r\n                    adapterList.update(message);\r\n                } else {\r\n                    for (let adapter of adapterList) {\r\n                        adapter.update(message);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        let config = {}, className: string, id: string;\r\n        if (typeof(json) === 'string') {\r\n            // Only a String\r\n            config['id'] = '' + json;\r\n            let item = document.getElementById(config['id']);\r\n            let className: string;\r\n            if (item) {\r\n                className = item.getAttribute('class');\r\n                if (!className) {\r\n                    className = item.getAttribute('classname') || '';\r\n                }\r\n                // Found Element and now config Data element\r\n                if (item.getAttribute('property')) {\r\n                    if (this.hasItem(item.getAttribute('property'))) {\r\n                        let data = this.getItem(item.getAttribute('property'));\r\n                        for (let key in data.prop) {\r\n                            if (item.getAttribute(key)) {\r\n                                data.setValue(key, item.getAttribute(key));\r\n                            }\r\n                        }\r\n                        if (item.getAttribute('property')) {\r\n                            // TODO: FIXME!!!\r\n                            // data.property = item.getAttribute(\"property\");\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                className = '' + json;\r\n            }\r\n            className = className.toLowerCase();\r\n            config['className'] = className;\r\n        } else {\r\n            config = <JSON>json;\r\n        }\r\n        // Config validate\r\n        if (!config['id']) {\r\n            config['id'] = this.getId();\r\n        }\r\n        // Backup for Old Graph\r\n        if (!config['className'] && (config['type'] === 'clazzdiagram' || config['type'] === 'objectdiagram')) {\r\n            config['className'] = 'graph';\r\n        }\r\n\r\n        className = config['className'] || config['class'];\r\n        className = className.toLocaleLowerCase();\r\n        id = config['id'];\r\n\r\n        // Check For Control or Data\r\n        if ((config['prop'] || config['upd'] || config['rem']) && this.controls[id] === null) {\r\n            // Its Data\r\n            let newData = !this.hasItem(config['id']);\r\n            let item: Data = this.getItem(config['id']);\r\n            // TODO: FIXME!!!\r\n            // if (id && className && !item.property) {\r\n            //      item.property = className;\r\n            // }\r\n            if (newData) {\r\n                for (let i in this.controls) {\r\n                    if (this.controls.hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    this.controls[i].addItem(this, item);\r\n                }\r\n            }\r\n            // Add all Values to item\r\n            item.addProperties(config);\r\n            // Bridge.addProperties(config['prop'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return item;\r\n        }\r\n\r\n        let control;\r\n        if (this.controls[id]) {\r\n            control = this.controls[id];\r\n            control.initControl(json);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return control;\r\n        }\r\n\r\n        if (typeof(this.controlFactory[className]) === 'object' || typeof(this.controlFactory[className]) === 'function') {\r\n            let obj = this.controlFactory[className];\r\n            control = new obj(json);\r\n            Util.initControl(owner || this, control, config['property'], id, json);\r\n\r\n            if (control.id) {\r\n                this.controls[control.id] = control;\r\n            } else {\r\n                this.controls[id] = control;\r\n            }\r\n\r\n            // create DataObject and register this control as listener to it\r\n            // let obj = {id:id};\r\n            // let data: Data = this.load(obj);\r\n            // data.addListener(this);\r\n\r\n            // Try to Show\r\n            if (typeof control.getSVG === 'function' && typeof control.getSize === 'function') {\r\n                let size: Point = control.getSize();\r\n\r\n                let svg = Util.createShape({\r\n                    tag: 'svg',\r\n                    id: 'root',\r\n                    width: size.x,\r\n                    height: size.y\r\n                });\r\n\r\n                let view = control.getSVG();\r\n                svg.appendChild(view);\r\n                document.getElementsByTagName('body')[0].appendChild(svg);\r\n            }\r\n            return control;\r\n        }\r\n        return null;\r\n        // bridge.load('{class:table, columns:[{id:'firstname'}, {id:'lastname'}]}');\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n\r\n        if (this.items[id] !== undefined) {\r\n            return true;\r\n        }\r\n        id = id.split('.')[0];\r\n        return (this.items[id] !== undefined);\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return this.items;\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        let item = this.items[id];\r\n        if (!item) {\r\n            id = id.split('.')[0];\r\n            item = this.items[id];\r\n            if (!item) {\r\n                item = new Data();\r\n                item.id = id;\r\n                this.items[id] = item;\r\n            }\r\n        }\r\n        return item;\r\n    }\r\n\r\n    /**\r\n     * Method for executing user input -> Event\r\n     * @param object\r\n     * @param attribute\r\n     * @param oldValue\r\n     * @param newValue\r\n     * @returns {boolean}\r\n     */\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        alert('Bridge.setValue: oldVal:' + oldValue + ', newVal: ' +  + newValue + ', attribute: ' + attribute + ', object: ' + JSON.stringify(object));\r\n        let obj: Data;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n\r\n        } else if (object instanceof Data) {\r\n            obj = object;\r\n            id = object.id;\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = <Data>object;\r\n            id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return false;\r\n        }\r\n        if (obj) {\r\n            // Execute Update to Data\r\n            obj.setValue(attribute, newValue);\r\n            // Could be done here, but currently is done at this.execueChange..:\r\n            // obj[attribute] = value;\r\n        }\r\n\r\n        /*let tmp = {'id': id};\r\n        if (typeof(newValue) !== 'undefined' && newValue !== null) {\r\n            let upd = {};\r\n            upd[attribute] = newValue;\r\n            tmp['upd'] = upd;\r\n        }\r\n        if (typeof(oldValue) !== 'undefined' && oldValue !== null) {\r\n            let rem = {};\r\n            rem[attribute] = oldValue;\r\n            tmp['rem'] = rem;\r\n        }*/\r\n        // this.load(tmp);\r\n        return true;\r\n    }\r\n\r\n    public getValue(object: Object, attribute: string): any {\r\n        let obj: Object;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = object;\r\n            // id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return;\r\n        }\r\n        if (obj) {\r\n            if (obj.hasOwnProperty(attribute)) {\r\n                return obj[attribute];\r\n            } else if (obj instanceof Data) {\r\n                return (<Data>obj).getValue(attribute);\r\n            } else {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    public getNumber(object: Object, attribute: string, defaultValue: number = 0): number {\r\n        let res = <number>this.getValue(object, attribute);\r\n        if (typeof res === 'number') {\r\n            return res;\r\n        } else if (typeof res === 'string') {\r\n            // check whether res is a number\r\n            let value = Number(res);\r\n            if (value || value === 0) {\r\n                return value;\r\n            }\r\n        }\r\n        return defaultValue;\r\n    }\r\n\r\n    getControl(controlId: string) {\r\n        return this.controls[controlId];\r\n    }\r\n\r\n    public registerListener(eventType: string, control: Control, callBackfunction: string): Control {\r\n        if (typeof control === 'string') {\r\n            control = this.getControl(<string>control);\r\n        }\r\n        if (!control) {\r\n            return null;\r\n        }\r\n        if (eventType) {\r\n            eventType = eventType.toLowerCase();\r\n        }\r\n        control.registerListenerOnHTMLObject(eventType);\r\n        if (callBackfunction) {\r\n            let adapter: DelegateAdapter = new DelegateAdapter();\r\n            adapter.callBackfunction = callBackfunction;\r\n            adapter.id = control.getId();\r\n            this.addAdapter(adapter, eventType);\r\n        }\r\n        return control;\r\n    }\r\n\r\n    public addAdapter(adapter: Adapter | string, eventType: string): Adapter {\r\n        if (!eventType) {\r\n            eventType = '';\r\n        }\r\n        let result: Adapter;\r\n        if (adapter instanceof String) {\r\n            let obj = this.adapterFactory[adapter.toLowerCase()];\r\n            result = new obj();\r\n        } else {\r\n            result = <Adapter>adapter;\r\n        }\r\n        let handlers = this.adapters[eventType];\r\n\r\n        if (handlers === null || handlers === undefined) {\r\n            handlers = [];\r\n            this.adapters[eventType] = handlers;\r\n        }\r\n        handlers.push(result);\r\n        return result;\r\n    }\r\n\r\n    public fireEvent(evt: Event): void {\r\n        let handlers = this.adapters[''];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n        handlers = this.adapters[evt['eventType']];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport class DelegateAdapter extends Adapter {\r\n    adapter: Adapter;\r\n    callBackfunction: string;\r\n\r\n    update(evt: Event): boolean {\r\n        if (this.adapter) {\r\n            this.adapter.update(evt);\r\n            return true;\r\n        } else if (this.callBackfunction) {\r\n            return this.executeFunction(this.callBackfunction, evt);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public setAdapter(adapter: Adapter): boolean {\r\n        this.adapter = adapter;\r\n        return true;\r\n    }\r\n\r\n    private executeFunction(strValue: string, evt: Event): boolean {\r\n        let scope = window;\r\n        let scopeSplit = strValue.split('.');\r\n        for (let i = 0; i < scopeSplit.length - 1; i++) {\r\n            scope = scope[scopeSplit[i]];\r\n            if (scope === undefined) {\r\n                return false;\r\n            }\r\n        }\r\n        let fn: any = scope[scopeSplit[scopeSplit.length - 1]];\r\n        if (typeof fn === 'function') {\r\n            fn.call(scope);\r\n            return true;\r\n        } else {\r\n            window['callBack1'].update(evt);\r\n\r\n        }\r\n        return false;\r\n    }\r\n}\r\n","'use strict';\r\nimport Data from './Data';\r\n\r\nexport default class BridgeElement {\r\n    private static elementSet: BridgeElement[] = [];\r\n    public model: Data;\r\n    public id: string;\r\n    public gui: HTMLElement;\r\n\r\n    constructor(model: Data) {\r\n        this.model = model;\r\n        this.id = model.id;\r\n        BridgeElement.elementSet.push(this);\r\n    }\r\n}\r\n","import {Util} from './util';\r\n\r\n// \t\t\t\t######################################################### CSS #########################################################\r\nexport class CSS {\r\n    public css: Object;\r\n    private name: string;\r\n\r\n    constructor(name: string, item?: any) {\r\n        let i, value, border: string, prop, el;\r\n        this.name = name;\r\n        this.css = {};\r\n        if (!item) {\r\n            return;\r\n        }\r\n\r\n        el = window.getComputedStyle(item, null);\r\n        border = el.getPropertyValue('border');\r\n        for (i in el) {\r\n            prop = i;\r\n            value = el.getPropertyValue(prop);\r\n            if (value && value !== '') {\r\n                // optimize CSS\r\n                if (border) {\r\n                    if (prop === 'border-bottom' || prop === 'border-right' || prop === 'border-top' || prop === 'border-left') {\r\n                        if (value !== border) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-color' || prop === 'border-bottom-color' || prop === 'border-right-color' || prop === 'border-top-color' || prop === 'border-left-color') {\r\n                        if (border.substring(border.length - value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-width') {\r\n                        if (border.substring(0, value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else {\r\n                        this.css[prop] = value;\r\n                    }\r\n                } else {\r\n                    this.css[prop] = value;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public static getStdDef() {\r\n        let child, def = Util.create({tag: 'defs'});\r\n\r\n        child = Util.create({tag: 'filter', id: 'drop-shadow'});\r\n        child.appendChild(Util.create({tag: 'feGaussianBlur', 'in': 'SourceAlpha', result: 'blur-out', stdDeviation: 2}));\r\n        child.appendChild(Util.create({tag: 'feOffset', 'in': 'blur-out', dx: 2, dy: 2}));\r\n        child.appendChild(Util.create({tag: 'feBlend', 'in': 'SourceGraphic', mode: 'normal'}));\r\n        def.appendChild(child);\r\n        child = Util.create({tag: 'linearGradient', id: 'reflect', x1: 0, x2: 0, y1: '50%', y2: 0, spreadMethod: 'reflect'});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#aaa', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#eee', offset: '100%'}));\r\n        def.appendChild(child);\r\n\r\n        child = Util.create({tag: 'linearGradient', id: 'classelement', x1: 0, x2: '100%', y1: '100%', y2: 0});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#fff', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#d3d3d3', offset: 1}));\r\n        def.appendChild(child);\r\n\r\n        return def;\r\n    }\r\n\r\n    public static getSubstring(str: string, search: string, startChar: string, endChar: string, splitter: string): any {\r\n        let pos, end, count = 0, array = [];\r\n        pos = str.indexOf(search);\r\n        if (pos > 0) {\r\n            end = str.indexOf(startChar, pos);\r\n            pos = end + 1;\r\n            if (end > 0) {\r\n                while (end < str.length) {\r\n                    if (str.charAt(end) === startChar) {\r\n                        count += 1;\r\n                    }\r\n                    if (str.charAt(end) === endChar) {\r\n                        count -= 1;\r\n                        if (count === 0) {\r\n                            if (splitter && pos !== end) {\r\n                                array.push(str.substring(pos, end).trim());\r\n                            }\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (str.charAt(end) === splitter && count === 1) {\r\n                        array.push(str.substring(pos, end).trim());\r\n                        pos = end + 1;\r\n                    }\r\n\r\n                    end += 1;\r\n                }\r\n                if (splitter) {\r\n                    return array;\r\n                }\r\n                return str.substring(pos, end);\r\n            }\r\n            return str.substring(pos);\r\n        }\r\n        return '';\r\n    }\r\n\r\n    public static addStyle(board: SVGElement, styleName: any) {\r\n        let defs, style: any, css;\r\n        if (styleName.baseVal || styleName.baseVal === '') {\r\n            styleName = styleName.baseVal;\r\n        }\r\n        if (!styleName) {\r\n            return;\r\n        }\r\n        defs = CSS.getDefs(board);\r\n        if (defs.getElementsByTagName('style').length > 0) {\r\n            style = defs.getElementsByTagName('style')[0];\r\n        } else {\r\n            style = Util.create({tag: 'style'});\r\n            style.item = {};\r\n            defs.appendChild(style);\r\n        }\r\n        if (!style.item[styleName]) {\r\n            css = Util.getStyle(styleName);\r\n            style.item[styleName] = css;\r\n            style.innerHTML = style.innerHTML + '\\n.' + styleName + css.getSVGString(board);\r\n        }\r\n    }\r\n\r\n    public static addStyles(board: SVGElement, item: any) {\r\n        if (!item) {\r\n            return;\r\n        }\r\n        let items, i, className: any = item.className;\r\n\r\n        if (className) {\r\n            if (className.baseVal || className.baseVal === '') {\r\n                className = className.baseVal;\r\n            }\r\n        }\r\n        if (className) {\r\n            items = className.split(' ');\r\n            for (i = 0; i < items.length; i += 1) {\r\n                CSS.addStyle(board, items[i].trim());\r\n            }\r\n        }\r\n        for (i = 0; i < item.childNodes.length; i += 1) {\r\n            this.addStyles(board, item.childNodes[i]);\r\n        }\r\n    }\r\n\r\n    public static getDefs(board: SVGElement) {\r\n        let defs;\r\n        if (board.getElementsByTagName('defs').length < 1) {\r\n            defs = Util.create({tag: 'defs'});\r\n            board.insertBefore(defs, board.childNodes[0]);\r\n        } else {\r\n            defs = board.getElementsByTagName('defs')[0];\r\n        }\r\n        return defs;\r\n    }\r\n\r\n    public add(key: string, value: string) {\r\n        this.css[key] = value;\r\n    }\r\n\r\n    public get(key: string): any {\r\n        let i;\r\n        for (i in this.css) {\r\n            if (i === key) {\r\n                return this.css[key];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public getNumber(key: string) {\r\n        return parseInt((this.get(key) || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    public getSVGString(board: SVGElement) {\r\n        let str, pos, style, defs, value, filter, z;\r\n        str = '{';\r\n        for (style in this.css) {\r\n            if (!this.css.hasOwnProperty(style)) {\r\n                continue;\r\n            }\r\n            if (style === 'border') {\r\n                pos = this.css[style].indexOf(' ');\r\n                str = str + 'stroke-width: ' + this.css[style].substring(0, pos) + ';';\r\n                pos = this.css[style].indexOf(' ', pos + 1);\r\n                str = str + 'stroke:' + this.css[style].substring(pos) + ';';\r\n            } else if (style === 'background-color') {\r\n                str = str + 'fill: ' + this.css[style] + ';';\r\n            } else if (style === 'background') {\r\n                value = CSS.getSubstring(this.css[style], 'linear-gradient', '(', ')', ',');\r\n                if (value.length > 0) {\r\n                    defs = CSS.getDefs(board);\r\n                    if (value[0] === '45deg') {\r\n                        pos = 1;\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '100%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                    } else {\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '0%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                        pos = 0;\r\n                    }\r\n                    defs.appendChild(filter);\r\n                    while (pos < value.length) {\r\n                        value[pos] = value[pos].trim();\r\n                        z = value[pos].lastIndexOf(' ');\r\n                        filter.appendChild(Util.create({\r\n                            tag: 'stop',\r\n                            'offset': value[pos].substring(z + 1),\r\n                            style: {'stop-color': value[pos].substring(0, z)}\r\n                        }));\r\n                        pos += 1;\r\n                    }\r\n                    str = str + 'fill: url(#' + this.name + ');';\r\n                    continue;\r\n                }\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n                // box-shadow: inset 0 3px 4px #888;\r\n// \t\t\t\t<defs>\r\n// \t\t\t\t\t<filter id='drop-shadow'>\r\n// \t\t\t\t\t\t<feGaussianBlur in='SourceAlpha' result='blur-out' stdDeviation='2'></feGaussianBlur>\r\n// \t\t\t\t\t\t<feOffset in='blur-out' dx='2' dy='2'></feOffset>\r\n// \t\t\t\t\t\t<feBlend in='SourceGraphic' mode='normal'></feBlend>\r\n// \t\t\t\t\t</filter>\r\n// \t\t\t\t</defs>\r\n            } else {\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n            }\r\n        }\r\n        str = str + '}';\r\n        return str;\r\n    }\r\n}\r\n","import {Bridge} from './Bridge';\r\nimport Data from './Data';\r\nimport EventListener from './EventListener';\r\n\r\nexport abstract class Control {\r\n    public $owner: Control;\r\n    /**\r\n     *\r\n     */\r\n    public property: string;\r\n    public id: string;\r\n    public $view: Element;\r\n    public $viewData: Data = null;\r\n\r\n    protected $model: Data;\r\n    protected $viewListener: EventListenerOrEventListenerObject;\r\n\r\n    /**\r\n     * The properties, we want to listen to\r\n     */\r\n    // static defaultProperties: string[] = [];\r\n\r\n    // public getProperties(): string[] {\r\n    //     return this.properties;\r\n    // }\r\n\r\n    constructor() {\r\n        // e.g. this.properties.push(\"key\");\r\n        // this.properties.push(\"property\");\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data: Data = new Data();\r\n        if (oldData) {\r\n            oldData.removeListener(this);\r\n            const keys: string[] = oldData.getKeys();\r\n            for (let i = 0; i < keys.length; i++) {\r\n                let attr = keys[i];\r\n                if (this.$view) {\r\n                    if (this.$view[attr] === null) {\r\n                        continue;\r\n                    }\r\n                    data.setValue(attr, this.$view[attr]);\r\n                } else {\r\n                    data.setValue(attr, null);\r\n                }\r\n            }\r\n        }\r\n        data.addListener(this);\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     *  Set the new HTMLElement and attach listener to it.\r\n     *  Also remove Listeners from old one and return the old one, if present.\r\n     * @param element\r\n     * @returns The previous Element\r\n     */\r\n    public setView(element: Element): Element {\r\n        let oldElement: Element = null;\r\n        if (this.$view) {\r\n            oldElement = this.$view;\r\n            if (this.$viewListener) {\r\n                oldElement.removeEventListener('change', this.$viewListener);\r\n            }\r\n        }\r\n        this.$view = element;\r\n\r\n        if (this.$viewListener) {\r\n            element.addEventListener('change', this.$viewListener);\r\n        }\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n        return element;\r\n    }\r\n\r\n    public init(owner: Control, property ?: string, id ?: string): Control {\r\n        if (!this.$owner) {\r\n            this.$owner = owner;\r\n        }\r\n        if (!this.id) {\r\n            this.id = id;\r\n        }\r\n        if (!this.property) {\r\n            this.property = this.generateID(property, id);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public createEventListener(): EventListener {\r\n        return new EventListener();\r\n    }\r\n\r\n    public getRoot(): Control {\r\n        if (this.$owner) {\r\n            return this.$owner.getRoot();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return null;\r\n    }\r\n\r\n    public initControl(data: any): void {\r\n        if (this.$view === null || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (data.hasOwnProperty('prop')) {\r\n            for (let key in data.prop) {\r\n                let oldValue = this.$viewData.getValue(key);\r\n                if (this.$view) {\r\n                    this.updateElement(key, oldValue, data.prop[key]);\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        let hasRem = data.hasOwnProperty('rem');\r\n        let removed: any[] = [];\r\n        if (data.hasOwnProperty('upd')) {\r\n            for (let key in data.upd) {\r\n                let oldValue;\r\n                let newValue = data.upd[key];\r\n                let entity;\r\n                const temp = false;\r\n                if (temp) {\r\n//                if (newValue == this.getViewData().getValue(key)) {\r\n                    // new Value assertEquals old value, so we don't need to change anything..\r\n                    // delete data.rem[key];\r\n                    if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                        removed.push(data.rem[key]);\r\n                    }\r\n                    continue;\r\n                }\r\n                if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                    // if there's a rem, the oldValue from rem will be used and expected to be right..\r\n                    oldValue = data.rem[key];\r\n                    if (this.$model && this.$model.getValue(key) === oldValue) {\r\n                        entity = this.$model;\r\n//                    } else if (oldValue == this.getViewData().getValue(key)) {\r\n//                        $graphModel = this.getViewData();\r\n                    }\r\n                    delete data.rem[key];\r\n\r\n                    if (entity === null) {\r\n                        continue;\r\n                    }\r\n                }\r\n                if (entity) {\r\n                    if (!hasRem) {\r\n                        if (entity === this.$model) {\r\n                            oldValue = this.$model.getValue(key);\r\n                        } else {\r\n//                           oldValue = this.getViewData().getValue(key);\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (this.$model) {\r\n                        // try to get the oldValue directly from the $graphModel...\r\n                        oldValue = this.$model.getValue(key);\r\n                        entity = this.$model;\r\n                    }\r\n                    if (oldValue === null) {\r\n                        // if there was no data in the entity, we try to get oldValue from the $view\r\n//                        oldValue = this.getViewData().getValue(key);\r\n//                        entity = this.getViewData();\r\n                    }\r\n                }\r\n\r\n                //  || oldValue !== this.$viewData.getValue(key)\r\n                if (newValue === oldValue) {\r\n                    // no match, so update should be wrong...\r\n                    continue;\r\n                }\r\n                const viewDataOldValue = this.$viewData.getValue(key);\r\n                if (entity === this.$viewData) {\r\n\r\n                    // this.getViewData().setValue(key, newValue);\r\n                    if (this.$view) {\r\n                        this.updateElement(key, viewDataOldValue, newValue);\r\n                    }\r\n                } else {\r\n                    this.updateElement(key, viewDataOldValue, newValue);\r\n                }\r\n                this.getRoot().setValue(entity, key, newValue, oldValue);\r\n            }\r\n            // this.saveViewInData();\r\n        }\r\n        if (hasRem) {\r\n            for (let key in data.rem) {\r\n                if (removed.hasOwnProperty(key)) {\r\n                    continue;\r\n                }\r\n                let oldValue;\r\n//                    this.getViewData().getValue(key);\r\n//                if (oldValue != data.rem[key] || data.upd !== undefined && (data.upd[key] == oldValue || this.getViewData().getValue(key) == data.upd[key])) {\r\n                // if rem is invalid, or if the change is already applied, don't do anything..\r\n                //                  continue;\r\n                //            }\r\n                // delete this.$viewData.getValue(key);\r\n                // this.saveViewInData();\r\n                this.updateElement(key, null, null);\r\n                // this.$view.removeAttribute(key);\r\n                if (this.$model) {\r\n//                    this.getRoot().setValue(this.$graphModel, key, this.getViewData().getValue(key), oldValue);\r\n                }\r\n            }\r\n        }\r\n        if (this.property) {\r\n            // Add listener to Input field:\r\n            this.$view['onchange'] = ((ev: Event) => {\r\n                    this.controlChanged(ev);\r\n                }\r\n            );\r\n        }\r\n//        this.saveViewInData();\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        return null;\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n        return false;\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return new Object();\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue ?: Object): boolean {\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Is called when a object, that the Control is listening to, changes its value.\r\n     * @param entity\r\n     * @param property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        if (oldValue === newValue || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (oldValue === this.$viewData.getValue(property)) {\r\n            return;\r\n        }\r\n        // Set NewData to ViewData and Fire PC\r\n        this.$viewData.setValue(property, newValue);\r\n\r\n//\r\n//\r\n//         // if (entity == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.entity) {\r\n//                 alert(\"entity = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.entity.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.entity, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the entity is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"entity = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n// >>>>>>> addOldFunctions\r\n        if (this.$viewData) {\r\n            this.$viewData.setValue(property, newValue);\r\n        }\r\n        if (this.$model) {\r\n            this.$model.setValue(property, newValue);\r\n        }\r\n        this.updateElement(property, oldValue, newValue);\r\n    }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            // Do Nothing\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  Update GUI Element\r\n     * @param {string} property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        if (this.$view && this.$view.hasAttribute(property)) {\r\n            this.$view.setAttribute(property, newValue);\r\n        }\r\n    }\r\n\r\n//        if (oldValue == newValue) {\r\n//            return;\r\n//        }\r\n//        if (oldValue == this.$viewData.getValue(property)) {\r\n//            return;\r\n//        }\r\n//        // Set NewData to ViewData and Fire PC\r\n//        this.$viewData.setValue(property, newValue);\r\n//\r\n//\r\n//\r\n//         // if ($graphModel == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.$graphModel) {\r\n//                 alert(\"$graphModel = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.$graphModel.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.$graphModel, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the $graphModel is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"$graphModel = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n\r\n    public getId(): string {\r\n        return this.id;\r\n    }\r\n\r\n    public load(json: JSON | Object, owner ?: Control): any {\r\n        // Do Nothing\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.property || entity.hasProperty(this.property)) {\r\n                entity.addListener(this, this.property);\r\n                this.$model = entity;\r\n            }\r\n        }\r\n    }\r\n\r\n    public appendChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.appendChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].appendChild(child.$view);\r\n        }\r\n    }\r\n\r\n    public removeChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.removeChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].removeChild(child.$view);\r\n        }\r\n    }\r\n\r\n    /*\r\n     Property looks like: 't1.talk'\r\n     */\r\n    public setProperty(property: string): void {\r\n        if (!this.property) {\r\n            return;\r\n        }\r\n        let objId = property.split('.')[0];\r\n        let object = null;\r\n        if (this.$owner.hasItem(objId)) {\r\n            object = this.$owner.getItem(objId);\r\n        }\r\n\r\n        // remove listener on old object\r\n        if (this.$model) {\r\n            // this.$graphModel.removeListener(this);\r\n            this.$model.removeListener(this, this.lastProperty);\r\n        }\r\n        this.property = property;\r\n\r\n        // add listener to object..\r\n        if (object) {\r\n            object.addListener(this, this.lastProperty);\r\n            this.$model = object;\r\n            this.updateElement(this.lastProperty, this.$viewData.getValue(this.lastProperty), object.prop[this.lastProperty]);\r\n        }\r\n    }\r\n\r\n    public registerListenerOnHTMLObject(eventType: string): boolean {\r\n        return this.registerEventListener(eventType, <HTMLElement>this.$view);\r\n    }\r\n\r\n    // Normal Event HTML-Event\r\n    // Eventtype:string,\r\n    // id:string of Control\r\n    public fireEvent(evt: Event): void {\r\n        // Do Nothing\r\n    }\r\n\r\n    public isClosed(): boolean {\r\n        return this['closed'];\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        if (this.isClosed()) {\r\n            return this.$owner.getShowed();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * the id of the Data object, that contains the properties of the view\r\n     * @returns {string}\r\n     */\r\n    protected getControlDataID() {\r\n        return this.id + '_data';\r\n    }\r\n\r\n    protected generateID(property ?: string, id ?: string): string {\r\n        if (property) {\r\n            return property;\r\n        }\r\n        if (id) {\r\n            // will generate a data Object suitable for the Control..\r\n            // must be overridden, if the changeEvent shouldn't listen on value...\r\n//            return id + '.' + this.getStandardProperty();//+ \"_data\"\r\n            return id + '.' + '_data';\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected updateViewData() {\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n        const keys: string[] = this.$viewData.getKeys();\r\n        for (let i = 0; i < keys.length; i++) {\r\n            let attr = keys[i];\r\n            if (this.$view[attr] === null) {\r\n                continue;\r\n            }\r\n            this.$viewData.setValue(attr, this.$view[attr]);\r\n        }\r\n    }\r\n\r\n    protected registerEventListener(eventType: string, htmlElement: HTMLElement): boolean {\r\n        if (!htmlElement) {\r\n            return false;\r\n        }\r\n        if (htmlElement instanceof HTMLElement === false) {\r\n            return false;\r\n        }\r\n        let control = this;\r\n        let listener = (t: any) => {\r\n            t.eventType = eventType;\r\n            t.id = control.id;\r\n            control.$owner.fireEvent(t);\r\n        };\r\n        htmlElement.addEventListener(eventType, listener);\r\n        return true;\r\n    }\r\n\r\n    get lastProperty(): string {\r\n        if (!this.property) {\r\n            return '';\r\n        }\r\n        let arr: string[] = this.property.split('.');\r\n        return arr[arr.length - 1];\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\n\r\nexport default class Data {\r\n    public prop = {};\r\n    id: string;\r\n    // $listener: Control[] = [];\r\n    $listener: Object = {};\r\n\r\n    private static nullCheck(property: string): string {\r\n        if (property === undefined || property === null) {\r\n            property = '';\r\n        }\r\n        return property;\r\n    }\r\n    public getKeys(): string[] {\r\n        return Object.keys(this.prop);\r\n    }\r\n\r\n    public addProperties(values: Object) {\r\n        if (!values) {\r\n            return;\r\n        }\r\n        if (values['prop']) {\r\n            let prop = values['prop'];\r\n            for (let property in prop) {\r\n                if (prop.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (prop[property] !== null && '' !== prop[property]) {\r\n                    this.setValue(property, prop[property]);\r\n                }\r\n            }\r\n        } else {\r\n            let upd = values['upd'] || {};\r\n            let rem = values['rem'] || {};\r\n\r\n            for (let property in upd) {\r\n                if (upd.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (rem.hasOwnProperty(property) === false) {\r\n                    this.setValue(property, upd[property]);\r\n                } else {\r\n                    // if we have a rem, we wan't to check, if its a valid change (teh old value is the value in rem)\r\n                    if (this.getValue(property) === rem[property]) {\r\n                        this.setValue(property, upd[property]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getValue(attribute: string) {\r\n        return this.prop[attribute];\r\n    }\r\n\r\n    public setValue(attribute: string, newValue: any): void {\r\n        let oldValue = this.prop[attribute];\r\n        if (oldValue === newValue && newValue !== null) {\r\n            return;\r\n        }\r\n        this.prop[attribute] = newValue;\r\n        this.firePropertyChange(attribute, oldValue, newValue);\r\n    }\r\n\r\n    public addTo(attribute: string, newValue: any): boolean {\r\n        let add: boolean;\r\n        if (this.prop[attribute]) {\r\n            if (this.prop[attribute].contains(newValue) === false) {\r\n                add = true;\r\n            }\r\n        } else {\r\n            this.prop[attribute] = [];\r\n            add = true;\r\n        }\r\n        if (add) {\r\n            this.prop[attribute].push(newValue);\r\n            this.firePropertyChange(attribute, null, newValue);\r\n        }\r\n        return add;\r\n    }\r\n\r\n    public removeFrom(attribute: string, newValue: any): boolean {\r\n        if (!this.prop[attribute]) {\r\n            return true;\r\n        }\r\n        let pos: number = this.prop[attribute].indexOf(newValue);\r\n        if (pos < 0) {\r\n            return true;\r\n        }\r\n        this.prop[attribute].splice(pos, 1);\r\n        this.firePropertyChange(attribute, newValue, null);\r\n        return true;\r\n    }\r\n\r\n    public addListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(property);\r\n        if (!listeners) {\r\n            listeners = [];\r\n            this.$listener[Data.nullCheck(property)] = listeners;\r\n        }\r\n        listeners.push(control);\r\n    }\r\n\r\n    public removeListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners = this.getListeners(property);\r\n        if (listeners === null) {\r\n            return;\r\n        }\r\n        let pos = listeners.indexOf(control);\r\n        if (pos >= 0) {\r\n            listeners.splice(pos, 1);\r\n        }\r\n        if (listeners.length === 0 && Data.nullCheck(property) !== '') {\r\n            // only remove, if it's not the default listener list...\r\n            delete this.$listener[property];\r\n        }\r\n    }\r\n\r\n    public hasProperty(property: string): boolean {\r\n        return this.prop.hasOwnProperty(property);\r\n    }\r\n\r\n    public addFrom(attribute: string, oldData: Data): void {\r\n        if (oldData) {\r\n            this.setValue(attribute, oldData.getValue(attribute));\r\n        } else {\r\n            this.setValue(attribute, null);\r\n        }\r\n    }\r\n\r\n    public removeKey(key: string): any {\r\n        if (this.hasProperty(key)) {\r\n            const oldValue = this.prop[key];\r\n            delete this.prop[key];\r\n            return oldValue;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected getListeners(property: string): PropertyChangeSupport[] {\r\n        property = Data.nullCheck(property);\r\n        return this.$listener[property];\r\n    }\r\n\r\n    protected firePropertyChange(attribute: string, oldValue: Object, newValue: Object) {\r\n        attribute = Data.nullCheck(attribute);\r\n        // at first fire for the given property\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(attribute);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n        // now we need to fire the Listeners that wan't to listen to everything\r\n        listeners = this.getListeners(null);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport interface EventHandler {\r\n    canHandle(): boolean;\r\n    handle(event: Event, element: DiagramElement): boolean;\r\n    setActive(active: boolean): void;\r\n}\r\n\r\nexport class EventBus {\r\n    public static CREATE: string = 'Create';\r\n    public static EDITOR: string = 'Editor';\r\n    public static OPENPROPERTIES: string = 'openProperties';\r\n    public static RELOADPROPERTIES: string = 'reloadProperties';\r\n    public static ELEMENTMOUSEDOWN: string = 'ELEMENT:MOUSEDOWN';\r\n    public static ELEMENTMOUSEUP: string = 'ELEMENT:MOUSEUP';\r\n    public static ELEMENTMOUSELEAVE: string = 'ELEMENT:MOUSELEAVE';\r\n    public static ELEMENTMOUSEMOVE: string = 'ELEMENT:MOUSEMOVE';\r\n    public static ELEMENTMOUSEWHEEL: string = 'ELEMENT:MOUSEWHEEL';\r\n    public static ELEMENTCLICK: string = 'ELEMENT:CLICK';\r\n    public static ELEMENTDBLCLICK: string = 'ELEMENT:DBLCLICK';\r\n    public static ELEMENTDRAG: string = 'ELEMENT:DRAG';\r\n    public static ELEMENTDRAGOVER: string = 'ELEMENT:DRAGOVER';\r\n    public static ELEMENTDROP: string = 'ELEMENT:DROP';\r\n    public static ELEMENTDRAGLEAVE: string = 'ELEMENT:DRAGLEAVE';\r\n\r\n    public static EVENTS: string[] = [\r\n        EventBus.CREATE,\r\n        EventBus.EDITOR,\r\n        EventBus.OPENPROPERTIES,\r\n        EventBus.RELOADPROPERTIES,\r\n        EventBus.ELEMENTMOUSEDOWN,\r\n        EventBus.ELEMENTMOUSEUP,\r\n        EventBus.ELEMENTMOUSELEAVE,\r\n        EventBus.ELEMENTMOUSEMOVE,\r\n        EventBus.ELEMENTMOUSEWHEEL,\r\n        EventBus.ELEMENTCLICK,\r\n        EventBus.ELEMENTDRAG,\r\n        EventBus.ELEMENTDBLCLICK,\r\n        EventBus.ELEMENTDRAGOVER,\r\n        EventBus.ELEMENTDROP,\r\n        EventBus.ELEMENTDRAGLEAVE,\r\n    ];\r\n\r\n    private static handlers = {};\r\n\r\n    private static $activeHandler: string = '';\r\n\r\n    public static setActiveHandler(handler: string): void {\r\n        this.$activeHandler = handler;\r\n    }\r\n\r\n    public static isHandlerActiveOrFree(handler: string, notEmpty?: boolean): boolean {\r\n        if (notEmpty) {\r\n            return this.$activeHandler === handler;\r\n        }\r\n        return this.$activeHandler === handler || this.$activeHandler === '' || this.$activeHandler === undefined;\r\n    }\r\n\r\n    public static isAnyHandlerActive(): boolean {\r\n        return !(this.$activeHandler === '' || this.$activeHandler === undefined);\r\n    }\r\n\r\n    public static releaseActiveHandler(): void {\r\n        this.$activeHandler = '';\r\n    }\r\n\r\n    public static getActiveHandler(): string {\r\n        return this.$activeHandler;\r\n    }\r\n\r\n    static register(control: Control, view: Element) {\r\n        let events: string[];\r\n        if (typeof control['getEvents'] === 'function') {\r\n            events = control['getEvents']();\r\n        }\r\n\r\n        if (!events || !view) {\r\n            return;\r\n        }\r\n        for (let event of events) {\r\n            this.registerEvent(view, event, control);\r\n        }\r\n    }\r\n\r\n    static registerEvent(view: Element, event: string, control?: any) {\r\n        const pos: number = event.indexOf(':');\r\n        if (pos > 0) {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        } else {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        }\r\n    }\r\n\r\n    public static publish(element: DiagramElement, evt: Event) {\r\n        let handlers = EventBus.handlers[evt.type];\r\n        if (handlers) {\r\n            for (let handler of handlers) {\r\n                handler.handle(evt, element);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static subscribe(handler: EventHandler, ...eventTypes: string[]) {\r\n        for (let event of eventTypes) {\r\n            let handlers = EventBus.handlers[event];\r\n            if (handlers === null || handlers === undefined) {\r\n                handlers = [];\r\n                EventBus.handlers[event] = handlers;\r\n            }\r\n            handlers.push(handler);\r\n        }\r\n    }\r\n}\r\n","import SimpleEvent from './Event';\r\n\r\nexport default class EventListener {\r\n    private $onUpdate: Function;\r\n\r\n    get onUpdate(): Function {\r\n        return this.$onUpdate;\r\n    }\r\n\r\n    set onUpdate(value: Function) {\r\n        this.$onUpdate = value;\r\n    }\r\n\r\n    update(event: SimpleEvent) {\r\n        this.$onUpdate(event);\r\n    }\r\n}\r\n","// ################################## jsEPS ####################################################\r\nimport {SVGConverter} from './SVGConverter';\r\n\r\nexport class JSEPS {\r\n    private max: number;\r\n    private min: number;\r\n    private inverting: boolean;\r\n    private output: string[];\r\n    private font: number;\r\n\r\n    constructor(options: any) {\r\n        this.max = 0;\r\n        this.min = 999;\r\n        let hasInverting = typeof (options.inverting);\r\n        this.inverting = (options && hasInverting !== 'undefined' ? options.inverting : true);\r\n        this.output = ['%!PS-Adobe-3.0 EPSF-3.0', '1 setlinewidth'];\r\n        this.out('/FSD {findfont exch scalefont def} bind def % In the document prolog: define');\r\n        this.out('/SMS {setfont moveto show} bind def % some useful procedures');\r\n        this.out('/MS {moveto show} bind def');\r\n        this.out('/F1  10  /Helvetica  FSD % At the start of the script: set up');\r\n        this.font = 1;\r\n    }\r\n\r\n    public out(value: string) {this.output.push(value); }\r\n    public rect(x: number, y: number, width: number, height: number, style: string) {\r\n        y = y + (this.inverting ? height : 0);\r\n        if (style && style.indexOf('fill:url(#classelement);') >= 0) {\r\n            this.out('gsave 0.93 0.93 0.93 setrgbcolor newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectfill grestore');\r\n        } else {\r\n            this.out('newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectstroke');\r\n        }\r\n    }\r\n    public setFillColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public y(value: number) {this.max = Math.max(this.max, value); this.min = Math.min(this.min, value); return this.inverting ? '%y(' + value + ')' : value; }\r\n    public getType(): string {\r\n        return 'application/postscript';\r\n    }\r\n\r\n    public getData(): string {\r\n        let t, end, url, text, typ = 'application/postscript', a = document.createElement('a'), data = '', pos, i;\r\n        for (i = 0; i < this.output.length; i += 1) {\r\n            text = this.output[i];\r\n            if (this.inverting) {\r\n                while ((pos = text.indexOf('%y')) >= 0) {\r\n                    end = text.indexOf(')', pos);\r\n                    t = this.max - parseInt(text.substring(pos + 3, end), 10);\r\n                    text = text.substring(0, pos) + t + text.substring(end + 1);\r\n                }\r\n            }\r\n            data = data + text + '\\r\\n';\r\n        }\r\n        return data;\r\n    }\r\n\r\n    public setDrawColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public ellipse(cx: number, cy: number, rx: number, ry: number, colorMode: string) {/*FIXME*/}\r\n    public circle(cx: number, cy: number, r: number, colorMode: string) {/*FIXME*/}\r\n    public setTextColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public text(x: number, y: number, text: string) {this.out('(' + text.replace('&lt;', '<').replace('&gt;', '>') + ') ' + x + ' ' + this.y(y) + ' F1 SMS'); }\r\n    public lineto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' lineto'); this.out('stroke'); }\r\n    public moveto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' moveto'); }\r\n    public line(x1: number, y1: number, x2: number, y2: number) {this.out('newpath ' + x1 + ' ' + this.y(y1) + ' moveto ' + x2 + ' ' + this.y(y2) + ' lineto stroke'); }\r\n    public setLineWidth(value: string) {this.out(value + ' setlinewidth'); }\r\n    public setFont(value: string) {this.out('/F' + (this.font += 1) + ' 10 /' + value + ' FSD'); }\r\n}\r\n","import { Graph } from './elements/Graph';\r\n\r\n/*const buttons = {\r\n    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    clazz: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n};\r\n*/\r\nexport default class Palette {\r\n\r\n    private graph: Graph;\r\n    private palette: Element;\r\n    private root: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n        let div = document.createElement('div');\r\n        div.className = 'palette';\r\n        div.id = 'palette';\r\n        this.root = div;\r\n        this.palette = div;\r\n        for (let key in graph.nodeFactory) {\r\n            let element = graph.nodeFactory[key];\r\n            let control = new element();\r\n            let icon = control.getToolBarIcon();\r\n            if (icon) {\r\n                let button = <HTMLButtonElement>document.createElement('button');\r\n                button.className = 'add' + key + 'Btn';\r\n                button.innerHTML = icon.outerHTML;\r\n                button.onclick = e => {\r\n                    let nextFreePosition = this.graph.getNextFreePosition();\r\n                    // let node = this.graph.addElementWithValues(graph.nodeFactory[key], {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    let node = this.graph.addElementWithValues(key, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    this.graph.drawElement(node);\r\n                };\r\n                this.palette.appendChild(button);\r\n            }\r\n        }\r\n        // this.graph.nodeFactory\r\n//        this.addButtons();\r\n    }\r\n\r\n    public show() {\r\n        document.body.appendChild(this.root);\r\n    }\r\n\r\n    private addButtons() {\r\n        /*for (let btn in buttons) {\r\n            let button = <HTMLButtonElement>document.createElement('button');\r\n            button.className = 'add' + btn + 'Btn';\r\n            button.innerHTML = buttons[btn];\r\n            button.onclick = e => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let node = this.graph.addElementWithValues(btn, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                this.graph.drawElement(node);\r\n            };\r\n            this.palette.appendChild(button);\r\n        }*/\r\n    }\r\n}\r\n","import {Graph} from './elements/Graph';\r\nimport * as edges from './elements/edges';\r\nimport {EventBus, EventHandler} from './EventBus';\r\nimport {DiagramElement} from './elements/BaseElements';\r\nimport {Util} from './util';\r\n\r\nexport class PanelGroup implements EventHandler {\r\n    private graph: Graph;\r\n    private selectedElement: DiagramElement;\r\n    private clearPanel: Panel;\r\n    private generatePanel: Panel;\r\n    private propertiesMasterPanel: HTMLDivElement;\r\n    private propertiesContent: HTMLDivElement;\r\n    private propHeaderLabel: HTMLDivElement;\r\n    private propHeaderButton: HTMLButtonElement;\r\n    private selectedPanel: Panel;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.clearPanel = new ClearPanel(this);\r\n        this.generatePanel = new GeneratePanel(this);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        this.handleOpenProperties(event, element);\r\n\r\n        if (event.type === EventBus.RELOADPROPERTIES\r\n            && this.selectedElement && element.id === this.selectedElement.id) {\r\n            this.handleEvent(event, element);\r\n        }\r\n\r\n        // the same element was clicked. do nothing\r\n        if (this.selectedElement && this.selectedElement.id === element.id) {\r\n            return true;\r\n        }\r\n        if (element.id === 'RootElement') {\r\n            this.setActivePanel(this.clearPanel);\r\n        }\r\n        if (element.id === 'GenerateProp') {\r\n            this.setActivePanel(this.generatePanel);\r\n        }\r\n        this.selectedElement = element;\r\n\r\n        return true;\r\n    }\r\n\r\n    public getGraph(): Graph {\r\n        return this.graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(PanelGroup.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(PanelGroup.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n     public handleEvent(event: any, element: any) {\r\n        // DO NOTHING\r\n    }\r\n\r\n    public show() {\r\n        // main div to display any properties, class, edge, etc.\r\n        this.propertiesMasterPanel = document.createElement('div');\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n\r\n        this.propertiesContent = document.createElement('div');\r\n        this.propertiesContent.className = 'properties-hidden';\r\n\r\n        this.propHeaderLabel = document.createElement('div');\r\n        this.propHeaderLabel.style.display = 'inherit';\r\n        this.propHeaderLabel.style.cursor = 'pointer';\r\n        this.propHeaderLabel.onclick = e => this.toogleProperties(e);\r\n\r\n        // button to display and hide the properties of e.g. a class\r\n        this.propHeaderButton = document.createElement('button');\r\n        this.propHeaderButton.className = 'btnHideProp';\r\n        this.propHeaderButton.style.cssFloat = 'right';\r\n        this.propHeaderButton.onclick = e => this.toogleProperties(e);\r\n\r\n        let propertiesHeader = document.createElement('div');\r\n        propertiesHeader.style.display = 'inline';\r\n        propertiesHeader.appendChild(this.propHeaderLabel);\r\n        propertiesHeader.appendChild(this.propHeaderButton);\r\n\r\n        this.propertiesMasterPanel.appendChild(propertiesHeader);\r\n        this.propertiesMasterPanel.appendChild(this.propertiesContent);\r\n        document.body.appendChild(this.propertiesMasterPanel);\r\n\r\n        this.setActivePanel(this.clearPanel);\r\n    }\r\n\r\n    public setActivePanel(panel: Panel) {\r\n        this.selectedPanel = panel;\r\n        this.propHeaderLabel.innerHTML = panel.getHeaderText();\r\n        if (this.propertiesContent) {\r\n            while (this.propertiesContent.hasChildNodes()) {\r\n                this.propertiesContent.removeChild(this.propertiesContent.childNodes[0]);\r\n            }\r\n        }\r\n        panel.show();\r\n\r\n        panel.showFirstTab();\r\n        if (panel !== this.clearPanel) {\r\n            this.showProperties(null);\r\n        } else {\r\n            this.hideProperties(null);\r\n        }\r\n    }\r\n\r\n    public getProperiesContent(): HTMLDivElement {\r\n        return this.propertiesContent;\r\n    }\r\n\r\n    private handleOpenProperties(event: Event, element: DiagramElement) {\r\n        if (event.type === 'dblclick') {\r\n            this.showProperties(event);\r\n        }\r\n    }\r\n\r\n    private showProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Show\r\n        this.propHeaderButton.innerHTML = '&#8897;';\r\n        this.propHeaderButton.title = 'Hide properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel';\r\n        this.propertiesContent.className = 'properties';\r\n    }\r\n\r\n    private toogleProperties(evt: Event): void {\r\n        if (this.propHeaderButton.title === 'Show properties') {\r\n            this.showProperties(evt);\r\n        } else {\r\n            this.hideProperties(evt);\r\n        }\r\n    }\r\n\r\n    private hideProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Hide\r\n        this.propHeaderButton.innerHTML = '&#8896;';\r\n        this.propHeaderButton.title = 'Show properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n        this.propertiesContent.className = 'properties-hidden';\r\n    }\r\n}\r\n\r\nexport abstract class Panel {\r\n    protected divPropertiesPanel: HTMLDivElement;\r\n    protected divPropertiesTabbedPanel: HTMLDivElement;\r\n    protected element: any;\r\n    protected group: PanelGroup;\r\n    private panelItem: PanelItem[] = [];\r\n\r\n    constructor(group: PanelGroup, element: any) {\r\n        // get the properties content panel\r\n        this.divPropertiesPanel = document.createElement('div');\r\n        this.element = element;\r\n        this.group = group;\r\n\r\n        this.divPropertiesTabbedPanel = document.createElement('div');\r\n        this.divPropertiesTabbedPanel.className = 'tabbedpane';\r\n\r\n        // add tabbed panel\r\n        this.divPropertiesPanel.appendChild(this.divPropertiesTabbedPanel);\r\n    }\r\n\r\n    public show(): void {\r\n        let propertiesContent: HTMLDivElement = this.group.getProperiesContent();\r\n        if (this.panelItem.length > 1) {\r\n            propertiesContent.appendChild(this.getPropertiesTabbedPanel());\r\n        }\r\n\r\n        propertiesContent.appendChild(this.getPropertiesPanel());\r\n    }\r\n\r\n    public getPropertiesTabbedPanel(): HTMLDivElement {\r\n        return this.divPropertiesTabbedPanel;\r\n    }\r\n\r\n    public getPropertiesPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return '';\r\n    }\r\n\r\n    public showFirstTab(): void {\r\n        if (this.panelItem.length > 0) {\r\n            this.openTab(this.panelItem[0]);\r\n        }\r\n    }\r\n\r\n    protected createTabElement(tabText: string, tabValue: string, item: PanelItem): PanelItem {\r\n        let tabElementBtn = document.createElement('button');\r\n        tabElementBtn.className = 'tablinks';\r\n        tabElementBtn.innerText = tabText;\r\n        tabElementBtn.value = tabValue;\r\n\r\n        if (item === null) {\r\n            item = new PanelItem(this);\r\n        }\r\n        item.withButton(tabElementBtn);\r\n\r\n        tabElementBtn.onclick = () => this.openTab(item);\r\n        this.divPropertiesTabbedPanel.appendChild(tabElementBtn);\r\n        this.panelItem.push(item);\r\n        return item;\r\n    }\r\n\r\n    protected openTab(panelItem: PanelItem): void {\r\n        for (let key in this.panelItem) {\r\n            let child = this.panelItem[key];\r\n            if (child !== panelItem) {\r\n                 child.deactive();\r\n            }\r\n        }\r\n        panelItem.active();\r\n        // hide other tabcontent\r\n        if (this.divPropertiesPanel) {\r\n            while (this.divPropertiesPanel.hasChildNodes()) {\r\n                this.divPropertiesPanel.removeChild(this.divPropertiesPanel.childNodes[0]);\r\n            }\r\n        }\r\n\r\n        // ADD\r\n        if (panelItem.getContent()) {\r\n            this.divPropertiesPanel.appendChild(panelItem.getContent());\r\n        }\r\n    }\r\n}\r\n\r\nexport class GeneratePanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n\r\n        let item: PanelItem = this.createTabElement('General', 'General', null);\r\n\r\n        // Workspace and generate code stuff\r\n        let inputGenerateWorkspace: HTMLInputElement =  <HTMLInputElement> Util.createHTML({tag: 'input', id: 'workspace', type: 'text', placeholder: 'Type your Folder for generated code...', value: 'src/main/java', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Folder:', inputGenerateWorkspace);\r\n\r\n        let inputGeneratePackage: HTMLInputElement = <HTMLInputElement> Util.createHTML({tag: 'input', id: 'package', type: 'text', placeholder: 'Type your workspace for generated code...', value: '', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Package:', inputGeneratePackage);\r\n\r\n        let options = document.createElement('div');\r\n        options.style.textAlign = 'center';\r\n        options.style.margin = '3';\r\n        options.style.padding = '5';\r\n\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(options);\r\n\r\n        options.style.borderStyle = 'groove';\r\n        options.style.borderRadius = '10px';\r\n\r\n        let btnGenerate = document.createElement('button');\r\n        btnGenerate.textContent = 'Generate';\r\n        btnGenerate.title = 'Generate code into your workspace';\r\n        btnGenerate.className = 'OptionElement';\r\n\r\n        let that = this;\r\n        btnGenerate.onclick = () => {\r\n            let workspace = inputGeneratePackage.value;\r\n            if (workspace.length === 0) {\r\n                alert('No workspace set.\\nEnter first your workspace');\r\n                inputGeneratePackage.focus();\r\n                return;\r\n            }\r\n            that.group.getGraph().generate(workspace, inputGenerateWorkspace.value);\r\n        };\r\n        options.appendChild(btnGenerate);\r\n        options.appendChild(document.createElement('hr'));\r\n        options.appendChild(document.createElement('br'));\r\n\r\n        let btnAutoLayout = Util.createHTML({tag: 'button', className: 'OptionElement', value: 'Auto Layout', style: {marginRight: '10px'}, onclick: () => {\r\n                that.group.getGraph().layout();\r\n            }});\r\n\r\n        options.appendChild(btnAutoLayout);\r\n\r\n        // delete all nodes\r\n        let btnDeleteAll = document.createElement('button');\r\n        btnDeleteAll.className = 'OptionElement';\r\n        btnDeleteAll.textContent = 'Delete All';\r\n        btnDeleteAll.title = 'Delete all nodes from diagram';\r\n\r\n        btnDeleteAll.onclick = () => {\r\n            let confirmDelete = confirm('All classes will be deleted!');\r\n            if (!confirmDelete) {\r\n                return;\r\n            }\r\n            that.group.getGraph().$graphModel.removeAllElements();\r\n        };\r\n        btnDeleteAll.style.marginRight = '10px';\r\n        options.appendChild(btnDeleteAll);\r\n\r\n        // export stuff\r\n        let exportTypes: string[] = ['Export', 'HTML', 'JSON', 'PDF', 'PNG', 'SVG'];\r\n        let selectExport = document.createElement('select');\r\n\r\n        exportTypes.forEach(type => {\r\n            if (!(!window['jsPDF'] && type === 'PDF')) {\r\n                let option = document.createElement('option');\r\n                option.value = type;\r\n                option.textContent = type;\r\n                selectExport.appendChild(option);\r\n            }\r\n        });\r\n\r\n        selectExport.onchange = (evt) => {\r\n            let selectedExportType = selectExport.options[selectExport.selectedIndex].value;\r\n            selectExport.selectedIndex = 0;\r\n            that.group.getGraph().saveAs(selectedExportType);\r\n        };\r\n        selectExport.className = 'OptionElement';\r\n        options.appendChild(selectExport);\r\n        options.appendChild(document.createElement('br'));\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Properties';\r\n    }\r\n\r\n}\r\n\r\nexport class ClearPanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Select any element to see its properties';\r\n    }\r\n}\r\n\r\nexport class PanelItem {\r\n    protected panel: Panel;\r\n    protected label: string;\r\n    protected button: HTMLButtonElement;\r\n    protected content: HTMLDivElement = <HTMLDivElement>Util.create({tag: 'div', className: 'tabContent'});\r\n\r\n    constructor(panel: Panel, label?: string) {\r\n        this.panel = panel;\r\n        this.label = label;\r\n    }\r\n\r\n    public active(): void {\r\n        if (this.getButton()) {\r\n            this.getButton().className += ' active';\r\n        }\r\n    }\r\n\r\n    public deactive(): void {\r\n        if (this.getButton()) {\r\n            Util.removeClass(this.getButton(), 'active');\r\n        }\r\n    }\r\n\r\n    public withButton(button: HTMLButtonElement): PanelItem {\r\n        this.button = button;\r\n        return this;\r\n    }\r\n\r\n    public withContent(element: HTMLElement): PanelItem {\r\n        this.content.appendChild(element);\r\n        return this;\r\n    }\r\n\r\n    public withInput(labelText: string, element: HTMLElement): PanelItem {\r\n        let group: HTMLDivElement = <HTMLDivElement> Util.createHTML({tag: 'div'});\r\n        let label = Util.createHTML({tag: 'label', for: element.id, value: labelText});\r\n        group.appendChild(label);\r\n        group.appendChild(element);\r\n\r\n        this.content.appendChild(group);\r\n        return this;\r\n    }\r\n\r\n    public getButton(): HTMLButtonElement {\r\n        return this.button;\r\n    }\r\n\r\n    public getContent(): HTMLDivElement {\r\n        return this.content;\r\n    }\r\n\r\n   public getHeader(): string {\r\n        return this.label;\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\nimport Data from './Data';\r\n\r\nexport class PropertyBinder implements PropertyChangeSupport {\r\n    private propertyClass1: string;\r\n    private propertyClass2: string;\r\n    private data1: Data;\r\n    private data2: Data;\r\n    // works like a lock\r\n    private applyingChange: boolean = false;\r\n\r\n    constructor(data1: Data, data2: Data, propertyClass1: string, propertyClass2: string) {\r\n        this.data1 = data1;\r\n        this.data2 = data2;\r\n        this.propertyClass1 = propertyClass1;\r\n        this.propertyClass2 = propertyClass2;\r\n    }\r\n    static bind(data1: Data, data2: Data, property1: string, property2: string) {\r\n        if (!data1 || !data2 || !property1) {\r\n            console.error('NullValue!!');\r\n            return null;\r\n        }\r\n        const propertyBinder = new PropertyBinder(data1, data2, property1, property2);\r\n        propertyBinder.bind();\r\n        return propertyBinder;\r\n    }\r\n\r\n    propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        if (!this.applyingChange) {\r\n            this.applyingChange = true;\r\n            if (entity === this.data1) {\r\n                // fire to data2\r\n                this.data2.setValue(this.propertyClass2, newValue);\r\n            } else if (entity === this.data2) {\r\n                // fire to data1\r\n                this.data1.setValue(this.propertyClass1, newValue);\r\n            }\r\n            this.applyingChange = false;\r\n        }\r\n    }\r\n\r\n    protected bind() {\r\n        // public addListener(control: Control, property?: string)\r\n        // todo: set value immediately\r\n        this.data1.setValue(this.propertyClass1, this.data2.getValue(this.propertyClass2));\r\n\r\n        this.data1.addListener(this, this.propertyClass1);\r\n        this.data2.addListener(this, this.propertyClass2);\r\n    }\r\n\r\n    protected unbind() {\r\n        // public addListener(control: Control, property?: string)\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n    }\r\n}\r\n","// ################################## RGBColor ####################################################\r\nexport class RGBColor {\r\n    public  ok: boolean;\r\n    public r: number;\r\n    public g: number;\r\n    public b: number;\r\n\r\n    constructor(value: string) {\r\n        this.ok = false;\r\n        if (value === 'none') {\r\n            return;\r\n        }\r\n        let computedColor, div = document.createElement('div');\r\n        div.style.backgroundColor = value;\r\n        document.body.appendChild(div);\r\n        computedColor = window.getComputedStyle(div).backgroundColor;\r\n        // cleanup temporary div.\r\n        document.body.removeChild(div);\r\n        this.convert(computedColor);\r\n    }\r\n    public convert(value: any) {\r\n        let values, regex = /rgb *\\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\\)/;\r\n        values = regex.exec(value);\r\n        this.r = parseInt(values[1], 10);\r\n        this.g = parseInt(values[2], 10);\r\n        this.b = parseInt(values[3], 10);\r\n        this.ok = true;\r\n    }\r\n\r\n    public toRGB(): string {return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; }\r\n    public toHex(): string {\r\n        return '#' + (this.r + 0x10000).toString(16).substring(3).toUpperCase() + (this.g + 0x10000).toString(16).substring(3).toUpperCase() + (this.b + 0x10000).toString(16).substring(3).toUpperCase();\r\n    }\r\n}\r\n","/*\r\n NetworkParser\r\n Copyright (c) 2011 - 2014, Stefan Lindel\r\n All rights reserved.\r\n\r\n Licensed under the EUPL, Version 1.1 or (as soon they\r\n will be approved by the European Commission) subsequent\r\n versions of the EUPL (the \"Licence\");\r\n You may not use this work except in compliance with the Licence.\r\n You may obtain a copy of the Licence at:\r\n\r\n http://ec.europa.eu/idabc/eupl5\r\n\r\n Unless required by applicable law or agreed to in\r\n writing, software distributed under the Licence is\r\n distributed on an \"AS IS\" basis,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\r\n express or implied.\r\n See the Licence for the specific language governing\r\n permissions and limitations under the Licence.\r\n*/\r\nimport {RGBColor} from './RGBColor';\r\nimport {JSEPS} from \"./JSEPS\";\r\n\r\nconst epsSvgAttr = {\r\n    // allowed attributes. all others are removed from the preview.\r\n    g: ['stroke', 'fill', 'stroke-width'],\r\n    line: ['x1', 'y1', 'x2', 'y2', 'stroke', 'stroke-width'],\r\n    rect: ['x', 'y', 'width', 'height', 'stroke', 'fill', 'stroke-width'],\r\n    ellipse: ['cx', 'cy', 'rx', 'ry', 'stroke', 'fill', 'stroke-width'],\r\n    circle: ['cx', 'cy', 'r', 'stroke', 'fill', 'stroke-width'],\r\n    text: ['x', 'y', 'font-size', 'font-family', 'text-anchor', 'font-weight', 'font-style', 'fill'],\r\n    path: ['']\r\n};\r\nexport class SVGConverter {\r\n    private k: number;\r\n    private remove: boolean;\r\n    private target: any;\r\n\r\n    constructor(element: any, target: any, options: any) {\r\n        this.k = 1.0;\r\n        let hasScale = typeof (options.scale), hasRemoveInvalid = typeof (options.removeInvalid);\r\n        this.k = (options && hasScale !== 'undefined' ? options.scale : 1.0);\r\n        this.remove = (options && hasRemoveInvalid !== 'undefined' ? options.removeInvalid : false);\r\n        this.target = target;\r\n        this.parse(element);\r\n    }\r\n\r\n    public parse(element: any) {\r\n        let el, i, n, colorMode, hasFillColor, fillRGB, fillColor, strokeColor, strokeRGB, fontType, pdfFontSize, x, y,\r\n            box, xOffset;\r\n        if (!element) {\r\n            return;\r\n        }\r\n        if (typeof element === 'string') {\r\n            el = document.createElement('div');\r\n            el.innerHTML = element;\r\n            element = el.childNodes[0];\r\n        }\r\n        for (i = 0; i < element.children.length; i += 1) {\r\n            n = element.children[i];\r\n            colorMode = null;\r\n            hasFillColor = false;\r\n            if ('g,line,rect,ellipse,circle,text'.indexOf(n.tagName) >= 0) {\r\n                fillColor = n.getAttribute('fill');\r\n                if (fillColor) {\r\n                    fillRGB = new RGBColor(fillColor);\r\n                    if (fillRGB.ok) {\r\n                        hasFillColor = true;\r\n                        colorMode = 'F';\r\n                    }\r\n                }\r\n            }\r\n            if ('g,line,rect,ellipse,circle'.indexOf(n.tagName) >= 0) {\r\n                if (hasFillColor) {\r\n                    this.target.setFillColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                }\r\n                strokeColor = n.getAttribute('stroke');\r\n                if (n.hasAttribute('stroke-width')) {\r\n                    this.target.setLineWidth(this.attr(n, 'stroke-width'));\r\n                }\r\n                if (strokeColor) {\r\n                    strokeRGB = new RGBColor(strokeColor);\r\n                    if (strokeRGB.ok) {\r\n                        this.target.setDrawColor(strokeRGB.r, strokeRGB.g, strokeRGB.b);\r\n                        if (colorMode === 'F') {\r\n                            colorMode = 'FD';\r\n                        } else if (!hasFillColor) {\r\n                            colorMode = 'S';\r\n                        }\r\n                    } else {\r\n                        colorMode = null;\r\n                    }\r\n                }\r\n            }\r\n            // console.log(\"write \"+n.tagName);\r\n            switch (n.tagName.toLowerCase()) {\r\n                case 'svg':\r\n                case 'a':\r\n                case 'g':\r\n                    this.parse(n);\r\n                    break;\r\n                case 'line':\r\n                    this.target.line(this.attr(n, 'x1'), this.attr(n, 'y1'), this.attr(n, 'x2'), this.attr(n, 'y2'));\r\n                    break;\r\n                case 'rect':\r\n                    this.target.rect(this.attr(n, 'x'), this.attr(n, 'y'), this.attr(n, 'width'), this.attr(n, 'height'), n.getAttribute('style'));\r\n                    break;\r\n                case 'ellipse':\r\n                    this.target.ellipse(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'rx'), this.attr(n, 'ry'), colorMode);\r\n                    break;\r\n                case 'circle':\r\n                    this.target.circle(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'r'), colorMode);\r\n                    break;\r\n                case 'text':\r\n                    if (n.hasAttribute('font-family')) {\r\n                        switch (n.getAttribute('font-family').toLowerCase()) {\r\n                            case 'serif':\r\n                                this.target.setFont('times');\r\n                                break;\r\n                            case 'monospace':\r\n                                this.target.setFont('courier');\r\n                                break;\r\n                            default:\r\n                                n.getAttribute('font-family', 'sans-serif');\r\n                                this.target.setFont('Helvetica');\r\n                        }\r\n                    }\r\n                    if (hasFillColor) {\r\n                        this.target.setTextColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                    }\r\n                    if (this.target instanceof JSEPS) {\r\n                        this.target.text(this.attr(n, 'x'), this.attr(n, 'y'), n.innerHTML);\r\n                        break;\r\n                    }\r\n                    fontType = '';\r\n                    if (n.hasAttribute('font-weight')) {\r\n                        if (n.getAttribute('font-weight') === 'bold') {\r\n                            fontType = 'bold';\r\n                        }\r\n                    }\r\n                    if (n.hasAttribute('font-style')) {\r\n                        if (n.getAttribute('font-style') === 'italic') {\r\n                            fontType += 'italic';\r\n                        }\r\n                    }\r\n                    this.target.setFontType(fontType);\r\n                    pdfFontSize = 16;\r\n                    if (n.hasAttribute('font-size')) {\r\n                        pdfFontSize = parseInt(n.getAttribute('font-size'), 10);\r\n                    }\r\n                    box = n.getBBox();\r\n                    // FIXME: use more accurate positioning!!\r\n                    x = this.attr(n, 'x');\r\n                    y = this.attr(n, 'y');\r\n                    xOffset = 0;\r\n                    if (n.hasAttribute('text-anchor')) {\r\n                        switch (n.getAttribute('text-anchor')) {\r\n                            case 'end':\r\n                                xOffset = box.width;\r\n                                break;\r\n                            case 'middle':\r\n                                xOffset = box.width / 2;\r\n                                break;\r\n                            case 'start':\r\n                                break;\r\n                            case 'default':\r\n                                n.getAttribute('text-anchor', 'start');\r\n                                break;\r\n                        }\r\n                        x = x - (xOffset * this.k);\r\n                    }\r\n                    this.target.setFontSize(pdfFontSize).text(x, y, n.innerHTML);\r\n                    break;\r\n                default:\r\n                    if (this.remove) {\r\n                        console.log('cant translate to target:', n);\r\n                        element.removeChild(n);\r\n                        i -= 1;\r\n                    }\r\n            }\r\n        }\r\n    }\r\n\r\n    public attr(node: any, name: string) {\r\n        return this.k * parseInt(node.getAttribute(name), 10);\r\n    }\r\n}\r\n","import {Control} from './Control';\r\n\r\nexport class ScrumBoard extends Control {\r\n    public static cards = [0, 0.5, 1, 2, 3, 5, 8, 13, 20, 40, 100, '?', 'Coffee'];\r\n    private $selected: HTMLDivElement;\r\n    private $board: HTMLDivElement;\r\n\r\n    constructor() {\r\n        super();\r\n        this.redraw();\r\n    }\r\n\r\n    public redraw(): void {\r\n        if (this.$board) {\r\n            while (this.$board.children.length > 0 ) {\r\n                this.$board.removeChild(this.$board.children[0]);\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('div');\r\n            this.$selected = document.createElement('div');\r\n            this.$board = document.createElement('div');\r\n            this.$view.appendChild(this.$board);\r\n            this.$view.appendChild(this.$selected);\r\n        }\r\n        this.$view.className = 'ScrumBoard';\r\n        for ( let i = 0; i < ScrumBoard.cards.length; i++) {\r\n            let card = document.createElement('div');\r\n            card.className = 'ScrumCard';\r\n            card.innerHTML = <string>ScrumBoard.cards[i];\r\n            card['pokervalue'] = <string>ScrumBoard.cards[i];\r\n            card.onclick = e => {\r\n                this.onClick(<HTMLDivElement>e.target);\r\n            };\r\n            this.$board.appendChild(card);\r\n        }\r\n    }\r\n\r\n    public getSVG() {\r\n        this.redraw();\r\n        return this.$view;\r\n    }\r\n\r\n    public onClick(target: HTMLDivElement): void {\r\n        console.log(target['pokervalue']);\r\n\r\n        while (this.$selected.children.length > 0 ) {\r\n            this.$selected.removeChild(this.$selected.children[0]);\r\n        }\r\n        let card = document.createElement('div');\r\n        card.className = 'ScrumCard';\r\n        card['pokervalue'] = target['pokervalue'];\r\n        card.onclick = e => {\r\n            this.onShow(<HTMLDivElement>e.target);\r\n        };\r\n        this.$selected.appendChild(card);\r\n        this.$board['style']['display'] = 'none';\r\n    }\r\n\r\n    public onShow(target: HTMLDivElement): void {\r\n        target.innerHTML = target['pokervalue'];\r\n    }\r\n}\r\n","import {Graph} from './main';\r\nimport {SymbolLibary} from './elements/nodes/Symbol';\r\nimport {EventBus} from './EventBus';\r\n\r\nexport class Toolbar {\r\n\r\n    private graph: Graph;\r\n    private mainDiv: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public show(): void {\r\n        if (this.mainDiv) {\r\n            return;\r\n        }\r\n\r\n        this.mainDiv = document.createElement('div');\r\n        this.mainDiv.className = 'toolbar';\r\n\r\n        let h1Logo = document.createElement('h1');\r\n        h1Logo.className = 'logo';\r\n        h1Logo.textContent = 'DiagramJS';\r\n\r\n        let node = {type: 'Hamburger', property: 'HTML', width: 24, height: 24, id: 'GenerateProp'};\r\n        let hamburger = SymbolLibary.draw( node);\r\n        EventBus.registerEvent(hamburger, 'click', node);\r\n        this.mainDiv.appendChild(hamburger);\r\n\r\n        this.mainDiv.appendChild(h1Logo);\r\n        document.body.appendChild(this.mainDiv);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 06.03.2017.\r\n */\r\nimport Data from './Data';\r\n\r\n// export default class Data {\r\n//    public values = {};\r\n//    id: string;\r\n//    $listener: Control[] = [];\r\n//    property: string;\r\nexport namespace UML {\r\n    export class Clazz extends Data {\r\n        public static NAME: string = 'name';\r\n        public static ATTRIBUTES: string = 'attributes';\r\n        public static METHODS: string = 'methods';\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Clazz';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n\r\n        public getAttributes() {\r\n            return this.prop[Clazz.ATTRIBUTES];\r\n        }\r\n\r\n        public addToAttributes(newValue: string) {\r\n            this.addTo(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n\r\n        public removeFromAttributes(newValue: string) {\r\n            this.removeFrom(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n    }\r\n\r\n    export class Attribute extends Data {\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Attribute';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n    }\r\n\r\n    export class Methods extends Data {\r\n\r\n    }\r\n}\r\n\r\nwindow['UML'] = UML;\r\n","import {Control} from './Control';\r\n\r\nexport class VirtualKeyBoard extends Control {\r\n    constructor(data: any) {\r\n        super();\r\n        if (!data) {\r\n            data = this.getDefault();\r\n        }\r\n        let board = document.createElement('div');\r\n        this.$viewData = data;\r\n\r\n        for (let type in data) {\r\n            if (type === 'normal') {\r\n                for (let line in data[type]) {\r\n                    let lineBoard = document.createElement('div');\r\n                    lineBoard.className = 'vkLine';\r\n                    for (let key in data[type][line]) {\r\n                        let btn: HTMLButtonElement = document.createElement('button');\r\n                        let keyTag = data[type][line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                        btn.ontouchend = () => {this.action(btn); };\r\n                        btn.onclick = () => {this.action(btn); };\r\n                        lineBoard.appendChild(btn);\r\n                    }\r\n                    board.appendChild(lineBoard);\r\n                }\r\n            }\r\n        }\r\n        this.$view = board;\r\n    }\r\n\r\n    public action(btn: HTMLButtonElement) {\r\n        if (btn['key'] === '{Shift}') {\r\n            if ( btn.className === 'vkbuttonAction') {\r\n                let keys = this.$viewData['normal'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                    }\r\n                }\r\n            } else if ( btn.className === 'vkbutton') {\r\n                let keys = this.$viewData['shift'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbuttonAction');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        alert(btn);\r\n    }\r\n\r\n    public getDefault(): any {\r\n        let format = {\r\n            normal: [\r\n                ['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '?', '´', '{Bksp}'],\r\n                ['{Tab}', 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+'],\r\n                ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '#', '{enter}'],\r\n                ['{Shift}', '<', 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n// '{left}', '{up}', '{down}','{right}', '{Cancel}']\r\n            ],\r\n            shift: [\r\n                ['°', '!', '\"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '`', '{Bksp}'],\r\n                ['{Tab}', 'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', 'O', 'P', 'Ü', '*'],\r\n                ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', '\\'', '{enter}'],\r\n                ['{Shift}', '>', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n            ]\r\n        };\r\n        return format;\r\n    }\r\n\r\n    public getBoard() {\r\n        return this.$view;\r\n    }\r\n\r\n    private setButtonValue(keyTag: string, btn: HTMLButtonElement, shiftClass: string) {\r\n        btn.className = 'vkbutton';\r\n        btn['key'] = keyTag;\r\n        btn['type'] = 'normal';\r\n        if (keyTag.substring(0, 1) === '{') {\r\n            if (keyTag === '{Bksp}') {\r\n                btn.innerHTML = 'Bksp';\r\n            } else if (keyTag === '{Tab}') {\r\n                btn.innerHTML = '&#8677; Tab';\r\n            } else if (keyTag === '{enter}') {\r\n                btn.innerHTML = 'enter';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Shift}') {\r\n                btn.innerHTML = 'Shift';\r\n                btn.className = shiftClass;\r\n            } else if (keyTag === '{Accept}') {\r\n                btn.innerHTML = 'Accept';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Alt}') {\r\n                btn.innerHTML = 'Alt';\r\n            } else if (keyTag === '{Space}') {\r\n                btn.innerHTML = '&nbsp;';\r\n                btn.className = 'vkbuttonSpace';\r\n            } else if (keyTag === '{left}') {\r\n                btn.innerHTML = '&#8592';\r\n            } else if (keyTag === '{right}') {\r\n                btn.innerHTML = '&#8594;';\r\n            } else if (keyTag === '{up}') {\r\n                btn.innerHTML = '&#8593;';\r\n            } else if (keyTag === '{down}') {\r\n                btn.innerHTML = '&#8595;';\r\n            } else if (keyTag === '{Cancel}') {\r\n                btn.innerHTML = 'Cancel';\r\n                btn.className = 'vkbuttonAction';\r\n            }\r\n        } else {\r\n            btn.innerHTML = keyTag;\r\n        }\r\n    }\r\n}\r\n","import {Adapter} from '../Adapter';\r\n\r\nexport class JavaAdapter extends Adapter {\r\n    constructor() {\r\n        super();\r\n        this.id = 'JavaAdapter';\r\n    }\r\n    update(evt: Object): boolean {\r\n        if (this.isActive()) {\r\n            window['JavaBridge'].executeChange(evt);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public isActive(): boolean {\r\n        return window['JavaBridge'];\r\n    }\r\n}\r\n","export * from './JavaAdapter';\r\n","import { Util } from '../util';\r\nimport { Control } from '../Control';\r\n\r\nexport interface Size {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\ninterface GraphElement {\r\n    getSize(): Point;\r\n\r\n    getPos(): Point;\r\n\r\n    getCenter(): Point;\r\n\r\n    getSVG(): Element;\r\n\r\n    getCanvas(): Element;\r\n\r\n    getEvents(): string[];\r\n\r\n    withPos(x: number, y: number): GraphElement;\r\n\r\n    load(data: any): any;\r\n\r\n    getToolBarIcon(): Element;\r\n\r\n    loadProperties(properties: any): void;\r\n}\r\n\r\nexport abstract class DiagramElement extends Control implements GraphElement {\r\n\r\n    protected $isDraggable: boolean = true;\r\n    protected $labelHeight = 25;\r\n    protected $labelFontSize = 14;\r\n    private $pos: Point = new Point();\r\n    private $size: Point = new Point();\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getPos(): Point {\r\n        return this.$pos;\r\n    }\r\n\r\n    public getSize(): Point {\r\n        return this.$size;\r\n    }\r\n\r\n    public getCenter(): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        return new Point(pos.x + size.x / 2, pos.y + size.y / 2);\r\n    }\r\n\r\n    public getCenterPosition(p: string): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let offset = this['$' + p];\r\n        let center = this.getCenter();\r\n        if (p === Point.DOWN) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y + size.y, Point.DOWN);\r\n        }\r\n        if (p === Point.UP) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y, Point.UP);\r\n        }\r\n        if (p === Point.LEFT) {\r\n            return new Point(pos.x, Math.min(center.y + offset, pos.y + size.y), Point.LEFT);\r\n        }\r\n        if (p === Point.RIGHT) {\r\n            return new Point(pos.x + size.x, Math.min(center.y + offset, pos.y + size.y), Point.RIGHT);\r\n        }\r\n        return new Point();\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getCanvas(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return null;\r\n    }\r\n\r\n    public getAlreadyDisplayingSVG(): Element {\r\n        return document.getElementById(this.id) || this.getSVG();\r\n    }\r\n\r\n    public load(data: any) {\r\n        // Do Nothing\r\n    }\r\n\r\n    public withPos(x: number, y: number): GraphElement {\r\n        if (x && y) {\r\n            this.$pos = new Point(x, y);\r\n        } else {\r\n            if (typeof (x) !== 'undefined' && x !== null) {\r\n                this.$pos.x = x;\r\n            }\r\n            if (typeof (y) !== 'undefined' && y !== null) {\r\n                this.$pos.y = y;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public withSize(width: number, height: number): DiagramElement {\r\n        if (width && height) {\r\n            this.$size = new Point(width, height);\r\n        } else {\r\n            if (typeof (width) !== 'undefined' && width !== null) {\r\n                this.$size.x = width;\r\n            }\r\n            if (typeof (height) !== 'undefined' && height !== null) {\r\n                this.$size.y = height;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        // FIXME if (this.status === 'close') {\r\n        // if (!this.$owner.isClosed()) {\r\n        //        return this;\r\n        //    }\r\n        // }\r\n        return super.getShowed();\r\n    }\r\n\r\n    public loadProperties(properties: any) {\r\n        // DO Nothing\r\n    }\r\n\r\n    protected createShape(attrs: any): Element {\r\n        return Util.createShape(attrs);\r\n    }\r\n}\r\n\r\nexport class Point {\r\n    public static UP: string = 'UP';\r\n    public static LEFT: string = 'LEFT';\r\n    public static RIGHT: string = 'RIGHT';\r\n    public static DOWN: string = 'DOWN';\r\n    x: number = 0;\r\n    y: number = 0;\r\n\r\n    //    pos:string = '';\r\n\r\n    constructor(x?: number, y?: number, pos?: string) {\r\n        this.x = Math.ceil(x || 0);\r\n        this.y = Math.ceil(y || 0);\r\n        if (pos) {\r\n            this['pos'] = pos;\r\n        }\r\n    }\r\n\r\n    public add(pos: Point) {\r\n        this.x += pos.x;\r\n        this.y += pos.y;\r\n        return this;\r\n    }\r\n\r\n    public getPosition(): string {\r\n        if (!this['pos']) {\r\n            return '';\r\n        }\r\n        return this['pos'];\r\n    }\r\n\r\n    public addNum(x: number, y: number) {\r\n        this.x += x;\r\n        this.y += y;\r\n        return this;\r\n    }\r\n\r\n    public sum(pos: Point) {\r\n        let sum = new Point(this.x, this.y);\r\n        sum.add(pos);\r\n        return sum;\r\n    }\r\n\r\n    public center(posA: Point, posB: Point) {\r\n        let count = 0;\r\n        if (posA) {\r\n            this.x += posA.x;\r\n            this.y += posA.y;\r\n            count++;\r\n        }\r\n        if (posB) {\r\n            this.x += posB.x;\r\n            this.y += posB.y;\r\n            count++;\r\n        }\r\n        if (count > 0) {\r\n            this.x = (this.x / count);\r\n            this.y = (this.y / count);\r\n        }\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        return this.x < 1 && this.y < 1;\r\n    }\r\n\r\n    public size(posA: Point, posB: Point) {\r\n        let x1 = 0, x2 = 0, y1 = 0, y2 = 0;\r\n        if (posA) {\r\n            x1 = posA.x;\r\n            y1 = posA.y;\r\n        }\r\n        if (posB) {\r\n            x2 = posB.x;\r\n            y2 = posB.y;\r\n        }\r\n        if (x1 > x2) {\r\n            this.x = x1 - x2;\r\n        } else {\r\n            this.x = x2 - x1;\r\n        }\r\n        if (y1 > y2) {\r\n            this.y = y1 - y2;\r\n        } else {\r\n            this.y = y2 - y1;\r\n        }\r\n    }\r\n}\r\n\r\n// \t\t\t\t######################################################### Line #########################################################\r\nexport class Line extends DiagramElement {\r\n    public static FORMAT = { SOLID: 'SOLID', DOTTED: 'DOTTED', PATH: 'PATH' };\r\n    public source: Point;\r\n    public target: Point;\r\n    public color: string;\r\n    public lineType: string;\r\n    private path: string;\r\n    private angle: Number;\r\n\r\n    constructor(lineType: string) {\r\n        super();\r\n        this.lineType = lineType;\r\n    }\r\n\r\n    public getTyp(): string {\r\n        return 'SVG';\r\n    }\r\n\r\n    public getPos() {\r\n        let pos = new Point();\r\n        pos.center(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public getSize() {\r\n        let pos = new Point();\r\n        pos.size(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public withColor(color: string): Line {\r\n        this.color = color;\r\n        return this;\r\n    }\r\n\r\n    public withSize(x: number, y: number): DiagramElement {\r\n        return this;\r\n    }\r\n\r\n    public withPath(path: Array<Point>, close: boolean, angle?: any): Line {\r\n        let i: number, d: string = 'M' + path[0].x + ' ' + path[0].y;\r\n        this.lineType = Line.FORMAT.PATH; // It is a Path not a Line\r\n        for (i = 1; i < path.length; i += 1) {\r\n            d = d + 'L ' + path[i].x + ' ' + path[i].y;\r\n        }\r\n        if (close) {\r\n            d = d + ' Z';\r\n            this.target = path[0];\r\n        } else {\r\n            this.target = path[path.length - 1];\r\n        }\r\n        this.path = d;\r\n        if (angle instanceof Number) {\r\n            this.angle = angle;\r\n        } else if (angle) {\r\n            // var lineangle, start = path[0], end = path[path.length - 1];\r\n            // lineangle = Math.atan2(end.y - start.y, end.x - start.x);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): SVGGElement {\r\n        if (this.lineType === 'PATH') {\r\n            return <SVGGElement>Util.create({\r\n                tag: 'path',\r\n                'd': this.path,\r\n                'fill': this.color,\r\n                stroke: '#000',\r\n                'stroke-width': '1px'\r\n            });\r\n        }\r\n        let line: SVGGElement = <SVGGElement>Util.create({\r\n            tag: 'line',\r\n            'x1': this.source.x,\r\n            'y1': this.source.y,\r\n            'x2': this.target.x,\r\n            'y2': this.target.y,\r\n            'stroke': Util.getColor(this.color)\r\n        });\r\n        if (this.lineType && this.lineType.toLowerCase() === 'dotted') {\r\n            line.setAttribute('stroke-miterlimit', '4');\r\n            line.setAttribute('stroke-dasharray', '1,1');\r\n        }\r\n        return line;\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport Options from '../Options';\r\nimport {JavaAdapter} from '../adapters';\r\n\r\nexport class ClassEditor extends Graph {\r\n    private adapter: JavaAdapter;\r\n    constructor(json: any, options: Options) {\r\n        if (!options ) {\r\n            options = {};\r\n        }\r\n        options.canvas = options.canvas || 'canvas';\r\n        // options.origin = options.origin || new Point(150, 45);\r\n//            layout: \"DagreLayout\",\r\n        options.autoSave = options.autoSave || true;\r\n        if (!options.features) {\r\n            options.features = {\r\n                drag: true,\r\n                editor: true,\r\n                palette: true,\r\n                select: true,\r\n                zoom: true,\r\n                toolbar: true,\r\n                import: true,\r\n                properties: true,\r\n                addnode: true,\r\n                newedge: true\r\n            };\r\n        }\r\n        super(json, options);\r\n    }\r\n\r\n    public setBoardStyle(value: string) {\r\n        console.log(value);\r\n        this.importFile.setBoardStyle(value);\r\n    }\r\n\r\n    public registerListener(): void {\r\n        this.adapter = new JavaAdapter();\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return this.adapter;\r\n    }\r\n}\r\n","import * as edges from './edges';\r\nimport { Association } from './edges';\r\nimport * as nodes from './nodes';\r\nimport * as layouts from '../layouts';\r\nimport Layout from '../layouts/Layout';\r\nimport { GraphModel } from './Model';\r\nimport { Point, Size } from './BaseElements';\r\nimport { Util } from '../util';\r\nimport { Control } from '../Control';\r\nimport Data from '../Data';\r\nimport { EventBus } from '../EventBus';\r\nimport { AddNode, Drag, NewEdge, Select, Zoom } from '../handlers';\r\nimport Options from '../Options';\r\nimport { ImportFile } from '../handlers/ImportFile';\r\nimport { CSS } from '../CSS';\r\nimport { DiagramElement } from './index';\r\nimport { Toolbar } from '../Toolbar';\r\nimport {JSEPS} from '../JSEPS';\r\nimport {SVGConverter} from '../SVGConverter';\r\nimport Palette from '../Palette';\r\nimport {PanelGroup} from '../PropertiesPanel';\r\n\r\nexport class Graph extends Control {\r\n    // canvas: HTMLElement;\r\n    root: SVGElement;\r\n    $graphModel: GraphModel;\r\n    options: Options;\r\n    canvasSize: Size;\r\n    nodeFactory: Object;\r\n    edgeFactory: Object;\r\n    layoutFactory: Object;\r\n    protected importFile: ImportFile;\r\n    private currentlayout: Layout;\r\n    // private layerToolBar: SVGSVGElement;\r\n    // https://stackoverflow.com/questions/15181452/how-to-save-export-inline-svg-styled-with-css-from-browser-to-image-file\r\n    private containerElements = ['svg', 'g'];\r\n    private relevantStyles = {\r\n        'rect': ['fill', 'stroke', 'stroke-width'],\r\n        'path': ['fill', 'stroke', 'stroke-width', 'opacity'],\r\n        'circle': ['fill', 'stroke', 'stroke-width'],\r\n        'line': ['stroke', 'stroke-width'],\r\n        'text': ['fill', 'font-size', 'text-anchor', 'font-family'],\r\n        'polygon': ['stroke', 'fill']\r\n    };\r\n\r\n    constructor(json: any, options: Options) {\r\n        super();\r\n        json = json || {};\r\n        if (json['data']) {\r\n            options = json['options'];\r\n            json = json['data'];\r\n            this.id = json['id'];\r\n        }\r\n        this.options = options || {features: { drag: true}};\r\n        if (json['init']) {\r\n            return;\r\n        }\r\n        if (!this.options.origin) {\r\n            this.options.origin = new Point(150, 45);\r\n        }\r\n        if (!this.options.style) {\r\n            // Style can be classic or modern\r\n            this.options.style = 'classic';\r\n        }\r\n        if (this.options.autoSave) {\r\n            Util.isAutoSave = options.autoSave;\r\n        }\r\n\r\n        this.initFactories();\r\n        this.initCanvas();\r\n        this.initFeatures(this.options.features);\r\n\r\n        // load previous session, if user wants it\r\n        // otherwise load the json data\r\n        if (!this.lookupInLocalStorage()) {\r\n            this.load(json);\r\n        }\r\n\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    public lookupInLocalStorage(): boolean {\r\n        if (!this.options.autoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (!Util.isLocalStorageSupported()) {\r\n            return false;\r\n        }\r\n        let diagram = Util.getDiagramFromLocalStorage();\r\n        if (diagram && diagram.length > 0) {\r\n            if (confirm('Restore previous session?')) {\r\n                let jsonData: JSON = JSON.parse(diagram);\r\n                this.load(jsonData);\r\n                this.layout();\r\n                return true;\r\n            } else {\r\n                Util.saveToLocalStorage( null);\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public fitSizeOnNodes(): void {\r\n        let maxWidth: number = 0;\r\n        let maxHeight: number = 0;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            let nodePos = node.getPos();\r\n            let nodeSize = node.getSize();\r\n            let nodeWidestPosX = nodePos.x + nodeSize.x;\r\n            let nodeWidestPosY = nodePos.y + nodeSize.y;\r\n\r\n            if (nodeWidestPosX > maxWidth) {\r\n                maxWidth = nodeWidestPosX;\r\n            }\r\n\r\n            if (nodeWidestPosY > maxHeight) {\r\n                maxHeight = nodeWidestPosY;\r\n            }\r\n        }\r\n\r\n        this.root.setAttributeNS(null, 'width', '' + (maxWidth + 100));\r\n        this.root.setAttributeNS(null, 'height', '' + (maxHeight + 50));\r\n    }\r\n\r\n    public saveAs(typ: string) {\r\n        typ = typ.toLowerCase();\r\n\r\n        // shrink size of graph to minimum. only to show up nodes\r\n        const currentSize = this.getRootSize();\r\n        this.fitSizeOnNodes();\r\n\r\n        if (typ === 'svg') {\r\n            this.exportSvg();\r\n        } else if (typ === 'png') {\r\n            this.exportPng();\r\n        } else if (typ === 'html') {\r\n            this.exportHtml();\r\n\r\n        } else if (typ === 'pdf') {\r\n            this.exportPdf();\r\n            // } else if (typ === 'eps') {\r\n            // this.ExportEPS();\r\n        }\r\n        else if (typ === 'json') {\r\n            this.exportJson();\r\n        }\r\n\r\n        // set the size back to default\r\n        this.root.setAttributeNS(null, 'width', '' + currentSize.width);\r\n        this.root.setAttributeNS(null, 'height', '' + currentSize.height);\r\n    }\r\n\r\n    /**\r\n     * generates a blob file and makes it available for download.\r\n     * @param type type of file\r\n     * @param data raw data\r\n     * @param name name of download file\r\n     */\r\n    public save(type: string, data: any, name: string, context: string) {\r\n        if (window['java']) {\r\n            window['java'].export(type, data, name, context);\r\n            return;\r\n        }\r\n        let a = document.createElement('a');\r\n        a.href = window.URL.createObjectURL(new Blob([data], { type: context }));\r\n        a.download = name;\r\n        document.body.appendChild(a);\r\n        a.click();\r\n        document.body.removeChild(a);\r\n    }\r\n\r\n    /** Exports the diagram as svg. */\r\n    public exportSvg(): void {\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        this.save('svg', this.serializeXmlNode(wellFormatedSvgDom), 'class_diagram.svg', 'image/svg+xml');\r\n    }\r\n\r\n    /** Exports the diagram as html. */\r\n    public exportHtml(): void {\r\n        let htmlFacade = '<html><head><title>DiagramJS - Classdiagram</title></head><body>$content</body></html>';\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        let svgAsXml = this.serializeXmlNode(wellFormatedSvgDom);\r\n\r\n        let htmlResult = htmlFacade.replace('$content', svgAsXml);\r\n\r\n        this.save('html', htmlResult, 'class_diagram.htm', 'text/plain');\r\n    }\r\n\r\n    /** Exports the diagram as json. */\r\n    public exportJson(): void {\r\n        let type = 'text/plain';\r\n        let jsonObj = Util.toJson(this.$graphModel);\r\n        let data = JSON.stringify(jsonObj, null, '\\t');\r\n\r\n        this.save('json', data, 'class_diagram.json', type);\r\n    }\r\n\r\n    /** Exports the diagram as pdf. */\r\n    public exportPdf(): void {\r\n        if (!window['jsPDF']) {\r\n            console.log('jspdf n.a.');\r\n            return;\r\n        }\r\n        let type = 'image/svg+xml';\r\n        let converter, pdf = new window['jsPDF']('l', 'px', [this.$graphModel.getSize().x, this.$graphModel.getSize().y]);\r\n        converter = new SVGConverter(this.$view, pdf, {removeInvalid: false});\r\n        pdf.save('Download.pdf');\r\n/*        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let canvas, context, a, image = new Image();\r\n        let size = this.getRootSize();\r\n\r\n        // create the loaded img source into a canvas. to generate a picture. then place this picture in the pdf\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            let pdf = new window['jsPDF']();\r\n\r\n            pdf.addImage(canvas.toDataURL('image/jpeg'), 'jpeg', 15, 40, 180, 160);\r\n            pdf.save('class_diagram.pdf');\r\n\r\n        };\r\n\r\n        image.src = url;\r\n        */\r\n    }\r\n\r\n    public import(data: string): void {\r\n        let rootElement = this.$graphModel.$view;\r\n        while (rootElement.hasChildNodes()) {\r\n            rootElement.removeChild(rootElement.firstChild);\r\n        }\r\n\r\n        while (this.$view.hasChildNodes()) {\r\n            this.$view.removeChild(this.$view.firstChild);\r\n        }\r\n\r\n        this.clearModel();\r\n        let jsonData = JSON.parse(data);\r\n        this.load(jsonData);\r\n        this.layout();\r\n    }\r\n\r\n    public exportEPS(): void {\r\n          let converter, doc = new JSEPS({inverting: true});\r\n            converter = new SVGConverter(this.$view, doc, {removeInvalid: false});\r\n            this.save('eps', doc.getData(), 'diagram.eps', doc.getType());\r\n    }\r\n\r\n    /** Exports the diagram as png. */\r\n    public exportPng(): void {\r\n        let canvas, context, a, image = new Image();\r\n        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let typ = 'image/svg+xml';\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let size = this.getRootSize();\r\n\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            a = document.createElement('a');\r\n            a.download = 'class_diagram.png';\r\n            a.href = canvas.toDataURL('image/png');\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            document.body.removeChild(a);\r\n        };\r\n\r\n        image.src = url;\r\n\r\n    }\r\n\r\n    public getSvgWithStyleAttributes(): Node {\r\n        let oDOM = this.$graphModel.$view.cloneNode(true);\r\n        this.readElement(oDOM, this.$graphModel.$view);\r\n\r\n        return oDOM;\r\n    }\r\n\r\n    public serializeXmlNode(xmlNode: any) {\r\n        if (window['XMLSerializer'] !== undefined) {\r\n            return (new window['XMLSerializer']()).serializeToString(xmlNode);\r\n        }\r\n        if (xmlNode.xml !== undefined) {\r\n            return xmlNode.xml;\r\n        }\r\n        return xmlNode.outerHTML;\r\n    }\r\n\r\n    public getRootSize(): Size {\r\n        let width: number;\r\n        let height: number;\r\n        width = +this.root.getAttribute('width');\r\n        height = +this.root.getAttribute('height');\r\n\r\n        return { width: width, height: height };\r\n    }\r\n\r\n        // Graph.prototype.ExportEPS = function () {\r\n        //     var converter, doc = new svgConverter.jsEPS({inverting: true});\r\n        //     converter = new svgConverter(this.board, doc, {removeInvalid: false});\r\n        //     doc.save();\r\n        // };\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        this.$graphModel = new GraphModel();\r\n        this.$graphModel.init(this);\r\n        this.$graphModel.load(json);\r\n    }\r\n\r\n    public clearModel(): void {\r\n        this.$graphModel.removeAllElements();\r\n        this.clearSvgRoot();\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.layout();\r\n        return this;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        return;\r\n    }\r\n\r\n    public getNextFreePosition(): Point {\r\n\r\n        if (!this.$graphModel) {\r\n            return new Point(50, 50);\r\n        }\r\n\r\n        let point = new Point(0, 50);\r\n\r\n        let maxX = 0;\r\n        let minX = 9000;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            maxX = Math.max(maxX, node.getPos().x);\r\n            minX = Math.min(minX, node.getPos().x);\r\n        }\r\n\r\n        if (minX > 170) {\r\n            point.x = 10;\r\n        }\r\n        else {\r\n            point.x = maxX + 200;\r\n        }\r\n\r\n        return point;\r\n    }\r\n\r\n    public addElement(type: string, dontDraw?: boolean): boolean {\r\n        let success = this.$graphModel.addElement(type);\r\n        if (success === true) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return success;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues?: Object, layout?: boolean, dontDraw?: boolean): DiagramElement {\r\n        let element = this.$graphModel.addElementWithValues(type, optionalValues);\r\n        if (element && layout) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public layout(dontDraw?: boolean): Graph {\r\n        this.getLayout().layout(this, this.$graphModel);\r\n\r\n        if (dontDraw) {\r\n            return this;\r\n        }\r\n\r\n        this.draw();\r\n        return this;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTDRAGOVER, EventBus.ELEMENTDRAGLEAVE, EventBus.ELEMENTDROP];\r\n    }\r\n\r\n    public draw() {\r\n        this.clearSvgRoot();\r\n        let model = this.$graphModel;\r\n        let root = this.root;\r\n        let max: Point = new Point();\r\n        if (this.options) {\r\n            max.x = this.options.minWidth || 0;\r\n            max.y = this.options.minHeight || 0;\r\n        }\r\n\r\n        for (let node of model.nodes) {\r\n            let svg = node.getSVG();\r\n            EventBus.register(node, svg);\r\n            root.appendChild(svg);\r\n\r\n            let temp: number;\r\n            temp = node.getPos().x + node.getSize().x;\r\n            if (temp > max.x) {\r\n                max.x = temp;\r\n            }\r\n            temp = node.getPos().y + node.getSize().y;\r\n            if (temp > max.y) {\r\n                max.y = temp;\r\n            }\r\n\r\n        }\r\n        Util.setAttributeSize(this.root, max.x + 60, max.y + 40);\r\n\r\n        for (let edge of model.edges) {\r\n            let svg = edge.getSVG();\r\n            EventBus.register(edge, svg);\r\n            root.appendChild(svg);\r\n        }\r\n    }\r\n\r\n    public getNode(id: string) {\r\n        return this.$graphModel.getNodeById(id);\r\n    }\r\n\r\n    public drawElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let svg = element.getSVG();\r\n        this.root.appendChild(svg);\r\n\r\n        // actualize root width size, if neccessary\r\n        // get current width of root\r\n        let rootSize = this.getRootSize();\r\n        let newWidth = element.getPos().x + element.getSize().x + 40;\r\n        let newHeight = element.getPos().y + element.getSize().y;\r\n\r\n        if (rootSize.width < newWidth) {\r\n            this.root.setAttributeNS(null, 'width', '' + newWidth);\r\n        }\r\n\r\n        if (rootSize.height < newHeight) {\r\n            this.root.setAttributeNS(null, 'height', '' + newHeight);\r\n        }\r\n\r\n        // draw edge\r\n        if (element instanceof Association) {\r\n            let edge = <Association>element;\r\n            edge.redraw(edge.$sNode);\r\n            let srcSvg = element.$sNode.getAlreadyDisplayingSVG();\r\n            let targetSvg = element.$tNode.getAlreadyDisplayingSVG();\r\n\r\n            this.root.appendChild(srcSvg);\r\n            this.root.appendChild(targetSvg);\r\n        }\r\n\r\n        EventBus.register(element, svg);\r\n    }\r\n\r\n    public removeElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let alreadyDisplayingSvg = element.getAlreadyDisplayingSVG();\r\n        if (Util.isParentOfChild(this.root, alreadyDisplayingSvg)) {\r\n            this.root.removeChild(alreadyDisplayingSvg);\r\n        }\r\n    }\r\n\r\n    public generate(packageName: string, path?: string) {\r\n        this.$graphModel.package = packageName;\r\n        this.$graphModel.genPath = path;\r\n\r\n        let data, result = Util.toJson(this.$graphModel);\r\n        data = JSON.stringify(result, null, '\\t');\r\n        if (window['java'] && typeof window['java'].generate === 'function') {\r\n            window['java'].generate(data);\r\n        }\r\n    }\r\n// REFACTORING dd\r\n    private readElement(parent: any, origData: any): void {\r\n        let children = parent.childNodes;\r\n        let origChildDat = origData.childNodes;\r\n\r\n        for (let cd = 0; cd < children.length; cd++) {\r\n            let child = children[cd];\r\n\r\n            let tagName = child.tagName;\r\n            if (this.containerElements.indexOf(tagName) !== -1) {\r\n                this.readElement(child, origChildDat[cd]);\r\n            } else if (tagName in this.relevantStyles) {\r\n                let styleDef = window.getComputedStyle(origChildDat[cd]);\r\n\r\n                let styleString = '';\r\n                for (let st = 0; st < this.relevantStyles[tagName].length; st++) {\r\n                    styleString += this.relevantStyles[tagName][st] + ':' + styleDef.getPropertyValue(this.relevantStyles[tagName][st]) + '; ';\r\n                }\r\n\r\n                child.setAttribute('style', styleString);\r\n            }\r\n        }\r\n    }\r\n\r\n    private createPattern(): Element {\r\n        const defs = Util.createShape({ tag: 'defs' });\r\n        const pattern = Util.createShape({\r\n            tag: 'pattern',\r\n            id: 'raster',\r\n            patternUnits: 'userSpaceOnUse',\r\n            width: 40,\r\n            height: 40\r\n        });\r\n        const path = 'M0 4 L0 0 L4 0 M36 0 L40 0 L40 4 M40 36 L40 40 L36 40 M4 40 L0 40 L0 36';\r\n        const cross = Util.createShape({\r\n            tag: 'path',\r\n            d: path,\r\n            stroke: '#DDD',\r\n            'stroke-width': 1,\r\n            fill: 'none'\r\n        });\r\n\r\n        const rect = Util.createShape({\r\n            tag: 'rect',\r\n            x: 0,\r\n            y: 0,\r\n            width: 40,\r\n            height: 40,\r\n            fill: 'none'\r\n        });\r\n        pattern.appendChild(rect);\r\n        pattern.appendChild(cross);\r\n        defs.appendChild(pattern);\r\n        return defs;\r\n    }\r\n\r\n    private clearSvgRoot() {\r\n        const root = this.root;\r\n        this.$graphModel.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n        while (root.firstChild) {\r\n            root.removeChild(root.firstChild);\r\n        }\r\n\r\n        root.appendChild(this.createPattern());\r\n        let fillValue = 'none';\r\n        if (this.options.raster) {\r\n            fillValue = 'url(#raster)';\r\n        }\r\n        let background = Util.createShape({\r\n            tag: 'rect',\r\n            id: 'background',\r\n            width: 5000,\r\n            height: 5000,\r\n            x: 0,\r\n            y: 0,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: fillValue\r\n        });\r\n        root.appendChild(background);\r\n\r\n        // delete inline Edit, if exists\r\n        let inlineEdit = document.getElementById('inlineEdit');\r\n        if (inlineEdit && document.body.contains(inlineEdit)) {\r\n            document.body.removeChild(inlineEdit);\r\n        }\r\n    }\r\n\r\n    private getLayout(): Layout {\r\n        if (this.currentlayout) {\r\n            return this.currentlayout;\r\n        }\r\n\r\n        let layout = this.options.layout || '';\r\n        if (this.layoutFactory[layout]) {\r\n            this.currentlayout = new this.layoutFactory[layout]();\r\n        } else {\r\n            this.currentlayout = new layouts.DagreLayout();\r\n        }\r\n\r\n        return this.currentlayout;\r\n    }\r\n\r\n    private initFactories() {\r\n\r\n        let noder = nodes;\r\n        this.nodeFactory = {};\r\n        for (let id in noder) {\r\n            if (noder.hasOwnProperty(id) === true) {\r\n                this.nodeFactory[id] = noder[id];\r\n            }\r\n        }\r\n\r\n        let edger = edges;\r\n        this.edgeFactory = {};\r\n        for (let id in edger) {\r\n            if (edger.hasOwnProperty(id) === true) {\r\n                this.edgeFactory[id] = edger[id];\r\n            }\r\n        }\r\n\r\n        let layouter = layouts;\r\n        this.layoutFactory = {};\r\n        for (let id in layouter) {\r\n            if (layouter.hasOwnProperty(id) === true) {\r\n                this.layoutFactory[id] = layouter[id];\r\n            }\r\n        }\r\n    }\r\n\r\n    private initCanvas() {\r\n        if (this.options.canvas) {\r\n            this.$view = document.getElementById(this.options.canvas);\r\n        }\r\n        if (!this.$view) {\r\n            this.$view = document.createElement('div');\r\n            this.$view.setAttribute('class', 'diagram');\r\n            document.body.appendChild(this.$view);\r\n        }\r\n    }\r\n\r\n    private initFeatures(features: any) {\r\n\r\n        if (features) {\r\n            if (features.newedge) {\r\n                EventBus.subscribe(new NewEdge(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            this.importFile = new ImportFile(this);\r\n            if (features.import) {\r\n                EventBus.subscribe(this.importFile, 'dragover', 'dragleave', 'drop');\r\n            }\r\n            if (features.zoom) {\r\n                let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n                EventBus.subscribe(new Zoom(this), mousewheel);\r\n            }\r\n            if (features.drag) {\r\n                EventBus.subscribe(new Drag(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            if (features.select) {\r\n                EventBus.subscribe(new Select(this), 'click', 'drag');\r\n            }\r\n            if (features.palette) {\r\n                new Palette(this).show();\r\n            }\r\n            if (features.toolbar) {\r\n                new Toolbar(this).show();\r\n            }\r\n            if (features.properties) {\r\n                let propertyPanel = new PanelGroup(this);\r\n                // let dispatcher = new PropertiesDispatcher(this);\r\n                EventBus.subscribe(propertyPanel, 'dblclick', 'click', EventBus.RELOADPROPERTIES);\r\n                propertyPanel.show();\r\n            }\r\n            if (features.addnode) {\r\n                EventBus.subscribe(new AddNode(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n        }\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport {DiagramElement, Point} from './BaseElements';\r\nimport {Association} from './edges';\r\nimport {Node} from './nodes';\r\nimport {Control} from '../Control';\r\nimport {Util} from '../util';\r\nimport {EventBus} from '../EventBus';\r\n\r\nexport class GraphModel extends DiagramElement {\r\n    nodes: Node[] = [];\r\n    edges: Association[] = [];\r\n    package: string;\r\n    genPath: string;\r\n    $isLoading: boolean;\r\n\r\n    public load(data?: any) {\r\n\r\n        this.$isLoading = true;\r\n        data = data || {};\r\n        this.property = data.type || data.property || 'classdiagram';\r\n        this.id = 'RootElement';\r\n        if (data.nodes) {\r\n            for (let node of data.nodes) {\r\n                this.addNode(node);\r\n            }\r\n        }\r\n        if (data.edges) {\r\n            for (let edge of data.edges) {\r\n                this.addEdge(edge);\r\n            }\r\n        }\r\n\r\n        this.$isLoading = false;\r\n    }\r\n\r\n    public getNodeByPosition(x: number, y: number): Node {\r\n        for (let node of this.nodes) {\r\n            let posOfNode: Point = (<Node>node).getPos();\r\n            let sizeOfNode: Point = (<Node>node).getSize();\r\n\r\n            if ((posOfNode.x <= x && (posOfNode.x + sizeOfNode.x) >= x)\r\n                && (posOfNode.y <= y && (posOfNode.y + sizeOfNode.y) >= y)) {\r\n                return node;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.initCanvas();\r\n        return this;\r\n    }\r\n\r\n    public addElement(type: string): boolean {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n        if (element) {\r\n            Util.saveToLocalStorage(this);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues: Object): DiagramElement {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n\r\n        // position\r\n        if (optionalValues) {\r\n            if (optionalValues.hasOwnProperty('x') && optionalValues.hasOwnProperty('y')) {\r\n                let x = optionalValues['x'];\r\n                let y = optionalValues['y'];\r\n                element.withPos(x, y);\r\n            }\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return element;\r\n    }\r\n\r\n    public removeAllElements(): void {\r\n\r\n        let nodesLength = this.nodes.length;\r\n        for (let i = 0; i < nodesLength; i++) {\r\n            this.removeElement(this.nodes[0].id);\r\n        }\r\n\r\n        this.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n    }\r\n\r\n    public removeElement(id: string): boolean {\r\n\r\n        let element = this.getDiagramElementById(id);\r\n        if (!element) {\r\n            return false;\r\n        }\r\n\r\n        (<Graph>this.$owner).removeElement(element);\r\n\r\n        if (element instanceof Node) {\r\n\r\n            let idxOfNode = this.nodes.indexOf(element);\r\n            if (idxOfNode > -1) {\r\n                this.nodes.splice(idxOfNode, 1);\r\n            }\r\n\r\n            while (element.$edges.length > 0) {\r\n                this.removeElement(element.$edges[0].id);\r\n            }\r\n\r\n            element.$edges = [];\r\n        }\r\n        else if (element instanceof Association) {\r\n\r\n            let idxOfEdge = this.edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                this.edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from source\r\n            idxOfEdge = element.$sNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$sNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from target\r\n            idxOfEdge = element.$tNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$tNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return true;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        const size = 10;\r\n        const path = `M${-size} 0 L${+size} 0 M0 ${-size} L0 ${+size}`;\r\n\r\n        const attr = {\r\n            tag: 'path',\r\n            id: 'origin',\r\n            d: path,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: 'none'\r\n        };\r\n        let shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: 0 - size,\r\n            y: 0 - size / 1.5,\r\n            'text-anchor': 'end',\r\n            'font-family': 'Verdana',\r\n            'font-size': '9',\r\n            fill: '#999'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = '(0, 0)';\r\n\r\n        let group = this.createShape({tag: 'g'});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEUP, EventBus.ELEMENTMOUSELEAVE, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTMOUSEWHEEL, EventBus.ELEMENTCLICK, EventBus.ELEMENTDRAG];\r\n    }\r\n\r\n    public getNewId(prefix?: string): string {\r\n        let id = (prefix ? prefix.toLowerCase() + '-' : '') + Math.floor(Math.random() * 100000);\r\n        return id;\r\n    }\r\n\r\n    public getEdgeById(id: string): Association {\r\n        for (let edge of this.edges) {\r\n            if (edge.id === id) {\r\n                return edge;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    public getDiagramElementById(id: string): DiagramElement {\r\n\r\n        return this.getNodeById(id) || this.getEdgeById(id);\r\n    }\r\n\r\n    /**\r\n     * Add an edge with data in json file. Optional you can say, that the edge should have\r\n     * the points of source node and target node.\r\n     * @param edge information about edge in json\r\n     * @param withPosOfNodes optional. set points to line of source and target node\r\n     */\r\n    public addEdge(edge: any, withPosOfNodes?: boolean): Association {\r\n\r\n        // lookup in factoryedges and check if the edge type realy exists\r\n        if (edge && edge.type) {\r\n            const graph = (<Graph>this.$owner);\r\n            let typeExists = false;\r\n            for (let edgeType in graph.edgeFactory) {\r\n                if (edgeType === edge.type) {\r\n                    typeExists = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!typeExists) {\r\n                edge.type = 'Association';\r\n            }\r\n        }\r\n\r\n        let type = edge.type || 'Association';\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n\r\n        let newEdge = <Association>this.createElement(type, id, edge);\r\n        newEdge.type = type;\r\n\r\n        let source: Node;\r\n        let sourceAsString: string = edge.source.id || edge.source;\r\n        if (sourceAsString) {\r\n            source = this.getNodeById(sourceAsString);\r\n            if (!source) {\r\n                let nodeID = edge.source;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                source = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                source.init(this);\r\n            }\r\n        }\r\n\r\n        let target: Node;\r\n        let targetAsString: string = edge.target.id || edge.target;\r\n        if (targetAsString) {\r\n            target = this.getNodeById(targetAsString);\r\n            if (!target) {\r\n                let nodeID = edge.target;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                target = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                target.init(this);\r\n            }\r\n        }\r\n\r\n        newEdge.withItem(source, target);\r\n\r\n        if (withPosOfNodes) {\r\n            let srcX = source.getPos().x + (source.getSize().x / 2);\r\n            let srcY = source.getPos().y + (source.getSize().y / 2);\r\n\r\n            let targetX = target.getPos().x + (target.getSize().x / 2);\r\n            let targetY = target.getPos().y + (target.getSize().y / 2);\r\n\r\n            newEdge.addPoint(srcX, srcY);\r\n            newEdge.addPoint(targetX, targetY);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public createElement(type: string, id: string, data: Object): DiagramElement {\r\n        const graph = <Graph>this.$owner;\r\n        let element: DiagramElement;\r\n        if (graph.nodeFactory[type]) {\r\n            element = new graph.nodeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.nodes.push(<Node>element);\r\n        }\r\n        if (graph.edgeFactory[type]) {\r\n            element = new graph.edgeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.edges.push(<Association>element);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public getNodeById(id: string): Node {\r\n        for (let node of this.nodes) {\r\n            if (node.id === id) {\r\n                return node;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    private initCanvas() {\r\n        const graph = <Graph>this.$owner;\r\n        graph.canvasSize = {width: graph.$view.clientWidth, height: graph.$view.clientHeight};\r\n        graph.root = Util.createShape({\r\n            tag: 'svg',\r\n            id: 'root',\r\n            width: graph.canvasSize.width,\r\n            height: graph.canvasSize.height\r\n            // FIXME,viewBox: `${this.$graph.options.origin.x * -1} ${this.$graph.options.origin.y * -1} ${this.$graph.canvasSize.width} ${this.$graph.canvasSize.height}`\r\n        });\r\n        this.$view = graph.root;\r\n        graph.$view.appendChild(graph.root);\r\n\r\n        let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    private addNode(node: Node): Node {\r\n        let type = node['type'] || node.property || 'Node';\r\n        type = Util.toPascalCase(type);\r\n        let id = node['id'] || node['name'] || this.getNewId(type);\r\n\r\n        return <Node>this.createElement(type, id, node);\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction } from './index';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\n\r\nexport abstract class Aggregate extends Association {\r\n\r\n    protected $diamond: Element;\r\n\r\n    public getSVG(): Element {\r\n\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled diamond\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n        };\r\n\r\n        this.$diamond = this.createShape(attr);\r\n\r\n        group.appendChild(this.$diamond);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint: Point = this.$points[0];\r\n        let direction: Direction = Direction.Down;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if (this.$sNode.id === startNode.id || this.$points.length == 2) {\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$diamond.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint: Point, direction: Direction): string {\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                path = `M${startX} ${startY} L${startX + 6} ${startY + 10} L${startX} ${startY + 20} L${startX - 6} ${startY + 10} Z`;\r\n                startPoint.y = startPoint.y+20;\r\n                break;\r\n            case Direction.Right:\r\n                path = `M${startX} ${startY} L${startX - 10} ${startY + 6} L${startX - 20} ${startY} L${startX - 10} ${startY - 6} Z`;\r\n                startPoint.x = startPoint.x-20;\r\n                break;\r\n            case Direction.Left:\r\n                path = `M${startX} ${startY} L${startX + 10} ${startY - 6} L${startX + 20} ${startY} L${startX + 10} ${startY + 6} Z`;\r\n                startPoint.x = startPoint.x+20;\r\n                break;\r\n            case Direction.Down:\r\n                path = `M${startX} ${startY} L${startX - 6} ${startY - 10} L${startX} ${startY - 20} L${startX + 6} ${startY - 10} Z`;\r\n                startPoint.y = startPoint.y-20;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Aggregation extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'white');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { DiagramElement, Line, Point } from '../BaseElements';\r\nimport { Node } from '../nodes';\r\nimport { InfoText } from '../nodes/InfoText';\r\nimport { Util } from '../../util';\r\nimport { EventBus } from '../../EventBus';\r\nimport * as edges from '../edges';\r\nimport { Graph } from '../Graph';\r\n\r\nexport const enum Direction {\r\n    Up, Down, Left, Right\r\n}\r\n\r\nexport class Association extends DiagramElement {\r\n    public source: string;\r\n    public target: string;\r\n    public type: string;\r\n    public $sNode: Node;\r\n    public $tNode: Node;\r\n    public lineStyle: string;\r\n    public $points: Point[] = [];\r\n    public $pathSvg: Element;\r\n    public $pathWideSvg: Element;\r\n    public info: InfoText;\r\n    public sourceInfo: InfoText;\r\n    public targetInfo: InfoText;\r\n    $m: number;\r\n    $n: number;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super();\r\n\r\n        this.withData(data);\r\n    }\r\n\r\n    public withData(data: JSON | string | Object | any): Association {\r\n\r\n        if (!data) {\r\n            return this;\r\n        }\r\n        let srcInfo;\r\n        let trgInfo;\r\n\r\n        if (data.source && typeof data.source !== 'string') {\r\n            srcInfo = data.source;\r\n        }\r\n        else if (data.sourceInfo && typeof data.sourceInfo !== 'string') {\r\n            srcInfo = data.sourceInfo;\r\n        }\r\n\r\n        if (srcInfo) {\r\n            this.sourceInfo = new InfoText(srcInfo);\r\n            this.sourceInfo.$owner = this;\r\n        }\r\n\r\n        if (data.target && typeof data.target !== 'string') {\r\n            trgInfo = data.target;\r\n        }\r\n        else if (data.targetInfo && typeof data.targetInfo !== 'string') {\r\n            trgInfo = data.targetInfo;\r\n        }\r\n\r\n        if (trgInfo) {\r\n            this.targetInfo = new InfoText(trgInfo);\r\n            this.targetInfo.$owner = this;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    public updateSrcCardinality(cardinality: string): void {\r\n        this.sourceInfo = this.updateCardinality(this.$sNode, this.sourceInfo, cardinality);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetCardinality(cardinality: string): void {\r\n        this.targetInfo = this.updateCardinality(this.$tNode, this.targetInfo, cardinality);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateSrcProperty(property: string): void {\r\n        this.sourceInfo = this.updateProperty(this.$sNode, this.sourceInfo, property);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetProperty(property: string): void {\r\n        this.targetInfo = this.updateProperty(this.$tNode, this.targetInfo, property);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public withItem(source: Node, target: Node): Association {\r\n        source.$edges.push(this);\r\n        target.$edges.push(this);\r\n        this.$sNode = source;\r\n        this.$tNode = target;\r\n        this.source = source.id;\r\n        this.target = target.id;\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let group = Util.createShape({ tag: 'g', id: this.id, class: 'SVGEdge' });\r\n\r\n        let path: string = this.getPath();\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'none'\r\n        };\r\n        let pathLine = this.createShape(attr);\r\n\r\n        //attr['style'] = 'stroke-width:20;opacity:0;width:20;height:20';\r\n        let extendedPathLine = Util.createShape(attr);\r\n\r\n        group.appendChild(extendedPathLine);\r\n        group.appendChild(pathLine);\r\n\r\n        if (this.sourceInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.sourceInfo.getSVG());\r\n        }\r\n        if (this.targetInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.targetInfo.getSVG());\r\n        }\r\n\r\n        this.$pathWideSvg = extendedPathLine;\r\n        this.$pathSvg = pathLine;\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.EDITOR, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    public convertEdge(type: string, newId: string, redraw?: boolean): Association {\r\n        if (!edges[type]) {\r\n            return this;\r\n        }\r\n\r\n        let newEdge: Association = new edges[type]();\r\n        newEdge.withItem(this.$sNode, this.$tNode);\r\n        newEdge.id = newId;\r\n        newEdge.type = type;\r\n        newEdge.lineStyle = this.lineStyle;\r\n        newEdge.$owner = this.$owner;\r\n\r\n        if (this.sourceInfo) {\r\n            newEdge.sourceInfo = new InfoText({ property: this.sourceInfo.property, cardinality: this.sourceInfo.cardinality });\r\n            newEdge.sourceInfo.$owner = newEdge;\r\n        }\r\n\r\n        if (this.targetInfo) {\r\n            newEdge.targetInfo = new InfoText({ property: this.targetInfo.property, cardinality: this.targetInfo.cardinality });\r\n            newEdge.targetInfo.$owner = newEdge;\r\n        }\r\n\r\n        this.$points.forEach(point => {\r\n            newEdge.addPoint(point.x, point.y);\r\n        });\r\n\r\n        let graph = <Graph>this.getRoot();\r\n        if (!graph) {\r\n            return this;\r\n        }\r\n\r\n        // update model. insert the edge exact on the same index, like the old edge\r\n        let idx = graph.$graphModel.edges.indexOf(this);\r\n        graph.$graphModel.removeElement(this.id);\r\n        if (idx > -1) {\r\n            graph.$graphModel.edges.splice(idx, 0, newEdge);\r\n        }\r\n        else {\r\n            graph.$graphModel.edges.push(newEdge);\r\n        }\r\n\r\n        if (!redraw) {\r\n            return newEdge;\r\n        }\r\n\r\n        let svgRoot: Element;\r\n        if (graph) {\r\n            svgRoot = graph.root;\r\n        }\r\n        else {\r\n            svgRoot = document.getElementById('root');\r\n        }\r\n        let newEdgeSvg = newEdge.getSVG();\r\n\r\n        // update graph\r\n        graph.removeElement(this);\r\n        svgRoot.appendChild(newEdgeSvg);\r\n\r\n        // redraw the edge from both sides to get the correct display\r\n        // if the type is edge, so the path can be redraw.\r\n        // if not, so the inherited class redraw the path with his own logic\r\n\r\n        let dontDrawPath: boolean = (type !== 'Edge');\r\n        newEdge.redraw(newEdge.$sNode, dontDrawPath);\r\n        newEdge.redraw(newEdge.$tNode, dontDrawPath);\r\n\r\n        EventBus.register(newEdge, newEdgeSvg);\r\n\r\n        this.sourceInfo = undefined;\r\n        this.targetInfo = undefined;\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n        // redraw the first point\r\n        // check which point is the near to startnode\r\n        let endPoint: Point;\r\n        let recalcPoint: Point;\r\n        let endPointIdx: number;\r\n\r\n        if (this.$sNode.id === startNode.id) {\r\n            recalcPoint = this.$points[0];\r\n            endPointIdx = 1;\r\n        } else if (this.$tNode.id === startNode.id) {\r\n            recalcPoint = this.$points[this.$points.length - 1];\r\n            endPointIdx = this.$points.length - 2;\r\n        }\r\n\r\n        endPoint = this.$points[endPointIdx];\r\n\r\n        // calculate and set new position of point to redraw\r\n        this.calcIntersection(startNode, recalcPoint, endPoint);\r\n\r\n        // remove the 2nd point next to startnode, if the node was dragged upper the point\r\n        if (this.$points.length > 2 && this.$tNode.id === startNode.id && endPoint.y > (startNode.getPos().y + (startNode.getSize().y / 2))) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$tNode.id === startNode.id && this.$points.length === 2) {\r\n            this.calcIntersection(this.$sNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (this.$points.length > 2 && this.$sNode.id === startNode.id && (startNode.getPos().y + (startNode.getSize().y / 2) > endPoint.y)) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$sNode.id === startNode.id && this.$points.length === 2) {\r\n\r\n            this.calcIntersection(this.$tNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (!dontDrawPoints) {\r\n            this.redrawPointsAndInfo();\r\n        }\r\n    }\r\n\r\n    public getPath(): string {\r\n\r\n        if (this.$points.length === 0) {\r\n            return '';\r\n        }\r\n\r\n        let path: string = 'M';\r\n        for (let i = 0; i < this.$points.length; i++) {\r\n            let point: Point = this.$points[i];\r\n            if (i > 0) {\r\n                path += 'L';\r\n            }\r\n            path += Math.floor(point.x) + ' ' + Math.floor(point.y) + ' ';\r\n        }\r\n\r\n        return path;\r\n    }\r\n    public calcInfoPosNew(infoTxt: InfoText, node: Node): Point {\r\n\r\n        if (!infoTxt || !node) {\r\n            return null;\r\n        }\r\n\r\n        // 1. step: get direction\r\n        let startPoint: Point;\r\n        let nextToStartPoint: Point;\r\n        if (this.$sNode.id === node.id) {\r\n            startPoint = this.$points[0];\r\n            nextToStartPoint = this.$points[1];\r\n        }\r\n        else if (this.$tNode.id === node.id) {\r\n            startPoint = this.$points[this.$points.length - 1];\r\n            nextToStartPoint = this.$points[this.$points.length - 2];\r\n        }\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(node, startPoint);\r\n\r\n        let x: number;\r\n        let y: number;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                break;\r\n            case Direction.Right:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x - (infoTxt.getSize().x) - 5;\r\n                break;\r\n            case Direction.Left:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x + 5;\r\n                break;\r\n            case Direction.Down:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        // assign calculated position to infotext\r\n        return new Point(x, y);\r\n    }\r\n\r\n    public clearPoints(): any {\r\n        this.$points = [];\r\n        this.$points = [];\r\n    }\r\n\r\n    public addPoint(x: number, y: number): Point[] {\r\n        this.$points.push(new Point(x, y));\r\n\r\n        return this.$points;\r\n    }\r\n\r\n    protected redrawPointsAndInfo(): void {\r\n        // redraw the edge with the new position\r\n        let path: string = this.getPath();\r\n        this.$pathSvg.setAttributeNS(null, 'd', path);\r\n        this.$pathWideSvg.setAttributeNS(null, 'd', path);\r\n\r\n        this.redrawSourceInfo();\r\n        this.redrawTargetInfo();\r\n    }\r\n\r\n    protected redrawSourceInfo() {\r\n        if (this.sourceInfo) {\r\n            let newPosOfSrc = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.redrawFromEdge(newPosOfSrc);\r\n        }\r\n    }\r\n\r\n    protected redrawTargetInfo() {\r\n        if (this.targetInfo) {\r\n            let newPosOfTarget = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.redrawFromEdge(newPosOfTarget);\r\n        }\r\n    }\r\n\r\n    protected getDirectionOfPointToNode(node: Node, pointNearNode: Point): Direction {\r\n        /*\r\n            Example to calculate the direction of nearest point to Node\r\n\r\n            node\r\n         x1_ _ _ _\r\n          |       |\r\n          |       |. pointNearNode\r\n          |       |\r\n          |_ _ _ x2\r\n\r\n          the calculation would return Direction.Left\r\n        */\r\n\r\n        let x1: Point = node.getPos();\r\n        let x2: Point = new Point((x1.x + node.getSize().x), (x1.y + node.getSize().y));\r\n        let direction: Direction = Direction.Down;\r\n\r\n        if (x1.y >= pointNearNode.y) {\r\n            direction = Direction.Down;\r\n        }\r\n        if (x2.y <= pointNearNode.y) {\r\n            direction = Direction.Up;\r\n        }\r\n        if (x1.x >= pointNearNode.x) {\r\n            direction = Direction.Right;\r\n        }\r\n        if (x2.x <= pointNearNode.x) {\r\n            direction = Direction.Left;\r\n        }\r\n\r\n        return direction;\r\n    }\r\n\r\n    private updateCardinality(node: Node, infoText: InfoText, cardinality: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'cardinality': cardinality });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.cardinality = cardinality;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateCardinality(cardinality);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private updateProperty(node: Node, infoText: InfoText, property: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'property': property });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.property = property;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateProperty(property);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private calcIntersection(startNode: Node, recalcPoint: Point, endPoint: Point): Point {\r\n\r\n        // https://www.mathelounge.de/21534/schnittpunkt-einer-linie-mit-den-randern-eines-rechtecks\r\n        let h = startNode.getSize().y;\r\n        let w = startNode.getSize().x;\r\n\r\n        let x1: number = startNode.getPos().x + (w / 2);\r\n        let y1: number = startNode.getPos().y + (h / 2);\r\n\r\n        let x2: number = endPoint.x;\r\n        let y2: number = endPoint.y;\r\n\r\n        let newX: number = recalcPoint.x;\r\n        let newY: number = recalcPoint.y;\r\n\r\n        if (x2 > x1) {\r\n            newX = x1 + (w / 2);\r\n        }\r\n        else if (x2 < x1) {\r\n            newX = x1 - (w / 2);\r\n        }\r\n        else {\r\n            newX = x1;\r\n        }\r\n\r\n        if ((x2 - x1) !== 0) {\r\n            newY = ((y2 - y1) / (x2 - x1) * (newX - x1)) + y1;\r\n        }\r\n        else {\r\n            if (y1 > y2) {\r\n                newY = startNode.getPos().y;\r\n            }\r\n            else {\r\n                newY = startNode.getPos().y + h;\r\n            }\r\n        }\r\n\r\n        // if the statement is not true, so the intersection is at the horizontal line\r\n        if (!((y1 - (h / 2) <= newY) && newY <= y1 + (h / 2))) {\r\n\r\n            if (y2 > y1) {\r\n                newY = y1 + (h / 2);\r\n            }\r\n            else {\r\n                newY = y1 - (h / 2);\r\n            }\r\n\r\n            if ((x2 - x1) !== 0) {\r\n                let tmp = ((y2 - y1) / (x2 - x1));\r\n                newX = (newY + (tmp * x1) - y1) / tmp;\r\n            }\r\n            else {\r\n                newX = x1;\r\n            }\r\n        }\r\n\r\n        recalcPoint.x = Math.ceil(newX);\r\n        recalcPoint.y = Math.ceil(newY);\r\n\r\n        return null;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Composition extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'black');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { Association } from './Association';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\nimport { Direction } from '../index';\r\n\r\nexport class Generalisation extends Association {\r\n\r\n    public $TARGET_ELEMENT_HEIGHT : number = 12;\r\n    protected $targetElement: Element;\r\n\r\n    public getSVG(): Element {\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction : Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled arrow\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'white'\r\n          };\r\n\r\n        this.$targetElement = this.createShape(attr);\r\n\r\n        group.appendChild(this.$targetElement);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean) : void {\r\n\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint : Point = this.$points[0];\r\n        let direction : Direction = Direction.Up;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if(this.$sNode.id === startNode.id || this.$points.length == 2){\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$targetElement.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint : Point, direction : Direction) : string{\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch(direction){\r\n            case Direction.Up:\r\n            path = `M${startX} ${startY+3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y+12;\r\n            break;\r\n            case Direction.Right:\r\n            path = `M${startX-3} ${startY} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x-12;\r\n            break;\r\n            case Direction.Left:\r\n            path = `M${startX+3} ${startY} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x+12;\r\n            break;\r\n            case Direction.Down:\r\n            path = `M${startX} ${startY-3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y-12;\r\n            break;\r\n            default :\r\n            break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n\r\n}\r\n","import { Generalisation } from './Generalisation';\r\n\r\nexport class Implements extends Generalisation {\r\n\r\n    public getSVG(): Element {\r\n        let group = super.getSVG();\r\n\r\n        this.$pathSvg.setAttributeNS(null, 'stroke-dasharray', '3, 3');\r\n\r\n        return group;\r\n    }\r\n}\r\n","export * from './Association';\r\nexport * from './Aggregate';\r\nexport * from './Aggregation';\r\nexport * from './Composition';\r\nexport * from './Generalisation';\r\nexport * from './Implements';","export * from './edges';\r\nexport * from './nodes';\r\nexport * from './BaseElements';\r\nexport * from './Graph';\r\nexport * from './Model';\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Attribute extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 28.06.2017.\r\n */\r\nimport {Control} from \"../../Control\";\r\n\r\nexport class AutoComplete extends Control {\r\n    private $inputField:HTMLInputElement;\r\n    private $dataList:HTMLDataListElement;\r\n    private $selected:HTMLSelectElement;\r\n    private $items:HTMLDivElement;\r\n    private isMultiple:boolean;\r\n\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        let div:HTMLDivElement = document.createElement('div');\r\n        this.$view = div;\r\n        this.$inputField = document.createElement('input');\r\n        this.$dataList = document.createElement(\"datalist\");\r\n        this.$dataList.id = \"data_\"+this.id;\r\n        this.$inputField.setAttribute(\"list\", \"data_\"+this.id);\r\n        if(data[\"value\"]) {\r\n            let values = data[\"value\"];\r\n            this.isMultiple = data[\"multiple\"] != null;\r\n            let option:HTMLOptionElement;\r\n            if(this.isMultiple) {\r\n                this.$selected = document.createElement(\"select\");\r\n                this.$selected.className = \"hide\";\r\n                this.$selected.multiple = true;\r\n\r\n                this.$selected.id = this.id;\r\n                this.$items = document.createElement(\"div\");\r\n                this.$items.className = \"selectedList\";\r\n                div.appendChild(this.$items);\r\n                this.$inputField.className = \"selectedInput\";\r\n                div.appendChild(this.$selected);\r\n                this.$view[\"style\"].setProperty(\"float\", \"left\");\r\n                let that = this;\r\n                this.$inputField.oninput = function(){that.onChange();}\r\n            } else {\r\n                this.$inputField.id = this.id;\r\n            }\r\n            for (let attr in values) {\r\n                if (!values.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                option = document.createElement(\"option\");\r\n                option.value = values[attr];\r\n                this.$dataList.appendChild(option);\r\n                if(this.isMultiple) {\r\n                    option = document.createElement(\"option\");\r\n                    option.value = values[attr];\r\n                    option.innerHTML = values[attr];\r\n                    this.$selected.appendChild(option);\r\n                }\r\n        }\r\n\r\n            div.appendChild(this.$inputField);\r\n            div.appendChild(this.$dataList);\r\n        }\r\n\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n            if(this.isMultiple) {\r\n                div.appendChild(this.$selected);\r\n            }\r\n        }\r\n\r\n        parent.appendChild(this);\r\n    }\r\n\r\n    public onChange() : void {\r\n        let textValue:string = this.$inputField.value;\r\n        if(textValue.length<1) {\r\n            return;\r\n        }\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == textValue) {\r\n                if(item.selected == false) {\r\n                    item.selected = true;\r\n                    item.defaultSelected = true;\r\n                    let test = document.createElement(\"li\");\r\n                    let that = this;\r\n                    test.onclick = function() {that.onDelete(item.value, test);};\r\n                    test.className = \"selectedItem\";\r\n                    test.innerHTML = item.value;\r\n                    this.$items.appendChild(test);\r\n                    this.$inputField.value = \"\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n    public onDelete(value:string, selectedItem:HTMLLIElement) : void {\r\n        this.$items.removeChild(selectedItem);\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == value ) {\r\n                if(item.selected) {\r\n                    item.selected = false;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","import {Control} from '../../Control';\r\n\r\nexport class BR extends Control {\r\n    public load(json: JSON): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('br');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            this.$view.setAttribute(attr, data[attr]);\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\nexport class Button extends Control {\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        this.$view = document.createElement('button');\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\nimport { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\nimport { Size } from '../index';\r\nimport ClazzProperty from './ClazzProperty';\r\nimport {SymbolLibary} from './Symbol';\r\nimport {StereoType} from './StereoType';\r\nimport {GraphListener} from '../../handlers/GraphListener';\r\n\r\nexport class Class extends Node {\r\n    public attributes: Attribute[] = [];\r\n    public methods: Method[] = [];\r\n    public modifier: string;\r\n    public stereoType: string;\r\n\r\n    protected $attrHeight = 25;\r\n    protected $attrFontSize = 12;\r\n    protected $labelView: Element;\r\n\r\n    constructor(json: JSON | string | Object | any) {\r\n        super(json);\r\n        return this;\r\n    }\r\n\r\n    public load(json?: any) {\r\n        if (!json) {\r\n            json = {};\r\n        }\r\n        let y = this.$labelHeight;\r\n        let labelObj = json.name || json.id || ('New ' + this.property);\r\n\r\n        let width: number = 150;\r\n        width = Math.max(width, Util.sizeOf(labelObj).width + 60);\r\n\r\n        if (json['attributes']) {\r\n            for (let attr of json['attributes']) {\r\n\r\n                let attrObj = new Attribute(attr);\r\n                attrObj.$owner = this;\r\n                this.attributes.push(attrObj);\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(attrObj.toString()).width);\r\n                let listener = new GraphListener(attrObj);\r\n                attrObj.$data.addListener(listener);\r\n            }\r\n        }\r\n        if (json['stereotype']) {\r\n            this.stereoType = json['stereotype'];\r\n        }\r\n        if (json['methods']) {\r\n            for (let method of json['methods']) {\r\n\r\n                let methodObj = new Method(method);\r\n                methodObj.$owner = this;\r\n                this.methods.push(methodObj);\r\n\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(methodObj.toString()).width);\r\n            }\r\n            y += this.$attrHeight;\r\n        }\r\n        this.withSize(width, y);\r\n    }\r\n\r\n    public getAttributes(): Attribute[] {\r\n        return this.attributes;\r\n    }\r\n\r\n    public getMethods(): Method[] {\r\n        return this.methods;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        let icon = SymbolLibary.draw({type: 'Class', property: 'HTML', width: '50', height: '50', transform: 'translate(-26,-21)'});\r\n        return icon;\r\n        // let group = this.createShape(\r\n//    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n//    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos: Point = this.getPos();\r\n        const size: Point = this.getSize();\r\n\r\n        let group = this.createShape({ tag: 'g', id: this.id, class: 'SVGClazz', transform: 'translate(0 0)' });\r\n\r\n        if (this.stereoType) {\r\n            let type = new StereoType(this.stereoType, pos.x, pos.y);\r\n            group.appendChild(type.getSVG());\r\n        }\r\n\r\n        // Full Shape\r\n        let options = null;\r\n        let style;\r\n        let clazzName;\r\n        if (this.$owner['options']) {\r\n            let options = this.$owner['options'];\r\n            if (options) {\r\n                style = options.style;\r\n            }\r\n        }\r\n        // = = = Background = = =\r\n        if (style === 'modern') {\r\n            clazzName = 'ClazzHeader';\r\n        }\r\n        clazzName = 'ClazzHeader';\r\n        const nodeShape = this.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            height: size.y,\r\n            width: size.x,\r\n            rx: 5,\r\n            ry: 5,\r\n            fill: 'none',\r\n            stroke: 'black',\r\n            'stroke-width': 1\r\n        });\r\n        if (clazzName) {\r\n            nodeShape.setAttribute('className', clazzName);\r\n            let styleHeader = Util.getStyle('ClazzHeader');\r\n            // headerHeight = styleHeader.getNumber('height');\r\n        }\r\n\r\n        // = = = LABEL = = =\r\n        let label = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y + this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': this.$labelFontSize,\r\n            fill: 'black'\r\n        });\r\n        label.textContent = this.id;\r\n        this.$labelView = label;\r\n\r\n        group.appendChild(nodeShape);\r\n        group.appendChild(label);\r\n\r\n        // = = = ATTRIBUTES = = =\r\n        if (this.attributes.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorLabelAttr = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight,\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight,\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorLabelAttr);\r\n\r\n            let groupOfAttributes = this.createShape({ tag: 'g', id: (this.id + 'Attributes') });\r\n            groupOfAttributes.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzAttribute');\r\n            group.appendChild(groupOfAttributes);\r\n\r\n            let y = pos.y + this.$labelHeight + this.$attrHeight / 2;\r\n            for (let attr of this.attributes) {\r\n\r\n                let attrSvg = attr.getSVG();\r\n                attr.$owner = this;\r\n\r\n                attrSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                attrSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfAttributes.appendChild(attrSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        // = = = METHODS = = =\r\n        let height = this.attributes.length * this.$attrHeight;\r\n        let y = pos.y + this.$labelHeight + height + this.$attrHeight / 2;\r\n        if (this.methods.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorAttrMethods = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorAttrMethods);\r\n\r\n            let groupOfMethods = this.createShape({ tag: 'g', id: (this.id + 'Methods') });\r\n            groupOfMethods.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzMethod');\r\n            group.appendChild(groupOfMethods);\r\n\r\n            y += this.$attrHeight / 2;\r\n            for (let method of this.methods) {\r\n\r\n                let methodSvg = method.getSVG();\r\n                method.$owner = this;\r\n\r\n                methodSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                methodSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfMethods.appendChild(methodSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        this.$view = group;\r\n        return group;\r\n    }\r\n\r\n    public copy(): Class {\r\n        let copy: Class;\r\n        copy = <Class>super.copy();\r\n\r\n        // copy label\r\n        copy.id = this.id + 'Copy';\r\n\r\n        // copy attributes\r\n        this.attributes.forEach(attr => {\r\n            copy.attributes.push(new Attribute(attr.toString()));\r\n        });\r\n        // copy methods\r\n        this.methods.forEach(method => {\r\n            copy.methods.push(new Method(method.toString()));\r\n        });\r\n        copy.reCalcSize();\r\n\r\n        return copy;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTCLICK,\r\n                EventBus.ELEMENTDRAG, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES, EventBus.RELOADPROPERTIES];\r\n    }\r\n\r\n    public addProperty(value: string, type: string): any {\r\n        if (!this[type] || !value || value.length === 0) {\r\n            return;\r\n        }\r\n\r\n        let extractedValue;\r\n        if (type === 'attributes') {\r\n            extractedValue = new Attribute(value);\r\n        }\r\n        else if (type === 'methods') {\r\n            extractedValue = new Method(value);\r\n        }\r\n\r\n        for (let valueOfType of this[type]) {\r\n            if (valueOfType.toString() === extractedValue.toString()) {\r\n                alert(extractedValue.toString() + ' already exists.');\r\n                extractedValue = undefined;\r\n                return;\r\n            }\r\n        }\r\n\r\n        this[type].push(extractedValue);\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        return extractedValue;\r\n    }\r\n\r\n    public addAttribute(value: string): Attribute {\r\n        return this.addProperty(value, 'attributes');\r\n    }\r\n\r\n    public addAttributeObj(attr: Attribute): Attribute[] {\r\n        this.attributes.push(attr);\r\n        return this.getAttributes();\r\n    }\r\n\r\n    public addMethodObj(method: Method): Method[] {\r\n        this.methods.push(method);\r\n        return this.getMethods();\r\n    }\r\n\r\n    public addMethod(value: string): Method {\r\n        return this.addProperty(value, 'methods');\r\n    }\r\n\r\n    public removeAttribute(attr: Attribute): void {\r\n        let idx = this.attributes.indexOf(attr);\r\n        this.attributes.splice(idx, 1);\r\n    }\r\n\r\n    public removeMethod(method: Method): void {\r\n        let idx = this.methods.indexOf(method);\r\n        this.methods.splice(idx, 1);\r\n    }\r\n\r\n    public removeProperty(property: ClazzProperty): void {\r\n\r\n        if (property instanceof Attribute) {\r\n            this.removeAttribute(<Attribute>property);\r\n        }\r\n\r\n        if (property instanceof Method) {\r\n            this.removeMethod(<Method>property);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n        let hasSizeChanged: [boolean, Size] = this.hasSizeChanged();\r\n\r\n        if (drawOnlyIfSizeChanged) {\r\n            if (!hasSizeChanged[0]) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n\r\n        // redraw only this clazz\r\n        this.$owner.$view.removeChild(this.$view);\r\n        let newSvg = this.getSVG();\r\n        this.$owner.$view.appendChild(newSvg);\r\n        this.$view = newSvg;\r\n        EventBus.register(this, newSvg);\r\n\r\n        this.redrawEdges();\r\n    }\r\n\r\n    public hasSizeChanged(): [boolean, Size] {\r\n        let oldSize = { width: this.getSize().x, height: this.getSize().y };\r\n        let newSize = this.reCalcSize();\r\n\r\n        // size doenst changed, so nothing to redraw\r\n        if (oldSize.width === newSize.width && oldSize.height === newSize.height) {\r\n            return [false, newSize];\r\n        }\r\n\r\n        return [true, newSize];\r\n    }\r\n\r\n    public updateLabel(newLabel: string): void {\r\n        if (this.$labelView) {\r\n            this.$labelView.textContent = newLabel;\r\n        }\r\n\r\n        // update label in all edges\r\n        this.$edges.forEach(edge => {\r\n            if (this.id === edge.$sNode.id) {\r\n                edge.source = newLabel;\r\n            }\r\n            else if (this.id === edge.$tNode.id) {\r\n                edge.target = newLabel;\r\n            }\r\n        });\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        this.reDraw(true);\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.modifier = modifier;\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reCalcSize(): Size {\r\n        // label\r\n        let newWidth = 150;\r\n        newWidth = Math.max(newWidth, Util.sizeOf(this.id).width + 30);\r\n\r\n        // attributes\r\n        this.attributes.forEach(attrEl => {\r\n\r\n            let widthOfAttr;\r\n            if (attrEl.$view) {\r\n                widthOfAttr = attrEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfAttr = Util.sizeOf(attrEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfAttr + 15);\r\n        });\r\n\r\n        // methods\r\n        this.methods.forEach(methodEl => {\r\n            let widthOfMethod;\r\n            if (methodEl.$view) {\r\n                widthOfMethod = methodEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfMethod = Util.sizeOf(methodEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfMethod + 15);\r\n        });\r\n\r\n        // TODO: height has to be calculated by font-size\r\n        this.getSize().x = newWidth;\r\n        this.getSize().y = this.$labelHeight + ((this.attributes.length + this.methods.length) * this.$attrHeight)\r\n            + this.$attrHeight;\r\n\r\n        let newSize = { width: newWidth, height: this.getSize().y };\r\n\r\n        return newSize;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    private getModernStyle(): Element {\r\n        let width, height, id, size, z, item, rect, g, board, styleHeader, headerHeight, x, y;\r\n        board = this.getRoot()['board'];\r\n        styleHeader = Util.getStyle('ClazzHeader');\r\n        headerHeight = styleHeader.getNumber('height');\r\n        width = 0;\r\n        height = 10 + headerHeight;\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].getType().toLowerCase() === 'objectdiagram') {\r\n            id = this.id.charAt(0).toLowerCase() + this.id.slice(1);\r\n            item = 'Object';\r\n        } else {\r\n            id = this.id;\r\n            item = 'Class';\r\n            if (this['counter']) {\r\n                id += ' (' + this['counter'] + ')';\r\n            }\r\n        }\r\n        g = Util.create({tag: 'g', model: this});\r\n        size = Util.sizeOf(id, this);\r\n        width = Math.max(width, size.width);\r\n        if (this.attributes && this.attributes.length > 0) {\r\n            height = height + this.attributes.length * 25;\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.attributes[z], this).width);\r\n            }\r\n        } else {\r\n            height += 20;\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            height = height + this.methods.length * 25;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.methods[z], this).width);\r\n            }\r\n        }\r\n        width += 20;\r\n\r\n        let pos = this.getPos();\r\n        y = pos.y;\r\n        x = pos.x;\r\n\r\n        rect = {\r\n            tag: 'rect',\r\n            'width': width,\r\n            'height': height,\r\n            'x': x,\r\n            'y': y,\r\n            'class': item + ' draggable',\r\n            'fill': 'none'\r\n        };\r\n        g.appendChild(Util.create(rect));\r\n        g.appendChild(Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            'x': x,\r\n            'y': y,\r\n            height: headerHeight,\r\n            'width': width,\r\n            'class': 'ClazzHeader'\r\n        }));\r\n\r\n        item = Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'class': 'InfoText',\r\n            'text-anchor': 'right',\r\n            'x': x + width / 2 - size.width / 2,\r\n            'y': y + (headerHeight / 2) + (size.height / 2),\r\n            'width': size.width\r\n        });\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].type.toLowerCase() === 'objectdiagram') {\r\n            item.setAttribute('text-decoration', 'underline');\r\n        }\r\n        item.appendChild(document.createTextNode(id));\r\n\r\n        g.appendChild(item);\r\n        g.appendChild(Util.create({\r\n            tag: 'line',\r\n            x1: x,\r\n            y1: y + headerHeight,\r\n            x2: x + width,\r\n            y2: y + headerHeight,\r\n            stroke: '#000'\r\n        }));\r\n        y += headerHeight + 20;\r\n\r\n        if (this.attributes) {\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': (x + 10),\r\n                    'y': y,\r\n                    value: this.attributes[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n            if (this.attributes.length > 0) {\r\n                y -= 10;\r\n            }\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            g.appendChild(Util.create({tag: 'line', x1: x, y1: y, x2: x + width, y2: y, stroke: '#000'}));\r\n            y += 20;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': x + 10,\r\n                    'y': y,\r\n                    value: this.methods[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n        }\r\n        return g;\r\n    }\r\n}\r\n","import {Util} from '../../util';\r\nimport {DiagramElement} from '../BaseElements';\r\nimport Data from '../../Data';\r\n\r\nexport default class ClazzProperty extends DiagramElement {\r\n\r\n    // Public (+)\r\n    // Private (-)\r\n    // Protected (#)\r\n    // Package (~)\r\n\r\n    public $data = new Data();\r\n//    public modifier: string = '+';\r\n//    public name: string;\r\n//    public type: string;\r\n//    public value: string;\r\n\r\n    constructor(data: any | JSON) {\r\n        super();\r\n        this.$data.setValue('modifier', '+');\r\n        this.$data.setValue('name', null);\r\n        this.$data.setValue('type', null);\r\n        this.$data.setValue('value', null);\r\n        this.extractData(data);\r\n    }\r\n\r\n    public update(data: any | JSON): void {\r\n        this.extractData(data);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.$data.setValue('modifier', modifier);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateType(type: string): void {\r\n        this.$data.setValue('type', type);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateValue(value: string): void {\r\n        this.$data.setValue('value', value);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateName(name: string): void {\r\n        this.$data.setValue('name', name);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public getName(): string {\r\n        return this.$data.getValue('name');\r\n    }\r\n\r\n    public getModifier(): string {\r\n        return this.$data.getValue('modifier');\r\n    }\r\n\r\n    public getType(): string {\r\n        return this.$data.getValue('type');\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let attrText = {\r\n            tag: 'text',\r\n            'text-anchor': 'start',\r\n            'alignment-baseline': 'middle',\r\n        };\r\n\r\n        let attrSvg = Util.createShape(attrText);\r\n        attrSvg.textContent = this.toString();\r\n\r\n        this.$view = attrSvg;\r\n\r\n        return attrSvg;\r\n    }\r\n\r\n    public toString(): string {\r\n        let value = this.$data.getValue('value');\r\n        let result = this.$data.getValue('modifier') + ' ';\r\n        result += this.$data.getValue('name') + ' : ';\r\n        result += this.$data.getValue('type');\r\n        if (value && value.length > 0) {\r\n            result += ' = ' + this.$data.getValue('value');\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.$data.setValue('type', data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.$data.setValue('name', data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.$data.setValue('modifier', data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n\r\n            // e.g. name : string or name:string\r\n            let dataSplitted = data.split(':');\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                let name;\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.$data.setValue('modifier', firstChar);\r\n                    name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                }\r\n                else {\r\n                    name = modifierAndNameSplitted;\r\n                }\r\n                // delete whitespaces in name\r\n                name = name.replace(/ /g, '_');\r\n\r\n                this.$data.setValue('name', name);\r\n                let type = dataSplitted[1].trim() || 'String';\r\n\r\n                // if the type was entered with a small begin letter\r\n                if (type.toLowerCase() === 'string') {\r\n                    type = 'String';\r\n                }\r\n                // delete whitespaces in type\r\n                type = type.replace(/ /g, '_');\r\n                this.$data.setValue('type',  type);\r\n            } else {\r\n                dataSplitted = data.split('=');\r\n                if (dataSplitted && dataSplitted.length === 2) {\r\n                    // modifer (and or) name\r\n                    let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                    // first char is +, - or #\r\n                    let firstChar = modifierAndNameSplitted[0];\r\n                    let name;\r\n                    if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                        this.$data.setValue('modifier', firstChar);\r\n                        name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                    }\r\n                    else {\r\n                        name = modifierAndNameSplitted;\r\n                    }\r\n                    // delete whitespaces in name\r\n                    name = name.replace(/ /g, '_');\r\n\r\n                    this.$data.setValue('name', name);\r\n                    let value = dataSplitted[1].trim() || '\"\"';\r\n                    this.$data.setValue('value', value);\r\n                    this.$data.setValue('type', typeof value);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected updateTextOfView() {\r\n        if (this.$view) {\r\n            this.$view.textContent = this.toString();\r\n        }\r\n        if (this.$owner) {\r\n            Util.saveToLocalStorage(this.$owner.$owner);\r\n        }\r\n    }\r\n}\r\n","import {Node} from \"./Node\";\r\n/**\r\n * Created by Stefan on 29.03.2017.\r\n */\r\n\r\nexport class Dice extends Node {\r\n    private value: number;\r\n    private max: number = 6;\r\n    private $animation: SVGElement;\r\n    private $zoom: number = 0.6;\r\n    private $border: number = 0.2;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super(data);\r\n        this.withSize(100, 100);\r\n    }\r\n\r\n    public setNumber(number: number) {\r\n        this.value = number;\r\n        this.refresh();\r\n    }\r\n\r\n    public refresh() {\r\n        if (this.$view) {\r\n            this.reset();\r\n            let group = this.createPointValue();\r\n            if (group) {\r\n                this.$view.appendChild(group);\r\n            }\r\n        }\r\n    }\r\n\r\n    public reset() {\r\n        if (this.$view) {\r\n            while (this.$view.children.length > 1) {\r\n                if(this.$view.children.item(this.$view.children.length - 1).tagName!== \"animateTransform\") {\r\n                    console.log(this.$view.children.item(this.$view.children.length - 1));\r\n                    this.$view.removeChild(this.$view.children.item(this.$view.children.length - 1));\r\n                }else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let dice: SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x + size.x * this.$border,\r\n            y: pos.y + size.y * this.$border,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y * this.$zoom,\r\n            width: size.x * this.$zoom,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        dice.appendChild(this.createShape(attr));\r\n\r\n        let group = this.createPointValue();\r\n        if (group) {\r\n            dice.appendChild(group);\r\n        }\r\n\r\n        this.$view = dice;\r\n        return dice;\r\n    }\r\n\r\n    public animationTimeout(newValues: number[]) {\r\n        if(newValues.length>0) {\r\n            let newValue = newValues.shift();\r\n            this.setNumber(newValue);\r\n            let that=this;\r\n            setTimeout(function() {that.animationTimeout(newValues)}, 100);\r\n        }\r\n    }\r\n\r\n    public roll() {\r\n        this.startAnimation();\r\n        let values:number[]=[];\r\n        let i:number;\r\n        for(i=1;i<this.max;i++) {\r\n            values.push(i);\r\n        }\r\n        for(i=this.max;i>0;i--) {\r\n            values.push(i);\r\n        }\r\n        let that=this;\r\n        values.push( Math.floor(Math.random() * this.max)+1 );\r\n        setTimeout(function() {that.animationTimeout(values)}, 100);\r\n    }\r\n    public startAnimation() {\r\n        if(this.$animation) {\r\n            return;\r\n        }\r\n        let center = this.getPos().x+this.getSize().x /2;\r\n        const attr = {\r\n            tag: 'animateTransform',\r\n            attributeType: \"xml\",\r\n            attributeName:\"transform\",\r\n            type:\"rotate\",\r\n            dur: \"1s\",\r\n            repeatCount:\"1\",\r\n            from:\"0 \"+center+\" \"+center,\r\n            to:\"360 \"+center+\" \"+center\r\n        };\r\n        this.$animation = <SVGElement>this.createShape(attr);\r\n        this.$view.appendChild(this.$animation);\r\n    }\r\n\r\n    public stopAnimation() {\r\n        if(this.$animation) {\r\n            this.$view.removeChild(this.$animation);\r\n            this.$animation = null;\r\n        }\r\n    }\r\n\r\n    public createPointValue() :SVGElement {\r\n        if (this.value == 1) {\r\n           return this.getCircle(2, 2);\r\n        } else if (this.value == 2) {\r\n            return this.getCircle(1, 1, 3, 3);\r\n        } else if (this.value == 3) {\r\n            return this.getCircle(1, 1, 2, 2, 3, 3);\r\n        } else if (this.value == 4) {\r\n            return this.getCircle(1, 1, 1, 3, 3, 1, 3, 3);\r\n        } else if (this.value == 5) {\r\n            return this.getCircle(1, 1, 1, 3, 2, 2, 3, 1, 3, 3);\r\n        } else if (this.value == 6) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 7) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 2, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 8) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 9) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private getCircle(...values:number[]) : SVGElement {\r\n        if (values.length % 2 > 0) {\r\n            return null;\r\n        }\r\n        let size = this.getSize();\r\n        let pos = this.getPos();\r\n        //FIXME let group:SVGElement = <SVGElement>this.createShape({tag: 'g', transform: 'translate(0 0)', height: size.y, width: size.x});\r\n        let group:SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n\r\n\r\n        for (let i: number = 0; i < values.length; i += 2) {\r\n            group.appendChild(this.createCircle(values[i], values[i + 1]));\r\n        }\r\n        return group;\r\n    }\r\n    private createCircle(x:number, y:number) : SVGElement {\r\n        let size = this.getSize();\r\n        let radius = size.x / 10*this.$zoom;\r\n        let border = size.y*this.$border;\r\n        let zoom = size.y*this.$zoom;\r\n        const attr = {\r\n            tag: 'circle',\r\n            r : radius,\r\n            cx: (size.x*this.$zoom * x) / 4 + border,\r\n            cy: (size.y*this.$zoom * y) / 4 + border,\r\n            stroke:\"black\",\r\n            \"stroke-width\":\"3\",\r\n            fill:\"red\",\r\n            style: 'fill:black;stroke:black;stroke-width:2'\r\n        };\r\n        return <SVGElement>this.createShape(attr);\r\n    }\r\n}","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\n\r\nexport class Div extends Control {\r\n    private className: string;\r\n\r\n    public load(data:JSON|any): any {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = <string>data;\r\n        } else {\r\n            id = data.id;\r\n            this.className = data.class;\r\n            this.property = data.property;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let div: HTMLElement = document.getElementById(id);\r\n\r\n        if (!this.property) {\r\n            // if(inputField){\r\n            // TODO disuss how to decide, which property we should listen on...\r\n            // this.property = id;\r\n            this.property = div.getAttribute('Property');\r\n            // }\r\n        }\r\n\r\n        if (div instanceof HTMLDivElement) {\r\n            this.$view = div;\r\n        } else {\r\n            if (!div) {\r\n                this.$view = document.createElement('div');\r\n                this.$view.setAttribute('id', this.id);\r\n                this.$view.setAttribute('property', this.property);\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists+\r\n        if (data.hasOwnProperty('property')) {\r\n            this.setProperty(data['property']);\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        this.$model = entity;\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.className || entity.hasProperty(this.className)) {\r\n                if (entity.id === this.property.split('.')[0]) {\r\n                    entity.addListener(this, this.className);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        this.$view.innerHTML = <string>newValue;\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Form extends Control {\r\n    // private applyingChange: boolean = false;\r\n    private children: Object = {};\r\n    // private property: string = \"\";\r\n\r\n    /**\r\n     * Data should look like the following json:\r\n     *\r\n     * <pre>{\r\n     *      id: \"t1\",\r\n     *      control: \"form\",\r\n     *      elements: [\r\n     *          {id: \"inputField1\", property: \"talk\"},\r\n     *          {id: \"inputField2\", property: \"room\"}\r\n     *      ]\r\n     * }</pre>\r\n     * @param data\r\n     */\r\n    public load(data: any) {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let form: HTMLElement = document.getElementById(id);\r\n\r\n        if (form instanceof HTMLFormElement) {\r\n            this.$view = form;\r\n            if (this.$view.hasAttribute('property')) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            if (!form) {\r\n                this.$view = document.createElement('form');\r\n                this.$view.setAttribute('id', this.id);\r\n\r\n                if (data.hasOwnProperty('property')) {\r\n                    this.property = data['property'];\r\n                }\r\n\r\n                // add all the attributes to the form element\r\n                for (let attr in data) {\r\n                    if (data.hasOwnProperty(attr) === false) {\r\n                        continue;\r\n                    }\r\n                    if (attr === 'elements') {\r\n                        continue;\r\n                    }\r\n                    this.$view.setAttribute(attr, data[attr]);\r\n                }\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists\r\n        let objId = this.property;\r\n        let hasItem = this.$owner.hasItem(objId);\r\n        if (hasItem) {\r\n            let item = this.$owner.getItem(objId);\r\n            item.addListener(this);\r\n            this.$model = item;\r\n        }\r\n\r\n        // now create all the sub input controls\r\n        for (let field of data.elements) {\r\n            // this.createField(field);\r\n            if (field.hasOwnProperty('property')) {\r\n                let property = field['property'];\r\n                property = this.property + '.' + property;\r\n                field['property'] = property;\r\n            }\r\n            if (!field.hasOwnProperty('class')) {\r\n                field['class'] = 'input';\r\n            }\r\n\r\n            // let the Bridge load the subControl\r\n            let control: Control = this.$owner.load(field, this);\r\n\r\n            // add subControl to children\r\n            this.children[control.getId()] = control;\r\n        }\r\n\r\n    }\r\n\r\n    public setProperty(id: string): void {\r\n        this.property = id;\r\n        let keys: string[] = Object.keys(this.children);\r\n        for (let k = 0; k < keys.length; k++) {\r\n            let key = keys[k];\r\n            let childControl = this.children[key];\r\n            // only set Property, if there is a Property defined before\r\n            if (childControl.property) {\r\n                childControl.setProperty(this.property + '.' + childControl.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object,  oldValue?: Object): boolean {\r\n        if (this.$owner != null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    /**\r\n     * Here we create the form elements and put all the attributes to them in order for the Control only having to load\r\n     * the data were appending here. Alternative would be loading with the bridge and afterwards setting\r\n     * the owner to the form instead of the body..\r\n     * @param field\r\n     */\r\n    /*private createField(field: Object) {\r\n     let control = 'input';\r\n     if (field.hasOwnProperty('class')) {\r\n     control = field['class'];\r\n     }\r\n     let input = document.createElement(control);\r\n     input.setAttribute('class', control);\r\n     let id: string;\r\n     if (!field.hasOwnProperty('id')) {\r\n     // TODO: not the best solution for generating unique id's for forms...\r\n     id = this.$owner.getId();\r\n     field['id'] = id;\r\n     }\r\n     if (field.hasOwnProperty('property')) {\r\n     let property = field['property'];\r\n     property = this.id + '.' + property;\r\n     input.setAttribute('property', property);\r\n     }\r\n     for (let attr in field) {\r\n     if (attr === 'property' || attr === 'class' || !field.hasOwnProperty(attr)) {\r\n     continue;\r\n     }\r\n     input.setAttribute(attr, field[attr]);\r\n     }\r\n\r\n     this.$viewElement.appendChild(input);\r\n\r\n     let newcontrol: Control = this.$owner.load(field['id']);\r\n     this.children[newcontrol.getId()] = newcontrol;\r\n     }*/\r\n}\r\n","/**\r\n * Created by Stefan on 01.03.2017.\r\n */\r\nimport {Control} from '../../Control';\r\n\r\nexport class HTML extends Control {\r\n    constructor(data: JSON|Object|any) {\r\n        super();\r\n\r\n        let id: string;\r\n        let tag: string;\r\n\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            data = {};\r\n        } else if (data) {\r\n            id = data.id;\r\n        }\r\n        if (id) {\r\n            this.id = id;\r\n            this.$view = document.getElementById(id);\r\n        }\r\n        if (!this.$view) {\r\n            if (data) {\r\n                tag = data['tag'] || 'div';\r\n            } else {\r\n                tag = 'div';\r\n            }\r\n            this.$view = document.createElement(tag);\r\n            let parent = document.getElementsByTagName('body')[0];\r\n            parent.appendChild(this.$view);\r\n        }\r\n        if (!parent) {\r\n            return;\r\n        }\r\n        this.writeAttribute(data, this.$view);\r\n    }\r\n\r\n    private writeAttribute(properties: Object, entity?: any) {\r\n        let lowKey;\r\n        if (!entity) {\r\n            lowKey = properties['tag'] || 'div';\r\n            entity = document.createElement(lowKey);\r\n        }\r\n        for (let key in properties) {\r\n            if (!properties.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            lowKey = key.toLowerCase();\r\n            if (properties[key] === null) {\r\n                entity.setAttribute(key, '');\r\n                continue;\r\n            }\r\n\r\n            if (lowKey === 'tag' || lowKey.charAt(0) === '$' || lowKey === '$graphModel' || lowKey === 'class') {\r\n                continue;\r\n            }\r\n            if (lowKey === 'children') {\r\n                if (Array.isArray(properties[key])) {\r\n                    for (let item in properties[key]) {\r\n                        if (properties[key].hasOwnProperty(item) === false) {\r\n                            continue;\r\n                        }\r\n                        let child = this.writeAttribute(item);\r\n                        if (child) {\r\n                            entity.appendChild(child);\r\n                        }\r\n                    }\r\n                } else {\r\n                    let child = this.writeAttribute(properties[key]);\r\n                    if (child) {\r\n                        entity.appendChild(child);\r\n                    }\r\n                }\r\n                continue;\r\n            }\r\n            entity[key] = properties[key];\r\n        }\r\n        return entity;\r\n    }\r\n}\r\n","import { Point } from '../BaseElements';\r\nimport { Util } from '../../util';\r\nimport { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\n\r\nexport class InfoText extends Node {\r\n\r\n    public cardinality: string = '';\r\n    private $heightOfOneTextItem: number;\r\n    private $cardinalitySvg: Element;\r\n    private $propertySvg: Element;\r\n    private $rectBackground: Element;\r\n\r\n    constructor(info: any) {\r\n        super(info);\r\n        if (typeof (info) === 'string') {\r\n            this.id = info;\r\n        } else {\r\n            if (info.property) {\r\n                this.property = info.property;\r\n            }\r\n            if (info.cardinality) {\r\n                this.cardinality = info.cardinality;\r\n            }\r\n        }\r\n        this.$isDraggable = true;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n    }\r\n\r\n    public updateCardinality(cardinality: string): void {\r\n        this.cardinality = cardinality;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (this.$rectBackground) {\r\n            this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n            this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n        }\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((cardinality.length === 0 && this.property.length > 0) || !this.$cardinalitySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$cardinalitySvg) {\r\n            this.$cardinalitySvg.textContent = cardinality;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.property.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    public updateProperty(property: string): void {\r\n        this.property = property;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((property.length === 0 && this.cardinality.length > 0) || !this.$propertySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$propertySvg) {\r\n            this.$propertySvg.textContent = property;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.cardinality.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos: Point = this.getPos();\r\n        let group = Util.create({ tag: 'g', class: 'SVGEdgeInfo', transform: 'translate(0, 0)' });\r\n\r\n        // append rect as background for text items\r\n        this.$rectBackground = Util.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y - this.$heightOfOneTextItem + 3,\r\n            width: this.getSize().x,\r\n            height: this.getSize().y,\r\n            fill: '#DDD',\r\n            'stroke-width': 0,\r\n            rx: '5',\r\n            ry: '5'\r\n        });\r\n        group.appendChild(this.$rectBackground);\r\n\r\n        let y = pos.y;\r\n        if (this.property) {\r\n            // property\r\n            this.$propertySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$propertySvg.textContent = this.property;\r\n            group.appendChild(this.$propertySvg);\r\n\r\n            y += this.$heightOfOneTextItem;\r\n        }\r\n\r\n        // cardinality\r\n        if (this.cardinality) {\r\n            this.$cardinalitySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$cardinalitySvg.textContent = this.cardinality;\r\n            group.appendChild(this.$cardinalitySvg);\r\n        }\r\n\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        let cardinalityAvailable = this.cardinality && this.cardinality.length > 0;\r\n        let propertyAvailable = this.property && this.property.length > 0;\r\n\r\n        return !propertyAvailable && !cardinalityAvailable;\r\n    }\r\n\r\n    public redrawFromEdge(newPos: Point): void {\r\n\r\n        if (!newPos) {\r\n            return;\r\n        }\r\n\r\n        let oldPos = this.getPos();\r\n\r\n        // get difference between new and the old position\r\n        let diffPos = new Point();\r\n        diffPos.x = newPos.x - oldPos.x;\r\n        diffPos.y = newPos.y - oldPos.y;\r\n\r\n        // get translate information\r\n        let translation = this.$view.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        let sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        // set new traslation values\r\n        let newTransX = (sx + diffPos.x);\r\n        let newTransY = (sy + diffPos.y);\r\n        this.$view.setAttributeNS(null, 'transform', 'translate(' + newTransX + ' ' + newTransY + ')');\r\n\r\n        // set new position of svg\r\n        this.getPos().x = newPos.x;\r\n        this.getPos().y = newPos.y;\r\n    }\r\n\r\n    public getText(): string {\r\n        let infoTxt: string = '';\r\n\r\n        if (this.property) {\r\n            infoTxt = this.property;\r\n        }\r\n        if (this.cardinality) {\r\n            if (infoTxt.length > 0) {\r\n                infoTxt += '\\n';\r\n            }\r\n            infoTxt += this.cardinality;\r\n        }\r\n\r\n        return infoTxt;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    private calcSize(): Point {\r\n        let text: string = this.getText();\r\n        let items: Array<string> = text.split('\\n');\r\n\r\n        let maxSize = new Point(0, 0);\r\n        if (text.length === 0) {\r\n            return maxSize;\r\n        }\r\n\r\n        for (let i = 0; i < items.length; i += 1) {\r\n            // calculate size\r\n            let sizeOfText: ClientRect = Util.sizeOf(items[i]);\r\n            maxSize.x = Math.max(maxSize.x, sizeOfText.width);\r\n            maxSize.y += sizeOfText.height;\r\n\r\n            this.$heightOfOneTextItem = sizeOfText.height;\r\n        }\r\n\r\n        return maxSize;\r\n    }\r\n    private resetAllSvgElements() {\r\n        this.$cardinalitySvg = undefined;\r\n        this.$view = undefined;\r\n        this.$propertySvg = undefined;\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\nimport {PropertyBinder} from '../../PropertyBinder';\r\n\r\nexport class Input extends Control {\r\n    private type: string;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data = super.initViewDataProperties(oldData);\r\n        if ('checkbox' === this.type || 'radio' === this.type) {\r\n            data.addFrom('checked', oldData);\r\n        }\r\n        data.addFrom('value', oldData);\r\n        data.addFrom('type', oldData);\r\n        return data;\r\n    }\r\n\r\n    public load(data: any) {\r\n        let id: string;\r\n        let inputField: HTMLElement;\r\n        let useData: boolean;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            useData = true;\r\n        } else {\r\n            id = data.id;\r\n            if (data.type) {\r\n                this.setType(data['type']);\r\n            } else {\r\n                this.setType('text');\r\n            }\r\n            if (data.hasOwnProperty('property')) {\r\n                this.setProperty(data['property']);\r\n            }\r\n            useData = false;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n\r\n        inputField = document.getElementById(id);\r\n\r\n        if (useData) {\r\n            if (inputField) {\r\n                // TODO disuss how to decide, which property we should listen on...\r\n                // this.property = id;\r\n                if (inputField.hasAttribute('Property')) {\r\n                    this.setProperty(inputField.getAttribute('Property'));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (inputField instanceof HTMLInputElement) {\r\n            this.setView(inputField);\r\n            this.type = inputField.type;\r\n            // useData = false;\r\n        } else {\r\n            if (!inputField) {\r\n                this.setView(document.createElement('input'));\r\n                this.$viewData = this.initViewDataProperties(this.$viewData);\r\n                // append viewListener\r\n                // this.$view.addEventListener('change', this.$viewListener);\r\n                if (typeof(data) !== 'string') {\r\n                    for (let attr in data) {\r\n                        if (data.hasOwnProperty(attr) === false) {\r\n                            continue;\r\n                        }\r\n                        // this.$view[attr] = data[attr];\r\n                        this.$viewData.setValue(attr, data[attr]);\r\n                    }\r\n                } else {\r\n                    if (this.type) {\r\n                        this.$view.setAttribute('type', this.type);\r\n                    }\r\n                    if (data.hasOwnProperty('class')) {\r\n                        this.$view.setAttribute('class', data['class']);\r\n                    }\r\n                    this.$view.setAttribute('id', this.id);\r\n                    this.$view.setAttribute('property', this.property);\r\n                }\r\n\r\n                if (data.value) {\r\n                    // if theres a value at the control, we want to change the model to the new value\r\n                    if (this.$model) {\r\n                        this.$model.setValue(this.lastProperty, data.value);\r\n                    }\r\n                }\r\n                if (this.$model) {\r\n                    PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                }\r\n\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (this.property && entity) {\r\n            if (entity.id === this.property.split('.')[0]) {\r\n                this.$model = entity;\r\n                PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                // entity.addListener(this, this.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n    // TODO FIXME protected updateElement(property: string, value: string) {\r\n    //     if (this.$view instanceof HTMLInputElement) {\r\n    //         if (value != null) {\r\n    //             if(property == this.lastProperty) {\r\n    //                 (<HTMLInputElement>this.$view)[this.getStandardProperty()] = value;\r\n    //             } else {\r\n    //                 // this.getRoot().setValue(this, property, value, (<HTMLInputElement>this.$view)[property]);\r\n    //                 (<HTMLInputElement>this.$view)[property] = value;\r\n    //             }\r\n    //         } else {\r\n    //             delete (<HTMLInputElement>this.$view)[property];\r\n    //         }\r\n    //     }\r\n    // }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            super.controlChanged(ev);\r\n        }\r\n// <<<<<<< HEAD\r\n//             let newVal = element[this.getStandardProperty()];\r\n//             if (this.isKeyOnly()) {\r\n//                 // we expect, element[this.lastProperty] to be boolean:\r\n//                 if (!newVal) {\r\n//                     newVal = null;\r\n//                 }\r\n//             } else {\r\n//             }\r\n        // let $graphModel;\r\n        // let value;\r\n        /*if (this.$graphModel) {\r\n            $graphModel = this.$graphModel;\r\n            value = this.$graphModel.getValue(this.lastProperty);\r\n        } else {\r\n            $graphModel = this;\r\n            if (this.$view) {\r\n                value = this.$view[this.lastProperty];\r\n            }\r\n        }*/\r\n        // this.$model.setValue(this.lastProperty, newVal);\r\n        // this.propertyChange(this.$graphModel,this.lastProperty, this.$graphModel.getValue(this.lastProperty), newVal);\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n// =======\r\n        // let newVal = element[this.lastProperty];\r\n        // if (this.isKeyOnly()) {\r\n        //     // we expect, element[this.lastProperty] to be boolean:\r\n        //     if (!newVal) {\r\n        //         newVal = null;\r\n        //     }\r\n        // } else {\r\n        // }\r\n        // let $graphModel;\r\n        // let value;\r\n\r\n        // $graphModel = this.getViewData();\r\n        // if (this.$graphModel) {\r\n        //     $graphModel = this.$graphModel;\r\n        //     value = this.$graphModel.getValue(this.lastProperty);\r\n        // } else {\r\n        //     $graphModel = this;\r\n        //     if (this.$view) {\r\n        //         value = this.$view[this.lastProperty];\r\n        //     }\r\n        // }\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n//            this.saveViewInData();\r\n// >>>>>>> addOldFunctions\r\n//         } else {\r\n//             console.log('value does not match the pattern...');\r\n//         }\r\n    }\r\n\r\n    public setType(type: string): void {\r\n        let oldValue: string = this.type;\r\n        if (oldValue === type) {\r\n            return;\r\n        }\r\n        if (type === 'radio') {\r\n            this.$viewData.setValue('checked', null);\r\n        } else {\r\n            this.$viewData.removeKey('checked');\r\n        }\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\n\r\nexport class Label extends Control {\r\n    public load(data: JSON): any {\r\n        this.createControl(this.$owner, data);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('label');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr === 'textContent') {\r\n                this.$view.textContent = data['textContent'];\r\n            } else {\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Method extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.updateType(data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.updateType(data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.updateType(data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n            // e.g. setName() : string or name:string\r\n            let dataSplitted = data.split(':');\r\n\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }\r\n                else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType(dataSplitted[1].trim() || 'void');\r\n            }\r\n            // set default return type of void\r\n            else {\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = data.trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }  else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType('void');\r\n            }\r\n        }\r\n\r\n        if (Util.includes(this.$data.getValue('name'), '(') && !Util.includes(this.$data.getValue('name'), ')') === false) {\r\n            this.$data.setValue('name', this.$data.getValue('name') + '()');\r\n        }\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\nimport {Association} from '../edges';\r\nimport { GraphModel } from '..';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\n\r\nexport class Node extends DiagramElement {\r\n    public $edges: Association[] = [];\r\n    public $minWidth: number = 150;\r\n    public $minheight: number = 25;\r\n    public $defaulEdgeType: string;\r\n\r\n    constructor(data: JSON|string|Object|any) {\r\n        super();\r\n\r\n        // default size\r\n        this.withSize(this.$minWidth, this.$minheight);\r\n\r\n        if (data) {\r\n            if (data['x'] && data['y']) {\r\n                this.withPos(data['x'], data['y']);\r\n            }\r\n            if (data['width'] || data['height']) {\r\n                this.withSize(data['width'], data['height']);\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos = this.getPos();\r\n        const size = this.getSize();\r\n\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x - size.x / 2,\r\n            y: pos.y - size.y / 2,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y,\r\n            width: size.x,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        const shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'middle',\r\n            'font-family': 'Verdana',\r\n            'font-size': '14',\r\n            fill: 'black'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = this.id;\r\n\r\n        let group = this.createShape({tag: 'g', id: this.id});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public copy(): Node {\r\n        let copy: Node;\r\n        // create new id\r\n        let model = <GraphModel>this.$owner || <GraphModel>this.getRoot();\r\n        if (model) {\r\n            let type = this.property || Node.name;\r\n            let newId = model.getNewId(type);\r\n            copy = <Node>model.createElement(type, newId, null);\r\n            copy.withSize(this.getSize().x, this.getSize().y);\r\n            copy.$owner = model;\r\n        } else {\r\n            copy.id = this.id + '-copy';\r\n            copy.$owner = this.getRoot();\r\n        }\r\n        return copy;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n// EMPTY\r\n    }\r\n    public addAttribute(value: string): Attribute {\r\n        return null;\r\n    }\r\n    public getAttributes(): Attribute[] {\r\n        return null;\r\n    }\r\n    public addMethod(value: string): Method {\r\n        return null;\r\n    }\r\n    public updateLabel(newLabel: string): void {\r\n// EMPTY\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\n\r\nexport class SO extends DiagramElement {\r\n    public static create(element: Object) {\r\n        let result: SO = new SO();\r\n        for (let key in element) {\r\n            if (element.hasOwnProperty(key) === false) {\r\n                continue;\r\n            }\r\n            result.withKeyValue(key, element[key]);\r\n\r\n        }\r\n        return result;\r\n    }\r\n\r\n    public withKeyValue(key: string, value: any): SO {\r\n        if (key === 'typ') {\r\n            this.property = value;\r\n        } else if (key === 'x') {\r\n            this.withPos(value, null);\r\n        } else if (key === 'y') {\r\n            this.withPos(null, value);\r\n        } else if (key === 'width') {\r\n            this.withSize(value, null);\r\n        } else if (key === 'height') {\r\n            this.withSize(null, value);\r\n        } else {\r\n            this[key] = value;\r\n        }\r\n        return this;\r\n    }\r\n}\r\n","import {Point} from '../BaseElements';\r\nimport {Node} from './Node';\r\n\r\nexport class StereoType extends Node {\r\n\r\n    protected stereoType: string;\r\n\r\n    constructor (type: string, x: number, y: number) {\r\n        super('');\r\n        this.withPos(x, y);\r\n        this.setStereoType(type);\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        let pos: Point = this.getPos();\r\n        let size: Point = this.getSize();\r\n\r\n               // = = = STEREOTYPE = = =\r\n        let stereoType = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y - this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': 10,\r\n            'font-weight': 'bold',\r\n            fill: 'black'\r\n        });\r\n        stereoType.textContent = this.stereoType;\r\n\r\n        this.$view = stereoType;\r\n        return stereoType;\r\n    }\r\n\r\n    public setStereoType(value: string): void {\r\n        this.stereoType = '<<' + value + '>>';\r\n    }\r\n\r\n    public getStereoType(): string {\r\n        return this.stereoType;\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { SO } from './SO';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport { Util } from '../../util';\r\n\r\nexport class Symbol extends Node {\r\n    public $heightMax: number = 0;\r\n    public $heightMin: number = 0;\r\n\r\n    constructor(typ: string) {\r\n        super(typ);\r\n    }\r\n\r\n    public draw(typ?: string): SVGElement {\r\n        return SymbolLibary.draw(this);\r\n    }\r\n}\r\n\r\n// \t\t\t\t###################################################### SymbolLibary ####################################################################################\r\n// Example Items\r\n// {tag: 'path', d: ''}\r\n// {tag: 'rect', width:46, height:34}\r\n// {tag: 'ellipse', width:23, height:4}\r\n// {tag: 'line', x1:650, y1:-286, x2:650, y2:-252}\r\n// {tag: 'circle', r:5, x:12, y:0}\r\n// {tag: 'image', height: 30, width: 50, content$src: hallo}\r\n// {tag: 'text', 'text-anchor': 'left', x: '10'}\r\nexport class SymbolLibary {\r\n\r\n    public static drawSVG(node: any): SVGSVGElement {\r\n        // const lib = new SymbolLibary();\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            const parent = SO.create(node);\r\n            parent['property'] = 'SVG';\r\n            symbol = fn(parent);\r\n            // symbol = fn.apply(lib, parent);\r\n\r\n            return SymbolLibary.createGroup(parent, symbol);\r\n        }\r\n        return symbol;\r\n    }\r\n\r\n    public static draw(node: any, parent?: Object): SVGElement {\r\n        // Node is Symbol or simple Object\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            if (!(node instanceof DiagramElement)) {\r\n                node = SO.create(node);\r\n                if (!node.property) {\r\n                    node.property = 'SVG';\r\n                }\r\n            }\r\n            symbol = fn.apply(this, [node]);\r\n            if (!parent) {\r\n                return SymbolLibary.createGroup(node, symbol);\r\n            }\r\n            return SymbolLibary.createGroup(node, symbol);\r\n        } else if (node.property) {\r\n            symbol = new Symbol(node.property);\r\n            symbol.init(node);\r\n            let pos = node.getPos();\r\n            let size = node.getSize();\r\n            symbol.withPos(pos.x, pos.y);\r\n            symbol.withSize(size.x, size.y);\r\n            symbol['value'] = node['value'];\r\n            parent = node['$parent'];\r\n            return SymbolLibary.draw(symbol, parent);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public static upFirstChar(txt: string): string {\r\n        return txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase();\r\n    }\r\n\r\n    public static isSymbolName(typ: string): boolean {\r\n        let fn = SymbolLibary['draw' + SymbolLibary.upFirstChar(typ)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static isSymbol(node: Symbol) {\r\n        let fn = SymbolLibary[SymbolLibary.getName(node)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static getName(node: any): string {\r\n        if (node['type']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['type']);\r\n        }\r\n        if (node.property) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node.property);\r\n        }\r\n        if (node['src']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['src']);\r\n        }\r\n        return 'drawNode';\r\n    }\r\n\r\n    /*FIXME   public static createImage(node: Symbol, $graphModel:Node) {\r\n           let n, img: HTMLElement;\r\n           // node.$graphModel = node;\r\n           if (SymbolLibary.isSymbol(node)) {\r\n               return SymbolLibary.draw(null, node);\r\n           }\r\n           n = {tag: 'img', $graphModel: node, src: node['src']};\r\n           let size = node.getSize();\r\n           if (size.isEmpty() === false) {\r\n               n['width'] = size.x;\r\n               n['height'] = size.y;\r\n           } else {\r\n               n['xmlns'] = 'http://www.w3.org/1999/xhtml';\r\n           }\r\n           img = Util.create(n);\r\n           if (size.isEmpty()) {\r\n               $graphModel.appendImage(img);\r\n               return null;\r\n           }\r\n           return img;\r\n       }*/\r\n\r\n    public static createGroup(node: DiagramElement, group: any) {\r\n        let func, y: number, z: number, box, item: Element, transform, i, offsetX = 0, offsetY = 0;\r\n        let svg: any;\r\n        if (node.property.toUpperCase() === 'HTML') {\r\n            let so = {\r\n                tag: 'svg',\r\n                style: { left: (group.x | 0) + node.getPos().x, top: (group.y | 0) + node.getPos().y, position: 'absolute' }\r\n            };\r\n            if (node['transform']) {\r\n                so['transform'] = node['transform'];\r\n            }\r\n            svg = Util.create(so);\r\n        } else {\r\n            svg = Util.create({ tag: 'g' });\r\n            transform = 'translate(' + group.getPos().x + ' ' + group.getPos().y + ')';\r\n            if (group.scale) {\r\n                transform += ' scale(' + group.scale + ')';\r\n            }\r\n            if (group.rotate) {\r\n                transform += ' rotate(' + group.rotate + ')';\r\n            }\r\n            svg.setAttribute('transform', transform);\r\n            if (group['id']) {\r\n                svg.id = group['id'];\r\n            }\r\n        }\r\n\r\n        if (node['tooltip']) {\r\n            const tooltipTitleAttr = {\r\n                tag: 'title'\r\n            };\r\n            let tooltipTitle = Util.createShape(tooltipTitleAttr);\r\n            tooltipTitle.textContent = node['tooltip'];\r\n            svg.appendChild(tooltipTitle);\r\n        }\r\n\r\n        if (node['background']) {\r\n            const attrCircle = {\r\n                tag: 'circle',\r\n                cx: 20,\r\n                cy: 20,\r\n                r: 17,\r\n                stroke: '#888',\r\n                'stroke-width': 0,\r\n                fill: '#DDD'\r\n            };\r\n            svg.appendChild(Util.create(attrCircle));\r\n        }\r\n\r\n        for (i = 0; i < group.items.length; i += 1) {\r\n            svg.appendChild(Util.create(group.items[i]));\r\n        }\r\n        let elements = node['elements'];\r\n        Util.setSize(svg, group.width + node.getSize().x, group.height + node.getSize().y);\r\n        node['$heightMin'] = node.getSize().y;\r\n        if (elements) {\r\n            for (i = 0; i < elements.length; i += 1) {\r\n                if (!elements[i] && elements[i].length < 1) {\r\n                    elements.splice(i, 1);\r\n                    i -= 1;\r\n                }\r\n            }\r\n            box = Util.create({ tag: 'g' });\r\n            // Calculate new Height\r\n            let c: number;\r\n            z = 0;\r\n            for (c = 0; c < elements.length; c += 1) {\r\n                if (typeof elements[c] === 'string') {\r\n                    z += 1;\r\n                } else {\r\n                    z += elements[c].length;\r\n                }\r\n            }\r\n            z = z * 25 + 6;\r\n            box.appendChild(Util.create({\r\n                tag: 'rect',\r\n                rx: 0,\r\n                x: offsetX,\r\n                y: (offsetY + 28),\r\n                width: 70,\r\n                height: z,\r\n                stroke: '#000',\r\n                fill: '#fff',\r\n                opacity: '0.7'\r\n            }));\r\n            node['$heightMax'] = z + node['$heightMin'];\r\n\r\n            svg['elements'] = elements;\r\n            if (node['type'] === 'DropDown') {\r\n                svg['activ'] = Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': 60,\r\n                    'x': (10 + offsetX),\r\n                    'y': 20,\r\n                    value: node['activText']\r\n                });\r\n                svg.appendChild(svg.activ);\r\n            }\r\n\r\n            y = offsetY + 46;\r\n            // 46 -28 = 18\r\n\r\n            func = function (event: Event) {\r\n                if (svg.activ) {\r\n                    svg.activ.textContent = (<any>event.currentTarget).value;\r\n                }\r\n            };\r\n            let txt: string;\r\n            let textClass = 'SVGTEXT';\r\n            for (z = 0; z < elements.length; z += 1) {\r\n                if (typeof elements[z] === 'string') {\r\n                    txt = elements[z];\r\n                } else {\r\n                    item = this.addText(y, offsetX, box, elements[z][0], 'SVGTEXT');\r\n                    y += 26;\r\n                    for (c = 1; c < elements[z].length; c += 1) {\r\n                        item = this.addText(y, offsetX, box, '* ' + elements[z][c], 'SVGTEXTITEM');\r\n\r\n                        item['value'] = elements[z];\r\n                        if (node['action']) {\r\n                            item['onclick'] = node['action'];\r\n                        } else {\r\n                            item['onclick'] = func;\r\n                        }\r\n                        y += 26;\r\n                    }\r\n                    txt = elements[z];\r\n                    let subBox = Util.create({\r\n                        tag: 'rect',\r\n                        rx: 0,\r\n                        x: offsetX,\r\n                        y: (offsetY + 28),\r\n                        width: 60,\r\n                        height: z,\r\n                        stroke: '#000',\r\n                        fill: '#fff',\r\n                        opacity: '0.7'\r\n                    });\r\n                    continue;\r\n                }\r\n                // let txt = elements[z];\r\n                item = this.addText(y, offsetX, box, txt, textClass);\r\n\r\n                item['value'] = elements[z];\r\n                if (node['action']) {\r\n                    item['onclick'] = node['action'];\r\n                } else {\r\n                    item['onclick'] = func;\r\n                }\r\n                y += 26;\r\n            }\r\n            svg.choicebox = box;\r\n        }\r\n        svg.tool = node;\r\n        svg.onclick = function () {\r\n            if (svg.status === 'close') {\r\n                svg.open();\r\n            } else {\r\n                svg.close();\r\n            }\r\n        };\r\n        svg.close = function () {\r\n            if (svg.status === 'open' && svg.choicebox) {\r\n                this.removeChild(svg.choicebox);\r\n            }\r\n            svg.status = 'close';\r\n            svg.tool.$size.height = svg.tool.heightMin;\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x, g.tool.height + g.tool.y);\r\n            Util.setSize(svg, svg.tool.$size.x, svg.tool.$size.y);\r\n        };\r\n        svg.open = function () {\r\n            if (this.tagName === 'svg') {\r\n                return;\r\n            }\r\n            if (svg.status === 'close' && svg.choicebox) {\r\n                this.appendChild(svg.choicebox);\r\n            }\r\n            svg.status = 'open';\r\n            svg.tool.$size.height = svg.tool.heightMax;\r\n            Util.setSize(svg, svg.tool.width, svg.tool.height);\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x + 10, g.tool.height + g.tool.y + 10);\r\n        };\r\n        svg.close();\r\n        return svg;\r\n    }\r\n\r\n    public static addChild(parent: SVGElement, json: JSON | Element): void {\r\n        let item: Element;\r\n        if ((<any>json).offsetLeft) {\r\n            item = <Element>json;\r\n        } else {\r\n            item = Util.create(json);\r\n        }\r\n        item.setAttribute('class', 'draggable');\r\n        parent.appendChild(item);\r\n    }\r\n\r\n    public static all(node: any): void {\r\n        SymbolLibary.drawSmiley(node);\r\n        SymbolLibary.drawDatabase(node);\r\n        SymbolLibary.drawLetter(node);\r\n        SymbolLibary.drawMobilephone(node);\r\n        SymbolLibary.drawWall(node);\r\n        SymbolLibary.drawActor(node);\r\n        SymbolLibary.drawLamp(node);\r\n        SymbolLibary.drawArrow(node);\r\n        SymbolLibary.drawButton(node);\r\n        SymbolLibary.drawDropdown(node);\r\n        SymbolLibary.drawClassicon(node);\r\n        SymbolLibary.drawClassWithEdgeicon(node);\r\n    }\r\n\r\n    public static drawHamburger(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'circle', r: 10, fill: '#ccc', cx: 12, cy: 12, 'stroke-width': 1, stroke: 'black'},\r\n                { tag: 'path', d: 'M 8,7 H 16 M 8,12 H 16 M 8,17 H 16', stroke: 'black', fill: 'none' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawSmiley(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'path', d: 'm49.01774,25.64542a24.5001,24.5 0 1 1 -49.0001,0a24.5001,24.5 0 1 1 49.0001,0z', stroke: 'black', fill: 'none' }, { tag: 'path', d: 'm8,31.5c16,20 32,0.3 32,0.3' },\r\n                { tag: 'path', d: 'm19.15,20.32a1.74,2.52 0 1 1 -3.49,0a1.74,2.52 0 1 1 3.49,0z' },\r\n                { tag: 'path', d: 'm33,20.32a1.74,2.52 0 1 1 -3.48,0a1.74,2.52 0 1 1 3.48,0z' },\r\n                { tag: 'path', d: 'm5.57,31.65c3.39,0.91 4.03,-2.20 4.03,-2.20' },\r\n                { tag: 'path', d: 'm43,32c-3,0.91 -4,-2.20 -4.04,-2.20' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDatabase(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 40,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,-6.26 25.03,-6.26 25.03,0l0,25.82c0,6.26 -25.03,6.26 -25.03,0l0,-25.82z',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLetter(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 17,\r\n            items: [\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1,1l22,0l0,14l-22,0l0,-14z' },\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1.06,1.14l10.94,6.81l10.91,-6.91' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMobilephone(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 4.2 0.5 15.61 0c 2 0 3.7 1.65 3.7 3.7l 0 41.6c 0 2-1.65 3.7-3.7 3.7l-15.6 0c-2 0-3.7-1.6-3.7-3.7l 0-41.6c 0-2 1.6-3.7 3.7-3.7z',\r\n                    fill: 'none',\r\n                    stroke: 'black'\r\n                },\r\n                { tag: 'path', d: 'm 12.5 2.73a 0.5 0.5 0 1 1-1 0 0.5 0.5 0 1 1 1 0z' },\r\n                { tag: 'path', d: 'm 14 46a 2 2 0 1 1-4 0 2 2 0 1 1 4 0z' },\r\n                { tag: 'path', d: 'm 8 5 7 0' },\r\n                { tag: 'path', d: 'm 1.63 7.54 20.73 0 0 34-20.73 0z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawWall(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'path', d: 'm26,45.44l-5,3.56l-21,-9l0,-36.41l5,-3.56l20.96,9l-0,36.4z' },\r\n                {\r\n                    tag: 'path',\r\n                    stroke: 'white',\r\n                    d: 'm2.21,11l18.34,7.91m-14.46,-12.57l0,6.3m8.2,21.74l0,6.35m-8.6,-10l0,6.351m4.1,-10.67l0,6.3m4.8,-10.2l0,6.3m-8.87,-10.23l0,6.35m4.78,-10.22l0,6.35m-8,14.5l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m0,-13l0,34m-18.23,-41.84l18.3,8m0,0.11l5,-3.57'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawActor(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'line', stroke: '#000', x1: '12', y1: '10', x2: '12', y2: '30' },\r\n                { tag: 'circle', stroke: '#000', cy: '5', cx: '12', r: '5' },\r\n                { tag: 'line', stroke: '#000', y2: '18', x2: '25', y1: '18', x1: '0' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '5', y1: '30', x1: '12' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '20', y1: '30', x1: '12' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLamp(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 22.47 10.58c-6.57 0-11.89 5.17-11.89 11.54 0 2.35 0.74 4.54 2 6.36 2 4 4.36 5.63 4.42 10.4l 11.15 0c 0.12-4.9 2.5-6.8 4.43-10.4 1.39-1.5 1.8-4.5 1.8-6.4 0-6.4-5.3-11.5-11.9-11.5z',\r\n                    fill: 'white',\r\n                    stroke: 'black'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 40 8 0c 0.58 0 1 0.5 1 1 0 0.6-0.5 1-1 1l-8 0c-0.6 0-1-0.47-1-1 0-0.58 0.47-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 42.7 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 45.3 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                { tag: 'path', d: 'm 19.5 48c 0.37 0.8 1 1.3 1.9 1.7 0.6 0.3 1.5 0.3 2 0 0.8-0.3 1.4-0.8 1.9-1.8z' },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 6 37.5 4.2-4c 0.3-0.3 0.8-0.3 1 0 0.3 0.3 0.3 0.8 0 1.1l-4.2 4c-0.3 0.3-0.8 0.3-1.1 0-0.3-0.3-0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 39 37.56-4.15-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 38 23 5.8 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.8 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 1.3 23 6 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.9 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 34.75 11.2 4-4.1c 0.3-0.3 0.3-0.8 0-1-0.3-0.3-0.8-0.3-1 0l-4 4.1c-0.3 0.3-0.3 0.8 0 1 0.3 0.3 0.8 0.3 1 0z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 11.23 10-4-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 21.64 1.3 0 5.8c 0 0.4 0.3 0.8 0.8 0.8 0.4 0 0.8-0.3 0.8-0.8l 0-5.8c 0-0.4-0.3-0.8-0.8-0.8-0.4 0-0.8 0.3-0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 26.1 24.3c-0.5 0-1 0.2-1.3 0.4-1.1 0.6-2 3-2.27 3.5-0.26-0.69-1.14-2.9-2.2-3.5-0.7-0.4-2-0.7-2.5 0-0.6 0.8 0.2 2.2 0.9 2.9 1 0.9 3.9 0.9 3.9 0.9 0 0 0 0 0 0 0.54 0 2.8 0 3.7-0.9 0.7-0.7 1.5-2 0.9-2.9-0.2-0.3-0.7-0.4-1.2-0.4z'\r\n                },\r\n                { tag: 'path', d: 'm 22.5 28.57 0 10.7' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawStop(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 30,\r\n            height: 30,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: '#FFF',\r\n                    'stroke-width': '2',\r\n                    stroke: '#B00',\r\n                    d: 'm 6,6 a 14,14 0 1 0 0.06,-0.06 z m 0,0 20,21'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMin(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    d: 'm 0,0 19,0 0,19 -19,0 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 13,-0.04'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawArrow(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 10,\r\n            height: 9,\r\n            rotate: node['rotate'],\r\n            items: [\r\n                { tag: 'path', fill: '#000', stroke: '#000', d: 'M 0,0 10,4 0,9 z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMax(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    'stroke-dashoffset': 2,\r\n                    'stroke-dasharray': '4.8,4.8',\r\n                    d: 'm 0,0 4.91187,0 5.44643,0 9.11886,0 0,19.47716 -19.47716,0 0,-15.88809 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 6,0.006 0.02,5 0.01,-11 -0.03,6.02 c 2,-0.01 4,-0.002 6,0.01'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawButton(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight, btnValue;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        btnValue = node['value'] || '';\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: 60,\r\n            height: 28,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 8,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    filter: 'url(#drop-shadow)',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                { tag: 'text', $font: true, x: 10, y: 18, fill: 'black', value: btnValue, 'class': 'hand' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDropdown(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 0,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth - 20,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 2,\r\n                    x: btnWidth - 20,\r\n                    y: 0,\r\n                    width: 20,\r\n                    height: 28,\r\n                    stroke: '#000',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    style: 'fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1',\r\n                    d: 'm ' + (btnWidth - 15) + ',13 10,0 L ' + (btnWidth - 10) + ',20 z'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassicon(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.19999l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm25.68807,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.2l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                { tag: 'line', x1: 11, y1: 7, x2: 25, y2: 7, stroke: '#000' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassWithEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M2,10 20,10 20,35 2,35 Z M2,17 20,17 M20,10 28,5 28,9 M 28.5,4.7 24,4',\r\n                    style: 'fill:none;stroke:#000000;transform:scale(0.8);'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClass(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: '100%',\r\n            height: '100%',\r\n            items: [\r\n                { tag: 'rect', width: 50, height: 40, x: 0, y: 0, 'stroke-width': 2, stroke: 'black', fill: 'none'},\r\n                { tag: 'rect', width: 50, height: 12, x: 0, y: 18, 'stroke-width': 1, stroke: 'black', fill: 'none'},\r\n                { tag: 'text', x: 27, y: 14, 'text-anchor': 'middle', 'font-size': 11, value: 'Class'},\r\n                { tag: 'text', x: 5, y: 24, 'font-size': 5, value: '+ field: type'},\r\n                { tag: 'text', x: 5, y: 36, 'font-size': 5, value: '+ method(type)'}\r\n            ]\r\n        });\r\n    }\r\n/*\r\n<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n    <g>\r\n    <text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text>\r\n        <text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>\r\n*/\r\n\r\n    public static drawEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M10,30 30,10 M19,10 30,10 30,21',\r\n                    style: 'fill:none;stroke:#555;stroke-width:2;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawCopynode(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M5 5 L15 5 L15 20 L5 20 Z M5 10 L15 10',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M8 2 L18 2 L18 17 L8 17 Z M8 7 L18 7'\r\n                        + 'M11 4.5 L15 4.5 '\r\n                        + 'M10 10 L16 10 '\r\n                        + 'M10 13 L16 13 ',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawBasket(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M12 12 L18 12 L18 11 L22 11 L22 12 L28 12 L28 14 L27 14 L27 29 L13 29 L13 14 L12 14 Z M13 14 L27 14 M20 17 L20 26 M17 16 L17 27 M23 16 L23 27',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawPencil(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M6 20 L12 23 L33 23 L33 17 L12 17 Z M30 17 L30 23 M12 17 L12 23 M15 19 L28 19 M15 21 L28 21',\r\n                    stroke: '#000',\r\n                    'stroke-width': 1,\r\n                    fill: 'white'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    private static addText(y: number, offsetX: number, box: Element, text: string, textClass: string): Element {\r\n        let item: Element;\r\n        box.appendChild(Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'text-anchor': 'left',\r\n            width: 70,\r\n            x: 10,\r\n            y: y,\r\n            class: textClass,\r\n            value: text,\r\n            eventValue: text\r\n        }));\r\n        if (textClass === 'SVGTEXT') {\r\n            textClass = 'SVGChoiceText';\r\n        } else {\r\n            textClass = 'SVGChoice';\r\n        }\r\n\r\n        item = Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            x: offsetX,\r\n            y: y - 18,\r\n            width: 70,\r\n            height: 24,\r\n            stroke: 'none',\r\n            class: textClass,\r\n        });\r\n        item['eventValue'] = text;\r\n        box.appendChild(item);\r\n        return item;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n}\r\n","import {Control} from '../../Control';\r\nimport BridgeElement from '../../BridgeElement';\r\nimport Data from '../../Data';\r\nimport {Util} from '../../util';\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Table extends Control {\r\n    protected items: BridgeElement[] = [];\r\n    private columns: Column[] = [];\r\n    private cells: Object = {};\r\n    private $bodysection: HTMLTableSectionElement;\r\n    private $headersection: HTMLTableSectionElement;\r\n    private showedItems: Array<BridgeElement> = [];\r\n    // BridgeElements:\r\n    private itemsIds: Object = {};\r\n    private countElement: HTMLElement;\r\n    private countColumn: HTMLElement;\r\n    private countColumnPos: number;\r\n    private resultColumn: string;\r\n    private lastSearchText: string;\r\n    private searchColumns: Array<string> = [];\r\n    private searchText: Array<string> = [];\r\n    private sortColumn: Column;\r\n    private direction: number;\r\n    private moveElement: Column = null;\r\n    private isDrag: boolean = false;\r\n    private moveTimeStamp: number;\r\n    private moveX: number;\r\n    private movePos: number;\r\n    private dragColumn: Column;\r\n    private dragPos: number;\r\n    private tableOption: HTMLTableHeaderCellElement;\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    private static indexOfChild(item: BridgeElement) {\r\n        let i: number = 0;\r\n        let child: Node = item.gui;\r\n        while ((child = child.previousSibling) !== null) {\r\n            i++;\r\n        }\r\n        return i;\r\n    }\r\n\r\n    public load(data: any): void {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n            if (data.property) {\r\n                this.property = data.property;\r\n            }\r\n\r\n            if (data.searchColumns) {\r\n                let search: Array<string> = [];\r\n                if (typeof(data.searchColumns) === 'string') {\r\n                    search = data.searchColumns.split(' ');\r\n                } else {\r\n                    search = data.searchColumns;\r\n                }\r\n                for (let z: number = 0; z < search.length; z++) {\r\n                    let item = search[z].trim();\r\n                    if (item.length > 0) {\r\n                        if (this.searchColumns.indexOf(item) < 0) {\r\n                            this.searchColumns.push(item);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        if (this.$view) {\r\n            // Must be an Update\r\n            if (data['columns']) {\r\n                // It is a json must add all things and generate HTML\r\n                for (let i in data['columns']) {\r\n                    if (data['columns'].hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    let col = this.parseData(data['columns'][i]);\r\n                    this.addHeaderInfo(col);\r\n                    this.columns.push(col);\r\n                    this.tableOption.parentElement.insertBefore(col.$element, this.tableOption);\r\n                }\r\n                for (let i in this.showedItems) {\r\n                    let item: BridgeElement = this.showedItems[i];\r\n                    let cell;\r\n                    // Now Add some Children\r\n                    while (item.gui.children.length < this.columns.length) {\r\n                        cell = document.createElement('td');\r\n                        item.gui.appendChild(cell);\r\n                    }\r\n                    // Now Remove Some Children\r\n                    while (item.gui.children.length > this.columns.length) {\r\n                        item.gui.removeChild(item.gui.children[item.gui.children.length - 1]);\r\n                    }\r\n                    for (let c: number = 0; c < this.columns.length; c++) {\r\n                        let name = this.columns[c].attribute;\r\n                        // let count = this.columns.length;\r\n                        cell = item.gui.children[c];\r\n                        cell.innerHTML = item.model.getValue(name);\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n\r\n        this.$view = document.getElementById(id);\r\n        let headerrow: HTMLTableRowElement;\r\n        if (this.$view) {\r\n            if (!this.property) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('table');\r\n            this.$owner.appendChild(this);\r\n        }\r\n        if (!this.$bodysection) {\r\n            // add tbody element if missing\r\n            this.$bodysection = document.createElement('tbody');\r\n            this.$view.appendChild(this.$bodysection);\r\n        }\r\n        if (data['classname']) {\r\n            this.$view.className = data['classname'];\r\n        } else {\r\n            this.$view.className = 'mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp';\r\n        }\r\n\r\n        this.id = id;\r\n        this.$view.id = id;\r\n        this.$view.setAttribute('type', this.constructor['name'].toLowerCase());\r\n        let counter = 0;\r\n        for (let c = 0; c < this.$view.children.length; c++) {\r\n            let row: HTMLTableRowElement = <HTMLTableRowElement>this.$view.children[c];\r\n            if (row instanceof HTMLTableSectionElement) {\r\n                if (row.tagName === 'THEAD') {\r\n                    headerrow = row;\r\n                    // Its a thead\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingHeader(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                } else {\r\n                    // Its a tbody\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingData(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                }\r\n            } else {\r\n                // fallback, if there are no thead and tbody...\r\n                if (counter === 0) {\r\n                    headerrow = row;\r\n                    this.parsingHeader(row);\r\n                } else {\r\n                    this.parsingData(row);\r\n                }\r\n            }\r\n            counter++;\r\n        }\r\n        if (!headerrow || !this.$headersection) {\r\n            if (!this.$headersection) {\r\n                // find eventually existing thead\r\n                let header = this.$view.getElementsByTagName('thead');\r\n                if (header.length === 0) {\r\n                    this.$headersection = document.createElement('thead');\r\n                    this.$view.appendChild(this.$headersection);\r\n                } else {\r\n                    // take first thead element\r\n                    this.$headersection = <HTMLTableSectionElement>header.item(0);\r\n                }\r\n            }\r\n            if (!headerrow) {\r\n                headerrow = document.createElement('tr');\r\n                this.$headersection.appendChild(headerrow);\r\n            }\r\n        }\r\n\r\n        if (data['columns']) {\r\n            // It is a json must add all things and generate HTML\r\n            for (let i in data['columns']) {\r\n                if (data['columns'].hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                let col = this.parseData(data['columns'][i]);\r\n                this.addHeaderInfo(col);\r\n                this.columns.push(col);\r\n                headerrow.appendChild(col.$element);\r\n            }\r\n            this.tableOption = document.createElement('th');\r\n            this.tableOption.classList.add('tableOption');\r\n            headerrow.appendChild(this.tableOption);\r\n            let context: HTMLElement = this.addOptionItem(null, this.tableOption, true);\r\n            let contentChild: HTMLElement = this.addOptionItem('show', context, true);\r\n            // let simpleLink: HTMLElement = this.addOptionItem('show', contentChild, false);\r\n            this.addOptionItem('show', contentChild, false);\r\n        }\r\n        this.registerEvents(['mousemove', 'mousedown', 'mouseup', 'resize', 'dragstart', 'dragover', 'drop', 'dragend']);\r\n\r\n        // Check for SearchBar\r\n        // if(data[\"searchproperty\"]){\r\n        // Create Full Row\r\n        let searchBar = document.createElement('tr');\r\n        let cell = document.createElement('td');\r\n        cell.setAttribute('colspan', '' + (this.columns.length));\r\n        searchBar.appendChild(cell);\r\n\r\n        let search = document.createElement('input');\r\n        search.className = 'search';\r\n        let that = this;\r\n        search.addEventListener('keyup', function (evt) {\r\n            that.search(evt.target['value']);\r\n        });\r\n\r\n        cell.appendChild(search);\r\n        if (this.resultColumn) {\r\n            if (this.resultColumn.indexOf('#') !== 0) {\r\n                this.countElement = document.createElement('div');\r\n                searchBar.appendChild(this.countElement);\r\n            } else {\r\n                for (let z: number = 0; z < this.$headersection.children.length; z++) {\r\n                    if (this.$headersection.children[z].innerHTML === this.resultColumn) {\r\n                        this.countColumn = <HTMLElement> this.$headersection.children[z];\r\n                        this.countColumnPos = z;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        let first = this.$headersection.children.item(0);\r\n        this.$headersection.insertBefore(searchBar, first);\r\n\r\n        this.updateElement(this.property, null);\r\n\r\n        // now update those elements, that were not loaded currently\r\n    }\r\n\r\n    public tableEvent(type: string, e: Event) {\r\n        let button: number = 0;\r\n        let eventX: number = 0;\r\n        if (e instanceof MouseEvent) {\r\n            button = e.buttons;\r\n            eventX = e.pageX;\r\n        }\r\n        if (type === 'mouseup') {\r\n            this.moveElement = null;\r\n        } else if (type === 'mousedown' || type === 'resize') {\r\n            // End to Resize\r\n            this.moveElement = null;\r\n            if (button === 1) {\r\n                let c: number;\r\n                for (c = 0; c < this.columns.length; c++) {\r\n                    if (this.columns[c].$resize === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = false;\r\n                        break;\r\n                    } else if (this.columns[c].$element === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = true;\r\n                    }\r\n                }\r\n                this.moveTimeStamp = e.timeStamp;\r\n                this.moveX = eventX;\r\n            } else {\r\n                this.moveTimeStamp = 0;\r\n            }\r\n        } else if (type === 'mousemove') {\r\n            if (button === 1 && this.moveElement) {\r\n                if (this.moveTimeStamp && e.timeStamp - this.moveTimeStamp < 2000) {\r\n                    if (this.isDrag) {\r\n                        // FIXME\r\n                    } else {\r\n                        let x = eventX - this.moveX;\r\n                        let width = this.moveElement.$element.offsetWidth;\r\n                        this.moveElement.$element.width = '' + (width + x);\r\n                        e.stopPropagation();\r\n                    }\r\n                }\r\n                this.moveX = eventX;\r\n                this.moveTimeStamp = e.timeStamp;\r\n            }\r\n        } else if (this.isDrag) {\r\n            this.columnDragEvent(type, <DragEvent> e);\r\n        }\r\n    }\r\n\r\n    public parsingHeader(row: HTMLTableRowElement) {\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let column: HTMLTableHeaderCellElement = <HTMLTableHeaderCellElement>row.children[i];\r\n            let id = column.innerHTML.trim();\r\n            let col: Column = null;\r\n            for (let c in this.columns) {\r\n                if (this.columns.hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                if (this.columns[c].label === id) {\r\n                    col = this.columns[c];\r\n                    col.$element = column;\r\n                    break;\r\n                }\r\n            }\r\n            if (col === null) {\r\n                col = new Column();\r\n                col.label = id;\r\n                col.attribute = column.getAttribute('attribute');\r\n                col.$element = column;\r\n                this.columns.push(col);\r\n            }\r\n            this.addHeaderInfo(col);\r\n        }\r\n    }\r\n\r\n    public parsingData(row: HTMLTableRowElement) {\r\n        let id = row.getAttribute('id');\r\n        let item: Data = this.$owner.getItem(id);\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let cell: HTMLTableCellElement = <HTMLTableCellElement>row.children[i];\r\n            let colAttribute = this.columns[i].attribute;\r\n            if (colAttribute.indexOf('\\.') < 0) {\r\n                item[colAttribute] = cell.innerHTML.trim();\r\n            }\r\n        }\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: Object, newValue: Object) {\r\n        if (entity) {\r\n            // Check for Show\r\n            if (this.property && !entity.hasProperty(property)) {\r\n                return;\r\n            }\r\n        }\r\n        if (entity.id === undefined) {\r\n            return;\r\n        }\r\n        let item: BridgeElement = <BridgeElement>this.itemsIds[entity.id];\r\n        let row: HTMLTableRowElement;\r\n        if (!item) {\r\n            item = new BridgeElement(entity);\r\n            this.items.push(item);\r\n            this.itemsIds[entity.id] = item;\r\n        }\r\n        row = this.cells[entity.id];\r\n        if (row) {\r\n            item.gui = row;\r\n        }\r\n        if (this.searching(item) === false) {\r\n            return;\r\n        }\r\n        let cell;\r\n        let showItem = false;\r\n\r\n        if (!row) {\r\n            showItem = true;\r\n            row = document.createElement('tr');\r\n            let count = this.columns.length;\r\n            for (let i = 0; i < count; i++) {\r\n                cell = document.createElement('td');\r\n                row.appendChild(cell);\r\n            }\r\n            this.cells[entity.id] = row;\r\n            item.gui = row;\r\n        }\r\n        for (let c: number = 0; c < this.columns.length; c++) {\r\n            let name = this.columns[c].attribute;\r\n            if (name === property) {\r\n                cell = row.children[c];\r\n                cell.innerHTML = <string>newValue;\r\n            }\r\n        }\r\n        if (showItem) {\r\n            this.showItem(item, true);\r\n        }\r\n        // super.propertyChange(entity, property, newValue, oldValue);\r\n    }\r\n\r\n    public sort(column: Column) {\r\n        if (this.sortColumn === column) {\r\n            if (this.direction === 1) {\r\n                this.direction = -1;\r\n                column.$element.classList.remove('asc');\r\n                column.$element.classList.add('desc');\r\n            } else {\r\n                this.direction = 1;\r\n                column.$element.classList.remove('desc');\r\n                column.$element.classList.add('asc');\r\n            }\r\n        } else {\r\n            if (this.sortColumn !== null) {\r\n                this.sortColumn.$element.classList.remove('desc');\r\n                this.sortColumn.$element.classList.remove('asc');\r\n            }\r\n            this.sortColumn = column;\r\n            this.sortColumn.$element.classList.add('asc');\r\n            this.direction = 1;\r\n        }\r\n        let that = this;\r\n        let sort = function (a: BridgeElement, b: BridgeElement) {\r\n            return that.sorting(a, b);\r\n        };\r\n        this.showedItems.sort(sort);\r\n        let len: number = this.showedItems.length;\r\n        let body = this.$bodysection;\r\n        let i = 0;\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            if (i !== Table.indexOfChild(item)) {\r\n                break;\r\n            }\r\n            i = i + 1;\r\n        }\r\n        while (body.children.length > i) {\r\n            body.removeChild(body.children.item(body.children.length - 1));\r\n        }\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            body.appendChild(item.gui);\r\n            i = i + 1;\r\n        }\r\n\r\n        //      body.removeChild(item.gui);\r\n        //      body.remove\r\n    }\r\n\r\n    public sorting(a: BridgeElement, b: BridgeElement): number {\r\n        let path: string[] = this.sortColumn.attribute.split('.');\r\n        let itemA = a.model.prop;\r\n        let itemB = b.model.prop;\r\n        let check = this.sortColumn.attribute;\r\n        for (let p = 0; p < path.length; p++) {\r\n            check = path[p];\r\n            if (itemA[check]) {\r\n                itemA = itemA[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n            if (itemB[check]) {\r\n                itemB = itemB[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n        if (itemA !== itemB) {\r\n            if (this.direction === 1) {\r\n                return (itemA < itemB) ? -1 : 1;\r\n            }\r\n            return (itemA < itemB) ? 1 : -1;\r\n\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    // Searching\r\n    public search(origSearchText: string): void {\r\n        if (!origSearchText) {\r\n            origSearchText = '';\r\n        }\r\n        let searchText: string = origSearchText.trim().toLowerCase();\r\n        if (searchText === this.lastSearchText && searchText !== '') {\r\n            return; // <==== nothing to be done\r\n        }\r\n        let oldSearch: string = this.lastSearchText;\r\n        this.lastSearchText = searchText;\r\n\r\n        this.parseSearchArray();\r\n        if (searchText !== '' && oldSearch !== null && searchText.indexOf(oldSearch) >= 0 && searchText.indexOf('|') < 0) {\r\n            this.searchArray(this.showedItems);\r\n        } else {\r\n            this.searchSet(this.items);\r\n        }\r\n        this.refreshCounter();\r\n    }\r\n\r\n    public refreshCounter() {\r\n        if (this.countColumn) {\r\n            this.countColumn.innerHTML = this.columns[this.countColumnPos].label + ' (' + this.showedItems.length + ')';\r\n        }\r\n        // var countElement = document.getElementById('talkCount');\r\n        //  if (countElement) {\r\n        //     var txt = (this.showedItems.size() > 0 && searchText.length > 0 ) ? this.options.TEXT_SEARCHLIST : this.options.TEXT_SEARCHFULLLIST;\r\n        //     countElement.innerHTML = txt.replace(\"%LEN%\", this.root['children'].length).replace(\"%COUNT%\", this.showedItems.size()).replace(\"%SEARCH%\", origSearchText);\r\n        // }\r\n        // if (this.countColumn) {\r\n        //     this.countColu1mn.innerHTML = this.countColumn[\"label\"] + \" (\" + this.showedItems.size() + \")\";\r\n        // }\r\n    }\r\n\r\n    public parseSearchArray() {\r\n        let pos: number = 0;\r\n        let split: Array<string> = [];\r\n        let quote: boolean = false;\r\n        for (let i: number = 0; i < this.lastSearchText.length; i++) {\r\n            if ((this.lastSearchText.charAt(i) === ' ') && !quote) {\r\n                let txt = this.lastSearchText.substring(pos, i).trim();\r\n                if (txt.length > 0) {\r\n                    split.push(txt);\r\n                }\r\n                pos = i + 1;\r\n            } else if (this.lastSearchText.charAt(i) === '\\\"') {\r\n                if (quote) {\r\n                    let txt = this.lastSearchText.substring(pos, i).trim();\r\n                    if (txt.length > 0) {\r\n                        split.push(txt);\r\n                    }\r\n                    pos = i + 1;\r\n                } else {\r\n                    pos = i + 1;\r\n                }\r\n                quote = !quote;\r\n            }\r\n        }\r\n        if (pos < this.lastSearchText.length) {\r\n            split.push(this.lastSearchText.substring(pos, this.lastSearchText.length).trim());\r\n        }\r\n        this.searchText = split;\r\n        return split;\r\n    }\r\n\r\n    public searchArray(root: Array<BridgeElement>) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let i: number = 0; i < root.length; i++) {\r\n            let item: BridgeElement = root[i];\r\n            this.showItem(item, this.searching(item));\r\n        }\r\n    }\r\n\r\n    public searchSet(root: BridgeElement[]) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let item of root) {\r\n            let child: BridgeElement = <BridgeElement>item;\r\n            this.showItem(child, this.searching(child));\r\n        }\r\n    }\r\n\r\n    public showItem(item: BridgeElement, visible: boolean) {\r\n        if (visible) {\r\n            this.showedItems.push(item);\r\n            this.$bodysection.appendChild(item.gui);\r\n        } else if (item.gui && item.gui.parentElement) {\r\n            this.$bodysection.removeChild(item.gui);\r\n        }\r\n    }\r\n\r\n    public searching(item: BridgeElement): boolean {\r\n        let fullText: string = '';\r\n        for (let i: number = 0; i < this.searchColumns.length; i++) {\r\n            fullText = fullText + ' ' + item.model.getValue(this.searchColumns[i]);\r\n        }\r\n        fullText = fullText.trim().toLowerCase();\r\n        for (let z: number = 0; z < this.searchText.length; z++) {\r\n            if ('' !== this.searchText[z]) {\r\n                let orSplit: Array<string>;\r\n                if (this.searchText[z].indexOf('|') > 0) {\r\n                    orSplit = this.searchText[z].split('|');\r\n                } else {\r\n                    orSplit = [this.searchText[z]];\r\n                }\r\n                let o: number = 0;\r\n                for (; o < orSplit.length; o++) {\r\n                    let pos: number = orSplit[o].indexOf(':');\r\n                    if (orSplit[o].indexOf('#') === 0 && pos > 1) {\r\n                        // if (searchProperties.contains(propString)) {\r\n                        let value: string = orSplit[o].substring(pos + 1);\r\n                        let column: string = orSplit[o].substring(1, pos - 1);\r\n                        let dataValue: Object = item.model.getValue(column);\r\n                        if (dataValue) {\r\n                            if (dataValue.toString().toLowerCase().indexOf(value) >= 0) {\r\n                                // Search for simple Property\r\n                                break;\r\n                            }\r\n                        }\r\n                    } else if (orSplit[o].length > 1 && orSplit[o].indexOf('-') === 0) {\r\n                        if (fullText.indexOf(orSplit[o].substring(1)) < 0) {\r\n                            break;\r\n                        }\r\n                    } else if (fullText.indexOf(orSplit[o]) >= 0) {\r\n                        // his search word is found in full text\r\n                        break;\r\n                    }\r\n                }\r\n                if (o === orSplit.length) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public getColumn(): Column[] {\r\n        return this.columns;\r\n    }\r\n\r\n    public updateElement(property: string, value: string): void {\r\n        // first clear all elements inside the table:\r\n        for (let item of this.items) {\r\n            if (item instanceof BridgeElement) {\r\n                (<BridgeElement>item).model.removeListener(this);\r\n            }\r\n        }\r\n\r\n        this.items = [];\r\n        this.itemsIds = {};\r\n\r\n        // load all entitys that match the property\r\n        if (this.property !== undefined) {\r\n            let items = this.$owner.getItems();\r\n            for (let j in items) {\r\n                if (items.hasOwnProperty(j)) {\r\n                    let item = items[j];\r\n                    if (item instanceof Data) {\r\n                        if (property === j) {\r\n                            // if (property == item.property) {\r\n                            let i = new BridgeElement(<Data>item);\r\n                            this.items.push(i);\r\n                            this.itemsIds[item.id] = i;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            this.redrawAllElements();\r\n        }\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        if (this.$owner !== null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    protected redrawAllElements() {\r\n        let children: HTMLCollection = this.$bodysection.children;\r\n        // remove old children\r\n        for (let i = 0; i < children.length; i++) {\r\n            let child = children.item(i);\r\n            // remove child\r\n            this.$bodysection.removeChild(child);\r\n        }\r\n\r\n        // load new children\r\n        for (let obj of this.items) {\r\n            // register listeners\r\n            obj.model.addListener(this);\r\n            // create tr\r\n            let row = this.createRow(obj);\r\n            this.$bodysection.appendChild(row);\r\n            this.cells[obj.id] = row;\r\n        }\r\n    }\r\n\r\n    private parseData(column: any): Column {\r\n        let col = new Column();\r\n        col.label = column.label || column.id;\r\n        col.attribute = column.attribute || column.label || column.id;\r\n        col.$element = document.createElement('th');\r\n        col.$element.innerHTML = col.label;\r\n        col.$element.draggable = true;\r\n\r\n        // resize Header\r\n        col.$resize = document.createElement('div');\r\n        col.$resize.classList.add('resize');\r\n        col.$element.appendChild(col.$resize);\r\n\r\n        return col;\r\n    }\r\n\r\n    private createRow(data: BridgeElement): HTMLTableRowElement {\r\n        let tr: HTMLTableRowElement = document.createElement('tr');\r\n\r\n        for (let id of this.columns) {\r\n            let td: HTMLTableDataCellElement = document.createElement('td');\r\n            tr.appendChild(td);\r\n            td.innerHTML = data.model.getValue(id.attribute);\r\n        }\r\n        return tr;\r\n    }\r\n\r\n    private addHeaderInfo(col: Column) {\r\n        let element: HTMLTableCellElement = col.$element;\r\n        let that = this;\r\n        element.classList.add('sort');\r\n        element.addEventListener('click',\r\n            function () {\r\n                that.sort(col);\r\n            },\r\n            false);\r\n    }\r\n\r\n    private columnDragEvent(type: string, e: DragEvent) {\r\n        if (type === 'dragstart') {\r\n            // Target (this) element is the source node.\r\n            this.moveElement.$element.style.opacity = '0.4';\r\n            e.dataTransfer.effectAllowed = 'move';\r\n            e.dataTransfer.setData('text/json', JSON.stringify(Util.toJson(this.moveElement)));\r\n        } else if (type === 'dragenter') {\r\n            // TO Nothing\r\n        } else if (type === 'dragleave') {\r\n            this.moveElement.$element.classList.remove('over');\r\n        } else if (type === 'dragover') {\r\n            if (e.preventDefault) {\r\n                e.preventDefault(); // Necessary. Allows us to drop.\r\n            }\r\n            for (let c = 0; c < this.columns.length; c++) {\r\n                if (this.columns[c].$element === e.target) {\r\n                    this.dragColumn = this.columns[c];\r\n                    this.dragPos = c;\r\n                    this.columns[c].$element.classList.add('over');\r\n                } else {\r\n                    this.columns[c].$element.classList.remove('over');\r\n                }\r\n            }\r\n            if (e.target === this.tableOption) {\r\n                this.tableOption.classList.add('over');\r\n                this.dragPos = this.columns.length;\r\n            } else {\r\n                this.tableOption.classList.remove('over');\r\n            }\r\n            e.dataTransfer.dropEffect = 'move';  // See the section on the DataTransfer object.\r\n        } else if (type === 'drop') {\r\n            // this / e.target is current target element.\r\n            if (e.stopPropagation) {\r\n                e.stopPropagation(); // stops the browser from redirecting.\r\n            }\r\n            if (this.movePos === this.dragPos) {\r\n                return;\r\n            }\r\n            // movePos -> dragPos\r\n            // See the section on the DataTransfer object.\r\n            // DataModel\r\n            this.columns.splice(this.movePos, 1);\r\n            if (this.movePos >= this.dragPos) {\r\n                this.columns.splice(this.dragPos, 0, this.moveElement);\r\n            } else {\r\n                this.columns.splice(this.dragPos - 1, 0, this.moveElement);\r\n            }\r\n\r\n            // Header Line\r\n            let line: HTMLElement = this.moveElement.$element.parentElement;\r\n            line.removeChild(this.moveElement.$element);\r\n            if (this.dragPos < this.columns.length) {\r\n                line.insertBefore(this.moveElement.$element, this.dragColumn.$element);\r\n            } else {\r\n                line.insertBefore(this.moveElement.$element, this.tableOption);\r\n            }\r\n\r\n            let oldElement: Element;\r\n            let newElement: Element;\r\n\r\n            // Now all Childs\r\n            for (let i = 0; i < this.$bodysection.children.length; i++) {\r\n                // Each line\r\n                line = <HTMLElement>this.$bodysection.children.item(i);\r\n                oldElement = line.children.item(this.movePos);\r\n                newElement = line.children.item(this.dragPos);\r\n                line.removeChild(oldElement);\r\n                line.insertBefore(oldElement, newElement);\r\n            }\r\n        } else if (type === 'dragend') {\r\n            // this/e.target is the source node.\r\n            this.moveElement.$element.style.opacity = '1';\r\n            for (let i = 0; i < this.columns.length; i++) {\r\n                this.columns[i].$element.classList.remove('over');\r\n            }\r\n            this.tableOption.classList.remove('over');\r\n        }\r\n    }\r\n\r\n    private addOptionItem(label: string, parent: HTMLElement, sub: boolean): HTMLElement {\r\n        let labelControl;\r\n        if (label) {\r\n            labelControl = document.createElement('a');\r\n            labelControl.appendChild(document.createTextNode(label));\r\n            labelControl.href = 'javascript:void(0);';\r\n            parent.appendChild(labelControl);\r\n        }\r\n        if (sub) {\r\n            let context = document.createElement('div');\r\n            context.classList.add('dropdown-content');\r\n            context.style.setProperty('position', 'absolute');\r\n            parent.appendChild(context);\r\n\r\n            /* When the user clicks on the button,\r\n             toggle between hiding and showing the dropdown content */\r\n            parent.addEventListener(\r\n                'click',\r\n                function () {\r\n                    context.classList.toggle('show');\r\n                },\r\n                false);\r\n            return context;\r\n        }\r\n        return labelControl;\r\n    }\r\n\r\n    private registerEvents(events: string[]) {\r\n        let that = this;\r\n        for (let i = 0; i < events.length; i++) {\r\n            this.$view.addEventListener(events[i], function (evt) {\r\n                return that.tableEvent(events[i], evt);\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\nclass Column {\r\n    label: string;\r\n    attribute: string;\r\n    $element: HTMLTableHeaderCellElement;\r\n    $resize: HTMLDivElement;\r\n    visible: boolean;\r\n}\r\n","import { AutoComplete } from './AutoComplete';\r\nimport { BR } from './BR';\r\nimport { Div } from './Div';\r\nimport { Label } from './Label';\r\n\r\nexport * from './Node';\r\nexport * from './Class';\r\nexport * from './SO';\r\nexport * from './Symbol';\r\n\r\nexport * from './BR';\r\nexport * from './Button';\r\nexport * from './Div';\r\nexport * from './Form';\r\nexport * from './Input';\r\nexport * from './Label';\r\nexport * from './Table';\r\nexport * from './HTML';\r\nexport * from './Dice';\r\nexport * from './AutoComplete';\r\nexport * from './Attribute';\r\nexport * from './Method';\r\nexport * from './ClazzProperty';\r\n\r\nnew AutoComplete();\r\nnew BR();\r\nnew Div();\r\nnew Label();\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class AddNode implements EventHandler {\r\n\r\n    public MIN_SIZE_TO_ADD_NODE: number = 30;\r\n    public MIN_SIZE_TO_ADD_TEXT: number = 10;\r\n    private graph: Graph;\r\n    private svgRect: SVGSVGElement;\r\n    private svgGroupAddNode: SVGSVGElement;\r\n    private svgTextAddNode: SVGSVGElement;\r\n    private svgTextRectAddNode: SVGSVGElement;\r\n    private isRectDrawing: boolean;\r\n    private isDrawToLeft: boolean;\r\n    private isDrawToTop: boolean;\r\n    private isBigEnoughForAddNode: boolean;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(AddNode.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(AddNode.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!this.canHandle()) {\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element.id !== 'RootElement') {\r\n            return false;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element.id === 'RootElement') {\r\n                    this.start(event, element);\r\n\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mousemove':\r\n                this.drawRect(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.removeRect();\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.addNode();\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawRect(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isRectDrawing) {\r\n            return;\r\n        }\r\n\r\n        evt.stopPropagation();\r\n\r\n        let width = Util.getEventX(evt) - this.x;\r\n        let height = Util.getEventY(evt) - this.y;\r\n\r\n        // rectangle is in a negative area, drawn to upper case. not possibble with svg\r\n        if (width < 0) {\r\n            this.isDrawToLeft = true;\r\n            width *= -1;\r\n        } else {\r\n            this.isDrawToLeft = false;\r\n        }\r\n\r\n        if (height < 0) {\r\n            this.isDrawToTop = true;\r\n            height *= -1;\r\n        } else {\r\n            this.isDrawToTop = false;\r\n        }\r\n\r\n        if (width > this.MIN_SIZE_TO_ADD_NODE && height > this.MIN_SIZE_TO_ADD_NODE) {\r\n            this.isBigEnoughForAddNode = true;\r\n        } else {\r\n            this.isBigEnoughForAddNode = false;\r\n        }\r\n\r\n        this.graph.root.style.cursor = 'pointer';\r\n\r\n        // if line wasnt draw\r\n        if (!this.svgRect) {\r\n\r\n            let rectAddNode = Util.createShape({\r\n                tag: 'rect',\r\n                id: 'addNodeRect',\r\n                x: this.x,\r\n                y: this.y,\r\n                width: 1,\r\n                height: 1,\r\n                class: 'SVGAddNode'\r\n            });\r\n\r\n            let group = Util.createShape({ tag: 'g', id: 'groupAddNode' });\r\n            group.appendChild(rectAddNode);\r\n\r\n            this.graph.root.appendChild(group);\r\n            this.svgRect = rectAddNode;\r\n            this.svgGroupAddNode = group;\r\n        }\r\n        else {\r\n\r\n            let svgRectBBox = this.svgRect.getBBox();\r\n\r\n            // if rect is big enough, show text as helper\r\n            if ((svgRectBBox.width > this.MIN_SIZE_TO_ADD_TEXT\r\n                || svgRectBBox.height > this.MIN_SIZE_TO_ADD_TEXT) && !this.svgTextAddNode) {\r\n\r\n                let textAddNode = Util.createShape({\r\n                    tag: 'text',\r\n                    x: this.x,\r\n                    y: this.y - 5,\r\n                    'font-family': 'Verdana',\r\n                    'font-size': 12,\r\n                    fill: 'black'\r\n                });\r\n                textAddNode.textContent = 'Hold on and move to create a new class';\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n\r\n\r\n                // get correct size of text node\r\n                let sizeClientRect: ClientRect = textAddNode.getBoundingClientRect();\r\n\r\n                let rectBackgroundForText = Util.createShape({\r\n                    tag: 'rect',\r\n                    x: this.x,\r\n                    y: this.y - sizeClientRect.height,\r\n                    width: sizeClientRect.width,\r\n                    height: sizeClientRect.height,\r\n                    fill: '#DDD',\r\n                    'stroke-width': 0\r\n                });\r\n\r\n                this.svgTextRectAddNode = rectBackgroundForText;\r\n                this.svgTextAddNode = textAddNode;\r\n                this.svgGroupAddNode.appendChild(rectBackgroundForText);\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n            }\r\n\r\n            if (this.isDrawToLeft) {\r\n                this.svgRect.setAttributeNS(null, 'x', '' + Util.getEventX(evt));\r\n            }\r\n\r\n            if (this.isDrawToTop) {\r\n                this.svgRect.setAttributeNS(null, 'y', '' + Util.getEventY(evt));\r\n            }\r\n\r\n            // set width and height\r\n            this.svgRect.setAttributeNS(null, 'width', width.toString());\r\n            this.svgRect.setAttributeNS(null, 'height', height.toString());\r\n\r\n            // set color\r\n            if (this.isBigEnoughForAddNode) {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode-ready');\r\n\r\n                // draw text\r\n            }\r\n            else {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeRect(): void {\r\n        this.isRectDrawing = false;\r\n        this.isBigEnoughForAddNode = false;\r\n\r\n        this.graph.root.style.cursor = 'default';\r\n\r\n        if (this.svgGroupAddNode) {\r\n            this.graph.root.removeChild(this.svgGroupAddNode);\r\n            this.svgGroupAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgRect) {\r\n            this.svgRect = undefined;\r\n        }\r\n\r\n        if (this.svgTextAddNode) {\r\n            this.svgTextAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgTextRectAddNode) {\r\n            this.svgTextRectAddNode = undefined;\r\n        }\r\n    }\r\n\r\n    private addNode(): void {\r\n\r\n        if (!this.isBigEnoughForAddNode) {\r\n            this.removeRect();\r\n            return;\r\n        }\r\n\r\n        this.removeRect();\r\n        let node = this.graph.addElementWithValues('Class', { x: this.x, y: this.y });\r\n        this.graph.drawElement(node);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isRectDrawing) {\r\n            return;\r\n        }\r\n        this.isRectDrawing = true;\r\n\r\n        this.x = Util.getEventX(evt);\r\n        this.y = Util.getEventY(evt);\r\n    }\r\n\r\n}\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement, Point } from '../elements/BaseElements';\r\nimport { GraphModel } from '../elements/Model';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Control } from '../Control';\r\nimport { Util } from '../util';\r\n\r\nexport class Drag implements EventHandler {\r\n\r\n    private element: DiagramElement;\r\n    private svgElement: SVGSVGElement;\r\n    private dragging = false;\r\n    private reinsert = false;\r\n    private mouseOffset = new Point();\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        if (!this.canHandle()) {\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if ((!this.dragging) && (element.id !== 'RootElement')) {\r\n                    this.element = element;\r\n                    this.svgElement = <SVGSVGElement>element.$view;\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mouseup':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n\r\n                break;\r\n            case 'mousemove':\r\n                if (this.dragging) {\r\n                    this.drag(event, element);\r\n                }\r\n                break;\r\n            case 'mouseleave':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Drag.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Drag.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private reset() {\r\n        this.dragging = false;\r\n        this.svgElement.style.cursor = 'pointer';\r\n\r\n        /*  WORKAROUND\r\n            Chrome got problem with the Node.appendChild() method.\r\n            Sometimes it works, sometimes not.\r\n            So the background is, in the drag method will the current element be appended\r\n            to front of the svg root.\r\n            If this happend, the click event won't fire.\r\n            So it will be fired manually.\r\n            This problem occurs only in chrome.\r\n        */\r\n        if (Util.isChrome()) {\r\n            let clickEvt = Util.createCustomEvent('click');\r\n            this.svgElement.dispatchEvent(clickEvt);\r\n        }\r\n    }\r\n\r\n    private start(evt: Event | any, element: Control) {\r\n\r\n        this.dragging = true;\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n        this.reinsert = true;\r\n\r\n        this.svgElement.style.cursor = 'move';\r\n    }\r\n\r\n    private drag(evt: Event | any, element: DiagramElement) {\r\n\r\n        if (this.reinsert) {\r\n            if (this.element.id !== 'RootElement') {\r\n                // nesseccary to set the dragged object on top of svg children\r\n                this.graph.root.appendChild(this.svgElement);\r\n            }\r\n\r\n            let dragEvent = Util.createCustomEvent('drag');\r\n            element.$view.dispatchEvent(dragEvent);\r\n        }\r\n        this.reinsert = false;\r\n\r\n        evt.stopPropagation();\r\n\r\n        const translation = this.svgElement.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        const sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        const transX = sx + evt.clientX - this.mouseOffset.x;\r\n        const transY = sy + evt.clientY - this.mouseOffset.y;\r\n        this.svgElement.setAttributeNS(null, 'transform', 'translate(' + transX + ' ' + transY + ')');\r\n        this.element.getPos().addNum(transX - sx, transY - sy);\r\n\r\n        if (this.element instanceof Node) {\r\n            (<Node>this.element).redrawEdges();\r\n        }\r\n\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n\r\n\r\n        // resize svg root\r\n        let maxX = this.element.getPos().x + this.element.getSize().x;\r\n        let maxY = this.element.getPos().y + this.element.getSize().y;\r\n\r\n        let domRectRoot = this.graph.root.getBoundingClientRect();\r\n        if(!domRectRoot){\r\n            return;\r\n        }\r\n\r\n        if(maxX > domRectRoot.width){\r\n            this.graph.root.setAttributeNS(null, 'width', '' + maxX);\r\n        }\r\n        \r\n        if(maxY > domRectRoot.height){\r\n            this.graph.root.setAttributeNS(null, 'height', '' + maxY);\r\n        }\r\n    }\r\n}\r\n","import PropertyChangeSupport from '../PropertyChangeSupport';\r\nimport Data from '../Data';\r\nimport {Adapter} from '../Adapter';\r\nimport ClazzProperty from '../elements/nodes/ClazzProperty';\r\n\r\nexport class GraphListener implements PropertyChangeSupport {\r\n    private $owner: ClazzProperty;\r\n\r\n    constructor(owner: ClazzProperty) {\r\n        this.$owner = owner;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        let adapter = this.$owner.getRoot().getAdapter();\r\n        if (adapter) {\r\n            // messages.add(\"{\\\"class\\\":\\\"de.uniks.networkparser.test.model.House\\\",\\\"id\\\":\\\"H1\\\",\\\"rem\\\":{\\\"floor\\\":4},\\\"upd\\\":{\\\"floor\\\":42}}\");\r\n            let myId =  this.$owner.$owner.getId();\r\n            if (myId && myId.length > 0) {\r\n                let pos = myId.indexOf(':');\r\n                if (pos > 0) {\r\n                    myId = myId.substring(0, pos).trim();\r\n                }\r\n            }\r\n            let myName = this.$owner.getName();\r\n            let remJson = {};\r\n            remJson[myName] = oldValue;\r\n            let updJson = {};\r\n            updJson[myName] = newValue;\r\n            let json = {};\r\n            json['id'] = myId;\r\n            json['rem'] = remJson;\r\n            json['upd'] = updJson;\r\n            let message = JSON.stringify(json);\r\n            (<Adapter> adapter).update(message);\r\n        }\r\n    }\r\n}\r\n","import {Graph} from '../elements/';\r\nimport {EventHandler, EventBus} from '../EventBus';\r\nimport {DiagramElement} from '../elements/';\r\nimport {Util} from '../util';\r\n\r\nexport class ImportFile implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(ImportFile.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(ImportFile.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        let type: string = typeof event;\r\n        if (type !== 'DragEvent') {\r\n            return false;\r\n        }\r\n        let evt: DragEvent = <DragEvent>event;\r\n        if (evt.type === 'dragover') {\r\n            this.handleDragOver(evt);\r\n        } else if (evt.type === 'dragleave') {\r\n            if (this.graph.$view !== evt.target) {\r\n                return false;\r\n            }\r\n            this.setBoardStyle('dragleave');\r\n        } else if (evt.type === 'drop') {\r\n            this.handleLoadFile(evt);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public setBoardStyle(typ: string): boolean {\r\n        let b = this.graph.$view;\r\n        Util.removeClass(b, 'Error');\r\n        Util.removeClass(b, 'Ok');\r\n        Util.removeClass(b, 'Add');\r\n        if (typ === 'dragleave') {\r\n            if (b['errorText']) {\r\n                b.removeChild(b['errorText']);\r\n                b['errorText'] = null;\r\n            }\r\n            return true;\r\n        }\r\n        Util.addClass(b, typ);\r\n        if (typ === 'Error') {\r\n            if (!b['errorText']) {\r\n                b['errorText'] = Util.create({tag: 'div', style: 'margin-top: 30%', value: 'NO TEXTFILE'});\r\n                b.appendChild(b['errorText']);\r\n            }\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private handleLoadFile(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n\r\n        let files = evt.dataTransfer.files; // FileList object.\r\n\r\n        if (files.length > 1) {\r\n            evt.dataTransfer.dropEffect = 'none';\r\n            return;\r\n        }\r\n\r\n        // files is a FileList of File objects. List some properties.\r\n        let reader  = new FileReader();\r\n        let output = [];\r\n        let htmlResult = '';\r\n        let that = this;\r\n        for (let i = 0, f; f = files[i]; i++) {\r\n            reader.onload = function(event) {\r\n                htmlResult = event.target['result'];\r\n                console.log('fileContent: ' + htmlResult);\r\n\r\n                // CHANGE TO INTERNAL OBJECT\r\n                if (that.graph) {\r\n                    that.graph.import(htmlResult);\r\n                }\r\n            };\r\n            reader.readAsText(f);\r\n        }\r\n        this.setBoardStyle('dragleave');\r\n    }\r\n\r\n    private handleDragOver(evt: DragEvent): void {\r\n        let error: boolean = true, n: string, f;\r\n        let files = evt.dataTransfer.files;\r\n        // process all File objects\r\n        if (files && files.length > 0) {\r\n            for (let i: number = 0; i < files.length; i += 1) {\r\n                f = files[i];\r\n                if (f.type.indexOf('text') === 0) {\r\n                    error = false;\r\n                } else if (f.type === '') {\r\n                    n = f.name.toLowerCase();\r\n                    if (n.indexOf('json', n.length - 4) !== -1) {\r\n                        error = false;\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            let items = evt.dataTransfer.items;\r\n            if (items && items.length > 0) {\r\n                for (let z = 0; z < items.length; z ++) {\r\n                    if (items[z].type === '' || items[z].type === 'text/plain') {\r\n                        error = false;\r\n                    }\r\n                }\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.\r\n        if (error) {\r\n            this.dragStyler(evt, 'Error');\r\n        } else if (evt.ctrlKey) {\r\n            this.dragStyler(evt, 'Add');\r\n        } else {\r\n            this.dragStyler(evt, 'Ok');\r\n        }\r\n        /* //evt.target['className'] += ' diagramLoadFile';\r\n        '//console.log('handDragOver');*/\r\n    }\r\n\r\n    private dragStyler(event: Event, typ: string) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n        this.setBoardStyle(typ);\r\n    }\r\n\r\n    private handleDragLeave(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n        evt.dataTransfer.dropEffect = 'link'; // Explicitly show this is a copy.\r\n        evt.target['className'] = 'diagram';\r\n        console.log('handDragLeave');\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Class } from '../elements/nodes/Class';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Association } from '../elements/index';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class NewEdge implements EventHandler {\r\n    private graph: Graph;\r\n    private svgLine: SVGSVGElement;\r\n    private isEdgeDrawing: boolean;\r\n    private sourceNode: Node;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    private lastTargetNode: Node;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(NewEdge.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(NewEdge.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!((<KeyboardEvent>event).ctrlKey || EventBus.isHandlerActiveOrFree('NewEdge', true))) {\r\n            this.removeLine();\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element instanceof Node) {\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n\r\n            case 'mousemove':\r\n                this.drawEdge(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.setNewEdgeToNode(event);\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default: break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawEdge(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        let lineToX = Util.getEventX(evt);\r\n        let lineToy = Util.getEventY(evt);\r\n\r\n        let path = `M${this.x} ${this.y} L${lineToX} ${lineToy}`;\r\n        // if line wasnt draw\r\n        if (!this.svgLine) {\r\n\r\n            let attr = {\r\n                tag: 'path',\r\n                id: 'newEdgePath',\r\n                d: path,\r\n                class: 'SVGEdge'\r\n            };\r\n\r\n            let shape = Util.createShape(attr);\r\n            this.svgLine = shape;\r\n\r\n            this.graph.root.appendChild(shape);\r\n            this.graph.root.appendChild(this.sourceNode.$view);\r\n        }\r\n        else {\r\n\r\n            // set new L path\r\n            this.svgLine.setAttributeNS(null, 'd', path);\r\n\r\n            // get node from position\r\n            let targetNode = this.graph.$graphModel.getNodeByPosition(Util.getEventX(evt), Util.getEventY(evt));\r\n\r\n            // if some targetnode is available, so highlight the node\r\n            if (targetNode) {\r\n\r\n                // reset the last one\r\n                if (this.lastTargetNode && this.lastTargetNode.id !== targetNode.id) {\r\n                    this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n                }\r\n\r\n                this.lastTargetNode = targetNode;\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz-drawedge');\r\n            }\r\n            else if (this.lastTargetNode) {\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeLine(): void {\r\n        this.isEdgeDrawing = false;\r\n\r\n        if (this.svgLine) {\r\n            this.graph.root.removeChild(this.svgLine);\r\n            this.svgLine = null;\r\n        }\r\n\r\n        if (this.lastTargetNode) {\r\n            this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n        }\r\n    }\r\n\r\n    private setNewEdgeToNode(event: Event | any): void {\r\n        // get node from position\r\n        let targetNode = this.graph.$graphModel\r\n            .getNodeByPosition(Util.getEventX(event), Util.getEventY(event));\r\n\r\n        if (!targetNode) {\r\n            this.removeLine();\r\n\r\n            return;\r\n        }\r\n\r\n        this.removeLine();\r\n        let edgeType = this.sourceNode.$defaulEdgeType || 'Association';\r\n\r\n        let jsonData = {\r\n            type: edgeType,\r\n            source: this.sourceNode.id,\r\n            target: targetNode.id\r\n        };\r\n\r\n        let newEdge = this.graph.$graphModel.addEdge(<any>jsonData, true);\r\n        this.graph.drawElement(newEdge);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        this.isEdgeDrawing = true;\r\n        this.sourceNode = element as Class;\r\n\r\n        this.x = this.sourceNode.getPos().x + (this.sourceNode.getSize().x / 2);\r\n        this.y = this.sourceNode.getPos().y + (this.sourceNode.getSize().y / 2);\r\n\r\n        // TODO: get this into util or select\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Node } from '../elements/nodes';\r\nimport { Association } from '../elements/edges';\r\nimport { Util } from '../util';\r\nimport { SymbolLibary } from '../elements/nodes/Symbol';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\nimport Attribute from '../elements/nodes/Attribute';\r\n\r\nexport class Select implements EventHandler {\r\n\r\n    private deleteShape: SVGSVGElement;\r\n    private addEdgeShape: SVGSVGElement;\r\n    private copyNodeShape: SVGSVGElement;\r\n    private graph: Graph;\r\n    private padding = 5;\r\n\r\n    private lastSelectedNode: Element;\r\n    private lastSelectedEdge: Element;\r\n\r\n    private isDragged: boolean;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.deleteShape = SymbolLibary.drawSVG({ type: 'Basket', background: true, id: 'trashcan', tooltip: 'Delete class' });\r\n        this.copyNodeShape = SymbolLibary.drawSVG({ type: 'Copynode', background: true, id: 'copyNode', tooltip: 'Copy class' });\r\n        this.addEdgeShape = SymbolLibary.drawSVG({ type: 'Edgeicon', background: true, id: 'addEdge', tooltip: 'Click and drag to connect this class' });\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        let x = Util.getEventX(event);\r\n        let y = Util.getEventY(event);\r\n\r\n        event.stopPropagation();\r\n        if (event.type === 'drag') {\r\n            this.isDragged = true;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            if (element instanceof Node) {\r\n                this.lastSelectedNode = <Element>element.$view;\r\n            }\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n        }\r\n\r\n        if (event.target['id'] === 'background' || element === this.graph.$graphModel) {\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let e = <Node>element;\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.graph.root.appendChild(this.addEdgeShape);\r\n            this.graph.root.appendChild(this.copyNodeShape);\r\n            this.graph.root.appendChild(element.$view);\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'visible');\r\n\r\n            let x = (e.getPos().x + e.getSize().x) + 5;\r\n            let y = e.getPos().y;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y + this.padding})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.copyNodeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 40 + this.padding})`);\r\n            this.copyNodeShape.onclick = (evt) => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let copyClass = (element).copy();\r\n                copyClass.withPos(nextFreePosition.x, nextFreePosition.y);\r\n                this.graph.drawElement(copyClass);\r\n            };\r\n\r\n            this.addEdgeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 80 + this.padding})`);\r\n            this.addEdgeShape.onmousedown = function () {\r\n                EventBus.setActiveHandler('NewEdge');\r\n                element.$view.dispatchEvent(Util.createCustomEvent('mousedown'));\r\n            };\r\n        }\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let clazz = <Node>element;\r\n\r\n            if (Util.isChrome()) {\r\n                if (this.lastSelectedNode && element.id === this.lastSelectedNode.id && !this.isDragged) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            this.isDragged = false;\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            this.lastSelectedNode = <Element>element.$view;\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete class');\r\n\r\n            // draw textbox to edit clazz in one line\r\n            let divInlineEdit = document.createElement('div');\r\n            divInlineEdit.id = 'inlineEdit';\r\n            divInlineEdit.style.position = 'absolute';\r\n            divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n            divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n            divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n            divInlineEdit.style.zIndex = '42';\r\n\r\n            let inputText = document.createElement('input');\r\n            inputText.type = 'text';\r\n            inputText.style.width = '100%';\r\n            inputText.placeholder = 'Add properties, edit label';\r\n\r\n            divInlineEdit.appendChild(inputText);\r\n            document.body.appendChild(divInlineEdit);\r\n\r\n            inputText.addEventListener('focusout', (evt) => {\r\n\r\n                if (Util.isChrome()) {\r\n                    // only if input is empty, remove the inline edit function\r\n                    if ((!inputText.value || inputText.value.length === 0) && (!this.lastSelectedNode || element.id !== this.lastSelectedNode.id)) {\r\n                        this.removeLastInlineEdit();\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                // only if input is empty, remove the inline edit function\r\n                if ((!inputText.value || inputText.value.length === 0)) {\r\n                    this.removeLastInlineEdit();\r\n                }\r\n            });\r\n\r\n            let g = this.graph;\r\n            let propertyTypes: string[] = ['boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'short', 'String', 'void'];\r\n            inputText.addEventListener('keydown', function (evt) {\r\n\r\n                let keyCode = (<any>evt).which;\r\n                let inputValue = <any>inputText.value;\r\n\r\n                if (Util.endsWith(inputValue, ':') && !document.getElementById('selectPropertyType')) {\r\n                    let selectType = document.createElement('select');\r\n                    selectType.id = 'selectPropertyType';\r\n                    selectType.style.width = '100%';\r\n\r\n                    for (let type of propertyTypes) {\r\n                        let selectOption = document.createElement('option');\r\n                        selectOption.value = type;\r\n                        selectOption.innerHTML = type;\r\n                        selectType.appendChild(selectOption);\r\n                    }\r\n\r\n                    selectType.addEventListener('change', function (evt) {\r\n                        let inputValueSplitted = inputValue.split(':');\r\n                        let selectedPropertyType = selectType.options[selectType.selectedIndex].value;\r\n\r\n                        if (inputValueSplitted.length >= 1) {\r\n                            inputText.value = inputValueSplitted[0].trim() + ' : ' + selectedPropertyType;\r\n                            inputText.focus();\r\n                        }\r\n                    });\r\n\r\n                    divInlineEdit.appendChild(selectType);\r\n                }\r\n                else if (!Util.includes(inputValue, ':')) {\r\n                    let selectType = document.getElementById('selectPropertyType');\r\n\r\n                    if (selectType) {\r\n                        selectType.remove();\r\n                    }\r\n                }\r\n\r\n                if (keyCode !== 13) {\r\n                    return;\r\n                }\r\n\r\n                // attribute\r\n                if ((Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) === false) {\r\n                    if (Util.includes(inputValue, ':')) {\r\n                        clazz.addAttribute(inputValue.trim());\r\n                        clazz.reDraw();\r\n                    } else if (Util.includes(inputValue, '=') ) {\r\n                        let attr: Attribute = null;\r\n                        let name = inputValue.substring(0, inputValue.indexOf('=')).trim();\r\n                        for (let child of clazz.getAttributes() ) {\r\n                            if ( name === child.getName()) {\r\n                                attr = child;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (attr) {\r\n                            attr.updateValue(inputValue.substring(inputValue.indexOf('=') + 1).trim());\r\n                        }\r\n                        clazz.reDraw();\r\n                    }\r\n                }\r\n\r\n                // method\r\n                else if (Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) {\r\n                    clazz.addMethod(inputValue.trim());\r\n                    clazz.reDraw();\r\n                }\r\n                // label\r\n                else if (inputValue.trim().split(' ').length === 1 && inputValue.trim().length > 0) {\r\n                    clazz.updateLabel(inputValue.trim());\r\n                }\r\n\r\n                // reset size\r\n                divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n                divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n                divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n\r\n                inputText.value = '';\r\n\r\n                // remove combobox to select type of property\r\n                let selectType = document.getElementById('selectPropertyType');\r\n\r\n                if (selectType) {\r\n                    selectType.remove();\r\n                }\r\n\r\n                // TODO: reload propertiespanel. not working!\r\n                // event wont dispatch\r\n                // let customEvt = Util.createCustomEvent(EventBus.RELOADPROPERTIES);\r\n                // element.$view.dispatchEvent(customEvt);\r\n            });\r\n\r\n            (<any>divInlineEdit.children[0]).focus();\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Association) {\r\n            this.graph.root.appendChild(element.$view);\r\n            this.graph.root.appendChild(element.$sNode.$view);\r\n            this.graph.root.appendChild(element.$tNode.$view);\r\n\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete edge');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            let edge = <Association>element;\r\n            this.lastSelectedEdge = edge.$view;\r\n\r\n            Util.addClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Select.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Select.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private setTooltipOfShape(shape: SVGSVGElement, tooltip: string): void {\r\n        if (!shape || !shape.hasChildNodes()) {\r\n            return;\r\n        }\r\n\r\n        let titleElement = <SVGSVGElement>shape.childNodes[0];\r\n        if (!titleElement || titleElement.tagName !== 'title') {\r\n            return;\r\n        }\r\n\r\n        titleElement.textContent = tooltip;\r\n    }\r\n\r\n    private resetLastSelectedElements() {\r\n        // reset the last one\r\n        if (this.lastSelectedNode) {\r\n            Util.removeClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.lastSelectedNode = undefined;\r\n        }\r\n\r\n        if (this.lastSelectedEdge) {\r\n            Util.removeClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n            this.lastSelectedEdge = undefined;\r\n        }\r\n\r\n        this.removeLastInlineEdit();\r\n    }\r\n\r\n    private removeLastInlineEdit(): void {\r\n        // remove last inline edit of clazz\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n\r\n            // its not supported in internet explorer\r\n            // lastInlineEdit.remove();\r\n        }\r\n    }\r\n\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\n\r\nexport class Zoom implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n    }\r\n\r\n    public handle(e: any, element: DiagramElement): boolean {\r\n        let delta = e.deltaY || e.wheelDeltaY || -e.wheelDelta;\r\n        let d = 1 + (delta / 1000);\r\n\r\n        let values = this.graph.root.getAttribute('viewBox').split(' ');\r\n        const newViewBox = `${values[0]} ${values[1]} ${parseInt(values[2]) * d} ${parseInt(values[3]) * d}`;\r\n        this.graph.root.setAttribute('viewBox', newViewBox);\r\n\r\n        e.preventDefault();\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Zoom.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Zoom.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n}\r\n","export * from './Drag';\r\nexport * from './Select';\r\nexport * from './Zoom';\r\nexport * from './NewEdge';\r\nexport * from './ImportFile';\r\nexport * from './AddNode';\r\n","import { Association } from '../elements/edges';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport Layout from './Layout';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\n\r\nexport class DagreLayout implements Layout {\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        if (!window['dagre']) {\r\n            return;\r\n        }\r\n        let model = graph.$graphModel;\r\n        let g = new window['dagre'].graphlib.Graph();\r\n\r\n        g.setGraph({ marginx: 100, marginy: 20 }).setDefaultEdgeLabel(function () {\r\n            return {};\r\n        });\r\n\r\n        for (let node of model.nodes) {\r\n            g.setNode(node.id, { width: node.getSize().x, height: node.getSize().y });\r\n        }\r\n\r\n        for (let edge of model.edges) {\r\n            g.setEdge(edge.$sNode.id, edge.$tNode.id);\r\n        }\r\n\r\n        window['dagre'].layout(g);\r\n\r\n        g.nodes().forEach(function (nodeId: string) {\r\n            for (let node of model.nodes) {\r\n                if (node.id === nodeId) {\r\n                    node.withPos(g.node(nodeId).x - g.node(nodeId).width / 2, g.node(nodeId).y - g.node(nodeId).height / 2);\r\n                }\r\n            }\r\n        });\r\n        g.edges().forEach(function (e: any) {\r\n            for (let edge of model.edges) {\r\n                if (edge.$sNode.id === e.v && edge.$tNode.id === e.w) {\r\n                    let size = g.edge(e).points.length;\r\n                    edge.clearPoints();\r\n                    for (let i = 0; i < size; i++) {\r\n                        let point: SVGPoint = g.edge(e).points[i];\r\n                        edge.addPoint(point.x, point.y);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n}\r\n","import {DiagramElement} from '../elements/BaseElements';\r\nimport Layout from './Layout';\r\nimport {Graph} from '../elements/Graph';\r\nimport {Association} from '../elements/edges/Association';\r\nimport {Node} from '../elements/nodes/Node';\r\nimport {Control} from '../Control';\r\n\r\nexport class LayoutGraphMin {\r\n    public nodes: Object = {};\r\n    public edges: Array<Object> = [];\r\n    public outEdges: Object = {};\r\n    public inEdges: Object = {};\r\n    public dummyNodes: Array<LayoutGraphNode> = [];\r\n    public dummyEdges: Object = {};\r\n    public count: number = 0;\r\n    public minRank: number = Number.POSITIVE_INFINITY;\r\n    public maxRank: number = 0;\r\n    public maxHeight: number = 0;\r\n    public maxWidth: number = 0;\r\n    public ranksep: number = 0;\r\n    public edgesLabel: Array<Object> = [];\r\n\r\n    public nodeCount(): number {\r\n        return this.count;\r\n    }\r\n\r\n    public node(id: string) {\r\n        return this.nodes[id];\r\n    }\r\n\r\n    public setNode(id: string, n: LayoutGraphNode) {\r\n        if (n && !this.nodes[id]) {\r\n            this.nodes[id] = n;\r\n            this.count = this.count + 1;\r\n        } else if (!n && this.nodes[id]) {\r\n            delete this.nodes[id];\r\n        }\r\n    }\r\n}\r\n\r\nexport class LayoutGraphNode {\r\n    public id: string;\r\n    public width: number;\r\n    public height: number;\r\n    public x: number;\r\n    public y: number;\r\n    public edgeObj: LayoutGraphEdge;\r\n    public rank: number;\r\n\r\n    constructor(id: string, width: number, height: number, x: number, y: number) {\r\n        this.id = id;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n\r\nexport class LayoutGraphEdge {\r\n    public source: string;\r\n    public target: string;\r\n}\r\n\r\n// \t\t\t\t######################################################### DagreGraph #########################################################\r\nexport class DagreLayoutMin implements Layout {\r\n    public static EDGE_KEY_DELIM = '\\x01';\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        let g, layoutNode, nodes, newEdge, edges;\r\n        let i, n, x, y, sId, tId, split = DagreLayoutMin.EDGE_KEY_DELIM;\r\n        let e: Association;\r\n\r\n        nodes = node['nodes'];\r\n        edges = node['edges'];\r\n        g = new LayoutGraphMin();\r\n\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            g.setNode(n.id, new LayoutGraphNode(n.id, n.getSize().x, n.getSize().y, n.getPos().x, n.getPos().y));\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            sId = this.getNodeId(e.$sNode);\r\n            tId = this.getNodeId(e.$tNode);\r\n            if (sId > tId) {\r\n                let tmp = tId;\r\n                tId = sId;\r\n                sId = tmp;\r\n            }\r\n            let idAB = sId + split + tId + split;\r\n            let idBA = tId + split + sId + split;\r\n            if (sId !== tId && g.edgesLabel.indexOf(idAB) < 0 && g.edgesLabel.indexOf(idBA) < 0) {\r\n                newEdge = {source: sId, target: tId, minlen: 1, weight: 1};\r\n                g.edges.push(newEdge);\r\n                g.edgesLabel.push(idAB);\r\n                // In Edges\r\n                if (!g.inEdges[tId]) {\r\n                    g.inEdges[tId] = [];\r\n                }\r\n                g.inEdges[tId].push(newEdge);\r\n\r\n                // Out Edges\r\n                if (!g.outEdges[sId]) {\r\n                    g.outEdges[sId] = [];\r\n                }\r\n                g.outEdges[sId].push(newEdge);\r\n            }\r\n        }\r\n        this.layouting(g);\r\n        // Set the layouting back\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            layoutNode = g.node(n.id);\r\n            x = n.getPos().x;\r\n            y = n.getPos().y;\r\n            if (x < 1 && y < 1) {\r\n                n.withPos(Math.ceil(layoutNode.x), Math.ceil(layoutNode.y));\r\n            }\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            // OBSOLETE method:  e.calc(graph.canvas);\r\n        }\r\n        graph.draw();\r\n    }\r\n\r\n    public getNodeId(node: Control): string {\r\n        if (node.$owner) {\r\n            return this.getNodeId(node.$owner) || node.id;\r\n        }\r\n        return node.id;\r\n    }\r\n\r\n    public layouting(g: LayoutGraphMin) {\r\n        this.longestPath(g);\r\n        this.normalizeRanks(g);\r\n        this.normalizeEdge(g);\r\n        // this.setSimpleOrder(g);\r\n        this.order(g);\r\n        g.ranksep = 25;\r\n        // remove Dummy\r\n        this.removeDummy(g);\r\n        this.position(g);\r\n    }\r\n\r\n    public setSimpleOrder(g: LayoutGraphMin) {\r\n        let i, n;\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            n.order = n.rank;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Applies heuristics to minimize edge crossings in the graph and sets the best\r\n     * order solution as an order attribute on each node.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Graph must be DAG\r\n     *    2. Graph nodes must be objects with a \"rank\" attribute\r\n     *    3. Graph edges must have the \"weight\" attribute\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Graph nodes will have an \"order\" attribute based on the results of the\r\n     *       algorithm.\r\n     */\r\n    public order(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        let visited = {};\r\n        let node, n, order, i;\r\n        for (i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (n in g.nodes) {\r\n            if (visited[n]) {\r\n                continue;\r\n            }\r\n            visited[n] = true;\r\n            node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank].push(n);\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                g.nodes[layering[order][n]].order = parseInt(n);\r\n            }\r\n        }\r\n        // Fix resolve conflict\r\n        for (order in layering) {\r\n            if (layering[order].length > 1) {\r\n                for (n in layering[order]) {\r\n                    if (layering[order].hasOwnProperty(n) === false) {\r\n                        continue;\r\n                    }\r\n                    let name = layering[order][n];\r\n                    let sum = 0;\r\n                    let weight = 1;\r\n                    let edges = g.dummyEdges[name];\r\n                    if (edges) {\r\n                        for (i in edges) {\r\n                            if (edges.hasOwnProperty(i) === false) {\r\n                                continue;\r\n                            }\r\n                            let edge = edges[i];\r\n                            let nodeU = g.node(edge.target);\r\n                            sum = sum + (edge.weight * nodeU.order);\r\n                            weight = weight + edge.weight;\r\n                        }\r\n                    }\r\n                    g.node(name).barycenter = sum / weight;\r\n                    g.node(name).weight = weight;\r\n                }\r\n            } else if (layering[order].length > 0) {\r\n                for (n in layering[order]) {\r\n                    let name = layering[order][n];\r\n                    g.node(name).barycenter = 1;\r\n                    g.node(name).weight = 1;\r\n                }\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                let node = g.nodes[layering[order][n]];\r\n                node.order = parseInt(n) + node.barycenter * node.weight;\r\n                if (isNaN(node.order)) {\r\n                    console.log('ERROR');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public removeDummy(g: LayoutGraphMin) {\r\n        for (let z in g.dummyNodes) {\r\n            let node = g.dummyNodes[z];\r\n            g.setNode(node.id, null);\r\n        }\r\n        g.dummyNodes = [];\r\n        g.dummyEdges = {};\r\n    }\r\n\r\n    /*\r\n     * Breaks any long edges in the graph into short segments that span 1 layer\r\n     * each. This operation is undoable with the denormalize function.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. The input graph is a DAG.\r\n     *    2. Each node in the graph has a \"rank\" property.\r\n     *\r\n     * Post-condition:\r\n     *\r\n     *    1. All edges in the graph have a length of 1.\r\n     *    2. Dummy nodes are added where edges have been split into segments.\r\n     *    3. The graph is augmented with a \"dummyChains\" attribute which contains\r\n     *       the first dummy in each chain of dummy nodes produced.\r\n     */\r\n    public normalizeEdge(g: LayoutGraphMin): void {\r\n        let i: number = 1;\r\n        for (let id in g.edges) {\r\n            let e: LayoutGraphEdge = <LayoutGraphEdge>g.edges[id];\r\n            let v: string = e.source;\r\n            let vRank = g.node(v).rank;\r\n            const w: string = e.target;\r\n            const wRank: number = g.node(w).rank;\r\n            let name: string;\r\n\r\n            if (wRank === vRank + 1) {\r\n                continue;\r\n            }\r\n\r\n            let dummy;\r\n            for (vRank = vRank + 1; vRank < wRank; ++vRank) {\r\n                name = '_d' + e.source + e.target + (i++);\r\n                let newEdge = {source: v, target: name, minlen: 1, weight: 1};\r\n                dummy = new LayoutGraphNode(name, 0, 0, 0, 0);\r\n                dummy.edgeObj = e;\r\n                dummy.rank = vRank;\r\n                // Dummy Edges\r\n                if (!g.dummyEdges[v]) {\r\n                    g.dummyEdges[v] = [];\r\n                }\r\n                g.dummyEdges[v].push(newEdge);\r\n\r\n                g.dummyNodes.push(dummy);\r\n                g.setNode(dummy.id, dummy);\r\n                v = name;\r\n            }\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Initializes ranks for the input graph using the longest path algorithm. This\r\n     * algorithm scales well and is fast in practice, it yields rather poor\r\n     * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\r\n     * ranks wide and leaving edges longer than necessary. However, due to its\r\n     * speed, this algorithm is good for getting an initial ranking that can be fed\r\n     * into other algorithms.\r\n     *\r\n     * This algorithm does not normalize layers because it will be used by other\r\n     * algorithms in most cases. If using this algorithm directly, be sure to\r\n     * run normalize at the end.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Input graph is a DAG.\r\n     *    2. Input graph node labels can be assigned properties.\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Each node will be assign an (unnormalized) \"rank\" property.\r\n     */\r\n    public longestPath(g: LayoutGraphMin) {\r\n        let i, n, visited = [];\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            visited.push(i);\r\n            n.rank = this.findAllPaths(g, n, 0, visited);\r\n            g.minRank = Math.min(g.minRank, n.rank);\r\n        }\r\n    }\r\n\r\n    public findAllPaths(g: LayoutGraphMin, n: Node, currentCost: number, path: Array<String>) {\r\n        let min: number = 0;\r\n        let id: string;\r\n        let z: number;\r\n        let target;\r\n        if (g.outEdges[n.id]) {\r\n            for (z = 0; z < g.outEdges[n.id].length; z++) {\r\n                id = g.outEdges[n.id][z].target;\r\n                target = g.nodes[id];\r\n                if (path[id]) {\r\n                    min = Math.min(min, target.rank);\r\n                } else if (path.indexOf(id) < 0) {\r\n                    min = Math.min(min, this.findAllPaths(g, target, currentCost - 2, path));\r\n                } else {\r\n                    min = currentCost;\r\n                }\r\n            }\r\n            return min;\r\n        }\r\n        return currentCost;\r\n    }\r\n\r\n    /*\r\n     * Adjusts the ranks for all nodes in the graph such that all nodes v have\r\n     * rank(v) >= 0 and at least one node w has rank(w) = 0.\r\n     */\r\n    public normalizeRanks(g: LayoutGraphMin) {\r\n        let min = g.minRank;\r\n        let value;\r\n        g.maxRank = Number.NEGATIVE_INFINITY;\r\n        g.maxHeight = 0;\r\n        g.maxWidth = 0;\r\n        for (let i in g.nodes) {\r\n            let node = g.nodes[i];\r\n            if (node.rank !== undefined) {\r\n                node.rank -= min;\r\n                value = Math.abs(node.rank);\r\n                if (value > g.maxRank) {\r\n                    g.maxRank = value;\r\n                }\r\n                g.maxHeight = Math.max(g.maxHeight, node.height);\r\n                g.maxWidth = Math.max(g.maxWidth, node.width);\r\n            }\r\n        }\r\n    }\r\n\r\n    public position(g: LayoutGraphMin) {\r\n        this.positionY(g);\r\n        let list = this.positionX(g);\r\n        for (let i in list) {\r\n            for (let pos in list[i]) {\r\n                if (list[i].hasOwnProperty(pos) === false) {\r\n                    continue;\r\n                }\r\n                if (g.node(list[i][pos])) {\r\n                    g.node(list[i][pos]).x = parseInt(pos) * g.maxWidth;\r\n                }\r\n            }\r\n\r\n        }\r\n    }\r\n\r\n    public positionY(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        let rankSep = g.ranksep;\r\n        let prevY = 0;\r\n        for (let layer in layering) {\r\n            let maxHeight = g.maxHeight;\r\n            for (let v in layering[layer]) {\r\n                if (layering[layer].hasOwnProperty(v) === false) {\r\n                    continue;\r\n                }\r\n                let id = layering[layer][v];\r\n                g.nodes[id].y = prevY + maxHeight / 2;\r\n            }\r\n            prevY += maxHeight + rankSep;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\r\n     * function will produce a matrix with the ids of each node.\r\n     */\r\n    public buildLayerMatrix(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        for (let i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (let n in g.nodes) {\r\n            let node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank][node.order] = n;\r\n            }\r\n        }\r\n        return layering;\r\n    }\r\n\r\n    public positionX(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        return layering;\r\n    }\r\n}\r\n","import { Point } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport Layout from './Layout';\r\n\r\nexport class Random implements Layout {\r\n\r\n  public layout(graph: Graph) {\r\n\r\n    let model = graph.$graphModel;\r\n\r\n    if (model.nodes) {\r\n      for (let node of model.nodes) {\r\n        let pos: Point = node.getPos();\r\n        if (pos.x === 0 && pos.y === 0) {\r\n          let x = Util.getRandomInt(0, graph.canvasSize.width);\r\n          let y = Util.getRandomInt(0, graph.canvasSize.height);\r\n          node.withPos(x, y);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","export * from './DagreLayout';\r\nexport * from './Random';\r\nexport * from './DagreLayoutMin';\r\n\r\nimport {DagreLayout} from './DagreLayout';\r\nimport {DagreLayoutMin} from './DagreLayoutMin';\r\nimport {Random} from './Random';\r\nnew DagreLayout();\r\nnew DagreLayoutMin();\r\nnew Random();\r\n","import {VirtualKeyBoard} from './VirtualKeyBoard';\r\n\r\nexport {Point} from './elements/BaseElements';\r\nexport {Bridge, DelegateAdapter} from './Bridge';\r\nexport {Graph} from './elements/Graph';\r\nexport * from './elements/nodes';\r\nexport * from './elements/edges';\r\nexport * from './adapters';\r\nexport * from './UML';\r\nimport {Point} from './elements/BaseElements';\r\nimport {Graph} from './elements/Graph';\r\nimport {ClassEditor} from './elements/ClassEditor';\r\nimport {Bridge} from './Bridge';\r\nimport {Util} from './util';\r\nimport * as nodes  from './elements/nodes';\r\nimport * as edges from './elements/edges';\r\nimport {ScrumBoard} from './ScrumBoard';\r\n\r\nif (!window['Point']) {\r\n    window['Point'] = Point;\r\n    window['Graph'] = Graph;\r\n    window['bridge'] = new Bridge();\r\n    window['Util'] = Util;\r\n    window['Class'] = nodes.Class;\r\n    window['Association'] = edges.Association;\r\n    window['SymbolLibary'] = nodes.SymbolLibary;\r\n    window['ClassEditor'] = ClassEditor;\r\n    window['VirtualKeyBoard'] = VirtualKeyBoard;\r\n    window['ScrumBoard'] = ScrumBoard;\r\n}\r\n","'use strict';\r\nimport { CSS } from './CSS';\r\nimport { Node } from './elements/nodes/Node';\r\nimport { DiagramElement, Point } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport class Util {\r\n\r\n    public static isAutoSave: boolean;\r\n\r\n    static getRandomInt(min: number, max: number): number {\r\n        return Math.floor(Math.random() * (max - min + 1)) + min;\r\n    }\r\n\r\n    static createShape(attrs: any): SVGSVGElement {\r\n        let xmlns = attrs.xmlns || 'http://www.w3.org/2000/svg';\r\n        let shape = document.createElementNS(xmlns, attrs.tag);\r\n\r\n        for (let attr in attrs) {\r\n            if (!attrs.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr !== 'tag') {\r\n                shape.setAttribute(attr, attrs[attr]);\r\n\r\n            }\r\n        }\r\n        return <SVGSVGElement><any>shape;\r\n    }\r\n\r\n    static toPascalCase(value: string): string {\r\n        value = value.charAt(0).toUpperCase() + value.substring(1).toLowerCase();\r\n        return value;\r\n    }\r\n\r\n    static isSVG(tag: string): boolean {\r\n        let i,\r\n            list = ['svg', 'path', 'polygon', 'polyline', 'line', 'title', 'rect', 'filter', 'feGaussianBlur', 'feOffset', 'feBlend', 'linearGradient', 'stop', 'text', 'symbol', 'textPath', 'defs', 'fegaussianblur', 'feoffset', 'feblend', 'circle', 'ellipse', 'g'];\r\n        for (i = 0; i < list.length; i += 1) {\r\n            if (list[i] === tag) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    static createHTML(node: any): HTMLElement {\r\n        return <HTMLElement>this.create(node);\r\n    }\r\n    static create(node: any): Element {\r\n        let style, item, xmlns, key, tag, k;\r\n        if (document.createElementNS && (this.isSVG(node.tag) || node.xmlns)) {\r\n            if (node.xmlns) {\r\n                xmlns = node.xmlns;\r\n            } else {\r\n                xmlns = 'http://www.w3.org/2000/svg';\r\n            }\r\n            if (node.tag === 'img' && xmlns) {\r\n                item = document.createElementNS(xmlns, 'image');\r\n                item.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\r\n                item.setAttributeNS('http://www.w3.org/1999/xlink', 'href', node.src);\r\n            } else {\r\n                item = document.createElementNS(xmlns, node.tag);\r\n            }\r\n        } else {\r\n            item = document.createElement(node.tag);\r\n        }\r\n        tag = node.tag.toLowerCase();\r\n        for (key in node) {\r\n            if (!node.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            k = key.toLowerCase();\r\n            if (node[key] === null) {\r\n                continue;\r\n            }\r\n            if (k === 'tag' || k.charAt(0) === '$' || k === '$graphModel') {\r\n                continue;\r\n            }\r\n            if (k.charAt(0) === '#') {\r\n                item[k.substring(1)] = node[key];\r\n                continue;\r\n            }\r\n            if (k === 'rotate') {\r\n                item.setAttribute('transform', 'rotate(' + node[key] + ',' + node.$graphModel.x + ',' + node.$graphModel.y + ')');\r\n                continue;\r\n            }\r\n            if (k === 'value') {\r\n                if (!node[key]) {\r\n                    continue;\r\n                }\r\n                if (tag !== 'input') {\r\n                    if (tag === 'text') {// SVG\r\n                        item.appendChild(document.createTextNode(node[key]));\r\n                    } else {\r\n                        item.innerHTML = node[key];\r\n                    }\r\n                } else {\r\n                    item[key] = node[key];\r\n                }\r\n                continue;\r\n            }\r\n            if (k.indexOf('on') === 0) {\r\n                this.bind(item, k.substring(2), node[key]);\r\n                continue;\r\n            }\r\n            if (k.indexOf('-') >= 0) {\r\n                item.style[key] = node[key];\r\n            } else {\r\n                if (k === 'style' && typeof (node[key]) === 'object') {\r\n                    for (style in node[key]) {\r\n                        if (!node[key].hasOwnProperty(style)) {\r\n                            continue;\r\n                        }\r\n                        if (node[key][style]) {\r\n                            if ('transform' === style) {\r\n                                item.style.transform = node[key][style];\r\n                                item.style.msTransform = item.style.MozTransform = item.style.WebkitTransform = item.style.OTransform = node[key][style];\r\n                            } else {\r\n                                item.style[style] = node[key][style];\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    item.setAttribute(key, node[key]);\r\n                }\r\n            }\r\n        }\r\n        if (node.$parent) {\r\n            node.$parent.appendChild(item);\r\n        }\r\n        if (node.$graphModel) {\r\n            item.$graphModel = node.$graphModel;\r\n        }\r\n        return item;\r\n    }\r\n\r\n    static setSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttribute('width', value);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.setAttribute('height', value);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setAttributeSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttributeNS(null, 'width', value);\r\n        value = Util.getValue(height);\r\n        item.setAttributeNS(null, 'height', value);\r\n    }\r\n\r\n    static setStyleSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setPos(item: any, x: number, y: number): void {\r\n        if (item.x && item.x.baseVal) {\r\n            item.style.left = x + 'px';\r\n            item.style.top = y + 'px';\r\n        } else {\r\n            item.x = x;\r\n            item.y = y;\r\n        }\r\n    }\r\n\r\n    static getValue(value: string | number): number {\r\n        return parseInt(('0' + value).replace('px', ''), 10);\r\n    }\r\n\r\n    static isIE(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('.net') > -1;\r\n    }\r\n\r\n    static isEdge(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('edge') > -1;\r\n    }\r\n\r\n    static isFireFox(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n    }\r\n\r\n    static isSafari(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        return navigator.userAgent.toLowerCase().indexOf('safari') > -1 && !isEdge;\r\n    }\r\n\r\n    static isOpera(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('opera') > -1;\r\n    }\r\n\r\n    static isChrome(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        let isSafari = Util.isSafari();\r\n        return navigator.userAgent.toLowerCase().indexOf('chrome') > -1 && !isEdge && isSafari;\r\n    }\r\n\r\n    static getEventX(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetX'] : event.layerX;\r\n    }\r\n\r\n    static getEventY(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetY'] : event.layerY;\r\n    }\r\n\r\n    static getNumber(str: string): number {\r\n        return parseInt((str || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    static getStyle(styleProp: string): CSS {\r\n        let i, style, diff, current, ref, el = document.createElement('div'), css;\r\n        document.body.appendChild(el);\r\n        css = new CSS(styleProp);\r\n        ref = new CSS(styleProp, el).css;\r\n        style = window.getComputedStyle(el, null);\r\n        el.className = styleProp;\r\n        current = new CSS(styleProp, el).css;\r\n        diff = Util.getNumber(style.getPropertyValue('border-width'));\r\n        for (i in current) {\r\n            if (!current.hasOwnProperty(i)) {\r\n                continue;\r\n            }\r\n            if (i === 'width' || i === 'height') {\r\n                if (Util.getNumber(current[i]) !== 0 && Util.getNumber(current[i]) + diff * 2 !== Util.getNumber(ref[i])) {\r\n                    css.add(i, current[i]);\r\n                }\r\n            } else if (current[i] !== ref[i]) {\r\n                css.add(i, current[i]);\r\n            }\r\n        }\r\n        document.body.removeChild(el);\r\n        return css;\r\n    }\r\n\r\n    static sizeOf(item: string | any, node?: Node): ClientRect {\r\n        let board;\r\n        let rect: ClientRect;\r\n        let addBoard: boolean;\r\n        if (!item) {\r\n            return undefined;\r\n        }\r\n        if (node) {\r\n            board = node.$owner.$view;\r\n            addBoard = false;\r\n        }\r\n\r\n        if (!board) {\r\n            addBoard = true;\r\n            board = Util.createShape({ tag: 'svg', id: 'root', width: 200, height: 200 });\r\n            document.body.appendChild(board);\r\n        }\r\n        if (board.tagName === 'svg') {\r\n            if (typeof item === 'string') {\r\n                item = Util.create({ tag: 'text', $font: true, value: item });\r\n                item.setAttribute('width', '5px');\r\n            }\r\n        } else if (typeof item === 'string') {\r\n            item = document.createTextNode(item);\r\n        }\r\n        board.appendChild(item);\r\n        rect = item.getBoundingClientRect();\r\n        board.removeChild(item);\r\n\r\n        if (addBoard) {\r\n            document.body.removeChild(board);\r\n        }\r\n        return rect;\r\n    }\r\n\r\n    static getColor(style: string, defaultColor?: string) {\r\n        if (style) {\r\n            if (style.toLowerCase() === 'create') {\r\n                return '#008000';\r\n            }\r\n            if (style.toLowerCase() === 'nac') {\r\n                return '#FE3E3E';\r\n            }\r\n            if (style.indexOf('#') === 0) {\r\n                return style;\r\n            }\r\n        }\r\n        if (defaultColor) {\r\n            return defaultColor;\r\n        }\r\n        return '#000';\r\n    }\r\n\r\n    public static utf8$to$b64(str: string): string {\r\n        return window.btoa(encodeURIComponent(str));\r\n    }\r\n\r\n    public static showSVG(control: DiagramElement) {\r\n        let svg = Util.create({\r\n            tag: 'svg',\r\n            style: { left: control.getPos().x, top: control.getPos().y, position: 'absolute' }\r\n        });\r\n        let child = control.getSVG();\r\n        if (child) {\r\n            svg.appendChild(child);\r\n        }\r\n        Util.setSize(svg, control.getSize().x, control.getSize().y);\r\n        document.body.appendChild(svg);\r\n    }\r\n\r\n    public static toJson(ref: JSON | Object): Object {\r\n        let result = {};\r\n        return Util.copy(result, ref, false, false);\r\n    }\r\n\r\n    public static initControl(parent: Control, control: Control, type: string, id: string, json: JSON | Object) {\r\n        if (typeof control.init === 'function') {\r\n            control.init(parent, type, id);\r\n        }\r\n        if (typeof control.load === 'function') {\r\n            control.load(json);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * copy One Json into another\r\n     * @function\r\n     * @param ref reference Json\r\n     * @param src source Json\r\n     * @param full all attributes include privet $\r\n     * @param replace set the original reference or copy it\r\n     * @returns ref\r\n     * @name copy\r\n     */\r\n    public static copy(ref: JSON | Object, src: JSON | Object, full: boolean, replace: boolean) {\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (replace) {\r\n                        ref[i] = src[i];\r\n                        continue;\r\n                    }\r\n                    if (!ref[i]) {\r\n                        if (src[i] instanceof Array) {\r\n                            ref[i] = [];\r\n                        } else {\r\n                            ref[i] = {};\r\n                        }\r\n                    }\r\n                    Util.copy(ref[i], src[i], full, false);\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref[i] = src[i];\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    public static xmlstringify(text: string): string {\r\n        text = text.replace('<', '&lt;');\r\n        text = text.replace('>', '&gt;');\r\n        return text;\r\n    }\r\n\r\n    public static toXML(ref: JSON | Object | any, src: JSON | Object | any, full: boolean, doc: Document): any {\r\n        let name;\r\n        if (!ref) {\r\n            name = src.constructor.name;\r\n            doc = document.implementation.createDocument(null, name, null);\r\n            ref = doc.childNodes[0];\r\n        }\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (!ref.getAttribute(i)) {\r\n                        if (src[i] instanceof Array) {\r\n                            for (let c in src[i]) {\r\n                                if (!src[i].hasOwnProperty(c)) {\r\n                                    continue;\r\n                                }\r\n                                name = src[i][c].constructor.name;\r\n                                let child = doc.createElement(name);\r\n                                ref.appendChild(child);\r\n                                Util.toXML(child, src[i][c], full, doc);\r\n                            }\r\n                        } else {\r\n                            name = src[i].constructor.name;\r\n                            let child = doc.createElement(name);\r\n                            ref.appendChild(child);\r\n                            Util.toXML(child, src[i], full, doc);\r\n                        }\r\n                    } else {\r\n                        Util.toXML(ref.getAttribute(i), src[i], full, doc);\r\n                    }\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref.setAttribute(i, src[i]);\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    static Range(min: Point, max: Point, x: number, y: number) {\r\n        max.x = Math.max(max.x, x);\r\n        max.y = Math.max(max.y, y);\r\n        min.x = Math.min(min.x, x);\r\n        min.y = Math.min(min.y, y);\r\n    }\r\n\r\n    public static getPosition(m: number, n: number, entity: DiagramElement, refCenter: Point) {\r\n        let t, p = [], list, distance = [], min = 999999999, position, i, step = 15;\r\n        let pos: Point = entity.getPos();\r\n        let size: Point = entity.getSize();\r\n        list = [Point.LEFT, Point.RIGHT];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = this.getLRPosition(m, n, entity, list[i]);\r\n            if (t.y >= pos.y && t.y <= (pos.y + size.y + 1)) {\r\n                t.y += (entity['$' + list[i]] * step);\r\n                if (t.y > (pos.y + size.y)) {\r\n                    // Alternative\r\n                    t = Util.getUDPosition(m, n, entity, Point.DOWN, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        list = [Point.UP, Point.DOWN];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = Util.getUDPosition(m, n, entity, list[i]);\r\n            if (t.x >= pos.x && t.x <= (pos.x + size.x + 1)) {\r\n                t.x += (entity['$' + list[i]] * step);\r\n                if (t.x > (pos.x + size.x)) {\r\n                    // Alternative\r\n                    t = this.getLRPosition(m, n, entity, Point.RIGHT, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        for (i = 0; i < p.length; i += 1) {\r\n            if (distance[i] < min) {\r\n                min = distance[i];\r\n                position = p[i];\r\n            }\r\n        }\r\n        return position;\r\n    }\r\n\r\n    public static getUDPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let x, y: number = pos.y;\r\n        if (p === Point.DOWN) {\r\n            y += size.y;\r\n        }\r\n        x = (y - n) / m;\r\n        if (step) {\r\n            x += e['$' + p] * step;\r\n            if (x < pos.x) {\r\n                x = pos.x;\r\n            } else if (x > (pos.x + size.x)) {\r\n                x = pos.x + size.x;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static getLRPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let y: number, x: number = pos.x;\r\n        if (p === Point.RIGHT) {\r\n            x += size.x;\r\n        }\r\n        y = m * x + n;\r\n        if (step) {\r\n            y += e['$' + p] * step;\r\n            if (y < pos.y) {\r\n                y = pos.y;\r\n            } else if (y > (pos.y + size.y)) {\r\n                y = pos.y + size.y;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static hasClass(element: Element, cls: string) {\r\n        let className = element.getAttribute('class');\r\n        return className.indexOf(cls) > 0;\r\n    }\r\n    public static addClass(element: Element, cls: string) {\r\n        if (!Util.hasClass(element, cls)) {\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className + ' ' + cls);\r\n        }\r\n    }\r\n    public static removeClass(element: Element, cls: string) {\r\n        if (Util.hasClass(element, cls)) {\r\n            let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className.replace(reg, ' ').trim());\r\n        }\r\n    }\r\n\r\n    public static startsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.startsWith) {\r\n            return s.indexOf(searchS) === 0;\r\n        }\r\n\r\n        return s.startsWith(searchS);\r\n    }\r\n\r\n    public static endsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.endsWith) {\r\n            let lastIndex = s.lastIndexOf(searchS);\r\n            return lastIndex !== -1 && lastIndex === (s.length - 1);\r\n        }\r\n\r\n        return s.endsWith(searchS);\r\n    }\r\n\r\n    public static includes(s: string, searchS: string): boolean {\r\n        if (!String.prototype.includes) {\r\n            let idx = s.indexOf(searchS);\r\n            return idx > -1;\r\n        }\r\n        if (s === null) {\r\n            return false;\r\n        }\r\n\r\n        return s.includes(searchS);\r\n    }\r\n\r\n    public static isParentOfChild(parent: Element, child: Element): boolean {\r\n\r\n        if (!parent || !child) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isIE()) {\r\n            let children = parent.childNodes;\r\n            // let found = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                let childItem = children[i];\r\n                if (childItem === child) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        return parent.contains(child);\r\n    }\r\n\r\n    public static createCustomEvent(type: string, params?: any): CustomEvent {\r\n        let evt: CustomEvent;\r\n\r\n        if (typeof window['CustomEvent'] !== 'function') {\r\n            params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n            evt = document.createEvent('CustomEvent');\r\n            evt.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\r\n            return evt;\r\n        }\r\n\r\n        evt = new CustomEvent(type);\r\n\r\n        return evt;\r\n    }\r\n\r\n    public static saveToLocalStorage(model: any): boolean {\r\n        if (!this.isAutoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isLocalStorageSupported()) {\r\n            if (model) {\r\n                if (model.$isLoading) {\r\n                    return false;\r\n                }\r\n                let jsonObj = Util.toJson(model);\r\n                let data = JSON.stringify(jsonObj, null, '\\t');\r\n                localStorage.setItem('diagram', data);\r\n            } else {\r\n                localStorage.removeItem('diagram');\r\n            }\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static getDiagramFromLocalStorage(): string {\r\n        if (Util.isLocalStorageSupported()) {\r\n            return localStorage.getItem('diagram');\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    public static isLocalStorageSupported(): boolean {\r\n        if (this.isEdge()) {\r\n            return false;\r\n        }\r\n        return localStorage !== undefined;\r\n    }\r\n}\r\n"],"sourceRoot":""}
Severity: Minor
Found in doc/diagram.js.map by fixme

FIXME found
Open

{"version":3,"sources":["webpack://DiagramJS/webpack/bootstrap","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Adapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Bridge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/BridgeElement.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/CSS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Control.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Data.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventBus.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/JSEPS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Palette.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertiesPanel.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertyBinder.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/RGBColor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/SVGConverter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/ScrumBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Toolbar.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/UML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/VirtualKeyBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/JavaAdapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/BaseElements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/ClassEditor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Graph.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Model.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregate.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Association.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Composition.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Generalisation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Implements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Attribute.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/AutoComplete.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/BR.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Button.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Class.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/ClazzProperty.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Dice.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Div.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Form.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/HTML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/InfoText.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Input.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Label.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Method.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Node.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/SO.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/StereoType.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Symbol.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Table.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/AddNode.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Drag.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/GraphListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/ImportFile.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/NewEdge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Select.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Zoom.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayout.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayoutMin.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/Random.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/main.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/util.ts"],"names":[],"mappings":"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","file":"diagram.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./main.ts\");\n","export abstract class Adapter {\r\n    public id: string = null;\r\n\r\n    abstract update(evt: Object): boolean;\r\n}\r\n","'use strict';\r\n\r\nimport * as controls from './elements/nodes';\r\nimport * as adapters from './adapters';\r\nimport Data from './Data';\r\nimport {Control} from './Control';\r\nimport {Adapter} from './Adapter';\r\nimport {Graph} from './elements';\r\nimport {Util} from './util';\r\nimport {Point} from './elements';\r\n\r\nexport class Bridge extends Control {\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public static version: string = '0.42.01.1601007-1739';\r\n    private controlFactory: Object = {};\r\n    private adapterFactory: Object = {};\r\n    private controls: Object = {};\r\n    private adapters: Object = {};\r\n    private items: Object = {};\r\n    private controlNo: number = 1;\r\n    private online: boolean = true;\r\n    private language: string = navigator.language.toUpperCase();\r\n    private toolBar: HTMLElement;\r\n\r\n    constructor(viewRoot?: HTMLElement) {\r\n        super();\r\n        let i;\r\n\r\n        if (viewRoot) {\r\n            this.$view = viewRoot;\r\n        }\r\n\r\n        let keys: string[] = Object.keys(adapters);\r\n        for (i = 0; i < keys.length; i++) {\r\n            let child = adapters[keys[i]];\r\n            if (child && child.id) {\r\n                this.adapterFactory[child.id.toLowerCase()] = child;\r\n            }\r\n        }\r\n\r\n        keys = Object.keys(controls);\r\n        for (i = 0; i < keys.length; i++) {\r\n            this.addControl(controls[keys[i]]);\r\n        }\r\n        this.addControl(Graph);\r\n\r\n        let that = this;\r\n        window.addEventListener('load', function () {\r\n            let updateOnlineStatus = function updateOnlineStatus() {\r\n                that.setOnline(navigator.onLine);\r\n            };\r\n            window.addEventListener('online', updateOnlineStatus);\r\n            window.addEventListener('offline', updateOnlineStatus);\r\n        });\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public setOnline(value: boolean) {\r\n        this.online = value;\r\n        if (this.toolBar.children[0]) {\r\n            this.toolBar.children[0].className = value ? 'online' : 'offline';\r\n        }\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addToolbar(): boolean {\r\n        if (this.toolBar) {\r\n            return false;\r\n        }\r\n        this.toolBar = document.createElement('div');\r\n        this.toolBar.className = 'onlineStatus';\r\n        let child = document.createElement('div');\r\n        child.className = 'online';\r\n        this.toolBar.appendChild(child);\r\n        child = document.createElement('div');\r\n        child.className = 'lang';\r\n        child.innerHTML = this.language;\r\n        this.toolBar.appendChild(child);\r\n\r\n        let body: HTMLElement = document.getElementsByTagName('body')[0];\r\n        body.insertBefore(this.toolBar, body.firstChild);\r\n        // Refresh Online Status\r\n        this.setOnline(this.online);\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addListener = function (listener: any) {\r\n        this.listener.push(listener);\r\n    };\r\n\r\n    public addControl(control: any) {\r\n        if (control && control.name) {\r\n            this.controlFactory[control.name.toLowerCase()] = control;\r\n        }\r\n    }\r\n\r\n    public getId(): string {\r\n        return 'control' + (this.controlNo++);\r\n    }\r\n\r\n    public adapterUpdate(message: string) {\r\n        let keys: string[] = Object.keys(this.adapters);\r\n        if (keys.length > 0) {\r\n            let i;\r\n            for (i = 0; i < keys.length; i++) {\r\n                let adapterList = this.adapters[keys[i]];\r\n                if (adapterList instanceof Adapter) {\r\n                    adapterList.update(message);\r\n                } else {\r\n                    for (let adapter of adapterList) {\r\n                        adapter.update(message);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        let config = {}, className: string, id: string;\r\n        if (typeof(json) === 'string') {\r\n            // Only a String\r\n            config['id'] = '' + json;\r\n            let item = document.getElementById(config['id']);\r\n            let className: string;\r\n            if (item) {\r\n                className = item.getAttribute('class');\r\n                if (!className) {\r\n                    className = item.getAttribute('classname') || '';\r\n                }\r\n                // Found Element and now config Data element\r\n                if (item.getAttribute('property')) {\r\n                    if (this.hasItem(item.getAttribute('property'))) {\r\n                        let data = this.getItem(item.getAttribute('property'));\r\n                        for (let key in data.prop) {\r\n                            if (item.getAttribute(key)) {\r\n                                data.setValue(key, item.getAttribute(key));\r\n                            }\r\n                        }\r\n                        if (item.getAttribute('property')) {\r\n                            // TODO: FIXME!!!\r\n                            // data.property = item.getAttribute(\"property\");\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                className = '' + json;\r\n            }\r\n            className = className.toLowerCase();\r\n            config['className'] = className;\r\n        } else {\r\n            config = <JSON>json;\r\n        }\r\n        // Config validate\r\n        if (!config['id']) {\r\n            config['id'] = this.getId();\r\n        }\r\n        // Backup for Old Graph\r\n        if (!config['className'] && (config['type'] === 'clazzdiagram' || config['type'] === 'objectdiagram')) {\r\n            config['className'] = 'graph';\r\n        }\r\n\r\n        className = config['className'] || config['class'];\r\n        className = className.toLocaleLowerCase();\r\n        id = config['id'];\r\n\r\n        // Check For Control or Data\r\n        if ((config['prop'] || config['upd'] || config['rem']) && this.controls[id] === null) {\r\n            // Its Data\r\n            let newData = !this.hasItem(config['id']);\r\n            let item: Data = this.getItem(config['id']);\r\n            // TODO: FIXME!!!\r\n            // if (id && className && !item.property) {\r\n            //      item.property = className;\r\n            // }\r\n            if (newData) {\r\n                for (let i in this.controls) {\r\n                    if (this.controls.hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    this.controls[i].addItem(this, item);\r\n                }\r\n            }\r\n            // Add all Values to item\r\n            item.addProperties(config);\r\n            // Bridge.addProperties(config['prop'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return item;\r\n        }\r\n\r\n        let control;\r\n        if (this.controls[id]) {\r\n            control = this.controls[id];\r\n            control.initControl(json);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return control;\r\n        }\r\n\r\n        if (typeof(this.controlFactory[className]) === 'object' || typeof(this.controlFactory[className]) === 'function') {\r\n            let obj = this.controlFactory[className];\r\n            control = new obj(json);\r\n            Util.initControl(owner || this, control, config['property'], id, json);\r\n\r\n            if (control.id) {\r\n                this.controls[control.id] = control;\r\n            } else {\r\n                this.controls[id] = control;\r\n            }\r\n\r\n            // create DataObject and register this control as listener to it\r\n            // let obj = {id:id};\r\n            // let data: Data = this.load(obj);\r\n            // data.addListener(this);\r\n\r\n            // Try to Show\r\n            if (typeof control.getSVG === 'function' && typeof control.getSize === 'function') {\r\n                let size: Point = control.getSize();\r\n\r\n                let svg = Util.createShape({\r\n                    tag: 'svg',\r\n                    id: 'root',\r\n                    width: size.x,\r\n                    height: size.y\r\n                });\r\n\r\n                let view = control.getSVG();\r\n                svg.appendChild(view);\r\n                document.getElementsByTagName('body')[0].appendChild(svg);\r\n            }\r\n            return control;\r\n        }\r\n        return null;\r\n        // bridge.load('{class:table, columns:[{id:'firstname'}, {id:'lastname'}]}');\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n\r\n        if (this.items[id] !== undefined) {\r\n            return true;\r\n        }\r\n        id = id.split('.')[0];\r\n        return (this.items[id] !== undefined);\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return this.items;\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        let item = this.items[id];\r\n        if (!item) {\r\n            id = id.split('.')[0];\r\n            item = this.items[id];\r\n            if (!item) {\r\n                item = new Data();\r\n                item.id = id;\r\n                this.items[id] = item;\r\n            }\r\n        }\r\n        return item;\r\n    }\r\n\r\n    /**\r\n     * Method for executing user input -> Event\r\n     * @param object\r\n     * @param attribute\r\n     * @param oldValue\r\n     * @param newValue\r\n     * @returns {boolean}\r\n     */\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        alert('Bridge.setValue: oldVal:' + oldValue + ', newVal: ' +  + newValue + ', attribute: ' + attribute + ', object: ' + JSON.stringify(object));\r\n        let obj: Data;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n\r\n        } else if (object instanceof Data) {\r\n            obj = object;\r\n            id = object.id;\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = <Data>object;\r\n            id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return false;\r\n        }\r\n        if (obj) {\r\n            // Execute Update to Data\r\n            obj.setValue(attribute, newValue);\r\n            // Could be done here, but currently is done at this.execueChange..:\r\n            // obj[attribute] = value;\r\n        }\r\n\r\n        /*let tmp = {'id': id};\r\n        if (typeof(newValue) !== 'undefined' && newValue !== null) {\r\n            let upd = {};\r\n            upd[attribute] = newValue;\r\n            tmp['upd'] = upd;\r\n        }\r\n        if (typeof(oldValue) !== 'undefined' && oldValue !== null) {\r\n            let rem = {};\r\n            rem[attribute] = oldValue;\r\n            tmp['rem'] = rem;\r\n        }*/\r\n        // this.load(tmp);\r\n        return true;\r\n    }\r\n\r\n    public getValue(object: Object, attribute: string): any {\r\n        let obj: Object;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = object;\r\n            // id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return;\r\n        }\r\n        if (obj) {\r\n            if (obj.hasOwnProperty(attribute)) {\r\n                return obj[attribute];\r\n            } else if (obj instanceof Data) {\r\n                return (<Data>obj).getValue(attribute);\r\n            } else {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    public getNumber(object: Object, attribute: string, defaultValue: number = 0): number {\r\n        let res = <number>this.getValue(object, attribute);\r\n        if (typeof res === 'number') {\r\n            return res;\r\n        } else if (typeof res === 'string') {\r\n            // check whether res is a number\r\n            let value = Number(res);\r\n            if (value || value === 0) {\r\n                return value;\r\n            }\r\n        }\r\n        return defaultValue;\r\n    }\r\n\r\n    getControl(controlId: string) {\r\n        return this.controls[controlId];\r\n    }\r\n\r\n    public registerListener(eventType: string, control: Control, callBackfunction: string): Control {\r\n        if (typeof control === 'string') {\r\n            control = this.getControl(<string>control);\r\n        }\r\n        if (!control) {\r\n            return null;\r\n        }\r\n        if (eventType) {\r\n            eventType = eventType.toLowerCase();\r\n        }\r\n        control.registerListenerOnHTMLObject(eventType);\r\n        if (callBackfunction) {\r\n            let adapter: DelegateAdapter = new DelegateAdapter();\r\n            adapter.callBackfunction = callBackfunction;\r\n            adapter.id = control.getId();\r\n            this.addAdapter(adapter, eventType);\r\n        }\r\n        return control;\r\n    }\r\n\r\n    public addAdapter(adapter: Adapter | string, eventType: string): Adapter {\r\n        if (!eventType) {\r\n            eventType = '';\r\n        }\r\n        let result: Adapter;\r\n        if (adapter instanceof String) {\r\n            let obj = this.adapterFactory[adapter.toLowerCase()];\r\n            result = new obj();\r\n        } else {\r\n            result = <Adapter>adapter;\r\n        }\r\n        let handlers = this.adapters[eventType];\r\n\r\n        if (handlers === null || handlers === undefined) {\r\n            handlers = [];\r\n            this.adapters[eventType] = handlers;\r\n        }\r\n        handlers.push(result);\r\n        return result;\r\n    }\r\n\r\n    public fireEvent(evt: Event): void {\r\n        let handlers = this.adapters[''];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n        handlers = this.adapters[evt['eventType']];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport class DelegateAdapter extends Adapter {\r\n    adapter: Adapter;\r\n    callBackfunction: string;\r\n\r\n    update(evt: Event): boolean {\r\n        if (this.adapter) {\r\n            this.adapter.update(evt);\r\n            return true;\r\n        } else if (this.callBackfunction) {\r\n            return this.executeFunction(this.callBackfunction, evt);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public setAdapter(adapter: Adapter): boolean {\r\n        this.adapter = adapter;\r\n        return true;\r\n    }\r\n\r\n    private executeFunction(strValue: string, evt: Event): boolean {\r\n        let scope = window;\r\n        let scopeSplit = strValue.split('.');\r\n        for (let i = 0; i < scopeSplit.length - 1; i++) {\r\n            scope = scope[scopeSplit[i]];\r\n            if (scope === undefined) {\r\n                return false;\r\n            }\r\n        }\r\n        let fn: any = scope[scopeSplit[scopeSplit.length - 1]];\r\n        if (typeof fn === 'function') {\r\n            fn.call(scope);\r\n            return true;\r\n        } else {\r\n            window['callBack1'].update(evt);\r\n\r\n        }\r\n        return false;\r\n    }\r\n}\r\n","'use strict';\r\nimport Data from './Data';\r\n\r\nexport default class BridgeElement {\r\n    private static elementSet: BridgeElement[] = [];\r\n    public model: Data;\r\n    public id: string;\r\n    public gui: HTMLElement;\r\n\r\n    constructor(model: Data) {\r\n        this.model = model;\r\n        this.id = model.id;\r\n        BridgeElement.elementSet.push(this);\r\n    }\r\n}\r\n","import {Util} from './util';\r\n\r\n// \t\t\t\t######################################################### CSS #########################################################\r\nexport class CSS {\r\n    public css: Object;\r\n    private name: string;\r\n\r\n    constructor(name: string, item?: any) {\r\n        let i, value, border: string, prop, el;\r\n        this.name = name;\r\n        this.css = {};\r\n        if (!item) {\r\n            return;\r\n        }\r\n\r\n        el = window.getComputedStyle(item, null);\r\n        border = el.getPropertyValue('border');\r\n        for (i in el) {\r\n            prop = i;\r\n            value = el.getPropertyValue(prop);\r\n            if (value && value !== '') {\r\n                // optimize CSS\r\n                if (border) {\r\n                    if (prop === 'border-bottom' || prop === 'border-right' || prop === 'border-top' || prop === 'border-left') {\r\n                        if (value !== border) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-color' || prop === 'border-bottom-color' || prop === 'border-right-color' || prop === 'border-top-color' || prop === 'border-left-color') {\r\n                        if (border.substring(border.length - value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-width') {\r\n                        if (border.substring(0, value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else {\r\n                        this.css[prop] = value;\r\n                    }\r\n                } else {\r\n                    this.css[prop] = value;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public static getStdDef() {\r\n        let child, def = Util.create({tag: 'defs'});\r\n\r\n        child = Util.create({tag: 'filter', id: 'drop-shadow'});\r\n        child.appendChild(Util.create({tag: 'feGaussianBlur', 'in': 'SourceAlpha', result: 'blur-out', stdDeviation: 2}));\r\n        child.appendChild(Util.create({tag: 'feOffset', 'in': 'blur-out', dx: 2, dy: 2}));\r\n        child.appendChild(Util.create({tag: 'feBlend', 'in': 'SourceGraphic', mode: 'normal'}));\r\n        def.appendChild(child);\r\n        child = Util.create({tag: 'linearGradient', id: 'reflect', x1: 0, x2: 0, y1: '50%', y2: 0, spreadMethod: 'reflect'});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#aaa', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#eee', offset: '100%'}));\r\n        def.appendChild(child);\r\n\r\n        child = Util.create({tag: 'linearGradient', id: 'classelement', x1: 0, x2: '100%', y1: '100%', y2: 0});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#fff', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#d3d3d3', offset: 1}));\r\n        def.appendChild(child);\r\n\r\n        return def;\r\n    }\r\n\r\n    public static getSubstring(str: string, search: string, startChar: string, endChar: string, splitter: string): any {\r\n        let pos, end, count = 0, array = [];\r\n        pos = str.indexOf(search);\r\n        if (pos > 0) {\r\n            end = str.indexOf(startChar, pos);\r\n            pos = end + 1;\r\n            if (end > 0) {\r\n                while (end < str.length) {\r\n                    if (str.charAt(end) === startChar) {\r\n                        count += 1;\r\n                    }\r\n                    if (str.charAt(end) === endChar) {\r\n                        count -= 1;\r\n                        if (count === 0) {\r\n                            if (splitter && pos !== end) {\r\n                                array.push(str.substring(pos, end).trim());\r\n                            }\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (str.charAt(end) === splitter && count === 1) {\r\n                        array.push(str.substring(pos, end).trim());\r\n                        pos = end + 1;\r\n                    }\r\n\r\n                    end += 1;\r\n                }\r\n                if (splitter) {\r\n                    return array;\r\n                }\r\n                return str.substring(pos, end);\r\n            }\r\n            return str.substring(pos);\r\n        }\r\n        return '';\r\n    }\r\n\r\n    public static addStyle(board: SVGElement, styleName: any) {\r\n        let defs, style: any, css;\r\n        if (styleName.baseVal || styleName.baseVal === '') {\r\n            styleName = styleName.baseVal;\r\n        }\r\n        if (!styleName) {\r\n            return;\r\n        }\r\n        defs = CSS.getDefs(board);\r\n        if (defs.getElementsByTagName('style').length > 0) {\r\n            style = defs.getElementsByTagName('style')[0];\r\n        } else {\r\n            style = Util.create({tag: 'style'});\r\n            style.item = {};\r\n            defs.appendChild(style);\r\n        }\r\n        if (!style.item[styleName]) {\r\n            css = Util.getStyle(styleName);\r\n            style.item[styleName] = css;\r\n            style.innerHTML = style.innerHTML + '\\n.' + styleName + css.getSVGString(board);\r\n        }\r\n    }\r\n\r\n    public static addStyles(board: SVGElement, item: any) {\r\n        if (!item) {\r\n            return;\r\n        }\r\n        let items, i, className: any = item.className;\r\n\r\n        if (className) {\r\n            if (className.baseVal || className.baseVal === '') {\r\n                className = className.baseVal;\r\n            }\r\n        }\r\n        if (className) {\r\n            items = className.split(' ');\r\n            for (i = 0; i < items.length; i += 1) {\r\n                CSS.addStyle(board, items[i].trim());\r\n            }\r\n        }\r\n        for (i = 0; i < item.childNodes.length; i += 1) {\r\n            this.addStyles(board, item.childNodes[i]);\r\n        }\r\n    }\r\n\r\n    public static getDefs(board: SVGElement) {\r\n        let defs;\r\n        if (board.getElementsByTagName('defs').length < 1) {\r\n            defs = Util.create({tag: 'defs'});\r\n            board.insertBefore(defs, board.childNodes[0]);\r\n        } else {\r\n            defs = board.getElementsByTagName('defs')[0];\r\n        }\r\n        return defs;\r\n    }\r\n\r\n    public add(key: string, value: string) {\r\n        this.css[key] = value;\r\n    }\r\n\r\n    public get(key: string): any {\r\n        let i;\r\n        for (i in this.css) {\r\n            if (i === key) {\r\n                return this.css[key];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public getNumber(key: string) {\r\n        return parseInt((this.get(key) || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    public getSVGString(board: SVGElement) {\r\n        let str, pos, style, defs, value, filter, z;\r\n        str = '{';\r\n        for (style in this.css) {\r\n            if (!this.css.hasOwnProperty(style)) {\r\n                continue;\r\n            }\r\n            if (style === 'border') {\r\n                pos = this.css[style].indexOf(' ');\r\n                str = str + 'stroke-width: ' + this.css[style].substring(0, pos) + ';';\r\n                pos = this.css[style].indexOf(' ', pos + 1);\r\n                str = str + 'stroke:' + this.css[style].substring(pos) + ';';\r\n            } else if (style === 'background-color') {\r\n                str = str + 'fill: ' + this.css[style] + ';';\r\n            } else if (style === 'background') {\r\n                value = CSS.getSubstring(this.css[style], 'linear-gradient', '(', ')', ',');\r\n                if (value.length > 0) {\r\n                    defs = CSS.getDefs(board);\r\n                    if (value[0] === '45deg') {\r\n                        pos = 1;\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '100%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                    } else {\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '0%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                        pos = 0;\r\n                    }\r\n                    defs.appendChild(filter);\r\n                    while (pos < value.length) {\r\n                        value[pos] = value[pos].trim();\r\n                        z = value[pos].lastIndexOf(' ');\r\n                        filter.appendChild(Util.create({\r\n                            tag: 'stop',\r\n                            'offset': value[pos].substring(z + 1),\r\n                            style: {'stop-color': value[pos].substring(0, z)}\r\n                        }));\r\n                        pos += 1;\r\n                    }\r\n                    str = str + 'fill: url(#' + this.name + ');';\r\n                    continue;\r\n                }\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n                // box-shadow: inset 0 3px 4px #888;\r\n// \t\t\t\t<defs>\r\n// \t\t\t\t\t<filter id='drop-shadow'>\r\n// \t\t\t\t\t\t<feGaussianBlur in='SourceAlpha' result='blur-out' stdDeviation='2'></feGaussianBlur>\r\n// \t\t\t\t\t\t<feOffset in='blur-out' dx='2' dy='2'></feOffset>\r\n// \t\t\t\t\t\t<feBlend in='SourceGraphic' mode='normal'></feBlend>\r\n// \t\t\t\t\t</filter>\r\n// \t\t\t\t</defs>\r\n            } else {\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n            }\r\n        }\r\n        str = str + '}';\r\n        return str;\r\n    }\r\n}\r\n","import {Bridge} from './Bridge';\r\nimport Data from './Data';\r\nimport EventListener from './EventListener';\r\n\r\nexport abstract class Control {\r\n    public $owner: Control;\r\n    /**\r\n     *\r\n     */\r\n    public property: string;\r\n    public id: string;\r\n    public $view: Element;\r\n    public $viewData: Data = null;\r\n\r\n    protected $model: Data;\r\n    protected $viewListener: EventListenerOrEventListenerObject;\r\n\r\n    /**\r\n     * The properties, we want to listen to\r\n     */\r\n    // static defaultProperties: string[] = [];\r\n\r\n    // public getProperties(): string[] {\r\n    //     return this.properties;\r\n    // }\r\n\r\n    constructor() {\r\n        // e.g. this.properties.push(\"key\");\r\n        // this.properties.push(\"property\");\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data: Data = new Data();\r\n        if (oldData) {\r\n            oldData.removeListener(this);\r\n            const keys: string[] = oldData.getKeys();\r\n            for (let i = 0; i < keys.length; i++) {\r\n                let attr = keys[i];\r\n                if (this.$view) {\r\n                    if (this.$view[attr] === null) {\r\n                        continue;\r\n                    }\r\n                    data.setValue(attr, this.$view[attr]);\r\n                } else {\r\n                    data.setValue(attr, null);\r\n                }\r\n            }\r\n        }\r\n        data.addListener(this);\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     *  Set the new HTMLElement and attach listener to it.\r\n     *  Also remove Listeners from old one and return the old one, if present.\r\n     * @param element\r\n     * @returns The previous Element\r\n     */\r\n    public setView(element: Element): Element {\r\n        let oldElement: Element = null;\r\n        if (this.$view) {\r\n            oldElement = this.$view;\r\n            if (this.$viewListener) {\r\n                oldElement.removeEventListener('change', this.$viewListener);\r\n            }\r\n        }\r\n        this.$view = element;\r\n\r\n        if (this.$viewListener) {\r\n            element.addEventListener('change', this.$viewListener);\r\n        }\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n        return element;\r\n    }\r\n\r\n    public init(owner: Control, property ?: string, id ?: string): Control {\r\n        if (!this.$owner) {\r\n            this.$owner = owner;\r\n        }\r\n        if (!this.id) {\r\n            this.id = id;\r\n        }\r\n        if (!this.property) {\r\n            this.property = this.generateID(property, id);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public createEventListener(): EventListener {\r\n        return new EventListener();\r\n    }\r\n\r\n    public getRoot(): Control {\r\n        if (this.$owner) {\r\n            return this.$owner.getRoot();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return null;\r\n    }\r\n\r\n    public initControl(data: any): void {\r\n        if (this.$view === null || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (data.hasOwnProperty('prop')) {\r\n            for (let key in data.prop) {\r\n                let oldValue = this.$viewData.getValue(key);\r\n                if (this.$view) {\r\n                    this.updateElement(key, oldValue, data.prop[key]);\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        let hasRem = data.hasOwnProperty('rem');\r\n        let removed: any[] = [];\r\n        if (data.hasOwnProperty('upd')) {\r\n            for (let key in data.upd) {\r\n                let oldValue;\r\n                let newValue = data.upd[key];\r\n                let entity;\r\n                const temp = false;\r\n                if (temp) {\r\n//                if (newValue == this.getViewData().getValue(key)) {\r\n                    // new Value assertEquals old value, so we don't need to change anything..\r\n                    // delete data.rem[key];\r\n                    if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                        removed.push(data.rem[key]);\r\n                    }\r\n                    continue;\r\n                }\r\n                if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                    // if there's a rem, the oldValue from rem will be used and expected to be right..\r\n                    oldValue = data.rem[key];\r\n                    if (this.$model && this.$model.getValue(key) === oldValue) {\r\n                        entity = this.$model;\r\n//                    } else if (oldValue == this.getViewData().getValue(key)) {\r\n//                        $graphModel = this.getViewData();\r\n                    }\r\n                    delete data.rem[key];\r\n\r\n                    if (entity === null) {\r\n                        continue;\r\n                    }\r\n                }\r\n                if (entity) {\r\n                    if (!hasRem) {\r\n                        if (entity === this.$model) {\r\n                            oldValue = this.$model.getValue(key);\r\n                        } else {\r\n//                           oldValue = this.getViewData().getValue(key);\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (this.$model) {\r\n                        // try to get the oldValue directly from the $graphModel...\r\n                        oldValue = this.$model.getValue(key);\r\n                        entity = this.$model;\r\n                    }\r\n                    if (oldValue === null) {\r\n                        // if there was no data in the entity, we try to get oldValue from the $view\r\n//                        oldValue = this.getViewData().getValue(key);\r\n//                        entity = this.getViewData();\r\n                    }\r\n                }\r\n\r\n                //  || oldValue !== this.$viewData.getValue(key)\r\n                if (newValue === oldValue) {\r\n                    // no match, so update should be wrong...\r\n                    continue;\r\n                }\r\n                const viewDataOldValue = this.$viewData.getValue(key);\r\n                if (entity === this.$viewData) {\r\n\r\n                    // this.getViewData().setValue(key, newValue);\r\n                    if (this.$view) {\r\n                        this.updateElement(key, viewDataOldValue, newValue);\r\n                    }\r\n                } else {\r\n                    this.updateElement(key, viewDataOldValue, newValue);\r\n                }\r\n                this.getRoot().setValue(entity, key, newValue, oldValue);\r\n            }\r\n            // this.saveViewInData();\r\n        }\r\n        if (hasRem) {\r\n            for (let key in data.rem) {\r\n                if (removed.hasOwnProperty(key)) {\r\n                    continue;\r\n                }\r\n                let oldValue;\r\n//                    this.getViewData().getValue(key);\r\n//                if (oldValue != data.rem[key] || data.upd !== undefined && (data.upd[key] == oldValue || this.getViewData().getValue(key) == data.upd[key])) {\r\n                // if rem is invalid, or if the change is already applied, don't do anything..\r\n                //                  continue;\r\n                //            }\r\n                // delete this.$viewData.getValue(key);\r\n                // this.saveViewInData();\r\n                this.updateElement(key, null, null);\r\n                // this.$view.removeAttribute(key);\r\n                if (this.$model) {\r\n//                    this.getRoot().setValue(this.$graphModel, key, this.getViewData().getValue(key), oldValue);\r\n                }\r\n            }\r\n        }\r\n        if (this.property) {\r\n            // Add listener to Input field:\r\n            this.$view['onchange'] = ((ev: Event) => {\r\n                    this.controlChanged(ev);\r\n                }\r\n            );\r\n        }\r\n//        this.saveViewInData();\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        return null;\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n        return false;\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return new Object();\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue ?: Object): boolean {\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Is called when a object, that the Control is listening to, changes its value.\r\n     * @param entity\r\n     * @param property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        if (oldValue === newValue || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (oldValue === this.$viewData.getValue(property)) {\r\n            return;\r\n        }\r\n        // Set NewData to ViewData and Fire PC\r\n        this.$viewData.setValue(property, newValue);\r\n\r\n//\r\n//\r\n//         // if (entity == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.entity) {\r\n//                 alert(\"entity = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.entity.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.entity, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the entity is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"entity = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n// >>>>>>> addOldFunctions\r\n        if (this.$viewData) {\r\n            this.$viewData.setValue(property, newValue);\r\n        }\r\n        if (this.$model) {\r\n            this.$model.setValue(property, newValue);\r\n        }\r\n        this.updateElement(property, oldValue, newValue);\r\n    }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            // Do Nothing\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  Update GUI Element\r\n     * @param {string} property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        if (this.$view && this.$view.hasAttribute(property)) {\r\n            this.$view.setAttribute(property, newValue);\r\n        }\r\n    }\r\n\r\n//        if (oldValue == newValue) {\r\n//            return;\r\n//        }\r\n//        if (oldValue == this.$viewData.getValue(property)) {\r\n//            return;\r\n//        }\r\n//        // Set NewData to ViewData and Fire PC\r\n//        this.$viewData.setValue(property, newValue);\r\n//\r\n//\r\n//\r\n//         // if ($graphModel == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.$graphModel) {\r\n//                 alert(\"$graphModel = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.$graphModel.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.$graphModel, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the $graphModel is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"$graphModel = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n\r\n    public getId(): string {\r\n        return this.id;\r\n    }\r\n\r\n    public load(json: JSON | Object, owner ?: Control): any {\r\n        // Do Nothing\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.property || entity.hasProperty(this.property)) {\r\n                entity.addListener(this, this.property);\r\n                this.$model = entity;\r\n            }\r\n        }\r\n    }\r\n\r\n    public appendChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.appendChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].appendChild(child.$view);\r\n        }\r\n    }\r\n\r\n    public removeChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.removeChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].removeChild(child.$view);\r\n        }\r\n    }\r\n\r\n    /*\r\n     Property looks like: 't1.talk'\r\n     */\r\n    public setProperty(property: string): void {\r\n        if (!this.property) {\r\n            return;\r\n        }\r\n        let objId = property.split('.')[0];\r\n        let object = null;\r\n        if (this.$owner.hasItem(objId)) {\r\n            object = this.$owner.getItem(objId);\r\n        }\r\n\r\n        // remove listener on old object\r\n        if (this.$model) {\r\n            // this.$graphModel.removeListener(this);\r\n            this.$model.removeListener(this, this.lastProperty);\r\n        }\r\n        this.property = property;\r\n\r\n        // add listener to object..\r\n        if (object) {\r\n            object.addListener(this, this.lastProperty);\r\n            this.$model = object;\r\n            this.updateElement(this.lastProperty, this.$viewData.getValue(this.lastProperty), object.prop[this.lastProperty]);\r\n        }\r\n    }\r\n\r\n    public registerListenerOnHTMLObject(eventType: string): boolean {\r\n        return this.registerEventListener(eventType, <HTMLElement>this.$view);\r\n    }\r\n\r\n    // Normal Event HTML-Event\r\n    // Eventtype:string,\r\n    // id:string of Control\r\n    public fireEvent(evt: Event): void {\r\n        // Do Nothing\r\n    }\r\n\r\n    public isClosed(): boolean {\r\n        return this['closed'];\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        if (this.isClosed()) {\r\n            return this.$owner.getShowed();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * the id of the Data object, that contains the properties of the view\r\n     * @returns {string}\r\n     */\r\n    protected getControlDataID() {\r\n        return this.id + '_data';\r\n    }\r\n\r\n    protected generateID(property ?: string, id ?: string): string {\r\n        if (property) {\r\n            return property;\r\n        }\r\n        if (id) {\r\n            // will generate a data Object suitable for the Control..\r\n            // must be overridden, if the changeEvent shouldn't listen on value...\r\n//            return id + '.' + this.getStandardProperty();//+ \"_data\"\r\n            return id + '.' + '_data';\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected updateViewData() {\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n        const keys: string[] = this.$viewData.getKeys();\r\n        for (let i = 0; i < keys.length; i++) {\r\n            let attr = keys[i];\r\n            if (this.$view[attr] === null) {\r\n                continue;\r\n            }\r\n            this.$viewData.setValue(attr, this.$view[attr]);\r\n        }\r\n    }\r\n\r\n    protected registerEventListener(eventType: string, htmlElement: HTMLElement): boolean {\r\n        if (!htmlElement) {\r\n            return false;\r\n        }\r\n        if (htmlElement instanceof HTMLElement === false) {\r\n            return false;\r\n        }\r\n        let control = this;\r\n        let listener = (t: any) => {\r\n            t.eventType = eventType;\r\n            t.id = control.id;\r\n            control.$owner.fireEvent(t);\r\n        };\r\n        htmlElement.addEventListener(eventType, listener);\r\n        return true;\r\n    }\r\n\r\n    get lastProperty(): string {\r\n        if (!this.property) {\r\n            return '';\r\n        }\r\n        let arr: string[] = this.property.split('.');\r\n        return arr[arr.length - 1];\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\n\r\nexport default class Data {\r\n    public prop = {};\r\n    id: string;\r\n    // $listener: Control[] = [];\r\n    $listener: Object = {};\r\n\r\n    private static nullCheck(property: string): string {\r\n        if (property === undefined || property === null) {\r\n            property = '';\r\n        }\r\n        return property;\r\n    }\r\n    public getKeys(): string[] {\r\n        return Object.keys(this.prop);\r\n    }\r\n\r\n    public addProperties(values: Object) {\r\n        if (!values) {\r\n            return;\r\n        }\r\n        if (values['prop']) {\r\n            let prop = values['prop'];\r\n            for (let property in prop) {\r\n                if (prop.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (prop[property] !== null && '' !== prop[property]) {\r\n                    this.setValue(property, prop[property]);\r\n                }\r\n            }\r\n        } else {\r\n            let upd = values['upd'] || {};\r\n            let rem = values['rem'] || {};\r\n\r\n            for (let property in upd) {\r\n                if (upd.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (rem.hasOwnProperty(property) === false) {\r\n                    this.setValue(property, upd[property]);\r\n                } else {\r\n                    // if we have a rem, we wan't to check, if its a valid change (teh old value is the value in rem)\r\n                    if (this.getValue(property) === rem[property]) {\r\n                        this.setValue(property, upd[property]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getValue(attribute: string) {\r\n        return this.prop[attribute];\r\n    }\r\n\r\n    public setValue(attribute: string, newValue: any): void {\r\n        let oldValue = this.prop[attribute];\r\n        if (oldValue === newValue && newValue !== null) {\r\n            return;\r\n        }\r\n        this.prop[attribute] = newValue;\r\n        this.firePropertyChange(attribute, oldValue, newValue);\r\n    }\r\n\r\n    public addTo(attribute: string, newValue: any): boolean {\r\n        let add: boolean;\r\n        if (this.prop[attribute]) {\r\n            if (this.prop[attribute].contains(newValue) === false) {\r\n                add = true;\r\n            }\r\n        } else {\r\n            this.prop[attribute] = [];\r\n            add = true;\r\n        }\r\n        if (add) {\r\n            this.prop[attribute].push(newValue);\r\n            this.firePropertyChange(attribute, null, newValue);\r\n        }\r\n        return add;\r\n    }\r\n\r\n    public removeFrom(attribute: string, newValue: any): boolean {\r\n        if (!this.prop[attribute]) {\r\n            return true;\r\n        }\r\n        let pos: number = this.prop[attribute].indexOf(newValue);\r\n        if (pos < 0) {\r\n            return true;\r\n        }\r\n        this.prop[attribute].splice(pos, 1);\r\n        this.firePropertyChange(attribute, newValue, null);\r\n        return true;\r\n    }\r\n\r\n    public addListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(property);\r\n        if (!listeners) {\r\n            listeners = [];\r\n            this.$listener[Data.nullCheck(property)] = listeners;\r\n        }\r\n        listeners.push(control);\r\n    }\r\n\r\n    public removeListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners = this.getListeners(property);\r\n        if (listeners === null) {\r\n            return;\r\n        }\r\n        let pos = listeners.indexOf(control);\r\n        if (pos >= 0) {\r\n            listeners.splice(pos, 1);\r\n        }\r\n        if (listeners.length === 0 && Data.nullCheck(property) !== '') {\r\n            // only remove, if it's not the default listener list...\r\n            delete this.$listener[property];\r\n        }\r\n    }\r\n\r\n    public hasProperty(property: string): boolean {\r\n        return this.prop.hasOwnProperty(property);\r\n    }\r\n\r\n    public addFrom(attribute: string, oldData: Data): void {\r\n        if (oldData) {\r\n            this.setValue(attribute, oldData.getValue(attribute));\r\n        } else {\r\n            this.setValue(attribute, null);\r\n        }\r\n    }\r\n\r\n    public removeKey(key: string): any {\r\n        if (this.hasProperty(key)) {\r\n            const oldValue = this.prop[key];\r\n            delete this.prop[key];\r\n            return oldValue;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected getListeners(property: string): PropertyChangeSupport[] {\r\n        property = Data.nullCheck(property);\r\n        return this.$listener[property];\r\n    }\r\n\r\n    protected firePropertyChange(attribute: string, oldValue: Object, newValue: Object) {\r\n        attribute = Data.nullCheck(attribute);\r\n        // at first fire for the given property\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(attribute);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n        // now we need to fire the Listeners that wan't to listen to everything\r\n        listeners = this.getListeners(null);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport interface EventHandler {\r\n    canHandle(): boolean;\r\n    handle(event: Event, element: DiagramElement): boolean;\r\n    setActive(active: boolean): void;\r\n}\r\n\r\nexport class EventBus {\r\n    public static CREATE: string = 'Create';\r\n    public static EDITOR: string = 'Editor';\r\n    public static OPENPROPERTIES: string = 'openProperties';\r\n    public static RELOADPROPERTIES: string = 'reloadProperties';\r\n    public static ELEMENTMOUSEDOWN: string = 'ELEMENT:MOUSEDOWN';\r\n    public static ELEMENTMOUSEUP: string = 'ELEMENT:MOUSEUP';\r\n    public static ELEMENTMOUSELEAVE: string = 'ELEMENT:MOUSELEAVE';\r\n    public static ELEMENTMOUSEMOVE: string = 'ELEMENT:MOUSEMOVE';\r\n    public static ELEMENTMOUSEWHEEL: string = 'ELEMENT:MOUSEWHEEL';\r\n    public static ELEMENTCLICK: string = 'ELEMENT:CLICK';\r\n    public static ELEMENTDBLCLICK: string = 'ELEMENT:DBLCLICK';\r\n    public static ELEMENTDRAG: string = 'ELEMENT:DRAG';\r\n    public static ELEMENTDRAGOVER: string = 'ELEMENT:DRAGOVER';\r\n    public static ELEMENTDROP: string = 'ELEMENT:DROP';\r\n    public static ELEMENTDRAGLEAVE: string = 'ELEMENT:DRAGLEAVE';\r\n\r\n    public static EVENTS: string[] = [\r\n        EventBus.CREATE,\r\n        EventBus.EDITOR,\r\n        EventBus.OPENPROPERTIES,\r\n        EventBus.RELOADPROPERTIES,\r\n        EventBus.ELEMENTMOUSEDOWN,\r\n        EventBus.ELEMENTMOUSEUP,\r\n        EventBus.ELEMENTMOUSELEAVE,\r\n        EventBus.ELEMENTMOUSEMOVE,\r\n        EventBus.ELEMENTMOUSEWHEEL,\r\n        EventBus.ELEMENTCLICK,\r\n        EventBus.ELEMENTDRAG,\r\n        EventBus.ELEMENTDBLCLICK,\r\n        EventBus.ELEMENTDRAGOVER,\r\n        EventBus.ELEMENTDROP,\r\n        EventBus.ELEMENTDRAGLEAVE,\r\n    ];\r\n\r\n    private static handlers = {};\r\n\r\n    private static $activeHandler: string = '';\r\n\r\n    public static setActiveHandler(handler: string): void {\r\n        this.$activeHandler = handler;\r\n    }\r\n\r\n    public static isHandlerActiveOrFree(handler: string, notEmpty?: boolean): boolean {\r\n        if (notEmpty) {\r\n            return this.$activeHandler === handler;\r\n        }\r\n        return this.$activeHandler === handler || this.$activeHandler === '' || this.$activeHandler === undefined;\r\n    }\r\n\r\n    public static isAnyHandlerActive(): boolean {\r\n        return !(this.$activeHandler === '' || this.$activeHandler === undefined);\r\n    }\r\n\r\n    public static releaseActiveHandler(): void {\r\n        this.$activeHandler = '';\r\n    }\r\n\r\n    public static getActiveHandler(): string {\r\n        return this.$activeHandler;\r\n    }\r\n\r\n    static register(control: Control, view: Element) {\r\n        let events: string[];\r\n        if (typeof control['getEvents'] === 'function') {\r\n            events = control['getEvents']();\r\n        }\r\n\r\n        if (!events || !view) {\r\n            return;\r\n        }\r\n        for (let event of events) {\r\n            this.registerEvent(view, event, control);\r\n        }\r\n    }\r\n\r\n    static registerEvent(view: Element, event: string, control?: any) {\r\n        const pos: number = event.indexOf(':');\r\n        if (pos > 0) {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        } else {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        }\r\n    }\r\n\r\n    public static publish(element: DiagramElement, evt: Event) {\r\n        let handlers = EventBus.handlers[evt.type];\r\n        if (handlers) {\r\n            for (let handler of handlers) {\r\n                handler.handle(evt, element);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static subscribe(handler: EventHandler, ...eventTypes: string[]) {\r\n        for (let event of eventTypes) {\r\n            let handlers = EventBus.handlers[event];\r\n            if (handlers === null || handlers === undefined) {\r\n                handlers = [];\r\n                EventBus.handlers[event] = handlers;\r\n            }\r\n            handlers.push(handler);\r\n        }\r\n    }\r\n}\r\n","import SimpleEvent from './Event';\r\n\r\nexport default class EventListener {\r\n    private $onUpdate: Function;\r\n\r\n    get onUpdate(): Function {\r\n        return this.$onUpdate;\r\n    }\r\n\r\n    set onUpdate(value: Function) {\r\n        this.$onUpdate = value;\r\n    }\r\n\r\n    update(event: SimpleEvent) {\r\n        this.$onUpdate(event);\r\n    }\r\n}\r\n","// ################################## jsEPS ####################################################\r\nimport {SVGConverter} from './SVGConverter';\r\n\r\nexport class JSEPS {\r\n    private max: number;\r\n    private min: number;\r\n    private inverting: boolean;\r\n    private output: string[];\r\n    private font: number;\r\n\r\n    constructor(options: any) {\r\n        this.max = 0;\r\n        this.min = 999;\r\n        let hasInverting = typeof (options.inverting);\r\n        this.inverting = (options && hasInverting !== 'undefined' ? options.inverting : true);\r\n        this.output = ['%!PS-Adobe-3.0 EPSF-3.0', '1 setlinewidth'];\r\n        this.out('/FSD {findfont exch scalefont def} bind def % In the document prolog: define');\r\n        this.out('/SMS {setfont moveto show} bind def % some useful procedures');\r\n        this.out('/MS {moveto show} bind def');\r\n        this.out('/F1  10  /Helvetica  FSD % At the start of the script: set up');\r\n        this.font = 1;\r\n    }\r\n\r\n    public out(value: string) {this.output.push(value); }\r\n    public rect(x: number, y: number, width: number, height: number, style: string) {\r\n        y = y + (this.inverting ? height : 0);\r\n        if (style && style.indexOf('fill:url(#classelement);') >= 0) {\r\n            this.out('gsave 0.93 0.93 0.93 setrgbcolor newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectfill grestore');\r\n        } else {\r\n            this.out('newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectstroke');\r\n        }\r\n    }\r\n    public setFillColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public y(value: number) {this.max = Math.max(this.max, value); this.min = Math.min(this.min, value); return this.inverting ? '%y(' + value + ')' : value; }\r\n    public getType(): string {\r\n        return 'application/postscript';\r\n    }\r\n\r\n    public getData(): string {\r\n        let t, end, url, text, typ = 'application/postscript', a = document.createElement('a'), data = '', pos, i;\r\n        for (i = 0; i < this.output.length; i += 1) {\r\n            text = this.output[i];\r\n            if (this.inverting) {\r\n                while ((pos = text.indexOf('%y')) >= 0) {\r\n                    end = text.indexOf(')', pos);\r\n                    t = this.max - parseInt(text.substring(pos + 3, end), 10);\r\n                    text = text.substring(0, pos) + t + text.substring(end + 1);\r\n                }\r\n            }\r\n            data = data + text + '\\r\\n';\r\n        }\r\n        return data;\r\n    }\r\n\r\n    public setDrawColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public ellipse(cx: number, cy: number, rx: number, ry: number, colorMode: string) {/*FIXME*/}\r\n    public circle(cx: number, cy: number, r: number, colorMode: string) {/*FIXME*/}\r\n    public setTextColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public text(x: number, y: number, text: string) {this.out('(' + text.replace('&lt;', '<').replace('&gt;', '>') + ') ' + x + ' ' + this.y(y) + ' F1 SMS'); }\r\n    public lineto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' lineto'); this.out('stroke'); }\r\n    public moveto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' moveto'); }\r\n    public line(x1: number, y1: number, x2: number, y2: number) {this.out('newpath ' + x1 + ' ' + this.y(y1) + ' moveto ' + x2 + ' ' + this.y(y2) + ' lineto stroke'); }\r\n    public setLineWidth(value: string) {this.out(value + ' setlinewidth'); }\r\n    public setFont(value: string) {this.out('/F' + (this.font += 1) + ' 10 /' + value + ' FSD'); }\r\n}\r\n","import { Graph } from './elements/Graph';\r\n\r\n/*const buttons = {\r\n    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    clazz: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n};\r\n*/\r\nexport default class Palette {\r\n\r\n    private graph: Graph;\r\n    private palette: Element;\r\n    private root: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n        let div = document.createElement('div');\r\n        div.className = 'palette';\r\n        div.id = 'palette';\r\n        this.root = div;\r\n        this.palette = div;\r\n        for (let key in graph.nodeFactory) {\r\n            let element = graph.nodeFactory[key];\r\n            let control = new element();\r\n            let icon = control.getToolBarIcon();\r\n            if (icon) {\r\n                let button = <HTMLButtonElement>document.createElement('button');\r\n                button.className = 'add' + key + 'Btn';\r\n                button.innerHTML = icon.outerHTML;\r\n                button.onclick = e => {\r\n                    let nextFreePosition = this.graph.getNextFreePosition();\r\n                    // let node = this.graph.addElementWithValues(graph.nodeFactory[key], {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    let node = this.graph.addElementWithValues(key, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    this.graph.drawElement(node);\r\n                };\r\n                this.palette.appendChild(button);\r\n            }\r\n        }\r\n        // this.graph.nodeFactory\r\n//        this.addButtons();\r\n    }\r\n\r\n    public show() {\r\n        document.body.appendChild(this.root);\r\n    }\r\n\r\n    private addButtons() {\r\n        /*for (let btn in buttons) {\r\n            let button = <HTMLButtonElement>document.createElement('button');\r\n            button.className = 'add' + btn + 'Btn';\r\n            button.innerHTML = buttons[btn];\r\n            button.onclick = e => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let node = this.graph.addElementWithValues(btn, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                this.graph.drawElement(node);\r\n            };\r\n            this.palette.appendChild(button);\r\n        }*/\r\n    }\r\n}\r\n","import {Graph} from './elements/Graph';\r\nimport * as edges from './elements/edges';\r\nimport {EventBus, EventHandler} from './EventBus';\r\nimport {DiagramElement} from './elements/BaseElements';\r\nimport {Util} from './util';\r\n\r\nexport class PanelGroup implements EventHandler {\r\n    private graph: Graph;\r\n    private selectedElement: DiagramElement;\r\n    private clearPanel: Panel;\r\n    private generatePanel: Panel;\r\n    private propertiesMasterPanel: HTMLDivElement;\r\n    private propertiesContent: HTMLDivElement;\r\n    private propHeaderLabel: HTMLDivElement;\r\n    private propHeaderButton: HTMLButtonElement;\r\n    private selectedPanel: Panel;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.clearPanel = new ClearPanel(this);\r\n        this.generatePanel = new GeneratePanel(this);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        this.handleOpenProperties(event, element);\r\n\r\n        if (event.type === EventBus.RELOADPROPERTIES\r\n            && this.selectedElement && element.id === this.selectedElement.id) {\r\n            this.handleEvent(event, element);\r\n        }\r\n\r\n        // the same element was clicked. do nothing\r\n        if (this.selectedElement && this.selectedElement.id === element.id) {\r\n            return true;\r\n        }\r\n        if (element.id === 'RootElement') {\r\n            this.setActivePanel(this.clearPanel);\r\n        }\r\n        if (element.id === 'GenerateProp') {\r\n            this.setActivePanel(this.generatePanel);\r\n        }\r\n        this.selectedElement = element;\r\n\r\n        return true;\r\n    }\r\n\r\n    public getGraph(): Graph {\r\n        return this.graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(PanelGroup.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(PanelGroup.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n     public handleEvent(event: any, element: any) {\r\n        // DO NOTHING\r\n    }\r\n\r\n    public show() {\r\n        // main div to display any properties, class, edge, etc.\r\n        this.propertiesMasterPanel = document.createElement('div');\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n\r\n        this.propertiesContent = document.createElement('div');\r\n        this.propertiesContent.className = 'properties-hidden';\r\n\r\n        this.propHeaderLabel = document.createElement('div');\r\n        this.propHeaderLabel.style.display = 'inherit';\r\n        this.propHeaderLabel.style.cursor = 'pointer';\r\n        this.propHeaderLabel.onclick = e => this.toogleProperties(e);\r\n\r\n        // button to display and hide the properties of e.g. a class\r\n        this.propHeaderButton = document.createElement('button');\r\n        this.propHeaderButton.className = 'btnHideProp';\r\n        this.propHeaderButton.style.cssFloat = 'right';\r\n        this.propHeaderButton.onclick = e => this.toogleProperties(e);\r\n\r\n        let propertiesHeader = document.createElement('div');\r\n        propertiesHeader.style.display = 'inline';\r\n        propertiesHeader.appendChild(this.propHeaderLabel);\r\n        propertiesHeader.appendChild(this.propHeaderButton);\r\n\r\n        this.propertiesMasterPanel.appendChild(propertiesHeader);\r\n        this.propertiesMasterPanel.appendChild(this.propertiesContent);\r\n        document.body.appendChild(this.propertiesMasterPanel);\r\n\r\n        this.setActivePanel(this.clearPanel);\r\n    }\r\n\r\n    public setActivePanel(panel: Panel) {\r\n        this.selectedPanel = panel;\r\n        this.propHeaderLabel.innerHTML = panel.getHeaderText();\r\n        if (this.propertiesContent) {\r\n            while (this.propertiesContent.hasChildNodes()) {\r\n                this.propertiesContent.removeChild(this.propertiesContent.childNodes[0]);\r\n            }\r\n        }\r\n        panel.show();\r\n\r\n        panel.showFirstTab();\r\n        if (panel !== this.clearPanel) {\r\n            this.showProperties(null);\r\n        } else {\r\n            this.hideProperties(null);\r\n        }\r\n    }\r\n\r\n    public getProperiesContent(): HTMLDivElement {\r\n        return this.propertiesContent;\r\n    }\r\n\r\n    private handleOpenProperties(event: Event, element: DiagramElement) {\r\n        if (event.type === 'dblclick') {\r\n            this.showProperties(event);\r\n        }\r\n    }\r\n\r\n    private showProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Show\r\n        this.propHeaderButton.innerHTML = '&#8897;';\r\n        this.propHeaderButton.title = 'Hide properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel';\r\n        this.propertiesContent.className = 'properties';\r\n    }\r\n\r\n    private toogleProperties(evt: Event): void {\r\n        if (this.propHeaderButton.title === 'Show properties') {\r\n            this.showProperties(evt);\r\n        } else {\r\n            this.hideProperties(evt);\r\n        }\r\n    }\r\n\r\n    private hideProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Hide\r\n        this.propHeaderButton.innerHTML = '&#8896;';\r\n        this.propHeaderButton.title = 'Show properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n        this.propertiesContent.className = 'properties-hidden';\r\n    }\r\n}\r\n\r\nexport abstract class Panel {\r\n    protected divPropertiesPanel: HTMLDivElement;\r\n    protected divPropertiesTabbedPanel: HTMLDivElement;\r\n    protected element: any;\r\n    protected group: PanelGroup;\r\n    private panelItem: PanelItem[] = [];\r\n\r\n    constructor(group: PanelGroup, element: any) {\r\n        // get the properties content panel\r\n        this.divPropertiesPanel = document.createElement('div');\r\n        this.element = element;\r\n        this.group = group;\r\n\r\n        this.divPropertiesTabbedPanel = document.createElement('div');\r\n        this.divPropertiesTabbedPanel.className = 'tabbedpane';\r\n\r\n        // add tabbed panel\r\n        this.divPropertiesPanel.appendChild(this.divPropertiesTabbedPanel);\r\n    }\r\n\r\n    public show(): void {\r\n        let propertiesContent: HTMLDivElement = this.group.getProperiesContent();\r\n        if (this.panelItem.length > 1) {\r\n            propertiesContent.appendChild(this.getPropertiesTabbedPanel());\r\n        }\r\n\r\n        propertiesContent.appendChild(this.getPropertiesPanel());\r\n    }\r\n\r\n    public getPropertiesTabbedPanel(): HTMLDivElement {\r\n        return this.divPropertiesTabbedPanel;\r\n    }\r\n\r\n    public getPropertiesPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return '';\r\n    }\r\n\r\n    public showFirstTab(): void {\r\n        if (this.panelItem.length > 0) {\r\n            this.openTab(this.panelItem[0]);\r\n        }\r\n    }\r\n\r\n    protected createTabElement(tabText: string, tabValue: string, item: PanelItem): PanelItem {\r\n        let tabElementBtn = document.createElement('button');\r\n        tabElementBtn.className = 'tablinks';\r\n        tabElementBtn.innerText = tabText;\r\n        tabElementBtn.value = tabValue;\r\n\r\n        if (item === null) {\r\n            item = new PanelItem(this);\r\n        }\r\n        item.withButton(tabElementBtn);\r\n\r\n        tabElementBtn.onclick = () => this.openTab(item);\r\n        this.divPropertiesTabbedPanel.appendChild(tabElementBtn);\r\n        this.panelItem.push(item);\r\n        return item;\r\n    }\r\n\r\n    protected openTab(panelItem: PanelItem): void {\r\n        for (let key in this.panelItem) {\r\n            let child = this.panelItem[key];\r\n            if (child !== panelItem) {\r\n                 child.deactive();\r\n            }\r\n        }\r\n        panelItem.active();\r\n        // hide other tabcontent\r\n        if (this.divPropertiesPanel) {\r\n            while (this.divPropertiesPanel.hasChildNodes()) {\r\n                this.divPropertiesPanel.removeChild(this.divPropertiesPanel.childNodes[0]);\r\n            }\r\n        }\r\n\r\n        // ADD\r\n        if (panelItem.getContent()) {\r\n            this.divPropertiesPanel.appendChild(panelItem.getContent());\r\n        }\r\n    }\r\n}\r\n\r\nexport class GeneratePanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n\r\n        let item: PanelItem = this.createTabElement('General', 'General', null);\r\n\r\n        // Workspace and generate code stuff\r\n        let inputGenerateWorkspace: HTMLInputElement =  <HTMLInputElement> Util.createHTML({tag: 'input', id: 'workspace', type: 'text', placeholder: 'Type your Folder for generated code...', value: 'src/main/java', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Folder:', inputGenerateWorkspace);\r\n\r\n        let inputGeneratePackage: HTMLInputElement = <HTMLInputElement> Util.createHTML({tag: 'input', id: 'package', type: 'text', placeholder: 'Type your workspace for generated code...', value: '', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Package:', inputGeneratePackage);\r\n\r\n        let options = document.createElement('div');\r\n        options.style.textAlign = 'center';\r\n        options.style.margin = '3';\r\n        options.style.padding = '5';\r\n\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(options);\r\n\r\n        options.style.borderStyle = 'groove';\r\n        options.style.borderRadius = '10px';\r\n\r\n        let btnGenerate = document.createElement('button');\r\n        btnGenerate.textContent = 'Generate';\r\n        btnGenerate.title = 'Generate code into your workspace';\r\n        btnGenerate.className = 'OptionElement';\r\n\r\n        let that = this;\r\n        btnGenerate.onclick = () => {\r\n            let workspace = inputGeneratePackage.value;\r\n            if (workspace.length === 0) {\r\n                alert('No workspace set.\\nEnter first your workspace');\r\n                inputGeneratePackage.focus();\r\n                return;\r\n            }\r\n            that.group.getGraph().generate(workspace, inputGenerateWorkspace.value);\r\n        };\r\n        options.appendChild(btnGenerate);\r\n        options.appendChild(document.createElement('hr'));\r\n        options.appendChild(document.createElement('br'));\r\n\r\n        let btnAutoLayout = Util.createHTML({tag: 'button', className: 'OptionElement', value: 'Auto Layout', style: {marginRight: '10px'}, onclick: () => {\r\n                that.group.getGraph().layout();\r\n            }});\r\n\r\n        options.appendChild(btnAutoLayout);\r\n\r\n        // delete all nodes\r\n        let btnDeleteAll = document.createElement('button');\r\n        btnDeleteAll.className = 'OptionElement';\r\n        btnDeleteAll.textContent = 'Delete All';\r\n        btnDeleteAll.title = 'Delete all nodes from diagram';\r\n\r\n        btnDeleteAll.onclick = () => {\r\n            let confirmDelete = confirm('All classes will be deleted!');\r\n            if (!confirmDelete) {\r\n                return;\r\n            }\r\n            that.group.getGraph().$graphModel.removeAllElements();\r\n        };\r\n        btnDeleteAll.style.marginRight = '10px';\r\n        options.appendChild(btnDeleteAll);\r\n\r\n        // export stuff\r\n        let exportTypes: string[] = ['Export', 'HTML', 'JSON', 'PDF', 'PNG', 'SVG'];\r\n        let selectExport = document.createElement('select');\r\n\r\n        exportTypes.forEach(type => {\r\n            if (!(!window['jsPDF'] && type === 'PDF')) {\r\n                let option = document.createElement('option');\r\n                option.value = type;\r\n                option.textContent = type;\r\n                selectExport.appendChild(option);\r\n            }\r\n        });\r\n\r\n        selectExport.onchange = (evt) => {\r\n            let selectedExportType = selectExport.options[selectExport.selectedIndex].value;\r\n            selectExport.selectedIndex = 0;\r\n            that.group.getGraph().saveAs(selectedExportType);\r\n        };\r\n        selectExport.className = 'OptionElement';\r\n        options.appendChild(selectExport);\r\n        options.appendChild(document.createElement('br'));\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Properties';\r\n    }\r\n\r\n}\r\n\r\nexport class ClearPanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Select any element to see its properties';\r\n    }\r\n}\r\n\r\nexport class PanelItem {\r\n    protected panel: Panel;\r\n    protected label: string;\r\n    protected button: HTMLButtonElement;\r\n    protected content: HTMLDivElement = <HTMLDivElement>Util.create({tag: 'div', className: 'tabContent'});\r\n\r\n    constructor(panel: Panel, label?: string) {\r\n        this.panel = panel;\r\n        this.label = label;\r\n    }\r\n\r\n    public active(): void {\r\n        if (this.getButton()) {\r\n            this.getButton().className += ' active';\r\n        }\r\n    }\r\n\r\n    public deactive(): void {\r\n        if (this.getButton()) {\r\n            Util.removeClass(this.getButton(), 'active');\r\n        }\r\n    }\r\n\r\n    public withButton(button: HTMLButtonElement): PanelItem {\r\n        this.button = button;\r\n        return this;\r\n    }\r\n\r\n    public withContent(element: HTMLElement): PanelItem {\r\n        this.content.appendChild(element);\r\n        return this;\r\n    }\r\n\r\n    public withInput(labelText: string, element: HTMLElement): PanelItem {\r\n        let group: HTMLDivElement = <HTMLDivElement> Util.createHTML({tag: 'div'});\r\n        let label = Util.createHTML({tag: 'label', for: element.id, value: labelText});\r\n        group.appendChild(label);\r\n        group.appendChild(element);\r\n\r\n        this.content.appendChild(group);\r\n        return this;\r\n    }\r\n\r\n    public getButton(): HTMLButtonElement {\r\n        return this.button;\r\n    }\r\n\r\n    public getContent(): HTMLDivElement {\r\n        return this.content;\r\n    }\r\n\r\n   public getHeader(): string {\r\n        return this.label;\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\nimport Data from './Data';\r\n\r\nexport class PropertyBinder implements PropertyChangeSupport {\r\n    private propertyClass1: string;\r\n    private propertyClass2: string;\r\n    private data1: Data;\r\n    private data2: Data;\r\n    // works like a lock\r\n    private applyingChange: boolean = false;\r\n\r\n    constructor(data1: Data, data2: Data, propertyClass1: string, propertyClass2: string) {\r\n        this.data1 = data1;\r\n        this.data2 = data2;\r\n        this.propertyClass1 = propertyClass1;\r\n        this.propertyClass2 = propertyClass2;\r\n    }\r\n    static bind(data1: Data, data2: Data, property1: string, property2: string) {\r\n        if (!data1 || !data2 || !property1) {\r\n            console.error('NullValue!!');\r\n            return null;\r\n        }\r\n        const propertyBinder = new PropertyBinder(data1, data2, property1, property2);\r\n        propertyBinder.bind();\r\n        return propertyBinder;\r\n    }\r\n\r\n    propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        if (!this.applyingChange) {\r\n            this.applyingChange = true;\r\n            if (entity === this.data1) {\r\n                // fire to data2\r\n                this.data2.setValue(this.propertyClass2, newValue);\r\n            } else if (entity === this.data2) {\r\n                // fire to data1\r\n                this.data1.setValue(this.propertyClass1, newValue);\r\n            }\r\n            this.applyingChange = false;\r\n        }\r\n    }\r\n\r\n    protected bind() {\r\n        // public addListener(control: Control, property?: string)\r\n        // todo: set value immediately\r\n        this.data1.setValue(this.propertyClass1, this.data2.getValue(this.propertyClass2));\r\n\r\n        this.data1.addListener(this, this.propertyClass1);\r\n        this.data2.addListener(this, this.propertyClass2);\r\n    }\r\n\r\n    protected unbind() {\r\n        // public addListener(control: Control, property?: string)\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n    }\r\n}\r\n","// ################################## RGBColor ####################################################\r\nexport class RGBColor {\r\n    public  ok: boolean;\r\n    public r: number;\r\n    public g: number;\r\n    public b: number;\r\n\r\n    constructor(value: string) {\r\n        this.ok = false;\r\n        if (value === 'none') {\r\n            return;\r\n        }\r\n        let computedColor, div = document.createElement('div');\r\n        div.style.backgroundColor = value;\r\n        document.body.appendChild(div);\r\n        computedColor = window.getComputedStyle(div).backgroundColor;\r\n        // cleanup temporary div.\r\n        document.body.removeChild(div);\r\n        this.convert(computedColor);\r\n    }\r\n    public convert(value: any) {\r\n        let values, regex = /rgb *\\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\\)/;\r\n        values = regex.exec(value);\r\n        this.r = parseInt(values[1], 10);\r\n        this.g = parseInt(values[2], 10);\r\n        this.b = parseInt(values[3], 10);\r\n        this.ok = true;\r\n    }\r\n\r\n    public toRGB(): string {return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; }\r\n    public toHex(): string {\r\n        return '#' + (this.r + 0x10000).toString(16).substring(3).toUpperCase() + (this.g + 0x10000).toString(16).substring(3).toUpperCase() + (this.b + 0x10000).toString(16).substring(3).toUpperCase();\r\n    }\r\n}\r\n","/*\r\n NetworkParser\r\n Copyright (c) 2011 - 2014, Stefan Lindel\r\n All rights reserved.\r\n\r\n Licensed under the EUPL, Version 1.1 or (as soon they\r\n will be approved by the European Commission) subsequent\r\n versions of the EUPL (the \"Licence\");\r\n You may not use this work except in compliance with the Licence.\r\n You may obtain a copy of the Licence at:\r\n\r\n http://ec.europa.eu/idabc/eupl5\r\n\r\n Unless required by applicable law or agreed to in\r\n writing, software distributed under the Licence is\r\n distributed on an \"AS IS\" basis,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\r\n express or implied.\r\n See the Licence for the specific language governing\r\n permissions and limitations under the Licence.\r\n*/\r\nimport {RGBColor} from './RGBColor';\r\nimport {JSEPS} from \"./JSEPS\";\r\n\r\nconst epsSvgAttr = {\r\n    // allowed attributes. all others are removed from the preview.\r\n    g: ['stroke', 'fill', 'stroke-width'],\r\n    line: ['x1', 'y1', 'x2', 'y2', 'stroke', 'stroke-width'],\r\n    rect: ['x', 'y', 'width', 'height', 'stroke', 'fill', 'stroke-width'],\r\n    ellipse: ['cx', 'cy', 'rx', 'ry', 'stroke', 'fill', 'stroke-width'],\r\n    circle: ['cx', 'cy', 'r', 'stroke', 'fill', 'stroke-width'],\r\n    text: ['x', 'y', 'font-size', 'font-family', 'text-anchor', 'font-weight', 'font-style', 'fill'],\r\n    path: ['']\r\n};\r\nexport class SVGConverter {\r\n    private k: number;\r\n    private remove: boolean;\r\n    private target: any;\r\n\r\n    constructor(element: any, target: any, options: any) {\r\n        this.k = 1.0;\r\n        let hasScale = typeof (options.scale), hasRemoveInvalid = typeof (options.removeInvalid);\r\n        this.k = (options && hasScale !== 'undefined' ? options.scale : 1.0);\r\n        this.remove = (options && hasRemoveInvalid !== 'undefined' ? options.removeInvalid : false);\r\n        this.target = target;\r\n        this.parse(element);\r\n    }\r\n\r\n    public parse(element: any) {\r\n        let el, i, n, colorMode, hasFillColor, fillRGB, fillColor, strokeColor, strokeRGB, fontType, pdfFontSize, x, y,\r\n            box, xOffset;\r\n        if (!element) {\r\n            return;\r\n        }\r\n        if (typeof element === 'string') {\r\n            el = document.createElement('div');\r\n            el.innerHTML = element;\r\n            element = el.childNodes[0];\r\n        }\r\n        for (i = 0; i < element.children.length; i += 1) {\r\n            n = element.children[i];\r\n            colorMode = null;\r\n            hasFillColor = false;\r\n            if ('g,line,rect,ellipse,circle,text'.indexOf(n.tagName) >= 0) {\r\n                fillColor = n.getAttribute('fill');\r\n                if (fillColor) {\r\n                    fillRGB = new RGBColor(fillColor);\r\n                    if (fillRGB.ok) {\r\n                        hasFillColor = true;\r\n                        colorMode = 'F';\r\n                    }\r\n                }\r\n            }\r\n            if ('g,line,rect,ellipse,circle'.indexOf(n.tagName) >= 0) {\r\n                if (hasFillColor) {\r\n                    this.target.setFillColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                }\r\n                strokeColor = n.getAttribute('stroke');\r\n                if (n.hasAttribute('stroke-width')) {\r\n                    this.target.setLineWidth(this.attr(n, 'stroke-width'));\r\n                }\r\n                if (strokeColor) {\r\n                    strokeRGB = new RGBColor(strokeColor);\r\n                    if (strokeRGB.ok) {\r\n                        this.target.setDrawColor(strokeRGB.r, strokeRGB.g, strokeRGB.b);\r\n                        if (colorMode === 'F') {\r\n                            colorMode = 'FD';\r\n                        } else if (!hasFillColor) {\r\n                            colorMode = 'S';\r\n                        }\r\n                    } else {\r\n                        colorMode = null;\r\n                    }\r\n                }\r\n            }\r\n            // console.log(\"write \"+n.tagName);\r\n            switch (n.tagName.toLowerCase()) {\r\n                case 'svg':\r\n                case 'a':\r\n                case 'g':\r\n                    this.parse(n);\r\n                    break;\r\n                case 'line':\r\n                    this.target.line(this.attr(n, 'x1'), this.attr(n, 'y1'), this.attr(n, 'x2'), this.attr(n, 'y2'));\r\n                    break;\r\n                case 'rect':\r\n                    this.target.rect(this.attr(n, 'x'), this.attr(n, 'y'), this.attr(n, 'width'), this.attr(n, 'height'), n.getAttribute('style'));\r\n                    break;\r\n                case 'ellipse':\r\n                    this.target.ellipse(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'rx'), this.attr(n, 'ry'), colorMode);\r\n                    break;\r\n                case 'circle':\r\n                    this.target.circle(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'r'), colorMode);\r\n                    break;\r\n                case 'text':\r\n                    if (n.hasAttribute('font-family')) {\r\n                        switch (n.getAttribute('font-family').toLowerCase()) {\r\n                            case 'serif':\r\n                                this.target.setFont('times');\r\n                                break;\r\n                            case 'monospace':\r\n                                this.target.setFont('courier');\r\n                                break;\r\n                            default:\r\n                                n.getAttribute('font-family', 'sans-serif');\r\n                                this.target.setFont('Helvetica');\r\n                        }\r\n                    }\r\n                    if (hasFillColor) {\r\n                        this.target.setTextColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                    }\r\n                    if (this.target instanceof JSEPS) {\r\n                        this.target.text(this.attr(n, 'x'), this.attr(n, 'y'), n.innerHTML);\r\n                        break;\r\n                    }\r\n                    fontType = '';\r\n                    if (n.hasAttribute('font-weight')) {\r\n                        if (n.getAttribute('font-weight') === 'bold') {\r\n                            fontType = 'bold';\r\n                        }\r\n                    }\r\n                    if (n.hasAttribute('font-style')) {\r\n                        if (n.getAttribute('font-style') === 'italic') {\r\n                            fontType += 'italic';\r\n                        }\r\n                    }\r\n                    this.target.setFontType(fontType);\r\n                    pdfFontSize = 16;\r\n                    if (n.hasAttribute('font-size')) {\r\n                        pdfFontSize = parseInt(n.getAttribute('font-size'), 10);\r\n                    }\r\n                    box = n.getBBox();\r\n                    // FIXME: use more accurate positioning!!\r\n                    x = this.attr(n, 'x');\r\n                    y = this.attr(n, 'y');\r\n                    xOffset = 0;\r\n                    if (n.hasAttribute('text-anchor')) {\r\n                        switch (n.getAttribute('text-anchor')) {\r\n                            case 'end':\r\n                                xOffset = box.width;\r\n                                break;\r\n                            case 'middle':\r\n                                xOffset = box.width / 2;\r\n                                break;\r\n                            case 'start':\r\n                                break;\r\n                            case 'default':\r\n                                n.getAttribute('text-anchor', 'start');\r\n                                break;\r\n                        }\r\n                        x = x - (xOffset * this.k);\r\n                    }\r\n                    this.target.setFontSize(pdfFontSize).text(x, y, n.innerHTML);\r\n                    break;\r\n                default:\r\n                    if (this.remove) {\r\n                        console.log('cant translate to target:', n);\r\n                        element.removeChild(n);\r\n                        i -= 1;\r\n                    }\r\n            }\r\n        }\r\n    }\r\n\r\n    public attr(node: any, name: string) {\r\n        return this.k * parseInt(node.getAttribute(name), 10);\r\n    }\r\n}\r\n","import {Control} from './Control';\r\n\r\nexport class ScrumBoard extends Control {\r\n    public static cards = [0, 0.5, 1, 2, 3, 5, 8, 13, 20, 40, 100, '?', 'Coffee'];\r\n    private $selected: HTMLDivElement;\r\n    private $board: HTMLDivElement;\r\n\r\n    constructor() {\r\n        super();\r\n        this.redraw();\r\n    }\r\n\r\n    public redraw(): void {\r\n        if (this.$board) {\r\n            while (this.$board.children.length > 0 ) {\r\n                this.$board.removeChild(this.$board.children[0]);\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('div');\r\n            this.$selected = document.createElement('div');\r\n            this.$board = document.createElement('div');\r\n            this.$view.appendChild(this.$board);\r\n            this.$view.appendChild(this.$selected);\r\n        }\r\n        this.$view.className = 'ScrumBoard';\r\n        for ( let i = 0; i < ScrumBoard.cards.length; i++) {\r\n            let card = document.createElement('div');\r\n            card.className = 'ScrumCard';\r\n            card.innerHTML = <string>ScrumBoard.cards[i];\r\n            card['pokervalue'] = <string>ScrumBoard.cards[i];\r\n            card.onclick = e => {\r\n                this.onClick(<HTMLDivElement>e.target);\r\n            };\r\n            this.$board.appendChild(card);\r\n        }\r\n    }\r\n\r\n    public getSVG() {\r\n        this.redraw();\r\n        return this.$view;\r\n    }\r\n\r\n    public onClick(target: HTMLDivElement): void {\r\n        console.log(target['pokervalue']);\r\n\r\n        while (this.$selected.children.length > 0 ) {\r\n            this.$selected.removeChild(this.$selected.children[0]);\r\n        }\r\n        let card = document.createElement('div');\r\n        card.className = 'ScrumCard';\r\n        card['pokervalue'] = target['pokervalue'];\r\n        card.onclick = e => {\r\n            this.onShow(<HTMLDivElement>e.target);\r\n        };\r\n        this.$selected.appendChild(card);\r\n        this.$board['style']['display'] = 'none';\r\n    }\r\n\r\n    public onShow(target: HTMLDivElement): void {\r\n        target.innerHTML = target['pokervalue'];\r\n    }\r\n}\r\n","import {Graph} from './main';\r\nimport {SymbolLibary} from './elements/nodes/Symbol';\r\nimport {EventBus} from './EventBus';\r\n\r\nexport class Toolbar {\r\n\r\n    private graph: Graph;\r\n    private mainDiv: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public show(): void {\r\n        if (this.mainDiv) {\r\n            return;\r\n        }\r\n\r\n        this.mainDiv = document.createElement('div');\r\n        this.mainDiv.className = 'toolbar';\r\n\r\n        let h1Logo = document.createElement('h1');\r\n        h1Logo.className = 'logo';\r\n        h1Logo.textContent = 'DiagramJS';\r\n\r\n        let node = {type: 'Hamburger', property: 'HTML', width: 24, height: 24, id: 'GenerateProp'};\r\n        let hamburger = SymbolLibary.draw( node);\r\n        EventBus.registerEvent(hamburger, 'click', node);\r\n        this.mainDiv.appendChild(hamburger);\r\n\r\n        this.mainDiv.appendChild(h1Logo);\r\n        document.body.appendChild(this.mainDiv);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 06.03.2017.\r\n */\r\nimport Data from './Data';\r\n\r\n// export default class Data {\r\n//    public values = {};\r\n//    id: string;\r\n//    $listener: Control[] = [];\r\n//    property: string;\r\nexport namespace UML {\r\n    export class Clazz extends Data {\r\n        public static NAME: string = 'name';\r\n        public static ATTRIBUTES: string = 'attributes';\r\n        public static METHODS: string = 'methods';\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Clazz';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n\r\n        public getAttributes() {\r\n            return this.prop[Clazz.ATTRIBUTES];\r\n        }\r\n\r\n        public addToAttributes(newValue: string) {\r\n            this.addTo(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n\r\n        public removeFromAttributes(newValue: string) {\r\n            this.removeFrom(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n    }\r\n\r\n    export class Attribute extends Data {\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Attribute';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n    }\r\n\r\n    export class Methods extends Data {\r\n\r\n    }\r\n}\r\n\r\nwindow['UML'] = UML;\r\n","import {Control} from './Control';\r\n\r\nexport class VirtualKeyBoard extends Control {\r\n    constructor(data: any) {\r\n        super();\r\n        if (!data) {\r\n            data = this.getDefault();\r\n        }\r\n        let board = document.createElement('div');\r\n        this.$viewData = data;\r\n\r\n        for (let type in data) {\r\n            if (type === 'normal') {\r\n                for (let line in data[type]) {\r\n                    let lineBoard = document.createElement('div');\r\n                    lineBoard.className = 'vkLine';\r\n                    for (let key in data[type][line]) {\r\n                        let btn: HTMLButtonElement = document.createElement('button');\r\n                        let keyTag = data[type][line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                        btn.ontouchend = () => {this.action(btn); };\r\n                        btn.onclick = () => {this.action(btn); };\r\n                        lineBoard.appendChild(btn);\r\n                    }\r\n                    board.appendChild(lineBoard);\r\n                }\r\n            }\r\n        }\r\n        this.$view = board;\r\n    }\r\n\r\n    public action(btn: HTMLButtonElement) {\r\n        if (btn['key'] === '{Shift}') {\r\n            if ( btn.className === 'vkbuttonAction') {\r\n                let keys = this.$viewData['normal'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                    }\r\n                }\r\n            } else if ( btn.className === 'vkbutton') {\r\n                let keys = this.$viewData['shift'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbuttonAction');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        alert(btn);\r\n    }\r\n\r\n    public getDefault(): any {\r\n        let format = {\r\n            normal: [\r\n                ['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '?', '´', '{Bksp}'],\r\n                ['{Tab}', 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+'],\r\n                ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '#', '{enter}'],\r\n                ['{Shift}', '<', 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n// '{left}', '{up}', '{down}','{right}', '{Cancel}']\r\n            ],\r\n            shift: [\r\n                ['°', '!', '\"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '`', '{Bksp}'],\r\n                ['{Tab}', 'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', 'O', 'P', 'Ü', '*'],\r\n                ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', '\\'', '{enter}'],\r\n                ['{Shift}', '>', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n            ]\r\n        };\r\n        return format;\r\n    }\r\n\r\n    public getBoard() {\r\n        return this.$view;\r\n    }\r\n\r\n    private setButtonValue(keyTag: string, btn: HTMLButtonElement, shiftClass: string) {\r\n        btn.className = 'vkbutton';\r\n        btn['key'] = keyTag;\r\n        btn['type'] = 'normal';\r\n        if (keyTag.substring(0, 1) === '{') {\r\n            if (keyTag === '{Bksp}') {\r\n                btn.innerHTML = 'Bksp';\r\n            } else if (keyTag === '{Tab}') {\r\n                btn.innerHTML = '&#8677; Tab';\r\n            } else if (keyTag === '{enter}') {\r\n                btn.innerHTML = 'enter';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Shift}') {\r\n                btn.innerHTML = 'Shift';\r\n                btn.className = shiftClass;\r\n            } else if (keyTag === '{Accept}') {\r\n                btn.innerHTML = 'Accept';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Alt}') {\r\n                btn.innerHTML = 'Alt';\r\n            } else if (keyTag === '{Space}') {\r\n                btn.innerHTML = '&nbsp;';\r\n                btn.className = 'vkbuttonSpace';\r\n            } else if (keyTag === '{left}') {\r\n                btn.innerHTML = '&#8592';\r\n            } else if (keyTag === '{right}') {\r\n                btn.innerHTML = '&#8594;';\r\n            } else if (keyTag === '{up}') {\r\n                btn.innerHTML = '&#8593;';\r\n            } else if (keyTag === '{down}') {\r\n                btn.innerHTML = '&#8595;';\r\n            } else if (keyTag === '{Cancel}') {\r\n                btn.innerHTML = 'Cancel';\r\n                btn.className = 'vkbuttonAction';\r\n            }\r\n        } else {\r\n            btn.innerHTML = keyTag;\r\n        }\r\n    }\r\n}\r\n","import {Adapter} from '../Adapter';\r\n\r\nexport class JavaAdapter extends Adapter {\r\n    constructor() {\r\n        super();\r\n        this.id = 'JavaAdapter';\r\n    }\r\n    update(evt: Object): boolean {\r\n        if (this.isActive()) {\r\n            window['JavaBridge'].executeChange(evt);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public isActive(): boolean {\r\n        return window['JavaBridge'];\r\n    }\r\n}\r\n","export * from './JavaAdapter';\r\n","import { Util } from '../util';\r\nimport { Control } from '../Control';\r\n\r\nexport interface Size {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\ninterface GraphElement {\r\n    getSize(): Point;\r\n\r\n    getPos(): Point;\r\n\r\n    getCenter(): Point;\r\n\r\n    getSVG(): Element;\r\n\r\n    getCanvas(): Element;\r\n\r\n    getEvents(): string[];\r\n\r\n    withPos(x: number, y: number): GraphElement;\r\n\r\n    load(data: any): any;\r\n\r\n    getToolBarIcon(): Element;\r\n\r\n    loadProperties(properties: any): void;\r\n}\r\n\r\nexport abstract class DiagramElement extends Control implements GraphElement {\r\n\r\n    protected $isDraggable: boolean = true;\r\n    protected $labelHeight = 25;\r\n    protected $labelFontSize = 14;\r\n    private $pos: Point = new Point();\r\n    private $size: Point = new Point();\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getPos(): Point {\r\n        return this.$pos;\r\n    }\r\n\r\n    public getSize(): Point {\r\n        return this.$size;\r\n    }\r\n\r\n    public getCenter(): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        return new Point(pos.x + size.x / 2, pos.y + size.y / 2);\r\n    }\r\n\r\n    public getCenterPosition(p: string): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let offset = this['$' + p];\r\n        let center = this.getCenter();\r\n        if (p === Point.DOWN) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y + size.y, Point.DOWN);\r\n        }\r\n        if (p === Point.UP) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y, Point.UP);\r\n        }\r\n        if (p === Point.LEFT) {\r\n            return new Point(pos.x, Math.min(center.y + offset, pos.y + size.y), Point.LEFT);\r\n        }\r\n        if (p === Point.RIGHT) {\r\n            return new Point(pos.x + size.x, Math.min(center.y + offset, pos.y + size.y), Point.RIGHT);\r\n        }\r\n        return new Point();\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getCanvas(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return null;\r\n    }\r\n\r\n    public getAlreadyDisplayingSVG(): Element {\r\n        return document.getElementById(this.id) || this.getSVG();\r\n    }\r\n\r\n    public load(data: any) {\r\n        // Do Nothing\r\n    }\r\n\r\n    public withPos(x: number, y: number): GraphElement {\r\n        if (x && y) {\r\n            this.$pos = new Point(x, y);\r\n        } else {\r\n            if (typeof (x) !== 'undefined' && x !== null) {\r\n                this.$pos.x = x;\r\n            }\r\n            if (typeof (y) !== 'undefined' && y !== null) {\r\n                this.$pos.y = y;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public withSize(width: number, height: number): DiagramElement {\r\n        if (width && height) {\r\n            this.$size = new Point(width, height);\r\n        } else {\r\n            if (typeof (width) !== 'undefined' && width !== null) {\r\n                this.$size.x = width;\r\n            }\r\n            if (typeof (height) !== 'undefined' && height !== null) {\r\n                this.$size.y = height;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        // FIXME if (this.status === 'close') {\r\n        // if (!this.$owner.isClosed()) {\r\n        //        return this;\r\n        //    }\r\n        // }\r\n        return super.getShowed();\r\n    }\r\n\r\n    public loadProperties(properties: any) {\r\n        // DO Nothing\r\n    }\r\n\r\n    protected createShape(attrs: any): Element {\r\n        return Util.createShape(attrs);\r\n    }\r\n}\r\n\r\nexport class Point {\r\n    public static UP: string = 'UP';\r\n    public static LEFT: string = 'LEFT';\r\n    public static RIGHT: string = 'RIGHT';\r\n    public static DOWN: string = 'DOWN';\r\n    x: number = 0;\r\n    y: number = 0;\r\n\r\n    //    pos:string = '';\r\n\r\n    constructor(x?: number, y?: number, pos?: string) {\r\n        this.x = Math.ceil(x || 0);\r\n        this.y = Math.ceil(y || 0);\r\n        if (pos) {\r\n            this['pos'] = pos;\r\n        }\r\n    }\r\n\r\n    public add(pos: Point) {\r\n        this.x += pos.x;\r\n        this.y += pos.y;\r\n        return this;\r\n    }\r\n\r\n    public getPosition(): string {\r\n        if (!this['pos']) {\r\n            return '';\r\n        }\r\n        return this['pos'];\r\n    }\r\n\r\n    public addNum(x: number, y: number) {\r\n        this.x += x;\r\n        this.y += y;\r\n        return this;\r\n    }\r\n\r\n    public sum(pos: Point) {\r\n        let sum = new Point(this.x, this.y);\r\n        sum.add(pos);\r\n        return sum;\r\n    }\r\n\r\n    public center(posA: Point, posB: Point) {\r\n        let count = 0;\r\n        if (posA) {\r\n            this.x += posA.x;\r\n            this.y += posA.y;\r\n            count++;\r\n        }\r\n        if (posB) {\r\n            this.x += posB.x;\r\n            this.y += posB.y;\r\n            count++;\r\n        }\r\n        if (count > 0) {\r\n            this.x = (this.x / count);\r\n            this.y = (this.y / count);\r\n        }\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        return this.x < 1 && this.y < 1;\r\n    }\r\n\r\n    public size(posA: Point, posB: Point) {\r\n        let x1 = 0, x2 = 0, y1 = 0, y2 = 0;\r\n        if (posA) {\r\n            x1 = posA.x;\r\n            y1 = posA.y;\r\n        }\r\n        if (posB) {\r\n            x2 = posB.x;\r\n            y2 = posB.y;\r\n        }\r\n        if (x1 > x2) {\r\n            this.x = x1 - x2;\r\n        } else {\r\n            this.x = x2 - x1;\r\n        }\r\n        if (y1 > y2) {\r\n            this.y = y1 - y2;\r\n        } else {\r\n            this.y = y2 - y1;\r\n        }\r\n    }\r\n}\r\n\r\n// \t\t\t\t######################################################### Line #########################################################\r\nexport class Line extends DiagramElement {\r\n    public static FORMAT = { SOLID: 'SOLID', DOTTED: 'DOTTED', PATH: 'PATH' };\r\n    public source: Point;\r\n    public target: Point;\r\n    public color: string;\r\n    public lineType: string;\r\n    private path: string;\r\n    private angle: Number;\r\n\r\n    constructor(lineType: string) {\r\n        super();\r\n        this.lineType = lineType;\r\n    }\r\n\r\n    public getTyp(): string {\r\n        return 'SVG';\r\n    }\r\n\r\n    public getPos() {\r\n        let pos = new Point();\r\n        pos.center(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public getSize() {\r\n        let pos = new Point();\r\n        pos.size(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public withColor(color: string): Line {\r\n        this.color = color;\r\n        return this;\r\n    }\r\n\r\n    public withSize(x: number, y: number): DiagramElement {\r\n        return this;\r\n    }\r\n\r\n    public withPath(path: Array<Point>, close: boolean, angle?: any): Line {\r\n        let i: number, d: string = 'M' + path[0].x + ' ' + path[0].y;\r\n        this.lineType = Line.FORMAT.PATH; // It is a Path not a Line\r\n        for (i = 1; i < path.length; i += 1) {\r\n            d = d + 'L ' + path[i].x + ' ' + path[i].y;\r\n        }\r\n        if (close) {\r\n            d = d + ' Z';\r\n            this.target = path[0];\r\n        } else {\r\n            this.target = path[path.length - 1];\r\n        }\r\n        this.path = d;\r\n        if (angle instanceof Number) {\r\n            this.angle = angle;\r\n        } else if (angle) {\r\n            // var lineangle, start = path[0], end = path[path.length - 1];\r\n            // lineangle = Math.atan2(end.y - start.y, end.x - start.x);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): SVGGElement {\r\n        if (this.lineType === 'PATH') {\r\n            return <SVGGElement>Util.create({\r\n                tag: 'path',\r\n                'd': this.path,\r\n                'fill': this.color,\r\n                stroke: '#000',\r\n                'stroke-width': '1px'\r\n            });\r\n        }\r\n        let line: SVGGElement = <SVGGElement>Util.create({\r\n            tag: 'line',\r\n            'x1': this.source.x,\r\n            'y1': this.source.y,\r\n            'x2': this.target.x,\r\n            'y2': this.target.y,\r\n            'stroke': Util.getColor(this.color)\r\n        });\r\n        if (this.lineType && this.lineType.toLowerCase() === 'dotted') {\r\n            line.setAttribute('stroke-miterlimit', '4');\r\n            line.setAttribute('stroke-dasharray', '1,1');\r\n        }\r\n        return line;\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport Options from '../Options';\r\nimport {JavaAdapter} from '../adapters';\r\n\r\nexport class ClassEditor extends Graph {\r\n    private adapter: JavaAdapter;\r\n    constructor(json: any, options: Options) {\r\n        if (!options ) {\r\n            options = {};\r\n        }\r\n        options.canvas = options.canvas || 'canvas';\r\n        // options.origin = options.origin || new Point(150, 45);\r\n//            layout: \"DagreLayout\",\r\n        options.autoSave = options.autoSave || true;\r\n        if (!options.features) {\r\n            options.features = {\r\n                drag: true,\r\n                editor: true,\r\n                palette: true,\r\n                select: true,\r\n                zoom: true,\r\n                toolbar: true,\r\n                import: true,\r\n                properties: true,\r\n                addnode: true,\r\n                newedge: true\r\n            };\r\n        }\r\n        super(json, options);\r\n    }\r\n\r\n    public setBoardStyle(value: string) {\r\n        console.log(value);\r\n        this.importFile.setBoardStyle(value);\r\n    }\r\n\r\n    public registerListener(): void {\r\n        this.adapter = new JavaAdapter();\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return this.adapter;\r\n    }\r\n}\r\n","import * as edges from './edges';\r\nimport { Association } from './edges';\r\nimport * as nodes from './nodes';\r\nimport * as layouts from '../layouts';\r\nimport Layout from '../layouts/Layout';\r\nimport { GraphModel } from './Model';\r\nimport { Point, Size } from './BaseElements';\r\nimport { Util } from '../util';\r\nimport { Control } from '../Control';\r\nimport Data from '../Data';\r\nimport { EventBus } from '../EventBus';\r\nimport { AddNode, Drag, NewEdge, Select, Zoom } from '../handlers';\r\nimport Options from '../Options';\r\nimport { ImportFile } from '../handlers/ImportFile';\r\nimport { CSS } from '../CSS';\r\nimport { DiagramElement } from './index';\r\nimport { Toolbar } from '../Toolbar';\r\nimport {JSEPS} from '../JSEPS';\r\nimport {SVGConverter} from '../SVGConverter';\r\nimport Palette from '../Palette';\r\nimport {PanelGroup} from '../PropertiesPanel';\r\n\r\nexport class Graph extends Control {\r\n    // canvas: HTMLElement;\r\n    root: SVGElement;\r\n    $graphModel: GraphModel;\r\n    options: Options;\r\n    canvasSize: Size;\r\n    nodeFactory: Object;\r\n    edgeFactory: Object;\r\n    layoutFactory: Object;\r\n    protected importFile: ImportFile;\r\n    private currentlayout: Layout;\r\n    // private layerToolBar: SVGSVGElement;\r\n    // https://stackoverflow.com/questions/15181452/how-to-save-export-inline-svg-styled-with-css-from-browser-to-image-file\r\n    private containerElements = ['svg', 'g'];\r\n    private relevantStyles = {\r\n        'rect': ['fill', 'stroke', 'stroke-width'],\r\n        'path': ['fill', 'stroke', 'stroke-width', 'opacity'],\r\n        'circle': ['fill', 'stroke', 'stroke-width'],\r\n        'line': ['stroke', 'stroke-width'],\r\n        'text': ['fill', 'font-size', 'text-anchor', 'font-family'],\r\n        'polygon': ['stroke', 'fill']\r\n    };\r\n\r\n    constructor(json: any, options: Options) {\r\n        super();\r\n        json = json || {};\r\n        if (json['data']) {\r\n            options = json['options'];\r\n            json = json['data'];\r\n            this.id = json['id'];\r\n        }\r\n        this.options = options || {features: { drag: true}};\r\n        if (json['init']) {\r\n            return;\r\n        }\r\n        if (!this.options.origin) {\r\n            this.options.origin = new Point(150, 45);\r\n        }\r\n        if (!this.options.style) {\r\n            // Style can be classic or modern\r\n            this.options.style = 'classic';\r\n        }\r\n        if (this.options.autoSave) {\r\n            Util.isAutoSave = options.autoSave;\r\n        }\r\n\r\n        this.initFactories();\r\n        this.initCanvas();\r\n        this.initFeatures(this.options.features);\r\n\r\n        // load previous session, if user wants it\r\n        // otherwise load the json data\r\n        if (!this.lookupInLocalStorage()) {\r\n            this.load(json);\r\n        }\r\n\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    public lookupInLocalStorage(): boolean {\r\n        if (!this.options.autoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (!Util.isLocalStorageSupported()) {\r\n            return false;\r\n        }\r\n        let diagram = Util.getDiagramFromLocalStorage();\r\n        if (diagram && diagram.length > 0) {\r\n            if (confirm('Restore previous session?')) {\r\n                let jsonData: JSON = JSON.parse(diagram);\r\n                this.load(jsonData);\r\n                this.layout();\r\n                return true;\r\n            } else {\r\n                Util.saveToLocalStorage( null);\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public fitSizeOnNodes(): void {\r\n        let maxWidth: number = 0;\r\n        let maxHeight: number = 0;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            let nodePos = node.getPos();\r\n            let nodeSize = node.getSize();\r\n            let nodeWidestPosX = nodePos.x + nodeSize.x;\r\n            let nodeWidestPosY = nodePos.y + nodeSize.y;\r\n\r\n            if (nodeWidestPosX > maxWidth) {\r\n                maxWidth = nodeWidestPosX;\r\n            }\r\n\r\n            if (nodeWidestPosY > maxHeight) {\r\n                maxHeight = nodeWidestPosY;\r\n            }\r\n        }\r\n\r\n        this.root.setAttributeNS(null, 'width', '' + (maxWidth + 100));\r\n        this.root.setAttributeNS(null, 'height', '' + (maxHeight + 50));\r\n    }\r\n\r\n    public saveAs(typ: string) {\r\n        typ = typ.toLowerCase();\r\n\r\n        // shrink size of graph to minimum. only to show up nodes\r\n        const currentSize = this.getRootSize();\r\n        this.fitSizeOnNodes();\r\n\r\n        if (typ === 'svg') {\r\n            this.exportSvg();\r\n        } else if (typ === 'png') {\r\n            this.exportPng();\r\n        } else if (typ === 'html') {\r\n            this.exportHtml();\r\n\r\n        } else if (typ === 'pdf') {\r\n            this.exportPdf();\r\n            // } else if (typ === 'eps') {\r\n            // this.ExportEPS();\r\n        }\r\n        else if (typ === 'json') {\r\n            this.exportJson();\r\n        }\r\n\r\n        // set the size back to default\r\n        this.root.setAttributeNS(null, 'width', '' + currentSize.width);\r\n        this.root.setAttributeNS(null, 'height', '' + currentSize.height);\r\n    }\r\n\r\n    /**\r\n     * generates a blob file and makes it available for download.\r\n     * @param type type of file\r\n     * @param data raw data\r\n     * @param name name of download file\r\n     */\r\n    public save(type: string, data: any, name: string, context: string) {\r\n        if (window['java']) {\r\n            window['java'].export(type, data, name, context);\r\n            return;\r\n        }\r\n        let a = document.createElement('a');\r\n        a.href = window.URL.createObjectURL(new Blob([data], { type: context }));\r\n        a.download = name;\r\n        document.body.appendChild(a);\r\n        a.click();\r\n        document.body.removeChild(a);\r\n    }\r\n\r\n    /** Exports the diagram as svg. */\r\n    public exportSvg(): void {\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        this.save('svg', this.serializeXmlNode(wellFormatedSvgDom), 'class_diagram.svg', 'image/svg+xml');\r\n    }\r\n\r\n    /** Exports the diagram as html. */\r\n    public exportHtml(): void {\r\n        let htmlFacade = '<html><head><title>DiagramJS - Classdiagram</title></head><body>$content</body></html>';\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        let svgAsXml = this.serializeXmlNode(wellFormatedSvgDom);\r\n\r\n        let htmlResult = htmlFacade.replace('$content', svgAsXml);\r\n\r\n        this.save('html', htmlResult, 'class_diagram.htm', 'text/plain');\r\n    }\r\n\r\n    /** Exports the diagram as json. */\r\n    public exportJson(): void {\r\n        let type = 'text/plain';\r\n        let jsonObj = Util.toJson(this.$graphModel);\r\n        let data = JSON.stringify(jsonObj, null, '\\t');\r\n\r\n        this.save('json', data, 'class_diagram.json', type);\r\n    }\r\n\r\n    /** Exports the diagram as pdf. */\r\n    public exportPdf(): void {\r\n        if (!window['jsPDF']) {\r\n            console.log('jspdf n.a.');\r\n            return;\r\n        }\r\n        let type = 'image/svg+xml';\r\n        let converter, pdf = new window['jsPDF']('l', 'px', [this.$graphModel.getSize().x, this.$graphModel.getSize().y]);\r\n        converter = new SVGConverter(this.$view, pdf, {removeInvalid: false});\r\n        pdf.save('Download.pdf');\r\n/*        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let canvas, context, a, image = new Image();\r\n        let size = this.getRootSize();\r\n\r\n        // create the loaded img source into a canvas. to generate a picture. then place this picture in the pdf\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            let pdf = new window['jsPDF']();\r\n\r\n            pdf.addImage(canvas.toDataURL('image/jpeg'), 'jpeg', 15, 40, 180, 160);\r\n            pdf.save('class_diagram.pdf');\r\n\r\n        };\r\n\r\n        image.src = url;\r\n        */\r\n    }\r\n\r\n    public import(data: string): void {\r\n        let rootElement = this.$graphModel.$view;\r\n        while (rootElement.hasChildNodes()) {\r\n            rootElement.removeChild(rootElement.firstChild);\r\n        }\r\n\r\n        while (this.$view.hasChildNodes()) {\r\n            this.$view.removeChild(this.$view.firstChild);\r\n        }\r\n\r\n        this.clearModel();\r\n        let jsonData = JSON.parse(data);\r\n        this.load(jsonData);\r\n        this.layout();\r\n    }\r\n\r\n    public exportEPS(): void {\r\n          let converter, doc = new JSEPS({inverting: true});\r\n            converter = new SVGConverter(this.$view, doc, {removeInvalid: false});\r\n            this.save('eps', doc.getData(), 'diagram.eps', doc.getType());\r\n    }\r\n\r\n    /** Exports the diagram as png. */\r\n    public exportPng(): void {\r\n        let canvas, context, a, image = new Image();\r\n        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let typ = 'image/svg+xml';\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let size = this.getRootSize();\r\n\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            a = document.createElement('a');\r\n            a.download = 'class_diagram.png';\r\n            a.href = canvas.toDataURL('image/png');\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            document.body.removeChild(a);\r\n        };\r\n\r\n        image.src = url;\r\n\r\n    }\r\n\r\n    public getSvgWithStyleAttributes(): Node {\r\n        let oDOM = this.$graphModel.$view.cloneNode(true);\r\n        this.readElement(oDOM, this.$graphModel.$view);\r\n\r\n        return oDOM;\r\n    }\r\n\r\n    public serializeXmlNode(xmlNode: any) {\r\n        if (window['XMLSerializer'] !== undefined) {\r\n            return (new window['XMLSerializer']()).serializeToString(xmlNode);\r\n        }\r\n        if (xmlNode.xml !== undefined) {\r\n            return xmlNode.xml;\r\n        }\r\n        return xmlNode.outerHTML;\r\n    }\r\n\r\n    public getRootSize(): Size {\r\n        let width: number;\r\n        let height: number;\r\n        width = +this.root.getAttribute('width');\r\n        height = +this.root.getAttribute('height');\r\n\r\n        return { width: width, height: height };\r\n    }\r\n\r\n        // Graph.prototype.ExportEPS = function () {\r\n        //     var converter, doc = new svgConverter.jsEPS({inverting: true});\r\n        //     converter = new svgConverter(this.board, doc, {removeInvalid: false});\r\n        //     doc.save();\r\n        // };\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        this.$graphModel = new GraphModel();\r\n        this.$graphModel.init(this);\r\n        this.$graphModel.load(json);\r\n    }\r\n\r\n    public clearModel(): void {\r\n        this.$graphModel.removeAllElements();\r\n        this.clearSvgRoot();\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.layout();\r\n        return this;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        return;\r\n    }\r\n\r\n    public getNextFreePosition(): Point {\r\n\r\n        if (!this.$graphModel) {\r\n            return new Point(50, 50);\r\n        }\r\n\r\n        let point = new Point(0, 50);\r\n\r\n        let maxX = 0;\r\n        let minX = 9000;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            maxX = Math.max(maxX, node.getPos().x);\r\n            minX = Math.min(minX, node.getPos().x);\r\n        }\r\n\r\n        if (minX > 170) {\r\n            point.x = 10;\r\n        }\r\n        else {\r\n            point.x = maxX + 200;\r\n        }\r\n\r\n        return point;\r\n    }\r\n\r\n    public addElement(type: string, dontDraw?: boolean): boolean {\r\n        let success = this.$graphModel.addElement(type);\r\n        if (success === true) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return success;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues?: Object, layout?: boolean, dontDraw?: boolean): DiagramElement {\r\n        let element = this.$graphModel.addElementWithValues(type, optionalValues);\r\n        if (element && layout) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public layout(dontDraw?: boolean): Graph {\r\n        this.getLayout().layout(this, this.$graphModel);\r\n\r\n        if (dontDraw) {\r\n            return this;\r\n        }\r\n\r\n        this.draw();\r\n        return this;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTDRAGOVER, EventBus.ELEMENTDRAGLEAVE, EventBus.ELEMENTDROP];\r\n    }\r\n\r\n    public draw() {\r\n        this.clearSvgRoot();\r\n        let model = this.$graphModel;\r\n        let root = this.root;\r\n        let max: Point = new Point();\r\n        if (this.options) {\r\n            max.x = this.options.minWidth || 0;\r\n            max.y = this.options.minHeight || 0;\r\n        }\r\n\r\n        for (let node of model.nodes) {\r\n            let svg = node.getSVG();\r\n            EventBus.register(node, svg);\r\n            root.appendChild(svg);\r\n\r\n            let temp: number;\r\n            temp = node.getPos().x + node.getSize().x;\r\n            if (temp > max.x) {\r\n                max.x = temp;\r\n            }\r\n            temp = node.getPos().y + node.getSize().y;\r\n            if (temp > max.y) {\r\n                max.y = temp;\r\n            }\r\n\r\n        }\r\n        Util.setAttributeSize(this.root, max.x + 60, max.y + 40);\r\n\r\n        for (let edge of model.edges) {\r\n            let svg = edge.getSVG();\r\n            EventBus.register(edge, svg);\r\n            root.appendChild(svg);\r\n        }\r\n    }\r\n\r\n    public getNode(id: string) {\r\n        return this.$graphModel.getNodeById(id);\r\n    }\r\n\r\n    public drawElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let svg = element.getSVG();\r\n        this.root.appendChild(svg);\r\n\r\n        // actualize root width size, if neccessary\r\n        // get current width of root\r\n        let rootSize = this.getRootSize();\r\n        let newWidth = element.getPos().x + element.getSize().x + 40;\r\n        let newHeight = element.getPos().y + element.getSize().y;\r\n\r\n        if (rootSize.width < newWidth) {\r\n            this.root.setAttributeNS(null, 'width', '' + newWidth);\r\n        }\r\n\r\n        if (rootSize.height < newHeight) {\r\n            this.root.setAttributeNS(null, 'height', '' + newHeight);\r\n        }\r\n\r\n        // draw edge\r\n        if (element instanceof Association) {\r\n            let edge = <Association>element;\r\n            edge.redraw(edge.$sNode);\r\n            let srcSvg = element.$sNode.getAlreadyDisplayingSVG();\r\n            let targetSvg = element.$tNode.getAlreadyDisplayingSVG();\r\n\r\n            this.root.appendChild(srcSvg);\r\n            this.root.appendChild(targetSvg);\r\n        }\r\n\r\n        EventBus.register(element, svg);\r\n    }\r\n\r\n    public removeElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let alreadyDisplayingSvg = element.getAlreadyDisplayingSVG();\r\n        if (Util.isParentOfChild(this.root, alreadyDisplayingSvg)) {\r\n            this.root.removeChild(alreadyDisplayingSvg);\r\n        }\r\n    }\r\n\r\n    public generate(packageName: string, path?: string) {\r\n        this.$graphModel.package = packageName;\r\n        this.$graphModel.genPath = path;\r\n\r\n        let data, result = Util.toJson(this.$graphModel);\r\n        data = JSON.stringify(result, null, '\\t');\r\n        if (window['java'] && typeof window['java'].generate === 'function') {\r\n            window['java'].generate(data);\r\n        }\r\n    }\r\n// REFACTORING dd\r\n    private readElement(parent: any, origData: any): void {\r\n        let children = parent.childNodes;\r\n        let origChildDat = origData.childNodes;\r\n\r\n        for (let cd = 0; cd < children.length; cd++) {\r\n            let child = children[cd];\r\n\r\n            let tagName = child.tagName;\r\n            if (this.containerElements.indexOf(tagName) !== -1) {\r\n                this.readElement(child, origChildDat[cd]);\r\n            } else if (tagName in this.relevantStyles) {\r\n                let styleDef = window.getComputedStyle(origChildDat[cd]);\r\n\r\n                let styleString = '';\r\n                for (let st = 0; st < this.relevantStyles[tagName].length; st++) {\r\n                    styleString += this.relevantStyles[tagName][st] + ':' + styleDef.getPropertyValue(this.relevantStyles[tagName][st]) + '; ';\r\n                }\r\n\r\n                child.setAttribute('style', styleString);\r\n            }\r\n        }\r\n    }\r\n\r\n    private createPattern(): Element {\r\n        const defs = Util.createShape({ tag: 'defs' });\r\n        const pattern = Util.createShape({\r\n            tag: 'pattern',\r\n            id: 'raster',\r\n            patternUnits: 'userSpaceOnUse',\r\n            width: 40,\r\n            height: 40\r\n        });\r\n        const path = 'M0 4 L0 0 L4 0 M36 0 L40 0 L40 4 M40 36 L40 40 L36 40 M4 40 L0 40 L0 36';\r\n        const cross = Util.createShape({\r\n            tag: 'path',\r\n            d: path,\r\n            stroke: '#DDD',\r\n            'stroke-width': 1,\r\n            fill: 'none'\r\n        });\r\n\r\n        const rect = Util.createShape({\r\n            tag: 'rect',\r\n            x: 0,\r\n            y: 0,\r\n            width: 40,\r\n            height: 40,\r\n            fill: 'none'\r\n        });\r\n        pattern.appendChild(rect);\r\n        pattern.appendChild(cross);\r\n        defs.appendChild(pattern);\r\n        return defs;\r\n    }\r\n\r\n    private clearSvgRoot() {\r\n        const root = this.root;\r\n        this.$graphModel.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n        while (root.firstChild) {\r\n            root.removeChild(root.firstChild);\r\n        }\r\n\r\n        root.appendChild(this.createPattern());\r\n        let fillValue = 'none';\r\n        if (this.options.raster) {\r\n            fillValue = 'url(#raster)';\r\n        }\r\n        let background = Util.createShape({\r\n            tag: 'rect',\r\n            id: 'background',\r\n            width: 5000,\r\n            height: 5000,\r\n            x: 0,\r\n            y: 0,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: fillValue\r\n        });\r\n        root.appendChild(background);\r\n\r\n        // delete inline Edit, if exists\r\n        let inlineEdit = document.getElementById('inlineEdit');\r\n        if (inlineEdit && document.body.contains(inlineEdit)) {\r\n            document.body.removeChild(inlineEdit);\r\n        }\r\n    }\r\n\r\n    private getLayout(): Layout {\r\n        if (this.currentlayout) {\r\n            return this.currentlayout;\r\n        }\r\n\r\n        let layout = this.options.layout || '';\r\n        if (this.layoutFactory[layout]) {\r\n            this.currentlayout = new this.layoutFactory[layout]();\r\n        } else {\r\n            this.currentlayout = new layouts.DagreLayout();\r\n        }\r\n\r\n        return this.currentlayout;\r\n    }\r\n\r\n    private initFactories() {\r\n\r\n        let noder = nodes;\r\n        this.nodeFactory = {};\r\n        for (let id in noder) {\r\n            if (noder.hasOwnProperty(id) === true) {\r\n                this.nodeFactory[id] = noder[id];\r\n            }\r\n        }\r\n\r\n        let edger = edges;\r\n        this.edgeFactory = {};\r\n        for (let id in edger) {\r\n            if (edger.hasOwnProperty(id) === true) {\r\n                this.edgeFactory[id] = edger[id];\r\n            }\r\n        }\r\n\r\n        let layouter = layouts;\r\n        this.layoutFactory = {};\r\n        for (let id in layouter) {\r\n            if (layouter.hasOwnProperty(id) === true) {\r\n                this.layoutFactory[id] = layouter[id];\r\n            }\r\n        }\r\n    }\r\n\r\n    private initCanvas() {\r\n        if (this.options.canvas) {\r\n            this.$view = document.getElementById(this.options.canvas);\r\n        }\r\n        if (!this.$view) {\r\n            this.$view = document.createElement('div');\r\n            this.$view.setAttribute('class', 'diagram');\r\n            document.body.appendChild(this.$view);\r\n        }\r\n    }\r\n\r\n    private initFeatures(features: any) {\r\n\r\n        if (features) {\r\n            if (features.newedge) {\r\n                EventBus.subscribe(new NewEdge(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            this.importFile = new ImportFile(this);\r\n            if (features.import) {\r\n                EventBus.subscribe(this.importFile, 'dragover', 'dragleave', 'drop');\r\n            }\r\n            if (features.zoom) {\r\n                let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n                EventBus.subscribe(new Zoom(this), mousewheel);\r\n            }\r\n            if (features.drag) {\r\n                EventBus.subscribe(new Drag(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            if (features.select) {\r\n                EventBus.subscribe(new Select(this), 'click', 'drag');\r\n            }\r\n            if (features.palette) {\r\n                new Palette(this).show();\r\n            }\r\n            if (features.toolbar) {\r\n                new Toolbar(this).show();\r\n            }\r\n            if (features.properties) {\r\n                let propertyPanel = new PanelGroup(this);\r\n                // let dispatcher = new PropertiesDispatcher(this);\r\n                EventBus.subscribe(propertyPanel, 'dblclick', 'click', EventBus.RELOADPROPERTIES);\r\n                propertyPanel.show();\r\n            }\r\n            if (features.addnode) {\r\n                EventBus.subscribe(new AddNode(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n        }\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport {DiagramElement, Point} from './BaseElements';\r\nimport {Association} from './edges';\r\nimport {Node} from './nodes';\r\nimport {Control} from '../Control';\r\nimport {Util} from '../util';\r\nimport {EventBus} from '../EventBus';\r\n\r\nexport class GraphModel extends DiagramElement {\r\n    nodes: Node[] = [];\r\n    edges: Association[] = [];\r\n    package: string;\r\n    genPath: string;\r\n    $isLoading: boolean;\r\n\r\n    public load(data?: any) {\r\n\r\n        this.$isLoading = true;\r\n        data = data || {};\r\n        this.property = data.type || data.property || 'classdiagram';\r\n        this.id = 'RootElement';\r\n        if (data.nodes) {\r\n            for (let node of data.nodes) {\r\n                this.addNode(node);\r\n            }\r\n        }\r\n        if (data.edges) {\r\n            for (let edge of data.edges) {\r\n                this.addEdge(edge);\r\n            }\r\n        }\r\n\r\n        this.$isLoading = false;\r\n    }\r\n\r\n    public getNodeByPosition(x: number, y: number): Node {\r\n        for (let node of this.nodes) {\r\n            let posOfNode: Point = (<Node>node).getPos();\r\n            let sizeOfNode: Point = (<Node>node).getSize();\r\n\r\n            if ((posOfNode.x <= x && (posOfNode.x + sizeOfNode.x) >= x)\r\n                && (posOfNode.y <= y && (posOfNode.y + sizeOfNode.y) >= y)) {\r\n                return node;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.initCanvas();\r\n        return this;\r\n    }\r\n\r\n    public addElement(type: string): boolean {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n        if (element) {\r\n            Util.saveToLocalStorage(this);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues: Object): DiagramElement {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n\r\n        // position\r\n        if (optionalValues) {\r\n            if (optionalValues.hasOwnProperty('x') && optionalValues.hasOwnProperty('y')) {\r\n                let x = optionalValues['x'];\r\n                let y = optionalValues['y'];\r\n                element.withPos(x, y);\r\n            }\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return element;\r\n    }\r\n\r\n    public removeAllElements(): void {\r\n\r\n        let nodesLength = this.nodes.length;\r\n        for (let i = 0; i < nodesLength; i++) {\r\n            this.removeElement(this.nodes[0].id);\r\n        }\r\n\r\n        this.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n    }\r\n\r\n    public removeElement(id: string): boolean {\r\n\r\n        let element = this.getDiagramElementById(id);\r\n        if (!element) {\r\n            return false;\r\n        }\r\n\r\n        (<Graph>this.$owner).removeElement(element);\r\n\r\n        if (element instanceof Node) {\r\n\r\n            let idxOfNode = this.nodes.indexOf(element);\r\n            if (idxOfNode > -1) {\r\n                this.nodes.splice(idxOfNode, 1);\r\n            }\r\n\r\n            while (element.$edges.length > 0) {\r\n                this.removeElement(element.$edges[0].id);\r\n            }\r\n\r\n            element.$edges = [];\r\n        }\r\n        else if (element instanceof Association) {\r\n\r\n            let idxOfEdge = this.edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                this.edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from source\r\n            idxOfEdge = element.$sNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$sNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from target\r\n            idxOfEdge = element.$tNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$tNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return true;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        const size = 10;\r\n        const path = `M${-size} 0 L${+size} 0 M0 ${-size} L0 ${+size}`;\r\n\r\n        const attr = {\r\n            tag: 'path',\r\n            id: 'origin',\r\n            d: path,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: 'none'\r\n        };\r\n        let shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: 0 - size,\r\n            y: 0 - size / 1.5,\r\n            'text-anchor': 'end',\r\n            'font-family': 'Verdana',\r\n            'font-size': '9',\r\n            fill: '#999'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = '(0, 0)';\r\n\r\n        let group = this.createShape({tag: 'g'});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEUP, EventBus.ELEMENTMOUSELEAVE, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTMOUSEWHEEL, EventBus.ELEMENTCLICK, EventBus.ELEMENTDRAG];\r\n    }\r\n\r\n    public getNewId(prefix?: string): string {\r\n        let id = (prefix ? prefix.toLowerCase() + '-' : '') + Math.floor(Math.random() * 100000);\r\n        return id;\r\n    }\r\n\r\n    public getEdgeById(id: string): Association {\r\n        for (let edge of this.edges) {\r\n            if (edge.id === id) {\r\n                return edge;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    public getDiagramElementById(id: string): DiagramElement {\r\n\r\n        return this.getNodeById(id) || this.getEdgeById(id);\r\n    }\r\n\r\n    /**\r\n     * Add an edge with data in json file. Optional you can say, that the edge should have\r\n     * the points of source node and target node.\r\n     * @param edge information about edge in json\r\n     * @param withPosOfNodes optional. set points to line of source and target node\r\n     */\r\n    public addEdge(edge: any, withPosOfNodes?: boolean): Association {\r\n\r\n        // lookup in factoryedges and check if the edge type realy exists\r\n        if (edge && edge.type) {\r\n            const graph = (<Graph>this.$owner);\r\n            let typeExists = false;\r\n            for (let edgeType in graph.edgeFactory) {\r\n                if (edgeType === edge.type) {\r\n                    typeExists = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!typeExists) {\r\n                edge.type = 'Association';\r\n            }\r\n        }\r\n\r\n        let type = edge.type || 'Association';\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n\r\n        let newEdge = <Association>this.createElement(type, id, edge);\r\n        newEdge.type = type;\r\n\r\n        let source: Node;\r\n        let sourceAsString: string = edge.source.id || edge.source;\r\n        if (sourceAsString) {\r\n            source = this.getNodeById(sourceAsString);\r\n            if (!source) {\r\n                let nodeID = edge.source;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                source = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                source.init(this);\r\n            }\r\n        }\r\n\r\n        let target: Node;\r\n        let targetAsString: string = edge.target.id || edge.target;\r\n        if (targetAsString) {\r\n            target = this.getNodeById(targetAsString);\r\n            if (!target) {\r\n                let nodeID = edge.target;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                target = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                target.init(this);\r\n            }\r\n        }\r\n\r\n        newEdge.withItem(source, target);\r\n\r\n        if (withPosOfNodes) {\r\n            let srcX = source.getPos().x + (source.getSize().x / 2);\r\n            let srcY = source.getPos().y + (source.getSize().y / 2);\r\n\r\n            let targetX = target.getPos().x + (target.getSize().x / 2);\r\n            let targetY = target.getPos().y + (target.getSize().y / 2);\r\n\r\n            newEdge.addPoint(srcX, srcY);\r\n            newEdge.addPoint(targetX, targetY);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public createElement(type: string, id: string, data: Object): DiagramElement {\r\n        const graph = <Graph>this.$owner;\r\n        let element: DiagramElement;\r\n        if (graph.nodeFactory[type]) {\r\n            element = new graph.nodeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.nodes.push(<Node>element);\r\n        }\r\n        if (graph.edgeFactory[type]) {\r\n            element = new graph.edgeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.edges.push(<Association>element);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public getNodeById(id: string): Node {\r\n        for (let node of this.nodes) {\r\n            if (node.id === id) {\r\n                return node;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    private initCanvas() {\r\n        const graph = <Graph>this.$owner;\r\n        graph.canvasSize = {width: graph.$view.clientWidth, height: graph.$view.clientHeight};\r\n        graph.root = Util.createShape({\r\n            tag: 'svg',\r\n            id: 'root',\r\n            width: graph.canvasSize.width,\r\n            height: graph.canvasSize.height\r\n            // FIXME,viewBox: `${this.$graph.options.origin.x * -1} ${this.$graph.options.origin.y * -1} ${this.$graph.canvasSize.width} ${this.$graph.canvasSize.height}`\r\n        });\r\n        this.$view = graph.root;\r\n        graph.$view.appendChild(graph.root);\r\n\r\n        let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    private addNode(node: Node): Node {\r\n        let type = node['type'] || node.property || 'Node';\r\n        type = Util.toPascalCase(type);\r\n        let id = node['id'] || node['name'] || this.getNewId(type);\r\n\r\n        return <Node>this.createElement(type, id, node);\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction } from './index';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\n\r\nexport abstract class Aggregate extends Association {\r\n\r\n    protected $diamond: Element;\r\n\r\n    public getSVG(): Element {\r\n\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled diamond\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n        };\r\n\r\n        this.$diamond = this.createShape(attr);\r\n\r\n        group.appendChild(this.$diamond);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint: Point = this.$points[0];\r\n        let direction: Direction = Direction.Down;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if (this.$sNode.id === startNode.id || this.$points.length == 2) {\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$diamond.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint: Point, direction: Direction): string {\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                path = `M${startX} ${startY} L${startX + 6} ${startY + 10} L${startX} ${startY + 20} L${startX - 6} ${startY + 10} Z`;\r\n                startPoint.y = startPoint.y+20;\r\n                break;\r\n            case Direction.Right:\r\n                path = `M${startX} ${startY} L${startX - 10} ${startY + 6} L${startX - 20} ${startY} L${startX - 10} ${startY - 6} Z`;\r\n                startPoint.x = startPoint.x-20;\r\n                break;\r\n            case Direction.Left:\r\n                path = `M${startX} ${startY} L${startX + 10} ${startY - 6} L${startX + 20} ${startY} L${startX + 10} ${startY + 6} Z`;\r\n                startPoint.x = startPoint.x+20;\r\n                break;\r\n            case Direction.Down:\r\n                path = `M${startX} ${startY} L${startX - 6} ${startY - 10} L${startX} ${startY - 20} L${startX + 6} ${startY - 10} Z`;\r\n                startPoint.y = startPoint.y-20;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Aggregation extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'white');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { DiagramElement, Line, Point } from '../BaseElements';\r\nimport { Node } from '../nodes';\r\nimport { InfoText } from '../nodes/InfoText';\r\nimport { Util } from '../../util';\r\nimport { EventBus } from '../../EventBus';\r\nimport * as edges from '../edges';\r\nimport { Graph } from '../Graph';\r\n\r\nexport const enum Direction {\r\n    Up, Down, Left, Right\r\n}\r\n\r\nexport class Association extends DiagramElement {\r\n    public source: string;\r\n    public target: string;\r\n    public type: string;\r\n    public $sNode: Node;\r\n    public $tNode: Node;\r\n    public lineStyle: string;\r\n    public $points: Point[] = [];\r\n    public $pathSvg: Element;\r\n    public $pathWideSvg: Element;\r\n    public info: InfoText;\r\n    public sourceInfo: InfoText;\r\n    public targetInfo: InfoText;\r\n    $m: number;\r\n    $n: number;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super();\r\n\r\n        this.withData(data);\r\n    }\r\n\r\n    public withData(data: JSON | string | Object | any): Association {\r\n\r\n        if (!data) {\r\n            return this;\r\n        }\r\n        let srcInfo;\r\n        let trgInfo;\r\n\r\n        if (data.source && typeof data.source !== 'string') {\r\n            srcInfo = data.source;\r\n        }\r\n        else if (data.sourceInfo && typeof data.sourceInfo !== 'string') {\r\n            srcInfo = data.sourceInfo;\r\n        }\r\n\r\n        if (srcInfo) {\r\n            this.sourceInfo = new InfoText(srcInfo);\r\n            this.sourceInfo.$owner = this;\r\n        }\r\n\r\n        if (data.target && typeof data.target !== 'string') {\r\n            trgInfo = data.target;\r\n        }\r\n        else if (data.targetInfo && typeof data.targetInfo !== 'string') {\r\n            trgInfo = data.targetInfo;\r\n        }\r\n\r\n        if (trgInfo) {\r\n            this.targetInfo = new InfoText(trgInfo);\r\n            this.targetInfo.$owner = this;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    public updateSrcCardinality(cardinality: string): void {\r\n        this.sourceInfo = this.updateCardinality(this.$sNode, this.sourceInfo, cardinality);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetCardinality(cardinality: string): void {\r\n        this.targetInfo = this.updateCardinality(this.$tNode, this.targetInfo, cardinality);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateSrcProperty(property: string): void {\r\n        this.sourceInfo = this.updateProperty(this.$sNode, this.sourceInfo, property);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetProperty(property: string): void {\r\n        this.targetInfo = this.updateProperty(this.$tNode, this.targetInfo, property);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public withItem(source: Node, target: Node): Association {\r\n        source.$edges.push(this);\r\n        target.$edges.push(this);\r\n        this.$sNode = source;\r\n        this.$tNode = target;\r\n        this.source = source.id;\r\n        this.target = target.id;\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let group = Util.createShape({ tag: 'g', id: this.id, class: 'SVGEdge' });\r\n\r\n        let path: string = this.getPath();\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'none'\r\n        };\r\n        let pathLine = this.createShape(attr);\r\n\r\n        //attr['style'] = 'stroke-width:20;opacity:0;width:20;height:20';\r\n        let extendedPathLine = Util.createShape(attr);\r\n\r\n        group.appendChild(extendedPathLine);\r\n        group.appendChild(pathLine);\r\n\r\n        if (this.sourceInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.sourceInfo.getSVG());\r\n        }\r\n        if (this.targetInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.targetInfo.getSVG());\r\n        }\r\n\r\n        this.$pathWideSvg = extendedPathLine;\r\n        this.$pathSvg = pathLine;\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.EDITOR, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    public convertEdge(type: string, newId: string, redraw?: boolean): Association {\r\n        if (!edges[type]) {\r\n            return this;\r\n        }\r\n\r\n        let newEdge: Association = new edges[type]();\r\n        newEdge.withItem(this.$sNode, this.$tNode);\r\n        newEdge.id = newId;\r\n        newEdge.type = type;\r\n        newEdge.lineStyle = this.lineStyle;\r\n        newEdge.$owner = this.$owner;\r\n\r\n        if (this.sourceInfo) {\r\n            newEdge.sourceInfo = new InfoText({ property: this.sourceInfo.property, cardinality: this.sourceInfo.cardinality });\r\n            newEdge.sourceInfo.$owner = newEdge;\r\n        }\r\n\r\n        if (this.targetInfo) {\r\n            newEdge.targetInfo = new InfoText({ property: this.targetInfo.property, cardinality: this.targetInfo.cardinality });\r\n            newEdge.targetInfo.$owner = newEdge;\r\n        }\r\n\r\n        this.$points.forEach(point => {\r\n            newEdge.addPoint(point.x, point.y);\r\n        });\r\n\r\n        let graph = <Graph>this.getRoot();\r\n        if (!graph) {\r\n            return this;\r\n        }\r\n\r\n        // update model. insert the edge exact on the same index, like the old edge\r\n        let idx = graph.$graphModel.edges.indexOf(this);\r\n        graph.$graphModel.removeElement(this.id);\r\n        if (idx > -1) {\r\n            graph.$graphModel.edges.splice(idx, 0, newEdge);\r\n        }\r\n        else {\r\n            graph.$graphModel.edges.push(newEdge);\r\n        }\r\n\r\n        if (!redraw) {\r\n            return newEdge;\r\n        }\r\n\r\n        let svgRoot: Element;\r\n        if (graph) {\r\n            svgRoot = graph.root;\r\n        }\r\n        else {\r\n            svgRoot = document.getElementById('root');\r\n        }\r\n        let newEdgeSvg = newEdge.getSVG();\r\n\r\n        // update graph\r\n        graph.removeElement(this);\r\n        svgRoot.appendChild(newEdgeSvg);\r\n\r\n        // redraw the edge from both sides to get the correct display\r\n        // if the type is edge, so the path can be redraw.\r\n        // if not, so the inherited class redraw the path with his own logic\r\n\r\n        let dontDrawPath: boolean = (type !== 'Edge');\r\n        newEdge.redraw(newEdge.$sNode, dontDrawPath);\r\n        newEdge.redraw(newEdge.$tNode, dontDrawPath);\r\n\r\n        EventBus.register(newEdge, newEdgeSvg);\r\n\r\n        this.sourceInfo = undefined;\r\n        this.targetInfo = undefined;\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n        // redraw the first point\r\n        // check which point is the near to startnode\r\n        let endPoint: Point;\r\n        let recalcPoint: Point;\r\n        let endPointIdx: number;\r\n\r\n        if (this.$sNode.id === startNode.id) {\r\n            recalcPoint = this.$points[0];\r\n            endPointIdx = 1;\r\n        } else if (this.$tNode.id === startNode.id) {\r\n            recalcPoint = this.$points[this.$points.length - 1];\r\n            endPointIdx = this.$points.length - 2;\r\n        }\r\n\r\n        endPoint = this.$points[endPointIdx];\r\n\r\n        // calculate and set new position of point to redraw\r\n        this.calcIntersection(startNode, recalcPoint, endPoint);\r\n\r\n        // remove the 2nd point next to startnode, if the node was dragged upper the point\r\n        if (this.$points.length > 2 && this.$tNode.id === startNode.id && endPoint.y > (startNode.getPos().y + (startNode.getSize().y / 2))) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$tNode.id === startNode.id && this.$points.length === 2) {\r\n            this.calcIntersection(this.$sNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (this.$points.length > 2 && this.$sNode.id === startNode.id && (startNode.getPos().y + (startNode.getSize().y / 2) > endPoint.y)) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$sNode.id === startNode.id && this.$points.length === 2) {\r\n\r\n            this.calcIntersection(this.$tNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (!dontDrawPoints) {\r\n            this.redrawPointsAndInfo();\r\n        }\r\n    }\r\n\r\n    public getPath(): string {\r\n\r\n        if (this.$points.length === 0) {\r\n            return '';\r\n        }\r\n\r\n        let path: string = 'M';\r\n        for (let i = 0; i < this.$points.length; i++) {\r\n            let point: Point = this.$points[i];\r\n            if (i > 0) {\r\n                path += 'L';\r\n            }\r\n            path += Math.floor(point.x) + ' ' + Math.floor(point.y) + ' ';\r\n        }\r\n\r\n        return path;\r\n    }\r\n    public calcInfoPosNew(infoTxt: InfoText, node: Node): Point {\r\n\r\n        if (!infoTxt || !node) {\r\n            return null;\r\n        }\r\n\r\n        // 1. step: get direction\r\n        let startPoint: Point;\r\n        let nextToStartPoint: Point;\r\n        if (this.$sNode.id === node.id) {\r\n            startPoint = this.$points[0];\r\n            nextToStartPoint = this.$points[1];\r\n        }\r\n        else if (this.$tNode.id === node.id) {\r\n            startPoint = this.$points[this.$points.length - 1];\r\n            nextToStartPoint = this.$points[this.$points.length - 2];\r\n        }\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(node, startPoint);\r\n\r\n        let x: number;\r\n        let y: number;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                break;\r\n            case Direction.Right:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x - (infoTxt.getSize().x) - 5;\r\n                break;\r\n            case Direction.Left:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x + 5;\r\n                break;\r\n            case Direction.Down:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        // assign calculated position to infotext\r\n        return new Point(x, y);\r\n    }\r\n\r\n    public clearPoints(): any {\r\n        this.$points = [];\r\n        this.$points = [];\r\n    }\r\n\r\n    public addPoint(x: number, y: number): Point[] {\r\n        this.$points.push(new Point(x, y));\r\n\r\n        return this.$points;\r\n    }\r\n\r\n    protected redrawPointsAndInfo(): void {\r\n        // redraw the edge with the new position\r\n        let path: string = this.getPath();\r\n        this.$pathSvg.setAttributeNS(null, 'd', path);\r\n        this.$pathWideSvg.setAttributeNS(null, 'd', path);\r\n\r\n        this.redrawSourceInfo();\r\n        this.redrawTargetInfo();\r\n    }\r\n\r\n    protected redrawSourceInfo() {\r\n        if (this.sourceInfo) {\r\n            let newPosOfSrc = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.redrawFromEdge(newPosOfSrc);\r\n        }\r\n    }\r\n\r\n    protected redrawTargetInfo() {\r\n        if (this.targetInfo) {\r\n            let newPosOfTarget = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.redrawFromEdge(newPosOfTarget);\r\n        }\r\n    }\r\n\r\n    protected getDirectionOfPointToNode(node: Node, pointNearNode: Point): Direction {\r\n        /*\r\n            Example to calculate the direction of nearest point to Node\r\n\r\n            node\r\n         x1_ _ _ _\r\n          |       |\r\n          |       |. pointNearNode\r\n          |       |\r\n          |_ _ _ x2\r\n\r\n          the calculation would return Direction.Left\r\n        */\r\n\r\n        let x1: Point = node.getPos();\r\n        let x2: Point = new Point((x1.x + node.getSize().x), (x1.y + node.getSize().y));\r\n        let direction: Direction = Direction.Down;\r\n\r\n        if (x1.y >= pointNearNode.y) {\r\n            direction = Direction.Down;\r\n        }\r\n        if (x2.y <= pointNearNode.y) {\r\n            direction = Direction.Up;\r\n        }\r\n        if (x1.x >= pointNearNode.x) {\r\n            direction = Direction.Right;\r\n        }\r\n        if (x2.x <= pointNearNode.x) {\r\n            direction = Direction.Left;\r\n        }\r\n\r\n        return direction;\r\n    }\r\n\r\n    private updateCardinality(node: Node, infoText: InfoText, cardinality: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'cardinality': cardinality });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.cardinality = cardinality;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateCardinality(cardinality);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private updateProperty(node: Node, infoText: InfoText, property: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'property': property });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.property = property;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateProperty(property);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private calcIntersection(startNode: Node, recalcPoint: Point, endPoint: Point): Point {\r\n\r\n        // https://www.mathelounge.de/21534/schnittpunkt-einer-linie-mit-den-randern-eines-rechtecks\r\n        let h = startNode.getSize().y;\r\n        let w = startNode.getSize().x;\r\n\r\n        let x1: number = startNode.getPos().x + (w / 2);\r\n        let y1: number = startNode.getPos().y + (h / 2);\r\n\r\n        let x2: number = endPoint.x;\r\n        let y2: number = endPoint.y;\r\n\r\n        let newX: number = recalcPoint.x;\r\n        let newY: number = recalcPoint.y;\r\n\r\n        if (x2 > x1) {\r\n            newX = x1 + (w / 2);\r\n        }\r\n        else if (x2 < x1) {\r\n            newX = x1 - (w / 2);\r\n        }\r\n        else {\r\n            newX = x1;\r\n        }\r\n\r\n        if ((x2 - x1) !== 0) {\r\n            newY = ((y2 - y1) / (x2 - x1) * (newX - x1)) + y1;\r\n        }\r\n        else {\r\n            if (y1 > y2) {\r\n                newY = startNode.getPos().y;\r\n            }\r\n            else {\r\n                newY = startNode.getPos().y + h;\r\n            }\r\n        }\r\n\r\n        // if the statement is not true, so the intersection is at the horizontal line\r\n        if (!((y1 - (h / 2) <= newY) && newY <= y1 + (h / 2))) {\r\n\r\n            if (y2 > y1) {\r\n                newY = y1 + (h / 2);\r\n            }\r\n            else {\r\n                newY = y1 - (h / 2);\r\n            }\r\n\r\n            if ((x2 - x1) !== 0) {\r\n                let tmp = ((y2 - y1) / (x2 - x1));\r\n                newX = (newY + (tmp * x1) - y1) / tmp;\r\n            }\r\n            else {\r\n                newX = x1;\r\n            }\r\n        }\r\n\r\n        recalcPoint.x = Math.ceil(newX);\r\n        recalcPoint.y = Math.ceil(newY);\r\n\r\n        return null;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Composition extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'black');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { Association } from './Association';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\nimport { Direction } from '../index';\r\n\r\nexport class Generalisation extends Association {\r\n\r\n    public $TARGET_ELEMENT_HEIGHT : number = 12;\r\n    protected $targetElement: Element;\r\n\r\n    public getSVG(): Element {\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction : Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled arrow\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'white'\r\n          };\r\n\r\n        this.$targetElement = this.createShape(attr);\r\n\r\n        group.appendChild(this.$targetElement);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean) : void {\r\n\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint : Point = this.$points[0];\r\n        let direction : Direction = Direction.Up;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if(this.$sNode.id === startNode.id || this.$points.length == 2){\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$targetElement.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint : Point, direction : Direction) : string{\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch(direction){\r\n            case Direction.Up:\r\n            path = `M${startX} ${startY+3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y+12;\r\n            break;\r\n            case Direction.Right:\r\n            path = `M${startX-3} ${startY} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x-12;\r\n            break;\r\n            case Direction.Left:\r\n            path = `M${startX+3} ${startY} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x+12;\r\n            break;\r\n            case Direction.Down:\r\n            path = `M${startX} ${startY-3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y-12;\r\n            break;\r\n            default :\r\n            break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n\r\n}\r\n","import { Generalisation } from './Generalisation';\r\n\r\nexport class Implements extends Generalisation {\r\n\r\n    public getSVG(): Element {\r\n        let group = super.getSVG();\r\n\r\n        this.$pathSvg.setAttributeNS(null, 'stroke-dasharray', '3, 3');\r\n\r\n        return group;\r\n    }\r\n}\r\n","export * from './Association';\r\nexport * from './Aggregate';\r\nexport * from './Aggregation';\r\nexport * from './Composition';\r\nexport * from './Generalisation';\r\nexport * from './Implements';","export * from './edges';\r\nexport * from './nodes';\r\nexport * from './BaseElements';\r\nexport * from './Graph';\r\nexport * from './Model';\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Attribute extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 28.06.2017.\r\n */\r\nimport {Control} from \"../../Control\";\r\n\r\nexport class AutoComplete extends Control {\r\n    private $inputField:HTMLInputElement;\r\n    private $dataList:HTMLDataListElement;\r\n    private $selected:HTMLSelectElement;\r\n    private $items:HTMLDivElement;\r\n    private isMultiple:boolean;\r\n\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        let div:HTMLDivElement = document.createElement('div');\r\n        this.$view = div;\r\n        this.$inputField = document.createElement('input');\r\n        this.$dataList = document.createElement(\"datalist\");\r\n        this.$dataList.id = \"data_\"+this.id;\r\n        this.$inputField.setAttribute(\"list\", \"data_\"+this.id);\r\n        if(data[\"value\"]) {\r\n            let values = data[\"value\"];\r\n            this.isMultiple = data[\"multiple\"] != null;\r\n            let option:HTMLOptionElement;\r\n            if(this.isMultiple) {\r\n                this.$selected = document.createElement(\"select\");\r\n                this.$selected.className = \"hide\";\r\n                this.$selected.multiple = true;\r\n\r\n                this.$selected.id = this.id;\r\n                this.$items = document.createElement(\"div\");\r\n                this.$items.className = \"selectedList\";\r\n                div.appendChild(this.$items);\r\n                this.$inputField.className = \"selectedInput\";\r\n                div.appendChild(this.$selected);\r\n                this.$view[\"style\"].setProperty(\"float\", \"left\");\r\n                let that = this;\r\n                this.$inputField.oninput = function(){that.onChange();}\r\n            } else {\r\n                this.$inputField.id = this.id;\r\n            }\r\n            for (let attr in values) {\r\n                if (!values.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                option = document.createElement(\"option\");\r\n                option.value = values[attr];\r\n                this.$dataList.appendChild(option);\r\n                if(this.isMultiple) {\r\n                    option = document.createElement(\"option\");\r\n                    option.value = values[attr];\r\n                    option.innerHTML = values[attr];\r\n                    this.$selected.appendChild(option);\r\n                }\r\n        }\r\n\r\n            div.appendChild(this.$inputField);\r\n            div.appendChild(this.$dataList);\r\n        }\r\n\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n            if(this.isMultiple) {\r\n                div.appendChild(this.$selected);\r\n            }\r\n        }\r\n\r\n        parent.appendChild(this);\r\n    }\r\n\r\n    public onChange() : void {\r\n        let textValue:string = this.$inputField.value;\r\n        if(textValue.length<1) {\r\n            return;\r\n        }\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == textValue) {\r\n                if(item.selected == false) {\r\n                    item.selected = true;\r\n                    item.defaultSelected = true;\r\n                    let test = document.createElement(\"li\");\r\n                    let that = this;\r\n                    test.onclick = function() {that.onDelete(item.value, test);};\r\n                    test.className = \"selectedItem\";\r\n                    test.innerHTML = item.value;\r\n                    this.$items.appendChild(test);\r\n                    this.$inputField.value = \"\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n    public onDelete(value:string, selectedItem:HTMLLIElement) : void {\r\n        this.$items.removeChild(selectedItem);\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == value ) {\r\n                if(item.selected) {\r\n                    item.selected = false;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","import {Control} from '../../Control';\r\n\r\nexport class BR extends Control {\r\n    public load(json: JSON): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('br');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            this.$view.setAttribute(attr, data[attr]);\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\nexport class Button extends Control {\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        this.$view = document.createElement('button');\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\nimport { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\nimport { Size } from '../index';\r\nimport ClazzProperty from './ClazzProperty';\r\nimport {SymbolLibary} from './Symbol';\r\nimport {StereoType} from './StereoType';\r\nimport {GraphListener} from '../../handlers/GraphListener';\r\n\r\nexport class Class extends Node {\r\n    public attributes: Attribute[] = [];\r\n    public methods: Method[] = [];\r\n    public modifier: string;\r\n    public stereoType: string;\r\n\r\n    protected $attrHeight = 25;\r\n    protected $attrFontSize = 12;\r\n    protected $labelView: Element;\r\n\r\n    constructor(json: JSON | string | Object | any) {\r\n        super(json);\r\n        return this;\r\n    }\r\n\r\n    public load(json?: any) {\r\n        if (!json) {\r\n            json = {};\r\n        }\r\n        let y = this.$labelHeight;\r\n        let labelObj = json.name || json.id || ('New ' + this.property);\r\n\r\n        let width: number = 150;\r\n        width = Math.max(width, Util.sizeOf(labelObj).width + 60);\r\n\r\n        if (json['attributes']) {\r\n            for (let attr of json['attributes']) {\r\n\r\n                let attrObj = new Attribute(attr);\r\n                attrObj.$owner = this;\r\n                this.attributes.push(attrObj);\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(attrObj.toString()).width);\r\n                let listener = new GraphListener(attrObj);\r\n                attrObj.$data.addListener(listener);\r\n            }\r\n        }\r\n        if (json['stereotype']) {\r\n            this.stereoType = json['stereotype'];\r\n        }\r\n        if (json['methods']) {\r\n            for (let method of json['methods']) {\r\n\r\n                let methodObj = new Method(method);\r\n                methodObj.$owner = this;\r\n                this.methods.push(methodObj);\r\n\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(methodObj.toString()).width);\r\n            }\r\n            y += this.$attrHeight;\r\n        }\r\n        this.withSize(width, y);\r\n    }\r\n\r\n    public getAttributes(): Attribute[] {\r\n        return this.attributes;\r\n    }\r\n\r\n    public getMethods(): Method[] {\r\n        return this.methods;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        let icon = SymbolLibary.draw({type: 'Class', property: 'HTML', width: '50', height: '50', transform: 'translate(-26,-21)'});\r\n        return icon;\r\n        // let group = this.createShape(\r\n//    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n//    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos: Point = this.getPos();\r\n        const size: Point = this.getSize();\r\n\r\n        let group = this.createShape({ tag: 'g', id: this.id, class: 'SVGClazz', transform: 'translate(0 0)' });\r\n\r\n        if (this.stereoType) {\r\n            let type = new StereoType(this.stereoType, pos.x, pos.y);\r\n            group.appendChild(type.getSVG());\r\n        }\r\n\r\n        // Full Shape\r\n        let options = null;\r\n        let style;\r\n        let clazzName;\r\n        if (this.$owner['options']) {\r\n            let options = this.$owner['options'];\r\n            if (options) {\r\n                style = options.style;\r\n            }\r\n        }\r\n        // = = = Background = = =\r\n        if (style === 'modern') {\r\n            clazzName = 'ClazzHeader';\r\n        }\r\n        clazzName = 'ClazzHeader';\r\n        const nodeShape = this.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            height: size.y,\r\n            width: size.x,\r\n            rx: 5,\r\n            ry: 5,\r\n            fill: 'none',\r\n            stroke: 'black',\r\n            'stroke-width': 1\r\n        });\r\n        if (clazzName) {\r\n            nodeShape.setAttribute('className', clazzName);\r\n            let styleHeader = Util.getStyle('ClazzHeader');\r\n            // headerHeight = styleHeader.getNumber('height');\r\n        }\r\n\r\n        // = = = LABEL = = =\r\n        let label = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y + this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': this.$labelFontSize,\r\n            fill: 'black'\r\n        });\r\n        label.textContent = this.id;\r\n        this.$labelView = label;\r\n\r\n        group.appendChild(nodeShape);\r\n        group.appendChild(label);\r\n\r\n        // = = = ATTRIBUTES = = =\r\n        if (this.attributes.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorLabelAttr = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight,\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight,\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorLabelAttr);\r\n\r\n            let groupOfAttributes = this.createShape({ tag: 'g', id: (this.id + 'Attributes') });\r\n            groupOfAttributes.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzAttribute');\r\n            group.appendChild(groupOfAttributes);\r\n\r\n            let y = pos.y + this.$labelHeight + this.$attrHeight / 2;\r\n            for (let attr of this.attributes) {\r\n\r\n                let attrSvg = attr.getSVG();\r\n                attr.$owner = this;\r\n\r\n                attrSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                attrSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfAttributes.appendChild(attrSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        // = = = METHODS = = =\r\n        let height = this.attributes.length * this.$attrHeight;\r\n        let y = pos.y + this.$labelHeight + height + this.$attrHeight / 2;\r\n        if (this.methods.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorAttrMethods = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorAttrMethods);\r\n\r\n            let groupOfMethods = this.createShape({ tag: 'g', id: (this.id + 'Methods') });\r\n            groupOfMethods.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzMethod');\r\n            group.appendChild(groupOfMethods);\r\n\r\n            y += this.$attrHeight / 2;\r\n            for (let method of this.methods) {\r\n\r\n                let methodSvg = method.getSVG();\r\n                method.$owner = this;\r\n\r\n                methodSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                methodSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfMethods.appendChild(methodSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        this.$view = group;\r\n        return group;\r\n    }\r\n\r\n    public copy(): Class {\r\n        let copy: Class;\r\n        copy = <Class>super.copy();\r\n\r\n        // copy label\r\n        copy.id = this.id + 'Copy';\r\n\r\n        // copy attributes\r\n        this.attributes.forEach(attr => {\r\n            copy.attributes.push(new Attribute(attr.toString()));\r\n        });\r\n        // copy methods\r\n        this.methods.forEach(method => {\r\n            copy.methods.push(new Method(method.toString()));\r\n        });\r\n        copy.reCalcSize();\r\n\r\n        return copy;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTCLICK,\r\n                EventBus.ELEMENTDRAG, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES, EventBus.RELOADPROPERTIES];\r\n    }\r\n\r\n    public addProperty(value: string, type: string): any {\r\n        if (!this[type] || !value || value.length === 0) {\r\n            return;\r\n        }\r\n\r\n        let extractedValue;\r\n        if (type === 'attributes') {\r\n            extractedValue = new Attribute(value);\r\n        }\r\n        else if (type === 'methods') {\r\n            extractedValue = new Method(value);\r\n        }\r\n\r\n        for (let valueOfType of this[type]) {\r\n            if (valueOfType.toString() === extractedValue.toString()) {\r\n                alert(extractedValue.toString() + ' already exists.');\r\n                extractedValue = undefined;\r\n                return;\r\n            }\r\n        }\r\n\r\n        this[type].push(extractedValue);\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        return extractedValue;\r\n    }\r\n\r\n    public addAttribute(value: string): Attribute {\r\n        return this.addProperty(value, 'attributes');\r\n    }\r\n\r\n    public addAttributeObj(attr: Attribute): Attribute[] {\r\n        this.attributes.push(attr);\r\n        return this.getAttributes();\r\n    }\r\n\r\n    public addMethodObj(method: Method): Method[] {\r\n        this.methods.push(method);\r\n        return this.getMethods();\r\n    }\r\n\r\n    public addMethod(value: string): Method {\r\n        return this.addProperty(value, 'methods');\r\n    }\r\n\r\n    public removeAttribute(attr: Attribute): void {\r\n        let idx = this.attributes.indexOf(attr);\r\n        this.attributes.splice(idx, 1);\r\n    }\r\n\r\n    public removeMethod(method: Method): void {\r\n        let idx = this.methods.indexOf(method);\r\n        this.methods.splice(idx, 1);\r\n    }\r\n\r\n    public removeProperty(property: ClazzProperty): void {\r\n\r\n        if (property instanceof Attribute) {\r\n            this.removeAttribute(<Attribute>property);\r\n        }\r\n\r\n        if (property instanceof Method) {\r\n            this.removeMethod(<Method>property);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n        let hasSizeChanged: [boolean, Size] = this.hasSizeChanged();\r\n\r\n        if (drawOnlyIfSizeChanged) {\r\n            if (!hasSizeChanged[0]) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n\r\n        // redraw only this clazz\r\n        this.$owner.$view.removeChild(this.$view);\r\n        let newSvg = this.getSVG();\r\n        this.$owner.$view.appendChild(newSvg);\r\n        this.$view = newSvg;\r\n        EventBus.register(this, newSvg);\r\n\r\n        this.redrawEdges();\r\n    }\r\n\r\n    public hasSizeChanged(): [boolean, Size] {\r\n        let oldSize = { width: this.getSize().x, height: this.getSize().y };\r\n        let newSize = this.reCalcSize();\r\n\r\n        // size doenst changed, so nothing to redraw\r\n        if (oldSize.width === newSize.width && oldSize.height === newSize.height) {\r\n            return [false, newSize];\r\n        }\r\n\r\n        return [true, newSize];\r\n    }\r\n\r\n    public updateLabel(newLabel: string): void {\r\n        if (this.$labelView) {\r\n            this.$labelView.textContent = newLabel;\r\n        }\r\n\r\n        // update label in all edges\r\n        this.$edges.forEach(edge => {\r\n            if (this.id === edge.$sNode.id) {\r\n                edge.source = newLabel;\r\n            }\r\n            else if (this.id === edge.$tNode.id) {\r\n                edge.target = newLabel;\r\n            }\r\n        });\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        this.reDraw(true);\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.modifier = modifier;\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reCalcSize(): Size {\r\n        // label\r\n        let newWidth = 150;\r\n        newWidth = Math.max(newWidth, Util.sizeOf(this.id).width + 30);\r\n\r\n        // attributes\r\n        this.attributes.forEach(attrEl => {\r\n\r\n            let widthOfAttr;\r\n            if (attrEl.$view) {\r\n                widthOfAttr = attrEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfAttr = Util.sizeOf(attrEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfAttr + 15);\r\n        });\r\n\r\n        // methods\r\n        this.methods.forEach(methodEl => {\r\n            let widthOfMethod;\r\n            if (methodEl.$view) {\r\n                widthOfMethod = methodEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfMethod = Util.sizeOf(methodEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfMethod + 15);\r\n        });\r\n\r\n        // TODO: height has to be calculated by font-size\r\n        this.getSize().x = newWidth;\r\n        this.getSize().y = this.$labelHeight + ((this.attributes.length + this.methods.length) * this.$attrHeight)\r\n            + this.$attrHeight;\r\n\r\n        let newSize = { width: newWidth, height: this.getSize().y };\r\n\r\n        return newSize;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    private getModernStyle(): Element {\r\n        let width, height, id, size, z, item, rect, g, board, styleHeader, headerHeight, x, y;\r\n        board = this.getRoot()['board'];\r\n        styleHeader = Util.getStyle('ClazzHeader');\r\n        headerHeight = styleHeader.getNumber('height');\r\n        width = 0;\r\n        height = 10 + headerHeight;\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].getType().toLowerCase() === 'objectdiagram') {\r\n            id = this.id.charAt(0).toLowerCase() + this.id.slice(1);\r\n            item = 'Object';\r\n        } else {\r\n            id = this.id;\r\n            item = 'Class';\r\n            if (this['counter']) {\r\n                id += ' (' + this['counter'] + ')';\r\n            }\r\n        }\r\n        g = Util.create({tag: 'g', model: this});\r\n        size = Util.sizeOf(id, this);\r\n        width = Math.max(width, size.width);\r\n        if (this.attributes && this.attributes.length > 0) {\r\n            height = height + this.attributes.length * 25;\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.attributes[z], this).width);\r\n            }\r\n        } else {\r\n            height += 20;\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            height = height + this.methods.length * 25;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.methods[z], this).width);\r\n            }\r\n        }\r\n        width += 20;\r\n\r\n        let pos = this.getPos();\r\n        y = pos.y;\r\n        x = pos.x;\r\n\r\n        rect = {\r\n            tag: 'rect',\r\n            'width': width,\r\n            'height': height,\r\n            'x': x,\r\n            'y': y,\r\n            'class': item + ' draggable',\r\n            'fill': 'none'\r\n        };\r\n        g.appendChild(Util.create(rect));\r\n        g.appendChild(Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            'x': x,\r\n            'y': y,\r\n            height: headerHeight,\r\n            'width': width,\r\n            'class': 'ClazzHeader'\r\n        }));\r\n\r\n        item = Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'class': 'InfoText',\r\n            'text-anchor': 'right',\r\n            'x': x + width / 2 - size.width / 2,\r\n            'y': y + (headerHeight / 2) + (size.height / 2),\r\n            'width': size.width\r\n        });\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].type.toLowerCase() === 'objectdiagram') {\r\n            item.setAttribute('text-decoration', 'underline');\r\n        }\r\n        item.appendChild(document.createTextNode(id));\r\n\r\n        g.appendChild(item);\r\n        g.appendChild(Util.create({\r\n            tag: 'line',\r\n            x1: x,\r\n            y1: y + headerHeight,\r\n            x2: x + width,\r\n            y2: y + headerHeight,\r\n            stroke: '#000'\r\n        }));\r\n        y += headerHeight + 20;\r\n\r\n        if (this.attributes) {\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': (x + 10),\r\n                    'y': y,\r\n                    value: this.attributes[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n            if (this.attributes.length > 0) {\r\n                y -= 10;\r\n            }\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            g.appendChild(Util.create({tag: 'line', x1: x, y1: y, x2: x + width, y2: y, stroke: '#000'}));\r\n            y += 20;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': x + 10,\r\n                    'y': y,\r\n                    value: this.methods[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n        }\r\n        return g;\r\n    }\r\n}\r\n","import {Util} from '../../util';\r\nimport {DiagramElement} from '../BaseElements';\r\nimport Data from '../../Data';\r\n\r\nexport default class ClazzProperty extends DiagramElement {\r\n\r\n    // Public (+)\r\n    // Private (-)\r\n    // Protected (#)\r\n    // Package (~)\r\n\r\n    public $data = new Data();\r\n//    public modifier: string = '+';\r\n//    public name: string;\r\n//    public type: string;\r\n//    public value: string;\r\n\r\n    constructor(data: any | JSON) {\r\n        super();\r\n        this.$data.setValue('modifier', '+');\r\n        this.$data.setValue('name', null);\r\n        this.$data.setValue('type', null);\r\n        this.$data.setValue('value', null);\r\n        this.extractData(data);\r\n    }\r\n\r\n    public update(data: any | JSON): void {\r\n        this.extractData(data);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.$data.setValue('modifier', modifier);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateType(type: string): void {\r\n        this.$data.setValue('type', type);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateValue(value: string): void {\r\n        this.$data.setValue('value', value);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateName(name: string): void {\r\n        this.$data.setValue('name', name);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public getName(): string {\r\n        return this.$data.getValue('name');\r\n    }\r\n\r\n    public getModifier(): string {\r\n        return this.$data.getValue('modifier');\r\n    }\r\n\r\n    public getType(): string {\r\n        return this.$data.getValue('type');\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let attrText = {\r\n            tag: 'text',\r\n            'text-anchor': 'start',\r\n            'alignment-baseline': 'middle',\r\n        };\r\n\r\n        let attrSvg = Util.createShape(attrText);\r\n        attrSvg.textContent = this.toString();\r\n\r\n        this.$view = attrSvg;\r\n\r\n        return attrSvg;\r\n    }\r\n\r\n    public toString(): string {\r\n        let value = this.$data.getValue('value');\r\n        let result = this.$data.getValue('modifier') + ' ';\r\n        result += this.$data.getValue('name') + ' : ';\r\n        result += this.$data.getValue('type');\r\n        if (value && value.length > 0) {\r\n            result += ' = ' + this.$data.getValue('value');\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.$data.setValue('type', data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.$data.setValue('name', data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.$data.setValue('modifier', data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n\r\n            // e.g. name : string or name:string\r\n            let dataSplitted = data.split(':');\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                let name;\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.$data.setValue('modifier', firstChar);\r\n                    name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                }\r\n                else {\r\n                    name = modifierAndNameSplitted;\r\n                }\r\n                // delete whitespaces in name\r\n                name = name.replace(/ /g, '_');\r\n\r\n                this.$data.setValue('name', name);\r\n                let type = dataSplitted[1].trim() || 'String';\r\n\r\n                // if the type was entered with a small begin letter\r\n                if (type.toLowerCase() === 'string') {\r\n                    type = 'String';\r\n                }\r\n                // delete whitespaces in type\r\n                type = type.replace(/ /g, '_');\r\n                this.$data.setValue('type',  type);\r\n            } else {\r\n                dataSplitted = data.split('=');\r\n                if (dataSplitted && dataSplitted.length === 2) {\r\n                    // modifer (and or) name\r\n                    let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                    // first char is +, - or #\r\n                    let firstChar = modifierAndNameSplitted[0];\r\n                    let name;\r\n                    if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                        this.$data.setValue('modifier', firstChar);\r\n                        name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                    }\r\n                    else {\r\n                        name = modifierAndNameSplitted;\r\n                    }\r\n                    // delete whitespaces in name\r\n                    name = name.replace(/ /g, '_');\r\n\r\n                    this.$data.setValue('name', name);\r\n                    let value = dataSplitted[1].trim() || '\"\"';\r\n                    this.$data.setValue('value', value);\r\n                    this.$data.setValue('type', typeof value);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected updateTextOfView() {\r\n        if (this.$view) {\r\n            this.$view.textContent = this.toString();\r\n        }\r\n        if (this.$owner) {\r\n            Util.saveToLocalStorage(this.$owner.$owner);\r\n        }\r\n    }\r\n}\r\n","import {Node} from \"./Node\";\r\n/**\r\n * Created by Stefan on 29.03.2017.\r\n */\r\n\r\nexport class Dice extends Node {\r\n    private value: number;\r\n    private max: number = 6;\r\n    private $animation: SVGElement;\r\n    private $zoom: number = 0.6;\r\n    private $border: number = 0.2;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super(data);\r\n        this.withSize(100, 100);\r\n    }\r\n\r\n    public setNumber(number: number) {\r\n        this.value = number;\r\n        this.refresh();\r\n    }\r\n\r\n    public refresh() {\r\n        if (this.$view) {\r\n            this.reset();\r\n            let group = this.createPointValue();\r\n            if (group) {\r\n                this.$view.appendChild(group);\r\n            }\r\n        }\r\n    }\r\n\r\n    public reset() {\r\n        if (this.$view) {\r\n            while (this.$view.children.length > 1) {\r\n                if(this.$view.children.item(this.$view.children.length - 1).tagName!== \"animateTransform\") {\r\n                    console.log(this.$view.children.item(this.$view.children.length - 1));\r\n                    this.$view.removeChild(this.$view.children.item(this.$view.children.length - 1));\r\n                }else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let dice: SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x + size.x * this.$border,\r\n            y: pos.y + size.y * this.$border,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y * this.$zoom,\r\n            width: size.x * this.$zoom,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        dice.appendChild(this.createShape(attr));\r\n\r\n        let group = this.createPointValue();\r\n        if (group) {\r\n            dice.appendChild(group);\r\n        }\r\n\r\n        this.$view = dice;\r\n        return dice;\r\n    }\r\n\r\n    public animationTimeout(newValues: number[]) {\r\n        if(newValues.length>0) {\r\n            let newValue = newValues.shift();\r\n            this.setNumber(newValue);\r\n            let that=this;\r\n            setTimeout(function() {that.animationTimeout(newValues)}, 100);\r\n        }\r\n    }\r\n\r\n    public roll() {\r\n        this.startAnimation();\r\n        let values:number[]=[];\r\n        let i:number;\r\n        for(i=1;i<this.max;i++) {\r\n            values.push(i);\r\n        }\r\n        for(i=this.max;i>0;i--) {\r\n            values.push(i);\r\n        }\r\n        let that=this;\r\n        values.push( Math.floor(Math.random() * this.max)+1 );\r\n        setTimeout(function() {that.animationTimeout(values)}, 100);\r\n    }\r\n    public startAnimation() {\r\n        if(this.$animation) {\r\n            return;\r\n        }\r\n        let center = this.getPos().x+this.getSize().x /2;\r\n        const attr = {\r\n            tag: 'animateTransform',\r\n            attributeType: \"xml\",\r\n            attributeName:\"transform\",\r\n            type:\"rotate\",\r\n            dur: \"1s\",\r\n            repeatCount:\"1\",\r\n            from:\"0 \"+center+\" \"+center,\r\n            to:\"360 \"+center+\" \"+center\r\n        };\r\n        this.$animation = <SVGElement>this.createShape(attr);\r\n        this.$view.appendChild(this.$animation);\r\n    }\r\n\r\n    public stopAnimation() {\r\n        if(this.$animation) {\r\n            this.$view.removeChild(this.$animation);\r\n            this.$animation = null;\r\n        }\r\n    }\r\n\r\n    public createPointValue() :SVGElement {\r\n        if (this.value == 1) {\r\n           return this.getCircle(2, 2);\r\n        } else if (this.value == 2) {\r\n            return this.getCircle(1, 1, 3, 3);\r\n        } else if (this.value == 3) {\r\n            return this.getCircle(1, 1, 2, 2, 3, 3);\r\n        } else if (this.value == 4) {\r\n            return this.getCircle(1, 1, 1, 3, 3, 1, 3, 3);\r\n        } else if (this.value == 5) {\r\n            return this.getCircle(1, 1, 1, 3, 2, 2, 3, 1, 3, 3);\r\n        } else if (this.value == 6) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 7) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 2, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 8) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 9) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private getCircle(...values:number[]) : SVGElement {\r\n        if (values.length % 2 > 0) {\r\n            return null;\r\n        }\r\n        let size = this.getSize();\r\n        let pos = this.getPos();\r\n        //FIXME let group:SVGElement = <SVGElement>this.createShape({tag: 'g', transform: 'translate(0 0)', height: size.y, width: size.x});\r\n        let group:SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n\r\n\r\n        for (let i: number = 0; i < values.length; i += 2) {\r\n            group.appendChild(this.createCircle(values[i], values[i + 1]));\r\n        }\r\n        return group;\r\n    }\r\n    private createCircle(x:number, y:number) : SVGElement {\r\n        let size = this.getSize();\r\n        let radius = size.x / 10*this.$zoom;\r\n        let border = size.y*this.$border;\r\n        let zoom = size.y*this.$zoom;\r\n        const attr = {\r\n            tag: 'circle',\r\n            r : radius,\r\n            cx: (size.x*this.$zoom * x) / 4 + border,\r\n            cy: (size.y*this.$zoom * y) / 4 + border,\r\n            stroke:\"black\",\r\n            \"stroke-width\":\"3\",\r\n            fill:\"red\",\r\n            style: 'fill:black;stroke:black;stroke-width:2'\r\n        };\r\n        return <SVGElement>this.createShape(attr);\r\n    }\r\n}","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\n\r\nexport class Div extends Control {\r\n    private className: string;\r\n\r\n    public load(data:JSON|any): any {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = <string>data;\r\n        } else {\r\n            id = data.id;\r\n            this.className = data.class;\r\n            this.property = data.property;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let div: HTMLElement = document.getElementById(id);\r\n\r\n        if (!this.property) {\r\n            // if(inputField){\r\n            // TODO disuss how to decide, which property we should listen on...\r\n            // this.property = id;\r\n            this.property = div.getAttribute('Property');\r\n            // }\r\n        }\r\n\r\n        if (div instanceof HTMLDivElement) {\r\n            this.$view = div;\r\n        } else {\r\n            if (!div) {\r\n                this.$view = document.createElement('div');\r\n                this.$view.setAttribute('id', this.id);\r\n                this.$view.setAttribute('property', this.property);\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists+\r\n        if (data.hasOwnProperty('property')) {\r\n            this.setProperty(data['property']);\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        this.$model = entity;\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.className || entity.hasProperty(this.className)) {\r\n                if (entity.id === this.property.split('.')[0]) {\r\n                    entity.addListener(this, this.className);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        this.$view.innerHTML = <string>newValue;\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Form extends Control {\r\n    // private applyingChange: boolean = false;\r\n    private children: Object = {};\r\n    // private property: string = \"\";\r\n\r\n    /**\r\n     * Data should look like the following json:\r\n     *\r\n     * <pre>{\r\n     *      id: \"t1\",\r\n     *      control: \"form\",\r\n     *      elements: [\r\n     *          {id: \"inputField1\", property: \"talk\"},\r\n     *          {id: \"inputField2\", property: \"room\"}\r\n     *      ]\r\n     * }</pre>\r\n     * @param data\r\n     */\r\n    public load(data: any) {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let form: HTMLElement = document.getElementById(id);\r\n\r\n        if (form instanceof HTMLFormElement) {\r\n            this.$view = form;\r\n            if (this.$view.hasAttribute('property')) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            if (!form) {\r\n                this.$view = document.createElement('form');\r\n                this.$view.setAttribute('id', this.id);\r\n\r\n                if (data.hasOwnProperty('property')) {\r\n                    this.property = data['property'];\r\n                }\r\n\r\n                // add all the attributes to the form element\r\n                for (let attr in data) {\r\n                    if (data.hasOwnProperty(attr) === false) {\r\n                        continue;\r\n                    }\r\n                    if (attr === 'elements') {\r\n                        continue;\r\n                    }\r\n                    this.$view.setAttribute(attr, data[attr]);\r\n                }\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists\r\n        let objId = this.property;\r\n        let hasItem = this.$owner.hasItem(objId);\r\n        if (hasItem) {\r\n            let item = this.$owner.getItem(objId);\r\n            item.addListener(this);\r\n            this.$model = item;\r\n        }\r\n\r\n        // now create all the sub input controls\r\n        for (let field of data.elements) {\r\n            // this.createField(field);\r\n            if (field.hasOwnProperty('property')) {\r\n                let property = field['property'];\r\n                property = this.property + '.' + property;\r\n                field['property'] = property;\r\n            }\r\n            if (!field.hasOwnProperty('class')) {\r\n                field['class'] = 'input';\r\n            }\r\n\r\n            // let the Bridge load the subControl\r\n            let control: Control = this.$owner.load(field, this);\r\n\r\n            // add subControl to children\r\n            this.children[control.getId()] = control;\r\n        }\r\n\r\n    }\r\n\r\n    public setProperty(id: string): void {\r\n        this.property = id;\r\n        let keys: string[] = Object.keys(this.children);\r\n        for (let k = 0; k < keys.length; k++) {\r\n            let key = keys[k];\r\n            let childControl = this.children[key];\r\n            // only set Property, if there is a Property defined before\r\n            if (childControl.property) {\r\n                childControl.setProperty(this.property + '.' + childControl.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object,  oldValue?: Object): boolean {\r\n        if (this.$owner != null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    /**\r\n     * Here we create the form elements and put all the attributes to them in order for the Control only having to load\r\n     * the data were appending here. Alternative would be loading with the bridge and afterwards setting\r\n     * the owner to the form instead of the body..\r\n     * @param field\r\n     */\r\n    /*private createField(field: Object) {\r\n     let control = 'input';\r\n     if (field.hasOwnProperty('class')) {\r\n     control = field['class'];\r\n     }\r\n     let input = document.createElement(control);\r\n     input.setAttribute('class', control);\r\n     let id: string;\r\n     if (!field.hasOwnProperty('id')) {\r\n     // TODO: not the best solution for generating unique id's for forms...\r\n     id = this.$owner.getId();\r\n     field['id'] = id;\r\n     }\r\n     if (field.hasOwnProperty('property')) {\r\n     let property = field['property'];\r\n     property = this.id + '.' + property;\r\n     input.setAttribute('property', property);\r\n     }\r\n     for (let attr in field) {\r\n     if (attr === 'property' || attr === 'class' || !field.hasOwnProperty(attr)) {\r\n     continue;\r\n     }\r\n     input.setAttribute(attr, field[attr]);\r\n     }\r\n\r\n     this.$viewElement.appendChild(input);\r\n\r\n     let newcontrol: Control = this.$owner.load(field['id']);\r\n     this.children[newcontrol.getId()] = newcontrol;\r\n     }*/\r\n}\r\n","/**\r\n * Created by Stefan on 01.03.2017.\r\n */\r\nimport {Control} from '../../Control';\r\n\r\nexport class HTML extends Control {\r\n    constructor(data: JSON|Object|any) {\r\n        super();\r\n\r\n        let id: string;\r\n        let tag: string;\r\n\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            data = {};\r\n        } else if (data) {\r\n            id = data.id;\r\n        }\r\n        if (id) {\r\n            this.id = id;\r\n            this.$view = document.getElementById(id);\r\n        }\r\n        if (!this.$view) {\r\n            if (data) {\r\n                tag = data['tag'] || 'div';\r\n            } else {\r\n                tag = 'div';\r\n            }\r\n            this.$view = document.createElement(tag);\r\n            let parent = document.getElementsByTagName('body')[0];\r\n            parent.appendChild(this.$view);\r\n        }\r\n        if (!parent) {\r\n            return;\r\n        }\r\n        this.writeAttribute(data, this.$view);\r\n    }\r\n\r\n    private writeAttribute(properties: Object, entity?: any) {\r\n        let lowKey;\r\n        if (!entity) {\r\n            lowKey = properties['tag'] || 'div';\r\n            entity = document.createElement(lowKey);\r\n        }\r\n        for (let key in properties) {\r\n            if (!properties.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            lowKey = key.toLowerCase();\r\n            if (properties[key] === null) {\r\n                entity.setAttribute(key, '');\r\n                continue;\r\n            }\r\n\r\n            if (lowKey === 'tag' || lowKey.charAt(0) === '$' || lowKey === '$graphModel' || lowKey === 'class') {\r\n                continue;\r\n            }\r\n            if (lowKey === 'children') {\r\n                if (Array.isArray(properties[key])) {\r\n                    for (let item in properties[key]) {\r\n                        if (properties[key].hasOwnProperty(item) === false) {\r\n                            continue;\r\n                        }\r\n                        let child = this.writeAttribute(item);\r\n                        if (child) {\r\n                            entity.appendChild(child);\r\n                        }\r\n                    }\r\n                } else {\r\n                    let child = this.writeAttribute(properties[key]);\r\n                    if (child) {\r\n                        entity.appendChild(child);\r\n                    }\r\n                }\r\n                continue;\r\n            }\r\n            entity[key] = properties[key];\r\n        }\r\n        return entity;\r\n    }\r\n}\r\n","import { Point } from '../BaseElements';\r\nimport { Util } from '../../util';\r\nimport { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\n\r\nexport class InfoText extends Node {\r\n\r\n    public cardinality: string = '';\r\n    private $heightOfOneTextItem: number;\r\n    private $cardinalitySvg: Element;\r\n    private $propertySvg: Element;\r\n    private $rectBackground: Element;\r\n\r\n    constructor(info: any) {\r\n        super(info);\r\n        if (typeof (info) === 'string') {\r\n            this.id = info;\r\n        } else {\r\n            if (info.property) {\r\n                this.property = info.property;\r\n            }\r\n            if (info.cardinality) {\r\n                this.cardinality = info.cardinality;\r\n            }\r\n        }\r\n        this.$isDraggable = true;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n    }\r\n\r\n    public updateCardinality(cardinality: string): void {\r\n        this.cardinality = cardinality;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (this.$rectBackground) {\r\n            this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n            this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n        }\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((cardinality.length === 0 && this.property.length > 0) || !this.$cardinalitySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$cardinalitySvg) {\r\n            this.$cardinalitySvg.textContent = cardinality;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.property.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    public updateProperty(property: string): void {\r\n        this.property = property;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((property.length === 0 && this.cardinality.length > 0) || !this.$propertySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$propertySvg) {\r\n            this.$propertySvg.textContent = property;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.cardinality.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos: Point = this.getPos();\r\n        let group = Util.create({ tag: 'g', class: 'SVGEdgeInfo', transform: 'translate(0, 0)' });\r\n\r\n        // append rect as background for text items\r\n        this.$rectBackground = Util.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y - this.$heightOfOneTextItem + 3,\r\n            width: this.getSize().x,\r\n            height: this.getSize().y,\r\n            fill: '#DDD',\r\n            'stroke-width': 0,\r\n            rx: '5',\r\n            ry: '5'\r\n        });\r\n        group.appendChild(this.$rectBackground);\r\n\r\n        let y = pos.y;\r\n        if (this.property) {\r\n            // property\r\n            this.$propertySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$propertySvg.textContent = this.property;\r\n            group.appendChild(this.$propertySvg);\r\n\r\n            y += this.$heightOfOneTextItem;\r\n        }\r\n\r\n        // cardinality\r\n        if (this.cardinality) {\r\n            this.$cardinalitySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$cardinalitySvg.textContent = this.cardinality;\r\n            group.appendChild(this.$cardinalitySvg);\r\n        }\r\n\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        let cardinalityAvailable = this.cardinality && this.cardinality.length > 0;\r\n        let propertyAvailable = this.property && this.property.length > 0;\r\n\r\n        return !propertyAvailable && !cardinalityAvailable;\r\n    }\r\n\r\n    public redrawFromEdge(newPos: Point): void {\r\n\r\n        if (!newPos) {\r\n            return;\r\n        }\r\n\r\n        let oldPos = this.getPos();\r\n\r\n        // get difference between new and the old position\r\n        let diffPos = new Point();\r\n        diffPos.x = newPos.x - oldPos.x;\r\n        diffPos.y = newPos.y - oldPos.y;\r\n\r\n        // get translate information\r\n        let translation = this.$view.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        let sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        // set new traslation values\r\n        let newTransX = (sx + diffPos.x);\r\n        let newTransY = (sy + diffPos.y);\r\n        this.$view.setAttributeNS(null, 'transform', 'translate(' + newTransX + ' ' + newTransY + ')');\r\n\r\n        // set new position of svg\r\n        this.getPos().x = newPos.x;\r\n        this.getPos().y = newPos.y;\r\n    }\r\n\r\n    public getText(): string {\r\n        let infoTxt: string = '';\r\n\r\n        if (this.property) {\r\n            infoTxt = this.property;\r\n        }\r\n        if (this.cardinality) {\r\n            if (infoTxt.length > 0) {\r\n                infoTxt += '\\n';\r\n            }\r\n            infoTxt += this.cardinality;\r\n        }\r\n\r\n        return infoTxt;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    private calcSize(): Point {\r\n        let text: string = this.getText();\r\n        let items: Array<string> = text.split('\\n');\r\n\r\n        let maxSize = new Point(0, 0);\r\n        if (text.length === 0) {\r\n            return maxSize;\r\n        }\r\n\r\n        for (let i = 0; i < items.length; i += 1) {\r\n            // calculate size\r\n            let sizeOfText: ClientRect = Util.sizeOf(items[i]);\r\n            maxSize.x = Math.max(maxSize.x, sizeOfText.width);\r\n            maxSize.y += sizeOfText.height;\r\n\r\n            this.$heightOfOneTextItem = sizeOfText.height;\r\n        }\r\n\r\n        return maxSize;\r\n    }\r\n    private resetAllSvgElements() {\r\n        this.$cardinalitySvg = undefined;\r\n        this.$view = undefined;\r\n        this.$propertySvg = undefined;\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\nimport {PropertyBinder} from '../../PropertyBinder';\r\n\r\nexport class Input extends Control {\r\n    private type: string;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data = super.initViewDataProperties(oldData);\r\n        if ('checkbox' === this.type || 'radio' === this.type) {\r\n            data.addFrom('checked', oldData);\r\n        }\r\n        data.addFrom('value', oldData);\r\n        data.addFrom('type', oldData);\r\n        return data;\r\n    }\r\n\r\n    public load(data: any) {\r\n        let id: string;\r\n        let inputField: HTMLElement;\r\n        let useData: boolean;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            useData = true;\r\n        } else {\r\n            id = data.id;\r\n            if (data.type) {\r\n                this.setType(data['type']);\r\n            } else {\r\n                this.setType('text');\r\n            }\r\n            if (data.hasOwnProperty('property')) {\r\n                this.setProperty(data['property']);\r\n            }\r\n            useData = false;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n\r\n        inputField = document.getElementById(id);\r\n\r\n        if (useData) {\r\n            if (inputField) {\r\n                // TODO disuss how to decide, which property we should listen on...\r\n                // this.property = id;\r\n                if (inputField.hasAttribute('Property')) {\r\n                    this.setProperty(inputField.getAttribute('Property'));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (inputField instanceof HTMLInputElement) {\r\n            this.setView(inputField);\r\n            this.type = inputField.type;\r\n            // useData = false;\r\n        } else {\r\n            if (!inputField) {\r\n                this.setView(document.createElement('input'));\r\n                this.$viewData = this.initViewDataProperties(this.$viewData);\r\n                // append viewListener\r\n                // this.$view.addEventListener('change', this.$viewListener);\r\n                if (typeof(data) !== 'string') {\r\n                    for (let attr in data) {\r\n                        if (data.hasOwnProperty(attr) === false) {\r\n                            continue;\r\n                        }\r\n                        // this.$view[attr] = data[attr];\r\n                        this.$viewData.setValue(attr, data[attr]);\r\n                    }\r\n                } else {\r\n                    if (this.type) {\r\n                        this.$view.setAttribute('type', this.type);\r\n                    }\r\n                    if (data.hasOwnProperty('class')) {\r\n                        this.$view.setAttribute('class', data['class']);\r\n                    }\r\n                    this.$view.setAttribute('id', this.id);\r\n                    this.$view.setAttribute('property', this.property);\r\n                }\r\n\r\n                if (data.value) {\r\n                    // if theres a value at the control, we want to change the model to the new value\r\n                    if (this.$model) {\r\n                        this.$model.setValue(this.lastProperty, data.value);\r\n                    }\r\n                }\r\n                if (this.$model) {\r\n                    PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                }\r\n\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (this.property && entity) {\r\n            if (entity.id === this.property.split('.')[0]) {\r\n                this.$model = entity;\r\n                PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                // entity.addListener(this, this.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n    // TODO FIXME protected updateElement(property: string, value: string) {\r\n    //     if (this.$view instanceof HTMLInputElement) {\r\n    //         if (value != null) {\r\n    //             if(property == this.lastProperty) {\r\n    //                 (<HTMLInputElement>this.$view)[this.getStandardProperty()] = value;\r\n    //             } else {\r\n    //                 // this.getRoot().setValue(this, property, value, (<HTMLInputElement>this.$view)[property]);\r\n    //                 (<HTMLInputElement>this.$view)[property] = value;\r\n    //             }\r\n    //         } else {\r\n    //             delete (<HTMLInputElement>this.$view)[property];\r\n    //         }\r\n    //     }\r\n    // }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            super.controlChanged(ev);\r\n        }\r\n// <<<<<<< HEAD\r\n//             let newVal = element[this.getStandardProperty()];\r\n//             if (this.isKeyOnly()) {\r\n//                 // we expect, element[this.lastProperty] to be boolean:\r\n//                 if (!newVal) {\r\n//                     newVal = null;\r\n//                 }\r\n//             } else {\r\n//             }\r\n        // let $graphModel;\r\n        // let value;\r\n        /*if (this.$graphModel) {\r\n            $graphModel = this.$graphModel;\r\n            value = this.$graphModel.getValue(this.lastProperty);\r\n        } else {\r\n            $graphModel = this;\r\n            if (this.$view) {\r\n                value = this.$view[this.lastProperty];\r\n            }\r\n        }*/\r\n        // this.$model.setValue(this.lastProperty, newVal);\r\n        // this.propertyChange(this.$graphModel,this.lastProperty, this.$graphModel.getValue(this.lastProperty), newVal);\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n// =======\r\n        // let newVal = element[this.lastProperty];\r\n        // if (this.isKeyOnly()) {\r\n        //     // we expect, element[this.lastProperty] to be boolean:\r\n        //     if (!newVal) {\r\n        //         newVal = null;\r\n        //     }\r\n        // } else {\r\n        // }\r\n        // let $graphModel;\r\n        // let value;\r\n\r\n        // $graphModel = this.getViewData();\r\n        // if (this.$graphModel) {\r\n        //     $graphModel = this.$graphModel;\r\n        //     value = this.$graphModel.getValue(this.lastProperty);\r\n        // } else {\r\n        //     $graphModel = this;\r\n        //     if (this.$view) {\r\n        //         value = this.$view[this.lastProperty];\r\n        //     }\r\n        // }\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n//            this.saveViewInData();\r\n// >>>>>>> addOldFunctions\r\n//         } else {\r\n//             console.log('value does not match the pattern...');\r\n//         }\r\n    }\r\n\r\n    public setType(type: string): void {\r\n        let oldValue: string = this.type;\r\n        if (oldValue === type) {\r\n            return;\r\n        }\r\n        if (type === 'radio') {\r\n            this.$viewData.setValue('checked', null);\r\n        } else {\r\n            this.$viewData.removeKey('checked');\r\n        }\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\n\r\nexport class Label extends Control {\r\n    public load(data: JSON): any {\r\n        this.createControl(this.$owner, data);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('label');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr === 'textContent') {\r\n                this.$view.textContent = data['textContent'];\r\n            } else {\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Method extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.updateType(data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.updateType(data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.updateType(data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n            // e.g. setName() : string or name:string\r\n            let dataSplitted = data.split(':');\r\n\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }\r\n                else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType(dataSplitted[1].trim() || 'void');\r\n            }\r\n            // set default return type of void\r\n            else {\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = data.trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }  else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType('void');\r\n            }\r\n        }\r\n\r\n        if (Util.includes(this.$data.getValue('name'), '(') && !Util.includes(this.$data.getValue('name'), ')') === false) {\r\n            this.$data.setValue('name', this.$data.getValue('name') + '()');\r\n        }\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\nimport {Association} from '../edges';\r\nimport { GraphModel } from '..';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\n\r\nexport class Node extends DiagramElement {\r\n    public $edges: Association[] = [];\r\n    public $minWidth: number = 150;\r\n    public $minheight: number = 25;\r\n    public $defaulEdgeType: string;\r\n\r\n    constructor(data: JSON|string|Object|any) {\r\n        super();\r\n\r\n        // default size\r\n        this.withSize(this.$minWidth, this.$minheight);\r\n\r\n        if (data) {\r\n            if (data['x'] && data['y']) {\r\n                this.withPos(data['x'], data['y']);\r\n            }\r\n            if (data['width'] || data['height']) {\r\n                this.withSize(data['width'], data['height']);\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos = this.getPos();\r\n        const size = this.getSize();\r\n\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x - size.x / 2,\r\n            y: pos.y - size.y / 2,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y,\r\n            width: size.x,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        const shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'middle',\r\n            'font-family': 'Verdana',\r\n            'font-size': '14',\r\n            fill: 'black'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = this.id;\r\n\r\n        let group = this.createShape({tag: 'g', id: this.id});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public copy(): Node {\r\n        let copy: Node;\r\n        // create new id\r\n        let model = <GraphModel>this.$owner || <GraphModel>this.getRoot();\r\n        if (model) {\r\n            let type = this.property || Node.name;\r\n            let newId = model.getNewId(type);\r\n            copy = <Node>model.createElement(type, newId, null);\r\n            copy.withSize(this.getSize().x, this.getSize().y);\r\n            copy.$owner = model;\r\n        } else {\r\n            copy.id = this.id + '-copy';\r\n            copy.$owner = this.getRoot();\r\n        }\r\n        return copy;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n// EMPTY\r\n    }\r\n    public addAttribute(value: string): Attribute {\r\n        return null;\r\n    }\r\n    public getAttributes(): Attribute[] {\r\n        return null;\r\n    }\r\n    public addMethod(value: string): Method {\r\n        return null;\r\n    }\r\n    public updateLabel(newLabel: string): void {\r\n// EMPTY\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\n\r\nexport class SO extends DiagramElement {\r\n    public static create(element: Object) {\r\n        let result: SO = new SO();\r\n        for (let key in element) {\r\n            if (element.hasOwnProperty(key) === false) {\r\n                continue;\r\n            }\r\n            result.withKeyValue(key, element[key]);\r\n\r\n        }\r\n        return result;\r\n    }\r\n\r\n    public withKeyValue(key: string, value: any): SO {\r\n        if (key === 'typ') {\r\n            this.property = value;\r\n        } else if (key === 'x') {\r\n            this.withPos(value, null);\r\n        } else if (key === 'y') {\r\n            this.withPos(null, value);\r\n        } else if (key === 'width') {\r\n            this.withSize(value, null);\r\n        } else if (key === 'height') {\r\n            this.withSize(null, value);\r\n        } else {\r\n            this[key] = value;\r\n        }\r\n        return this;\r\n    }\r\n}\r\n","import {Point} from '../BaseElements';\r\nimport {Node} from './Node';\r\n\r\nexport class StereoType extends Node {\r\n\r\n    protected stereoType: string;\r\n\r\n    constructor (type: string, x: number, y: number) {\r\n        super('');\r\n        this.withPos(x, y);\r\n        this.setStereoType(type);\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        let pos: Point = this.getPos();\r\n        let size: Point = this.getSize();\r\n\r\n               // = = = STEREOTYPE = = =\r\n        let stereoType = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y - this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': 10,\r\n            'font-weight': 'bold',\r\n            fill: 'black'\r\n        });\r\n        stereoType.textContent = this.stereoType;\r\n\r\n        this.$view = stereoType;\r\n        return stereoType;\r\n    }\r\n\r\n    public setStereoType(value: string): void {\r\n        this.stereoType = '<<' + value + '>>';\r\n    }\r\n\r\n    public getStereoType(): string {\r\n        return this.stereoType;\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { SO } from './SO';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport { Util } from '../../util';\r\n\r\nexport class Symbol extends Node {\r\n    public $heightMax: number = 0;\r\n    public $heightMin: number = 0;\r\n\r\n    constructor(typ: string) {\r\n        super(typ);\r\n    }\r\n\r\n    public draw(typ?: string): SVGElement {\r\n        return SymbolLibary.draw(this);\r\n    }\r\n}\r\n\r\n// \t\t\t\t###################################################### SymbolLibary ####################################################################################\r\n// Example Items\r\n// {tag: 'path', d: ''}\r\n// {tag: 'rect', width:46, height:34}\r\n// {tag: 'ellipse', width:23, height:4}\r\n// {tag: 'line', x1:650, y1:-286, x2:650, y2:-252}\r\n// {tag: 'circle', r:5, x:12, y:0}\r\n// {tag: 'image', height: 30, width: 50, content$src: hallo}\r\n// {tag: 'text', 'text-anchor': 'left', x: '10'}\r\nexport class SymbolLibary {\r\n\r\n    public static drawSVG(node: any): SVGSVGElement {\r\n        // const lib = new SymbolLibary();\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            const parent = SO.create(node);\r\n            parent['property'] = 'SVG';\r\n            symbol = fn(parent);\r\n            // symbol = fn.apply(lib, parent);\r\n\r\n            return SymbolLibary.createGroup(parent, symbol);\r\n        }\r\n        return symbol;\r\n    }\r\n\r\n    public static draw(node: any, parent?: Object): SVGElement {\r\n        // Node is Symbol or simple Object\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            if (!(node instanceof DiagramElement)) {\r\n                node = SO.create(node);\r\n                if (!node.property) {\r\n                    node.property = 'SVG';\r\n                }\r\n            }\r\n            symbol = fn.apply(this, [node]);\r\n            if (!parent) {\r\n                return SymbolLibary.createGroup(node, symbol);\r\n            }\r\n            return SymbolLibary.createGroup(node, symbol);\r\n        } else if (node.property) {\r\n            symbol = new Symbol(node.property);\r\n            symbol.init(node);\r\n            let pos = node.getPos();\r\n            let size = node.getSize();\r\n            symbol.withPos(pos.x, pos.y);\r\n            symbol.withSize(size.x, size.y);\r\n            symbol['value'] = node['value'];\r\n            parent = node['$parent'];\r\n            return SymbolLibary.draw(symbol, parent);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public static upFirstChar(txt: string): string {\r\n        return txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase();\r\n    }\r\n\r\n    public static isSymbolName(typ: string): boolean {\r\n        let fn = SymbolLibary['draw' + SymbolLibary.upFirstChar(typ)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static isSymbol(node: Symbol) {\r\n        let fn = SymbolLibary[SymbolLibary.getName(node)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static getName(node: any): string {\r\n        if (node['type']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['type']);\r\n        }\r\n        if (node.property) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node.property);\r\n        }\r\n        if (node['src']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['src']);\r\n        }\r\n        return 'drawNode';\r\n    }\r\n\r\n    /*FIXME   public static createImage(node: Symbol, $graphModel:Node) {\r\n           let n, img: HTMLElement;\r\n           // node.$graphModel = node;\r\n           if (SymbolLibary.isSymbol(node)) {\r\n               return SymbolLibary.draw(null, node);\r\n           }\r\n           n = {tag: 'img', $graphModel: node, src: node['src']};\r\n           let size = node.getSize();\r\n           if (size.isEmpty() === false) {\r\n               n['width'] = size.x;\r\n               n['height'] = size.y;\r\n           } else {\r\n               n['xmlns'] = 'http://www.w3.org/1999/xhtml';\r\n           }\r\n           img = Util.create(n);\r\n           if (size.isEmpty()) {\r\n               $graphModel.appendImage(img);\r\n               return null;\r\n           }\r\n           return img;\r\n       }*/\r\n\r\n    public static createGroup(node: DiagramElement, group: any) {\r\n        let func, y: number, z: number, box, item: Element, transform, i, offsetX = 0, offsetY = 0;\r\n        let svg: any;\r\n        if (node.property.toUpperCase() === 'HTML') {\r\n            let so = {\r\n                tag: 'svg',\r\n                style: { left: (group.x | 0) + node.getPos().x, top: (group.y | 0) + node.getPos().y, position: 'absolute' }\r\n            };\r\n            if (node['transform']) {\r\n                so['transform'] = node['transform'];\r\n            }\r\n            svg = Util.create(so);\r\n        } else {\r\n            svg = Util.create({ tag: 'g' });\r\n            transform = 'translate(' + group.getPos().x + ' ' + group.getPos().y + ')';\r\n            if (group.scale) {\r\n                transform += ' scale(' + group.scale + ')';\r\n            }\r\n            if (group.rotate) {\r\n                transform += ' rotate(' + group.rotate + ')';\r\n            }\r\n            svg.setAttribute('transform', transform);\r\n            if (group['id']) {\r\n                svg.id = group['id'];\r\n            }\r\n        }\r\n\r\n        if (node['tooltip']) {\r\n            const tooltipTitleAttr = {\r\n                tag: 'title'\r\n            };\r\n            let tooltipTitle = Util.createShape(tooltipTitleAttr);\r\n            tooltipTitle.textContent = node['tooltip'];\r\n            svg.appendChild(tooltipTitle);\r\n        }\r\n\r\n        if (node['background']) {\r\n            const attrCircle = {\r\n                tag: 'circle',\r\n                cx: 20,\r\n                cy: 20,\r\n                r: 17,\r\n                stroke: '#888',\r\n                'stroke-width': 0,\r\n                fill: '#DDD'\r\n            };\r\n            svg.appendChild(Util.create(attrCircle));\r\n        }\r\n\r\n        for (i = 0; i < group.items.length; i += 1) {\r\n            svg.appendChild(Util.create(group.items[i]));\r\n        }\r\n        let elements = node['elements'];\r\n        Util.setSize(svg, group.width + node.getSize().x, group.height + node.getSize().y);\r\n        node['$heightMin'] = node.getSize().y;\r\n        if (elements) {\r\n            for (i = 0; i < elements.length; i += 1) {\r\n                if (!elements[i] && elements[i].length < 1) {\r\n                    elements.splice(i, 1);\r\n                    i -= 1;\r\n                }\r\n            }\r\n            box = Util.create({ tag: 'g' });\r\n            // Calculate new Height\r\n            let c: number;\r\n            z = 0;\r\n            for (c = 0; c < elements.length; c += 1) {\r\n                if (typeof elements[c] === 'string') {\r\n                    z += 1;\r\n                } else {\r\n                    z += elements[c].length;\r\n                }\r\n            }\r\n            z = z * 25 + 6;\r\n            box.appendChild(Util.create({\r\n                tag: 'rect',\r\n                rx: 0,\r\n                x: offsetX,\r\n                y: (offsetY + 28),\r\n                width: 70,\r\n                height: z,\r\n                stroke: '#000',\r\n                fill: '#fff',\r\n                opacity: '0.7'\r\n            }));\r\n            node['$heightMax'] = z + node['$heightMin'];\r\n\r\n            svg['elements'] = elements;\r\n            if (node['type'] === 'DropDown') {\r\n                svg['activ'] = Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': 60,\r\n                    'x': (10 + offsetX),\r\n                    'y': 20,\r\n                    value: node['activText']\r\n                });\r\n                svg.appendChild(svg.activ);\r\n            }\r\n\r\n            y = offsetY + 46;\r\n            // 46 -28 = 18\r\n\r\n            func = function (event: Event) {\r\n                if (svg.activ) {\r\n                    svg.activ.textContent = (<any>event.currentTarget).value;\r\n                }\r\n            };\r\n            let txt: string;\r\n            let textClass = 'SVGTEXT';\r\n            for (z = 0; z < elements.length; z += 1) {\r\n                if (typeof elements[z] === 'string') {\r\n                    txt = elements[z];\r\n                } else {\r\n                    item = this.addText(y, offsetX, box, elements[z][0], 'SVGTEXT');\r\n                    y += 26;\r\n                    for (c = 1; c < elements[z].length; c += 1) {\r\n                        item = this.addText(y, offsetX, box, '* ' + elements[z][c], 'SVGTEXTITEM');\r\n\r\n                        item['value'] = elements[z];\r\n                        if (node['action']) {\r\n                            item['onclick'] = node['action'];\r\n                        } else {\r\n                            item['onclick'] = func;\r\n                        }\r\n                        y += 26;\r\n                    }\r\n                    txt = elements[z];\r\n                    let subBox = Util.create({\r\n                        tag: 'rect',\r\n                        rx: 0,\r\n                        x: offsetX,\r\n                        y: (offsetY + 28),\r\n                        width: 60,\r\n                        height: z,\r\n                        stroke: '#000',\r\n                        fill: '#fff',\r\n                        opacity: '0.7'\r\n                    });\r\n                    continue;\r\n                }\r\n                // let txt = elements[z];\r\n                item = this.addText(y, offsetX, box, txt, textClass);\r\n\r\n                item['value'] = elements[z];\r\n                if (node['action']) {\r\n                    item['onclick'] = node['action'];\r\n                } else {\r\n                    item['onclick'] = func;\r\n                }\r\n                y += 26;\r\n            }\r\n            svg.choicebox = box;\r\n        }\r\n        svg.tool = node;\r\n        svg.onclick = function () {\r\n            if (svg.status === 'close') {\r\n                svg.open();\r\n            } else {\r\n                svg.close();\r\n            }\r\n        };\r\n        svg.close = function () {\r\n            if (svg.status === 'open' && svg.choicebox) {\r\n                this.removeChild(svg.choicebox);\r\n            }\r\n            svg.status = 'close';\r\n            svg.tool.$size.height = svg.tool.heightMin;\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x, g.tool.height + g.tool.y);\r\n            Util.setSize(svg, svg.tool.$size.x, svg.tool.$size.y);\r\n        };\r\n        svg.open = function () {\r\n            if (this.tagName === 'svg') {\r\n                return;\r\n            }\r\n            if (svg.status === 'close' && svg.choicebox) {\r\n                this.appendChild(svg.choicebox);\r\n            }\r\n            svg.status = 'open';\r\n            svg.tool.$size.height = svg.tool.heightMax;\r\n            Util.setSize(svg, svg.tool.width, svg.tool.height);\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x + 10, g.tool.height + g.tool.y + 10);\r\n        };\r\n        svg.close();\r\n        return svg;\r\n    }\r\n\r\n    public static addChild(parent: SVGElement, json: JSON | Element): void {\r\n        let item: Element;\r\n        if ((<any>json).offsetLeft) {\r\n            item = <Element>json;\r\n        } else {\r\n            item = Util.create(json);\r\n        }\r\n        item.setAttribute('class', 'draggable');\r\n        parent.appendChild(item);\r\n    }\r\n\r\n    public static all(node: any): void {\r\n        SymbolLibary.drawSmiley(node);\r\n        SymbolLibary.drawDatabase(node);\r\n        SymbolLibary.drawLetter(node);\r\n        SymbolLibary.drawMobilephone(node);\r\n        SymbolLibary.drawWall(node);\r\n        SymbolLibary.drawActor(node);\r\n        SymbolLibary.drawLamp(node);\r\n        SymbolLibary.drawArrow(node);\r\n        SymbolLibary.drawButton(node);\r\n        SymbolLibary.drawDropdown(node);\r\n        SymbolLibary.drawClassicon(node);\r\n        SymbolLibary.drawClassWithEdgeicon(node);\r\n    }\r\n\r\n    public static drawHamburger(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'circle', r: 10, fill: '#ccc', cx: 12, cy: 12, 'stroke-width': 1, stroke: 'black'},\r\n                { tag: 'path', d: 'M 8,7 H 16 M 8,12 H 16 M 8,17 H 16', stroke: 'black', fill: 'none' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawSmiley(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'path', d: 'm49.01774,25.64542a24.5001,24.5 0 1 1 -49.0001,0a24.5001,24.5 0 1 1 49.0001,0z', stroke: 'black', fill: 'none' }, { tag: 'path', d: 'm8,31.5c16,20 32,0.3 32,0.3' },\r\n                { tag: 'path', d: 'm19.15,20.32a1.74,2.52 0 1 1 -3.49,0a1.74,2.52 0 1 1 3.49,0z' },\r\n                { tag: 'path', d: 'm33,20.32a1.74,2.52 0 1 1 -3.48,0a1.74,2.52 0 1 1 3.48,0z' },\r\n                { tag: 'path', d: 'm5.57,31.65c3.39,0.91 4.03,-2.20 4.03,-2.20' },\r\n                { tag: 'path', d: 'm43,32c-3,0.91 -4,-2.20 -4.04,-2.20' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDatabase(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 40,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,-6.26 25.03,-6.26 25.03,0l0,25.82c0,6.26 -25.03,6.26 -25.03,0l0,-25.82z',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLetter(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 17,\r\n            items: [\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1,1l22,0l0,14l-22,0l0,-14z' },\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1.06,1.14l10.94,6.81l10.91,-6.91' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMobilephone(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 4.2 0.5 15.61 0c 2 0 3.7 1.65 3.7 3.7l 0 41.6c 0 2-1.65 3.7-3.7 3.7l-15.6 0c-2 0-3.7-1.6-3.7-3.7l 0-41.6c 0-2 1.6-3.7 3.7-3.7z',\r\n                    fill: 'none',\r\n                    stroke: 'black'\r\n                },\r\n                { tag: 'path', d: 'm 12.5 2.73a 0.5 0.5 0 1 1-1 0 0.5 0.5 0 1 1 1 0z' },\r\n                { tag: 'path', d: 'm 14 46a 2 2 0 1 1-4 0 2 2 0 1 1 4 0z' },\r\n                { tag: 'path', d: 'm 8 5 7 0' },\r\n                { tag: 'path', d: 'm 1.63 7.54 20.73 0 0 34-20.73 0z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawWall(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'path', d: 'm26,45.44l-5,3.56l-21,-9l0,-36.41l5,-3.56l20.96,9l-0,36.4z' },\r\n                {\r\n                    tag: 'path',\r\n                    stroke: 'white',\r\n                    d: 'm2.21,11l18.34,7.91m-14.46,-12.57l0,6.3m8.2,21.74l0,6.35m-8.6,-10l0,6.351m4.1,-10.67l0,6.3m4.8,-10.2l0,6.3m-8.87,-10.23l0,6.35m4.78,-10.22l0,6.35m-8,14.5l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m0,-13l0,34m-18.23,-41.84l18.3,8m0,0.11l5,-3.57'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawActor(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'line', stroke: '#000', x1: '12', y1: '10', x2: '12', y2: '30' },\r\n                { tag: 'circle', stroke: '#000', cy: '5', cx: '12', r: '5' },\r\n                { tag: 'line', stroke: '#000', y2: '18', x2: '25', y1: '18', x1: '0' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '5', y1: '30', x1: '12' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '20', y1: '30', x1: '12' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLamp(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 22.47 10.58c-6.57 0-11.89 5.17-11.89 11.54 0 2.35 0.74 4.54 2 6.36 2 4 4.36 5.63 4.42 10.4l 11.15 0c 0.12-4.9 2.5-6.8 4.43-10.4 1.39-1.5 1.8-4.5 1.8-6.4 0-6.4-5.3-11.5-11.9-11.5z',\r\n                    fill: 'white',\r\n                    stroke: 'black'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 40 8 0c 0.58 0 1 0.5 1 1 0 0.6-0.5 1-1 1l-8 0c-0.6 0-1-0.47-1-1 0-0.58 0.47-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 42.7 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 45.3 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                { tag: 'path', d: 'm 19.5 48c 0.37 0.8 1 1.3 1.9 1.7 0.6 0.3 1.5 0.3 2 0 0.8-0.3 1.4-0.8 1.9-1.8z' },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 6 37.5 4.2-4c 0.3-0.3 0.8-0.3 1 0 0.3 0.3 0.3 0.8 0 1.1l-4.2 4c-0.3 0.3-0.8 0.3-1.1 0-0.3-0.3-0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 39 37.56-4.15-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 38 23 5.8 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.8 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 1.3 23 6 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.9 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 34.75 11.2 4-4.1c 0.3-0.3 0.3-0.8 0-1-0.3-0.3-0.8-0.3-1 0l-4 4.1c-0.3 0.3-0.3 0.8 0 1 0.3 0.3 0.8 0.3 1 0z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 11.23 10-4-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 21.64 1.3 0 5.8c 0 0.4 0.3 0.8 0.8 0.8 0.4 0 0.8-0.3 0.8-0.8l 0-5.8c 0-0.4-0.3-0.8-0.8-0.8-0.4 0-0.8 0.3-0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 26.1 24.3c-0.5 0-1 0.2-1.3 0.4-1.1 0.6-2 3-2.27 3.5-0.26-0.69-1.14-2.9-2.2-3.5-0.7-0.4-2-0.7-2.5 0-0.6 0.8 0.2 2.2 0.9 2.9 1 0.9 3.9 0.9 3.9 0.9 0 0 0 0 0 0 0.54 0 2.8 0 3.7-0.9 0.7-0.7 1.5-2 0.9-2.9-0.2-0.3-0.7-0.4-1.2-0.4z'\r\n                },\r\n                { tag: 'path', d: 'm 22.5 28.57 0 10.7' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawStop(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 30,\r\n            height: 30,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: '#FFF',\r\n                    'stroke-width': '2',\r\n                    stroke: '#B00',\r\n                    d: 'm 6,6 a 14,14 0 1 0 0.06,-0.06 z m 0,0 20,21'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMin(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    d: 'm 0,0 19,0 0,19 -19,0 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 13,-0.04'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawArrow(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 10,\r\n            height: 9,\r\n            rotate: node['rotate'],\r\n            items: [\r\n                { tag: 'path', fill: '#000', stroke: '#000', d: 'M 0,0 10,4 0,9 z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMax(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    'stroke-dashoffset': 2,\r\n                    'stroke-dasharray': '4.8,4.8',\r\n                    d: 'm 0,0 4.91187,0 5.44643,0 9.11886,0 0,19.47716 -19.47716,0 0,-15.88809 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 6,0.006 0.02,5 0.01,-11 -0.03,6.02 c 2,-0.01 4,-0.002 6,0.01'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawButton(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight, btnValue;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        btnValue = node['value'] || '';\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: 60,\r\n            height: 28,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 8,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    filter: 'url(#drop-shadow)',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                { tag: 'text', $font: true, x: 10, y: 18, fill: 'black', value: btnValue, 'class': 'hand' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDropdown(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 0,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth - 20,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 2,\r\n                    x: btnWidth - 20,\r\n                    y: 0,\r\n                    width: 20,\r\n                    height: 28,\r\n                    stroke: '#000',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    style: 'fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1',\r\n                    d: 'm ' + (btnWidth - 15) + ',13 10,0 L ' + (btnWidth - 10) + ',20 z'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassicon(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.19999l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm25.68807,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.2l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                { tag: 'line', x1: 11, y1: 7, x2: 25, y2: 7, stroke: '#000' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassWithEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M2,10 20,10 20,35 2,35 Z M2,17 20,17 M20,10 28,5 28,9 M 28.5,4.7 24,4',\r\n                    style: 'fill:none;stroke:#000000;transform:scale(0.8);'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClass(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: '100%',\r\n            height: '100%',\r\n            items: [\r\n                { tag: 'rect', width: 50, height: 40, x: 0, y: 0, 'stroke-width': 2, stroke: 'black', fill: 'none'},\r\n                { tag: 'rect', width: 50, height: 12, x: 0, y: 18, 'stroke-width': 1, stroke: 'black', fill: 'none'},\r\n                { tag: 'text', x: 27, y: 14, 'text-anchor': 'middle', 'font-size': 11, value: 'Class'},\r\n                { tag: 'text', x: 5, y: 24, 'font-size': 5, value: '+ field: type'},\r\n                { tag: 'text', x: 5, y: 36, 'font-size': 5, value: '+ method(type)'}\r\n            ]\r\n        });\r\n    }\r\n/*\r\n<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n    <g>\r\n    <text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text>\r\n        <text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>\r\n*/\r\n\r\n    public static drawEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M10,30 30,10 M19,10 30,10 30,21',\r\n                    style: 'fill:none;stroke:#555;stroke-width:2;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawCopynode(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M5 5 L15 5 L15 20 L5 20 Z M5 10 L15 10',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M8 2 L18 2 L18 17 L8 17 Z M8 7 L18 7'\r\n                        + 'M11 4.5 L15 4.5 '\r\n                        + 'M10 10 L16 10 '\r\n                        + 'M10 13 L16 13 ',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawBasket(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M12 12 L18 12 L18 11 L22 11 L22 12 L28 12 L28 14 L27 14 L27 29 L13 29 L13 14 L12 14 Z M13 14 L27 14 M20 17 L20 26 M17 16 L17 27 M23 16 L23 27',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawPencil(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M6 20 L12 23 L33 23 L33 17 L12 17 Z M30 17 L30 23 M12 17 L12 23 M15 19 L28 19 M15 21 L28 21',\r\n                    stroke: '#000',\r\n                    'stroke-width': 1,\r\n                    fill: 'white'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    private static addText(y: number, offsetX: number, box: Element, text: string, textClass: string): Element {\r\n        let item: Element;\r\n        box.appendChild(Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'text-anchor': 'left',\r\n            width: 70,\r\n            x: 10,\r\n            y: y,\r\n            class: textClass,\r\n            value: text,\r\n            eventValue: text\r\n        }));\r\n        if (textClass === 'SVGTEXT') {\r\n            textClass = 'SVGChoiceText';\r\n        } else {\r\n            textClass = 'SVGChoice';\r\n        }\r\n\r\n        item = Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            x: offsetX,\r\n            y: y - 18,\r\n            width: 70,\r\n            height: 24,\r\n            stroke: 'none',\r\n            class: textClass,\r\n        });\r\n        item['eventValue'] = text;\r\n        box.appendChild(item);\r\n        return item;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n}\r\n","import {Control} from '../../Control';\r\nimport BridgeElement from '../../BridgeElement';\r\nimport Data from '../../Data';\r\nimport {Util} from '../../util';\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Table extends Control {\r\n    protected items: BridgeElement[] = [];\r\n    private columns: Column[] = [];\r\n    private cells: Object = {};\r\n    private $bodysection: HTMLTableSectionElement;\r\n    private $headersection: HTMLTableSectionElement;\r\n    private showedItems: Array<BridgeElement> = [];\r\n    // BridgeElements:\r\n    private itemsIds: Object = {};\r\n    private countElement: HTMLElement;\r\n    private countColumn: HTMLElement;\r\n    private countColumnPos: number;\r\n    private resultColumn: string;\r\n    private lastSearchText: string;\r\n    private searchColumns: Array<string> = [];\r\n    private searchText: Array<string> = [];\r\n    private sortColumn: Column;\r\n    private direction: number;\r\n    private moveElement: Column = null;\r\n    private isDrag: boolean = false;\r\n    private moveTimeStamp: number;\r\n    private moveX: number;\r\n    private movePos: number;\r\n    private dragColumn: Column;\r\n    private dragPos: number;\r\n    private tableOption: HTMLTableHeaderCellElement;\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    private static indexOfChild(item: BridgeElement) {\r\n        let i: number = 0;\r\n        let child: Node = item.gui;\r\n        while ((child = child.previousSibling) !== null) {\r\n            i++;\r\n        }\r\n        return i;\r\n    }\r\n\r\n    public load(data: any): void {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n            if (data.property) {\r\n                this.property = data.property;\r\n            }\r\n\r\n            if (data.searchColumns) {\r\n                let search: Array<string> = [];\r\n                if (typeof(data.searchColumns) === 'string') {\r\n                    search = data.searchColumns.split(' ');\r\n                } else {\r\n                    search = data.searchColumns;\r\n                }\r\n                for (let z: number = 0; z < search.length; z++) {\r\n                    let item = search[z].trim();\r\n                    if (item.length > 0) {\r\n                        if (this.searchColumns.indexOf(item) < 0) {\r\n                            this.searchColumns.push(item);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        if (this.$view) {\r\n            // Must be an Update\r\n            if (data['columns']) {\r\n                // It is a json must add all things and generate HTML\r\n                for (let i in data['columns']) {\r\n                    if (data['columns'].hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    let col = this.parseData(data['columns'][i]);\r\n                    this.addHeaderInfo(col);\r\n                    this.columns.push(col);\r\n                    this.tableOption.parentElement.insertBefore(col.$element, this.tableOption);\r\n                }\r\n                for (let i in this.showedItems) {\r\n                    let item: BridgeElement = this.showedItems[i];\r\n                    let cell;\r\n                    // Now Add some Children\r\n                    while (item.gui.children.length < this.columns.length) {\r\n                        cell = document.createElement('td');\r\n                        item.gui.appendChild(cell);\r\n                    }\r\n                    // Now Remove Some Children\r\n                    while (item.gui.children.length > this.columns.length) {\r\n                        item.gui.removeChild(item.gui.children[item.gui.children.length - 1]);\r\n                    }\r\n                    for (let c: number = 0; c < this.columns.length; c++) {\r\n                        let name = this.columns[c].attribute;\r\n                        // let count = this.columns.length;\r\n                        cell = item.gui.children[c];\r\n                        cell.innerHTML = item.model.getValue(name);\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n\r\n        this.$view = document.getElementById(id);\r\n        let headerrow: HTMLTableRowElement;\r\n        if (this.$view) {\r\n            if (!this.property) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('table');\r\n            this.$owner.appendChild(this);\r\n        }\r\n        if (!this.$bodysection) {\r\n            // add tbody element if missing\r\n            this.$bodysection = document.createElement('tbody');\r\n            this.$view.appendChild(this.$bodysection);\r\n        }\r\n        if (data['classname']) {\r\n            this.$view.className = data['classname'];\r\n        } else {\r\n            this.$view.className = 'mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp';\r\n        }\r\n\r\n        this.id = id;\r\n        this.$view.id = id;\r\n        this.$view.setAttribute('type', this.constructor['name'].toLowerCase());\r\n        let counter = 0;\r\n        for (let c = 0; c < this.$view.children.length; c++) {\r\n            let row: HTMLTableRowElement = <HTMLTableRowElement>this.$view.children[c];\r\n            if (row instanceof HTMLTableSectionElement) {\r\n                if (row.tagName === 'THEAD') {\r\n                    headerrow = row;\r\n                    // Its a thead\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingHeader(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                } else {\r\n                    // Its a tbody\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingData(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                }\r\n            } else {\r\n                // fallback, if there are no thead and tbody...\r\n                if (counter === 0) {\r\n                    headerrow = row;\r\n                    this.parsingHeader(row);\r\n                } else {\r\n                    this.parsingData(row);\r\n                }\r\n            }\r\n            counter++;\r\n        }\r\n        if (!headerrow || !this.$headersection) {\r\n            if (!this.$headersection) {\r\n                // find eventually existing thead\r\n                let header = this.$view.getElementsByTagName('thead');\r\n                if (header.length === 0) {\r\n                    this.$headersection = document.createElement('thead');\r\n                    this.$view.appendChild(this.$headersection);\r\n                } else {\r\n                    // take first thead element\r\n                    this.$headersection = <HTMLTableSectionElement>header.item(0);\r\n                }\r\n            }\r\n            if (!headerrow) {\r\n                headerrow = document.createElement('tr');\r\n                this.$headersection.appendChild(headerrow);\r\n            }\r\n        }\r\n\r\n        if (data['columns']) {\r\n            // It is a json must add all things and generate HTML\r\n            for (let i in data['columns']) {\r\n                if (data['columns'].hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                let col = this.parseData(data['columns'][i]);\r\n                this.addHeaderInfo(col);\r\n                this.columns.push(col);\r\n                headerrow.appendChild(col.$element);\r\n            }\r\n            this.tableOption = document.createElement('th');\r\n            this.tableOption.classList.add('tableOption');\r\n            headerrow.appendChild(this.tableOption);\r\n            let context: HTMLElement = this.addOptionItem(null, this.tableOption, true);\r\n            let contentChild: HTMLElement = this.addOptionItem('show', context, true);\r\n            // let simpleLink: HTMLElement = this.addOptionItem('show', contentChild, false);\r\n            this.addOptionItem('show', contentChild, false);\r\n        }\r\n        this.registerEvents(['mousemove', 'mousedown', 'mouseup', 'resize', 'dragstart', 'dragover', 'drop', 'dragend']);\r\n\r\n        // Check for SearchBar\r\n        // if(data[\"searchproperty\"]){\r\n        // Create Full Row\r\n        let searchBar = document.createElement('tr');\r\n        let cell = document.createElement('td');\r\n        cell.setAttribute('colspan', '' + (this.columns.length));\r\n        searchBar.appendChild(cell);\r\n\r\n        let search = document.createElement('input');\r\n        search.className = 'search';\r\n        let that = this;\r\n        search.addEventListener('keyup', function (evt) {\r\n            that.search(evt.target['value']);\r\n        });\r\n\r\n        cell.appendChild(search);\r\n        if (this.resultColumn) {\r\n            if (this.resultColumn.indexOf('#') !== 0) {\r\n                this.countElement = document.createElement('div');\r\n                searchBar.appendChild(this.countElement);\r\n            } else {\r\n                for (let z: number = 0; z < this.$headersection.children.length; z++) {\r\n                    if (this.$headersection.children[z].innerHTML === this.resultColumn) {\r\n                        this.countColumn = <HTMLElement> this.$headersection.children[z];\r\n                        this.countColumnPos = z;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        let first = this.$headersection.children.item(0);\r\n        this.$headersection.insertBefore(searchBar, first);\r\n\r\n        this.updateElement(this.property, null);\r\n\r\n        // now update those elements, that were not loaded currently\r\n    }\r\n\r\n    public tableEvent(type: string, e: Event) {\r\n        let button: number = 0;\r\n        let eventX: number = 0;\r\n        if (e instanceof MouseEvent) {\r\n            button = e.buttons;\r\n            eventX = e.pageX;\r\n        }\r\n        if (type === 'mouseup') {\r\n            this.moveElement = null;\r\n        } else if (type === 'mousedown' || type === 'resize') {\r\n            // End to Resize\r\n            this.moveElement = null;\r\n            if (button === 1) {\r\n                let c: number;\r\n                for (c = 0; c < this.columns.length; c++) {\r\n                    if (this.columns[c].$resize === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = false;\r\n                        break;\r\n                    } else if (this.columns[c].$element === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = true;\r\n                    }\r\n                }\r\n                this.moveTimeStamp = e.timeStamp;\r\n                this.moveX = eventX;\r\n            } else {\r\n                this.moveTimeStamp = 0;\r\n            }\r\n        } else if (type === 'mousemove') {\r\n            if (button === 1 && this.moveElement) {\r\n                if (this.moveTimeStamp && e.timeStamp - this.moveTimeStamp < 2000) {\r\n                    if (this.isDrag) {\r\n                        // FIXME\r\n                    } else {\r\n                        let x = eventX - this.moveX;\r\n                        let width = this.moveElement.$element.offsetWidth;\r\n                        this.moveElement.$element.width = '' + (width + x);\r\n                        e.stopPropagation();\r\n                    }\r\n                }\r\n                this.moveX = eventX;\r\n                this.moveTimeStamp = e.timeStamp;\r\n            }\r\n        } else if (this.isDrag) {\r\n            this.columnDragEvent(type, <DragEvent> e);\r\n        }\r\n    }\r\n\r\n    public parsingHeader(row: HTMLTableRowElement) {\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let column: HTMLTableHeaderCellElement = <HTMLTableHeaderCellElement>row.children[i];\r\n            let id = column.innerHTML.trim();\r\n            let col: Column = null;\r\n            for (let c in this.columns) {\r\n                if (this.columns.hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                if (this.columns[c].label === id) {\r\n                    col = this.columns[c];\r\n                    col.$element = column;\r\n                    break;\r\n                }\r\n            }\r\n            if (col === null) {\r\n                col = new Column();\r\n                col.label = id;\r\n                col.attribute = column.getAttribute('attribute');\r\n                col.$element = column;\r\n                this.columns.push(col);\r\n            }\r\n            this.addHeaderInfo(col);\r\n        }\r\n    }\r\n\r\n    public parsingData(row: HTMLTableRowElement) {\r\n        let id = row.getAttribute('id');\r\n        let item: Data = this.$owner.getItem(id);\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let cell: HTMLTableCellElement = <HTMLTableCellElement>row.children[i];\r\n            let colAttribute = this.columns[i].attribute;\r\n            if (colAttribute.indexOf('\\.') < 0) {\r\n                item[colAttribute] = cell.innerHTML.trim();\r\n            }\r\n        }\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: Object, newValue: Object) {\r\n        if (entity) {\r\n            // Check for Show\r\n            if (this.property && !entity.hasProperty(property)) {\r\n                return;\r\n            }\r\n        }\r\n        if (entity.id === undefined) {\r\n            return;\r\n        }\r\n        let item: BridgeElement = <BridgeElement>this.itemsIds[entity.id];\r\n        let row: HTMLTableRowElement;\r\n        if (!item) {\r\n            item = new BridgeElement(entity);\r\n            this.items.push(item);\r\n            this.itemsIds[entity.id] = item;\r\n        }\r\n        row = this.cells[entity.id];\r\n        if (row) {\r\n            item.gui = row;\r\n        }\r\n        if (this.searching(item) === false) {\r\n            return;\r\n        }\r\n        let cell;\r\n        let showItem = false;\r\n\r\n        if (!row) {\r\n            showItem = true;\r\n            row = document.createElement('tr');\r\n            let count = this.columns.length;\r\n            for (let i = 0; i < count; i++) {\r\n                cell = document.createElement('td');\r\n                row.appendChild(cell);\r\n            }\r\n            this.cells[entity.id] = row;\r\n            item.gui = row;\r\n        }\r\n        for (let c: number = 0; c < this.columns.length; c++) {\r\n            let name = this.columns[c].attribute;\r\n            if (name === property) {\r\n                cell = row.children[c];\r\n                cell.innerHTML = <string>newValue;\r\n            }\r\n        }\r\n        if (showItem) {\r\n            this.showItem(item, true);\r\n        }\r\n        // super.propertyChange(entity, property, newValue, oldValue);\r\n    }\r\n\r\n    public sort(column: Column) {\r\n        if (this.sortColumn === column) {\r\n            if (this.direction === 1) {\r\n                this.direction = -1;\r\n                column.$element.classList.remove('asc');\r\n                column.$element.classList.add('desc');\r\n            } else {\r\n                this.direction = 1;\r\n                column.$element.classList.remove('desc');\r\n                column.$element.classList.add('asc');\r\n            }\r\n        } else {\r\n            if (this.sortColumn !== null) {\r\n                this.sortColumn.$element.classList.remove('desc');\r\n                this.sortColumn.$element.classList.remove('asc');\r\n            }\r\n            this.sortColumn = column;\r\n            this.sortColumn.$element.classList.add('asc');\r\n            this.direction = 1;\r\n        }\r\n        let that = this;\r\n        let sort = function (a: BridgeElement, b: BridgeElement) {\r\n            return that.sorting(a, b);\r\n        };\r\n        this.showedItems.sort(sort);\r\n        let len: number = this.showedItems.length;\r\n        let body = this.$bodysection;\r\n        let i = 0;\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            if (i !== Table.indexOfChild(item)) {\r\n                break;\r\n            }\r\n            i = i + 1;\r\n        }\r\n        while (body.children.length > i) {\r\n            body.removeChild(body.children.item(body.children.length - 1));\r\n        }\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            body.appendChild(item.gui);\r\n            i = i + 1;\r\n        }\r\n\r\n        //      body.removeChild(item.gui);\r\n        //      body.remove\r\n    }\r\n\r\n    public sorting(a: BridgeElement, b: BridgeElement): number {\r\n        let path: string[] = this.sortColumn.attribute.split('.');\r\n        let itemA = a.model.prop;\r\n        let itemB = b.model.prop;\r\n        let check = this.sortColumn.attribute;\r\n        for (let p = 0; p < path.length; p++) {\r\n            check = path[p];\r\n            if (itemA[check]) {\r\n                itemA = itemA[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n            if (itemB[check]) {\r\n                itemB = itemB[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n        if (itemA !== itemB) {\r\n            if (this.direction === 1) {\r\n                return (itemA < itemB) ? -1 : 1;\r\n            }\r\n            return (itemA < itemB) ? 1 : -1;\r\n\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    // Searching\r\n    public search(origSearchText: string): void {\r\n        if (!origSearchText) {\r\n            origSearchText = '';\r\n        }\r\n        let searchText: string = origSearchText.trim().toLowerCase();\r\n        if (searchText === this.lastSearchText && searchText !== '') {\r\n            return; // <==== nothing to be done\r\n        }\r\n        let oldSearch: string = this.lastSearchText;\r\n        this.lastSearchText = searchText;\r\n\r\n        this.parseSearchArray();\r\n        if (searchText !== '' && oldSearch !== null && searchText.indexOf(oldSearch) >= 0 && searchText.indexOf('|') < 0) {\r\n            this.searchArray(this.showedItems);\r\n        } else {\r\n            this.searchSet(this.items);\r\n        }\r\n        this.refreshCounter();\r\n    }\r\n\r\n    public refreshCounter() {\r\n        if (this.countColumn) {\r\n            this.countColumn.innerHTML = this.columns[this.countColumnPos].label + ' (' + this.showedItems.length + ')';\r\n        }\r\n        // var countElement = document.getElementById('talkCount');\r\n        //  if (countElement) {\r\n        //     var txt = (this.showedItems.size() > 0 && searchText.length > 0 ) ? this.options.TEXT_SEARCHLIST : this.options.TEXT_SEARCHFULLLIST;\r\n        //     countElement.innerHTML = txt.replace(\"%LEN%\", this.root['children'].length).replace(\"%COUNT%\", this.showedItems.size()).replace(\"%SEARCH%\", origSearchText);\r\n        // }\r\n        // if (this.countColumn) {\r\n        //     this.countColu1mn.innerHTML = this.countColumn[\"label\"] + \" (\" + this.showedItems.size() + \")\";\r\n        // }\r\n    }\r\n\r\n    public parseSearchArray() {\r\n        let pos: number = 0;\r\n        let split: Array<string> = [];\r\n        let quote: boolean = false;\r\n        for (let i: number = 0; i < this.lastSearchText.length; i++) {\r\n            if ((this.lastSearchText.charAt(i) === ' ') && !quote) {\r\n                let txt = this.lastSearchText.substring(pos, i).trim();\r\n                if (txt.length > 0) {\r\n                    split.push(txt);\r\n                }\r\n                pos = i + 1;\r\n            } else if (this.lastSearchText.charAt(i) === '\\\"') {\r\n                if (quote) {\r\n                    let txt = this.lastSearchText.substring(pos, i).trim();\r\n                    if (txt.length > 0) {\r\n                        split.push(txt);\r\n                    }\r\n                    pos = i + 1;\r\n                } else {\r\n                    pos = i + 1;\r\n                }\r\n                quote = !quote;\r\n            }\r\n        }\r\n        if (pos < this.lastSearchText.length) {\r\n            split.push(this.lastSearchText.substring(pos, this.lastSearchText.length).trim());\r\n        }\r\n        this.searchText = split;\r\n        return split;\r\n    }\r\n\r\n    public searchArray(root: Array<BridgeElement>) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let i: number = 0; i < root.length; i++) {\r\n            let item: BridgeElement = root[i];\r\n            this.showItem(item, this.searching(item));\r\n        }\r\n    }\r\n\r\n    public searchSet(root: BridgeElement[]) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let item of root) {\r\n            let child: BridgeElement = <BridgeElement>item;\r\n            this.showItem(child, this.searching(child));\r\n        }\r\n    }\r\n\r\n    public showItem(item: BridgeElement, visible: boolean) {\r\n        if (visible) {\r\n            this.showedItems.push(item);\r\n            this.$bodysection.appendChild(item.gui);\r\n        } else if (item.gui && item.gui.parentElement) {\r\n            this.$bodysection.removeChild(item.gui);\r\n        }\r\n    }\r\n\r\n    public searching(item: BridgeElement): boolean {\r\n        let fullText: string = '';\r\n        for (let i: number = 0; i < this.searchColumns.length; i++) {\r\n            fullText = fullText + ' ' + item.model.getValue(this.searchColumns[i]);\r\n        }\r\n        fullText = fullText.trim().toLowerCase();\r\n        for (let z: number = 0; z < this.searchText.length; z++) {\r\n            if ('' !== this.searchText[z]) {\r\n                let orSplit: Array<string>;\r\n                if (this.searchText[z].indexOf('|') > 0) {\r\n                    orSplit = this.searchText[z].split('|');\r\n                } else {\r\n                    orSplit = [this.searchText[z]];\r\n                }\r\n                let o: number = 0;\r\n                for (; o < orSplit.length; o++) {\r\n                    let pos: number = orSplit[o].indexOf(':');\r\n                    if (orSplit[o].indexOf('#') === 0 && pos > 1) {\r\n                        // if (searchProperties.contains(propString)) {\r\n                        let value: string = orSplit[o].substring(pos + 1);\r\n                        let column: string = orSplit[o].substring(1, pos - 1);\r\n                        let dataValue: Object = item.model.getValue(column);\r\n                        if (dataValue) {\r\n                            if (dataValue.toString().toLowerCase().indexOf(value) >= 0) {\r\n                                // Search for simple Property\r\n                                break;\r\n                            }\r\n                        }\r\n                    } else if (orSplit[o].length > 1 && orSplit[o].indexOf('-') === 0) {\r\n                        if (fullText.indexOf(orSplit[o].substring(1)) < 0) {\r\n                            break;\r\n                        }\r\n                    } else if (fullText.indexOf(orSplit[o]) >= 0) {\r\n                        // his search word is found in full text\r\n                        break;\r\n                    }\r\n                }\r\n                if (o === orSplit.length) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public getColumn(): Column[] {\r\n        return this.columns;\r\n    }\r\n\r\n    public updateElement(property: string, value: string): void {\r\n        // first clear all elements inside the table:\r\n        for (let item of this.items) {\r\n            if (item instanceof BridgeElement) {\r\n                (<BridgeElement>item).model.removeListener(this);\r\n            }\r\n        }\r\n\r\n        this.items = [];\r\n        this.itemsIds = {};\r\n\r\n        // load all entitys that match the property\r\n        if (this.property !== undefined) {\r\n            let items = this.$owner.getItems();\r\n            for (let j in items) {\r\n                if (items.hasOwnProperty(j)) {\r\n                    let item = items[j];\r\n                    if (item instanceof Data) {\r\n                        if (property === j) {\r\n                            // if (property == item.property) {\r\n                            let i = new BridgeElement(<Data>item);\r\n                            this.items.push(i);\r\n                            this.itemsIds[item.id] = i;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            this.redrawAllElements();\r\n        }\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        if (this.$owner !== null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    protected redrawAllElements() {\r\n        let children: HTMLCollection = this.$bodysection.children;\r\n        // remove old children\r\n        for (let i = 0; i < children.length; i++) {\r\n            let child = children.item(i);\r\n            // remove child\r\n            this.$bodysection.removeChild(child);\r\n        }\r\n\r\n        // load new children\r\n        for (let obj of this.items) {\r\n            // register listeners\r\n            obj.model.addListener(this);\r\n            // create tr\r\n            let row = this.createRow(obj);\r\n            this.$bodysection.appendChild(row);\r\n            this.cells[obj.id] = row;\r\n        }\r\n    }\r\n\r\n    private parseData(column: any): Column {\r\n        let col = new Column();\r\n        col.label = column.label || column.id;\r\n        col.attribute = column.attribute || column.label || column.id;\r\n        col.$element = document.createElement('th');\r\n        col.$element.innerHTML = col.label;\r\n        col.$element.draggable = true;\r\n\r\n        // resize Header\r\n        col.$resize = document.createElement('div');\r\n        col.$resize.classList.add('resize');\r\n        col.$element.appendChild(col.$resize);\r\n\r\n        return col;\r\n    }\r\n\r\n    private createRow(data: BridgeElement): HTMLTableRowElement {\r\n        let tr: HTMLTableRowElement = document.createElement('tr');\r\n\r\n        for (let id of this.columns) {\r\n            let td: HTMLTableDataCellElement = document.createElement('td');\r\n            tr.appendChild(td);\r\n            td.innerHTML = data.model.getValue(id.attribute);\r\n        }\r\n        return tr;\r\n    }\r\n\r\n    private addHeaderInfo(col: Column) {\r\n        let element: HTMLTableCellElement = col.$element;\r\n        let that = this;\r\n        element.classList.add('sort');\r\n        element.addEventListener('click',\r\n            function () {\r\n                that.sort(col);\r\n            },\r\n            false);\r\n    }\r\n\r\n    private columnDragEvent(type: string, e: DragEvent) {\r\n        if (type === 'dragstart') {\r\n            // Target (this) element is the source node.\r\n            this.moveElement.$element.style.opacity = '0.4';\r\n            e.dataTransfer.effectAllowed = 'move';\r\n            e.dataTransfer.setData('text/json', JSON.stringify(Util.toJson(this.moveElement)));\r\n        } else if (type === 'dragenter') {\r\n            // TO Nothing\r\n        } else if (type === 'dragleave') {\r\n            this.moveElement.$element.classList.remove('over');\r\n        } else if (type === 'dragover') {\r\n            if (e.preventDefault) {\r\n                e.preventDefault(); // Necessary. Allows us to drop.\r\n            }\r\n            for (let c = 0; c < this.columns.length; c++) {\r\n                if (this.columns[c].$element === e.target) {\r\n                    this.dragColumn = this.columns[c];\r\n                    this.dragPos = c;\r\n                    this.columns[c].$element.classList.add('over');\r\n                } else {\r\n                    this.columns[c].$element.classList.remove('over');\r\n                }\r\n            }\r\n            if (e.target === this.tableOption) {\r\n                this.tableOption.classList.add('over');\r\n                this.dragPos = this.columns.length;\r\n            } else {\r\n                this.tableOption.classList.remove('over');\r\n            }\r\n            e.dataTransfer.dropEffect = 'move';  // See the section on the DataTransfer object.\r\n        } else if (type === 'drop') {\r\n            // this / e.target is current target element.\r\n            if (e.stopPropagation) {\r\n                e.stopPropagation(); // stops the browser from redirecting.\r\n            }\r\n            if (this.movePos === this.dragPos) {\r\n                return;\r\n            }\r\n            // movePos -> dragPos\r\n            // See the section on the DataTransfer object.\r\n            // DataModel\r\n            this.columns.splice(this.movePos, 1);\r\n            if (this.movePos >= this.dragPos) {\r\n                this.columns.splice(this.dragPos, 0, this.moveElement);\r\n            } else {\r\n                this.columns.splice(this.dragPos - 1, 0, this.moveElement);\r\n            }\r\n\r\n            // Header Line\r\n            let line: HTMLElement = this.moveElement.$element.parentElement;\r\n            line.removeChild(this.moveElement.$element);\r\n            if (this.dragPos < this.columns.length) {\r\n                line.insertBefore(this.moveElement.$element, this.dragColumn.$element);\r\n            } else {\r\n                line.insertBefore(this.moveElement.$element, this.tableOption);\r\n            }\r\n\r\n            let oldElement: Element;\r\n            let newElement: Element;\r\n\r\n            // Now all Childs\r\n            for (let i = 0; i < this.$bodysection.children.length; i++) {\r\n                // Each line\r\n                line = <HTMLElement>this.$bodysection.children.item(i);\r\n                oldElement = line.children.item(this.movePos);\r\n                newElement = line.children.item(this.dragPos);\r\n                line.removeChild(oldElement);\r\n                line.insertBefore(oldElement, newElement);\r\n            }\r\n        } else if (type === 'dragend') {\r\n            // this/e.target is the source node.\r\n            this.moveElement.$element.style.opacity = '1';\r\n            for (let i = 0; i < this.columns.length; i++) {\r\n                this.columns[i].$element.classList.remove('over');\r\n            }\r\n            this.tableOption.classList.remove('over');\r\n        }\r\n    }\r\n\r\n    private addOptionItem(label: string, parent: HTMLElement, sub: boolean): HTMLElement {\r\n        let labelControl;\r\n        if (label) {\r\n            labelControl = document.createElement('a');\r\n            labelControl.appendChild(document.createTextNode(label));\r\n            labelControl.href = 'javascript:void(0);';\r\n            parent.appendChild(labelControl);\r\n        }\r\n        if (sub) {\r\n            let context = document.createElement('div');\r\n            context.classList.add('dropdown-content');\r\n            context.style.setProperty('position', 'absolute');\r\n            parent.appendChild(context);\r\n\r\n            /* When the user clicks on the button,\r\n             toggle between hiding and showing the dropdown content */\r\n            parent.addEventListener(\r\n                'click',\r\n                function () {\r\n                    context.classList.toggle('show');\r\n                },\r\n                false);\r\n            return context;\r\n        }\r\n        return labelControl;\r\n    }\r\n\r\n    private registerEvents(events: string[]) {\r\n        let that = this;\r\n        for (let i = 0; i < events.length; i++) {\r\n            this.$view.addEventListener(events[i], function (evt) {\r\n                return that.tableEvent(events[i], evt);\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\nclass Column {\r\n    label: string;\r\n    attribute: string;\r\n    $element: HTMLTableHeaderCellElement;\r\n    $resize: HTMLDivElement;\r\n    visible: boolean;\r\n}\r\n","import { AutoComplete } from './AutoComplete';\r\nimport { BR } from './BR';\r\nimport { Div } from './Div';\r\nimport { Label } from './Label';\r\n\r\nexport * from './Node';\r\nexport * from './Class';\r\nexport * from './SO';\r\nexport * from './Symbol';\r\n\r\nexport * from './BR';\r\nexport * from './Button';\r\nexport * from './Div';\r\nexport * from './Form';\r\nexport * from './Input';\r\nexport * from './Label';\r\nexport * from './Table';\r\nexport * from './HTML';\r\nexport * from './Dice';\r\nexport * from './AutoComplete';\r\nexport * from './Attribute';\r\nexport * from './Method';\r\nexport * from './ClazzProperty';\r\n\r\nnew AutoComplete();\r\nnew BR();\r\nnew Div();\r\nnew Label();\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class AddNode implements EventHandler {\r\n\r\n    public MIN_SIZE_TO_ADD_NODE: number = 30;\r\n    public MIN_SIZE_TO_ADD_TEXT: number = 10;\r\n    private graph: Graph;\r\n    private svgRect: SVGSVGElement;\r\n    private svgGroupAddNode: SVGSVGElement;\r\n    private svgTextAddNode: SVGSVGElement;\r\n    private svgTextRectAddNode: SVGSVGElement;\r\n    private isRectDrawing: boolean;\r\n    private isDrawToLeft: boolean;\r\n    private isDrawToTop: boolean;\r\n    private isBigEnoughForAddNode: boolean;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(AddNode.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(AddNode.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!this.canHandle()) {\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element.id !== 'RootElement') {\r\n            return false;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element.id === 'RootElement') {\r\n                    this.start(event, element);\r\n\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mousemove':\r\n                this.drawRect(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.removeRect();\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.addNode();\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawRect(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isRectDrawing) {\r\n            return;\r\n        }\r\n\r\n        evt.stopPropagation();\r\n\r\n        let width = Util.getEventX(evt) - this.x;\r\n        let height = Util.getEventY(evt) - this.y;\r\n\r\n        // rectangle is in a negative area, drawn to upper case. not possibble with svg\r\n        if (width < 0) {\r\n            this.isDrawToLeft = true;\r\n            width *= -1;\r\n        } else {\r\n            this.isDrawToLeft = false;\r\n        }\r\n\r\n        if (height < 0) {\r\n            this.isDrawToTop = true;\r\n            height *= -1;\r\n        } else {\r\n            this.isDrawToTop = false;\r\n        }\r\n\r\n        if (width > this.MIN_SIZE_TO_ADD_NODE && height > this.MIN_SIZE_TO_ADD_NODE) {\r\n            this.isBigEnoughForAddNode = true;\r\n        } else {\r\n            this.isBigEnoughForAddNode = false;\r\n        }\r\n\r\n        this.graph.root.style.cursor = 'pointer';\r\n\r\n        // if line wasnt draw\r\n        if (!this.svgRect) {\r\n\r\n            let rectAddNode = Util.createShape({\r\n                tag: 'rect',\r\n                id: 'addNodeRect',\r\n                x: this.x,\r\n                y: this.y,\r\n                width: 1,\r\n                height: 1,\r\n                class: 'SVGAddNode'\r\n            });\r\n\r\n            let group = Util.createShape({ tag: 'g', id: 'groupAddNode' });\r\n            group.appendChild(rectAddNode);\r\n\r\n            this.graph.root.appendChild(group);\r\n            this.svgRect = rectAddNode;\r\n            this.svgGroupAddNode = group;\r\n        }\r\n        else {\r\n\r\n            let svgRectBBox = this.svgRect.getBBox();\r\n\r\n            // if rect is big enough, show text as helper\r\n            if ((svgRectBBox.width > this.MIN_SIZE_TO_ADD_TEXT\r\n                || svgRectBBox.height > this.MIN_SIZE_TO_ADD_TEXT) && !this.svgTextAddNode) {\r\n\r\n                let textAddNode = Util.createShape({\r\n                    tag: 'text',\r\n                    x: this.x,\r\n                    y: this.y - 5,\r\n                    'font-family': 'Verdana',\r\n                    'font-size': 12,\r\n                    fill: 'black'\r\n                });\r\n                textAddNode.textContent = 'Hold on and move to create a new class';\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n\r\n\r\n                // get correct size of text node\r\n                let sizeClientRect: ClientRect = textAddNode.getBoundingClientRect();\r\n\r\n                let rectBackgroundForText = Util.createShape({\r\n                    tag: 'rect',\r\n                    x: this.x,\r\n                    y: this.y - sizeClientRect.height,\r\n                    width: sizeClientRect.width,\r\n                    height: sizeClientRect.height,\r\n                    fill: '#DDD',\r\n                    'stroke-width': 0\r\n                });\r\n\r\n                this.svgTextRectAddNode = rectBackgroundForText;\r\n                this.svgTextAddNode = textAddNode;\r\n                this.svgGroupAddNode.appendChild(rectBackgroundForText);\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n            }\r\n\r\n            if (this.isDrawToLeft) {\r\n                this.svgRect.setAttributeNS(null, 'x', '' + Util.getEventX(evt));\r\n            }\r\n\r\n            if (this.isDrawToTop) {\r\n                this.svgRect.setAttributeNS(null, 'y', '' + Util.getEventY(evt));\r\n            }\r\n\r\n            // set width and height\r\n            this.svgRect.setAttributeNS(null, 'width', width.toString());\r\n            this.svgRect.setAttributeNS(null, 'height', height.toString());\r\n\r\n            // set color\r\n            if (this.isBigEnoughForAddNode) {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode-ready');\r\n\r\n                // draw text\r\n            }\r\n            else {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeRect(): void {\r\n        this.isRectDrawing = false;\r\n        this.isBigEnoughForAddNode = false;\r\n\r\n        this.graph.root.style.cursor = 'default';\r\n\r\n        if (this.svgGroupAddNode) {\r\n            this.graph.root.removeChild(this.svgGroupAddNode);\r\n            this.svgGroupAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgRect) {\r\n            this.svgRect = undefined;\r\n        }\r\n\r\n        if (this.svgTextAddNode) {\r\n            this.svgTextAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgTextRectAddNode) {\r\n            this.svgTextRectAddNode = undefined;\r\n        }\r\n    }\r\n\r\n    private addNode(): void {\r\n\r\n        if (!this.isBigEnoughForAddNode) {\r\n            this.removeRect();\r\n            return;\r\n        }\r\n\r\n        this.removeRect();\r\n        let node = this.graph.addElementWithValues('Class', { x: this.x, y: this.y });\r\n        this.graph.drawElement(node);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isRectDrawing) {\r\n            return;\r\n        }\r\n        this.isRectDrawing = true;\r\n\r\n        this.x = Util.getEventX(evt);\r\n        this.y = Util.getEventY(evt);\r\n    }\r\n\r\n}\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement, Point } from '../elements/BaseElements';\r\nimport { GraphModel } from '../elements/Model';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Control } from '../Control';\r\nimport { Util } from '../util';\r\n\r\nexport class Drag implements EventHandler {\r\n\r\n    private element: DiagramElement;\r\n    private svgElement: SVGSVGElement;\r\n    private dragging = false;\r\n    private reinsert = false;\r\n    private mouseOffset = new Point();\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        if (!this.canHandle()) {\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if ((!this.dragging) && (element.id !== 'RootElement')) {\r\n                    this.element = element;\r\n                    this.svgElement = <SVGSVGElement>element.$view;\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mouseup':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n\r\n                break;\r\n            case 'mousemove':\r\n                if (this.dragging) {\r\n                    this.drag(event, element);\r\n                }\r\n                break;\r\n            case 'mouseleave':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Drag.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Drag.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private reset() {\r\n        this.dragging = false;\r\n        this.svgElement.style.cursor = 'pointer';\r\n\r\n        /*  WORKAROUND\r\n            Chrome got problem with the Node.appendChild() method.\r\n            Sometimes it works, sometimes not.\r\n            So the background is, in the drag method will the current element be appended\r\n            to front of the svg root.\r\n            If this happend, the click event won't fire.\r\n            So it will be fired manually.\r\n            This problem occurs only in chrome.\r\n        */\r\n        if (Util.isChrome()) {\r\n            let clickEvt = Util.createCustomEvent('click');\r\n            this.svgElement.dispatchEvent(clickEvt);\r\n        }\r\n    }\r\n\r\n    private start(evt: Event | any, element: Control) {\r\n\r\n        this.dragging = true;\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n        this.reinsert = true;\r\n\r\n        this.svgElement.style.cursor = 'move';\r\n    }\r\n\r\n    private drag(evt: Event | any, element: DiagramElement) {\r\n\r\n        if (this.reinsert) {\r\n            if (this.element.id !== 'RootElement') {\r\n                // nesseccary to set the dragged object on top of svg children\r\n                this.graph.root.appendChild(this.svgElement);\r\n            }\r\n\r\n            let dragEvent = Util.createCustomEvent('drag');\r\n            element.$view.dispatchEvent(dragEvent);\r\n        }\r\n        this.reinsert = false;\r\n\r\n        evt.stopPropagation();\r\n\r\n        const translation = this.svgElement.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        const sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        const transX = sx + evt.clientX - this.mouseOffset.x;\r\n        const transY = sy + evt.clientY - this.mouseOffset.y;\r\n        this.svgElement.setAttributeNS(null, 'transform', 'translate(' + transX + ' ' + transY + ')');\r\n        this.element.getPos().addNum(transX - sx, transY - sy);\r\n\r\n        if (this.element instanceof Node) {\r\n            (<Node>this.element).redrawEdges();\r\n        }\r\n\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n\r\n\r\n        // resize svg root\r\n        let maxX = this.element.getPos().x + this.element.getSize().x;\r\n        let maxY = this.element.getPos().y + this.element.getSize().y;\r\n\r\n        let domRectRoot = this.graph.root.getBoundingClientRect();\r\n        if(!domRectRoot){\r\n            return;\r\n        }\r\n\r\n        if(maxX > domRectRoot.width){\r\n            this.graph.root.setAttributeNS(null, 'width', '' + maxX);\r\n        }\r\n        \r\n        if(maxY > domRectRoot.height){\r\n            this.graph.root.setAttributeNS(null, 'height', '' + maxY);\r\n        }\r\n    }\r\n}\r\n","import PropertyChangeSupport from '../PropertyChangeSupport';\r\nimport Data from '../Data';\r\nimport {Adapter} from '../Adapter';\r\nimport ClazzProperty from '../elements/nodes/ClazzProperty';\r\n\r\nexport class GraphListener implements PropertyChangeSupport {\r\n    private $owner: ClazzProperty;\r\n\r\n    constructor(owner: ClazzProperty) {\r\n        this.$owner = owner;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        let adapter = this.$owner.getRoot().getAdapter();\r\n        if (adapter) {\r\n            // messages.add(\"{\\\"class\\\":\\\"de.uniks.networkparser.test.model.House\\\",\\\"id\\\":\\\"H1\\\",\\\"rem\\\":{\\\"floor\\\":4},\\\"upd\\\":{\\\"floor\\\":42}}\");\r\n            let myId =  this.$owner.$owner.getId();\r\n            if (myId && myId.length > 0) {\r\n                let pos = myId.indexOf(':');\r\n                if (pos > 0) {\r\n                    myId = myId.substring(0, pos).trim();\r\n                }\r\n            }\r\n            let myName = this.$owner.getName();\r\n            let remJson = {};\r\n            remJson[myName] = oldValue;\r\n            let updJson = {};\r\n            updJson[myName] = newValue;\r\n            let json = {};\r\n            json['id'] = myId;\r\n            json['rem'] = remJson;\r\n            json['upd'] = updJson;\r\n            let message = JSON.stringify(json);\r\n            (<Adapter> adapter).update(message);\r\n        }\r\n    }\r\n}\r\n","import {Graph} from '../elements/';\r\nimport {EventHandler, EventBus} from '../EventBus';\r\nimport {DiagramElement} from '../elements/';\r\nimport {Util} from '../util';\r\n\r\nexport class ImportFile implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(ImportFile.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(ImportFile.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        let type: string = typeof event;\r\n        if (type !== 'DragEvent') {\r\n            return false;\r\n        }\r\n        let evt: DragEvent = <DragEvent>event;\r\n        if (evt.type === 'dragover') {\r\n            this.handleDragOver(evt);\r\n        } else if (evt.type === 'dragleave') {\r\n            if (this.graph.$view !== evt.target) {\r\n                return false;\r\n            }\r\n            this.setBoardStyle('dragleave');\r\n        } else if (evt.type === 'drop') {\r\n            this.handleLoadFile(evt);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public setBoardStyle(typ: string): boolean {\r\n        let b = this.graph.$view;\r\n        Util.removeClass(b, 'Error');\r\n        Util.removeClass(b, 'Ok');\r\n        Util.removeClass(b, 'Add');\r\n        if (typ === 'dragleave') {\r\n            if (b['errorText']) {\r\n                b.removeChild(b['errorText']);\r\n                b['errorText'] = null;\r\n            }\r\n            return true;\r\n        }\r\n        Util.addClass(b, typ);\r\n        if (typ === 'Error') {\r\n            if (!b['errorText']) {\r\n                b['errorText'] = Util.create({tag: 'div', style: 'margin-top: 30%', value: 'NO TEXTFILE'});\r\n                b.appendChild(b['errorText']);\r\n            }\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private handleLoadFile(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n\r\n        let files = evt.dataTransfer.files; // FileList object.\r\n\r\n        if (files.length > 1) {\r\n            evt.dataTransfer.dropEffect = 'none';\r\n            return;\r\n        }\r\n\r\n        // files is a FileList of File objects. List some properties.\r\n        let reader  = new FileReader();\r\n        let output = [];\r\n        let htmlResult = '';\r\n        let that = this;\r\n        for (let i = 0, f; f = files[i]; i++) {\r\n            reader.onload = function(event) {\r\n                htmlResult = event.target['result'];\r\n                console.log('fileContent: ' + htmlResult);\r\n\r\n                // CHANGE TO INTERNAL OBJECT\r\n                if (that.graph) {\r\n                    that.graph.import(htmlResult);\r\n                }\r\n            };\r\n            reader.readAsText(f);\r\n        }\r\n        this.setBoardStyle('dragleave');\r\n    }\r\n\r\n    private handleDragOver(evt: DragEvent): void {\r\n        let error: boolean = true, n: string, f;\r\n        let files = evt.dataTransfer.files;\r\n        // process all File objects\r\n        if (files && files.length > 0) {\r\n            for (let i: number = 0; i < files.length; i += 1) {\r\n                f = files[i];\r\n                if (f.type.indexOf('text') === 0) {\r\n                    error = false;\r\n                } else if (f.type === '') {\r\n                    n = f.name.toLowerCase();\r\n                    if (n.indexOf('json', n.length - 4) !== -1) {\r\n                        error = false;\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            let items = evt.dataTransfer.items;\r\n            if (items && items.length > 0) {\r\n                for (let z = 0; z < items.length; z ++) {\r\n                    if (items[z].type === '' || items[z].type === 'text/plain') {\r\n                        error = false;\r\n                    }\r\n                }\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.\r\n        if (error) {\r\n            this.dragStyler(evt, 'Error');\r\n        } else if (evt.ctrlKey) {\r\n            this.dragStyler(evt, 'Add');\r\n        } else {\r\n            this.dragStyler(evt, 'Ok');\r\n        }\r\n        /* //evt.target['className'] += ' diagramLoadFile';\r\n        '//console.log('handDragOver');*/\r\n    }\r\n\r\n    private dragStyler(event: Event, typ: string) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n        this.setBoardStyle(typ);\r\n    }\r\n\r\n    private handleDragLeave(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n        evt.dataTransfer.dropEffect = 'link'; // Explicitly show this is a copy.\r\n        evt.target['className'] = 'diagram';\r\n        console.log('handDragLeave');\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Class } from '../elements/nodes/Class';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Association } from '../elements/index';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class NewEdge implements EventHandler {\r\n    private graph: Graph;\r\n    private svgLine: SVGSVGElement;\r\n    private isEdgeDrawing: boolean;\r\n    private sourceNode: Node;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    private lastTargetNode: Node;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(NewEdge.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(NewEdge.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!((<KeyboardEvent>event).ctrlKey || EventBus.isHandlerActiveOrFree('NewEdge', true))) {\r\n            this.removeLine();\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element instanceof Node) {\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n\r\n            case 'mousemove':\r\n                this.drawEdge(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.setNewEdgeToNode(event);\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default: break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawEdge(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        let lineToX = Util.getEventX(evt);\r\n        let lineToy = Util.getEventY(evt);\r\n\r\n        let path = `M${this.x} ${this.y} L${lineToX} ${lineToy}`;\r\n        // if line wasnt draw\r\n        if (!this.svgLine) {\r\n\r\n            let attr = {\r\n                tag: 'path',\r\n                id: 'newEdgePath',\r\n                d: path,\r\n                class: 'SVGEdge'\r\n            };\r\n\r\n            let shape = Util.createShape(attr);\r\n            this.svgLine = shape;\r\n\r\n            this.graph.root.appendChild(shape);\r\n            this.graph.root.appendChild(this.sourceNode.$view);\r\n        }\r\n        else {\r\n\r\n            // set new L path\r\n            this.svgLine.setAttributeNS(null, 'd', path);\r\n\r\n            // get node from position\r\n            let targetNode = this.graph.$graphModel.getNodeByPosition(Util.getEventX(evt), Util.getEventY(evt));\r\n\r\n            // if some targetnode is available, so highlight the node\r\n            if (targetNode) {\r\n\r\n                // reset the last one\r\n                if (this.lastTargetNode && this.lastTargetNode.id !== targetNode.id) {\r\n                    this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n                }\r\n\r\n                this.lastTargetNode = targetNode;\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz-drawedge');\r\n            }\r\n            else if (this.lastTargetNode) {\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeLine(): void {\r\n        this.isEdgeDrawing = false;\r\n\r\n        if (this.svgLine) {\r\n            this.graph.root.removeChild(this.svgLine);\r\n            this.svgLine = null;\r\n        }\r\n\r\n        if (this.lastTargetNode) {\r\n            this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n        }\r\n    }\r\n\r\n    private setNewEdgeToNode(event: Event | any): void {\r\n        // get node from position\r\n        let targetNode = this.graph.$graphModel\r\n            .getNodeByPosition(Util.getEventX(event), Util.getEventY(event));\r\n\r\n        if (!targetNode) {\r\n            this.removeLine();\r\n\r\n            return;\r\n        }\r\n\r\n        this.removeLine();\r\n        let edgeType = this.sourceNode.$defaulEdgeType || 'Association';\r\n\r\n        let jsonData = {\r\n            type: edgeType,\r\n            source: this.sourceNode.id,\r\n            target: targetNode.id\r\n        };\r\n\r\n        let newEdge = this.graph.$graphModel.addEdge(<any>jsonData, true);\r\n        this.graph.drawElement(newEdge);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        this.isEdgeDrawing = true;\r\n        this.sourceNode = element as Class;\r\n\r\n        this.x = this.sourceNode.getPos().x + (this.sourceNode.getSize().x / 2);\r\n        this.y = this.sourceNode.getPos().y + (this.sourceNode.getSize().y / 2);\r\n\r\n        // TODO: get this into util or select\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Node } from '../elements/nodes';\r\nimport { Association } from '../elements/edges';\r\nimport { Util } from '../util';\r\nimport { SymbolLibary } from '../elements/nodes/Symbol';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\nimport Attribute from '../elements/nodes/Attribute';\r\n\r\nexport class Select implements EventHandler {\r\n\r\n    private deleteShape: SVGSVGElement;\r\n    private addEdgeShape: SVGSVGElement;\r\n    private copyNodeShape: SVGSVGElement;\r\n    private graph: Graph;\r\n    private padding = 5;\r\n\r\n    private lastSelectedNode: Element;\r\n    private lastSelectedEdge: Element;\r\n\r\n    private isDragged: boolean;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.deleteShape = SymbolLibary.drawSVG({ type: 'Basket', background: true, id: 'trashcan', tooltip: 'Delete class' });\r\n        this.copyNodeShape = SymbolLibary.drawSVG({ type: 'Copynode', background: true, id: 'copyNode', tooltip: 'Copy class' });\r\n        this.addEdgeShape = SymbolLibary.drawSVG({ type: 'Edgeicon', background: true, id: 'addEdge', tooltip: 'Click and drag to connect this class' });\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        let x = Util.getEventX(event);\r\n        let y = Util.getEventY(event);\r\n\r\n        event.stopPropagation();\r\n        if (event.type === 'drag') {\r\n            this.isDragged = true;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            if (element instanceof Node) {\r\n                this.lastSelectedNode = <Element>element.$view;\r\n            }\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n        }\r\n\r\n        if (event.target['id'] === 'background' || element === this.graph.$graphModel) {\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let e = <Node>element;\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.graph.root.appendChild(this.addEdgeShape);\r\n            this.graph.root.appendChild(this.copyNodeShape);\r\n            this.graph.root.appendChild(element.$view);\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'visible');\r\n\r\n            let x = (e.getPos().x + e.getSize().x) + 5;\r\n            let y = e.getPos().y;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y + this.padding})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.copyNodeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 40 + this.padding})`);\r\n            this.copyNodeShape.onclick = (evt) => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let copyClass = (element).copy();\r\n                copyClass.withPos(nextFreePosition.x, nextFreePosition.y);\r\n                this.graph.drawElement(copyClass);\r\n            };\r\n\r\n            this.addEdgeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 80 + this.padding})`);\r\n            this.addEdgeShape.onmousedown = function () {\r\n                EventBus.setActiveHandler('NewEdge');\r\n                element.$view.dispatchEvent(Util.createCustomEvent('mousedown'));\r\n            };\r\n        }\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let clazz = <Node>element;\r\n\r\n            if (Util.isChrome()) {\r\n                if (this.lastSelectedNode && element.id === this.lastSelectedNode.id && !this.isDragged) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            this.isDragged = false;\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            this.lastSelectedNode = <Element>element.$view;\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete class');\r\n\r\n            // draw textbox to edit clazz in one line\r\n            let divInlineEdit = document.createElement('div');\r\n            divInlineEdit.id = 'inlineEdit';\r\n            divInlineEdit.style.position = 'absolute';\r\n            divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n            divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n            divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n            divInlineEdit.style.zIndex = '42';\r\n\r\n            let inputText = document.createElement('input');\r\n            inputText.type = 'text';\r\n            inputText.style.width = '100%';\r\n            inputText.placeholder = 'Add properties, edit label';\r\n\r\n            divInlineEdit.appendChild(inputText);\r\n            document.body.appendChild(divInlineEdit);\r\n\r\n            inputText.addEventListener('focusout', (evt) => {\r\n\r\n                if (Util.isChrome()) {\r\n                    // only if input is empty, remove the inline edit function\r\n                    if ((!inputText.value || inputText.value.length === 0) && (!this.lastSelectedNode || element.id !== this.lastSelectedNode.id)) {\r\n                        this.removeLastInlineEdit();\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                // only if input is empty, remove the inline edit function\r\n                if ((!inputText.value || inputText.value.length === 0)) {\r\n                    this.removeLastInlineEdit();\r\n                }\r\n            });\r\n\r\n            let g = this.graph;\r\n            let propertyTypes: string[] = ['boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'short', 'String', 'void'];\r\n            inputText.addEventListener('keydown', function (evt) {\r\n\r\n                let keyCode = (<any>evt).which;\r\n                let inputValue = <any>inputText.value;\r\n\r\n                if (Util.endsWith(inputValue, ':') && !document.getElementById('selectPropertyType')) {\r\n                    let selectType = document.createElement('select');\r\n                    selectType.id = 'selectPropertyType';\r\n                    selectType.style.width = '100%';\r\n\r\n                    for (let type of propertyTypes) {\r\n                        let selectOption = document.createElement('option');\r\n                        selectOption.value = type;\r\n                        selectOption.innerHTML = type;\r\n                        selectType.appendChild(selectOption);\r\n                    }\r\n\r\n                    selectType.addEventListener('change', function (evt) {\r\n                        let inputValueSplitted = inputValue.split(':');\r\n                        let selectedPropertyType = selectType.options[selectType.selectedIndex].value;\r\n\r\n                        if (inputValueSplitted.length >= 1) {\r\n                            inputText.value = inputValueSplitted[0].trim() + ' : ' + selectedPropertyType;\r\n                            inputText.focus();\r\n                        }\r\n                    });\r\n\r\n                    divInlineEdit.appendChild(selectType);\r\n                }\r\n                else if (!Util.includes(inputValue, ':')) {\r\n                    let selectType = document.getElementById('selectPropertyType');\r\n\r\n                    if (selectType) {\r\n                        selectType.remove();\r\n                    }\r\n                }\r\n\r\n                if (keyCode !== 13) {\r\n                    return;\r\n                }\r\n\r\n                // attribute\r\n                if ((Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) === false) {\r\n                    if (Util.includes(inputValue, ':')) {\r\n                        clazz.addAttribute(inputValue.trim());\r\n                        clazz.reDraw();\r\n                    } else if (Util.includes(inputValue, '=') ) {\r\n                        let attr: Attribute = null;\r\n                        let name = inputValue.substring(0, inputValue.indexOf('=')).trim();\r\n                        for (let child of clazz.getAttributes() ) {\r\n                            if ( name === child.getName()) {\r\n                                attr = child;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (attr) {\r\n                            attr.updateValue(inputValue.substring(inputValue.indexOf('=') + 1).trim());\r\n                        }\r\n                        clazz.reDraw();\r\n                    }\r\n                }\r\n\r\n                // method\r\n                else if (Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) {\r\n                    clazz.addMethod(inputValue.trim());\r\n                    clazz.reDraw();\r\n                }\r\n                // label\r\n                else if (inputValue.trim().split(' ').length === 1 && inputValue.trim().length > 0) {\r\n                    clazz.updateLabel(inputValue.trim());\r\n                }\r\n\r\n                // reset size\r\n                divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n                divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n                divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n\r\n                inputText.value = '';\r\n\r\n                // remove combobox to select type of property\r\n                let selectType = document.getElementById('selectPropertyType');\r\n\r\n                if (selectType) {\r\n                    selectType.remove();\r\n                }\r\n\r\n                // TODO: reload propertiespanel. not working!\r\n                // event wont dispatch\r\n                // let customEvt = Util.createCustomEvent(EventBus.RELOADPROPERTIES);\r\n                // element.$view.dispatchEvent(customEvt);\r\n            });\r\n\r\n            (<any>divInlineEdit.children[0]).focus();\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Association) {\r\n            this.graph.root.appendChild(element.$view);\r\n            this.graph.root.appendChild(element.$sNode.$view);\r\n            this.graph.root.appendChild(element.$tNode.$view);\r\n\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete edge');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            let edge = <Association>element;\r\n            this.lastSelectedEdge = edge.$view;\r\n\r\n            Util.addClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Select.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Select.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private setTooltipOfShape(shape: SVGSVGElement, tooltip: string): void {\r\n        if (!shape || !shape.hasChildNodes()) {\r\n            return;\r\n        }\r\n\r\n        let titleElement = <SVGSVGElement>shape.childNodes[0];\r\n        if (!titleElement || titleElement.tagName !== 'title') {\r\n            return;\r\n        }\r\n\r\n        titleElement.textContent = tooltip;\r\n    }\r\n\r\n    private resetLastSelectedElements() {\r\n        // reset the last one\r\n        if (this.lastSelectedNode) {\r\n            Util.removeClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.lastSelectedNode = undefined;\r\n        }\r\n\r\n        if (this.lastSelectedEdge) {\r\n            Util.removeClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n            this.lastSelectedEdge = undefined;\r\n        }\r\n\r\n        this.removeLastInlineEdit();\r\n    }\r\n\r\n    private removeLastInlineEdit(): void {\r\n        // remove last inline edit of clazz\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n\r\n            // its not supported in internet explorer\r\n            // lastInlineEdit.remove();\r\n        }\r\n    }\r\n\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\n\r\nexport class Zoom implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n    }\r\n\r\n    public handle(e: any, element: DiagramElement): boolean {\r\n        let delta = e.deltaY || e.wheelDeltaY || -e.wheelDelta;\r\n        let d = 1 + (delta / 1000);\r\n\r\n        let values = this.graph.root.getAttribute('viewBox').split(' ');\r\n        const newViewBox = `${values[0]} ${values[1]} ${parseInt(values[2]) * d} ${parseInt(values[3]) * d}`;\r\n        this.graph.root.setAttribute('viewBox', newViewBox);\r\n\r\n        e.preventDefault();\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Zoom.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Zoom.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n}\r\n","export * from './Drag';\r\nexport * from './Select';\r\nexport * from './Zoom';\r\nexport * from './NewEdge';\r\nexport * from './ImportFile';\r\nexport * from './AddNode';\r\n","import { Association } from '../elements/edges';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport Layout from './Layout';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\n\r\nexport class DagreLayout implements Layout {\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        if (!window['dagre']) {\r\n            return;\r\n        }\r\n        let model = graph.$graphModel;\r\n        let g = new window['dagre'].graphlib.Graph();\r\n\r\n        g.setGraph({ marginx: 100, marginy: 20 }).setDefaultEdgeLabel(function () {\r\n            return {};\r\n        });\r\n\r\n        for (let node of model.nodes) {\r\n            g.setNode(node.id, { width: node.getSize().x, height: node.getSize().y });\r\n        }\r\n\r\n        for (let edge of model.edges) {\r\n            g.setEdge(edge.$sNode.id, edge.$tNode.id);\r\n        }\r\n\r\n        window['dagre'].layout(g);\r\n\r\n        g.nodes().forEach(function (nodeId: string) {\r\n            for (let node of model.nodes) {\r\n                if (node.id === nodeId) {\r\n                    node.withPos(g.node(nodeId).x - g.node(nodeId).width / 2, g.node(nodeId).y - g.node(nodeId).height / 2);\r\n                }\r\n            }\r\n        });\r\n        g.edges().forEach(function (e: any) {\r\n            for (let edge of model.edges) {\r\n                if (edge.$sNode.id === e.v && edge.$tNode.id === e.w) {\r\n                    let size = g.edge(e).points.length;\r\n                    edge.clearPoints();\r\n                    for (let i = 0; i < size; i++) {\r\n                        let point: SVGPoint = g.edge(e).points[i];\r\n                        edge.addPoint(point.x, point.y);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n}\r\n","import {DiagramElement} from '../elements/BaseElements';\r\nimport Layout from './Layout';\r\nimport {Graph} from '../elements/Graph';\r\nimport {Association} from '../elements/edges/Association';\r\nimport {Node} from '../elements/nodes/Node';\r\nimport {Control} from '../Control';\r\n\r\nexport class LayoutGraphMin {\r\n    public nodes: Object = {};\r\n    public edges: Array<Object> = [];\r\n    public outEdges: Object = {};\r\n    public inEdges: Object = {};\r\n    public dummyNodes: Array<LayoutGraphNode> = [];\r\n    public dummyEdges: Object = {};\r\n    public count: number = 0;\r\n    public minRank: number = Number.POSITIVE_INFINITY;\r\n    public maxRank: number = 0;\r\n    public maxHeight: number = 0;\r\n    public maxWidth: number = 0;\r\n    public ranksep: number = 0;\r\n    public edgesLabel: Array<Object> = [];\r\n\r\n    public nodeCount(): number {\r\n        return this.count;\r\n    }\r\n\r\n    public node(id: string) {\r\n        return this.nodes[id];\r\n    }\r\n\r\n    public setNode(id: string, n: LayoutGraphNode) {\r\n        if (n && !this.nodes[id]) {\r\n            this.nodes[id] = n;\r\n            this.count = this.count + 1;\r\n        } else if (!n && this.nodes[id]) {\r\n            delete this.nodes[id];\r\n        }\r\n    }\r\n}\r\n\r\nexport class LayoutGraphNode {\r\n    public id: string;\r\n    public width: number;\r\n    public height: number;\r\n    public x: number;\r\n    public y: number;\r\n    public edgeObj: LayoutGraphEdge;\r\n    public rank: number;\r\n\r\n    constructor(id: string, width: number, height: number, x: number, y: number) {\r\n        this.id = id;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n\r\nexport class LayoutGraphEdge {\r\n    public source: string;\r\n    public target: string;\r\n}\r\n\r\n// \t\t\t\t######################################################### DagreGraph #########################################################\r\nexport class DagreLayoutMin implements Layout {\r\n    public static EDGE_KEY_DELIM = '\\x01';\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        let g, layoutNode, nodes, newEdge, edges;\r\n        let i, n, x, y, sId, tId, split = DagreLayoutMin.EDGE_KEY_DELIM;\r\n        let e: Association;\r\n\r\n        nodes = node['nodes'];\r\n        edges = node['edges'];\r\n        g = new LayoutGraphMin();\r\n\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            g.setNode(n.id, new LayoutGraphNode(n.id, n.getSize().x, n.getSize().y, n.getPos().x, n.getPos().y));\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            sId = this.getNodeId(e.$sNode);\r\n            tId = this.getNodeId(e.$tNode);\r\n            if (sId > tId) {\r\n                let tmp = tId;\r\n                tId = sId;\r\n                sId = tmp;\r\n            }\r\n            let idAB = sId + split + tId + split;\r\n            let idBA = tId + split + sId + split;\r\n            if (sId !== tId && g.edgesLabel.indexOf(idAB) < 0 && g.edgesLabel.indexOf(idBA) < 0) {\r\n                newEdge = {source: sId, target: tId, minlen: 1, weight: 1};\r\n                g.edges.push(newEdge);\r\n                g.edgesLabel.push(idAB);\r\n                // In Edges\r\n                if (!g.inEdges[tId]) {\r\n                    g.inEdges[tId] = [];\r\n                }\r\n                g.inEdges[tId].push(newEdge);\r\n\r\n                // Out Edges\r\n                if (!g.outEdges[sId]) {\r\n                    g.outEdges[sId] = [];\r\n                }\r\n                g.outEdges[sId].push(newEdge);\r\n            }\r\n        }\r\n        this.layouting(g);\r\n        // Set the layouting back\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            layoutNode = g.node(n.id);\r\n            x = n.getPos().x;\r\n            y = n.getPos().y;\r\n            if (x < 1 && y < 1) {\r\n                n.withPos(Math.ceil(layoutNode.x), Math.ceil(layoutNode.y));\r\n            }\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            // OBSOLETE method:  e.calc(graph.canvas);\r\n        }\r\n        graph.draw();\r\n    }\r\n\r\n    public getNodeId(node: Control): string {\r\n        if (node.$owner) {\r\n            return this.getNodeId(node.$owner) || node.id;\r\n        }\r\n        return node.id;\r\n    }\r\n\r\n    public layouting(g: LayoutGraphMin) {\r\n        this.longestPath(g);\r\n        this.normalizeRanks(g);\r\n        this.normalizeEdge(g);\r\n        // this.setSimpleOrder(g);\r\n        this.order(g);\r\n        g.ranksep = 25;\r\n        // remove Dummy\r\n        this.removeDummy(g);\r\n        this.position(g);\r\n    }\r\n\r\n    public setSimpleOrder(g: LayoutGraphMin) {\r\n        let i, n;\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            n.order = n.rank;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Applies heuristics to minimize edge crossings in the graph and sets the best\r\n     * order solution as an order attribute on each node.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Graph must be DAG\r\n     *    2. Graph nodes must be objects with a \"rank\" attribute\r\n     *    3. Graph edges must have the \"weight\" attribute\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Graph nodes will have an \"order\" attribute based on the results of the\r\n     *       algorithm.\r\n     */\r\n    public order(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        let visited = {};\r\n        let node, n, order, i;\r\n        for (i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (n in g.nodes) {\r\n            if (visited[n]) {\r\n                continue;\r\n            }\r\n            visited[n] = true;\r\n            node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank].push(n);\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                g.nodes[layering[order][n]].order = parseInt(n);\r\n            }\r\n        }\r\n        // Fix resolve conflict\r\n        for (order in layering) {\r\n            if (layering[order].length > 1) {\r\n                for (n in layering[order]) {\r\n                    if (layering[order].hasOwnProperty(n) === false) {\r\n                        continue;\r\n                    }\r\n                    let name = layering[order][n];\r\n                    let sum = 0;\r\n                    let weight = 1;\r\n                    let edges = g.dummyEdges[name];\r\n                    if (edges) {\r\n                        for (i in edges) {\r\n                            if (edges.hasOwnProperty(i) === false) {\r\n                                continue;\r\n                            }\r\n                            let edge = edges[i];\r\n                            let nodeU = g.node(edge.target);\r\n                            sum = sum + (edge.weight * nodeU.order);\r\n                            weight = weight + edge.weight;\r\n                        }\r\n                    }\r\n                    g.node(name).barycenter = sum / weight;\r\n                    g.node(name).weight = weight;\r\n                }\r\n            } else if (layering[order].length > 0) {\r\n                for (n in layering[order]) {\r\n                    let name = layering[order][n];\r\n                    g.node(name).barycenter = 1;\r\n                    g.node(name).weight = 1;\r\n                }\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                let node = g.nodes[layering[order][n]];\r\n                node.order = parseInt(n) + node.barycenter * node.weight;\r\n                if (isNaN(node.order)) {\r\n                    console.log('ERROR');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public removeDummy(g: LayoutGraphMin) {\r\n        for (let z in g.dummyNodes) {\r\n            let node = g.dummyNodes[z];\r\n            g.setNode(node.id, null);\r\n        }\r\n        g.dummyNodes = [];\r\n        g.dummyEdges = {};\r\n    }\r\n\r\n    /*\r\n     * Breaks any long edges in the graph into short segments that span 1 layer\r\n     * each. This operation is undoable with the denormalize function.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. The input graph is a DAG.\r\n     *    2. Each node in the graph has a \"rank\" property.\r\n     *\r\n     * Post-condition:\r\n     *\r\n     *    1. All edges in the graph have a length of 1.\r\n     *    2. Dummy nodes are added where edges have been split into segments.\r\n     *    3. The graph is augmented with a \"dummyChains\" attribute which contains\r\n     *       the first dummy in each chain of dummy nodes produced.\r\n     */\r\n    public normalizeEdge(g: LayoutGraphMin): void {\r\n        let i: number = 1;\r\n        for (let id in g.edges) {\r\n            let e: LayoutGraphEdge = <LayoutGraphEdge>g.edges[id];\r\n            let v: string = e.source;\r\n            let vRank = g.node(v).rank;\r\n            const w: string = e.target;\r\n            const wRank: number = g.node(w).rank;\r\n            let name: string;\r\n\r\n            if (wRank === vRank + 1) {\r\n                continue;\r\n            }\r\n\r\n            let dummy;\r\n            for (vRank = vRank + 1; vRank < wRank; ++vRank) {\r\n                name = '_d' + e.source + e.target + (i++);\r\n                let newEdge = {source: v, target: name, minlen: 1, weight: 1};\r\n                dummy = new LayoutGraphNode(name, 0, 0, 0, 0);\r\n                dummy.edgeObj = e;\r\n                dummy.rank = vRank;\r\n                // Dummy Edges\r\n                if (!g.dummyEdges[v]) {\r\n                    g.dummyEdges[v] = [];\r\n                }\r\n                g.dummyEdges[v].push(newEdge);\r\n\r\n                g.dummyNodes.push(dummy);\r\n                g.setNode(dummy.id, dummy);\r\n                v = name;\r\n            }\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Initializes ranks for the input graph using the longest path algorithm. This\r\n     * algorithm scales well and is fast in practice, it yields rather poor\r\n     * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\r\n     * ranks wide and leaving edges longer than necessary. However, due to its\r\n     * speed, this algorithm is good for getting an initial ranking that can be fed\r\n     * into other algorithms.\r\n     *\r\n     * This algorithm does not normalize layers because it will be used by other\r\n     * algorithms in most cases. If using this algorithm directly, be sure to\r\n     * run normalize at the end.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Input graph is a DAG.\r\n     *    2. Input graph node labels can be assigned properties.\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Each node will be assign an (unnormalized) \"rank\" property.\r\n     */\r\n    public longestPath(g: LayoutGraphMin) {\r\n        let i, n, visited = [];\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            visited.push(i);\r\n            n.rank = this.findAllPaths(g, n, 0, visited);\r\n            g.minRank = Math.min(g.minRank, n.rank);\r\n        }\r\n    }\r\n\r\n    public findAllPaths(g: LayoutGraphMin, n: Node, currentCost: number, path: Array<String>) {\r\n        let min: number = 0;\r\n        let id: string;\r\n        let z: number;\r\n        let target;\r\n        if (g.outEdges[n.id]) {\r\n            for (z = 0; z < g.outEdges[n.id].length; z++) {\r\n                id = g.outEdges[n.id][z].target;\r\n                target = g.nodes[id];\r\n                if (path[id]) {\r\n                    min = Math.min(min, target.rank);\r\n                } else if (path.indexOf(id) < 0) {\r\n                    min = Math.min(min, this.findAllPaths(g, target, currentCost - 2, path));\r\n                } else {\r\n                    min = currentCost;\r\n                }\r\n            }\r\n            return min;\r\n        }\r\n        return currentCost;\r\n    }\r\n\r\n    /*\r\n     * Adjusts the ranks for all nodes in the graph such that all nodes v have\r\n     * rank(v) >= 0 and at least one node w has rank(w) = 0.\r\n     */\r\n    public normalizeRanks(g: LayoutGraphMin) {\r\n        let min = g.minRank;\r\n        let value;\r\n        g.maxRank = Number.NEGATIVE_INFINITY;\r\n        g.maxHeight = 0;\r\n        g.maxWidth = 0;\r\n        for (let i in g.nodes) {\r\n            let node = g.nodes[i];\r\n            if (node.rank !== undefined) {\r\n                node.rank -= min;\r\n                value = Math.abs(node.rank);\r\n                if (value > g.maxRank) {\r\n                    g.maxRank = value;\r\n                }\r\n                g.maxHeight = Math.max(g.maxHeight, node.height);\r\n                g.maxWidth = Math.max(g.maxWidth, node.width);\r\n            }\r\n        }\r\n    }\r\n\r\n    public position(g: LayoutGraphMin) {\r\n        this.positionY(g);\r\n        let list = this.positionX(g);\r\n        for (let i in list) {\r\n            for (let pos in list[i]) {\r\n                if (list[i].hasOwnProperty(pos) === false) {\r\n                    continue;\r\n                }\r\n                if (g.node(list[i][pos])) {\r\n                    g.node(list[i][pos]).x = parseInt(pos) * g.maxWidth;\r\n                }\r\n            }\r\n\r\n        }\r\n    }\r\n\r\n    public positionY(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        let rankSep = g.ranksep;\r\n        let prevY = 0;\r\n        for (let layer in layering) {\r\n            let maxHeight = g.maxHeight;\r\n            for (let v in layering[layer]) {\r\n                if (layering[layer].hasOwnProperty(v) === false) {\r\n                    continue;\r\n                }\r\n                let id = layering[layer][v];\r\n                g.nodes[id].y = prevY + maxHeight / 2;\r\n            }\r\n            prevY += maxHeight + rankSep;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\r\n     * function will produce a matrix with the ids of each node.\r\n     */\r\n    public buildLayerMatrix(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        for (let i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (let n in g.nodes) {\r\n            let node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank][node.order] = n;\r\n            }\r\n        }\r\n        return layering;\r\n    }\r\n\r\n    public positionX(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        return layering;\r\n    }\r\n}\r\n","import { Point } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport Layout from './Layout';\r\n\r\nexport class Random implements Layout {\r\n\r\n  public layout(graph: Graph) {\r\n\r\n    let model = graph.$graphModel;\r\n\r\n    if (model.nodes) {\r\n      for (let node of model.nodes) {\r\n        let pos: Point = node.getPos();\r\n        if (pos.x === 0 && pos.y === 0) {\r\n          let x = Util.getRandomInt(0, graph.canvasSize.width);\r\n          let y = Util.getRandomInt(0, graph.canvasSize.height);\r\n          node.withPos(x, y);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","export * from './DagreLayout';\r\nexport * from './Random';\r\nexport * from './DagreLayoutMin';\r\n\r\nimport {DagreLayout} from './DagreLayout';\r\nimport {DagreLayoutMin} from './DagreLayoutMin';\r\nimport {Random} from './Random';\r\nnew DagreLayout();\r\nnew DagreLayoutMin();\r\nnew Random();\r\n","import {VirtualKeyBoard} from './VirtualKeyBoard';\r\n\r\nexport {Point} from './elements/BaseElements';\r\nexport {Bridge, DelegateAdapter} from './Bridge';\r\nexport {Graph} from './elements/Graph';\r\nexport * from './elements/nodes';\r\nexport * from './elements/edges';\r\nexport * from './adapters';\r\nexport * from './UML';\r\nimport {Point} from './elements/BaseElements';\r\nimport {Graph} from './elements/Graph';\r\nimport {ClassEditor} from './elements/ClassEditor';\r\nimport {Bridge} from './Bridge';\r\nimport {Util} from './util';\r\nimport * as nodes  from './elements/nodes';\r\nimport * as edges from './elements/edges';\r\nimport {ScrumBoard} from './ScrumBoard';\r\n\r\nif (!window['Point']) {\r\n    window['Point'] = Point;\r\n    window['Graph'] = Graph;\r\n    window['bridge'] = new Bridge();\r\n    window['Util'] = Util;\r\n    window['Class'] = nodes.Class;\r\n    window['Association'] = edges.Association;\r\n    window['SymbolLibary'] = nodes.SymbolLibary;\r\n    window['ClassEditor'] = ClassEditor;\r\n    window['VirtualKeyBoard'] = VirtualKeyBoard;\r\n    window['ScrumBoard'] = ScrumBoard;\r\n}\r\n","'use strict';\r\nimport { CSS } from './CSS';\r\nimport { Node } from './elements/nodes/Node';\r\nimport { DiagramElement, Point } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport class Util {\r\n\r\n    public static isAutoSave: boolean;\r\n\r\n    static getRandomInt(min: number, max: number): number {\r\n        return Math.floor(Math.random() * (max - min + 1)) + min;\r\n    }\r\n\r\n    static createShape(attrs: any): SVGSVGElement {\r\n        let xmlns = attrs.xmlns || 'http://www.w3.org/2000/svg';\r\n        let shape = document.createElementNS(xmlns, attrs.tag);\r\n\r\n        for (let attr in attrs) {\r\n            if (!attrs.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr !== 'tag') {\r\n                shape.setAttribute(attr, attrs[attr]);\r\n\r\n            }\r\n        }\r\n        return <SVGSVGElement><any>shape;\r\n    }\r\n\r\n    static toPascalCase(value: string): string {\r\n        value = value.charAt(0).toUpperCase() + value.substring(1).toLowerCase();\r\n        return value;\r\n    }\r\n\r\n    static isSVG(tag: string): boolean {\r\n        let i,\r\n            list = ['svg', 'path', 'polygon', 'polyline', 'line', 'title', 'rect', 'filter', 'feGaussianBlur', 'feOffset', 'feBlend', 'linearGradient', 'stop', 'text', 'symbol', 'textPath', 'defs', 'fegaussianblur', 'feoffset', 'feblend', 'circle', 'ellipse', 'g'];\r\n        for (i = 0; i < list.length; i += 1) {\r\n            if (list[i] === tag) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    static createHTML(node: any): HTMLElement {\r\n        return <HTMLElement>this.create(node);\r\n    }\r\n    static create(node: any): Element {\r\n        let style, item, xmlns, key, tag, k;\r\n        if (document.createElementNS && (this.isSVG(node.tag) || node.xmlns)) {\r\n            if (node.xmlns) {\r\n                xmlns = node.xmlns;\r\n            } else {\r\n                xmlns = 'http://www.w3.org/2000/svg';\r\n            }\r\n            if (node.tag === 'img' && xmlns) {\r\n                item = document.createElementNS(xmlns, 'image');\r\n                item.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\r\n                item.setAttributeNS('http://www.w3.org/1999/xlink', 'href', node.src);\r\n            } else {\r\n                item = document.createElementNS(xmlns, node.tag);\r\n            }\r\n        } else {\r\n            item = document.createElement(node.tag);\r\n        }\r\n        tag = node.tag.toLowerCase();\r\n        for (key in node) {\r\n            if (!node.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            k = key.toLowerCase();\r\n            if (node[key] === null) {\r\n                continue;\r\n            }\r\n            if (k === 'tag' || k.charAt(0) === '$' || k === '$graphModel') {\r\n                continue;\r\n            }\r\n            if (k.charAt(0) === '#') {\r\n                item[k.substring(1)] = node[key];\r\n                continue;\r\n            }\r\n            if (k === 'rotate') {\r\n                item.setAttribute('transform', 'rotate(' + node[key] + ',' + node.$graphModel.x + ',' + node.$graphModel.y + ')');\r\n                continue;\r\n            }\r\n            if (k === 'value') {\r\n                if (!node[key]) {\r\n                    continue;\r\n                }\r\n                if (tag !== 'input') {\r\n                    if (tag === 'text') {// SVG\r\n                        item.appendChild(document.createTextNode(node[key]));\r\n                    } else {\r\n                        item.innerHTML = node[key];\r\n                    }\r\n                } else {\r\n                    item[key] = node[key];\r\n                }\r\n                continue;\r\n            }\r\n            if (k.indexOf('on') === 0) {\r\n                this.bind(item, k.substring(2), node[key]);\r\n                continue;\r\n            }\r\n            if (k.indexOf('-') >= 0) {\r\n                item.style[key] = node[key];\r\n            } else {\r\n                if (k === 'style' && typeof (node[key]) === 'object') {\r\n                    for (style in node[key]) {\r\n                        if (!node[key].hasOwnProperty(style)) {\r\n                            continue;\r\n                        }\r\n                        if (node[key][style]) {\r\n                            if ('transform' === style) {\r\n                                item.style.transform = node[key][style];\r\n                                item.style.msTransform = item.style.MozTransform = item.style.WebkitTransform = item.style.OTransform = node[key][style];\r\n                            } else {\r\n                                item.style[style] = node[key][style];\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    item.setAttribute(key, node[key]);\r\n                }\r\n            }\r\n        }\r\n        if (node.$parent) {\r\n            node.$parent.appendChild(item);\r\n        }\r\n        if (node.$graphModel) {\r\n            item.$graphModel = node.$graphModel;\r\n        }\r\n        return item;\r\n    }\r\n\r\n    static setSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttribute('width', value);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.setAttribute('height', value);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setAttributeSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttributeNS(null, 'width', value);\r\n        value = Util.getValue(height);\r\n        item.setAttributeNS(null, 'height', value);\r\n    }\r\n\r\n    static setStyleSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setPos(item: any, x: number, y: number): void {\r\n        if (item.x && item.x.baseVal) {\r\n            item.style.left = x + 'px';\r\n            item.style.top = y + 'px';\r\n        } else {\r\n            item.x = x;\r\n            item.y = y;\r\n        }\r\n    }\r\n\r\n    static getValue(value: string | number): number {\r\n        return parseInt(('0' + value).replace('px', ''), 10);\r\n    }\r\n\r\n    static isIE(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('.net') > -1;\r\n    }\r\n\r\n    static isEdge(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('edge') > -1;\r\n    }\r\n\r\n    static isFireFox(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n    }\r\n\r\n    static isSafari(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        return navigator.userAgent.toLowerCase().indexOf('safari') > -1 && !isEdge;\r\n    }\r\n\r\n    static isOpera(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('opera') > -1;\r\n    }\r\n\r\n    static isChrome(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        let isSafari = Util.isSafari();\r\n        return navigator.userAgent.toLowerCase().indexOf('chrome') > -1 && !isEdge && isSafari;\r\n    }\r\n\r\n    static getEventX(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetX'] : event.layerX;\r\n    }\r\n\r\n    static getEventY(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetY'] : event.layerY;\r\n    }\r\n\r\n    static getNumber(str: string): number {\r\n        return parseInt((str || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    static getStyle(styleProp: string): CSS {\r\n        let i, style, diff, current, ref, el = document.createElement('div'), css;\r\n        document.body.appendChild(el);\r\n        css = new CSS(styleProp);\r\n        ref = new CSS(styleProp, el).css;\r\n        style = window.getComputedStyle(el, null);\r\n        el.className = styleProp;\r\n        current = new CSS(styleProp, el).css;\r\n        diff = Util.getNumber(style.getPropertyValue('border-width'));\r\n        for (i in current) {\r\n            if (!current.hasOwnProperty(i)) {\r\n                continue;\r\n            }\r\n            if (i === 'width' || i === 'height') {\r\n                if (Util.getNumber(current[i]) !== 0 && Util.getNumber(current[i]) + diff * 2 !== Util.getNumber(ref[i])) {\r\n                    css.add(i, current[i]);\r\n                }\r\n            } else if (current[i] !== ref[i]) {\r\n                css.add(i, current[i]);\r\n            }\r\n        }\r\n        document.body.removeChild(el);\r\n        return css;\r\n    }\r\n\r\n    static sizeOf(item: string | any, node?: Node): ClientRect {\r\n        let board;\r\n        let rect: ClientRect;\r\n        let addBoard: boolean;\r\n        if (!item) {\r\n            return undefined;\r\n        }\r\n        if (node) {\r\n            board = node.$owner.$view;\r\n            addBoard = false;\r\n        }\r\n\r\n        if (!board) {\r\n            addBoard = true;\r\n            board = Util.createShape({ tag: 'svg', id: 'root', width: 200, height: 200 });\r\n            document.body.appendChild(board);\r\n        }\r\n        if (board.tagName === 'svg') {\r\n            if (typeof item === 'string') {\r\n                item = Util.create({ tag: 'text', $font: true, value: item });\r\n                item.setAttribute('width', '5px');\r\n            }\r\n        } else if (typeof item === 'string') {\r\n            item = document.createTextNode(item);\r\n        }\r\n        board.appendChild(item);\r\n        rect = item.getBoundingClientRect();\r\n        board.removeChild(item);\r\n\r\n        if (addBoard) {\r\n            document.body.removeChild(board);\r\n        }\r\n        return rect;\r\n    }\r\n\r\n    static getColor(style: string, defaultColor?: string) {\r\n        if (style) {\r\n            if (style.toLowerCase() === 'create') {\r\n                return '#008000';\r\n            }\r\n            if (style.toLowerCase() === 'nac') {\r\n                return '#FE3E3E';\r\n            }\r\n            if (style.indexOf('#') === 0) {\r\n                return style;\r\n            }\r\n        }\r\n        if (defaultColor) {\r\n            return defaultColor;\r\n        }\r\n        return '#000';\r\n    }\r\n\r\n    public static utf8$to$b64(str: string): string {\r\n        return window.btoa(encodeURIComponent(str));\r\n    }\r\n\r\n    public static showSVG(control: DiagramElement) {\r\n        let svg = Util.create({\r\n            tag: 'svg',\r\n            style: { left: control.getPos().x, top: control.getPos().y, position: 'absolute' }\r\n        });\r\n        let child = control.getSVG();\r\n        if (child) {\r\n            svg.appendChild(child);\r\n        }\r\n        Util.setSize(svg, control.getSize().x, control.getSize().y);\r\n        document.body.appendChild(svg);\r\n    }\r\n\r\n    public static toJson(ref: JSON | Object): Object {\r\n        let result = {};\r\n        return Util.copy(result, ref, false, false);\r\n    }\r\n\r\n    public static initControl(parent: Control, control: Control, type: string, id: string, json: JSON | Object) {\r\n        if (typeof control.init === 'function') {\r\n            control.init(parent, type, id);\r\n        }\r\n        if (typeof control.load === 'function') {\r\n            control.load(json);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * copy One Json into another\r\n     * @function\r\n     * @param ref reference Json\r\n     * @param src source Json\r\n     * @param full all attributes include privet $\r\n     * @param replace set the original reference or copy it\r\n     * @returns ref\r\n     * @name copy\r\n     */\r\n    public static copy(ref: JSON | Object, src: JSON | Object, full: boolean, replace: boolean) {\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (replace) {\r\n                        ref[i] = src[i];\r\n                        continue;\r\n                    }\r\n                    if (!ref[i]) {\r\n                        if (src[i] instanceof Array) {\r\n                            ref[i] = [];\r\n                        } else {\r\n                            ref[i] = {};\r\n                        }\r\n                    }\r\n                    Util.copy(ref[i], src[i], full, false);\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref[i] = src[i];\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    public static xmlstringify(text: string): string {\r\n        text = text.replace('<', '&lt;');\r\n        text = text.replace('>', '&gt;');\r\n        return text;\r\n    }\r\n\r\n    public static toXML(ref: JSON | Object | any, src: JSON | Object | any, full: boolean, doc: Document): any {\r\n        let name;\r\n        if (!ref) {\r\n            name = src.constructor.name;\r\n            doc = document.implementation.createDocument(null, name, null);\r\n            ref = doc.childNodes[0];\r\n        }\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (!ref.getAttribute(i)) {\r\n                        if (src[i] instanceof Array) {\r\n                            for (let c in src[i]) {\r\n                                if (!src[i].hasOwnProperty(c)) {\r\n                                    continue;\r\n                                }\r\n                                name = src[i][c].constructor.name;\r\n                                let child = doc.createElement(name);\r\n                                ref.appendChild(child);\r\n                                Util.toXML(child, src[i][c], full, doc);\r\n                            }\r\n                        } else {\r\n                            name = src[i].constructor.name;\r\n                            let child = doc.createElement(name);\r\n                            ref.appendChild(child);\r\n                            Util.toXML(child, src[i], full, doc);\r\n                        }\r\n                    } else {\r\n                        Util.toXML(ref.getAttribute(i), src[i], full, doc);\r\n                    }\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref.setAttribute(i, src[i]);\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    static Range(min: Point, max: Point, x: number, y: number) {\r\n        max.x = Math.max(max.x, x);\r\n        max.y = Math.max(max.y, y);\r\n        min.x = Math.min(min.x, x);\r\n        min.y = Math.min(min.y, y);\r\n    }\r\n\r\n    public static getPosition(m: number, n: number, entity: DiagramElement, refCenter: Point) {\r\n        let t, p = [], list, distance = [], min = 999999999, position, i, step = 15;\r\n        let pos: Point = entity.getPos();\r\n        let size: Point = entity.getSize();\r\n        list = [Point.LEFT, Point.RIGHT];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = this.getLRPosition(m, n, entity, list[i]);\r\n            if (t.y >= pos.y && t.y <= (pos.y + size.y + 1)) {\r\n                t.y += (entity['$' + list[i]] * step);\r\n                if (t.y > (pos.y + size.y)) {\r\n                    // Alternative\r\n                    t = Util.getUDPosition(m, n, entity, Point.DOWN, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        list = [Point.UP, Point.DOWN];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = Util.getUDPosition(m, n, entity, list[i]);\r\n            if (t.x >= pos.x && t.x <= (pos.x + size.x + 1)) {\r\n                t.x += (entity['$' + list[i]] * step);\r\n                if (t.x > (pos.x + size.x)) {\r\n                    // Alternative\r\n                    t = this.getLRPosition(m, n, entity, Point.RIGHT, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        for (i = 0; i < p.length; i += 1) {\r\n            if (distance[i] < min) {\r\n                min = distance[i];\r\n                position = p[i];\r\n            }\r\n        }\r\n        return position;\r\n    }\r\n\r\n    public static getUDPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let x, y: number = pos.y;\r\n        if (p === Point.DOWN) {\r\n            y += size.y;\r\n        }\r\n        x = (y - n) / m;\r\n        if (step) {\r\n            x += e['$' + p] * step;\r\n            if (x < pos.x) {\r\n                x = pos.x;\r\n            } else if (x > (pos.x + size.x)) {\r\n                x = pos.x + size.x;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static getLRPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let y: number, x: number = pos.x;\r\n        if (p === Point.RIGHT) {\r\n            x += size.x;\r\n        }\r\n        y = m * x + n;\r\n        if (step) {\r\n            y += e['$' + p] * step;\r\n            if (y < pos.y) {\r\n                y = pos.y;\r\n            } else if (y > (pos.y + size.y)) {\r\n                y = pos.y + size.y;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static hasClass(element: Element, cls: string) {\r\n        let className = element.getAttribute('class');\r\n        return className.indexOf(cls) > 0;\r\n    }\r\n    public static addClass(element: Element, cls: string) {\r\n        if (!Util.hasClass(element, cls)) {\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className + ' ' + cls);\r\n        }\r\n    }\r\n    public static removeClass(element: Element, cls: string) {\r\n        if (Util.hasClass(element, cls)) {\r\n            let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className.replace(reg, ' ').trim());\r\n        }\r\n    }\r\n\r\n    public static startsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.startsWith) {\r\n            return s.indexOf(searchS) === 0;\r\n        }\r\n\r\n        return s.startsWith(searchS);\r\n    }\r\n\r\n    public static endsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.endsWith) {\r\n            let lastIndex = s.lastIndexOf(searchS);\r\n            return lastIndex !== -1 && lastIndex === (s.length - 1);\r\n        }\r\n\r\n        return s.endsWith(searchS);\r\n    }\r\n\r\n    public static includes(s: string, searchS: string): boolean {\r\n        if (!String.prototype.includes) {\r\n            let idx = s.indexOf(searchS);\r\n            return idx > -1;\r\n        }\r\n        if (s === null) {\r\n            return false;\r\n        }\r\n\r\n        return s.includes(searchS);\r\n    }\r\n\r\n    public static isParentOfChild(parent: Element, child: Element): boolean {\r\n\r\n        if (!parent || !child) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isIE()) {\r\n            let children = parent.childNodes;\r\n            // let found = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                let childItem = children[i];\r\n                if (childItem === child) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        return parent.contains(child);\r\n    }\r\n\r\n    public static createCustomEvent(type: string, params?: any): CustomEvent {\r\n        let evt: CustomEvent;\r\n\r\n        if (typeof window['CustomEvent'] !== 'function') {\r\n            params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n            evt = document.createEvent('CustomEvent');\r\n            evt.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\r\n            return evt;\r\n        }\r\n\r\n        evt = new CustomEvent(type);\r\n\r\n        return evt;\r\n    }\r\n\r\n    public static saveToLocalStorage(model: any): boolean {\r\n        if (!this.isAutoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isLocalStorageSupported()) {\r\n            if (model) {\r\n                if (model.$isLoading) {\r\n                    return false;\r\n                }\r\n                let jsonObj = Util.toJson(model);\r\n                let data = JSON.stringify(jsonObj, null, '\\t');\r\n                localStorage.setItem('diagram', data);\r\n            } else {\r\n                localStorage.removeItem('diagram');\r\n            }\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static getDiagramFromLocalStorage(): string {\r\n        if (Util.isLocalStorageSupported()) {\r\n            return localStorage.getItem('diagram');\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    public static isLocalStorageSupported(): boolean {\r\n        if (this.isEdge()) {\r\n            return false;\r\n        }\r\n        return localStorage !== undefined;\r\n    }\r\n}\r\n"],"sourceRoot":""}
Severity: Minor
Found in doc/diagram.js.map by fixme

FIXME found
Open

{"version":3,"sources":["webpack://DiagramJS/webpack/bootstrap","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Adapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Bridge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/BridgeElement.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/CSS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Control.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Data.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventBus.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/JSEPS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Palette.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertiesPanel.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertyBinder.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/RGBColor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/SVGConverter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/ScrumBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Toolbar.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/UML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/VirtualKeyBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/JavaAdapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/BaseElements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/ClassEditor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Graph.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Model.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregate.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Association.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Composition.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Generalisation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Implements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Attribute.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/AutoComplete.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/BR.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Button.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Class.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/ClazzProperty.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Dice.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Div.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Form.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/HTML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/InfoText.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Input.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Label.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Method.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Node.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/SO.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/StereoType.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Symbol.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Table.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/AddNode.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Drag.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/GraphListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/ImportFile.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/NewEdge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Select.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Zoom.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayout.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayoutMin.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/Random.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/main.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/util.ts"],"names":[],"mappings":"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","file":"diagram.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./main.ts\");\n","export abstract class Adapter {\r\n    public id: string = null;\r\n\r\n    abstract update(evt: Object): boolean;\r\n}\r\n","'use strict';\r\n\r\nimport * as controls from './elements/nodes';\r\nimport * as adapters from './adapters';\r\nimport Data from './Data';\r\nimport {Control} from './Control';\r\nimport {Adapter} from './Adapter';\r\nimport {Graph} from './elements';\r\nimport {Util} from './util';\r\nimport {Point} from './elements';\r\n\r\nexport class Bridge extends Control {\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public static version: string = '0.42.01.1601007-1739';\r\n    private controlFactory: Object = {};\r\n    private adapterFactory: Object = {};\r\n    private controls: Object = {};\r\n    private adapters: Object = {};\r\n    private items: Object = {};\r\n    private controlNo: number = 1;\r\n    private online: boolean = true;\r\n    private language: string = navigator.language.toUpperCase();\r\n    private toolBar: HTMLElement;\r\n\r\n    constructor(viewRoot?: HTMLElement) {\r\n        super();\r\n        let i;\r\n\r\n        if (viewRoot) {\r\n            this.$view = viewRoot;\r\n        }\r\n\r\n        let keys: string[] = Object.keys(adapters);\r\n        for (i = 0; i < keys.length; i++) {\r\n            let child = adapters[keys[i]];\r\n            if (child && child.id) {\r\n                this.adapterFactory[child.id.toLowerCase()] = child;\r\n            }\r\n        }\r\n\r\n        keys = Object.keys(controls);\r\n        for (i = 0; i < keys.length; i++) {\r\n            this.addControl(controls[keys[i]]);\r\n        }\r\n        this.addControl(Graph);\r\n\r\n        let that = this;\r\n        window.addEventListener('load', function () {\r\n            let updateOnlineStatus = function updateOnlineStatus() {\r\n                that.setOnline(navigator.onLine);\r\n            };\r\n            window.addEventListener('online', updateOnlineStatus);\r\n            window.addEventListener('offline', updateOnlineStatus);\r\n        });\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public setOnline(value: boolean) {\r\n        this.online = value;\r\n        if (this.toolBar.children[0]) {\r\n            this.toolBar.children[0].className = value ? 'online' : 'offline';\r\n        }\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addToolbar(): boolean {\r\n        if (this.toolBar) {\r\n            return false;\r\n        }\r\n        this.toolBar = document.createElement('div');\r\n        this.toolBar.className = 'onlineStatus';\r\n        let child = document.createElement('div');\r\n        child.className = 'online';\r\n        this.toolBar.appendChild(child);\r\n        child = document.createElement('div');\r\n        child.className = 'lang';\r\n        child.innerHTML = this.language;\r\n        this.toolBar.appendChild(child);\r\n\r\n        let body: HTMLElement = document.getElementsByTagName('body')[0];\r\n        body.insertBefore(this.toolBar, body.firstChild);\r\n        // Refresh Online Status\r\n        this.setOnline(this.online);\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addListener = function (listener: any) {\r\n        this.listener.push(listener);\r\n    };\r\n\r\n    public addControl(control: any) {\r\n        if (control && control.name) {\r\n            this.controlFactory[control.name.toLowerCase()] = control;\r\n        }\r\n    }\r\n\r\n    public getId(): string {\r\n        return 'control' + (this.controlNo++);\r\n    }\r\n\r\n    public adapterUpdate(message: string) {\r\n        let keys: string[] = Object.keys(this.adapters);\r\n        if (keys.length > 0) {\r\n            let i;\r\n            for (i = 0; i < keys.length; i++) {\r\n                let adapterList = this.adapters[keys[i]];\r\n                if (adapterList instanceof Adapter) {\r\n                    adapterList.update(message);\r\n                } else {\r\n                    for (let adapter of adapterList) {\r\n                        adapter.update(message);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        let config = {}, className: string, id: string;\r\n        if (typeof(json) === 'string') {\r\n            // Only a String\r\n            config['id'] = '' + json;\r\n            let item = document.getElementById(config['id']);\r\n            let className: string;\r\n            if (item) {\r\n                className = item.getAttribute('class');\r\n                if (!className) {\r\n                    className = item.getAttribute('classname') || '';\r\n                }\r\n                // Found Element and now config Data element\r\n                if (item.getAttribute('property')) {\r\n                    if (this.hasItem(item.getAttribute('property'))) {\r\n                        let data = this.getItem(item.getAttribute('property'));\r\n                        for (let key in data.prop) {\r\n                            if (item.getAttribute(key)) {\r\n                                data.setValue(key, item.getAttribute(key));\r\n                            }\r\n                        }\r\n                        if (item.getAttribute('property')) {\r\n                            // TODO: FIXME!!!\r\n                            // data.property = item.getAttribute(\"property\");\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                className = '' + json;\r\n            }\r\n            className = className.toLowerCase();\r\n            config['className'] = className;\r\n        } else {\r\n            config = <JSON>json;\r\n        }\r\n        // Config validate\r\n        if (!config['id']) {\r\n            config['id'] = this.getId();\r\n        }\r\n        // Backup for Old Graph\r\n        if (!config['className'] && (config['type'] === 'clazzdiagram' || config['type'] === 'objectdiagram')) {\r\n            config['className'] = 'graph';\r\n        }\r\n\r\n        className = config['className'] || config['class'];\r\n        className = className.toLocaleLowerCase();\r\n        id = config['id'];\r\n\r\n        // Check For Control or Data\r\n        if ((config['prop'] || config['upd'] || config['rem']) && this.controls[id] === null) {\r\n            // Its Data\r\n            let newData = !this.hasItem(config['id']);\r\n            let item: Data = this.getItem(config['id']);\r\n            // TODO: FIXME!!!\r\n            // if (id && className && !item.property) {\r\n            //      item.property = className;\r\n            // }\r\n            if (newData) {\r\n                for (let i in this.controls) {\r\n                    if (this.controls.hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    this.controls[i].addItem(this, item);\r\n                }\r\n            }\r\n            // Add all Values to item\r\n            item.addProperties(config);\r\n            // Bridge.addProperties(config['prop'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return item;\r\n        }\r\n\r\n        let control;\r\n        if (this.controls[id]) {\r\n            control = this.controls[id];\r\n            control.initControl(json);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return control;\r\n        }\r\n\r\n        if (typeof(this.controlFactory[className]) === 'object' || typeof(this.controlFactory[className]) === 'function') {\r\n            let obj = this.controlFactory[className];\r\n            control = new obj(json);\r\n            Util.initControl(owner || this, control, config['property'], id, json);\r\n\r\n            if (control.id) {\r\n                this.controls[control.id] = control;\r\n            } else {\r\n                this.controls[id] = control;\r\n            }\r\n\r\n            // create DataObject and register this control as listener to it\r\n            // let obj = {id:id};\r\n            // let data: Data = this.load(obj);\r\n            // data.addListener(this);\r\n\r\n            // Try to Show\r\n            if (typeof control.getSVG === 'function' && typeof control.getSize === 'function') {\r\n                let size: Point = control.getSize();\r\n\r\n                let svg = Util.createShape({\r\n                    tag: 'svg',\r\n                    id: 'root',\r\n                    width: size.x,\r\n                    height: size.y\r\n                });\r\n\r\n                let view = control.getSVG();\r\n                svg.appendChild(view);\r\n                document.getElementsByTagName('body')[0].appendChild(svg);\r\n            }\r\n            return control;\r\n        }\r\n        return null;\r\n        // bridge.load('{class:table, columns:[{id:'firstname'}, {id:'lastname'}]}');\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n\r\n        if (this.items[id] !== undefined) {\r\n            return true;\r\n        }\r\n        id = id.split('.')[0];\r\n        return (this.items[id] !== undefined);\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return this.items;\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        let item = this.items[id];\r\n        if (!item) {\r\n            id = id.split('.')[0];\r\n            item = this.items[id];\r\n            if (!item) {\r\n                item = new Data();\r\n                item.id = id;\r\n                this.items[id] = item;\r\n            }\r\n        }\r\n        return item;\r\n    }\r\n\r\n    /**\r\n     * Method for executing user input -> Event\r\n     * @param object\r\n     * @param attribute\r\n     * @param oldValue\r\n     * @param newValue\r\n     * @returns {boolean}\r\n     */\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        alert('Bridge.setValue: oldVal:' + oldValue + ', newVal: ' +  + newValue + ', attribute: ' + attribute + ', object: ' + JSON.stringify(object));\r\n        let obj: Data;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n\r\n        } else if (object instanceof Data) {\r\n            obj = object;\r\n            id = object.id;\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = <Data>object;\r\n            id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return false;\r\n        }\r\n        if (obj) {\r\n            // Execute Update to Data\r\n            obj.setValue(attribute, newValue);\r\n            // Could be done here, but currently is done at this.execueChange..:\r\n            // obj[attribute] = value;\r\n        }\r\n\r\n        /*let tmp = {'id': id};\r\n        if (typeof(newValue) !== 'undefined' && newValue !== null) {\r\n            let upd = {};\r\n            upd[attribute] = newValue;\r\n            tmp['upd'] = upd;\r\n        }\r\n        if (typeof(oldValue) !== 'undefined' && oldValue !== null) {\r\n            let rem = {};\r\n            rem[attribute] = oldValue;\r\n            tmp['rem'] = rem;\r\n        }*/\r\n        // this.load(tmp);\r\n        return true;\r\n    }\r\n\r\n    public getValue(object: Object, attribute: string): any {\r\n        let obj: Object;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = object;\r\n            // id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return;\r\n        }\r\n        if (obj) {\r\n            if (obj.hasOwnProperty(attribute)) {\r\n                return obj[attribute];\r\n            } else if (obj instanceof Data) {\r\n                return (<Data>obj).getValue(attribute);\r\n            } else {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    public getNumber(object: Object, attribute: string, defaultValue: number = 0): number {\r\n        let res = <number>this.getValue(object, attribute);\r\n        if (typeof res === 'number') {\r\n            return res;\r\n        } else if (typeof res === 'string') {\r\n            // check whether res is a number\r\n            let value = Number(res);\r\n            if (value || value === 0) {\r\n                return value;\r\n            }\r\n        }\r\n        return defaultValue;\r\n    }\r\n\r\n    getControl(controlId: string) {\r\n        return this.controls[controlId];\r\n    }\r\n\r\n    public registerListener(eventType: string, control: Control, callBackfunction: string): Control {\r\n        if (typeof control === 'string') {\r\n            control = this.getControl(<string>control);\r\n        }\r\n        if (!control) {\r\n            return null;\r\n        }\r\n        if (eventType) {\r\n            eventType = eventType.toLowerCase();\r\n        }\r\n        control.registerListenerOnHTMLObject(eventType);\r\n        if (callBackfunction) {\r\n            let adapter: DelegateAdapter = new DelegateAdapter();\r\n            adapter.callBackfunction = callBackfunction;\r\n            adapter.id = control.getId();\r\n            this.addAdapter(adapter, eventType);\r\n        }\r\n        return control;\r\n    }\r\n\r\n    public addAdapter(adapter: Adapter | string, eventType: string): Adapter {\r\n        if (!eventType) {\r\n            eventType = '';\r\n        }\r\n        let result: Adapter;\r\n        if (adapter instanceof String) {\r\n            let obj = this.adapterFactory[adapter.toLowerCase()];\r\n            result = new obj();\r\n        } else {\r\n            result = <Adapter>adapter;\r\n        }\r\n        let handlers = this.adapters[eventType];\r\n\r\n        if (handlers === null || handlers === undefined) {\r\n            handlers = [];\r\n            this.adapters[eventType] = handlers;\r\n        }\r\n        handlers.push(result);\r\n        return result;\r\n    }\r\n\r\n    public fireEvent(evt: Event): void {\r\n        let handlers = this.adapters[''];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n        handlers = this.adapters[evt['eventType']];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport class DelegateAdapter extends Adapter {\r\n    adapter: Adapter;\r\n    callBackfunction: string;\r\n\r\n    update(evt: Event): boolean {\r\n        if (this.adapter) {\r\n            this.adapter.update(evt);\r\n            return true;\r\n        } else if (this.callBackfunction) {\r\n            return this.executeFunction(this.callBackfunction, evt);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public setAdapter(adapter: Adapter): boolean {\r\n        this.adapter = adapter;\r\n        return true;\r\n    }\r\n\r\n    private executeFunction(strValue: string, evt: Event): boolean {\r\n        let scope = window;\r\n        let scopeSplit = strValue.split('.');\r\n        for (let i = 0; i < scopeSplit.length - 1; i++) {\r\n            scope = scope[scopeSplit[i]];\r\n            if (scope === undefined) {\r\n                return false;\r\n            }\r\n        }\r\n        let fn: any = scope[scopeSplit[scopeSplit.length - 1]];\r\n        if (typeof fn === 'function') {\r\n            fn.call(scope);\r\n            return true;\r\n        } else {\r\n            window['callBack1'].update(evt);\r\n\r\n        }\r\n        return false;\r\n    }\r\n}\r\n","'use strict';\r\nimport Data from './Data';\r\n\r\nexport default class BridgeElement {\r\n    private static elementSet: BridgeElement[] = [];\r\n    public model: Data;\r\n    public id: string;\r\n    public gui: HTMLElement;\r\n\r\n    constructor(model: Data) {\r\n        this.model = model;\r\n        this.id = model.id;\r\n        BridgeElement.elementSet.push(this);\r\n    }\r\n}\r\n","import {Util} from './util';\r\n\r\n// \t\t\t\t######################################################### CSS #########################################################\r\nexport class CSS {\r\n    public css: Object;\r\n    private name: string;\r\n\r\n    constructor(name: string, item?: any) {\r\n        let i, value, border: string, prop, el;\r\n        this.name = name;\r\n        this.css = {};\r\n        if (!item) {\r\n            return;\r\n        }\r\n\r\n        el = window.getComputedStyle(item, null);\r\n        border = el.getPropertyValue('border');\r\n        for (i in el) {\r\n            prop = i;\r\n            value = el.getPropertyValue(prop);\r\n            if (value && value !== '') {\r\n                // optimize CSS\r\n                if (border) {\r\n                    if (prop === 'border-bottom' || prop === 'border-right' || prop === 'border-top' || prop === 'border-left') {\r\n                        if (value !== border) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-color' || prop === 'border-bottom-color' || prop === 'border-right-color' || prop === 'border-top-color' || prop === 'border-left-color') {\r\n                        if (border.substring(border.length - value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-width') {\r\n                        if (border.substring(0, value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else {\r\n                        this.css[prop] = value;\r\n                    }\r\n                } else {\r\n                    this.css[prop] = value;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public static getStdDef() {\r\n        let child, def = Util.create({tag: 'defs'});\r\n\r\n        child = Util.create({tag: 'filter', id: 'drop-shadow'});\r\n        child.appendChild(Util.create({tag: 'feGaussianBlur', 'in': 'SourceAlpha', result: 'blur-out', stdDeviation: 2}));\r\n        child.appendChild(Util.create({tag: 'feOffset', 'in': 'blur-out', dx: 2, dy: 2}));\r\n        child.appendChild(Util.create({tag: 'feBlend', 'in': 'SourceGraphic', mode: 'normal'}));\r\n        def.appendChild(child);\r\n        child = Util.create({tag: 'linearGradient', id: 'reflect', x1: 0, x2: 0, y1: '50%', y2: 0, spreadMethod: 'reflect'});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#aaa', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#eee', offset: '100%'}));\r\n        def.appendChild(child);\r\n\r\n        child = Util.create({tag: 'linearGradient', id: 'classelement', x1: 0, x2: '100%', y1: '100%', y2: 0});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#fff', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#d3d3d3', offset: 1}));\r\n        def.appendChild(child);\r\n\r\n        return def;\r\n    }\r\n\r\n    public static getSubstring(str: string, search: string, startChar: string, endChar: string, splitter: string): any {\r\n        let pos, end, count = 0, array = [];\r\n        pos = str.indexOf(search);\r\n        if (pos > 0) {\r\n            end = str.indexOf(startChar, pos);\r\n            pos = end + 1;\r\n            if (end > 0) {\r\n                while (end < str.length) {\r\n                    if (str.charAt(end) === startChar) {\r\n                        count += 1;\r\n                    }\r\n                    if (str.charAt(end) === endChar) {\r\n                        count -= 1;\r\n                        if (count === 0) {\r\n                            if (splitter && pos !== end) {\r\n                                array.push(str.substring(pos, end).trim());\r\n                            }\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (str.charAt(end) === splitter && count === 1) {\r\n                        array.push(str.substring(pos, end).trim());\r\n                        pos = end + 1;\r\n                    }\r\n\r\n                    end += 1;\r\n                }\r\n                if (splitter) {\r\n                    return array;\r\n                }\r\n                return str.substring(pos, end);\r\n            }\r\n            return str.substring(pos);\r\n        }\r\n        return '';\r\n    }\r\n\r\n    public static addStyle(board: SVGElement, styleName: any) {\r\n        let defs, style: any, css;\r\n        if (styleName.baseVal || styleName.baseVal === '') {\r\n            styleName = styleName.baseVal;\r\n        }\r\n        if (!styleName) {\r\n            return;\r\n        }\r\n        defs = CSS.getDefs(board);\r\n        if (defs.getElementsByTagName('style').length > 0) {\r\n            style = defs.getElementsByTagName('style')[0];\r\n        } else {\r\n            style = Util.create({tag: 'style'});\r\n            style.item = {};\r\n            defs.appendChild(style);\r\n        }\r\n        if (!style.item[styleName]) {\r\n            css = Util.getStyle(styleName);\r\n            style.item[styleName] = css;\r\n            style.innerHTML = style.innerHTML + '\\n.' + styleName + css.getSVGString(board);\r\n        }\r\n    }\r\n\r\n    public static addStyles(board: SVGElement, item: any) {\r\n        if (!item) {\r\n            return;\r\n        }\r\n        let items, i, className: any = item.className;\r\n\r\n        if (className) {\r\n            if (className.baseVal || className.baseVal === '') {\r\n                className = className.baseVal;\r\n            }\r\n        }\r\n        if (className) {\r\n            items = className.split(' ');\r\n            for (i = 0; i < items.length; i += 1) {\r\n                CSS.addStyle(board, items[i].trim());\r\n            }\r\n        }\r\n        for (i = 0; i < item.childNodes.length; i += 1) {\r\n            this.addStyles(board, item.childNodes[i]);\r\n        }\r\n    }\r\n\r\n    public static getDefs(board: SVGElement) {\r\n        let defs;\r\n        if (board.getElementsByTagName('defs').length < 1) {\r\n            defs = Util.create({tag: 'defs'});\r\n            board.insertBefore(defs, board.childNodes[0]);\r\n        } else {\r\n            defs = board.getElementsByTagName('defs')[0];\r\n        }\r\n        return defs;\r\n    }\r\n\r\n    public add(key: string, value: string) {\r\n        this.css[key] = value;\r\n    }\r\n\r\n    public get(key: string): any {\r\n        let i;\r\n        for (i in this.css) {\r\n            if (i === key) {\r\n                return this.css[key];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public getNumber(key: string) {\r\n        return parseInt((this.get(key) || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    public getSVGString(board: SVGElement) {\r\n        let str, pos, style, defs, value, filter, z;\r\n        str = '{';\r\n        for (style in this.css) {\r\n            if (!this.css.hasOwnProperty(style)) {\r\n                continue;\r\n            }\r\n            if (style === 'border') {\r\n                pos = this.css[style].indexOf(' ');\r\n                str = str + 'stroke-width: ' + this.css[style].substring(0, pos) + ';';\r\n                pos = this.css[style].indexOf(' ', pos + 1);\r\n                str = str + 'stroke:' + this.css[style].substring(pos) + ';';\r\n            } else if (style === 'background-color') {\r\n                str = str + 'fill: ' + this.css[style] + ';';\r\n            } else if (style === 'background') {\r\n                value = CSS.getSubstring(this.css[style], 'linear-gradient', '(', ')', ',');\r\n                if (value.length > 0) {\r\n                    defs = CSS.getDefs(board);\r\n                    if (value[0] === '45deg') {\r\n                        pos = 1;\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '100%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                    } else {\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '0%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                        pos = 0;\r\n                    }\r\n                    defs.appendChild(filter);\r\n                    while (pos < value.length) {\r\n                        value[pos] = value[pos].trim();\r\n                        z = value[pos].lastIndexOf(' ');\r\n                        filter.appendChild(Util.create({\r\n                            tag: 'stop',\r\n                            'offset': value[pos].substring(z + 1),\r\n                            style: {'stop-color': value[pos].substring(0, z)}\r\n                        }));\r\n                        pos += 1;\r\n                    }\r\n                    str = str + 'fill: url(#' + this.name + ');';\r\n                    continue;\r\n                }\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n                // box-shadow: inset 0 3px 4px #888;\r\n// \t\t\t\t<defs>\r\n// \t\t\t\t\t<filter id='drop-shadow'>\r\n// \t\t\t\t\t\t<feGaussianBlur in='SourceAlpha' result='blur-out' stdDeviation='2'></feGaussianBlur>\r\n// \t\t\t\t\t\t<feOffset in='blur-out' dx='2' dy='2'></feOffset>\r\n// \t\t\t\t\t\t<feBlend in='SourceGraphic' mode='normal'></feBlend>\r\n// \t\t\t\t\t</filter>\r\n// \t\t\t\t</defs>\r\n            } else {\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n            }\r\n        }\r\n        str = str + '}';\r\n        return str;\r\n    }\r\n}\r\n","import {Bridge} from './Bridge';\r\nimport Data from './Data';\r\nimport EventListener from './EventListener';\r\n\r\nexport abstract class Control {\r\n    public $owner: Control;\r\n    /**\r\n     *\r\n     */\r\n    public property: string;\r\n    public id: string;\r\n    public $view: Element;\r\n    public $viewData: Data = null;\r\n\r\n    protected $model: Data;\r\n    protected $viewListener: EventListenerOrEventListenerObject;\r\n\r\n    /**\r\n     * The properties, we want to listen to\r\n     */\r\n    // static defaultProperties: string[] = [];\r\n\r\n    // public getProperties(): string[] {\r\n    //     return this.properties;\r\n    // }\r\n\r\n    constructor() {\r\n        // e.g. this.properties.push(\"key\");\r\n        // this.properties.push(\"property\");\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data: Data = new Data();\r\n        if (oldData) {\r\n            oldData.removeListener(this);\r\n            const keys: string[] = oldData.getKeys();\r\n            for (let i = 0; i < keys.length; i++) {\r\n                let attr = keys[i];\r\n                if (this.$view) {\r\n                    if (this.$view[attr] === null) {\r\n                        continue;\r\n                    }\r\n                    data.setValue(attr, this.$view[attr]);\r\n                } else {\r\n                    data.setValue(attr, null);\r\n                }\r\n            }\r\n        }\r\n        data.addListener(this);\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     *  Set the new HTMLElement and attach listener to it.\r\n     *  Also remove Listeners from old one and return the old one, if present.\r\n     * @param element\r\n     * @returns The previous Element\r\n     */\r\n    public setView(element: Element): Element {\r\n        let oldElement: Element = null;\r\n        if (this.$view) {\r\n            oldElement = this.$view;\r\n            if (this.$viewListener) {\r\n                oldElement.removeEventListener('change', this.$viewListener);\r\n            }\r\n        }\r\n        this.$view = element;\r\n\r\n        if (this.$viewListener) {\r\n            element.addEventListener('change', this.$viewListener);\r\n        }\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n        return element;\r\n    }\r\n\r\n    public init(owner: Control, property ?: string, id ?: string): Control {\r\n        if (!this.$owner) {\r\n            this.$owner = owner;\r\n        }\r\n        if (!this.id) {\r\n            this.id = id;\r\n        }\r\n        if (!this.property) {\r\n            this.property = this.generateID(property, id);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public createEventListener(): EventListener {\r\n        return new EventListener();\r\n    }\r\n\r\n    public getRoot(): Control {\r\n        if (this.$owner) {\r\n            return this.$owner.getRoot();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return null;\r\n    }\r\n\r\n    public initControl(data: any): void {\r\n        if (this.$view === null || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (data.hasOwnProperty('prop')) {\r\n            for (let key in data.prop) {\r\n                let oldValue = this.$viewData.getValue(key);\r\n                if (this.$view) {\r\n                    this.updateElement(key, oldValue, data.prop[key]);\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        let hasRem = data.hasOwnProperty('rem');\r\n        let removed: any[] = [];\r\n        if (data.hasOwnProperty('upd')) {\r\n            for (let key in data.upd) {\r\n                let oldValue;\r\n                let newValue = data.upd[key];\r\n                let entity;\r\n                const temp = false;\r\n                if (temp) {\r\n//                if (newValue == this.getViewData().getValue(key)) {\r\n                    // new Value assertEquals old value, so we don't need to change anything..\r\n                    // delete data.rem[key];\r\n                    if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                        removed.push(data.rem[key]);\r\n                    }\r\n                    continue;\r\n                }\r\n                if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                    // if there's a rem, the oldValue from rem will be used and expected to be right..\r\n                    oldValue = data.rem[key];\r\n                    if (this.$model && this.$model.getValue(key) === oldValue) {\r\n                        entity = this.$model;\r\n//                    } else if (oldValue == this.getViewData().getValue(key)) {\r\n//                        $graphModel = this.getViewData();\r\n                    }\r\n                    delete data.rem[key];\r\n\r\n                    if (entity === null) {\r\n                        continue;\r\n                    }\r\n                }\r\n                if (entity) {\r\n                    if (!hasRem) {\r\n                        if (entity === this.$model) {\r\n                            oldValue = this.$model.getValue(key);\r\n                        } else {\r\n//                           oldValue = this.getViewData().getValue(key);\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (this.$model) {\r\n                        // try to get the oldValue directly from the $graphModel...\r\n                        oldValue = this.$model.getValue(key);\r\n                        entity = this.$model;\r\n                    }\r\n                    if (oldValue === null) {\r\n                        // if there was no data in the entity, we try to get oldValue from the $view\r\n//                        oldValue = this.getViewData().getValue(key);\r\n//                        entity = this.getViewData();\r\n                    }\r\n                }\r\n\r\n                //  || oldValue !== this.$viewData.getValue(key)\r\n                if (newValue === oldValue) {\r\n                    // no match, so update should be wrong...\r\n                    continue;\r\n                }\r\n                const viewDataOldValue = this.$viewData.getValue(key);\r\n                if (entity === this.$viewData) {\r\n\r\n                    // this.getViewData().setValue(key, newValue);\r\n                    if (this.$view) {\r\n                        this.updateElement(key, viewDataOldValue, newValue);\r\n                    }\r\n                } else {\r\n                    this.updateElement(key, viewDataOldValue, newValue);\r\n                }\r\n                this.getRoot().setValue(entity, key, newValue, oldValue);\r\n            }\r\n            // this.saveViewInData();\r\n        }\r\n        if (hasRem) {\r\n            for (let key in data.rem) {\r\n                if (removed.hasOwnProperty(key)) {\r\n                    continue;\r\n                }\r\n                let oldValue;\r\n//                    this.getViewData().getValue(key);\r\n//                if (oldValue != data.rem[key] || data.upd !== undefined && (data.upd[key] == oldValue || this.getViewData().getValue(key) == data.upd[key])) {\r\n                // if rem is invalid, or if the change is already applied, don't do anything..\r\n                //                  continue;\r\n                //            }\r\n                // delete this.$viewData.getValue(key);\r\n                // this.saveViewInData();\r\n                this.updateElement(key, null, null);\r\n                // this.$view.removeAttribute(key);\r\n                if (this.$model) {\r\n//                    this.getRoot().setValue(this.$graphModel, key, this.getViewData().getValue(key), oldValue);\r\n                }\r\n            }\r\n        }\r\n        if (this.property) {\r\n            // Add listener to Input field:\r\n            this.$view['onchange'] = ((ev: Event) => {\r\n                    this.controlChanged(ev);\r\n                }\r\n            );\r\n        }\r\n//        this.saveViewInData();\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        return null;\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n        return false;\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return new Object();\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue ?: Object): boolean {\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Is called when a object, that the Control is listening to, changes its value.\r\n     * @param entity\r\n     * @param property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        if (oldValue === newValue || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (oldValue === this.$viewData.getValue(property)) {\r\n            return;\r\n        }\r\n        // Set NewData to ViewData and Fire PC\r\n        this.$viewData.setValue(property, newValue);\r\n\r\n//\r\n//\r\n//         // if (entity == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.entity) {\r\n//                 alert(\"entity = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.entity.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.entity, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the entity is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"entity = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n// >>>>>>> addOldFunctions\r\n        if (this.$viewData) {\r\n            this.$viewData.setValue(property, newValue);\r\n        }\r\n        if (this.$model) {\r\n            this.$model.setValue(property, newValue);\r\n        }\r\n        this.updateElement(property, oldValue, newValue);\r\n    }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            // Do Nothing\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  Update GUI Element\r\n     * @param {string} property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        if (this.$view && this.$view.hasAttribute(property)) {\r\n            this.$view.setAttribute(property, newValue);\r\n        }\r\n    }\r\n\r\n//        if (oldValue == newValue) {\r\n//            return;\r\n//        }\r\n//        if (oldValue == this.$viewData.getValue(property)) {\r\n//            return;\r\n//        }\r\n//        // Set NewData to ViewData and Fire PC\r\n//        this.$viewData.setValue(property, newValue);\r\n//\r\n//\r\n//\r\n//         // if ($graphModel == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.$graphModel) {\r\n//                 alert(\"$graphModel = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.$graphModel.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.$graphModel, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the $graphModel is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"$graphModel = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n\r\n    public getId(): string {\r\n        return this.id;\r\n    }\r\n\r\n    public load(json: JSON | Object, owner ?: Control): any {\r\n        // Do Nothing\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.property || entity.hasProperty(this.property)) {\r\n                entity.addListener(this, this.property);\r\n                this.$model = entity;\r\n            }\r\n        }\r\n    }\r\n\r\n    public appendChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.appendChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].appendChild(child.$view);\r\n        }\r\n    }\r\n\r\n    public removeChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.removeChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].removeChild(child.$view);\r\n        }\r\n    }\r\n\r\n    /*\r\n     Property looks like: 't1.talk'\r\n     */\r\n    public setProperty(property: string): void {\r\n        if (!this.property) {\r\n            return;\r\n        }\r\n        let objId = property.split('.')[0];\r\n        let object = null;\r\n        if (this.$owner.hasItem(objId)) {\r\n            object = this.$owner.getItem(objId);\r\n        }\r\n\r\n        // remove listener on old object\r\n        if (this.$model) {\r\n            // this.$graphModel.removeListener(this);\r\n            this.$model.removeListener(this, this.lastProperty);\r\n        }\r\n        this.property = property;\r\n\r\n        // add listener to object..\r\n        if (object) {\r\n            object.addListener(this, this.lastProperty);\r\n            this.$model = object;\r\n            this.updateElement(this.lastProperty, this.$viewData.getValue(this.lastProperty), object.prop[this.lastProperty]);\r\n        }\r\n    }\r\n\r\n    public registerListenerOnHTMLObject(eventType: string): boolean {\r\n        return this.registerEventListener(eventType, <HTMLElement>this.$view);\r\n    }\r\n\r\n    // Normal Event HTML-Event\r\n    // Eventtype:string,\r\n    // id:string of Control\r\n    public fireEvent(evt: Event): void {\r\n        // Do Nothing\r\n    }\r\n\r\n    public isClosed(): boolean {\r\n        return this['closed'];\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        if (this.isClosed()) {\r\n            return this.$owner.getShowed();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * the id of the Data object, that contains the properties of the view\r\n     * @returns {string}\r\n     */\r\n    protected getControlDataID() {\r\n        return this.id + '_data';\r\n    }\r\n\r\n    protected generateID(property ?: string, id ?: string): string {\r\n        if (property) {\r\n            return property;\r\n        }\r\n        if (id) {\r\n            // will generate a data Object suitable for the Control..\r\n            // must be overridden, if the changeEvent shouldn't listen on value...\r\n//            return id + '.' + this.getStandardProperty();//+ \"_data\"\r\n            return id + '.' + '_data';\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected updateViewData() {\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n        const keys: string[] = this.$viewData.getKeys();\r\n        for (let i = 0; i < keys.length; i++) {\r\n            let attr = keys[i];\r\n            if (this.$view[attr] === null) {\r\n                continue;\r\n            }\r\n            this.$viewData.setValue(attr, this.$view[attr]);\r\n        }\r\n    }\r\n\r\n    protected registerEventListener(eventType: string, htmlElement: HTMLElement): boolean {\r\n        if (!htmlElement) {\r\n            return false;\r\n        }\r\n        if (htmlElement instanceof HTMLElement === false) {\r\n            return false;\r\n        }\r\n        let control = this;\r\n        let listener = (t: any) => {\r\n            t.eventType = eventType;\r\n            t.id = control.id;\r\n            control.$owner.fireEvent(t);\r\n        };\r\n        htmlElement.addEventListener(eventType, listener);\r\n        return true;\r\n    }\r\n\r\n    get lastProperty(): string {\r\n        if (!this.property) {\r\n            return '';\r\n        }\r\n        let arr: string[] = this.property.split('.');\r\n        return arr[arr.length - 1];\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\n\r\nexport default class Data {\r\n    public prop = {};\r\n    id: string;\r\n    // $listener: Control[] = [];\r\n    $listener: Object = {};\r\n\r\n    private static nullCheck(property: string): string {\r\n        if (property === undefined || property === null) {\r\n            property = '';\r\n        }\r\n        return property;\r\n    }\r\n    public getKeys(): string[] {\r\n        return Object.keys(this.prop);\r\n    }\r\n\r\n    public addProperties(values: Object) {\r\n        if (!values) {\r\n            return;\r\n        }\r\n        if (values['prop']) {\r\n            let prop = values['prop'];\r\n            for (let property in prop) {\r\n                if (prop.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (prop[property] !== null && '' !== prop[property]) {\r\n                    this.setValue(property, prop[property]);\r\n                }\r\n            }\r\n        } else {\r\n            let upd = values['upd'] || {};\r\n            let rem = values['rem'] || {};\r\n\r\n            for (let property in upd) {\r\n                if (upd.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (rem.hasOwnProperty(property) === false) {\r\n                    this.setValue(property, upd[property]);\r\n                } else {\r\n                    // if we have a rem, we wan't to check, if its a valid change (teh old value is the value in rem)\r\n                    if (this.getValue(property) === rem[property]) {\r\n                        this.setValue(property, upd[property]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getValue(attribute: string) {\r\n        return this.prop[attribute];\r\n    }\r\n\r\n    public setValue(attribute: string, newValue: any): void {\r\n        let oldValue = this.prop[attribute];\r\n        if (oldValue === newValue && newValue !== null) {\r\n            return;\r\n        }\r\n        this.prop[attribute] = newValue;\r\n        this.firePropertyChange(attribute, oldValue, newValue);\r\n    }\r\n\r\n    public addTo(attribute: string, newValue: any): boolean {\r\n        let add: boolean;\r\n        if (this.prop[attribute]) {\r\n            if (this.prop[attribute].contains(newValue) === false) {\r\n                add = true;\r\n            }\r\n        } else {\r\n            this.prop[attribute] = [];\r\n            add = true;\r\n        }\r\n        if (add) {\r\n            this.prop[attribute].push(newValue);\r\n            this.firePropertyChange(attribute, null, newValue);\r\n        }\r\n        return add;\r\n    }\r\n\r\n    public removeFrom(attribute: string, newValue: any): boolean {\r\n        if (!this.prop[attribute]) {\r\n            return true;\r\n        }\r\n        let pos: number = this.prop[attribute].indexOf(newValue);\r\n        if (pos < 0) {\r\n            return true;\r\n        }\r\n        this.prop[attribute].splice(pos, 1);\r\n        this.firePropertyChange(attribute, newValue, null);\r\n        return true;\r\n    }\r\n\r\n    public addListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(property);\r\n        if (!listeners) {\r\n            listeners = [];\r\n            this.$listener[Data.nullCheck(property)] = listeners;\r\n        }\r\n        listeners.push(control);\r\n    }\r\n\r\n    public removeListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners = this.getListeners(property);\r\n        if (listeners === null) {\r\n            return;\r\n        }\r\n        let pos = listeners.indexOf(control);\r\n        if (pos >= 0) {\r\n            listeners.splice(pos, 1);\r\n        }\r\n        if (listeners.length === 0 && Data.nullCheck(property) !== '') {\r\n            // only remove, if it's not the default listener list...\r\n            delete this.$listener[property];\r\n        }\r\n    }\r\n\r\n    public hasProperty(property: string): boolean {\r\n        return this.prop.hasOwnProperty(property);\r\n    }\r\n\r\n    public addFrom(attribute: string, oldData: Data): void {\r\n        if (oldData) {\r\n            this.setValue(attribute, oldData.getValue(attribute));\r\n        } else {\r\n            this.setValue(attribute, null);\r\n        }\r\n    }\r\n\r\n    public removeKey(key: string): any {\r\n        if (this.hasProperty(key)) {\r\n            const oldValue = this.prop[key];\r\n            delete this.prop[key];\r\n            return oldValue;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected getListeners(property: string): PropertyChangeSupport[] {\r\n        property = Data.nullCheck(property);\r\n        return this.$listener[property];\r\n    }\r\n\r\n    protected firePropertyChange(attribute: string, oldValue: Object, newValue: Object) {\r\n        attribute = Data.nullCheck(attribute);\r\n        // at first fire for the given property\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(attribute);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n        // now we need to fire the Listeners that wan't to listen to everything\r\n        listeners = this.getListeners(null);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport interface EventHandler {\r\n    canHandle(): boolean;\r\n    handle(event: Event, element: DiagramElement): boolean;\r\n    setActive(active: boolean): void;\r\n}\r\n\r\nexport class EventBus {\r\n    public static CREATE: string = 'Create';\r\n    public static EDITOR: string = 'Editor';\r\n    public static OPENPROPERTIES: string = 'openProperties';\r\n    public static RELOADPROPERTIES: string = 'reloadProperties';\r\n    public static ELEMENTMOUSEDOWN: string = 'ELEMENT:MOUSEDOWN';\r\n    public static ELEMENTMOUSEUP: string = 'ELEMENT:MOUSEUP';\r\n    public static ELEMENTMOUSELEAVE: string = 'ELEMENT:MOUSELEAVE';\r\n    public static ELEMENTMOUSEMOVE: string = 'ELEMENT:MOUSEMOVE';\r\n    public static ELEMENTMOUSEWHEEL: string = 'ELEMENT:MOUSEWHEEL';\r\n    public static ELEMENTCLICK: string = 'ELEMENT:CLICK';\r\n    public static ELEMENTDBLCLICK: string = 'ELEMENT:DBLCLICK';\r\n    public static ELEMENTDRAG: string = 'ELEMENT:DRAG';\r\n    public static ELEMENTDRAGOVER: string = 'ELEMENT:DRAGOVER';\r\n    public static ELEMENTDROP: string = 'ELEMENT:DROP';\r\n    public static ELEMENTDRAGLEAVE: string = 'ELEMENT:DRAGLEAVE';\r\n\r\n    public static EVENTS: string[] = [\r\n        EventBus.CREATE,\r\n        EventBus.EDITOR,\r\n        EventBus.OPENPROPERTIES,\r\n        EventBus.RELOADPROPERTIES,\r\n        EventBus.ELEMENTMOUSEDOWN,\r\n        EventBus.ELEMENTMOUSEUP,\r\n        EventBus.ELEMENTMOUSELEAVE,\r\n        EventBus.ELEMENTMOUSEMOVE,\r\n        EventBus.ELEMENTMOUSEWHEEL,\r\n        EventBus.ELEMENTCLICK,\r\n        EventBus.ELEMENTDRAG,\r\n        EventBus.ELEMENTDBLCLICK,\r\n        EventBus.ELEMENTDRAGOVER,\r\n        EventBus.ELEMENTDROP,\r\n        EventBus.ELEMENTDRAGLEAVE,\r\n    ];\r\n\r\n    private static handlers = {};\r\n\r\n    private static $activeHandler: string = '';\r\n\r\n    public static setActiveHandler(handler: string): void {\r\n        this.$activeHandler = handler;\r\n    }\r\n\r\n    public static isHandlerActiveOrFree(handler: string, notEmpty?: boolean): boolean {\r\n        if (notEmpty) {\r\n            return this.$activeHandler === handler;\r\n        }\r\n        return this.$activeHandler === handler || this.$activeHandler === '' || this.$activeHandler === undefined;\r\n    }\r\n\r\n    public static isAnyHandlerActive(): boolean {\r\n        return !(this.$activeHandler === '' || this.$activeHandler === undefined);\r\n    }\r\n\r\n    public static releaseActiveHandler(): void {\r\n        this.$activeHandler = '';\r\n    }\r\n\r\n    public static getActiveHandler(): string {\r\n        return this.$activeHandler;\r\n    }\r\n\r\n    static register(control: Control, view: Element) {\r\n        let events: string[];\r\n        if (typeof control['getEvents'] === 'function') {\r\n            events = control['getEvents']();\r\n        }\r\n\r\n        if (!events || !view) {\r\n            return;\r\n        }\r\n        for (let event of events) {\r\n            this.registerEvent(view, event, control);\r\n        }\r\n    }\r\n\r\n    static registerEvent(view: Element, event: string, control?: any) {\r\n        const pos: number = event.indexOf(':');\r\n        if (pos > 0) {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        } else {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        }\r\n    }\r\n\r\n    public static publish(element: DiagramElement, evt: Event) {\r\n        let handlers = EventBus.handlers[evt.type];\r\n        if (handlers) {\r\n            for (let handler of handlers) {\r\n                handler.handle(evt, element);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static subscribe(handler: EventHandler, ...eventTypes: string[]) {\r\n        for (let event of eventTypes) {\r\n            let handlers = EventBus.handlers[event];\r\n            if (handlers === null || handlers === undefined) {\r\n                handlers = [];\r\n                EventBus.handlers[event] = handlers;\r\n            }\r\n            handlers.push(handler);\r\n        }\r\n    }\r\n}\r\n","import SimpleEvent from './Event';\r\n\r\nexport default class EventListener {\r\n    private $onUpdate: Function;\r\n\r\n    get onUpdate(): Function {\r\n        return this.$onUpdate;\r\n    }\r\n\r\n    set onUpdate(value: Function) {\r\n        this.$onUpdate = value;\r\n    }\r\n\r\n    update(event: SimpleEvent) {\r\n        this.$onUpdate(event);\r\n    }\r\n}\r\n","// ################################## jsEPS ####################################################\r\nimport {SVGConverter} from './SVGConverter';\r\n\r\nexport class JSEPS {\r\n    private max: number;\r\n    private min: number;\r\n    private inverting: boolean;\r\n    private output: string[];\r\n    private font: number;\r\n\r\n    constructor(options: any) {\r\n        this.max = 0;\r\n        this.min = 999;\r\n        let hasInverting = typeof (options.inverting);\r\n        this.inverting = (options && hasInverting !== 'undefined' ? options.inverting : true);\r\n        this.output = ['%!PS-Adobe-3.0 EPSF-3.0', '1 setlinewidth'];\r\n        this.out('/FSD {findfont exch scalefont def} bind def % In the document prolog: define');\r\n        this.out('/SMS {setfont moveto show} bind def % some useful procedures');\r\n        this.out('/MS {moveto show} bind def');\r\n        this.out('/F1  10  /Helvetica  FSD % At the start of the script: set up');\r\n        this.font = 1;\r\n    }\r\n\r\n    public out(value: string) {this.output.push(value); }\r\n    public rect(x: number, y: number, width: number, height: number, style: string) {\r\n        y = y + (this.inverting ? height : 0);\r\n        if (style && style.indexOf('fill:url(#classelement);') >= 0) {\r\n            this.out('gsave 0.93 0.93 0.93 setrgbcolor newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectfill grestore');\r\n        } else {\r\n            this.out('newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectstroke');\r\n        }\r\n    }\r\n    public setFillColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public y(value: number) {this.max = Math.max(this.max, value); this.min = Math.min(this.min, value); return this.inverting ? '%y(' + value + ')' : value; }\r\n    public getType(): string {\r\n        return 'application/postscript';\r\n    }\r\n\r\n    public getData(): string {\r\n        let t, end, url, text, typ = 'application/postscript', a = document.createElement('a'), data = '', pos, i;\r\n        for (i = 0; i < this.output.length; i += 1) {\r\n            text = this.output[i];\r\n            if (this.inverting) {\r\n                while ((pos = text.indexOf('%y')) >= 0) {\r\n                    end = text.indexOf(')', pos);\r\n                    t = this.max - parseInt(text.substring(pos + 3, end), 10);\r\n                    text = text.substring(0, pos) + t + text.substring(end + 1);\r\n                }\r\n            }\r\n            data = data + text + '\\r\\n';\r\n        }\r\n        return data;\r\n    }\r\n\r\n    public setDrawColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public ellipse(cx: number, cy: number, rx: number, ry: number, colorMode: string) {/*FIXME*/}\r\n    public circle(cx: number, cy: number, r: number, colorMode: string) {/*FIXME*/}\r\n    public setTextColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public text(x: number, y: number, text: string) {this.out('(' + text.replace('&lt;', '<').replace('&gt;', '>') + ') ' + x + ' ' + this.y(y) + ' F1 SMS'); }\r\n    public lineto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' lineto'); this.out('stroke'); }\r\n    public moveto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' moveto'); }\r\n    public line(x1: number, y1: number, x2: number, y2: number) {this.out('newpath ' + x1 + ' ' + this.y(y1) + ' moveto ' + x2 + ' ' + this.y(y2) + ' lineto stroke'); }\r\n    public setLineWidth(value: string) {this.out(value + ' setlinewidth'); }\r\n    public setFont(value: string) {this.out('/F' + (this.font += 1) + ' 10 /' + value + ' FSD'); }\r\n}\r\n","import { Graph } from './elements/Graph';\r\n\r\n/*const buttons = {\r\n    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    clazz: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n};\r\n*/\r\nexport default class Palette {\r\n\r\n    private graph: Graph;\r\n    private palette: Element;\r\n    private root: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n        let div = document.createElement('div');\r\n        div.className = 'palette';\r\n        div.id = 'palette';\r\n        this.root = div;\r\n        this.palette = div;\r\n        for (let key in graph.nodeFactory) {\r\n            let element = graph.nodeFactory[key];\r\n            let control = new element();\r\n            let icon = control.getToolBarIcon();\r\n            if (icon) {\r\n                let button = <HTMLButtonElement>document.createElement('button');\r\n                button.className = 'add' + key + 'Btn';\r\n                button.innerHTML = icon.outerHTML;\r\n                button.onclick = e => {\r\n                    let nextFreePosition = this.graph.getNextFreePosition();\r\n                    // let node = this.graph.addElementWithValues(graph.nodeFactory[key], {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    let node = this.graph.addElementWithValues(key, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    this.graph.drawElement(node);\r\n                };\r\n                this.palette.appendChild(button);\r\n            }\r\n        }\r\n        // this.graph.nodeFactory\r\n//        this.addButtons();\r\n    }\r\n\r\n    public show() {\r\n        document.body.appendChild(this.root);\r\n    }\r\n\r\n    private addButtons() {\r\n        /*for (let btn in buttons) {\r\n            let button = <HTMLButtonElement>document.createElement('button');\r\n            button.className = 'add' + btn + 'Btn';\r\n            button.innerHTML = buttons[btn];\r\n            button.onclick = e => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let node = this.graph.addElementWithValues(btn, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                this.graph.drawElement(node);\r\n            };\r\n            this.palette.appendChild(button);\r\n        }*/\r\n    }\r\n}\r\n","import {Graph} from './elements/Graph';\r\nimport * as edges from './elements/edges';\r\nimport {EventBus, EventHandler} from './EventBus';\r\nimport {DiagramElement} from './elements/BaseElements';\r\nimport {Util} from './util';\r\n\r\nexport class PanelGroup implements EventHandler {\r\n    private graph: Graph;\r\n    private selectedElement: DiagramElement;\r\n    private clearPanel: Panel;\r\n    private generatePanel: Panel;\r\n    private propertiesMasterPanel: HTMLDivElement;\r\n    private propertiesContent: HTMLDivElement;\r\n    private propHeaderLabel: HTMLDivElement;\r\n    private propHeaderButton: HTMLButtonElement;\r\n    private selectedPanel: Panel;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.clearPanel = new ClearPanel(this);\r\n        this.generatePanel = new GeneratePanel(this);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        this.handleOpenProperties(event, element);\r\n\r\n        if (event.type === EventBus.RELOADPROPERTIES\r\n            && this.selectedElement && element.id === this.selectedElement.id) {\r\n            this.handleEvent(event, element);\r\n        }\r\n\r\n        // the same element was clicked. do nothing\r\n        if (this.selectedElement && this.selectedElement.id === element.id) {\r\n            return true;\r\n        }\r\n        if (element.id === 'RootElement') {\r\n            this.setActivePanel(this.clearPanel);\r\n        }\r\n        if (element.id === 'GenerateProp') {\r\n            this.setActivePanel(this.generatePanel);\r\n        }\r\n        this.selectedElement = element;\r\n\r\n        return true;\r\n    }\r\n\r\n    public getGraph(): Graph {\r\n        return this.graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(PanelGroup.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(PanelGroup.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n     public handleEvent(event: any, element: any) {\r\n        // DO NOTHING\r\n    }\r\n\r\n    public show() {\r\n        // main div to display any properties, class, edge, etc.\r\n        this.propertiesMasterPanel = document.createElement('div');\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n\r\n        this.propertiesContent = document.createElement('div');\r\n        this.propertiesContent.className = 'properties-hidden';\r\n\r\n        this.propHeaderLabel = document.createElement('div');\r\n        this.propHeaderLabel.style.display = 'inherit';\r\n        this.propHeaderLabel.style.cursor = 'pointer';\r\n        this.propHeaderLabel.onclick = e => this.toogleProperties(e);\r\n\r\n        // button to display and hide the properties of e.g. a class\r\n        this.propHeaderButton = document.createElement('button');\r\n        this.propHeaderButton.className = 'btnHideProp';\r\n        this.propHeaderButton.style.cssFloat = 'right';\r\n        this.propHeaderButton.onclick = e => this.toogleProperties(e);\r\n\r\n        let propertiesHeader = document.createElement('div');\r\n        propertiesHeader.style.display = 'inline';\r\n        propertiesHeader.appendChild(this.propHeaderLabel);\r\n        propertiesHeader.appendChild(this.propHeaderButton);\r\n\r\n        this.propertiesMasterPanel.appendChild(propertiesHeader);\r\n        this.propertiesMasterPanel.appendChild(this.propertiesContent);\r\n        document.body.appendChild(this.propertiesMasterPanel);\r\n\r\n        this.setActivePanel(this.clearPanel);\r\n    }\r\n\r\n    public setActivePanel(panel: Panel) {\r\n        this.selectedPanel = panel;\r\n        this.propHeaderLabel.innerHTML = panel.getHeaderText();\r\n        if (this.propertiesContent) {\r\n            while (this.propertiesContent.hasChildNodes()) {\r\n                this.propertiesContent.removeChild(this.propertiesContent.childNodes[0]);\r\n            }\r\n        }\r\n        panel.show();\r\n\r\n        panel.showFirstTab();\r\n        if (panel !== this.clearPanel) {\r\n            this.showProperties(null);\r\n        } else {\r\n            this.hideProperties(null);\r\n        }\r\n    }\r\n\r\n    public getProperiesContent(): HTMLDivElement {\r\n        return this.propertiesContent;\r\n    }\r\n\r\n    private handleOpenProperties(event: Event, element: DiagramElement) {\r\n        if (event.type === 'dblclick') {\r\n            this.showProperties(event);\r\n        }\r\n    }\r\n\r\n    private showProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Show\r\n        this.propHeaderButton.innerHTML = '&#8897;';\r\n        this.propHeaderButton.title = 'Hide properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel';\r\n        this.propertiesContent.className = 'properties';\r\n    }\r\n\r\n    private toogleProperties(evt: Event): void {\r\n        if (this.propHeaderButton.title === 'Show properties') {\r\n            this.showProperties(evt);\r\n        } else {\r\n            this.hideProperties(evt);\r\n        }\r\n    }\r\n\r\n    private hideProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Hide\r\n        this.propHeaderButton.innerHTML = '&#8896;';\r\n        this.propHeaderButton.title = 'Show properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n        this.propertiesContent.className = 'properties-hidden';\r\n    }\r\n}\r\n\r\nexport abstract class Panel {\r\n    protected divPropertiesPanel: HTMLDivElement;\r\n    protected divPropertiesTabbedPanel: HTMLDivElement;\r\n    protected element: any;\r\n    protected group: PanelGroup;\r\n    private panelItem: PanelItem[] = [];\r\n\r\n    constructor(group: PanelGroup, element: any) {\r\n        // get the properties content panel\r\n        this.divPropertiesPanel = document.createElement('div');\r\n        this.element = element;\r\n        this.group = group;\r\n\r\n        this.divPropertiesTabbedPanel = document.createElement('div');\r\n        this.divPropertiesTabbedPanel.className = 'tabbedpane';\r\n\r\n        // add tabbed panel\r\n        this.divPropertiesPanel.appendChild(this.divPropertiesTabbedPanel);\r\n    }\r\n\r\n    public show(): void {\r\n        let propertiesContent: HTMLDivElement = this.group.getProperiesContent();\r\n        if (this.panelItem.length > 1) {\r\n            propertiesContent.appendChild(this.getPropertiesTabbedPanel());\r\n        }\r\n\r\n        propertiesContent.appendChild(this.getPropertiesPanel());\r\n    }\r\n\r\n    public getPropertiesTabbedPanel(): HTMLDivElement {\r\n        return this.divPropertiesTabbedPanel;\r\n    }\r\n\r\n    public getPropertiesPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return '';\r\n    }\r\n\r\n    public showFirstTab(): void {\r\n        if (this.panelItem.length > 0) {\r\n            this.openTab(this.panelItem[0]);\r\n        }\r\n    }\r\n\r\n    protected createTabElement(tabText: string, tabValue: string, item: PanelItem): PanelItem {\r\n        let tabElementBtn = document.createElement('button');\r\n        tabElementBtn.className = 'tablinks';\r\n        tabElementBtn.innerText = tabText;\r\n        tabElementBtn.value = tabValue;\r\n\r\n        if (item === null) {\r\n            item = new PanelItem(this);\r\n        }\r\n        item.withButton(tabElementBtn);\r\n\r\n        tabElementBtn.onclick = () => this.openTab(item);\r\n        this.divPropertiesTabbedPanel.appendChild(tabElementBtn);\r\n        this.panelItem.push(item);\r\n        return item;\r\n    }\r\n\r\n    protected openTab(panelItem: PanelItem): void {\r\n        for (let key in this.panelItem) {\r\n            let child = this.panelItem[key];\r\n            if (child !== panelItem) {\r\n                 child.deactive();\r\n            }\r\n        }\r\n        panelItem.active();\r\n        // hide other tabcontent\r\n        if (this.divPropertiesPanel) {\r\n            while (this.divPropertiesPanel.hasChildNodes()) {\r\n                this.divPropertiesPanel.removeChild(this.divPropertiesPanel.childNodes[0]);\r\n            }\r\n        }\r\n\r\n        // ADD\r\n        if (panelItem.getContent()) {\r\n            this.divPropertiesPanel.appendChild(panelItem.getContent());\r\n        }\r\n    }\r\n}\r\n\r\nexport class GeneratePanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n\r\n        let item: PanelItem = this.createTabElement('General', 'General', null);\r\n\r\n        // Workspace and generate code stuff\r\n        let inputGenerateWorkspace: HTMLInputElement =  <HTMLInputElement> Util.createHTML({tag: 'input', id: 'workspace', type: 'text', placeholder: 'Type your Folder for generated code...', value: 'src/main/java', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Folder:', inputGenerateWorkspace);\r\n\r\n        let inputGeneratePackage: HTMLInputElement = <HTMLInputElement> Util.createHTML({tag: 'input', id: 'package', type: 'text', placeholder: 'Type your workspace for generated code...', value: '', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Package:', inputGeneratePackage);\r\n\r\n        let options = document.createElement('div');\r\n        options.style.textAlign = 'center';\r\n        options.style.margin = '3';\r\n        options.style.padding = '5';\r\n\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(options);\r\n\r\n        options.style.borderStyle = 'groove';\r\n        options.style.borderRadius = '10px';\r\n\r\n        let btnGenerate = document.createElement('button');\r\n        btnGenerate.textContent = 'Generate';\r\n        btnGenerate.title = 'Generate code into your workspace';\r\n        btnGenerate.className = 'OptionElement';\r\n\r\n        let that = this;\r\n        btnGenerate.onclick = () => {\r\n            let workspace = inputGeneratePackage.value;\r\n            if (workspace.length === 0) {\r\n                alert('No workspace set.\\nEnter first your workspace');\r\n                inputGeneratePackage.focus();\r\n                return;\r\n            }\r\n            that.group.getGraph().generate(workspace, inputGenerateWorkspace.value);\r\n        };\r\n        options.appendChild(btnGenerate);\r\n        options.appendChild(document.createElement('hr'));\r\n        options.appendChild(document.createElement('br'));\r\n\r\n        let btnAutoLayout = Util.createHTML({tag: 'button', className: 'OptionElement', value: 'Auto Layout', style: {marginRight: '10px'}, onclick: () => {\r\n                that.group.getGraph().layout();\r\n            }});\r\n\r\n        options.appendChild(btnAutoLayout);\r\n\r\n        // delete all nodes\r\n        let btnDeleteAll = document.createElement('button');\r\n        btnDeleteAll.className = 'OptionElement';\r\n        btnDeleteAll.textContent = 'Delete All';\r\n        btnDeleteAll.title = 'Delete all nodes from diagram';\r\n\r\n        btnDeleteAll.onclick = () => {\r\n            let confirmDelete = confirm('All classes will be deleted!');\r\n            if (!confirmDelete) {\r\n                return;\r\n            }\r\n            that.group.getGraph().$graphModel.removeAllElements();\r\n        };\r\n        btnDeleteAll.style.marginRight = '10px';\r\n        options.appendChild(btnDeleteAll);\r\n\r\n        // export stuff\r\n        let exportTypes: string[] = ['Export', 'HTML', 'JSON', 'PDF', 'PNG', 'SVG'];\r\n        let selectExport = document.createElement('select');\r\n\r\n        exportTypes.forEach(type => {\r\n            if (!(!window['jsPDF'] && type === 'PDF')) {\r\n                let option = document.createElement('option');\r\n                option.value = type;\r\n                option.textContent = type;\r\n                selectExport.appendChild(option);\r\n            }\r\n        });\r\n\r\n        selectExport.onchange = (evt) => {\r\n            let selectedExportType = selectExport.options[selectExport.selectedIndex].value;\r\n            selectExport.selectedIndex = 0;\r\n            that.group.getGraph().saveAs(selectedExportType);\r\n        };\r\n        selectExport.className = 'OptionElement';\r\n        options.appendChild(selectExport);\r\n        options.appendChild(document.createElement('br'));\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Properties';\r\n    }\r\n\r\n}\r\n\r\nexport class ClearPanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Select any element to see its properties';\r\n    }\r\n}\r\n\r\nexport class PanelItem {\r\n    protected panel: Panel;\r\n    protected label: string;\r\n    protected button: HTMLButtonElement;\r\n    protected content: HTMLDivElement = <HTMLDivElement>Util.create({tag: 'div', className: 'tabContent'});\r\n\r\n    constructor(panel: Panel, label?: string) {\r\n        this.panel = panel;\r\n        this.label = label;\r\n    }\r\n\r\n    public active(): void {\r\n        if (this.getButton()) {\r\n            this.getButton().className += ' active';\r\n        }\r\n    }\r\n\r\n    public deactive(): void {\r\n        if (this.getButton()) {\r\n            Util.removeClass(this.getButton(), 'active');\r\n        }\r\n    }\r\n\r\n    public withButton(button: HTMLButtonElement): PanelItem {\r\n        this.button = button;\r\n        return this;\r\n    }\r\n\r\n    public withContent(element: HTMLElement): PanelItem {\r\n        this.content.appendChild(element);\r\n        return this;\r\n    }\r\n\r\n    public withInput(labelText: string, element: HTMLElement): PanelItem {\r\n        let group: HTMLDivElement = <HTMLDivElement> Util.createHTML({tag: 'div'});\r\n        let label = Util.createHTML({tag: 'label', for: element.id, value: labelText});\r\n        group.appendChild(label);\r\n        group.appendChild(element);\r\n\r\n        this.content.appendChild(group);\r\n        return this;\r\n    }\r\n\r\n    public getButton(): HTMLButtonElement {\r\n        return this.button;\r\n    }\r\n\r\n    public getContent(): HTMLDivElement {\r\n        return this.content;\r\n    }\r\n\r\n   public getHeader(): string {\r\n        return this.label;\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\nimport Data from './Data';\r\n\r\nexport class PropertyBinder implements PropertyChangeSupport {\r\n    private propertyClass1: string;\r\n    private propertyClass2: string;\r\n    private data1: Data;\r\n    private data2: Data;\r\n    // works like a lock\r\n    private applyingChange: boolean = false;\r\n\r\n    constructor(data1: Data, data2: Data, propertyClass1: string, propertyClass2: string) {\r\n        this.data1 = data1;\r\n        this.data2 = data2;\r\n        this.propertyClass1 = propertyClass1;\r\n        this.propertyClass2 = propertyClass2;\r\n    }\r\n    static bind(data1: Data, data2: Data, property1: string, property2: string) {\r\n        if (!data1 || !data2 || !property1) {\r\n            console.error('NullValue!!');\r\n            return null;\r\n        }\r\n        const propertyBinder = new PropertyBinder(data1, data2, property1, property2);\r\n        propertyBinder.bind();\r\n        return propertyBinder;\r\n    }\r\n\r\n    propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        if (!this.applyingChange) {\r\n            this.applyingChange = true;\r\n            if (entity === this.data1) {\r\n                // fire to data2\r\n                this.data2.setValue(this.propertyClass2, newValue);\r\n            } else if (entity === this.data2) {\r\n                // fire to data1\r\n                this.data1.setValue(this.propertyClass1, newValue);\r\n            }\r\n            this.applyingChange = false;\r\n        }\r\n    }\r\n\r\n    protected bind() {\r\n        // public addListener(control: Control, property?: string)\r\n        // todo: set value immediately\r\n        this.data1.setValue(this.propertyClass1, this.data2.getValue(this.propertyClass2));\r\n\r\n        this.data1.addListener(this, this.propertyClass1);\r\n        this.data2.addListener(this, this.propertyClass2);\r\n    }\r\n\r\n    protected unbind() {\r\n        // public addListener(control: Control, property?: string)\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n    }\r\n}\r\n","// ################################## RGBColor ####################################################\r\nexport class RGBColor {\r\n    public  ok: boolean;\r\n    public r: number;\r\n    public g: number;\r\n    public b: number;\r\n\r\n    constructor(value: string) {\r\n        this.ok = false;\r\n        if (value === 'none') {\r\n            return;\r\n        }\r\n        let computedColor, div = document.createElement('div');\r\n        div.style.backgroundColor = value;\r\n        document.body.appendChild(div);\r\n        computedColor = window.getComputedStyle(div).backgroundColor;\r\n        // cleanup temporary div.\r\n        document.body.removeChild(div);\r\n        this.convert(computedColor);\r\n    }\r\n    public convert(value: any) {\r\n        let values, regex = /rgb *\\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\\)/;\r\n        values = regex.exec(value);\r\n        this.r = parseInt(values[1], 10);\r\n        this.g = parseInt(values[2], 10);\r\n        this.b = parseInt(values[3], 10);\r\n        this.ok = true;\r\n    }\r\n\r\n    public toRGB(): string {return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; }\r\n    public toHex(): string {\r\n        return '#' + (this.r + 0x10000).toString(16).substring(3).toUpperCase() + (this.g + 0x10000).toString(16).substring(3).toUpperCase() + (this.b + 0x10000).toString(16).substring(3).toUpperCase();\r\n    }\r\n}\r\n","/*\r\n NetworkParser\r\n Copyright (c) 2011 - 2014, Stefan Lindel\r\n All rights reserved.\r\n\r\n Licensed under the EUPL, Version 1.1 or (as soon they\r\n will be approved by the European Commission) subsequent\r\n versions of the EUPL (the \"Licence\");\r\n You may not use this work except in compliance with the Licence.\r\n You may obtain a copy of the Licence at:\r\n\r\n http://ec.europa.eu/idabc/eupl5\r\n\r\n Unless required by applicable law or agreed to in\r\n writing, software distributed under the Licence is\r\n distributed on an \"AS IS\" basis,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\r\n express or implied.\r\n See the Licence for the specific language governing\r\n permissions and limitations under the Licence.\r\n*/\r\nimport {RGBColor} from './RGBColor';\r\nimport {JSEPS} from \"./JSEPS\";\r\n\r\nconst epsSvgAttr = {\r\n    // allowed attributes. all others are removed from the preview.\r\n    g: ['stroke', 'fill', 'stroke-width'],\r\n    line: ['x1', 'y1', 'x2', 'y2', 'stroke', 'stroke-width'],\r\n    rect: ['x', 'y', 'width', 'height', 'stroke', 'fill', 'stroke-width'],\r\n    ellipse: ['cx', 'cy', 'rx', 'ry', 'stroke', 'fill', 'stroke-width'],\r\n    circle: ['cx', 'cy', 'r', 'stroke', 'fill', 'stroke-width'],\r\n    text: ['x', 'y', 'font-size', 'font-family', 'text-anchor', 'font-weight', 'font-style', 'fill'],\r\n    path: ['']\r\n};\r\nexport class SVGConverter {\r\n    private k: number;\r\n    private remove: boolean;\r\n    private target: any;\r\n\r\n    constructor(element: any, target: any, options: any) {\r\n        this.k = 1.0;\r\n        let hasScale = typeof (options.scale), hasRemoveInvalid = typeof (options.removeInvalid);\r\n        this.k = (options && hasScale !== 'undefined' ? options.scale : 1.0);\r\n        this.remove = (options && hasRemoveInvalid !== 'undefined' ? options.removeInvalid : false);\r\n        this.target = target;\r\n        this.parse(element);\r\n    }\r\n\r\n    public parse(element: any) {\r\n        let el, i, n, colorMode, hasFillColor, fillRGB, fillColor, strokeColor, strokeRGB, fontType, pdfFontSize, x, y,\r\n            box, xOffset;\r\n        if (!element) {\r\n            return;\r\n        }\r\n        if (typeof element === 'string') {\r\n            el = document.createElement('div');\r\n            el.innerHTML = element;\r\n            element = el.childNodes[0];\r\n        }\r\n        for (i = 0; i < element.children.length; i += 1) {\r\n            n = element.children[i];\r\n            colorMode = null;\r\n            hasFillColor = false;\r\n            if ('g,line,rect,ellipse,circle,text'.indexOf(n.tagName) >= 0) {\r\n                fillColor = n.getAttribute('fill');\r\n                if (fillColor) {\r\n                    fillRGB = new RGBColor(fillColor);\r\n                    if (fillRGB.ok) {\r\n                        hasFillColor = true;\r\n                        colorMode = 'F';\r\n                    }\r\n                }\r\n            }\r\n            if ('g,line,rect,ellipse,circle'.indexOf(n.tagName) >= 0) {\r\n                if (hasFillColor) {\r\n                    this.target.setFillColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                }\r\n                strokeColor = n.getAttribute('stroke');\r\n                if (n.hasAttribute('stroke-width')) {\r\n                    this.target.setLineWidth(this.attr(n, 'stroke-width'));\r\n                }\r\n                if (strokeColor) {\r\n                    strokeRGB = new RGBColor(strokeColor);\r\n                    if (strokeRGB.ok) {\r\n                        this.target.setDrawColor(strokeRGB.r, strokeRGB.g, strokeRGB.b);\r\n                        if (colorMode === 'F') {\r\n                            colorMode = 'FD';\r\n                        } else if (!hasFillColor) {\r\n                            colorMode = 'S';\r\n                        }\r\n                    } else {\r\n                        colorMode = null;\r\n                    }\r\n                }\r\n            }\r\n            // console.log(\"write \"+n.tagName);\r\n            switch (n.tagName.toLowerCase()) {\r\n                case 'svg':\r\n                case 'a':\r\n                case 'g':\r\n                    this.parse(n);\r\n                    break;\r\n                case 'line':\r\n                    this.target.line(this.attr(n, 'x1'), this.attr(n, 'y1'), this.attr(n, 'x2'), this.attr(n, 'y2'));\r\n                    break;\r\n                case 'rect':\r\n                    this.target.rect(this.attr(n, 'x'), this.attr(n, 'y'), this.attr(n, 'width'), this.attr(n, 'height'), n.getAttribute('style'));\r\n                    break;\r\n                case 'ellipse':\r\n                    this.target.ellipse(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'rx'), this.attr(n, 'ry'), colorMode);\r\n                    break;\r\n                case 'circle':\r\n                    this.target.circle(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'r'), colorMode);\r\n                    break;\r\n                case 'text':\r\n                    if (n.hasAttribute('font-family')) {\r\n                        switch (n.getAttribute('font-family').toLowerCase()) {\r\n                            case 'serif':\r\n                                this.target.setFont('times');\r\n                                break;\r\n                            case 'monospace':\r\n                                this.target.setFont('courier');\r\n                                break;\r\n                            default:\r\n                                n.getAttribute('font-family', 'sans-serif');\r\n                                this.target.setFont('Helvetica');\r\n                        }\r\n                    }\r\n                    if (hasFillColor) {\r\n                        this.target.setTextColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                    }\r\n                    if (this.target instanceof JSEPS) {\r\n                        this.target.text(this.attr(n, 'x'), this.attr(n, 'y'), n.innerHTML);\r\n                        break;\r\n                    }\r\n                    fontType = '';\r\n                    if (n.hasAttribute('font-weight')) {\r\n                        if (n.getAttribute('font-weight') === 'bold') {\r\n                            fontType = 'bold';\r\n                        }\r\n                    }\r\n                    if (n.hasAttribute('font-style')) {\r\n                        if (n.getAttribute('font-style') === 'italic') {\r\n                            fontType += 'italic';\r\n                        }\r\n                    }\r\n                    this.target.setFontType(fontType);\r\n                    pdfFontSize = 16;\r\n                    if (n.hasAttribute('font-size')) {\r\n                        pdfFontSize = parseInt(n.getAttribute('font-size'), 10);\r\n                    }\r\n                    box = n.getBBox();\r\n                    // FIXME: use more accurate positioning!!\r\n                    x = this.attr(n, 'x');\r\n                    y = this.attr(n, 'y');\r\n                    xOffset = 0;\r\n                    if (n.hasAttribute('text-anchor')) {\r\n                        switch (n.getAttribute('text-anchor')) {\r\n                            case 'end':\r\n                                xOffset = box.width;\r\n                                break;\r\n                            case 'middle':\r\n                                xOffset = box.width / 2;\r\n                                break;\r\n                            case 'start':\r\n                                break;\r\n                            case 'default':\r\n                                n.getAttribute('text-anchor', 'start');\r\n                                break;\r\n                        }\r\n                        x = x - (xOffset * this.k);\r\n                    }\r\n                    this.target.setFontSize(pdfFontSize).text(x, y, n.innerHTML);\r\n                    break;\r\n                default:\r\n                    if (this.remove) {\r\n                        console.log('cant translate to target:', n);\r\n                        element.removeChild(n);\r\n                        i -= 1;\r\n                    }\r\n            }\r\n        }\r\n    }\r\n\r\n    public attr(node: any, name: string) {\r\n        return this.k * parseInt(node.getAttribute(name), 10);\r\n    }\r\n}\r\n","import {Control} from './Control';\r\n\r\nexport class ScrumBoard extends Control {\r\n    public static cards = [0, 0.5, 1, 2, 3, 5, 8, 13, 20, 40, 100, '?', 'Coffee'];\r\n    private $selected: HTMLDivElement;\r\n    private $board: HTMLDivElement;\r\n\r\n    constructor() {\r\n        super();\r\n        this.redraw();\r\n    }\r\n\r\n    public redraw(): void {\r\n        if (this.$board) {\r\n            while (this.$board.children.length > 0 ) {\r\n                this.$board.removeChild(this.$board.children[0]);\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('div');\r\n            this.$selected = document.createElement('div');\r\n            this.$board = document.createElement('div');\r\n            this.$view.appendChild(this.$board);\r\n            this.$view.appendChild(this.$selected);\r\n        }\r\n        this.$view.className = 'ScrumBoard';\r\n        for ( let i = 0; i < ScrumBoard.cards.length; i++) {\r\n            let card = document.createElement('div');\r\n            card.className = 'ScrumCard';\r\n            card.innerHTML = <string>ScrumBoard.cards[i];\r\n            card['pokervalue'] = <string>ScrumBoard.cards[i];\r\n            card.onclick = e => {\r\n                this.onClick(<HTMLDivElement>e.target);\r\n            };\r\n            this.$board.appendChild(card);\r\n        }\r\n    }\r\n\r\n    public getSVG() {\r\n        this.redraw();\r\n        return this.$view;\r\n    }\r\n\r\n    public onClick(target: HTMLDivElement): void {\r\n        console.log(target['pokervalue']);\r\n\r\n        while (this.$selected.children.length > 0 ) {\r\n            this.$selected.removeChild(this.$selected.children[0]);\r\n        }\r\n        let card = document.createElement('div');\r\n        card.className = 'ScrumCard';\r\n        card['pokervalue'] = target['pokervalue'];\r\n        card.onclick = e => {\r\n            this.onShow(<HTMLDivElement>e.target);\r\n        };\r\n        this.$selected.appendChild(card);\r\n        this.$board['style']['display'] = 'none';\r\n    }\r\n\r\n    public onShow(target: HTMLDivElement): void {\r\n        target.innerHTML = target['pokervalue'];\r\n    }\r\n}\r\n","import {Graph} from './main';\r\nimport {SymbolLibary} from './elements/nodes/Symbol';\r\nimport {EventBus} from './EventBus';\r\n\r\nexport class Toolbar {\r\n\r\n    private graph: Graph;\r\n    private mainDiv: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public show(): void {\r\n        if (this.mainDiv) {\r\n            return;\r\n        }\r\n\r\n        this.mainDiv = document.createElement('div');\r\n        this.mainDiv.className = 'toolbar';\r\n\r\n        let h1Logo = document.createElement('h1');\r\n        h1Logo.className = 'logo';\r\n        h1Logo.textContent = 'DiagramJS';\r\n\r\n        let node = {type: 'Hamburger', property: 'HTML', width: 24, height: 24, id: 'GenerateProp'};\r\n        let hamburger = SymbolLibary.draw( node);\r\n        EventBus.registerEvent(hamburger, 'click', node);\r\n        this.mainDiv.appendChild(hamburger);\r\n\r\n        this.mainDiv.appendChild(h1Logo);\r\n        document.body.appendChild(this.mainDiv);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 06.03.2017.\r\n */\r\nimport Data from './Data';\r\n\r\n// export default class Data {\r\n//    public values = {};\r\n//    id: string;\r\n//    $listener: Control[] = [];\r\n//    property: string;\r\nexport namespace UML {\r\n    export class Clazz extends Data {\r\n        public static NAME: string = 'name';\r\n        public static ATTRIBUTES: string = 'attributes';\r\n        public static METHODS: string = 'methods';\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Clazz';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n\r\n        public getAttributes() {\r\n            return this.prop[Clazz.ATTRIBUTES];\r\n        }\r\n\r\n        public addToAttributes(newValue: string) {\r\n            this.addTo(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n\r\n        public removeFromAttributes(newValue: string) {\r\n            this.removeFrom(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n    }\r\n\r\n    export class Attribute extends Data {\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Attribute';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n    }\r\n\r\n    export class Methods extends Data {\r\n\r\n    }\r\n}\r\n\r\nwindow['UML'] = UML;\r\n","import {Control} from './Control';\r\n\r\nexport class VirtualKeyBoard extends Control {\r\n    constructor(data: any) {\r\n        super();\r\n        if (!data) {\r\n            data = this.getDefault();\r\n        }\r\n        let board = document.createElement('div');\r\n        this.$viewData = data;\r\n\r\n        for (let type in data) {\r\n            if (type === 'normal') {\r\n                for (let line in data[type]) {\r\n                    let lineBoard = document.createElement('div');\r\n                    lineBoard.className = 'vkLine';\r\n                    for (let key in data[type][line]) {\r\n                        let btn: HTMLButtonElement = document.createElement('button');\r\n                        let keyTag = data[type][line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                        btn.ontouchend = () => {this.action(btn); };\r\n                        btn.onclick = () => {this.action(btn); };\r\n                        lineBoard.appendChild(btn);\r\n                    }\r\n                    board.appendChild(lineBoard);\r\n                }\r\n            }\r\n        }\r\n        this.$view = board;\r\n    }\r\n\r\n    public action(btn: HTMLButtonElement) {\r\n        if (btn['key'] === '{Shift}') {\r\n            if ( btn.className === 'vkbuttonAction') {\r\n                let keys = this.$viewData['normal'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                    }\r\n                }\r\n            } else if ( btn.className === 'vkbutton') {\r\n                let keys = this.$viewData['shift'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbuttonAction');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        alert(btn);\r\n    }\r\n\r\n    public getDefault(): any {\r\n        let format = {\r\n            normal: [\r\n                ['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '?', '´', '{Bksp}'],\r\n                ['{Tab}', 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+'],\r\n                ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '#', '{enter}'],\r\n                ['{Shift}', '<', 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n// '{left}', '{up}', '{down}','{right}', '{Cancel}']\r\n            ],\r\n            shift: [\r\n                ['°', '!', '\"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '`', '{Bksp}'],\r\n                ['{Tab}', 'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', 'O', 'P', 'Ü', '*'],\r\n                ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', '\\'', '{enter}'],\r\n                ['{Shift}', '>', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n            ]\r\n        };\r\n        return format;\r\n    }\r\n\r\n    public getBoard() {\r\n        return this.$view;\r\n    }\r\n\r\n    private setButtonValue(keyTag: string, btn: HTMLButtonElement, shiftClass: string) {\r\n        btn.className = 'vkbutton';\r\n        btn['key'] = keyTag;\r\n        btn['type'] = 'normal';\r\n        if (keyTag.substring(0, 1) === '{') {\r\n            if (keyTag === '{Bksp}') {\r\n                btn.innerHTML = 'Bksp';\r\n            } else if (keyTag === '{Tab}') {\r\n                btn.innerHTML = '&#8677; Tab';\r\n            } else if (keyTag === '{enter}') {\r\n                btn.innerHTML = 'enter';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Shift}') {\r\n                btn.innerHTML = 'Shift';\r\n                btn.className = shiftClass;\r\n            } else if (keyTag === '{Accept}') {\r\n                btn.innerHTML = 'Accept';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Alt}') {\r\n                btn.innerHTML = 'Alt';\r\n            } else if (keyTag === '{Space}') {\r\n                btn.innerHTML = '&nbsp;';\r\n                btn.className = 'vkbuttonSpace';\r\n            } else if (keyTag === '{left}') {\r\n                btn.innerHTML = '&#8592';\r\n            } else if (keyTag === '{right}') {\r\n                btn.innerHTML = '&#8594;';\r\n            } else if (keyTag === '{up}') {\r\n                btn.innerHTML = '&#8593;';\r\n            } else if (keyTag === '{down}') {\r\n                btn.innerHTML = '&#8595;';\r\n            } else if (keyTag === '{Cancel}') {\r\n                btn.innerHTML = 'Cancel';\r\n                btn.className = 'vkbuttonAction';\r\n            }\r\n        } else {\r\n            btn.innerHTML = keyTag;\r\n        }\r\n    }\r\n}\r\n","import {Adapter} from '../Adapter';\r\n\r\nexport class JavaAdapter extends Adapter {\r\n    constructor() {\r\n        super();\r\n        this.id = 'JavaAdapter';\r\n    }\r\n    update(evt: Object): boolean {\r\n        if (this.isActive()) {\r\n            window['JavaBridge'].executeChange(evt);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public isActive(): boolean {\r\n        return window['JavaBridge'];\r\n    }\r\n}\r\n","export * from './JavaAdapter';\r\n","import { Util } from '../util';\r\nimport { Control } from '../Control';\r\n\r\nexport interface Size {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\ninterface GraphElement {\r\n    getSize(): Point;\r\n\r\n    getPos(): Point;\r\n\r\n    getCenter(): Point;\r\n\r\n    getSVG(): Element;\r\n\r\n    getCanvas(): Element;\r\n\r\n    getEvents(): string[];\r\n\r\n    withPos(x: number, y: number): GraphElement;\r\n\r\n    load(data: any): any;\r\n\r\n    getToolBarIcon(): Element;\r\n\r\n    loadProperties(properties: any): void;\r\n}\r\n\r\nexport abstract class DiagramElement extends Control implements GraphElement {\r\n\r\n    protected $isDraggable: boolean = true;\r\n    protected $labelHeight = 25;\r\n    protected $labelFontSize = 14;\r\n    private $pos: Point = new Point();\r\n    private $size: Point = new Point();\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getPos(): Point {\r\n        return this.$pos;\r\n    }\r\n\r\n    public getSize(): Point {\r\n        return this.$size;\r\n    }\r\n\r\n    public getCenter(): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        return new Point(pos.x + size.x / 2, pos.y + size.y / 2);\r\n    }\r\n\r\n    public getCenterPosition(p: string): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let offset = this['$' + p];\r\n        let center = this.getCenter();\r\n        if (p === Point.DOWN) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y + size.y, Point.DOWN);\r\n        }\r\n        if (p === Point.UP) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y, Point.UP);\r\n        }\r\n        if (p === Point.LEFT) {\r\n            return new Point(pos.x, Math.min(center.y + offset, pos.y + size.y), Point.LEFT);\r\n        }\r\n        if (p === Point.RIGHT) {\r\n            return new Point(pos.x + size.x, Math.min(center.y + offset, pos.y + size.y), Point.RIGHT);\r\n        }\r\n        return new Point();\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getCanvas(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return null;\r\n    }\r\n\r\n    public getAlreadyDisplayingSVG(): Element {\r\n        return document.getElementById(this.id) || this.getSVG();\r\n    }\r\n\r\n    public load(data: any) {\r\n        // Do Nothing\r\n    }\r\n\r\n    public withPos(x: number, y: number): GraphElement {\r\n        if (x && y) {\r\n            this.$pos = new Point(x, y);\r\n        } else {\r\n            if (typeof (x) !== 'undefined' && x !== null) {\r\n                this.$pos.x = x;\r\n            }\r\n            if (typeof (y) !== 'undefined' && y !== null) {\r\n                this.$pos.y = y;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public withSize(width: number, height: number): DiagramElement {\r\n        if (width && height) {\r\n            this.$size = new Point(width, height);\r\n        } else {\r\n            if (typeof (width) !== 'undefined' && width !== null) {\r\n                this.$size.x = width;\r\n            }\r\n            if (typeof (height) !== 'undefined' && height !== null) {\r\n                this.$size.y = height;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        // FIXME if (this.status === 'close') {\r\n        // if (!this.$owner.isClosed()) {\r\n        //        return this;\r\n        //    }\r\n        // }\r\n        return super.getShowed();\r\n    }\r\n\r\n    public loadProperties(properties: any) {\r\n        // DO Nothing\r\n    }\r\n\r\n    protected createShape(attrs: any): Element {\r\n        return Util.createShape(attrs);\r\n    }\r\n}\r\n\r\nexport class Point {\r\n    public static UP: string = 'UP';\r\n    public static LEFT: string = 'LEFT';\r\n    public static RIGHT: string = 'RIGHT';\r\n    public static DOWN: string = 'DOWN';\r\n    x: number = 0;\r\n    y: number = 0;\r\n\r\n    //    pos:string = '';\r\n\r\n    constructor(x?: number, y?: number, pos?: string) {\r\n        this.x = Math.ceil(x || 0);\r\n        this.y = Math.ceil(y || 0);\r\n        if (pos) {\r\n            this['pos'] = pos;\r\n        }\r\n    }\r\n\r\n    public add(pos: Point) {\r\n        this.x += pos.x;\r\n        this.y += pos.y;\r\n        return this;\r\n    }\r\n\r\n    public getPosition(): string {\r\n        if (!this['pos']) {\r\n            return '';\r\n        }\r\n        return this['pos'];\r\n    }\r\n\r\n    public addNum(x: number, y: number) {\r\n        this.x += x;\r\n        this.y += y;\r\n        return this;\r\n    }\r\n\r\n    public sum(pos: Point) {\r\n        let sum = new Point(this.x, this.y);\r\n        sum.add(pos);\r\n        return sum;\r\n    }\r\n\r\n    public center(posA: Point, posB: Point) {\r\n        let count = 0;\r\n        if (posA) {\r\n            this.x += posA.x;\r\n            this.y += posA.y;\r\n            count++;\r\n        }\r\n        if (posB) {\r\n            this.x += posB.x;\r\n            this.y += posB.y;\r\n            count++;\r\n        }\r\n        if (count > 0) {\r\n            this.x = (this.x / count);\r\n            this.y = (this.y / count);\r\n        }\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        return this.x < 1 && this.y < 1;\r\n    }\r\n\r\n    public size(posA: Point, posB: Point) {\r\n        let x1 = 0, x2 = 0, y1 = 0, y2 = 0;\r\n        if (posA) {\r\n            x1 = posA.x;\r\n            y1 = posA.y;\r\n        }\r\n        if (posB) {\r\n            x2 = posB.x;\r\n            y2 = posB.y;\r\n        }\r\n        if (x1 > x2) {\r\n            this.x = x1 - x2;\r\n        } else {\r\n            this.x = x2 - x1;\r\n        }\r\n        if (y1 > y2) {\r\n            this.y = y1 - y2;\r\n        } else {\r\n            this.y = y2 - y1;\r\n        }\r\n    }\r\n}\r\n\r\n// \t\t\t\t######################################################### Line #########################################################\r\nexport class Line extends DiagramElement {\r\n    public static FORMAT = { SOLID: 'SOLID', DOTTED: 'DOTTED', PATH: 'PATH' };\r\n    public source: Point;\r\n    public target: Point;\r\n    public color: string;\r\n    public lineType: string;\r\n    private path: string;\r\n    private angle: Number;\r\n\r\n    constructor(lineType: string) {\r\n        super();\r\n        this.lineType = lineType;\r\n    }\r\n\r\n    public getTyp(): string {\r\n        return 'SVG';\r\n    }\r\n\r\n    public getPos() {\r\n        let pos = new Point();\r\n        pos.center(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public getSize() {\r\n        let pos = new Point();\r\n        pos.size(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public withColor(color: string): Line {\r\n        this.color = color;\r\n        return this;\r\n    }\r\n\r\n    public withSize(x: number, y: number): DiagramElement {\r\n        return this;\r\n    }\r\n\r\n    public withPath(path: Array<Point>, close: boolean, angle?: any): Line {\r\n        let i: number, d: string = 'M' + path[0].x + ' ' + path[0].y;\r\n        this.lineType = Line.FORMAT.PATH; // It is a Path not a Line\r\n        for (i = 1; i < path.length; i += 1) {\r\n            d = d + 'L ' + path[i].x + ' ' + path[i].y;\r\n        }\r\n        if (close) {\r\n            d = d + ' Z';\r\n            this.target = path[0];\r\n        } else {\r\n            this.target = path[path.length - 1];\r\n        }\r\n        this.path = d;\r\n        if (angle instanceof Number) {\r\n            this.angle = angle;\r\n        } else if (angle) {\r\n            // var lineangle, start = path[0], end = path[path.length - 1];\r\n            // lineangle = Math.atan2(end.y - start.y, end.x - start.x);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): SVGGElement {\r\n        if (this.lineType === 'PATH') {\r\n            return <SVGGElement>Util.create({\r\n                tag: 'path',\r\n                'd': this.path,\r\n                'fill': this.color,\r\n                stroke: '#000',\r\n                'stroke-width': '1px'\r\n            });\r\n        }\r\n        let line: SVGGElement = <SVGGElement>Util.create({\r\n            tag: 'line',\r\n            'x1': this.source.x,\r\n            'y1': this.source.y,\r\n            'x2': this.target.x,\r\n            'y2': this.target.y,\r\n            'stroke': Util.getColor(this.color)\r\n        });\r\n        if (this.lineType && this.lineType.toLowerCase() === 'dotted') {\r\n            line.setAttribute('stroke-miterlimit', '4');\r\n            line.setAttribute('stroke-dasharray', '1,1');\r\n        }\r\n        return line;\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport Options from '../Options';\r\nimport {JavaAdapter} from '../adapters';\r\n\r\nexport class ClassEditor extends Graph {\r\n    private adapter: JavaAdapter;\r\n    constructor(json: any, options: Options) {\r\n        if (!options ) {\r\n            options = {};\r\n        }\r\n        options.canvas = options.canvas || 'canvas';\r\n        // options.origin = options.origin || new Point(150, 45);\r\n//            layout: \"DagreLayout\",\r\n        options.autoSave = options.autoSave || true;\r\n        if (!options.features) {\r\n            options.features = {\r\n                drag: true,\r\n                editor: true,\r\n                palette: true,\r\n                select: true,\r\n                zoom: true,\r\n                toolbar: true,\r\n                import: true,\r\n                properties: true,\r\n                addnode: true,\r\n                newedge: true\r\n            };\r\n        }\r\n        super(json, options);\r\n    }\r\n\r\n    public setBoardStyle(value: string) {\r\n        console.log(value);\r\n        this.importFile.setBoardStyle(value);\r\n    }\r\n\r\n    public registerListener(): void {\r\n        this.adapter = new JavaAdapter();\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return this.adapter;\r\n    }\r\n}\r\n","import * as edges from './edges';\r\nimport { Association } from './edges';\r\nimport * as nodes from './nodes';\r\nimport * as layouts from '../layouts';\r\nimport Layout from '../layouts/Layout';\r\nimport { GraphModel } from './Model';\r\nimport { Point, Size } from './BaseElements';\r\nimport { Util } from '../util';\r\nimport { Control } from '../Control';\r\nimport Data from '../Data';\r\nimport { EventBus } from '../EventBus';\r\nimport { AddNode, Drag, NewEdge, Select, Zoom } from '../handlers';\r\nimport Options from '../Options';\r\nimport { ImportFile } from '../handlers/ImportFile';\r\nimport { CSS } from '../CSS';\r\nimport { DiagramElement } from './index';\r\nimport { Toolbar } from '../Toolbar';\r\nimport {JSEPS} from '../JSEPS';\r\nimport {SVGConverter} from '../SVGConverter';\r\nimport Palette from '../Palette';\r\nimport {PanelGroup} from '../PropertiesPanel';\r\n\r\nexport class Graph extends Control {\r\n    // canvas: HTMLElement;\r\n    root: SVGElement;\r\n    $graphModel: GraphModel;\r\n    options: Options;\r\n    canvasSize: Size;\r\n    nodeFactory: Object;\r\n    edgeFactory: Object;\r\n    layoutFactory: Object;\r\n    protected importFile: ImportFile;\r\n    private currentlayout: Layout;\r\n    // private layerToolBar: SVGSVGElement;\r\n    // https://stackoverflow.com/questions/15181452/how-to-save-export-inline-svg-styled-with-css-from-browser-to-image-file\r\n    private containerElements = ['svg', 'g'];\r\n    private relevantStyles = {\r\n        'rect': ['fill', 'stroke', 'stroke-width'],\r\n        'path': ['fill', 'stroke', 'stroke-width', 'opacity'],\r\n        'circle': ['fill', 'stroke', 'stroke-width'],\r\n        'line': ['stroke', 'stroke-width'],\r\n        'text': ['fill', 'font-size', 'text-anchor', 'font-family'],\r\n        'polygon': ['stroke', 'fill']\r\n    };\r\n\r\n    constructor(json: any, options: Options) {\r\n        super();\r\n        json = json || {};\r\n        if (json['data']) {\r\n            options = json['options'];\r\n            json = json['data'];\r\n            this.id = json['id'];\r\n        }\r\n        this.options = options || {features: { drag: true}};\r\n        if (json['init']) {\r\n            return;\r\n        }\r\n        if (!this.options.origin) {\r\n            this.options.origin = new Point(150, 45);\r\n        }\r\n        if (!this.options.style) {\r\n            // Style can be classic or modern\r\n            this.options.style = 'classic';\r\n        }\r\n        if (this.options.autoSave) {\r\n            Util.isAutoSave = options.autoSave;\r\n        }\r\n\r\n        this.initFactories();\r\n        this.initCanvas();\r\n        this.initFeatures(this.options.features);\r\n\r\n        // load previous session, if user wants it\r\n        // otherwise load the json data\r\n        if (!this.lookupInLocalStorage()) {\r\n            this.load(json);\r\n        }\r\n\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    public lookupInLocalStorage(): boolean {\r\n        if (!this.options.autoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (!Util.isLocalStorageSupported()) {\r\n            return false;\r\n        }\r\n        let diagram = Util.getDiagramFromLocalStorage();\r\n        if (diagram && diagram.length > 0) {\r\n            if (confirm('Restore previous session?')) {\r\n                let jsonData: JSON = JSON.parse(diagram);\r\n                this.load(jsonData);\r\n                this.layout();\r\n                return true;\r\n            } else {\r\n                Util.saveToLocalStorage( null);\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public fitSizeOnNodes(): void {\r\n        let maxWidth: number = 0;\r\n        let maxHeight: number = 0;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            let nodePos = node.getPos();\r\n            let nodeSize = node.getSize();\r\n            let nodeWidestPosX = nodePos.x + nodeSize.x;\r\n            let nodeWidestPosY = nodePos.y + nodeSize.y;\r\n\r\n            if (nodeWidestPosX > maxWidth) {\r\n                maxWidth = nodeWidestPosX;\r\n            }\r\n\r\n            if (nodeWidestPosY > maxHeight) {\r\n                maxHeight = nodeWidestPosY;\r\n            }\r\n        }\r\n\r\n        this.root.setAttributeNS(null, 'width', '' + (maxWidth + 100));\r\n        this.root.setAttributeNS(null, 'height', '' + (maxHeight + 50));\r\n    }\r\n\r\n    public saveAs(typ: string) {\r\n        typ = typ.toLowerCase();\r\n\r\n        // shrink size of graph to minimum. only to show up nodes\r\n        const currentSize = this.getRootSize();\r\n        this.fitSizeOnNodes();\r\n\r\n        if (typ === 'svg') {\r\n            this.exportSvg();\r\n        } else if (typ === 'png') {\r\n            this.exportPng();\r\n        } else if (typ === 'html') {\r\n            this.exportHtml();\r\n\r\n        } else if (typ === 'pdf') {\r\n            this.exportPdf();\r\n            // } else if (typ === 'eps') {\r\n            // this.ExportEPS();\r\n        }\r\n        else if (typ === 'json') {\r\n            this.exportJson();\r\n        }\r\n\r\n        // set the size back to default\r\n        this.root.setAttributeNS(null, 'width', '' + currentSize.width);\r\n        this.root.setAttributeNS(null, 'height', '' + currentSize.height);\r\n    }\r\n\r\n    /**\r\n     * generates a blob file and makes it available for download.\r\n     * @param type type of file\r\n     * @param data raw data\r\n     * @param name name of download file\r\n     */\r\n    public save(type: string, data: any, name: string, context: string) {\r\n        if (window['java']) {\r\n            window['java'].export(type, data, name, context);\r\n            return;\r\n        }\r\n        let a = document.createElement('a');\r\n        a.href = window.URL.createObjectURL(new Blob([data], { type: context }));\r\n        a.download = name;\r\n        document.body.appendChild(a);\r\n        a.click();\r\n        document.body.removeChild(a);\r\n    }\r\n\r\n    /** Exports the diagram as svg. */\r\n    public exportSvg(): void {\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        this.save('svg', this.serializeXmlNode(wellFormatedSvgDom), 'class_diagram.svg', 'image/svg+xml');\r\n    }\r\n\r\n    /** Exports the diagram as html. */\r\n    public exportHtml(): void {\r\n        let htmlFacade = '<html><head><title>DiagramJS - Classdiagram</title></head><body>$content</body></html>';\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        let svgAsXml = this.serializeXmlNode(wellFormatedSvgDom);\r\n\r\n        let htmlResult = htmlFacade.replace('$content', svgAsXml);\r\n\r\n        this.save('html', htmlResult, 'class_diagram.htm', 'text/plain');\r\n    }\r\n\r\n    /** Exports the diagram as json. */\r\n    public exportJson(): void {\r\n        let type = 'text/plain';\r\n        let jsonObj = Util.toJson(this.$graphModel);\r\n        let data = JSON.stringify(jsonObj, null, '\\t');\r\n\r\n        this.save('json', data, 'class_diagram.json', type);\r\n    }\r\n\r\n    /** Exports the diagram as pdf. */\r\n    public exportPdf(): void {\r\n        if (!window['jsPDF']) {\r\n            console.log('jspdf n.a.');\r\n            return;\r\n        }\r\n        let type = 'image/svg+xml';\r\n        let converter, pdf = new window['jsPDF']('l', 'px', [this.$graphModel.getSize().x, this.$graphModel.getSize().y]);\r\n        converter = new SVGConverter(this.$view, pdf, {removeInvalid: false});\r\n        pdf.save('Download.pdf');\r\n/*        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let canvas, context, a, image = new Image();\r\n        let size = this.getRootSize();\r\n\r\n        // create the loaded img source into a canvas. to generate a picture. then place this picture in the pdf\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            let pdf = new window['jsPDF']();\r\n\r\n            pdf.addImage(canvas.toDataURL('image/jpeg'), 'jpeg', 15, 40, 180, 160);\r\n            pdf.save('class_diagram.pdf');\r\n\r\n        };\r\n\r\n        image.src = url;\r\n        */\r\n    }\r\n\r\n    public import(data: string): void {\r\n        let rootElement = this.$graphModel.$view;\r\n        while (rootElement.hasChildNodes()) {\r\n            rootElement.removeChild(rootElement.firstChild);\r\n        }\r\n\r\n        while (this.$view.hasChildNodes()) {\r\n            this.$view.removeChild(this.$view.firstChild);\r\n        }\r\n\r\n        this.clearModel();\r\n        let jsonData = JSON.parse(data);\r\n        this.load(jsonData);\r\n        this.layout();\r\n    }\r\n\r\n    public exportEPS(): void {\r\n          let converter, doc = new JSEPS({inverting: true});\r\n            converter = new SVGConverter(this.$view, doc, {removeInvalid: false});\r\n            this.save('eps', doc.getData(), 'diagram.eps', doc.getType());\r\n    }\r\n\r\n    /** Exports the diagram as png. */\r\n    public exportPng(): void {\r\n        let canvas, context, a, image = new Image();\r\n        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let typ = 'image/svg+xml';\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let size = this.getRootSize();\r\n\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            a = document.createElement('a');\r\n            a.download = 'class_diagram.png';\r\n            a.href = canvas.toDataURL('image/png');\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            document.body.removeChild(a);\r\n        };\r\n\r\n        image.src = url;\r\n\r\n    }\r\n\r\n    public getSvgWithStyleAttributes(): Node {\r\n        let oDOM = this.$graphModel.$view.cloneNode(true);\r\n        this.readElement(oDOM, this.$graphModel.$view);\r\n\r\n        return oDOM;\r\n    }\r\n\r\n    public serializeXmlNode(xmlNode: any) {\r\n        if (window['XMLSerializer'] !== undefined) {\r\n            return (new window['XMLSerializer']()).serializeToString(xmlNode);\r\n        }\r\n        if (xmlNode.xml !== undefined) {\r\n            return xmlNode.xml;\r\n        }\r\n        return xmlNode.outerHTML;\r\n    }\r\n\r\n    public getRootSize(): Size {\r\n        let width: number;\r\n        let height: number;\r\n        width = +this.root.getAttribute('width');\r\n        height = +this.root.getAttribute('height');\r\n\r\n        return { width: width, height: height };\r\n    }\r\n\r\n        // Graph.prototype.ExportEPS = function () {\r\n        //     var converter, doc = new svgConverter.jsEPS({inverting: true});\r\n        //     converter = new svgConverter(this.board, doc, {removeInvalid: false});\r\n        //     doc.save();\r\n        // };\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        this.$graphModel = new GraphModel();\r\n        this.$graphModel.init(this);\r\n        this.$graphModel.load(json);\r\n    }\r\n\r\n    public clearModel(): void {\r\n        this.$graphModel.removeAllElements();\r\n        this.clearSvgRoot();\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.layout();\r\n        return this;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        return;\r\n    }\r\n\r\n    public getNextFreePosition(): Point {\r\n\r\n        if (!this.$graphModel) {\r\n            return new Point(50, 50);\r\n        }\r\n\r\n        let point = new Point(0, 50);\r\n\r\n        let maxX = 0;\r\n        let minX = 9000;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            maxX = Math.max(maxX, node.getPos().x);\r\n            minX = Math.min(minX, node.getPos().x);\r\n        }\r\n\r\n        if (minX > 170) {\r\n            point.x = 10;\r\n        }\r\n        else {\r\n            point.x = maxX + 200;\r\n        }\r\n\r\n        return point;\r\n    }\r\n\r\n    public addElement(type: string, dontDraw?: boolean): boolean {\r\n        let success = this.$graphModel.addElement(type);\r\n        if (success === true) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return success;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues?: Object, layout?: boolean, dontDraw?: boolean): DiagramElement {\r\n        let element = this.$graphModel.addElementWithValues(type, optionalValues);\r\n        if (element && layout) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public layout(dontDraw?: boolean): Graph {\r\n        this.getLayout().layout(this, this.$graphModel);\r\n\r\n        if (dontDraw) {\r\n            return this;\r\n        }\r\n\r\n        this.draw();\r\n        return this;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTDRAGOVER, EventBus.ELEMENTDRAGLEAVE, EventBus.ELEMENTDROP];\r\n    }\r\n\r\n    public draw() {\r\n        this.clearSvgRoot();\r\n        let model = this.$graphModel;\r\n        let root = this.root;\r\n        let max: Point = new Point();\r\n        if (this.options) {\r\n            max.x = this.options.minWidth || 0;\r\n            max.y = this.options.minHeight || 0;\r\n        }\r\n\r\n        for (let node of model.nodes) {\r\n            let svg = node.getSVG();\r\n            EventBus.register(node, svg);\r\n            root.appendChild(svg);\r\n\r\n            let temp: number;\r\n            temp = node.getPos().x + node.getSize().x;\r\n            if (temp > max.x) {\r\n                max.x = temp;\r\n            }\r\n            temp = node.getPos().y + node.getSize().y;\r\n            if (temp > max.y) {\r\n                max.y = temp;\r\n            }\r\n\r\n        }\r\n        Util.setAttributeSize(this.root, max.x + 60, max.y + 40);\r\n\r\n        for (let edge of model.edges) {\r\n            let svg = edge.getSVG();\r\n            EventBus.register(edge, svg);\r\n            root.appendChild(svg);\r\n        }\r\n    }\r\n\r\n    public getNode(id: string) {\r\n        return this.$graphModel.getNodeById(id);\r\n    }\r\n\r\n    public drawElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let svg = element.getSVG();\r\n        this.root.appendChild(svg);\r\n\r\n        // actualize root width size, if neccessary\r\n        // get current width of root\r\n        let rootSize = this.getRootSize();\r\n        let newWidth = element.getPos().x + element.getSize().x + 40;\r\n        let newHeight = element.getPos().y + element.getSize().y;\r\n\r\n        if (rootSize.width < newWidth) {\r\n            this.root.setAttributeNS(null, 'width', '' + newWidth);\r\n        }\r\n\r\n        if (rootSize.height < newHeight) {\r\n            this.root.setAttributeNS(null, 'height', '' + newHeight);\r\n        }\r\n\r\n        // draw edge\r\n        if (element instanceof Association) {\r\n            let edge = <Association>element;\r\n            edge.redraw(edge.$sNode);\r\n            let srcSvg = element.$sNode.getAlreadyDisplayingSVG();\r\n            let targetSvg = element.$tNode.getAlreadyDisplayingSVG();\r\n\r\n            this.root.appendChild(srcSvg);\r\n            this.root.appendChild(targetSvg);\r\n        }\r\n\r\n        EventBus.register(element, svg);\r\n    }\r\n\r\n    public removeElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let alreadyDisplayingSvg = element.getAlreadyDisplayingSVG();\r\n        if (Util.isParentOfChild(this.root, alreadyDisplayingSvg)) {\r\n            this.root.removeChild(alreadyDisplayingSvg);\r\n        }\r\n    }\r\n\r\n    public generate(packageName: string, path?: string) {\r\n        this.$graphModel.package = packageName;\r\n        this.$graphModel.genPath = path;\r\n\r\n        let data, result = Util.toJson(this.$graphModel);\r\n        data = JSON.stringify(result, null, '\\t');\r\n        if (window['java'] && typeof window['java'].generate === 'function') {\r\n            window['java'].generate(data);\r\n        }\r\n    }\r\n// REFACTORING dd\r\n    private readElement(parent: any, origData: any): void {\r\n        let children = parent.childNodes;\r\n        let origChildDat = origData.childNodes;\r\n\r\n        for (let cd = 0; cd < children.length; cd++) {\r\n            let child = children[cd];\r\n\r\n            let tagName = child.tagName;\r\n            if (this.containerElements.indexOf(tagName) !== -1) {\r\n                this.readElement(child, origChildDat[cd]);\r\n            } else if (tagName in this.relevantStyles) {\r\n                let styleDef = window.getComputedStyle(origChildDat[cd]);\r\n\r\n                let styleString = '';\r\n                for (let st = 0; st < this.relevantStyles[tagName].length; st++) {\r\n                    styleString += this.relevantStyles[tagName][st] + ':' + styleDef.getPropertyValue(this.relevantStyles[tagName][st]) + '; ';\r\n                }\r\n\r\n                child.setAttribute('style', styleString);\r\n            }\r\n        }\r\n    }\r\n\r\n    private createPattern(): Element {\r\n        const defs = Util.createShape({ tag: 'defs' });\r\n        const pattern = Util.createShape({\r\n            tag: 'pattern',\r\n            id: 'raster',\r\n            patternUnits: 'userSpaceOnUse',\r\n            width: 40,\r\n            height: 40\r\n        });\r\n        const path = 'M0 4 L0 0 L4 0 M36 0 L40 0 L40 4 M40 36 L40 40 L36 40 M4 40 L0 40 L0 36';\r\n        const cross = Util.createShape({\r\n            tag: 'path',\r\n            d: path,\r\n            stroke: '#DDD',\r\n            'stroke-width': 1,\r\n            fill: 'none'\r\n        });\r\n\r\n        const rect = Util.createShape({\r\n            tag: 'rect',\r\n            x: 0,\r\n            y: 0,\r\n            width: 40,\r\n            height: 40,\r\n            fill: 'none'\r\n        });\r\n        pattern.appendChild(rect);\r\n        pattern.appendChild(cross);\r\n        defs.appendChild(pattern);\r\n        return defs;\r\n    }\r\n\r\n    private clearSvgRoot() {\r\n        const root = this.root;\r\n        this.$graphModel.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n        while (root.firstChild) {\r\n            root.removeChild(root.firstChild);\r\n        }\r\n\r\n        root.appendChild(this.createPattern());\r\n        let fillValue = 'none';\r\n        if (this.options.raster) {\r\n            fillValue = 'url(#raster)';\r\n        }\r\n        let background = Util.createShape({\r\n            tag: 'rect',\r\n            id: 'background',\r\n            width: 5000,\r\n            height: 5000,\r\n            x: 0,\r\n            y: 0,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: fillValue\r\n        });\r\n        root.appendChild(background);\r\n\r\n        // delete inline Edit, if exists\r\n        let inlineEdit = document.getElementById('inlineEdit');\r\n        if (inlineEdit && document.body.contains(inlineEdit)) {\r\n            document.body.removeChild(inlineEdit);\r\n        }\r\n    }\r\n\r\n    private getLayout(): Layout {\r\n        if (this.currentlayout) {\r\n            return this.currentlayout;\r\n        }\r\n\r\n        let layout = this.options.layout || '';\r\n        if (this.layoutFactory[layout]) {\r\n            this.currentlayout = new this.layoutFactory[layout]();\r\n        } else {\r\n            this.currentlayout = new layouts.DagreLayout();\r\n        }\r\n\r\n        return this.currentlayout;\r\n    }\r\n\r\n    private initFactories() {\r\n\r\n        let noder = nodes;\r\n        this.nodeFactory = {};\r\n        for (let id in noder) {\r\n            if (noder.hasOwnProperty(id) === true) {\r\n                this.nodeFactory[id] = noder[id];\r\n            }\r\n        }\r\n\r\n        let edger = edges;\r\n        this.edgeFactory = {};\r\n        for (let id in edger) {\r\n            if (edger.hasOwnProperty(id) === true) {\r\n                this.edgeFactory[id] = edger[id];\r\n            }\r\n        }\r\n\r\n        let layouter = layouts;\r\n        this.layoutFactory = {};\r\n        for (let id in layouter) {\r\n            if (layouter.hasOwnProperty(id) === true) {\r\n                this.layoutFactory[id] = layouter[id];\r\n            }\r\n        }\r\n    }\r\n\r\n    private initCanvas() {\r\n        if (this.options.canvas) {\r\n            this.$view = document.getElementById(this.options.canvas);\r\n        }\r\n        if (!this.$view) {\r\n            this.$view = document.createElement('div');\r\n            this.$view.setAttribute('class', 'diagram');\r\n            document.body.appendChild(this.$view);\r\n        }\r\n    }\r\n\r\n    private initFeatures(features: any) {\r\n\r\n        if (features) {\r\n            if (features.newedge) {\r\n                EventBus.subscribe(new NewEdge(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            this.importFile = new ImportFile(this);\r\n            if (features.import) {\r\n                EventBus.subscribe(this.importFile, 'dragover', 'dragleave', 'drop');\r\n            }\r\n            if (features.zoom) {\r\n                let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n                EventBus.subscribe(new Zoom(this), mousewheel);\r\n            }\r\n            if (features.drag) {\r\n                EventBus.subscribe(new Drag(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            if (features.select) {\r\n                EventBus.subscribe(new Select(this), 'click', 'drag');\r\n            }\r\n            if (features.palette) {\r\n                new Palette(this).show();\r\n            }\r\n            if (features.toolbar) {\r\n                new Toolbar(this).show();\r\n            }\r\n            if (features.properties) {\r\n                let propertyPanel = new PanelGroup(this);\r\n                // let dispatcher = new PropertiesDispatcher(this);\r\n                EventBus.subscribe(propertyPanel, 'dblclick', 'click', EventBus.RELOADPROPERTIES);\r\n                propertyPanel.show();\r\n            }\r\n            if (features.addnode) {\r\n                EventBus.subscribe(new AddNode(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n        }\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport {DiagramElement, Point} from './BaseElements';\r\nimport {Association} from './edges';\r\nimport {Node} from './nodes';\r\nimport {Control} from '../Control';\r\nimport {Util} from '../util';\r\nimport {EventBus} from '../EventBus';\r\n\r\nexport class GraphModel extends DiagramElement {\r\n    nodes: Node[] = [];\r\n    edges: Association[] = [];\r\n    package: string;\r\n    genPath: string;\r\n    $isLoading: boolean;\r\n\r\n    public load(data?: any) {\r\n\r\n        this.$isLoading = true;\r\n        data = data || {};\r\n        this.property = data.type || data.property || 'classdiagram';\r\n        this.id = 'RootElement';\r\n        if (data.nodes) {\r\n            for (let node of data.nodes) {\r\n                this.addNode(node);\r\n            }\r\n        }\r\n        if (data.edges) {\r\n            for (let edge of data.edges) {\r\n                this.addEdge(edge);\r\n            }\r\n        }\r\n\r\n        this.$isLoading = false;\r\n    }\r\n\r\n    public getNodeByPosition(x: number, y: number): Node {\r\n        for (let node of this.nodes) {\r\n            let posOfNode: Point = (<Node>node).getPos();\r\n            let sizeOfNode: Point = (<Node>node).getSize();\r\n\r\n            if ((posOfNode.x <= x && (posOfNode.x + sizeOfNode.x) >= x)\r\n                && (posOfNode.y <= y && (posOfNode.y + sizeOfNode.y) >= y)) {\r\n                return node;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.initCanvas();\r\n        return this;\r\n    }\r\n\r\n    public addElement(type: string): boolean {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n        if (element) {\r\n            Util.saveToLocalStorage(this);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues: Object): DiagramElement {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n\r\n        // position\r\n        if (optionalValues) {\r\n            if (optionalValues.hasOwnProperty('x') && optionalValues.hasOwnProperty('y')) {\r\n                let x = optionalValues['x'];\r\n                let y = optionalValues['y'];\r\n                element.withPos(x, y);\r\n            }\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return element;\r\n    }\r\n\r\n    public removeAllElements(): void {\r\n\r\n        let nodesLength = this.nodes.length;\r\n        for (let i = 0; i < nodesLength; i++) {\r\n            this.removeElement(this.nodes[0].id);\r\n        }\r\n\r\n        this.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n    }\r\n\r\n    public removeElement(id: string): boolean {\r\n\r\n        let element = this.getDiagramElementById(id);\r\n        if (!element) {\r\n            return false;\r\n        }\r\n\r\n        (<Graph>this.$owner).removeElement(element);\r\n\r\n        if (element instanceof Node) {\r\n\r\n            let idxOfNode = this.nodes.indexOf(element);\r\n            if (idxOfNode > -1) {\r\n                this.nodes.splice(idxOfNode, 1);\r\n            }\r\n\r\n            while (element.$edges.length > 0) {\r\n                this.removeElement(element.$edges[0].id);\r\n            }\r\n\r\n            element.$edges = [];\r\n        }\r\n        else if (element instanceof Association) {\r\n\r\n            let idxOfEdge = this.edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                this.edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from source\r\n            idxOfEdge = element.$sNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$sNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from target\r\n            idxOfEdge = element.$tNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$tNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return true;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        const size = 10;\r\n        const path = `M${-size} 0 L${+size} 0 M0 ${-size} L0 ${+size}`;\r\n\r\n        const attr = {\r\n            tag: 'path',\r\n            id: 'origin',\r\n            d: path,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: 'none'\r\n        };\r\n        let shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: 0 - size,\r\n            y: 0 - size / 1.5,\r\n            'text-anchor': 'end',\r\n            'font-family': 'Verdana',\r\n            'font-size': '9',\r\n            fill: '#999'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = '(0, 0)';\r\n\r\n        let group = this.createShape({tag: 'g'});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEUP, EventBus.ELEMENTMOUSELEAVE, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTMOUSEWHEEL, EventBus.ELEMENTCLICK, EventBus.ELEMENTDRAG];\r\n    }\r\n\r\n    public getNewId(prefix?: string): string {\r\n        let id = (prefix ? prefix.toLowerCase() + '-' : '') + Math.floor(Math.random() * 100000);\r\n        return id;\r\n    }\r\n\r\n    public getEdgeById(id: string): Association {\r\n        for (let edge of this.edges) {\r\n            if (edge.id === id) {\r\n                return edge;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    public getDiagramElementById(id: string): DiagramElement {\r\n\r\n        return this.getNodeById(id) || this.getEdgeById(id);\r\n    }\r\n\r\n    /**\r\n     * Add an edge with data in json file. Optional you can say, that the edge should have\r\n     * the points of source node and target node.\r\n     * @param edge information about edge in json\r\n     * @param withPosOfNodes optional. set points to line of source and target node\r\n     */\r\n    public addEdge(edge: any, withPosOfNodes?: boolean): Association {\r\n\r\n        // lookup in factoryedges and check if the edge type realy exists\r\n        if (edge && edge.type) {\r\n            const graph = (<Graph>this.$owner);\r\n            let typeExists = false;\r\n            for (let edgeType in graph.edgeFactory) {\r\n                if (edgeType === edge.type) {\r\n                    typeExists = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!typeExists) {\r\n                edge.type = 'Association';\r\n            }\r\n        }\r\n\r\n        let type = edge.type || 'Association';\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n\r\n        let newEdge = <Association>this.createElement(type, id, edge);\r\n        newEdge.type = type;\r\n\r\n        let source: Node;\r\n        let sourceAsString: string = edge.source.id || edge.source;\r\n        if (sourceAsString) {\r\n            source = this.getNodeById(sourceAsString);\r\n            if (!source) {\r\n                let nodeID = edge.source;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                source = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                source.init(this);\r\n            }\r\n        }\r\n\r\n        let target: Node;\r\n        let targetAsString: string = edge.target.id || edge.target;\r\n        if (targetAsString) {\r\n            target = this.getNodeById(targetAsString);\r\n            if (!target) {\r\n                let nodeID = edge.target;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                target = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                target.init(this);\r\n            }\r\n        }\r\n\r\n        newEdge.withItem(source, target);\r\n\r\n        if (withPosOfNodes) {\r\n            let srcX = source.getPos().x + (source.getSize().x / 2);\r\n            let srcY = source.getPos().y + (source.getSize().y / 2);\r\n\r\n            let targetX = target.getPos().x + (target.getSize().x / 2);\r\n            let targetY = target.getPos().y + (target.getSize().y / 2);\r\n\r\n            newEdge.addPoint(srcX, srcY);\r\n            newEdge.addPoint(targetX, targetY);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public createElement(type: string, id: string, data: Object): DiagramElement {\r\n        const graph = <Graph>this.$owner;\r\n        let element: DiagramElement;\r\n        if (graph.nodeFactory[type]) {\r\n            element = new graph.nodeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.nodes.push(<Node>element);\r\n        }\r\n        if (graph.edgeFactory[type]) {\r\n            element = new graph.edgeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.edges.push(<Association>element);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public getNodeById(id: string): Node {\r\n        for (let node of this.nodes) {\r\n            if (node.id === id) {\r\n                return node;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    private initCanvas() {\r\n        const graph = <Graph>this.$owner;\r\n        graph.canvasSize = {width: graph.$view.clientWidth, height: graph.$view.clientHeight};\r\n        graph.root = Util.createShape({\r\n            tag: 'svg',\r\n            id: 'root',\r\n            width: graph.canvasSize.width,\r\n            height: graph.canvasSize.height\r\n            // FIXME,viewBox: `${this.$graph.options.origin.x * -1} ${this.$graph.options.origin.y * -1} ${this.$graph.canvasSize.width} ${this.$graph.canvasSize.height}`\r\n        });\r\n        this.$view = graph.root;\r\n        graph.$view.appendChild(graph.root);\r\n\r\n        let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    private addNode(node: Node): Node {\r\n        let type = node['type'] || node.property || 'Node';\r\n        type = Util.toPascalCase(type);\r\n        let id = node['id'] || node['name'] || this.getNewId(type);\r\n\r\n        return <Node>this.createElement(type, id, node);\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction } from './index';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\n\r\nexport abstract class Aggregate extends Association {\r\n\r\n    protected $diamond: Element;\r\n\r\n    public getSVG(): Element {\r\n\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled diamond\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n        };\r\n\r\n        this.$diamond = this.createShape(attr);\r\n\r\n        group.appendChild(this.$diamond);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint: Point = this.$points[0];\r\n        let direction: Direction = Direction.Down;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if (this.$sNode.id === startNode.id || this.$points.length == 2) {\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$diamond.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint: Point, direction: Direction): string {\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                path = `M${startX} ${startY} L${startX + 6} ${startY + 10} L${startX} ${startY + 20} L${startX - 6} ${startY + 10} Z`;\r\n                startPoint.y = startPoint.y+20;\r\n                break;\r\n            case Direction.Right:\r\n                path = `M${startX} ${startY} L${startX - 10} ${startY + 6} L${startX - 20} ${startY} L${startX - 10} ${startY - 6} Z`;\r\n                startPoint.x = startPoint.x-20;\r\n                break;\r\n            case Direction.Left:\r\n                path = `M${startX} ${startY} L${startX + 10} ${startY - 6} L${startX + 20} ${startY} L${startX + 10} ${startY + 6} Z`;\r\n                startPoint.x = startPoint.x+20;\r\n                break;\r\n            case Direction.Down:\r\n                path = `M${startX} ${startY} L${startX - 6} ${startY - 10} L${startX} ${startY - 20} L${startX + 6} ${startY - 10} Z`;\r\n                startPoint.y = startPoint.y-20;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Aggregation extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'white');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { DiagramElement, Line, Point } from '../BaseElements';\r\nimport { Node } from '../nodes';\r\nimport { InfoText } from '../nodes/InfoText';\r\nimport { Util } from '../../util';\r\nimport { EventBus } from '../../EventBus';\r\nimport * as edges from '../edges';\r\nimport { Graph } from '../Graph';\r\n\r\nexport const enum Direction {\r\n    Up, Down, Left, Right\r\n}\r\n\r\nexport class Association extends DiagramElement {\r\n    public source: string;\r\n    public target: string;\r\n    public type: string;\r\n    public $sNode: Node;\r\n    public $tNode: Node;\r\n    public lineStyle: string;\r\n    public $points: Point[] = [];\r\n    public $pathSvg: Element;\r\n    public $pathWideSvg: Element;\r\n    public info: InfoText;\r\n    public sourceInfo: InfoText;\r\n    public targetInfo: InfoText;\r\n    $m: number;\r\n    $n: number;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super();\r\n\r\n        this.withData(data);\r\n    }\r\n\r\n    public withData(data: JSON | string | Object | any): Association {\r\n\r\n        if (!data) {\r\n            return this;\r\n        }\r\n        let srcInfo;\r\n        let trgInfo;\r\n\r\n        if (data.source && typeof data.source !== 'string') {\r\n            srcInfo = data.source;\r\n        }\r\n        else if (data.sourceInfo && typeof data.sourceInfo !== 'string') {\r\n            srcInfo = data.sourceInfo;\r\n        }\r\n\r\n        if (srcInfo) {\r\n            this.sourceInfo = new InfoText(srcInfo);\r\n            this.sourceInfo.$owner = this;\r\n        }\r\n\r\n        if (data.target && typeof data.target !== 'string') {\r\n            trgInfo = data.target;\r\n        }\r\n        else if (data.targetInfo && typeof data.targetInfo !== 'string') {\r\n            trgInfo = data.targetInfo;\r\n        }\r\n\r\n        if (trgInfo) {\r\n            this.targetInfo = new InfoText(trgInfo);\r\n            this.targetInfo.$owner = this;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    public updateSrcCardinality(cardinality: string): void {\r\n        this.sourceInfo = this.updateCardinality(this.$sNode, this.sourceInfo, cardinality);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetCardinality(cardinality: string): void {\r\n        this.targetInfo = this.updateCardinality(this.$tNode, this.targetInfo, cardinality);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateSrcProperty(property: string): void {\r\n        this.sourceInfo = this.updateProperty(this.$sNode, this.sourceInfo, property);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetProperty(property: string): void {\r\n        this.targetInfo = this.updateProperty(this.$tNode, this.targetInfo, property);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public withItem(source: Node, target: Node): Association {\r\n        source.$edges.push(this);\r\n        target.$edges.push(this);\r\n        this.$sNode = source;\r\n        this.$tNode = target;\r\n        this.source = source.id;\r\n        this.target = target.id;\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let group = Util.createShape({ tag: 'g', id: this.id, class: 'SVGEdge' });\r\n\r\n        let path: string = this.getPath();\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'none'\r\n        };\r\n        let pathLine = this.createShape(attr);\r\n\r\n        //attr['style'] = 'stroke-width:20;opacity:0;width:20;height:20';\r\n        let extendedPathLine = Util.createShape(attr);\r\n\r\n        group.appendChild(extendedPathLine);\r\n        group.appendChild(pathLine);\r\n\r\n        if (this.sourceInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.sourceInfo.getSVG());\r\n        }\r\n        if (this.targetInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.targetInfo.getSVG());\r\n        }\r\n\r\n        this.$pathWideSvg = extendedPathLine;\r\n        this.$pathSvg = pathLine;\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.EDITOR, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    public convertEdge(type: string, newId: string, redraw?: boolean): Association {\r\n        if (!edges[type]) {\r\n            return this;\r\n        }\r\n\r\n        let newEdge: Association = new edges[type]();\r\n        newEdge.withItem(this.$sNode, this.$tNode);\r\n        newEdge.id = newId;\r\n        newEdge.type = type;\r\n        newEdge.lineStyle = this.lineStyle;\r\n        newEdge.$owner = this.$owner;\r\n\r\n        if (this.sourceInfo) {\r\n            newEdge.sourceInfo = new InfoText({ property: this.sourceInfo.property, cardinality: this.sourceInfo.cardinality });\r\n            newEdge.sourceInfo.$owner = newEdge;\r\n        }\r\n\r\n        if (this.targetInfo) {\r\n            newEdge.targetInfo = new InfoText({ property: this.targetInfo.property, cardinality: this.targetInfo.cardinality });\r\n            newEdge.targetInfo.$owner = newEdge;\r\n        }\r\n\r\n        this.$points.forEach(point => {\r\n            newEdge.addPoint(point.x, point.y);\r\n        });\r\n\r\n        let graph = <Graph>this.getRoot();\r\n        if (!graph) {\r\n            return this;\r\n        }\r\n\r\n        // update model. insert the edge exact on the same index, like the old edge\r\n        let idx = graph.$graphModel.edges.indexOf(this);\r\n        graph.$graphModel.removeElement(this.id);\r\n        if (idx > -1) {\r\n            graph.$graphModel.edges.splice(idx, 0, newEdge);\r\n        }\r\n        else {\r\n            graph.$graphModel.edges.push(newEdge);\r\n        }\r\n\r\n        if (!redraw) {\r\n            return newEdge;\r\n        }\r\n\r\n        let svgRoot: Element;\r\n        if (graph) {\r\n            svgRoot = graph.root;\r\n        }\r\n        else {\r\n            svgRoot = document.getElementById('root');\r\n        }\r\n        let newEdgeSvg = newEdge.getSVG();\r\n\r\n        // update graph\r\n        graph.removeElement(this);\r\n        svgRoot.appendChild(newEdgeSvg);\r\n\r\n        // redraw the edge from both sides to get the correct display\r\n        // if the type is edge, so the path can be redraw.\r\n        // if not, so the inherited class redraw the path with his own logic\r\n\r\n        let dontDrawPath: boolean = (type !== 'Edge');\r\n        newEdge.redraw(newEdge.$sNode, dontDrawPath);\r\n        newEdge.redraw(newEdge.$tNode, dontDrawPath);\r\n\r\n        EventBus.register(newEdge, newEdgeSvg);\r\n\r\n        this.sourceInfo = undefined;\r\n        this.targetInfo = undefined;\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n        // redraw the first point\r\n        // check which point is the near to startnode\r\n        let endPoint: Point;\r\n        let recalcPoint: Point;\r\n        let endPointIdx: number;\r\n\r\n        if (this.$sNode.id === startNode.id) {\r\n            recalcPoint = this.$points[0];\r\n            endPointIdx = 1;\r\n        } else if (this.$tNode.id === startNode.id) {\r\n            recalcPoint = this.$points[this.$points.length - 1];\r\n            endPointIdx = this.$points.length - 2;\r\n        }\r\n\r\n        endPoint = this.$points[endPointIdx];\r\n\r\n        // calculate and set new position of point to redraw\r\n        this.calcIntersection(startNode, recalcPoint, endPoint);\r\n\r\n        // remove the 2nd point next to startnode, if the node was dragged upper the point\r\n        if (this.$points.length > 2 && this.$tNode.id === startNode.id && endPoint.y > (startNode.getPos().y + (startNode.getSize().y / 2))) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$tNode.id === startNode.id && this.$points.length === 2) {\r\n            this.calcIntersection(this.$sNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (this.$points.length > 2 && this.$sNode.id === startNode.id && (startNode.getPos().y + (startNode.getSize().y / 2) > endPoint.y)) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$sNode.id === startNode.id && this.$points.length === 2) {\r\n\r\n            this.calcIntersection(this.$tNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (!dontDrawPoints) {\r\n            this.redrawPointsAndInfo();\r\n        }\r\n    }\r\n\r\n    public getPath(): string {\r\n\r\n        if (this.$points.length === 0) {\r\n            return '';\r\n        }\r\n\r\n        let path: string = 'M';\r\n        for (let i = 0; i < this.$points.length; i++) {\r\n            let point: Point = this.$points[i];\r\n            if (i > 0) {\r\n                path += 'L';\r\n            }\r\n            path += Math.floor(point.x) + ' ' + Math.floor(point.y) + ' ';\r\n        }\r\n\r\n        return path;\r\n    }\r\n    public calcInfoPosNew(infoTxt: InfoText, node: Node): Point {\r\n\r\n        if (!infoTxt || !node) {\r\n            return null;\r\n        }\r\n\r\n        // 1. step: get direction\r\n        let startPoint: Point;\r\n        let nextToStartPoint: Point;\r\n        if (this.$sNode.id === node.id) {\r\n            startPoint = this.$points[0];\r\n            nextToStartPoint = this.$points[1];\r\n        }\r\n        else if (this.$tNode.id === node.id) {\r\n            startPoint = this.$points[this.$points.length - 1];\r\n            nextToStartPoint = this.$points[this.$points.length - 2];\r\n        }\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(node, startPoint);\r\n\r\n        let x: number;\r\n        let y: number;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                break;\r\n            case Direction.Right:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x - (infoTxt.getSize().x) - 5;\r\n                break;\r\n            case Direction.Left:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x + 5;\r\n                break;\r\n            case Direction.Down:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        // assign calculated position to infotext\r\n        return new Point(x, y);\r\n    }\r\n\r\n    public clearPoints(): any {\r\n        this.$points = [];\r\n        this.$points = [];\r\n    }\r\n\r\n    public addPoint(x: number, y: number): Point[] {\r\n        this.$points.push(new Point(x, y));\r\n\r\n        return this.$points;\r\n    }\r\n\r\n    protected redrawPointsAndInfo(): void {\r\n        // redraw the edge with the new position\r\n        let path: string = this.getPath();\r\n        this.$pathSvg.setAttributeNS(null, 'd', path);\r\n        this.$pathWideSvg.setAttributeNS(null, 'd', path);\r\n\r\n        this.redrawSourceInfo();\r\n        this.redrawTargetInfo();\r\n    }\r\n\r\n    protected redrawSourceInfo() {\r\n        if (this.sourceInfo) {\r\n            let newPosOfSrc = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.redrawFromEdge(newPosOfSrc);\r\n        }\r\n    }\r\n\r\n    protected redrawTargetInfo() {\r\n        if (this.targetInfo) {\r\n            let newPosOfTarget = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.redrawFromEdge(newPosOfTarget);\r\n        }\r\n    }\r\n\r\n    protected getDirectionOfPointToNode(node: Node, pointNearNode: Point): Direction {\r\n        /*\r\n            Example to calculate the direction of nearest point to Node\r\n\r\n            node\r\n         x1_ _ _ _\r\n          |       |\r\n          |       |. pointNearNode\r\n          |       |\r\n          |_ _ _ x2\r\n\r\n          the calculation would return Direction.Left\r\n        */\r\n\r\n        let x1: Point = node.getPos();\r\n        let x2: Point = new Point((x1.x + node.getSize().x), (x1.y + node.getSize().y));\r\n        let direction: Direction = Direction.Down;\r\n\r\n        if (x1.y >= pointNearNode.y) {\r\n            direction = Direction.Down;\r\n        }\r\n        if (x2.y <= pointNearNode.y) {\r\n            direction = Direction.Up;\r\n        }\r\n        if (x1.x >= pointNearNode.x) {\r\n            direction = Direction.Right;\r\n        }\r\n        if (x2.x <= pointNearNode.x) {\r\n            direction = Direction.Left;\r\n        }\r\n\r\n        return direction;\r\n    }\r\n\r\n    private updateCardinality(node: Node, infoText: InfoText, cardinality: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'cardinality': cardinality });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.cardinality = cardinality;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateCardinality(cardinality);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private updateProperty(node: Node, infoText: InfoText, property: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'property': property });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.property = property;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateProperty(property);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private calcIntersection(startNode: Node, recalcPoint: Point, endPoint: Point): Point {\r\n\r\n        // https://www.mathelounge.de/21534/schnittpunkt-einer-linie-mit-den-randern-eines-rechtecks\r\n        let h = startNode.getSize().y;\r\n        let w = startNode.getSize().x;\r\n\r\n        let x1: number = startNode.getPos().x + (w / 2);\r\n        let y1: number = startNode.getPos().y + (h / 2);\r\n\r\n        let x2: number = endPoint.x;\r\n        let y2: number = endPoint.y;\r\n\r\n        let newX: number = recalcPoint.x;\r\n        let newY: number = recalcPoint.y;\r\n\r\n        if (x2 > x1) {\r\n            newX = x1 + (w / 2);\r\n        }\r\n        else if (x2 < x1) {\r\n            newX = x1 - (w / 2);\r\n        }\r\n        else {\r\n            newX = x1;\r\n        }\r\n\r\n        if ((x2 - x1) !== 0) {\r\n            newY = ((y2 - y1) / (x2 - x1) * (newX - x1)) + y1;\r\n        }\r\n        else {\r\n            if (y1 > y2) {\r\n                newY = startNode.getPos().y;\r\n            }\r\n            else {\r\n                newY = startNode.getPos().y + h;\r\n            }\r\n        }\r\n\r\n        // if the statement is not true, so the intersection is at the horizontal line\r\n        if (!((y1 - (h / 2) <= newY) && newY <= y1 + (h / 2))) {\r\n\r\n            if (y2 > y1) {\r\n                newY = y1 + (h / 2);\r\n            }\r\n            else {\r\n                newY = y1 - (h / 2);\r\n            }\r\n\r\n            if ((x2 - x1) !== 0) {\r\n                let tmp = ((y2 - y1) / (x2 - x1));\r\n                newX = (newY + (tmp * x1) - y1) / tmp;\r\n            }\r\n            else {\r\n                newX = x1;\r\n            }\r\n        }\r\n\r\n        recalcPoint.x = Math.ceil(newX);\r\n        recalcPoint.y = Math.ceil(newY);\r\n\r\n        return null;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Composition extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'black');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { Association } from './Association';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\nimport { Direction } from '../index';\r\n\r\nexport class Generalisation extends Association {\r\n\r\n    public $TARGET_ELEMENT_HEIGHT : number = 12;\r\n    protected $targetElement: Element;\r\n\r\n    public getSVG(): Element {\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction : Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled arrow\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'white'\r\n          };\r\n\r\n        this.$targetElement = this.createShape(attr);\r\n\r\n        group.appendChild(this.$targetElement);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean) : void {\r\n\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint : Point = this.$points[0];\r\n        let direction : Direction = Direction.Up;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if(this.$sNode.id === startNode.id || this.$points.length == 2){\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$targetElement.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint : Point, direction : Direction) : string{\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch(direction){\r\n            case Direction.Up:\r\n            path = `M${startX} ${startY+3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y+12;\r\n            break;\r\n            case Direction.Right:\r\n            path = `M${startX-3} ${startY} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x-12;\r\n            break;\r\n            case Direction.Left:\r\n            path = `M${startX+3} ${startY} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x+12;\r\n            break;\r\n            case Direction.Down:\r\n            path = `M${startX} ${startY-3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y-12;\r\n            break;\r\n            default :\r\n            break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n\r\n}\r\n","import { Generalisation } from './Generalisation';\r\n\r\nexport class Implements extends Generalisation {\r\n\r\n    public getSVG(): Element {\r\n        let group = super.getSVG();\r\n\r\n        this.$pathSvg.setAttributeNS(null, 'stroke-dasharray', '3, 3');\r\n\r\n        return group;\r\n    }\r\n}\r\n","export * from './Association';\r\nexport * from './Aggregate';\r\nexport * from './Aggregation';\r\nexport * from './Composition';\r\nexport * from './Generalisation';\r\nexport * from './Implements';","export * from './edges';\r\nexport * from './nodes';\r\nexport * from './BaseElements';\r\nexport * from './Graph';\r\nexport * from './Model';\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Attribute extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 28.06.2017.\r\n */\r\nimport {Control} from \"../../Control\";\r\n\r\nexport class AutoComplete extends Control {\r\n    private $inputField:HTMLInputElement;\r\n    private $dataList:HTMLDataListElement;\r\n    private $selected:HTMLSelectElement;\r\n    private $items:HTMLDivElement;\r\n    private isMultiple:boolean;\r\n\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        let div:HTMLDivElement = document.createElement('div');\r\n        this.$view = div;\r\n        this.$inputField = document.createElement('input');\r\n        this.$dataList = document.createElement(\"datalist\");\r\n        this.$dataList.id = \"data_\"+this.id;\r\n        this.$inputField.setAttribute(\"list\", \"data_\"+this.id);\r\n        if(data[\"value\"]) {\r\n            let values = data[\"value\"];\r\n            this.isMultiple = data[\"multiple\"] != null;\r\n            let option:HTMLOptionElement;\r\n            if(this.isMultiple) {\r\n                this.$selected = document.createElement(\"select\");\r\n                this.$selected.className = \"hide\";\r\n                this.$selected.multiple = true;\r\n\r\n                this.$selected.id = this.id;\r\n                this.$items = document.createElement(\"div\");\r\n                this.$items.className = \"selectedList\";\r\n                div.appendChild(this.$items);\r\n                this.$inputField.className = \"selectedInput\";\r\n                div.appendChild(this.$selected);\r\n                this.$view[\"style\"].setProperty(\"float\", \"left\");\r\n                let that = this;\r\n                this.$inputField.oninput = function(){that.onChange();}\r\n            } else {\r\n                this.$inputField.id = this.id;\r\n            }\r\n            for (let attr in values) {\r\n                if (!values.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                option = document.createElement(\"option\");\r\n                option.value = values[attr];\r\n                this.$dataList.appendChild(option);\r\n                if(this.isMultiple) {\r\n                    option = document.createElement(\"option\");\r\n                    option.value = values[attr];\r\n                    option.innerHTML = values[attr];\r\n                    this.$selected.appendChild(option);\r\n                }\r\n        }\r\n\r\n            div.appendChild(this.$inputField);\r\n            div.appendChild(this.$dataList);\r\n        }\r\n\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n            if(this.isMultiple) {\r\n                div.appendChild(this.$selected);\r\n            }\r\n        }\r\n\r\n        parent.appendChild(this);\r\n    }\r\n\r\n    public onChange() : void {\r\n        let textValue:string = this.$inputField.value;\r\n        if(textValue.length<1) {\r\n            return;\r\n        }\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == textValue) {\r\n                if(item.selected == false) {\r\n                    item.selected = true;\r\n                    item.defaultSelected = true;\r\n                    let test = document.createElement(\"li\");\r\n                    let that = this;\r\n                    test.onclick = function() {that.onDelete(item.value, test);};\r\n                    test.className = \"selectedItem\";\r\n                    test.innerHTML = item.value;\r\n                    this.$items.appendChild(test);\r\n                    this.$inputField.value = \"\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n    public onDelete(value:string, selectedItem:HTMLLIElement) : void {\r\n        this.$items.removeChild(selectedItem);\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == value ) {\r\n                if(item.selected) {\r\n                    item.selected = false;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","import {Control} from '../../Control';\r\n\r\nexport class BR extends Control {\r\n    public load(json: JSON): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('br');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            this.$view.setAttribute(attr, data[attr]);\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\nexport class Button extends Control {\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        this.$view = document.createElement('button');\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\nimport { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\nimport { Size } from '../index';\r\nimport ClazzProperty from './ClazzProperty';\r\nimport {SymbolLibary} from './Symbol';\r\nimport {StereoType} from './StereoType';\r\nimport {GraphListener} from '../../handlers/GraphListener';\r\n\r\nexport class Class extends Node {\r\n    public attributes: Attribute[] = [];\r\n    public methods: Method[] = [];\r\n    public modifier: string;\r\n    public stereoType: string;\r\n\r\n    protected $attrHeight = 25;\r\n    protected $attrFontSize = 12;\r\n    protected $labelView: Element;\r\n\r\n    constructor(json: JSON | string | Object | any) {\r\n        super(json);\r\n        return this;\r\n    }\r\n\r\n    public load(json?: any) {\r\n        if (!json) {\r\n            json = {};\r\n        }\r\n        let y = this.$labelHeight;\r\n        let labelObj = json.name || json.id || ('New ' + this.property);\r\n\r\n        let width: number = 150;\r\n        width = Math.max(width, Util.sizeOf(labelObj).width + 60);\r\n\r\n        if (json['attributes']) {\r\n            for (let attr of json['attributes']) {\r\n\r\n                let attrObj = new Attribute(attr);\r\n                attrObj.$owner = this;\r\n                this.attributes.push(attrObj);\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(attrObj.toString()).width);\r\n                let listener = new GraphListener(attrObj);\r\n                attrObj.$data.addListener(listener);\r\n            }\r\n        }\r\n        if (json['stereotype']) {\r\n            this.stereoType = json['stereotype'];\r\n        }\r\n        if (json['methods']) {\r\n            for (let method of json['methods']) {\r\n\r\n                let methodObj = new Method(method);\r\n                methodObj.$owner = this;\r\n                this.methods.push(methodObj);\r\n\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(methodObj.toString()).width);\r\n            }\r\n            y += this.$attrHeight;\r\n        }\r\n        this.withSize(width, y);\r\n    }\r\n\r\n    public getAttributes(): Attribute[] {\r\n        return this.attributes;\r\n    }\r\n\r\n    public getMethods(): Method[] {\r\n        return this.methods;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        let icon = SymbolLibary.draw({type: 'Class', property: 'HTML', width: '50', height: '50', transform: 'translate(-26,-21)'});\r\n        return icon;\r\n        // let group = this.createShape(\r\n//    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n//    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos: Point = this.getPos();\r\n        const size: Point = this.getSize();\r\n\r\n        let group = this.createShape({ tag: 'g', id: this.id, class: 'SVGClazz', transform: 'translate(0 0)' });\r\n\r\n        if (this.stereoType) {\r\n            let type = new StereoType(this.stereoType, pos.x, pos.y);\r\n            group.appendChild(type.getSVG());\r\n        }\r\n\r\n        // Full Shape\r\n        let options = null;\r\n        let style;\r\n        let clazzName;\r\n        if (this.$owner['options']) {\r\n            let options = this.$owner['options'];\r\n            if (options) {\r\n                style = options.style;\r\n            }\r\n        }\r\n        // = = = Background = = =\r\n        if (style === 'modern') {\r\n            clazzName = 'ClazzHeader';\r\n        }\r\n        clazzName = 'ClazzHeader';\r\n        const nodeShape = this.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            height: size.y,\r\n            width: size.x,\r\n            rx: 5,\r\n            ry: 5,\r\n            fill: 'none',\r\n            stroke: 'black',\r\n            'stroke-width': 1\r\n        });\r\n        if (clazzName) {\r\n            nodeShape.setAttribute('className', clazzName);\r\n            let styleHeader = Util.getStyle('ClazzHeader');\r\n            // headerHeight = styleHeader.getNumber('height');\r\n        }\r\n\r\n        // = = = LABEL = = =\r\n        let label = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y + this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': this.$labelFontSize,\r\n            fill: 'black'\r\n        });\r\n        label.textContent = this.id;\r\n        this.$labelView = label;\r\n\r\n        group.appendChild(nodeShape);\r\n        group.appendChild(label);\r\n\r\n        // = = = ATTRIBUTES = = =\r\n        if (this.attributes.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorLabelAttr = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight,\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight,\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorLabelAttr);\r\n\r\n            let groupOfAttributes = this.createShape({ tag: 'g', id: (this.id + 'Attributes') });\r\n            groupOfAttributes.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzAttribute');\r\n            group.appendChild(groupOfAttributes);\r\n\r\n            let y = pos.y + this.$labelHeight + this.$attrHeight / 2;\r\n            for (let attr of this.attributes) {\r\n\r\n                let attrSvg = attr.getSVG();\r\n                attr.$owner = this;\r\n\r\n                attrSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                attrSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfAttributes.appendChild(attrSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        // = = = METHODS = = =\r\n        let height = this.attributes.length * this.$attrHeight;\r\n        let y = pos.y + this.$labelHeight + height + this.$attrHeight / 2;\r\n        if (this.methods.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorAttrMethods = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorAttrMethods);\r\n\r\n            let groupOfMethods = this.createShape({ tag: 'g', id: (this.id + 'Methods') });\r\n            groupOfMethods.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzMethod');\r\n            group.appendChild(groupOfMethods);\r\n\r\n            y += this.$attrHeight / 2;\r\n            for (let method of this.methods) {\r\n\r\n                let methodSvg = method.getSVG();\r\n                method.$owner = this;\r\n\r\n                methodSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                methodSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfMethods.appendChild(methodSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        this.$view = group;\r\n        return group;\r\n    }\r\n\r\n    public copy(): Class {\r\n        let copy: Class;\r\n        copy = <Class>super.copy();\r\n\r\n        // copy label\r\n        copy.id = this.id + 'Copy';\r\n\r\n        // copy attributes\r\n        this.attributes.forEach(attr => {\r\n            copy.attributes.push(new Attribute(attr.toString()));\r\n        });\r\n        // copy methods\r\n        this.methods.forEach(method => {\r\n            copy.methods.push(new Method(method.toString()));\r\n        });\r\n        copy.reCalcSize();\r\n\r\n        return copy;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTCLICK,\r\n                EventBus.ELEMENTDRAG, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES, EventBus.RELOADPROPERTIES];\r\n    }\r\n\r\n    public addProperty(value: string, type: string): any {\r\n        if (!this[type] || !value || value.length === 0) {\r\n            return;\r\n        }\r\n\r\n        let extractedValue;\r\n        if (type === 'attributes') {\r\n            extractedValue = new Attribute(value);\r\n        }\r\n        else if (type === 'methods') {\r\n            extractedValue = new Method(value);\r\n        }\r\n\r\n        for (let valueOfType of this[type]) {\r\n            if (valueOfType.toString() === extractedValue.toString()) {\r\n                alert(extractedValue.toString() + ' already exists.');\r\n                extractedValue = undefined;\r\n                return;\r\n            }\r\n        }\r\n\r\n        this[type].push(extractedValue);\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        return extractedValue;\r\n    }\r\n\r\n    public addAttribute(value: string): Attribute {\r\n        return this.addProperty(value, 'attributes');\r\n    }\r\n\r\n    public addAttributeObj(attr: Attribute): Attribute[] {\r\n        this.attributes.push(attr);\r\n        return this.getAttributes();\r\n    }\r\n\r\n    public addMethodObj(method: Method): Method[] {\r\n        this.methods.push(method);\r\n        return this.getMethods();\r\n    }\r\n\r\n    public addMethod(value: string): Method {\r\n        return this.addProperty(value, 'methods');\r\n    }\r\n\r\n    public removeAttribute(attr: Attribute): void {\r\n        let idx = this.attributes.indexOf(attr);\r\n        this.attributes.splice(idx, 1);\r\n    }\r\n\r\n    public removeMethod(method: Method): void {\r\n        let idx = this.methods.indexOf(method);\r\n        this.methods.splice(idx, 1);\r\n    }\r\n\r\n    public removeProperty(property: ClazzProperty): void {\r\n\r\n        if (property instanceof Attribute) {\r\n            this.removeAttribute(<Attribute>property);\r\n        }\r\n\r\n        if (property instanceof Method) {\r\n            this.removeMethod(<Method>property);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n        let hasSizeChanged: [boolean, Size] = this.hasSizeChanged();\r\n\r\n        if (drawOnlyIfSizeChanged) {\r\n            if (!hasSizeChanged[0]) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n\r\n        // redraw only this clazz\r\n        this.$owner.$view.removeChild(this.$view);\r\n        let newSvg = this.getSVG();\r\n        this.$owner.$view.appendChild(newSvg);\r\n        this.$view = newSvg;\r\n        EventBus.register(this, newSvg);\r\n\r\n        this.redrawEdges();\r\n    }\r\n\r\n    public hasSizeChanged(): [boolean, Size] {\r\n        let oldSize = { width: this.getSize().x, height: this.getSize().y };\r\n        let newSize = this.reCalcSize();\r\n\r\n        // size doenst changed, so nothing to redraw\r\n        if (oldSize.width === newSize.width && oldSize.height === newSize.height) {\r\n            return [false, newSize];\r\n        }\r\n\r\n        return [true, newSize];\r\n    }\r\n\r\n    public updateLabel(newLabel: string): void {\r\n        if (this.$labelView) {\r\n            this.$labelView.textContent = newLabel;\r\n        }\r\n\r\n        // update label in all edges\r\n        this.$edges.forEach(edge => {\r\n            if (this.id === edge.$sNode.id) {\r\n                edge.source = newLabel;\r\n            }\r\n            else if (this.id === edge.$tNode.id) {\r\n                edge.target = newLabel;\r\n            }\r\n        });\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        this.reDraw(true);\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.modifier = modifier;\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reCalcSize(): Size {\r\n        // label\r\n        let newWidth = 150;\r\n        newWidth = Math.max(newWidth, Util.sizeOf(this.id).width + 30);\r\n\r\n        // attributes\r\n        this.attributes.forEach(attrEl => {\r\n\r\n            let widthOfAttr;\r\n            if (attrEl.$view) {\r\n                widthOfAttr = attrEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfAttr = Util.sizeOf(attrEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfAttr + 15);\r\n        });\r\n\r\n        // methods\r\n        this.methods.forEach(methodEl => {\r\n            let widthOfMethod;\r\n            if (methodEl.$view) {\r\n                widthOfMethod = methodEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfMethod = Util.sizeOf(methodEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfMethod + 15);\r\n        });\r\n\r\n        // TODO: height has to be calculated by font-size\r\n        this.getSize().x = newWidth;\r\n        this.getSize().y = this.$labelHeight + ((this.attributes.length + this.methods.length) * this.$attrHeight)\r\n            + this.$attrHeight;\r\n\r\n        let newSize = { width: newWidth, height: this.getSize().y };\r\n\r\n        return newSize;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    private getModernStyle(): Element {\r\n        let width, height, id, size, z, item, rect, g, board, styleHeader, headerHeight, x, y;\r\n        board = this.getRoot()['board'];\r\n        styleHeader = Util.getStyle('ClazzHeader');\r\n        headerHeight = styleHeader.getNumber('height');\r\n        width = 0;\r\n        height = 10 + headerHeight;\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].getType().toLowerCase() === 'objectdiagram') {\r\n            id = this.id.charAt(0).toLowerCase() + this.id.slice(1);\r\n            item = 'Object';\r\n        } else {\r\n            id = this.id;\r\n            item = 'Class';\r\n            if (this['counter']) {\r\n                id += ' (' + this['counter'] + ')';\r\n            }\r\n        }\r\n        g = Util.create({tag: 'g', model: this});\r\n        size = Util.sizeOf(id, this);\r\n        width = Math.max(width, size.width);\r\n        if (this.attributes && this.attributes.length > 0) {\r\n            height = height + this.attributes.length * 25;\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.attributes[z], this).width);\r\n            }\r\n        } else {\r\n            height += 20;\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            height = height + this.methods.length * 25;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.methods[z], this).width);\r\n            }\r\n        }\r\n        width += 20;\r\n\r\n        let pos = this.getPos();\r\n        y = pos.y;\r\n        x = pos.x;\r\n\r\n        rect = {\r\n            tag: 'rect',\r\n            'width': width,\r\n            'height': height,\r\n            'x': x,\r\n            'y': y,\r\n            'class': item + ' draggable',\r\n            'fill': 'none'\r\n        };\r\n        g.appendChild(Util.create(rect));\r\n        g.appendChild(Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            'x': x,\r\n            'y': y,\r\n            height: headerHeight,\r\n            'width': width,\r\n            'class': 'ClazzHeader'\r\n        }));\r\n\r\n        item = Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'class': 'InfoText',\r\n            'text-anchor': 'right',\r\n            'x': x + width / 2 - size.width / 2,\r\n            'y': y + (headerHeight / 2) + (size.height / 2),\r\n            'width': size.width\r\n        });\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].type.toLowerCase() === 'objectdiagram') {\r\n            item.setAttribute('text-decoration', 'underline');\r\n        }\r\n        item.appendChild(document.createTextNode(id));\r\n\r\n        g.appendChild(item);\r\n        g.appendChild(Util.create({\r\n            tag: 'line',\r\n            x1: x,\r\n            y1: y + headerHeight,\r\n            x2: x + width,\r\n            y2: y + headerHeight,\r\n            stroke: '#000'\r\n        }));\r\n        y += headerHeight + 20;\r\n\r\n        if (this.attributes) {\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': (x + 10),\r\n                    'y': y,\r\n                    value: this.attributes[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n            if (this.attributes.length > 0) {\r\n                y -= 10;\r\n            }\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            g.appendChild(Util.create({tag: 'line', x1: x, y1: y, x2: x + width, y2: y, stroke: '#000'}));\r\n            y += 20;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': x + 10,\r\n                    'y': y,\r\n                    value: this.methods[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n        }\r\n        return g;\r\n    }\r\n}\r\n","import {Util} from '../../util';\r\nimport {DiagramElement} from '../BaseElements';\r\nimport Data from '../../Data';\r\n\r\nexport default class ClazzProperty extends DiagramElement {\r\n\r\n    // Public (+)\r\n    // Private (-)\r\n    // Protected (#)\r\n    // Package (~)\r\n\r\n    public $data = new Data();\r\n//    public modifier: string = '+';\r\n//    public name: string;\r\n//    public type: string;\r\n//    public value: string;\r\n\r\n    constructor(data: any | JSON) {\r\n        super();\r\n        this.$data.setValue('modifier', '+');\r\n        this.$data.setValue('name', null);\r\n        this.$data.setValue('type', null);\r\n        this.$data.setValue('value', null);\r\n        this.extractData(data);\r\n    }\r\n\r\n    public update(data: any | JSON): void {\r\n        this.extractData(data);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.$data.setValue('modifier', modifier);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateType(type: string): void {\r\n        this.$data.setValue('type', type);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateValue(value: string): void {\r\n        this.$data.setValue('value', value);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateName(name: string): void {\r\n        this.$data.setValue('name', name);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public getName(): string {\r\n        return this.$data.getValue('name');\r\n    }\r\n\r\n    public getModifier(): string {\r\n        return this.$data.getValue('modifier');\r\n    }\r\n\r\n    public getType(): string {\r\n        return this.$data.getValue('type');\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let attrText = {\r\n            tag: 'text',\r\n            'text-anchor': 'start',\r\n            'alignment-baseline': 'middle',\r\n        };\r\n\r\n        let attrSvg = Util.createShape(attrText);\r\n        attrSvg.textContent = this.toString();\r\n\r\n        this.$view = attrSvg;\r\n\r\n        return attrSvg;\r\n    }\r\n\r\n    public toString(): string {\r\n        let value = this.$data.getValue('value');\r\n        let result = this.$data.getValue('modifier') + ' ';\r\n        result += this.$data.getValue('name') + ' : ';\r\n        result += this.$data.getValue('type');\r\n        if (value && value.length > 0) {\r\n            result += ' = ' + this.$data.getValue('value');\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.$data.setValue('type', data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.$data.setValue('name', data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.$data.setValue('modifier', data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n\r\n            // e.g. name : string or name:string\r\n            let dataSplitted = data.split(':');\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                let name;\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.$data.setValue('modifier', firstChar);\r\n                    name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                }\r\n                else {\r\n                    name = modifierAndNameSplitted;\r\n                }\r\n                // delete whitespaces in name\r\n                name = name.replace(/ /g, '_');\r\n\r\n                this.$data.setValue('name', name);\r\n                let type = dataSplitted[1].trim() || 'String';\r\n\r\n                // if the type was entered with a small begin letter\r\n                if (type.toLowerCase() === 'string') {\r\n                    type = 'String';\r\n                }\r\n                // delete whitespaces in type\r\n                type = type.replace(/ /g, '_');\r\n                this.$data.setValue('type',  type);\r\n            } else {\r\n                dataSplitted = data.split('=');\r\n                if (dataSplitted && dataSplitted.length === 2) {\r\n                    // modifer (and or) name\r\n                    let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                    // first char is +, - or #\r\n                    let firstChar = modifierAndNameSplitted[0];\r\n                    let name;\r\n                    if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                        this.$data.setValue('modifier', firstChar);\r\n                        name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                    }\r\n                    else {\r\n                        name = modifierAndNameSplitted;\r\n                    }\r\n                    // delete whitespaces in name\r\n                    name = name.replace(/ /g, '_');\r\n\r\n                    this.$data.setValue('name', name);\r\n                    let value = dataSplitted[1].trim() || '\"\"';\r\n                    this.$data.setValue('value', value);\r\n                    this.$data.setValue('type', typeof value);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected updateTextOfView() {\r\n        if (this.$view) {\r\n            this.$view.textContent = this.toString();\r\n        }\r\n        if (this.$owner) {\r\n            Util.saveToLocalStorage(this.$owner.$owner);\r\n        }\r\n    }\r\n}\r\n","import {Node} from \"./Node\";\r\n/**\r\n * Created by Stefan on 29.03.2017.\r\n */\r\n\r\nexport class Dice extends Node {\r\n    private value: number;\r\n    private max: number = 6;\r\n    private $animation: SVGElement;\r\n    private $zoom: number = 0.6;\r\n    private $border: number = 0.2;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super(data);\r\n        this.withSize(100, 100);\r\n    }\r\n\r\n    public setNumber(number: number) {\r\n        this.value = number;\r\n        this.refresh();\r\n    }\r\n\r\n    public refresh() {\r\n        if (this.$view) {\r\n            this.reset();\r\n            let group = this.createPointValue();\r\n            if (group) {\r\n                this.$view.appendChild(group);\r\n            }\r\n        }\r\n    }\r\n\r\n    public reset() {\r\n        if (this.$view) {\r\n            while (this.$view.children.length > 1) {\r\n                if(this.$view.children.item(this.$view.children.length - 1).tagName!== \"animateTransform\") {\r\n                    console.log(this.$view.children.item(this.$view.children.length - 1));\r\n                    this.$view.removeChild(this.$view.children.item(this.$view.children.length - 1));\r\n                }else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let dice: SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x + size.x * this.$border,\r\n            y: pos.y + size.y * this.$border,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y * this.$zoom,\r\n            width: size.x * this.$zoom,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        dice.appendChild(this.createShape(attr));\r\n\r\n        let group = this.createPointValue();\r\n        if (group) {\r\n            dice.appendChild(group);\r\n        }\r\n\r\n        this.$view = dice;\r\n        return dice;\r\n    }\r\n\r\n    public animationTimeout(newValues: number[]) {\r\n        if(newValues.length>0) {\r\n            let newValue = newValues.shift();\r\n            this.setNumber(newValue);\r\n            let that=this;\r\n            setTimeout(function() {that.animationTimeout(newValues)}, 100);\r\n        }\r\n    }\r\n\r\n    public roll() {\r\n        this.startAnimation();\r\n        let values:number[]=[];\r\n        let i:number;\r\n        for(i=1;i<this.max;i++) {\r\n            values.push(i);\r\n        }\r\n        for(i=this.max;i>0;i--) {\r\n            values.push(i);\r\n        }\r\n        let that=this;\r\n        values.push( Math.floor(Math.random() * this.max)+1 );\r\n        setTimeout(function() {that.animationTimeout(values)}, 100);\r\n    }\r\n    public startAnimation() {\r\n        if(this.$animation) {\r\n            return;\r\n        }\r\n        let center = this.getPos().x+this.getSize().x /2;\r\n        const attr = {\r\n            tag: 'animateTransform',\r\n            attributeType: \"xml\",\r\n            attributeName:\"transform\",\r\n            type:\"rotate\",\r\n            dur: \"1s\",\r\n            repeatCount:\"1\",\r\n            from:\"0 \"+center+\" \"+center,\r\n            to:\"360 \"+center+\" \"+center\r\n        };\r\n        this.$animation = <SVGElement>this.createShape(attr);\r\n        this.$view.appendChild(this.$animation);\r\n    }\r\n\r\n    public stopAnimation() {\r\n        if(this.$animation) {\r\n            this.$view.removeChild(this.$animation);\r\n            this.$animation = null;\r\n        }\r\n    }\r\n\r\n    public createPointValue() :SVGElement {\r\n        if (this.value == 1) {\r\n           return this.getCircle(2, 2);\r\n        } else if (this.value == 2) {\r\n            return this.getCircle(1, 1, 3, 3);\r\n        } else if (this.value == 3) {\r\n            return this.getCircle(1, 1, 2, 2, 3, 3);\r\n        } else if (this.value == 4) {\r\n            return this.getCircle(1, 1, 1, 3, 3, 1, 3, 3);\r\n        } else if (this.value == 5) {\r\n            return this.getCircle(1, 1, 1, 3, 2, 2, 3, 1, 3, 3);\r\n        } else if (this.value == 6) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 7) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 2, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 8) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 9) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private getCircle(...values:number[]) : SVGElement {\r\n        if (values.length % 2 > 0) {\r\n            return null;\r\n        }\r\n        let size = this.getSize();\r\n        let pos = this.getPos();\r\n        //FIXME let group:SVGElement = <SVGElement>this.createShape({tag: 'g', transform: 'translate(0 0)', height: size.y, width: size.x});\r\n        let group:SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n\r\n\r\n        for (let i: number = 0; i < values.length; i += 2) {\r\n            group.appendChild(this.createCircle(values[i], values[i + 1]));\r\n        }\r\n        return group;\r\n    }\r\n    private createCircle(x:number, y:number) : SVGElement {\r\n        let size = this.getSize();\r\n        let radius = size.x / 10*this.$zoom;\r\n        let border = size.y*this.$border;\r\n        let zoom = size.y*this.$zoom;\r\n        const attr = {\r\n            tag: 'circle',\r\n            r : radius,\r\n            cx: (size.x*this.$zoom * x) / 4 + border,\r\n            cy: (size.y*this.$zoom * y) / 4 + border,\r\n            stroke:\"black\",\r\n            \"stroke-width\":\"3\",\r\n            fill:\"red\",\r\n            style: 'fill:black;stroke:black;stroke-width:2'\r\n        };\r\n        return <SVGElement>this.createShape(attr);\r\n    }\r\n}","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\n\r\nexport class Div extends Control {\r\n    private className: string;\r\n\r\n    public load(data:JSON|any): any {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = <string>data;\r\n        } else {\r\n            id = data.id;\r\n            this.className = data.class;\r\n            this.property = data.property;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let div: HTMLElement = document.getElementById(id);\r\n\r\n        if (!this.property) {\r\n            // if(inputField){\r\n            // TODO disuss how to decide, which property we should listen on...\r\n            // this.property = id;\r\n            this.property = div.getAttribute('Property');\r\n            // }\r\n        }\r\n\r\n        if (div instanceof HTMLDivElement) {\r\n            this.$view = div;\r\n        } else {\r\n            if (!div) {\r\n                this.$view = document.createElement('div');\r\n                this.$view.setAttribute('id', this.id);\r\n                this.$view.setAttribute('property', this.property);\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists+\r\n        if (data.hasOwnProperty('property')) {\r\n            this.setProperty(data['property']);\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        this.$model = entity;\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.className || entity.hasProperty(this.className)) {\r\n                if (entity.id === this.property.split('.')[0]) {\r\n                    entity.addListener(this, this.className);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        this.$view.innerHTML = <string>newValue;\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Form extends Control {\r\n    // private applyingChange: boolean = false;\r\n    private children: Object = {};\r\n    // private property: string = \"\";\r\n\r\n    /**\r\n     * Data should look like the following json:\r\n     *\r\n     * <pre>{\r\n     *      id: \"t1\",\r\n     *      control: \"form\",\r\n     *      elements: [\r\n     *          {id: \"inputField1\", property: \"talk\"},\r\n     *          {id: \"inputField2\", property: \"room\"}\r\n     *      ]\r\n     * }</pre>\r\n     * @param data\r\n     */\r\n    public load(data: any) {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let form: HTMLElement = document.getElementById(id);\r\n\r\n        if (form instanceof HTMLFormElement) {\r\n            this.$view = form;\r\n            if (this.$view.hasAttribute('property')) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            if (!form) {\r\n                this.$view = document.createElement('form');\r\n                this.$view.setAttribute('id', this.id);\r\n\r\n                if (data.hasOwnProperty('property')) {\r\n                    this.property = data['property'];\r\n                }\r\n\r\n                // add all the attributes to the form element\r\n                for (let attr in data) {\r\n                    if (data.hasOwnProperty(attr) === false) {\r\n                        continue;\r\n                    }\r\n                    if (attr === 'elements') {\r\n                        continue;\r\n                    }\r\n                    this.$view.setAttribute(attr, data[attr]);\r\n                }\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists\r\n        let objId = this.property;\r\n        let hasItem = this.$owner.hasItem(objId);\r\n        if (hasItem) {\r\n            let item = this.$owner.getItem(objId);\r\n            item.addListener(this);\r\n            this.$model = item;\r\n        }\r\n\r\n        // now create all the sub input controls\r\n        for (let field of data.elements) {\r\n            // this.createField(field);\r\n            if (field.hasOwnProperty('property')) {\r\n                let property = field['property'];\r\n                property = this.property + '.' + property;\r\n                field['property'] = property;\r\n            }\r\n            if (!field.hasOwnProperty('class')) {\r\n                field['class'] = 'input';\r\n            }\r\n\r\n            // let the Bridge load the subControl\r\n            let control: Control = this.$owner.load(field, this);\r\n\r\n            // add subControl to children\r\n            this.children[control.getId()] = control;\r\n        }\r\n\r\n    }\r\n\r\n    public setProperty(id: string): void {\r\n        this.property = id;\r\n        let keys: string[] = Object.keys(this.children);\r\n        for (let k = 0; k < keys.length; k++) {\r\n            let key = keys[k];\r\n            let childControl = this.children[key];\r\n            // only set Property, if there is a Property defined before\r\n            if (childControl.property) {\r\n                childControl.setProperty(this.property + '.' + childControl.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object,  oldValue?: Object): boolean {\r\n        if (this.$owner != null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    /**\r\n     * Here we create the form elements and put all the attributes to them in order for the Control only having to load\r\n     * the data were appending here. Alternative would be loading with the bridge and afterwards setting\r\n     * the owner to the form instead of the body..\r\n     * @param field\r\n     */\r\n    /*private createField(field: Object) {\r\n     let control = 'input';\r\n     if (field.hasOwnProperty('class')) {\r\n     control = field['class'];\r\n     }\r\n     let input = document.createElement(control);\r\n     input.setAttribute('class', control);\r\n     let id: string;\r\n     if (!field.hasOwnProperty('id')) {\r\n     // TODO: not the best solution for generating unique id's for forms...\r\n     id = this.$owner.getId();\r\n     field['id'] = id;\r\n     }\r\n     if (field.hasOwnProperty('property')) {\r\n     let property = field['property'];\r\n     property = this.id + '.' + property;\r\n     input.setAttribute('property', property);\r\n     }\r\n     for (let attr in field) {\r\n     if (attr === 'property' || attr === 'class' || !field.hasOwnProperty(attr)) {\r\n     continue;\r\n     }\r\n     input.setAttribute(attr, field[attr]);\r\n     }\r\n\r\n     this.$viewElement.appendChild(input);\r\n\r\n     let newcontrol: Control = this.$owner.load(field['id']);\r\n     this.children[newcontrol.getId()] = newcontrol;\r\n     }*/\r\n}\r\n","/**\r\n * Created by Stefan on 01.03.2017.\r\n */\r\nimport {Control} from '../../Control';\r\n\r\nexport class HTML extends Control {\r\n    constructor(data: JSON|Object|any) {\r\n        super();\r\n\r\n        let id: string;\r\n        let tag: string;\r\n\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            data = {};\r\n        } else if (data) {\r\n            id = data.id;\r\n        }\r\n        if (id) {\r\n            this.id = id;\r\n            this.$view = document.getElementById(id);\r\n        }\r\n        if (!this.$view) {\r\n            if (data) {\r\n                tag = data['tag'] || 'div';\r\n            } else {\r\n                tag = 'div';\r\n            }\r\n            this.$view = document.createElement(tag);\r\n            let parent = document.getElementsByTagName('body')[0];\r\n            parent.appendChild(this.$view);\r\n        }\r\n        if (!parent) {\r\n            return;\r\n        }\r\n        this.writeAttribute(data, this.$view);\r\n    }\r\n\r\n    private writeAttribute(properties: Object, entity?: any) {\r\n        let lowKey;\r\n        if (!entity) {\r\n            lowKey = properties['tag'] || 'div';\r\n            entity = document.createElement(lowKey);\r\n        }\r\n        for (let key in properties) {\r\n            if (!properties.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            lowKey = key.toLowerCase();\r\n            if (properties[key] === null) {\r\n                entity.setAttribute(key, '');\r\n                continue;\r\n            }\r\n\r\n            if (lowKey === 'tag' || lowKey.charAt(0) === '$' || lowKey === '$graphModel' || lowKey === 'class') {\r\n                continue;\r\n            }\r\n            if (lowKey === 'children') {\r\n                if (Array.isArray(properties[key])) {\r\n                    for (let item in properties[key]) {\r\n                        if (properties[key].hasOwnProperty(item) === false) {\r\n                            continue;\r\n                        }\r\n                        let child = this.writeAttribute(item);\r\n                        if (child) {\r\n                            entity.appendChild(child);\r\n                        }\r\n                    }\r\n                } else {\r\n                    let child = this.writeAttribute(properties[key]);\r\n                    if (child) {\r\n                        entity.appendChild(child);\r\n                    }\r\n                }\r\n                continue;\r\n            }\r\n            entity[key] = properties[key];\r\n        }\r\n        return entity;\r\n    }\r\n}\r\n","import { Point } from '../BaseElements';\r\nimport { Util } from '../../util';\r\nimport { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\n\r\nexport class InfoText extends Node {\r\n\r\n    public cardinality: string = '';\r\n    private $heightOfOneTextItem: number;\r\n    private $cardinalitySvg: Element;\r\n    private $propertySvg: Element;\r\n    private $rectBackground: Element;\r\n\r\n    constructor(info: any) {\r\n        super(info);\r\n        if (typeof (info) === 'string') {\r\n            this.id = info;\r\n        } else {\r\n            if (info.property) {\r\n                this.property = info.property;\r\n            }\r\n            if (info.cardinality) {\r\n                this.cardinality = info.cardinality;\r\n            }\r\n        }\r\n        this.$isDraggable = true;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n    }\r\n\r\n    public updateCardinality(cardinality: string): void {\r\n        this.cardinality = cardinality;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (this.$rectBackground) {\r\n            this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n            this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n        }\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((cardinality.length === 0 && this.property.length > 0) || !this.$cardinalitySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$cardinalitySvg) {\r\n            this.$cardinalitySvg.textContent = cardinality;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.property.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    public updateProperty(property: string): void {\r\n        this.property = property;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((property.length === 0 && this.cardinality.length > 0) || !this.$propertySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$propertySvg) {\r\n            this.$propertySvg.textContent = property;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.cardinality.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos: Point = this.getPos();\r\n        let group = Util.create({ tag: 'g', class: 'SVGEdgeInfo', transform: 'translate(0, 0)' });\r\n\r\n        // append rect as background for text items\r\n        this.$rectBackground = Util.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y - this.$heightOfOneTextItem + 3,\r\n            width: this.getSize().x,\r\n            height: this.getSize().y,\r\n            fill: '#DDD',\r\n            'stroke-width': 0,\r\n            rx: '5',\r\n            ry: '5'\r\n        });\r\n        group.appendChild(this.$rectBackground);\r\n\r\n        let y = pos.y;\r\n        if (this.property) {\r\n            // property\r\n            this.$propertySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$propertySvg.textContent = this.property;\r\n            group.appendChild(this.$propertySvg);\r\n\r\n            y += this.$heightOfOneTextItem;\r\n        }\r\n\r\n        // cardinality\r\n        if (this.cardinality) {\r\n            this.$cardinalitySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$cardinalitySvg.textContent = this.cardinality;\r\n            group.appendChild(this.$cardinalitySvg);\r\n        }\r\n\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        let cardinalityAvailable = this.cardinality && this.cardinality.length > 0;\r\n        let propertyAvailable = this.property && this.property.length > 0;\r\n\r\n        return !propertyAvailable && !cardinalityAvailable;\r\n    }\r\n\r\n    public redrawFromEdge(newPos: Point): void {\r\n\r\n        if (!newPos) {\r\n            return;\r\n        }\r\n\r\n        let oldPos = this.getPos();\r\n\r\n        // get difference between new and the old position\r\n        let diffPos = new Point();\r\n        diffPos.x = newPos.x - oldPos.x;\r\n        diffPos.y = newPos.y - oldPos.y;\r\n\r\n        // get translate information\r\n        let translation = this.$view.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        let sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        // set new traslation values\r\n        let newTransX = (sx + diffPos.x);\r\n        let newTransY = (sy + diffPos.y);\r\n        this.$view.setAttributeNS(null, 'transform', 'translate(' + newTransX + ' ' + newTransY + ')');\r\n\r\n        // set new position of svg\r\n        this.getPos().x = newPos.x;\r\n        this.getPos().y = newPos.y;\r\n    }\r\n\r\n    public getText(): string {\r\n        let infoTxt: string = '';\r\n\r\n        if (this.property) {\r\n            infoTxt = this.property;\r\n        }\r\n        if (this.cardinality) {\r\n            if (infoTxt.length > 0) {\r\n                infoTxt += '\\n';\r\n            }\r\n            infoTxt += this.cardinality;\r\n        }\r\n\r\n        return infoTxt;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    private calcSize(): Point {\r\n        let text: string = this.getText();\r\n        let items: Array<string> = text.split('\\n');\r\n\r\n        let maxSize = new Point(0, 0);\r\n        if (text.length === 0) {\r\n            return maxSize;\r\n        }\r\n\r\n        for (let i = 0; i < items.length; i += 1) {\r\n            // calculate size\r\n            let sizeOfText: ClientRect = Util.sizeOf(items[i]);\r\n            maxSize.x = Math.max(maxSize.x, sizeOfText.width);\r\n            maxSize.y += sizeOfText.height;\r\n\r\n            this.$heightOfOneTextItem = sizeOfText.height;\r\n        }\r\n\r\n        return maxSize;\r\n    }\r\n    private resetAllSvgElements() {\r\n        this.$cardinalitySvg = undefined;\r\n        this.$view = undefined;\r\n        this.$propertySvg = undefined;\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\nimport {PropertyBinder} from '../../PropertyBinder';\r\n\r\nexport class Input extends Control {\r\n    private type: string;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data = super.initViewDataProperties(oldData);\r\n        if ('checkbox' === this.type || 'radio' === this.type) {\r\n            data.addFrom('checked', oldData);\r\n        }\r\n        data.addFrom('value', oldData);\r\n        data.addFrom('type', oldData);\r\n        return data;\r\n    }\r\n\r\n    public load(data: any) {\r\n        let id: string;\r\n        let inputField: HTMLElement;\r\n        let useData: boolean;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            useData = true;\r\n        } else {\r\n            id = data.id;\r\n            if (data.type) {\r\n                this.setType(data['type']);\r\n            } else {\r\n                this.setType('text');\r\n            }\r\n            if (data.hasOwnProperty('property')) {\r\n                this.setProperty(data['property']);\r\n            }\r\n            useData = false;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n\r\n        inputField = document.getElementById(id);\r\n\r\n        if (useData) {\r\n            if (inputField) {\r\n                // TODO disuss how to decide, which property we should listen on...\r\n                // this.property = id;\r\n                if (inputField.hasAttribute('Property')) {\r\n                    this.setProperty(inputField.getAttribute('Property'));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (inputField instanceof HTMLInputElement) {\r\n            this.setView(inputField);\r\n            this.type = inputField.type;\r\n            // useData = false;\r\n        } else {\r\n            if (!inputField) {\r\n                this.setView(document.createElement('input'));\r\n                this.$viewData = this.initViewDataProperties(this.$viewData);\r\n                // append viewListener\r\n                // this.$view.addEventListener('change', this.$viewListener);\r\n                if (typeof(data) !== 'string') {\r\n                    for (let attr in data) {\r\n                        if (data.hasOwnProperty(attr) === false) {\r\n                            continue;\r\n                        }\r\n                        // this.$view[attr] = data[attr];\r\n                        this.$viewData.setValue(attr, data[attr]);\r\n                    }\r\n                } else {\r\n                    if (this.type) {\r\n                        this.$view.setAttribute('type', this.type);\r\n                    }\r\n                    if (data.hasOwnProperty('class')) {\r\n                        this.$view.setAttribute('class', data['class']);\r\n                    }\r\n                    this.$view.setAttribute('id', this.id);\r\n                    this.$view.setAttribute('property', this.property);\r\n                }\r\n\r\n                if (data.value) {\r\n                    // if theres a value at the control, we want to change the model to the new value\r\n                    if (this.$model) {\r\n                        this.$model.setValue(this.lastProperty, data.value);\r\n                    }\r\n                }\r\n                if (this.$model) {\r\n                    PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                }\r\n\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (this.property && entity) {\r\n            if (entity.id === this.property.split('.')[0]) {\r\n                this.$model = entity;\r\n                PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                // entity.addListener(this, this.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n    // TODO FIXME protected updateElement(property: string, value: string) {\r\n    //     if (this.$view instanceof HTMLInputElement) {\r\n    //         if (value != null) {\r\n    //             if(property == this.lastProperty) {\r\n    //                 (<HTMLInputElement>this.$view)[this.getStandardProperty()] = value;\r\n    //             } else {\r\n    //                 // this.getRoot().setValue(this, property, value, (<HTMLInputElement>this.$view)[property]);\r\n    //                 (<HTMLInputElement>this.$view)[property] = value;\r\n    //             }\r\n    //         } else {\r\n    //             delete (<HTMLInputElement>this.$view)[property];\r\n    //         }\r\n    //     }\r\n    // }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            super.controlChanged(ev);\r\n        }\r\n// <<<<<<< HEAD\r\n//             let newVal = element[this.getStandardProperty()];\r\n//             if (this.isKeyOnly()) {\r\n//                 // we expect, element[this.lastProperty] to be boolean:\r\n//                 if (!newVal) {\r\n//                     newVal = null;\r\n//                 }\r\n//             } else {\r\n//             }\r\n        // let $graphModel;\r\n        // let value;\r\n        /*if (this.$graphModel) {\r\n            $graphModel = this.$graphModel;\r\n            value = this.$graphModel.getValue(this.lastProperty);\r\n        } else {\r\n            $graphModel = this;\r\n            if (this.$view) {\r\n                value = this.$view[this.lastProperty];\r\n            }\r\n        }*/\r\n        // this.$model.setValue(this.lastProperty, newVal);\r\n        // this.propertyChange(this.$graphModel,this.lastProperty, this.$graphModel.getValue(this.lastProperty), newVal);\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n// =======\r\n        // let newVal = element[this.lastProperty];\r\n        // if (this.isKeyOnly()) {\r\n        //     // we expect, element[this.lastProperty] to be boolean:\r\n        //     if (!newVal) {\r\n        //         newVal = null;\r\n        //     }\r\n        // } else {\r\n        // }\r\n        // let $graphModel;\r\n        // let value;\r\n\r\n        // $graphModel = this.getViewData();\r\n        // if (this.$graphModel) {\r\n        //     $graphModel = this.$graphModel;\r\n        //     value = this.$graphModel.getValue(this.lastProperty);\r\n        // } else {\r\n        //     $graphModel = this;\r\n        //     if (this.$view) {\r\n        //         value = this.$view[this.lastProperty];\r\n        //     }\r\n        // }\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n//            this.saveViewInData();\r\n// >>>>>>> addOldFunctions\r\n//         } else {\r\n//             console.log('value does not match the pattern...');\r\n//         }\r\n    }\r\n\r\n    public setType(type: string): void {\r\n        let oldValue: string = this.type;\r\n        if (oldValue === type) {\r\n            return;\r\n        }\r\n        if (type === 'radio') {\r\n            this.$viewData.setValue('checked', null);\r\n        } else {\r\n            this.$viewData.removeKey('checked');\r\n        }\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\n\r\nexport class Label extends Control {\r\n    public load(data: JSON): any {\r\n        this.createControl(this.$owner, data);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('label');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr === 'textContent') {\r\n                this.$view.textContent = data['textContent'];\r\n            } else {\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Method extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.updateType(data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.updateType(data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.updateType(data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n            // e.g. setName() : string or name:string\r\n            let dataSplitted = data.split(':');\r\n\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }\r\n                else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType(dataSplitted[1].trim() || 'void');\r\n            }\r\n            // set default return type of void\r\n            else {\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = data.trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }  else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType('void');\r\n            }\r\n        }\r\n\r\n        if (Util.includes(this.$data.getValue('name'), '(') && !Util.includes(this.$data.getValue('name'), ')') === false) {\r\n            this.$data.setValue('name', this.$data.getValue('name') + '()');\r\n        }\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\nimport {Association} from '../edges';\r\nimport { GraphModel } from '..';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\n\r\nexport class Node extends DiagramElement {\r\n    public $edges: Association[] = [];\r\n    public $minWidth: number = 150;\r\n    public $minheight: number = 25;\r\n    public $defaulEdgeType: string;\r\n\r\n    constructor(data: JSON|string|Object|any) {\r\n        super();\r\n\r\n        // default size\r\n        this.withSize(this.$minWidth, this.$minheight);\r\n\r\n        if (data) {\r\n            if (data['x'] && data['y']) {\r\n                this.withPos(data['x'], data['y']);\r\n            }\r\n            if (data['width'] || data['height']) {\r\n                this.withSize(data['width'], data['height']);\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos = this.getPos();\r\n        const size = this.getSize();\r\n\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x - size.x / 2,\r\n            y: pos.y - size.y / 2,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y,\r\n            width: size.x,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        const shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'middle',\r\n            'font-family': 'Verdana',\r\n            'font-size': '14',\r\n            fill: 'black'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = this.id;\r\n\r\n        let group = this.createShape({tag: 'g', id: this.id});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public copy(): Node {\r\n        let copy: Node;\r\n        // create new id\r\n        let model = <GraphModel>this.$owner || <GraphModel>this.getRoot();\r\n        if (model) {\r\n            let type = this.property || Node.name;\r\n            let newId = model.getNewId(type);\r\n            copy = <Node>model.createElement(type, newId, null);\r\n            copy.withSize(this.getSize().x, this.getSize().y);\r\n            copy.$owner = model;\r\n        } else {\r\n            copy.id = this.id + '-copy';\r\n            copy.$owner = this.getRoot();\r\n        }\r\n        return copy;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n// EMPTY\r\n    }\r\n    public addAttribute(value: string): Attribute {\r\n        return null;\r\n    }\r\n    public getAttributes(): Attribute[] {\r\n        return null;\r\n    }\r\n    public addMethod(value: string): Method {\r\n        return null;\r\n    }\r\n    public updateLabel(newLabel: string): void {\r\n// EMPTY\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\n\r\nexport class SO extends DiagramElement {\r\n    public static create(element: Object) {\r\n        let result: SO = new SO();\r\n        for (let key in element) {\r\n            if (element.hasOwnProperty(key) === false) {\r\n                continue;\r\n            }\r\n            result.withKeyValue(key, element[key]);\r\n\r\n        }\r\n        return result;\r\n    }\r\n\r\n    public withKeyValue(key: string, value: any): SO {\r\n        if (key === 'typ') {\r\n            this.property = value;\r\n        } else if (key === 'x') {\r\n            this.withPos(value, null);\r\n        } else if (key === 'y') {\r\n            this.withPos(null, value);\r\n        } else if (key === 'width') {\r\n            this.withSize(value, null);\r\n        } else if (key === 'height') {\r\n            this.withSize(null, value);\r\n        } else {\r\n            this[key] = value;\r\n        }\r\n        return this;\r\n    }\r\n}\r\n","import {Point} from '../BaseElements';\r\nimport {Node} from './Node';\r\n\r\nexport class StereoType extends Node {\r\n\r\n    protected stereoType: string;\r\n\r\n    constructor (type: string, x: number, y: number) {\r\n        super('');\r\n        this.withPos(x, y);\r\n        this.setStereoType(type);\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        let pos: Point = this.getPos();\r\n        let size: Point = this.getSize();\r\n\r\n               // = = = STEREOTYPE = = =\r\n        let stereoType = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y - this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': 10,\r\n            'font-weight': 'bold',\r\n            fill: 'black'\r\n        });\r\n        stereoType.textContent = this.stereoType;\r\n\r\n        this.$view = stereoType;\r\n        return stereoType;\r\n    }\r\n\r\n    public setStereoType(value: string): void {\r\n        this.stereoType = '<<' + value + '>>';\r\n    }\r\n\r\n    public getStereoType(): string {\r\n        return this.stereoType;\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { SO } from './SO';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport { Util } from '../../util';\r\n\r\nexport class Symbol extends Node {\r\n    public $heightMax: number = 0;\r\n    public $heightMin: number = 0;\r\n\r\n    constructor(typ: string) {\r\n        super(typ);\r\n    }\r\n\r\n    public draw(typ?: string): SVGElement {\r\n        return SymbolLibary.draw(this);\r\n    }\r\n}\r\n\r\n// \t\t\t\t###################################################### SymbolLibary ####################################################################################\r\n// Example Items\r\n// {tag: 'path', d: ''}\r\n// {tag: 'rect', width:46, height:34}\r\n// {tag: 'ellipse', width:23, height:4}\r\n// {tag: 'line', x1:650, y1:-286, x2:650, y2:-252}\r\n// {tag: 'circle', r:5, x:12, y:0}\r\n// {tag: 'image', height: 30, width: 50, content$src: hallo}\r\n// {tag: 'text', 'text-anchor': 'left', x: '10'}\r\nexport class SymbolLibary {\r\n\r\n    public static drawSVG(node: any): SVGSVGElement {\r\n        // const lib = new SymbolLibary();\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            const parent = SO.create(node);\r\n            parent['property'] = 'SVG';\r\n            symbol = fn(parent);\r\n            // symbol = fn.apply(lib, parent);\r\n\r\n            return SymbolLibary.createGroup(parent, symbol);\r\n        }\r\n        return symbol;\r\n    }\r\n\r\n    public static draw(node: any, parent?: Object): SVGElement {\r\n        // Node is Symbol or simple Object\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            if (!(node instanceof DiagramElement)) {\r\n                node = SO.create(node);\r\n                if (!node.property) {\r\n                    node.property = 'SVG';\r\n                }\r\n            }\r\n            symbol = fn.apply(this, [node]);\r\n            if (!parent) {\r\n                return SymbolLibary.createGroup(node, symbol);\r\n            }\r\n            return SymbolLibary.createGroup(node, symbol);\r\n        } else if (node.property) {\r\n            symbol = new Symbol(node.property);\r\n            symbol.init(node);\r\n            let pos = node.getPos();\r\n            let size = node.getSize();\r\n            symbol.withPos(pos.x, pos.y);\r\n            symbol.withSize(size.x, size.y);\r\n            symbol['value'] = node['value'];\r\n            parent = node['$parent'];\r\n            return SymbolLibary.draw(symbol, parent);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public static upFirstChar(txt: string): string {\r\n        return txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase();\r\n    }\r\n\r\n    public static isSymbolName(typ: string): boolean {\r\n        let fn = SymbolLibary['draw' + SymbolLibary.upFirstChar(typ)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static isSymbol(node: Symbol) {\r\n        let fn = SymbolLibary[SymbolLibary.getName(node)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static getName(node: any): string {\r\n        if (node['type']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['type']);\r\n        }\r\n        if (node.property) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node.property);\r\n        }\r\n        if (node['src']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['src']);\r\n        }\r\n        return 'drawNode';\r\n    }\r\n\r\n    /*FIXME   public static createImage(node: Symbol, $graphModel:Node) {\r\n           let n, img: HTMLElement;\r\n           // node.$graphModel = node;\r\n           if (SymbolLibary.isSymbol(node)) {\r\n               return SymbolLibary.draw(null, node);\r\n           }\r\n           n = {tag: 'img', $graphModel: node, src: node['src']};\r\n           let size = node.getSize();\r\n           if (size.isEmpty() === false) {\r\n               n['width'] = size.x;\r\n               n['height'] = size.y;\r\n           } else {\r\n               n['xmlns'] = 'http://www.w3.org/1999/xhtml';\r\n           }\r\n           img = Util.create(n);\r\n           if (size.isEmpty()) {\r\n               $graphModel.appendImage(img);\r\n               return null;\r\n           }\r\n           return img;\r\n       }*/\r\n\r\n    public static createGroup(node: DiagramElement, group: any) {\r\n        let func, y: number, z: number, box, item: Element, transform, i, offsetX = 0, offsetY = 0;\r\n        let svg: any;\r\n        if (node.property.toUpperCase() === 'HTML') {\r\n            let so = {\r\n                tag: 'svg',\r\n                style: { left: (group.x | 0) + node.getPos().x, top: (group.y | 0) + node.getPos().y, position: 'absolute' }\r\n            };\r\n            if (node['transform']) {\r\n                so['transform'] = node['transform'];\r\n            }\r\n            svg = Util.create(so);\r\n        } else {\r\n            svg = Util.create({ tag: 'g' });\r\n            transform = 'translate(' + group.getPos().x + ' ' + group.getPos().y + ')';\r\n            if (group.scale) {\r\n                transform += ' scale(' + group.scale + ')';\r\n            }\r\n            if (group.rotate) {\r\n                transform += ' rotate(' + group.rotate + ')';\r\n            }\r\n            svg.setAttribute('transform', transform);\r\n            if (group['id']) {\r\n                svg.id = group['id'];\r\n            }\r\n        }\r\n\r\n        if (node['tooltip']) {\r\n            const tooltipTitleAttr = {\r\n                tag: 'title'\r\n            };\r\n            let tooltipTitle = Util.createShape(tooltipTitleAttr);\r\n            tooltipTitle.textContent = node['tooltip'];\r\n            svg.appendChild(tooltipTitle);\r\n        }\r\n\r\n        if (node['background']) {\r\n            const attrCircle = {\r\n                tag: 'circle',\r\n                cx: 20,\r\n                cy: 20,\r\n                r: 17,\r\n                stroke: '#888',\r\n                'stroke-width': 0,\r\n                fill: '#DDD'\r\n            };\r\n            svg.appendChild(Util.create(attrCircle));\r\n        }\r\n\r\n        for (i = 0; i < group.items.length; i += 1) {\r\n            svg.appendChild(Util.create(group.items[i]));\r\n        }\r\n        let elements = node['elements'];\r\n        Util.setSize(svg, group.width + node.getSize().x, group.height + node.getSize().y);\r\n        node['$heightMin'] = node.getSize().y;\r\n        if (elements) {\r\n            for (i = 0; i < elements.length; i += 1) {\r\n                if (!elements[i] && elements[i].length < 1) {\r\n                    elements.splice(i, 1);\r\n                    i -= 1;\r\n                }\r\n            }\r\n            box = Util.create({ tag: 'g' });\r\n            // Calculate new Height\r\n            let c: number;\r\n            z = 0;\r\n            for (c = 0; c < elements.length; c += 1) {\r\n                if (typeof elements[c] === 'string') {\r\n                    z += 1;\r\n                } else {\r\n                    z += elements[c].length;\r\n                }\r\n            }\r\n            z = z * 25 + 6;\r\n            box.appendChild(Util.create({\r\n                tag: 'rect',\r\n                rx: 0,\r\n                x: offsetX,\r\n                y: (offsetY + 28),\r\n                width: 70,\r\n                height: z,\r\n                stroke: '#000',\r\n                fill: '#fff',\r\n                opacity: '0.7'\r\n            }));\r\n            node['$heightMax'] = z + node['$heightMin'];\r\n\r\n            svg['elements'] = elements;\r\n            if (node['type'] === 'DropDown') {\r\n                svg['activ'] = Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': 60,\r\n                    'x': (10 + offsetX),\r\n                    'y': 20,\r\n                    value: node['activText']\r\n                });\r\n                svg.appendChild(svg.activ);\r\n            }\r\n\r\n            y = offsetY + 46;\r\n            // 46 -28 = 18\r\n\r\n            func = function (event: Event) {\r\n                if (svg.activ) {\r\n                    svg.activ.textContent = (<any>event.currentTarget).value;\r\n                }\r\n            };\r\n            let txt: string;\r\n            let textClass = 'SVGTEXT';\r\n            for (z = 0; z < elements.length; z += 1) {\r\n                if (typeof elements[z] === 'string') {\r\n                    txt = elements[z];\r\n                } else {\r\n                    item = this.addText(y, offsetX, box, elements[z][0], 'SVGTEXT');\r\n                    y += 26;\r\n                    for (c = 1; c < elements[z].length; c += 1) {\r\n                        item = this.addText(y, offsetX, box, '* ' + elements[z][c], 'SVGTEXTITEM');\r\n\r\n                        item['value'] = elements[z];\r\n                        if (node['action']) {\r\n                            item['onclick'] = node['action'];\r\n                        } else {\r\n                            item['onclick'] = func;\r\n                        }\r\n                        y += 26;\r\n                    }\r\n                    txt = elements[z];\r\n                    let subBox = Util.create({\r\n                        tag: 'rect',\r\n                        rx: 0,\r\n                        x: offsetX,\r\n                        y: (offsetY + 28),\r\n                        width: 60,\r\n                        height: z,\r\n                        stroke: '#000',\r\n                        fill: '#fff',\r\n                        opacity: '0.7'\r\n                    });\r\n                    continue;\r\n                }\r\n                // let txt = elements[z];\r\n                item = this.addText(y, offsetX, box, txt, textClass);\r\n\r\n                item['value'] = elements[z];\r\n                if (node['action']) {\r\n                    item['onclick'] = node['action'];\r\n                } else {\r\n                    item['onclick'] = func;\r\n                }\r\n                y += 26;\r\n            }\r\n            svg.choicebox = box;\r\n        }\r\n        svg.tool = node;\r\n        svg.onclick = function () {\r\n            if (svg.status === 'close') {\r\n                svg.open();\r\n            } else {\r\n                svg.close();\r\n            }\r\n        };\r\n        svg.close = function () {\r\n            if (svg.status === 'open' && svg.choicebox) {\r\n                this.removeChild(svg.choicebox);\r\n            }\r\n            svg.status = 'close';\r\n            svg.tool.$size.height = svg.tool.heightMin;\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x, g.tool.height + g.tool.y);\r\n            Util.setSize(svg, svg.tool.$size.x, svg.tool.$size.y);\r\n        };\r\n        svg.open = function () {\r\n            if (this.tagName === 'svg') {\r\n                return;\r\n            }\r\n            if (svg.status === 'close' && svg.choicebox) {\r\n                this.appendChild(svg.choicebox);\r\n            }\r\n            svg.status = 'open';\r\n            svg.tool.$size.height = svg.tool.heightMax;\r\n            Util.setSize(svg, svg.tool.width, svg.tool.height);\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x + 10, g.tool.height + g.tool.y + 10);\r\n        };\r\n        svg.close();\r\n        return svg;\r\n    }\r\n\r\n    public static addChild(parent: SVGElement, json: JSON | Element): void {\r\n        let item: Element;\r\n        if ((<any>json).offsetLeft) {\r\n            item = <Element>json;\r\n        } else {\r\n            item = Util.create(json);\r\n        }\r\n        item.setAttribute('class', 'draggable');\r\n        parent.appendChild(item);\r\n    }\r\n\r\n    public static all(node: any): void {\r\n        SymbolLibary.drawSmiley(node);\r\n        SymbolLibary.drawDatabase(node);\r\n        SymbolLibary.drawLetter(node);\r\n        SymbolLibary.drawMobilephone(node);\r\n        SymbolLibary.drawWall(node);\r\n        SymbolLibary.drawActor(node);\r\n        SymbolLibary.drawLamp(node);\r\n        SymbolLibary.drawArrow(node);\r\n        SymbolLibary.drawButton(node);\r\n        SymbolLibary.drawDropdown(node);\r\n        SymbolLibary.drawClassicon(node);\r\n        SymbolLibary.drawClassWithEdgeicon(node);\r\n    }\r\n\r\n    public static drawHamburger(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'circle', r: 10, fill: '#ccc', cx: 12, cy: 12, 'stroke-width': 1, stroke: 'black'},\r\n                { tag: 'path', d: 'M 8,7 H 16 M 8,12 H 16 M 8,17 H 16', stroke: 'black', fill: 'none' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawSmiley(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'path', d: 'm49.01774,25.64542a24.5001,24.5 0 1 1 -49.0001,0a24.5001,24.5 0 1 1 49.0001,0z', stroke: 'black', fill: 'none' }, { tag: 'path', d: 'm8,31.5c16,20 32,0.3 32,0.3' },\r\n                { tag: 'path', d: 'm19.15,20.32a1.74,2.52 0 1 1 -3.49,0a1.74,2.52 0 1 1 3.49,0z' },\r\n                { tag: 'path', d: 'm33,20.32a1.74,2.52 0 1 1 -3.48,0a1.74,2.52 0 1 1 3.48,0z' },\r\n                { tag: 'path', d: 'm5.57,31.65c3.39,0.91 4.03,-2.20 4.03,-2.20' },\r\n                { tag: 'path', d: 'm43,32c-3,0.91 -4,-2.20 -4.04,-2.20' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDatabase(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 40,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,-6.26 25.03,-6.26 25.03,0l0,25.82c0,6.26 -25.03,6.26 -25.03,0l0,-25.82z',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLetter(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 17,\r\n            items: [\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1,1l22,0l0,14l-22,0l0,-14z' },\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1.06,1.14l10.94,6.81l10.91,-6.91' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMobilephone(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 4.2 0.5 15.61 0c 2 0 3.7 1.65 3.7 3.7l 0 41.6c 0 2-1.65 3.7-3.7 3.7l-15.6 0c-2 0-3.7-1.6-3.7-3.7l 0-41.6c 0-2 1.6-3.7 3.7-3.7z',\r\n                    fill: 'none',\r\n                    stroke: 'black'\r\n                },\r\n                { tag: 'path', d: 'm 12.5 2.73a 0.5 0.5 0 1 1-1 0 0.5 0.5 0 1 1 1 0z' },\r\n                { tag: 'path', d: 'm 14 46a 2 2 0 1 1-4 0 2 2 0 1 1 4 0z' },\r\n                { tag: 'path', d: 'm 8 5 7 0' },\r\n                { tag: 'path', d: 'm 1.63 7.54 20.73 0 0 34-20.73 0z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawWall(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'path', d: 'm26,45.44l-5,3.56l-21,-9l0,-36.41l5,-3.56l20.96,9l-0,36.4z' },\r\n                {\r\n                    tag: 'path',\r\n                    stroke: 'white',\r\n                    d: 'm2.21,11l18.34,7.91m-14.46,-12.57l0,6.3m8.2,21.74l0,6.35m-8.6,-10l0,6.351m4.1,-10.67l0,6.3m4.8,-10.2l0,6.3m-8.87,-10.23l0,6.35m4.78,-10.22l0,6.35m-8,14.5l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m0,-13l0,34m-18.23,-41.84l18.3,8m0,0.11l5,-3.57'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawActor(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'line', stroke: '#000', x1: '12', y1: '10', x2: '12', y2: '30' },\r\n                { tag: 'circle', stroke: '#000', cy: '5', cx: '12', r: '5' },\r\n                { tag: 'line', stroke: '#000', y2: '18', x2: '25', y1: '18', x1: '0' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '5', y1: '30', x1: '12' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '20', y1: '30', x1: '12' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLamp(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 22.47 10.58c-6.57 0-11.89 5.17-11.89 11.54 0 2.35 0.74 4.54 2 6.36 2 4 4.36 5.63 4.42 10.4l 11.15 0c 0.12-4.9 2.5-6.8 4.43-10.4 1.39-1.5 1.8-4.5 1.8-6.4 0-6.4-5.3-11.5-11.9-11.5z',\r\n                    fill: 'white',\r\n                    stroke: 'black'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 40 8 0c 0.58 0 1 0.5 1 1 0 0.6-0.5 1-1 1l-8 0c-0.6 0-1-0.47-1-1 0-0.58 0.47-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 42.7 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 45.3 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                { tag: 'path', d: 'm 19.5 48c 0.37 0.8 1 1.3 1.9 1.7 0.6 0.3 1.5 0.3 2 0 0.8-0.3 1.4-0.8 1.9-1.8z' },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 6 37.5 4.2-4c 0.3-0.3 0.8-0.3 1 0 0.3 0.3 0.3 0.8 0 1.1l-4.2 4c-0.3 0.3-0.8 0.3-1.1 0-0.3-0.3-0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 39 37.56-4.15-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 38 23 5.8 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.8 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 1.3 23 6 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.9 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 34.75 11.2 4-4.1c 0.3-0.3 0.3-0.8 0-1-0.3-0.3-0.8-0.3-1 0l-4 4.1c-0.3 0.3-0.3 0.8 0 1 0.3 0.3 0.8 0.3 1 0z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 11.23 10-4-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 21.64 1.3 0 5.8c 0 0.4 0.3 0.8 0.8 0.8 0.4 0 0.8-0.3 0.8-0.8l 0-5.8c 0-0.4-0.3-0.8-0.8-0.8-0.4 0-0.8 0.3-0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 26.1 24.3c-0.5 0-1 0.2-1.3 0.4-1.1 0.6-2 3-2.27 3.5-0.26-0.69-1.14-2.9-2.2-3.5-0.7-0.4-2-0.7-2.5 0-0.6 0.8 0.2 2.2 0.9 2.9 1 0.9 3.9 0.9 3.9 0.9 0 0 0 0 0 0 0.54 0 2.8 0 3.7-0.9 0.7-0.7 1.5-2 0.9-2.9-0.2-0.3-0.7-0.4-1.2-0.4z'\r\n                },\r\n                { tag: 'path', d: 'm 22.5 28.57 0 10.7' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawStop(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 30,\r\n            height: 30,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: '#FFF',\r\n                    'stroke-width': '2',\r\n                    stroke: '#B00',\r\n                    d: 'm 6,6 a 14,14 0 1 0 0.06,-0.06 z m 0,0 20,21'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMin(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    d: 'm 0,0 19,0 0,19 -19,0 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 13,-0.04'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawArrow(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 10,\r\n            height: 9,\r\n            rotate: node['rotate'],\r\n            items: [\r\n                { tag: 'path', fill: '#000', stroke: '#000', d: 'M 0,0 10,4 0,9 z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMax(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    'stroke-dashoffset': 2,\r\n                    'stroke-dasharray': '4.8,4.8',\r\n                    d: 'm 0,0 4.91187,0 5.44643,0 9.11886,0 0,19.47716 -19.47716,0 0,-15.88809 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 6,0.006 0.02,5 0.01,-11 -0.03,6.02 c 2,-0.01 4,-0.002 6,0.01'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawButton(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight, btnValue;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        btnValue = node['value'] || '';\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: 60,\r\n            height: 28,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 8,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    filter: 'url(#drop-shadow)',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                { tag: 'text', $font: true, x: 10, y: 18, fill: 'black', value: btnValue, 'class': 'hand' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDropdown(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 0,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth - 20,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 2,\r\n                    x: btnWidth - 20,\r\n                    y: 0,\r\n                    width: 20,\r\n                    height: 28,\r\n                    stroke: '#000',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    style: 'fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1',\r\n                    d: 'm ' + (btnWidth - 15) + ',13 10,0 L ' + (btnWidth - 10) + ',20 z'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassicon(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.19999l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm25.68807,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.2l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                { tag: 'line', x1: 11, y1: 7, x2: 25, y2: 7, stroke: '#000' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassWithEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M2,10 20,10 20,35 2,35 Z M2,17 20,17 M20,10 28,5 28,9 M 28.5,4.7 24,4',\r\n                    style: 'fill:none;stroke:#000000;transform:scale(0.8);'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClass(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: '100%',\r\n            height: '100%',\r\n            items: [\r\n                { tag: 'rect', width: 50, height: 40, x: 0, y: 0, 'stroke-width': 2, stroke: 'black', fill: 'none'},\r\n                { tag: 'rect', width: 50, height: 12, x: 0, y: 18, 'stroke-width': 1, stroke: 'black', fill: 'none'},\r\n                { tag: 'text', x: 27, y: 14, 'text-anchor': 'middle', 'font-size': 11, value: 'Class'},\r\n                { tag: 'text', x: 5, y: 24, 'font-size': 5, value: '+ field: type'},\r\n                { tag: 'text', x: 5, y: 36, 'font-size': 5, value: '+ method(type)'}\r\n            ]\r\n        });\r\n    }\r\n/*\r\n<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n    <g>\r\n    <text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text>\r\n        <text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>\r\n*/\r\n\r\n    public static drawEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M10,30 30,10 M19,10 30,10 30,21',\r\n                    style: 'fill:none;stroke:#555;stroke-width:2;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawCopynode(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M5 5 L15 5 L15 20 L5 20 Z M5 10 L15 10',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M8 2 L18 2 L18 17 L8 17 Z M8 7 L18 7'\r\n                        + 'M11 4.5 L15 4.5 '\r\n                        + 'M10 10 L16 10 '\r\n                        + 'M10 13 L16 13 ',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawBasket(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M12 12 L18 12 L18 11 L22 11 L22 12 L28 12 L28 14 L27 14 L27 29 L13 29 L13 14 L12 14 Z M13 14 L27 14 M20 17 L20 26 M17 16 L17 27 M23 16 L23 27',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawPencil(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M6 20 L12 23 L33 23 L33 17 L12 17 Z M30 17 L30 23 M12 17 L12 23 M15 19 L28 19 M15 21 L28 21',\r\n                    stroke: '#000',\r\n                    'stroke-width': 1,\r\n                    fill: 'white'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    private static addText(y: number, offsetX: number, box: Element, text: string, textClass: string): Element {\r\n        let item: Element;\r\n        box.appendChild(Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'text-anchor': 'left',\r\n            width: 70,\r\n            x: 10,\r\n            y: y,\r\n            class: textClass,\r\n            value: text,\r\n            eventValue: text\r\n        }));\r\n        if (textClass === 'SVGTEXT') {\r\n            textClass = 'SVGChoiceText';\r\n        } else {\r\n            textClass = 'SVGChoice';\r\n        }\r\n\r\n        item = Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            x: offsetX,\r\n            y: y - 18,\r\n            width: 70,\r\n            height: 24,\r\n            stroke: 'none',\r\n            class: textClass,\r\n        });\r\n        item['eventValue'] = text;\r\n        box.appendChild(item);\r\n        return item;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n}\r\n","import {Control} from '../../Control';\r\nimport BridgeElement from '../../BridgeElement';\r\nimport Data from '../../Data';\r\nimport {Util} from '../../util';\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Table extends Control {\r\n    protected items: BridgeElement[] = [];\r\n    private columns: Column[] = [];\r\n    private cells: Object = {};\r\n    private $bodysection: HTMLTableSectionElement;\r\n    private $headersection: HTMLTableSectionElement;\r\n    private showedItems: Array<BridgeElement> = [];\r\n    // BridgeElements:\r\n    private itemsIds: Object = {};\r\n    private countElement: HTMLElement;\r\n    private countColumn: HTMLElement;\r\n    private countColumnPos: number;\r\n    private resultColumn: string;\r\n    private lastSearchText: string;\r\n    private searchColumns: Array<string> = [];\r\n    private searchText: Array<string> = [];\r\n    private sortColumn: Column;\r\n    private direction: number;\r\n    private moveElement: Column = null;\r\n    private isDrag: boolean = false;\r\n    private moveTimeStamp: number;\r\n    private moveX: number;\r\n    private movePos: number;\r\n    private dragColumn: Column;\r\n    private dragPos: number;\r\n    private tableOption: HTMLTableHeaderCellElement;\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    private static indexOfChild(item: BridgeElement) {\r\n        let i: number = 0;\r\n        let child: Node = item.gui;\r\n        while ((child = child.previousSibling) !== null) {\r\n            i++;\r\n        }\r\n        return i;\r\n    }\r\n\r\n    public load(data: any): void {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n            if (data.property) {\r\n                this.property = data.property;\r\n            }\r\n\r\n            if (data.searchColumns) {\r\n                let search: Array<string> = [];\r\n                if (typeof(data.searchColumns) === 'string') {\r\n                    search = data.searchColumns.split(' ');\r\n                } else {\r\n                    search = data.searchColumns;\r\n                }\r\n                for (let z: number = 0; z < search.length; z++) {\r\n                    let item = search[z].trim();\r\n                    if (item.length > 0) {\r\n                        if (this.searchColumns.indexOf(item) < 0) {\r\n                            this.searchColumns.push(item);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        if (this.$view) {\r\n            // Must be an Update\r\n            if (data['columns']) {\r\n                // It is a json must add all things and generate HTML\r\n                for (let i in data['columns']) {\r\n                    if (data['columns'].hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    let col = this.parseData(data['columns'][i]);\r\n                    this.addHeaderInfo(col);\r\n                    this.columns.push(col);\r\n                    this.tableOption.parentElement.insertBefore(col.$element, this.tableOption);\r\n                }\r\n                for (let i in this.showedItems) {\r\n                    let item: BridgeElement = this.showedItems[i];\r\n                    let cell;\r\n                    // Now Add some Children\r\n                    while (item.gui.children.length < this.columns.length) {\r\n                        cell = document.createElement('td');\r\n                        item.gui.appendChild(cell);\r\n                    }\r\n                    // Now Remove Some Children\r\n                    while (item.gui.children.length > this.columns.length) {\r\n                        item.gui.removeChild(item.gui.children[item.gui.children.length - 1]);\r\n                    }\r\n                    for (let c: number = 0; c < this.columns.length; c++) {\r\n                        let name = this.columns[c].attribute;\r\n                        // let count = this.columns.length;\r\n                        cell = item.gui.children[c];\r\n                        cell.innerHTML = item.model.getValue(name);\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n\r\n        this.$view = document.getElementById(id);\r\n        let headerrow: HTMLTableRowElement;\r\n        if (this.$view) {\r\n            if (!this.property) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('table');\r\n            this.$owner.appendChild(this);\r\n        }\r\n        if (!this.$bodysection) {\r\n            // add tbody element if missing\r\n            this.$bodysection = document.createElement('tbody');\r\n            this.$view.appendChild(this.$bodysection);\r\n        }\r\n        if (data['classname']) {\r\n            this.$view.className = data['classname'];\r\n        } else {\r\n            this.$view.className = 'mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp';\r\n        }\r\n\r\n        this.id = id;\r\n        this.$view.id = id;\r\n        this.$view.setAttribute('type', this.constructor['name'].toLowerCase());\r\n        let counter = 0;\r\n        for (let c = 0; c < this.$view.children.length; c++) {\r\n            let row: HTMLTableRowElement = <HTMLTableRowElement>this.$view.children[c];\r\n            if (row instanceof HTMLTableSectionElement) {\r\n                if (row.tagName === 'THEAD') {\r\n                    headerrow = row;\r\n                    // Its a thead\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingHeader(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                } else {\r\n                    // Its a tbody\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingData(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                }\r\n            } else {\r\n                // fallback, if there are no thead and tbody...\r\n                if (counter === 0) {\r\n                    headerrow = row;\r\n                    this.parsingHeader(row);\r\n                } else {\r\n                    this.parsingData(row);\r\n                }\r\n            }\r\n            counter++;\r\n        }\r\n        if (!headerrow || !this.$headersection) {\r\n            if (!this.$headersection) {\r\n                // find eventually existing thead\r\n                let header = this.$view.getElementsByTagName('thead');\r\n                if (header.length === 0) {\r\n                    this.$headersection = document.createElement('thead');\r\n                    this.$view.appendChild(this.$headersection);\r\n                } else {\r\n                    // take first thead element\r\n                    this.$headersection = <HTMLTableSectionElement>header.item(0);\r\n                }\r\n            }\r\n            if (!headerrow) {\r\n                headerrow = document.createElement('tr');\r\n                this.$headersection.appendChild(headerrow);\r\n            }\r\n        }\r\n\r\n        if (data['columns']) {\r\n            // It is a json must add all things and generate HTML\r\n            for (let i in data['columns']) {\r\n                if (data['columns'].hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                let col = this.parseData(data['columns'][i]);\r\n                this.addHeaderInfo(col);\r\n                this.columns.push(col);\r\n                headerrow.appendChild(col.$element);\r\n            }\r\n            this.tableOption = document.createElement('th');\r\n            this.tableOption.classList.add('tableOption');\r\n            headerrow.appendChild(this.tableOption);\r\n            let context: HTMLElement = this.addOptionItem(null, this.tableOption, true);\r\n            let contentChild: HTMLElement = this.addOptionItem('show', context, true);\r\n            // let simpleLink: HTMLElement = this.addOptionItem('show', contentChild, false);\r\n            this.addOptionItem('show', contentChild, false);\r\n        }\r\n        this.registerEvents(['mousemove', 'mousedown', 'mouseup', 'resize', 'dragstart', 'dragover', 'drop', 'dragend']);\r\n\r\n        // Check for SearchBar\r\n        // if(data[\"searchproperty\"]){\r\n        // Create Full Row\r\n        let searchBar = document.createElement('tr');\r\n        let cell = document.createElement('td');\r\n        cell.setAttribute('colspan', '' + (this.columns.length));\r\n        searchBar.appendChild(cell);\r\n\r\n        let search = document.createElement('input');\r\n        search.className = 'search';\r\n        let that = this;\r\n        search.addEventListener('keyup', function (evt) {\r\n            that.search(evt.target['value']);\r\n        });\r\n\r\n        cell.appendChild(search);\r\n        if (this.resultColumn) {\r\n            if (this.resultColumn.indexOf('#') !== 0) {\r\n                this.countElement = document.createElement('div');\r\n                searchBar.appendChild(this.countElement);\r\n            } else {\r\n                for (let z: number = 0; z < this.$headersection.children.length; z++) {\r\n                    if (this.$headersection.children[z].innerHTML === this.resultColumn) {\r\n                        this.countColumn = <HTMLElement> this.$headersection.children[z];\r\n                        this.countColumnPos = z;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        let first = this.$headersection.children.item(0);\r\n        this.$headersection.insertBefore(searchBar, first);\r\n\r\n        this.updateElement(this.property, null);\r\n\r\n        // now update those elements, that were not loaded currently\r\n    }\r\n\r\n    public tableEvent(type: string, e: Event) {\r\n        let button: number = 0;\r\n        let eventX: number = 0;\r\n        if (e instanceof MouseEvent) {\r\n            button = e.buttons;\r\n            eventX = e.pageX;\r\n        }\r\n        if (type === 'mouseup') {\r\n            this.moveElement = null;\r\n        } else if (type === 'mousedown' || type === 'resize') {\r\n            // End to Resize\r\n            this.moveElement = null;\r\n            if (button === 1) {\r\n                let c: number;\r\n                for (c = 0; c < this.columns.length; c++) {\r\n                    if (this.columns[c].$resize === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = false;\r\n                        break;\r\n                    } else if (this.columns[c].$element === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = true;\r\n                    }\r\n                }\r\n                this.moveTimeStamp = e.timeStamp;\r\n                this.moveX = eventX;\r\n            } else {\r\n                this.moveTimeStamp = 0;\r\n            }\r\n        } else if (type === 'mousemove') {\r\n            if (button === 1 && this.moveElement) {\r\n                if (this.moveTimeStamp && e.timeStamp - this.moveTimeStamp < 2000) {\r\n                    if (this.isDrag) {\r\n                        // FIXME\r\n                    } else {\r\n                        let x = eventX - this.moveX;\r\n                        let width = this.moveElement.$element.offsetWidth;\r\n                        this.moveElement.$element.width = '' + (width + x);\r\n                        e.stopPropagation();\r\n                    }\r\n                }\r\n                this.moveX = eventX;\r\n                this.moveTimeStamp = e.timeStamp;\r\n            }\r\n        } else if (this.isDrag) {\r\n            this.columnDragEvent(type, <DragEvent> e);\r\n        }\r\n    }\r\n\r\n    public parsingHeader(row: HTMLTableRowElement) {\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let column: HTMLTableHeaderCellElement = <HTMLTableHeaderCellElement>row.children[i];\r\n            let id = column.innerHTML.trim();\r\n            let col: Column = null;\r\n            for (let c in this.columns) {\r\n                if (this.columns.hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                if (this.columns[c].label === id) {\r\n                    col = this.columns[c];\r\n                    col.$element = column;\r\n                    break;\r\n                }\r\n            }\r\n            if (col === null) {\r\n                col = new Column();\r\n                col.label = id;\r\n                col.attribute = column.getAttribute('attribute');\r\n                col.$element = column;\r\n                this.columns.push(col);\r\n            }\r\n            this.addHeaderInfo(col);\r\n        }\r\n    }\r\n\r\n    public parsingData(row: HTMLTableRowElement) {\r\n        let id = row.getAttribute('id');\r\n        let item: Data = this.$owner.getItem(id);\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let cell: HTMLTableCellElement = <HTMLTableCellElement>row.children[i];\r\n            let colAttribute = this.columns[i].attribute;\r\n            if (colAttribute.indexOf('\\.') < 0) {\r\n                item[colAttribute] = cell.innerHTML.trim();\r\n            }\r\n        }\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: Object, newValue: Object) {\r\n        if (entity) {\r\n            // Check for Show\r\n            if (this.property && !entity.hasProperty(property)) {\r\n                return;\r\n            }\r\n        }\r\n        if (entity.id === undefined) {\r\n            return;\r\n        }\r\n        let item: BridgeElement = <BridgeElement>this.itemsIds[entity.id];\r\n        let row: HTMLTableRowElement;\r\n        if (!item) {\r\n            item = new BridgeElement(entity);\r\n            this.items.push(item);\r\n            this.itemsIds[entity.id] = item;\r\n        }\r\n        row = this.cells[entity.id];\r\n        if (row) {\r\n            item.gui = row;\r\n        }\r\n        if (this.searching(item) === false) {\r\n            return;\r\n        }\r\n        let cell;\r\n        let showItem = false;\r\n\r\n        if (!row) {\r\n            showItem = true;\r\n            row = document.createElement('tr');\r\n            let count = this.columns.length;\r\n            for (let i = 0; i < count; i++) {\r\n                cell = document.createElement('td');\r\n                row.appendChild(cell);\r\n            }\r\n            this.cells[entity.id] = row;\r\n            item.gui = row;\r\n        }\r\n        for (let c: number = 0; c < this.columns.length; c++) {\r\n            let name = this.columns[c].attribute;\r\n            if (name === property) {\r\n                cell = row.children[c];\r\n                cell.innerHTML = <string>newValue;\r\n            }\r\n        }\r\n        if (showItem) {\r\n            this.showItem(item, true);\r\n        }\r\n        // super.propertyChange(entity, property, newValue, oldValue);\r\n    }\r\n\r\n    public sort(column: Column) {\r\n        if (this.sortColumn === column) {\r\n            if (this.direction === 1) {\r\n                this.direction = -1;\r\n                column.$element.classList.remove('asc');\r\n                column.$element.classList.add('desc');\r\n            } else {\r\n                this.direction = 1;\r\n                column.$element.classList.remove('desc');\r\n                column.$element.classList.add('asc');\r\n            }\r\n        } else {\r\n            if (this.sortColumn !== null) {\r\n                this.sortColumn.$element.classList.remove('desc');\r\n                this.sortColumn.$element.classList.remove('asc');\r\n            }\r\n            this.sortColumn = column;\r\n            this.sortColumn.$element.classList.add('asc');\r\n            this.direction = 1;\r\n        }\r\n        let that = this;\r\n        let sort = function (a: BridgeElement, b: BridgeElement) {\r\n            return that.sorting(a, b);\r\n        };\r\n        this.showedItems.sort(sort);\r\n        let len: number = this.showedItems.length;\r\n        let body = this.$bodysection;\r\n        let i = 0;\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            if (i !== Table.indexOfChild(item)) {\r\n                break;\r\n            }\r\n            i = i + 1;\r\n        }\r\n        while (body.children.length > i) {\r\n            body.removeChild(body.children.item(body.children.length - 1));\r\n        }\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            body.appendChild(item.gui);\r\n            i = i + 1;\r\n        }\r\n\r\n        //      body.removeChild(item.gui);\r\n        //      body.remove\r\n    }\r\n\r\n    public sorting(a: BridgeElement, b: BridgeElement): number {\r\n        let path: string[] = this.sortColumn.attribute.split('.');\r\n        let itemA = a.model.prop;\r\n        let itemB = b.model.prop;\r\n        let check = this.sortColumn.attribute;\r\n        for (let p = 0; p < path.length; p++) {\r\n            check = path[p];\r\n            if (itemA[check]) {\r\n                itemA = itemA[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n            if (itemB[check]) {\r\n                itemB = itemB[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n        if (itemA !== itemB) {\r\n            if (this.direction === 1) {\r\n                return (itemA < itemB) ? -1 : 1;\r\n            }\r\n            return (itemA < itemB) ? 1 : -1;\r\n\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    // Searching\r\n    public search(origSearchText: string): void {\r\n        if (!origSearchText) {\r\n            origSearchText = '';\r\n        }\r\n        let searchText: string = origSearchText.trim().toLowerCase();\r\n        if (searchText === this.lastSearchText && searchText !== '') {\r\n            return; // <==== nothing to be done\r\n        }\r\n        let oldSearch: string = this.lastSearchText;\r\n        this.lastSearchText = searchText;\r\n\r\n        this.parseSearchArray();\r\n        if (searchText !== '' && oldSearch !== null && searchText.indexOf(oldSearch) >= 0 && searchText.indexOf('|') < 0) {\r\n            this.searchArray(this.showedItems);\r\n        } else {\r\n            this.searchSet(this.items);\r\n        }\r\n        this.refreshCounter();\r\n    }\r\n\r\n    public refreshCounter() {\r\n        if (this.countColumn) {\r\n            this.countColumn.innerHTML = this.columns[this.countColumnPos].label + ' (' + this.showedItems.length + ')';\r\n        }\r\n        // var countElement = document.getElementById('talkCount');\r\n        //  if (countElement) {\r\n        //     var txt = (this.showedItems.size() > 0 && searchText.length > 0 ) ? this.options.TEXT_SEARCHLIST : this.options.TEXT_SEARCHFULLLIST;\r\n        //     countElement.innerHTML = txt.replace(\"%LEN%\", this.root['children'].length).replace(\"%COUNT%\", this.showedItems.size()).replace(\"%SEARCH%\", origSearchText);\r\n        // }\r\n        // if (this.countColumn) {\r\n        //     this.countColu1mn.innerHTML = this.countColumn[\"label\"] + \" (\" + this.showedItems.size() + \")\";\r\n        // }\r\n    }\r\n\r\n    public parseSearchArray() {\r\n        let pos: number = 0;\r\n        let split: Array<string> = [];\r\n        let quote: boolean = false;\r\n        for (let i: number = 0; i < this.lastSearchText.length; i++) {\r\n            if ((this.lastSearchText.charAt(i) === ' ') && !quote) {\r\n                let txt = this.lastSearchText.substring(pos, i).trim();\r\n                if (txt.length > 0) {\r\n                    split.push(txt);\r\n                }\r\n                pos = i + 1;\r\n            } else if (this.lastSearchText.charAt(i) === '\\\"') {\r\n                if (quote) {\r\n                    let txt = this.lastSearchText.substring(pos, i).trim();\r\n                    if (txt.length > 0) {\r\n                        split.push(txt);\r\n                    }\r\n                    pos = i + 1;\r\n                } else {\r\n                    pos = i + 1;\r\n                }\r\n                quote = !quote;\r\n            }\r\n        }\r\n        if (pos < this.lastSearchText.length) {\r\n            split.push(this.lastSearchText.substring(pos, this.lastSearchText.length).trim());\r\n        }\r\n        this.searchText = split;\r\n        return split;\r\n    }\r\n\r\n    public searchArray(root: Array<BridgeElement>) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let i: number = 0; i < root.length; i++) {\r\n            let item: BridgeElement = root[i];\r\n            this.showItem(item, this.searching(item));\r\n        }\r\n    }\r\n\r\n    public searchSet(root: BridgeElement[]) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let item of root) {\r\n            let child: BridgeElement = <BridgeElement>item;\r\n            this.showItem(child, this.searching(child));\r\n        }\r\n    }\r\n\r\n    public showItem(item: BridgeElement, visible: boolean) {\r\n        if (visible) {\r\n            this.showedItems.push(item);\r\n            this.$bodysection.appendChild(item.gui);\r\n        } else if (item.gui && item.gui.parentElement) {\r\n            this.$bodysection.removeChild(item.gui);\r\n        }\r\n    }\r\n\r\n    public searching(item: BridgeElement): boolean {\r\n        let fullText: string = '';\r\n        for (let i: number = 0; i < this.searchColumns.length; i++) {\r\n            fullText = fullText + ' ' + item.model.getValue(this.searchColumns[i]);\r\n        }\r\n        fullText = fullText.trim().toLowerCase();\r\n        for (let z: number = 0; z < this.searchText.length; z++) {\r\n            if ('' !== this.searchText[z]) {\r\n                let orSplit: Array<string>;\r\n                if (this.searchText[z].indexOf('|') > 0) {\r\n                    orSplit = this.searchText[z].split('|');\r\n                } else {\r\n                    orSplit = [this.searchText[z]];\r\n                }\r\n                let o: number = 0;\r\n                for (; o < orSplit.length; o++) {\r\n                    let pos: number = orSplit[o].indexOf(':');\r\n                    if (orSplit[o].indexOf('#') === 0 && pos > 1) {\r\n                        // if (searchProperties.contains(propString)) {\r\n                        let value: string = orSplit[o].substring(pos + 1);\r\n                        let column: string = orSplit[o].substring(1, pos - 1);\r\n                        let dataValue: Object = item.model.getValue(column);\r\n                        if (dataValue) {\r\n                            if (dataValue.toString().toLowerCase().indexOf(value) >= 0) {\r\n                                // Search for simple Property\r\n                                break;\r\n                            }\r\n                        }\r\n                    } else if (orSplit[o].length > 1 && orSplit[o].indexOf('-') === 0) {\r\n                        if (fullText.indexOf(orSplit[o].substring(1)) < 0) {\r\n                            break;\r\n                        }\r\n                    } else if (fullText.indexOf(orSplit[o]) >= 0) {\r\n                        // his search word is found in full text\r\n                        break;\r\n                    }\r\n                }\r\n                if (o === orSplit.length) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public getColumn(): Column[] {\r\n        return this.columns;\r\n    }\r\n\r\n    public updateElement(property: string, value: string): void {\r\n        // first clear all elements inside the table:\r\n        for (let item of this.items) {\r\n            if (item instanceof BridgeElement) {\r\n                (<BridgeElement>item).model.removeListener(this);\r\n            }\r\n        }\r\n\r\n        this.items = [];\r\n        this.itemsIds = {};\r\n\r\n        // load all entitys that match the property\r\n        if (this.property !== undefined) {\r\n            let items = this.$owner.getItems();\r\n            for (let j in items) {\r\n                if (items.hasOwnProperty(j)) {\r\n                    let item = items[j];\r\n                    if (item instanceof Data) {\r\n                        if (property === j) {\r\n                            // if (property == item.property) {\r\n                            let i = new BridgeElement(<Data>item);\r\n                            this.items.push(i);\r\n                            this.itemsIds[item.id] = i;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            this.redrawAllElements();\r\n        }\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        if (this.$owner !== null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    protected redrawAllElements() {\r\n        let children: HTMLCollection = this.$bodysection.children;\r\n        // remove old children\r\n        for (let i = 0; i < children.length; i++) {\r\n            let child = children.item(i);\r\n            // remove child\r\n            this.$bodysection.removeChild(child);\r\n        }\r\n\r\n        // load new children\r\n        for (let obj of this.items) {\r\n            // register listeners\r\n            obj.model.addListener(this);\r\n            // create tr\r\n            let row = this.createRow(obj);\r\n            this.$bodysection.appendChild(row);\r\n            this.cells[obj.id] = row;\r\n        }\r\n    }\r\n\r\n    private parseData(column: any): Column {\r\n        let col = new Column();\r\n        col.label = column.label || column.id;\r\n        col.attribute = column.attribute || column.label || column.id;\r\n        col.$element = document.createElement('th');\r\n        col.$element.innerHTML = col.label;\r\n        col.$element.draggable = true;\r\n\r\n        // resize Header\r\n        col.$resize = document.createElement('div');\r\n        col.$resize.classList.add('resize');\r\n        col.$element.appendChild(col.$resize);\r\n\r\n        return col;\r\n    }\r\n\r\n    private createRow(data: BridgeElement): HTMLTableRowElement {\r\n        let tr: HTMLTableRowElement = document.createElement('tr');\r\n\r\n        for (let id of this.columns) {\r\n            let td: HTMLTableDataCellElement = document.createElement('td');\r\n            tr.appendChild(td);\r\n            td.innerHTML = data.model.getValue(id.attribute);\r\n        }\r\n        return tr;\r\n    }\r\n\r\n    private addHeaderInfo(col: Column) {\r\n        let element: HTMLTableCellElement = col.$element;\r\n        let that = this;\r\n        element.classList.add('sort');\r\n        element.addEventListener('click',\r\n            function () {\r\n                that.sort(col);\r\n            },\r\n            false);\r\n    }\r\n\r\n    private columnDragEvent(type: string, e: DragEvent) {\r\n        if (type === 'dragstart') {\r\n            // Target (this) element is the source node.\r\n            this.moveElement.$element.style.opacity = '0.4';\r\n            e.dataTransfer.effectAllowed = 'move';\r\n            e.dataTransfer.setData('text/json', JSON.stringify(Util.toJson(this.moveElement)));\r\n        } else if (type === 'dragenter') {\r\n            // TO Nothing\r\n        } else if (type === 'dragleave') {\r\n            this.moveElement.$element.classList.remove('over');\r\n        } else if (type === 'dragover') {\r\n            if (e.preventDefault) {\r\n                e.preventDefault(); // Necessary. Allows us to drop.\r\n            }\r\n            for (let c = 0; c < this.columns.length; c++) {\r\n                if (this.columns[c].$element === e.target) {\r\n                    this.dragColumn = this.columns[c];\r\n                    this.dragPos = c;\r\n                    this.columns[c].$element.classList.add('over');\r\n                } else {\r\n                    this.columns[c].$element.classList.remove('over');\r\n                }\r\n            }\r\n            if (e.target === this.tableOption) {\r\n                this.tableOption.classList.add('over');\r\n                this.dragPos = this.columns.length;\r\n            } else {\r\n                this.tableOption.classList.remove('over');\r\n            }\r\n            e.dataTransfer.dropEffect = 'move';  // See the section on the DataTransfer object.\r\n        } else if (type === 'drop') {\r\n            // this / e.target is current target element.\r\n            if (e.stopPropagation) {\r\n                e.stopPropagation(); // stops the browser from redirecting.\r\n            }\r\n            if (this.movePos === this.dragPos) {\r\n                return;\r\n            }\r\n            // movePos -> dragPos\r\n            // See the section on the DataTransfer object.\r\n            // DataModel\r\n            this.columns.splice(this.movePos, 1);\r\n            if (this.movePos >= this.dragPos) {\r\n                this.columns.splice(this.dragPos, 0, this.moveElement);\r\n            } else {\r\n                this.columns.splice(this.dragPos - 1, 0, this.moveElement);\r\n            }\r\n\r\n            // Header Line\r\n            let line: HTMLElement = this.moveElement.$element.parentElement;\r\n            line.removeChild(this.moveElement.$element);\r\n            if (this.dragPos < this.columns.length) {\r\n                line.insertBefore(this.moveElement.$element, this.dragColumn.$element);\r\n            } else {\r\n                line.insertBefore(this.moveElement.$element, this.tableOption);\r\n            }\r\n\r\n            let oldElement: Element;\r\n            let newElement: Element;\r\n\r\n            // Now all Childs\r\n            for (let i = 0; i < this.$bodysection.children.length; i++) {\r\n                // Each line\r\n                line = <HTMLElement>this.$bodysection.children.item(i);\r\n                oldElement = line.children.item(this.movePos);\r\n                newElement = line.children.item(this.dragPos);\r\n                line.removeChild(oldElement);\r\n                line.insertBefore(oldElement, newElement);\r\n            }\r\n        } else if (type === 'dragend') {\r\n            // this/e.target is the source node.\r\n            this.moveElement.$element.style.opacity = '1';\r\n            for (let i = 0; i < this.columns.length; i++) {\r\n                this.columns[i].$element.classList.remove('over');\r\n            }\r\n            this.tableOption.classList.remove('over');\r\n        }\r\n    }\r\n\r\n    private addOptionItem(label: string, parent: HTMLElement, sub: boolean): HTMLElement {\r\n        let labelControl;\r\n        if (label) {\r\n            labelControl = document.createElement('a');\r\n            labelControl.appendChild(document.createTextNode(label));\r\n            labelControl.href = 'javascript:void(0);';\r\n            parent.appendChild(labelControl);\r\n        }\r\n        if (sub) {\r\n            let context = document.createElement('div');\r\n            context.classList.add('dropdown-content');\r\n            context.style.setProperty('position', 'absolute');\r\n            parent.appendChild(context);\r\n\r\n            /* When the user clicks on the button,\r\n             toggle between hiding and showing the dropdown content */\r\n            parent.addEventListener(\r\n                'click',\r\n                function () {\r\n                    context.classList.toggle('show');\r\n                },\r\n                false);\r\n            return context;\r\n        }\r\n        return labelControl;\r\n    }\r\n\r\n    private registerEvents(events: string[]) {\r\n        let that = this;\r\n        for (let i = 0; i < events.length; i++) {\r\n            this.$view.addEventListener(events[i], function (evt) {\r\n                return that.tableEvent(events[i], evt);\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\nclass Column {\r\n    label: string;\r\n    attribute: string;\r\n    $element: HTMLTableHeaderCellElement;\r\n    $resize: HTMLDivElement;\r\n    visible: boolean;\r\n}\r\n","import { AutoComplete } from './AutoComplete';\r\nimport { BR } from './BR';\r\nimport { Div } from './Div';\r\nimport { Label } from './Label';\r\n\r\nexport * from './Node';\r\nexport * from './Class';\r\nexport * from './SO';\r\nexport * from './Symbol';\r\n\r\nexport * from './BR';\r\nexport * from './Button';\r\nexport * from './Div';\r\nexport * from './Form';\r\nexport * from './Input';\r\nexport * from './Label';\r\nexport * from './Table';\r\nexport * from './HTML';\r\nexport * from './Dice';\r\nexport * from './AutoComplete';\r\nexport * from './Attribute';\r\nexport * from './Method';\r\nexport * from './ClazzProperty';\r\n\r\nnew AutoComplete();\r\nnew BR();\r\nnew Div();\r\nnew Label();\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class AddNode implements EventHandler {\r\n\r\n    public MIN_SIZE_TO_ADD_NODE: number = 30;\r\n    public MIN_SIZE_TO_ADD_TEXT: number = 10;\r\n    private graph: Graph;\r\n    private svgRect: SVGSVGElement;\r\n    private svgGroupAddNode: SVGSVGElement;\r\n    private svgTextAddNode: SVGSVGElement;\r\n    private svgTextRectAddNode: SVGSVGElement;\r\n    private isRectDrawing: boolean;\r\n    private isDrawToLeft: boolean;\r\n    private isDrawToTop: boolean;\r\n    private isBigEnoughForAddNode: boolean;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(AddNode.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(AddNode.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!this.canHandle()) {\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element.id !== 'RootElement') {\r\n            return false;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element.id === 'RootElement') {\r\n                    this.start(event, element);\r\n\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mousemove':\r\n                this.drawRect(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.removeRect();\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.addNode();\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawRect(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isRectDrawing) {\r\n            return;\r\n        }\r\n\r\n        evt.stopPropagation();\r\n\r\n        let width = Util.getEventX(evt) - this.x;\r\n        let height = Util.getEventY(evt) - this.y;\r\n\r\n        // rectangle is in a negative area, drawn to upper case. not possibble with svg\r\n        if (width < 0) {\r\n            this.isDrawToLeft = true;\r\n            width *= -1;\r\n        } else {\r\n            this.isDrawToLeft = false;\r\n        }\r\n\r\n        if (height < 0) {\r\n            this.isDrawToTop = true;\r\n            height *= -1;\r\n        } else {\r\n            this.isDrawToTop = false;\r\n        }\r\n\r\n        if (width > this.MIN_SIZE_TO_ADD_NODE && height > this.MIN_SIZE_TO_ADD_NODE) {\r\n            this.isBigEnoughForAddNode = true;\r\n        } else {\r\n            this.isBigEnoughForAddNode = false;\r\n        }\r\n\r\n        this.graph.root.style.cursor = 'pointer';\r\n\r\n        // if line wasnt draw\r\n        if (!this.svgRect) {\r\n\r\n            let rectAddNode = Util.createShape({\r\n                tag: 'rect',\r\n                id: 'addNodeRect',\r\n                x: this.x,\r\n                y: this.y,\r\n                width: 1,\r\n                height: 1,\r\n                class: 'SVGAddNode'\r\n            });\r\n\r\n            let group = Util.createShape({ tag: 'g', id: 'groupAddNode' });\r\n            group.appendChild(rectAddNode);\r\n\r\n            this.graph.root.appendChild(group);\r\n            this.svgRect = rectAddNode;\r\n            this.svgGroupAddNode = group;\r\n        }\r\n        else {\r\n\r\n            let svgRectBBox = this.svgRect.getBBox();\r\n\r\n            // if rect is big enough, show text as helper\r\n            if ((svgRectBBox.width > this.MIN_SIZE_TO_ADD_TEXT\r\n                || svgRectBBox.height > this.MIN_SIZE_TO_ADD_TEXT) && !this.svgTextAddNode) {\r\n\r\n                let textAddNode = Util.createShape({\r\n                    tag: 'text',\r\n                    x: this.x,\r\n                    y: this.y - 5,\r\n                    'font-family': 'Verdana',\r\n                    'font-size': 12,\r\n                    fill: 'black'\r\n                });\r\n                textAddNode.textContent = 'Hold on and move to create a new class';\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n\r\n\r\n                // get correct size of text node\r\n                let sizeClientRect: ClientRect = textAddNode.getBoundingClientRect();\r\n\r\n                let rectBackgroundForText = Util.createShape({\r\n                    tag: 'rect',\r\n                    x: this.x,\r\n                    y: this.y - sizeClientRect.height,\r\n                    width: sizeClientRect.width,\r\n                    height: sizeClientRect.height,\r\n                    fill: '#DDD',\r\n                    'stroke-width': 0\r\n                });\r\n\r\n                this.svgTextRectAddNode = rectBackgroundForText;\r\n                this.svgTextAddNode = textAddNode;\r\n                this.svgGroupAddNode.appendChild(rectBackgroundForText);\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n            }\r\n\r\n            if (this.isDrawToLeft) {\r\n                this.svgRect.setAttributeNS(null, 'x', '' + Util.getEventX(evt));\r\n            }\r\n\r\n            if (this.isDrawToTop) {\r\n                this.svgRect.setAttributeNS(null, 'y', '' + Util.getEventY(evt));\r\n            }\r\n\r\n            // set width and height\r\n            this.svgRect.setAttributeNS(null, 'width', width.toString());\r\n            this.svgRect.setAttributeNS(null, 'height', height.toString());\r\n\r\n            // set color\r\n            if (this.isBigEnoughForAddNode) {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode-ready');\r\n\r\n                // draw text\r\n            }\r\n            else {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeRect(): void {\r\n        this.isRectDrawing = false;\r\n        this.isBigEnoughForAddNode = false;\r\n\r\n        this.graph.root.style.cursor = 'default';\r\n\r\n        if (this.svgGroupAddNode) {\r\n            this.graph.root.removeChild(this.svgGroupAddNode);\r\n            this.svgGroupAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgRect) {\r\n            this.svgRect = undefined;\r\n        }\r\n\r\n        if (this.svgTextAddNode) {\r\n            this.svgTextAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgTextRectAddNode) {\r\n            this.svgTextRectAddNode = undefined;\r\n        }\r\n    }\r\n\r\n    private addNode(): void {\r\n\r\n        if (!this.isBigEnoughForAddNode) {\r\n            this.removeRect();\r\n            return;\r\n        }\r\n\r\n        this.removeRect();\r\n        let node = this.graph.addElementWithValues('Class', { x: this.x, y: this.y });\r\n        this.graph.drawElement(node);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isRectDrawing) {\r\n            return;\r\n        }\r\n        this.isRectDrawing = true;\r\n\r\n        this.x = Util.getEventX(evt);\r\n        this.y = Util.getEventY(evt);\r\n    }\r\n\r\n}\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement, Point } from '../elements/BaseElements';\r\nimport { GraphModel } from '../elements/Model';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Control } from '../Control';\r\nimport { Util } from '../util';\r\n\r\nexport class Drag implements EventHandler {\r\n\r\n    private element: DiagramElement;\r\n    private svgElement: SVGSVGElement;\r\n    private dragging = false;\r\n    private reinsert = false;\r\n    private mouseOffset = new Point();\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        if (!this.canHandle()) {\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if ((!this.dragging) && (element.id !== 'RootElement')) {\r\n                    this.element = element;\r\n                    this.svgElement = <SVGSVGElement>element.$view;\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mouseup':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n\r\n                break;\r\n            case 'mousemove':\r\n                if (this.dragging) {\r\n                    this.drag(event, element);\r\n                }\r\n                break;\r\n            case 'mouseleave':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Drag.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Drag.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private reset() {\r\n        this.dragging = false;\r\n        this.svgElement.style.cursor = 'pointer';\r\n\r\n        /*  WORKAROUND\r\n            Chrome got problem with the Node.appendChild() method.\r\n            Sometimes it works, sometimes not.\r\n            So the background is, in the drag method will the current element be appended\r\n            to front of the svg root.\r\n            If this happend, the click event won't fire.\r\n            So it will be fired manually.\r\n            This problem occurs only in chrome.\r\n        */\r\n        if (Util.isChrome()) {\r\n            let clickEvt = Util.createCustomEvent('click');\r\n            this.svgElement.dispatchEvent(clickEvt);\r\n        }\r\n    }\r\n\r\n    private start(evt: Event | any, element: Control) {\r\n\r\n        this.dragging = true;\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n        this.reinsert = true;\r\n\r\n        this.svgElement.style.cursor = 'move';\r\n    }\r\n\r\n    private drag(evt: Event | any, element: DiagramElement) {\r\n\r\n        if (this.reinsert) {\r\n            if (this.element.id !== 'RootElement') {\r\n                // nesseccary to set the dragged object on top of svg children\r\n                this.graph.root.appendChild(this.svgElement);\r\n            }\r\n\r\n            let dragEvent = Util.createCustomEvent('drag');\r\n            element.$view.dispatchEvent(dragEvent);\r\n        }\r\n        this.reinsert = false;\r\n\r\n        evt.stopPropagation();\r\n\r\n        const translation = this.svgElement.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        const sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        const transX = sx + evt.clientX - this.mouseOffset.x;\r\n        const transY = sy + evt.clientY - this.mouseOffset.y;\r\n        this.svgElement.setAttributeNS(null, 'transform', 'translate(' + transX + ' ' + transY + ')');\r\n        this.element.getPos().addNum(transX - sx, transY - sy);\r\n\r\n        if (this.element instanceof Node) {\r\n            (<Node>this.element).redrawEdges();\r\n        }\r\n\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n\r\n\r\n        // resize svg root\r\n        let maxX = this.element.getPos().x + this.element.getSize().x;\r\n        let maxY = this.element.getPos().y + this.element.getSize().y;\r\n\r\n        let domRectRoot = this.graph.root.getBoundingClientRect();\r\n        if(!domRectRoot){\r\n            return;\r\n        }\r\n\r\n        if(maxX > domRectRoot.width){\r\n            this.graph.root.setAttributeNS(null, 'width', '' + maxX);\r\n        }\r\n        \r\n        if(maxY > domRectRoot.height){\r\n            this.graph.root.setAttributeNS(null, 'height', '' + maxY);\r\n        }\r\n    }\r\n}\r\n","import PropertyChangeSupport from '../PropertyChangeSupport';\r\nimport Data from '../Data';\r\nimport {Adapter} from '../Adapter';\r\nimport ClazzProperty from '../elements/nodes/ClazzProperty';\r\n\r\nexport class GraphListener implements PropertyChangeSupport {\r\n    private $owner: ClazzProperty;\r\n\r\n    constructor(owner: ClazzProperty) {\r\n        this.$owner = owner;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        let adapter = this.$owner.getRoot().getAdapter();\r\n        if (adapter) {\r\n            // messages.add(\"{\\\"class\\\":\\\"de.uniks.networkparser.test.model.House\\\",\\\"id\\\":\\\"H1\\\",\\\"rem\\\":{\\\"floor\\\":4},\\\"upd\\\":{\\\"floor\\\":42}}\");\r\n            let myId =  this.$owner.$owner.getId();\r\n            if (myId && myId.length > 0) {\r\n                let pos = myId.indexOf(':');\r\n                if (pos > 0) {\r\n                    myId = myId.substring(0, pos).trim();\r\n                }\r\n            }\r\n            let myName = this.$owner.getName();\r\n            let remJson = {};\r\n            remJson[myName] = oldValue;\r\n            let updJson = {};\r\n            updJson[myName] = newValue;\r\n            let json = {};\r\n            json['id'] = myId;\r\n            json['rem'] = remJson;\r\n            json['upd'] = updJson;\r\n            let message = JSON.stringify(json);\r\n            (<Adapter> adapter).update(message);\r\n        }\r\n    }\r\n}\r\n","import {Graph} from '../elements/';\r\nimport {EventHandler, EventBus} from '../EventBus';\r\nimport {DiagramElement} from '../elements/';\r\nimport {Util} from '../util';\r\n\r\nexport class ImportFile implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(ImportFile.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(ImportFile.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        let type: string = typeof event;\r\n        if (type !== 'DragEvent') {\r\n            return false;\r\n        }\r\n        let evt: DragEvent = <DragEvent>event;\r\n        if (evt.type === 'dragover') {\r\n            this.handleDragOver(evt);\r\n        } else if (evt.type === 'dragleave') {\r\n            if (this.graph.$view !== evt.target) {\r\n                return false;\r\n            }\r\n            this.setBoardStyle('dragleave');\r\n        } else if (evt.type === 'drop') {\r\n            this.handleLoadFile(evt);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public setBoardStyle(typ: string): boolean {\r\n        let b = this.graph.$view;\r\n        Util.removeClass(b, 'Error');\r\n        Util.removeClass(b, 'Ok');\r\n        Util.removeClass(b, 'Add');\r\n        if (typ === 'dragleave') {\r\n            if (b['errorText']) {\r\n                b.removeChild(b['errorText']);\r\n                b['errorText'] = null;\r\n            }\r\n            return true;\r\n        }\r\n        Util.addClass(b, typ);\r\n        if (typ === 'Error') {\r\n            if (!b['errorText']) {\r\n                b['errorText'] = Util.create({tag: 'div', style: 'margin-top: 30%', value: 'NO TEXTFILE'});\r\n                b.appendChild(b['errorText']);\r\n            }\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private handleLoadFile(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n\r\n        let files = evt.dataTransfer.files; // FileList object.\r\n\r\n        if (files.length > 1) {\r\n            evt.dataTransfer.dropEffect = 'none';\r\n            return;\r\n        }\r\n\r\n        // files is a FileList of File objects. List some properties.\r\n        let reader  = new FileReader();\r\n        let output = [];\r\n        let htmlResult = '';\r\n        let that = this;\r\n        for (let i = 0, f; f = files[i]; i++) {\r\n            reader.onload = function(event) {\r\n                htmlResult = event.target['result'];\r\n                console.log('fileContent: ' + htmlResult);\r\n\r\n                // CHANGE TO INTERNAL OBJECT\r\n                if (that.graph) {\r\n                    that.graph.import(htmlResult);\r\n                }\r\n            };\r\n            reader.readAsText(f);\r\n        }\r\n        this.setBoardStyle('dragleave');\r\n    }\r\n\r\n    private handleDragOver(evt: DragEvent): void {\r\n        let error: boolean = true, n: string, f;\r\n        let files = evt.dataTransfer.files;\r\n        // process all File objects\r\n        if (files && files.length > 0) {\r\n            for (let i: number = 0; i < files.length; i += 1) {\r\n                f = files[i];\r\n                if (f.type.indexOf('text') === 0) {\r\n                    error = false;\r\n                } else if (f.type === '') {\r\n                    n = f.name.toLowerCase();\r\n                    if (n.indexOf('json', n.length - 4) !== -1) {\r\n                        error = false;\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            let items = evt.dataTransfer.items;\r\n            if (items && items.length > 0) {\r\n                for (let z = 0; z < items.length; z ++) {\r\n                    if (items[z].type === '' || items[z].type === 'text/plain') {\r\n                        error = false;\r\n                    }\r\n                }\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.\r\n        if (error) {\r\n            this.dragStyler(evt, 'Error');\r\n        } else if (evt.ctrlKey) {\r\n            this.dragStyler(evt, 'Add');\r\n        } else {\r\n            this.dragStyler(evt, 'Ok');\r\n        }\r\n        /* //evt.target['className'] += ' diagramLoadFile';\r\n        '//console.log('handDragOver');*/\r\n    }\r\n\r\n    private dragStyler(event: Event, typ: string) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n        this.setBoardStyle(typ);\r\n    }\r\n\r\n    private handleDragLeave(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n        evt.dataTransfer.dropEffect = 'link'; // Explicitly show this is a copy.\r\n        evt.target['className'] = 'diagram';\r\n        console.log('handDragLeave');\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Class } from '../elements/nodes/Class';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Association } from '../elements/index';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class NewEdge implements EventHandler {\r\n    private graph: Graph;\r\n    private svgLine: SVGSVGElement;\r\n    private isEdgeDrawing: boolean;\r\n    private sourceNode: Node;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    private lastTargetNode: Node;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(NewEdge.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(NewEdge.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!((<KeyboardEvent>event).ctrlKey || EventBus.isHandlerActiveOrFree('NewEdge', true))) {\r\n            this.removeLine();\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element instanceof Node) {\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n\r\n            case 'mousemove':\r\n                this.drawEdge(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.setNewEdgeToNode(event);\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default: break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawEdge(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        let lineToX = Util.getEventX(evt);\r\n        let lineToy = Util.getEventY(evt);\r\n\r\n        let path = `M${this.x} ${this.y} L${lineToX} ${lineToy}`;\r\n        // if line wasnt draw\r\n        if (!this.svgLine) {\r\n\r\n            let attr = {\r\n                tag: 'path',\r\n                id: 'newEdgePath',\r\n                d: path,\r\n                class: 'SVGEdge'\r\n            };\r\n\r\n            let shape = Util.createShape(attr);\r\n            this.svgLine = shape;\r\n\r\n            this.graph.root.appendChild(shape);\r\n            this.graph.root.appendChild(this.sourceNode.$view);\r\n        }\r\n        else {\r\n\r\n            // set new L path\r\n            this.svgLine.setAttributeNS(null, 'd', path);\r\n\r\n            // get node from position\r\n            let targetNode = this.graph.$graphModel.getNodeByPosition(Util.getEventX(evt), Util.getEventY(evt));\r\n\r\n            // if some targetnode is available, so highlight the node\r\n            if (targetNode) {\r\n\r\n                // reset the last one\r\n                if (this.lastTargetNode && this.lastTargetNode.id !== targetNode.id) {\r\n                    this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n                }\r\n\r\n                this.lastTargetNode = targetNode;\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz-drawedge');\r\n            }\r\n            else if (this.lastTargetNode) {\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeLine(): void {\r\n        this.isEdgeDrawing = false;\r\n\r\n        if (this.svgLine) {\r\n            this.graph.root.removeChild(this.svgLine);\r\n            this.svgLine = null;\r\n        }\r\n\r\n        if (this.lastTargetNode) {\r\n            this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n        }\r\n    }\r\n\r\n    private setNewEdgeToNode(event: Event | any): void {\r\n        // get node from position\r\n        let targetNode = this.graph.$graphModel\r\n            .getNodeByPosition(Util.getEventX(event), Util.getEventY(event));\r\n\r\n        if (!targetNode) {\r\n            this.removeLine();\r\n\r\n            return;\r\n        }\r\n\r\n        this.removeLine();\r\n        let edgeType = this.sourceNode.$defaulEdgeType || 'Association';\r\n\r\n        let jsonData = {\r\n            type: edgeType,\r\n            source: this.sourceNode.id,\r\n            target: targetNode.id\r\n        };\r\n\r\n        let newEdge = this.graph.$graphModel.addEdge(<any>jsonData, true);\r\n        this.graph.drawElement(newEdge);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        this.isEdgeDrawing = true;\r\n        this.sourceNode = element as Class;\r\n\r\n        this.x = this.sourceNode.getPos().x + (this.sourceNode.getSize().x / 2);\r\n        this.y = this.sourceNode.getPos().y + (this.sourceNode.getSize().y / 2);\r\n\r\n        // TODO: get this into util or select\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Node } from '../elements/nodes';\r\nimport { Association } from '../elements/edges';\r\nimport { Util } from '../util';\r\nimport { SymbolLibary } from '../elements/nodes/Symbol';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\nimport Attribute from '../elements/nodes/Attribute';\r\n\r\nexport class Select implements EventHandler {\r\n\r\n    private deleteShape: SVGSVGElement;\r\n    private addEdgeShape: SVGSVGElement;\r\n    private copyNodeShape: SVGSVGElement;\r\n    private graph: Graph;\r\n    private padding = 5;\r\n\r\n    private lastSelectedNode: Element;\r\n    private lastSelectedEdge: Element;\r\n\r\n    private isDragged: boolean;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.deleteShape = SymbolLibary.drawSVG({ type: 'Basket', background: true, id: 'trashcan', tooltip: 'Delete class' });\r\n        this.copyNodeShape = SymbolLibary.drawSVG({ type: 'Copynode', background: true, id: 'copyNode', tooltip: 'Copy class' });\r\n        this.addEdgeShape = SymbolLibary.drawSVG({ type: 'Edgeicon', background: true, id: 'addEdge', tooltip: 'Click and drag to connect this class' });\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        let x = Util.getEventX(event);\r\n        let y = Util.getEventY(event);\r\n\r\n        event.stopPropagation();\r\n        if (event.type === 'drag') {\r\n            this.isDragged = true;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            if (element instanceof Node) {\r\n                this.lastSelectedNode = <Element>element.$view;\r\n            }\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n        }\r\n\r\n        if (event.target['id'] === 'background' || element === this.graph.$graphModel) {\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let e = <Node>element;\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.graph.root.appendChild(this.addEdgeShape);\r\n            this.graph.root.appendChild(this.copyNodeShape);\r\n            this.graph.root.appendChild(element.$view);\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'visible');\r\n\r\n            let x = (e.getPos().x + e.getSize().x) + 5;\r\n            let y = e.getPos().y;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y + this.padding})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.copyNodeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 40 + this.padding})`);\r\n            this.copyNodeShape.onclick = (evt) => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let copyClass = (element).copy();\r\n                copyClass.withPos(nextFreePosition.x, nextFreePosition.y);\r\n                this.graph.drawElement(copyClass);\r\n            };\r\n\r\n            this.addEdgeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 80 + this.padding})`);\r\n            this.addEdgeShape.onmousedown = function () {\r\n                EventBus.setActiveHandler('NewEdge');\r\n                element.$view.dispatchEvent(Util.createCustomEvent('mousedown'));\r\n            };\r\n        }\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let clazz = <Node>element;\r\n\r\n            if (Util.isChrome()) {\r\n                if (this.lastSelectedNode && element.id === this.lastSelectedNode.id && !this.isDragged) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            this.isDragged = false;\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            this.lastSelectedNode = <Element>element.$view;\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete class');\r\n\r\n            // draw textbox to edit clazz in one line\r\n            let divInlineEdit = document.createElement('div');\r\n            divInlineEdit.id = 'inlineEdit';\r\n            divInlineEdit.style.position = 'absolute';\r\n            divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n            divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n            divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n            divInlineEdit.style.zIndex = '42';\r\n\r\n            let inputText = document.createElement('input');\r\n            inputText.type = 'text';\r\n            inputText.style.width = '100%';\r\n            inputText.placeholder = 'Add properties, edit label';\r\n\r\n            divInlineEdit.appendChild(inputText);\r\n            document.body.appendChild(divInlineEdit);\r\n\r\n            inputText.addEventListener('focusout', (evt) => {\r\n\r\n                if (Util.isChrome()) {\r\n                    // only if input is empty, remove the inline edit function\r\n                    if ((!inputText.value || inputText.value.length === 0) && (!this.lastSelectedNode || element.id !== this.lastSelectedNode.id)) {\r\n                        this.removeLastInlineEdit();\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                // only if input is empty, remove the inline edit function\r\n                if ((!inputText.value || inputText.value.length === 0)) {\r\n                    this.removeLastInlineEdit();\r\n                }\r\n            });\r\n\r\n            let g = this.graph;\r\n            let propertyTypes: string[] = ['boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'short', 'String', 'void'];\r\n            inputText.addEventListener('keydown', function (evt) {\r\n\r\n                let keyCode = (<any>evt).which;\r\n                let inputValue = <any>inputText.value;\r\n\r\n                if (Util.endsWith(inputValue, ':') && !document.getElementById('selectPropertyType')) {\r\n                    let selectType = document.createElement('select');\r\n                    selectType.id = 'selectPropertyType';\r\n                    selectType.style.width = '100%';\r\n\r\n                    for (let type of propertyTypes) {\r\n                        let selectOption = document.createElement('option');\r\n                        selectOption.value = type;\r\n                        selectOption.innerHTML = type;\r\n                        selectType.appendChild(selectOption);\r\n                    }\r\n\r\n                    selectType.addEventListener('change', function (evt) {\r\n                        let inputValueSplitted = inputValue.split(':');\r\n                        let selectedPropertyType = selectType.options[selectType.selectedIndex].value;\r\n\r\n                        if (inputValueSplitted.length >= 1) {\r\n                            inputText.value = inputValueSplitted[0].trim() + ' : ' + selectedPropertyType;\r\n                            inputText.focus();\r\n                        }\r\n                    });\r\n\r\n                    divInlineEdit.appendChild(selectType);\r\n                }\r\n                else if (!Util.includes(inputValue, ':')) {\r\n                    let selectType = document.getElementById('selectPropertyType');\r\n\r\n                    if (selectType) {\r\n                        selectType.remove();\r\n                    }\r\n                }\r\n\r\n                if (keyCode !== 13) {\r\n                    return;\r\n                }\r\n\r\n                // attribute\r\n                if ((Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) === false) {\r\n                    if (Util.includes(inputValue, ':')) {\r\n                        clazz.addAttribute(inputValue.trim());\r\n                        clazz.reDraw();\r\n                    } else if (Util.includes(inputValue, '=') ) {\r\n                        let attr: Attribute = null;\r\n                        let name = inputValue.substring(0, inputValue.indexOf('=')).trim();\r\n                        for (let child of clazz.getAttributes() ) {\r\n                            if ( name === child.getName()) {\r\n                                attr = child;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (attr) {\r\n                            attr.updateValue(inputValue.substring(inputValue.indexOf('=') + 1).trim());\r\n                        }\r\n                        clazz.reDraw();\r\n                    }\r\n                }\r\n\r\n                // method\r\n                else if (Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) {\r\n                    clazz.addMethod(inputValue.trim());\r\n                    clazz.reDraw();\r\n                }\r\n                // label\r\n                else if (inputValue.trim().split(' ').length === 1 && inputValue.trim().length > 0) {\r\n                    clazz.updateLabel(inputValue.trim());\r\n                }\r\n\r\n                // reset size\r\n                divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n                divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n                divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n\r\n                inputText.value = '';\r\n\r\n                // remove combobox to select type of property\r\n                let selectType = document.getElementById('selectPropertyType');\r\n\r\n                if (selectType) {\r\n                    selectType.remove();\r\n                }\r\n\r\n                // TODO: reload propertiespanel. not working!\r\n                // event wont dispatch\r\n                // let customEvt = Util.createCustomEvent(EventBus.RELOADPROPERTIES);\r\n                // element.$view.dispatchEvent(customEvt);\r\n            });\r\n\r\n            (<any>divInlineEdit.children[0]).focus();\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Association) {\r\n            this.graph.root.appendChild(element.$view);\r\n            this.graph.root.appendChild(element.$sNode.$view);\r\n            this.graph.root.appendChild(element.$tNode.$view);\r\n\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete edge');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            let edge = <Association>element;\r\n            this.lastSelectedEdge = edge.$view;\r\n\r\n            Util.addClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Select.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Select.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private setTooltipOfShape(shape: SVGSVGElement, tooltip: string): void {\r\n        if (!shape || !shape.hasChildNodes()) {\r\n            return;\r\n        }\r\n\r\n        let titleElement = <SVGSVGElement>shape.childNodes[0];\r\n        if (!titleElement || titleElement.tagName !== 'title') {\r\n            return;\r\n        }\r\n\r\n        titleElement.textContent = tooltip;\r\n    }\r\n\r\n    private resetLastSelectedElements() {\r\n        // reset the last one\r\n        if (this.lastSelectedNode) {\r\n            Util.removeClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.lastSelectedNode = undefined;\r\n        }\r\n\r\n        if (this.lastSelectedEdge) {\r\n            Util.removeClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n            this.lastSelectedEdge = undefined;\r\n        }\r\n\r\n        this.removeLastInlineEdit();\r\n    }\r\n\r\n    private removeLastInlineEdit(): void {\r\n        // remove last inline edit of clazz\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n\r\n            // its not supported in internet explorer\r\n            // lastInlineEdit.remove();\r\n        }\r\n    }\r\n\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\n\r\nexport class Zoom implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n    }\r\n\r\n    public handle(e: any, element: DiagramElement): boolean {\r\n        let delta = e.deltaY || e.wheelDeltaY || -e.wheelDelta;\r\n        let d = 1 + (delta / 1000);\r\n\r\n        let values = this.graph.root.getAttribute('viewBox').split(' ');\r\n        const newViewBox = `${values[0]} ${values[1]} ${parseInt(values[2]) * d} ${parseInt(values[3]) * d}`;\r\n        this.graph.root.setAttribute('viewBox', newViewBox);\r\n\r\n        e.preventDefault();\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Zoom.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Zoom.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n}\r\n","export * from './Drag';\r\nexport * from './Select';\r\nexport * from './Zoom';\r\nexport * from './NewEdge';\r\nexport * from './ImportFile';\r\nexport * from './AddNode';\r\n","import { Association } from '../elements/edges';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport Layout from './Layout';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\n\r\nexport class DagreLayout implements Layout {\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        if (!window['dagre']) {\r\n            return;\r\n        }\r\n        let model = graph.$graphModel;\r\n        let g = new window['dagre'].graphlib.Graph();\r\n\r\n        g.setGraph({ marginx: 100, marginy: 20 }).setDefaultEdgeLabel(function () {\r\n            return {};\r\n        });\r\n\r\n        for (let node of model.nodes) {\r\n            g.setNode(node.id, { width: node.getSize().x, height: node.getSize().y });\r\n        }\r\n\r\n        for (let edge of model.edges) {\r\n            g.setEdge(edge.$sNode.id, edge.$tNode.id);\r\n        }\r\n\r\n        window['dagre'].layout(g);\r\n\r\n        g.nodes().forEach(function (nodeId: string) {\r\n            for (let node of model.nodes) {\r\n                if (node.id === nodeId) {\r\n                    node.withPos(g.node(nodeId).x - g.node(nodeId).width / 2, g.node(nodeId).y - g.node(nodeId).height / 2);\r\n                }\r\n            }\r\n        });\r\n        g.edges().forEach(function (e: any) {\r\n            for (let edge of model.edges) {\r\n                if (edge.$sNode.id === e.v && edge.$tNode.id === e.w) {\r\n                    let size = g.edge(e).points.length;\r\n                    edge.clearPoints();\r\n                    for (let i = 0; i < size; i++) {\r\n                        let point: SVGPoint = g.edge(e).points[i];\r\n                        edge.addPoint(point.x, point.y);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n}\r\n","import {DiagramElement} from '../elements/BaseElements';\r\nimport Layout from './Layout';\r\nimport {Graph} from '../elements/Graph';\r\nimport {Association} from '../elements/edges/Association';\r\nimport {Node} from '../elements/nodes/Node';\r\nimport {Control} from '../Control';\r\n\r\nexport class LayoutGraphMin {\r\n    public nodes: Object = {};\r\n    public edges: Array<Object> = [];\r\n    public outEdges: Object = {};\r\n    public inEdges: Object = {};\r\n    public dummyNodes: Array<LayoutGraphNode> = [];\r\n    public dummyEdges: Object = {};\r\n    public count: number = 0;\r\n    public minRank: number = Number.POSITIVE_INFINITY;\r\n    public maxRank: number = 0;\r\n    public maxHeight: number = 0;\r\n    public maxWidth: number = 0;\r\n    public ranksep: number = 0;\r\n    public edgesLabel: Array<Object> = [];\r\n\r\n    public nodeCount(): number {\r\n        return this.count;\r\n    }\r\n\r\n    public node(id: string) {\r\n        return this.nodes[id];\r\n    }\r\n\r\n    public setNode(id: string, n: LayoutGraphNode) {\r\n        if (n && !this.nodes[id]) {\r\n            this.nodes[id] = n;\r\n            this.count = this.count + 1;\r\n        } else if (!n && this.nodes[id]) {\r\n            delete this.nodes[id];\r\n        }\r\n    }\r\n}\r\n\r\nexport class LayoutGraphNode {\r\n    public id: string;\r\n    public width: number;\r\n    public height: number;\r\n    public x: number;\r\n    public y: number;\r\n    public edgeObj: LayoutGraphEdge;\r\n    public rank: number;\r\n\r\n    constructor(id: string, width: number, height: number, x: number, y: number) {\r\n        this.id = id;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n\r\nexport class LayoutGraphEdge {\r\n    public source: string;\r\n    public target: string;\r\n}\r\n\r\n// \t\t\t\t######################################################### DagreGraph #########################################################\r\nexport class DagreLayoutMin implements Layout {\r\n    public static EDGE_KEY_DELIM = '\\x01';\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        let g, layoutNode, nodes, newEdge, edges;\r\n        let i, n, x, y, sId, tId, split = DagreLayoutMin.EDGE_KEY_DELIM;\r\n        let e: Association;\r\n\r\n        nodes = node['nodes'];\r\n        edges = node['edges'];\r\n        g = new LayoutGraphMin();\r\n\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            g.setNode(n.id, new LayoutGraphNode(n.id, n.getSize().x, n.getSize().y, n.getPos().x, n.getPos().y));\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            sId = this.getNodeId(e.$sNode);\r\n            tId = this.getNodeId(e.$tNode);\r\n            if (sId > tId) {\r\n                let tmp = tId;\r\n                tId = sId;\r\n                sId = tmp;\r\n            }\r\n            let idAB = sId + split + tId + split;\r\n            let idBA = tId + split + sId + split;\r\n            if (sId !== tId && g.edgesLabel.indexOf(idAB) < 0 && g.edgesLabel.indexOf(idBA) < 0) {\r\n                newEdge = {source: sId, target: tId, minlen: 1, weight: 1};\r\n                g.edges.push(newEdge);\r\n                g.edgesLabel.push(idAB);\r\n                // In Edges\r\n                if (!g.inEdges[tId]) {\r\n                    g.inEdges[tId] = [];\r\n                }\r\n                g.inEdges[tId].push(newEdge);\r\n\r\n                // Out Edges\r\n                if (!g.outEdges[sId]) {\r\n                    g.outEdges[sId] = [];\r\n                }\r\n                g.outEdges[sId].push(newEdge);\r\n            }\r\n        }\r\n        this.layouting(g);\r\n        // Set the layouting back\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            layoutNode = g.node(n.id);\r\n            x = n.getPos().x;\r\n            y = n.getPos().y;\r\n            if (x < 1 && y < 1) {\r\n                n.withPos(Math.ceil(layoutNode.x), Math.ceil(layoutNode.y));\r\n            }\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            // OBSOLETE method:  e.calc(graph.canvas);\r\n        }\r\n        graph.draw();\r\n    }\r\n\r\n    public getNodeId(node: Control): string {\r\n        if (node.$owner) {\r\n            return this.getNodeId(node.$owner) || node.id;\r\n        }\r\n        return node.id;\r\n    }\r\n\r\n    public layouting(g: LayoutGraphMin) {\r\n        this.longestPath(g);\r\n        this.normalizeRanks(g);\r\n        this.normalizeEdge(g);\r\n        // this.setSimpleOrder(g);\r\n        this.order(g);\r\n        g.ranksep = 25;\r\n        // remove Dummy\r\n        this.removeDummy(g);\r\n        this.position(g);\r\n    }\r\n\r\n    public setSimpleOrder(g: LayoutGraphMin) {\r\n        let i, n;\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            n.order = n.rank;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Applies heuristics to minimize edge crossings in the graph and sets the best\r\n     * order solution as an order attribute on each node.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Graph must be DAG\r\n     *    2. Graph nodes must be objects with a \"rank\" attribute\r\n     *    3. Graph edges must have the \"weight\" attribute\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Graph nodes will have an \"order\" attribute based on the results of the\r\n     *       algorithm.\r\n     */\r\n    public order(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        let visited = {};\r\n        let node, n, order, i;\r\n        for (i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (n in g.nodes) {\r\n            if (visited[n]) {\r\n                continue;\r\n            }\r\n            visited[n] = true;\r\n            node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank].push(n);\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                g.nodes[layering[order][n]].order = parseInt(n);\r\n            }\r\n        }\r\n        // Fix resolve conflict\r\n        for (order in layering) {\r\n            if (layering[order].length > 1) {\r\n                for (n in layering[order]) {\r\n                    if (layering[order].hasOwnProperty(n) === false) {\r\n                        continue;\r\n                    }\r\n                    let name = layering[order][n];\r\n                    let sum = 0;\r\n                    let weight = 1;\r\n                    let edges = g.dummyEdges[name];\r\n                    if (edges) {\r\n                        for (i in edges) {\r\n                            if (edges.hasOwnProperty(i) === false) {\r\n                                continue;\r\n                            }\r\n                            let edge = edges[i];\r\n                            let nodeU = g.node(edge.target);\r\n                            sum = sum + (edge.weight * nodeU.order);\r\n                            weight = weight + edge.weight;\r\n                        }\r\n                    }\r\n                    g.node(name).barycenter = sum / weight;\r\n                    g.node(name).weight = weight;\r\n                }\r\n            } else if (layering[order].length > 0) {\r\n                for (n in layering[order]) {\r\n                    let name = layering[order][n];\r\n                    g.node(name).barycenter = 1;\r\n                    g.node(name).weight = 1;\r\n                }\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                let node = g.nodes[layering[order][n]];\r\n                node.order = parseInt(n) + node.barycenter * node.weight;\r\n                if (isNaN(node.order)) {\r\n                    console.log('ERROR');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public removeDummy(g: LayoutGraphMin) {\r\n        for (let z in g.dummyNodes) {\r\n            let node = g.dummyNodes[z];\r\n            g.setNode(node.id, null);\r\n        }\r\n        g.dummyNodes = [];\r\n        g.dummyEdges = {};\r\n    }\r\n\r\n    /*\r\n     * Breaks any long edges in the graph into short segments that span 1 layer\r\n     * each. This operation is undoable with the denormalize function.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. The input graph is a DAG.\r\n     *    2. Each node in the graph has a \"rank\" property.\r\n     *\r\n     * Post-condition:\r\n     *\r\n     *    1. All edges in the graph have a length of 1.\r\n     *    2. Dummy nodes are added where edges have been split into segments.\r\n     *    3. The graph is augmented with a \"dummyChains\" attribute which contains\r\n     *       the first dummy in each chain of dummy nodes produced.\r\n     */\r\n    public normalizeEdge(g: LayoutGraphMin): void {\r\n        let i: number = 1;\r\n        for (let id in g.edges) {\r\n            let e: LayoutGraphEdge = <LayoutGraphEdge>g.edges[id];\r\n            let v: string = e.source;\r\n            let vRank = g.node(v).rank;\r\n            const w: string = e.target;\r\n            const wRank: number = g.node(w).rank;\r\n            let name: string;\r\n\r\n            if (wRank === vRank + 1) {\r\n                continue;\r\n            }\r\n\r\n            let dummy;\r\n            for (vRank = vRank + 1; vRank < wRank; ++vRank) {\r\n                name = '_d' + e.source + e.target + (i++);\r\n                let newEdge = {source: v, target: name, minlen: 1, weight: 1};\r\n                dummy = new LayoutGraphNode(name, 0, 0, 0, 0);\r\n                dummy.edgeObj = e;\r\n                dummy.rank = vRank;\r\n                // Dummy Edges\r\n                if (!g.dummyEdges[v]) {\r\n                    g.dummyEdges[v] = [];\r\n                }\r\n                g.dummyEdges[v].push(newEdge);\r\n\r\n                g.dummyNodes.push(dummy);\r\n                g.setNode(dummy.id, dummy);\r\n                v = name;\r\n            }\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Initializes ranks for the input graph using the longest path algorithm. This\r\n     * algorithm scales well and is fast in practice, it yields rather poor\r\n     * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\r\n     * ranks wide and leaving edges longer than necessary. However, due to its\r\n     * speed, this algorithm is good for getting an initial ranking that can be fed\r\n     * into other algorithms.\r\n     *\r\n     * This algorithm does not normalize layers because it will be used by other\r\n     * algorithms in most cases. If using this algorithm directly, be sure to\r\n     * run normalize at the end.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Input graph is a DAG.\r\n     *    2. Input graph node labels can be assigned properties.\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Each node will be assign an (unnormalized) \"rank\" property.\r\n     */\r\n    public longestPath(g: LayoutGraphMin) {\r\n        let i, n, visited = [];\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            visited.push(i);\r\n            n.rank = this.findAllPaths(g, n, 0, visited);\r\n            g.minRank = Math.min(g.minRank, n.rank);\r\n        }\r\n    }\r\n\r\n    public findAllPaths(g: LayoutGraphMin, n: Node, currentCost: number, path: Array<String>) {\r\n        let min: number = 0;\r\n        let id: string;\r\n        let z: number;\r\n        let target;\r\n        if (g.outEdges[n.id]) {\r\n            for (z = 0; z < g.outEdges[n.id].length; z++) {\r\n                id = g.outEdges[n.id][z].target;\r\n                target = g.nodes[id];\r\n                if (path[id]) {\r\n                    min = Math.min(min, target.rank);\r\n                } else if (path.indexOf(id) < 0) {\r\n                    min = Math.min(min, this.findAllPaths(g, target, currentCost - 2, path));\r\n                } else {\r\n                    min = currentCost;\r\n                }\r\n            }\r\n            return min;\r\n        }\r\n        return currentCost;\r\n    }\r\n\r\n    /*\r\n     * Adjusts the ranks for all nodes in the graph such that all nodes v have\r\n     * rank(v) >= 0 and at least one node w has rank(w) = 0.\r\n     */\r\n    public normalizeRanks(g: LayoutGraphMin) {\r\n        let min = g.minRank;\r\n        let value;\r\n        g.maxRank = Number.NEGATIVE_INFINITY;\r\n        g.maxHeight = 0;\r\n        g.maxWidth = 0;\r\n        for (let i in g.nodes) {\r\n            let node = g.nodes[i];\r\n            if (node.rank !== undefined) {\r\n                node.rank -= min;\r\n                value = Math.abs(node.rank);\r\n                if (value > g.maxRank) {\r\n                    g.maxRank = value;\r\n                }\r\n                g.maxHeight = Math.max(g.maxHeight, node.height);\r\n                g.maxWidth = Math.max(g.maxWidth, node.width);\r\n            }\r\n        }\r\n    }\r\n\r\n    public position(g: LayoutGraphMin) {\r\n        this.positionY(g);\r\n        let list = this.positionX(g);\r\n        for (let i in list) {\r\n            for (let pos in list[i]) {\r\n                if (list[i].hasOwnProperty(pos) === false) {\r\n                    continue;\r\n                }\r\n                if (g.node(list[i][pos])) {\r\n                    g.node(list[i][pos]).x = parseInt(pos) * g.maxWidth;\r\n                }\r\n            }\r\n\r\n        }\r\n    }\r\n\r\n    public positionY(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        let rankSep = g.ranksep;\r\n        let prevY = 0;\r\n        for (let layer in layering) {\r\n            let maxHeight = g.maxHeight;\r\n            for (let v in layering[layer]) {\r\n                if (layering[layer].hasOwnProperty(v) === false) {\r\n                    continue;\r\n                }\r\n                let id = layering[layer][v];\r\n                g.nodes[id].y = prevY + maxHeight / 2;\r\n            }\r\n            prevY += maxHeight + rankSep;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\r\n     * function will produce a matrix with the ids of each node.\r\n     */\r\n    public buildLayerMatrix(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        for (let i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (let n in g.nodes) {\r\n            let node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank][node.order] = n;\r\n            }\r\n        }\r\n        return layering;\r\n    }\r\n\r\n    public positionX(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        return layering;\r\n    }\r\n}\r\n","import { Point } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport Layout from './Layout';\r\n\r\nexport class Random implements Layout {\r\n\r\n  public layout(graph: Graph) {\r\n\r\n    let model = graph.$graphModel;\r\n\r\n    if (model.nodes) {\r\n      for (let node of model.nodes) {\r\n        let pos: Point = node.getPos();\r\n        if (pos.x === 0 && pos.y === 0) {\r\n          let x = Util.getRandomInt(0, graph.canvasSize.width);\r\n          let y = Util.getRandomInt(0, graph.canvasSize.height);\r\n          node.withPos(x, y);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","export * from './DagreLayout';\r\nexport * from './Random';\r\nexport * from './DagreLayoutMin';\r\n\r\nimport {DagreLayout} from './DagreLayout';\r\nimport {DagreLayoutMin} from './DagreLayoutMin';\r\nimport {Random} from './Random';\r\nnew DagreLayout();\r\nnew DagreLayoutMin();\r\nnew Random();\r\n","import {VirtualKeyBoard} from './VirtualKeyBoard';\r\n\r\nexport {Point} from './elements/BaseElements';\r\nexport {Bridge, DelegateAdapter} from './Bridge';\r\nexport {Graph} from './elements/Graph';\r\nexport * from './elements/nodes';\r\nexport * from './elements/edges';\r\nexport * from './adapters';\r\nexport * from './UML';\r\nimport {Point} from './elements/BaseElements';\r\nimport {Graph} from './elements/Graph';\r\nimport {ClassEditor} from './elements/ClassEditor';\r\nimport {Bridge} from './Bridge';\r\nimport {Util} from './util';\r\nimport * as nodes  from './elements/nodes';\r\nimport * as edges from './elements/edges';\r\nimport {ScrumBoard} from './ScrumBoard';\r\n\r\nif (!window['Point']) {\r\n    window['Point'] = Point;\r\n    window['Graph'] = Graph;\r\n    window['bridge'] = new Bridge();\r\n    window['Util'] = Util;\r\n    window['Class'] = nodes.Class;\r\n    window['Association'] = edges.Association;\r\n    window['SymbolLibary'] = nodes.SymbolLibary;\r\n    window['ClassEditor'] = ClassEditor;\r\n    window['VirtualKeyBoard'] = VirtualKeyBoard;\r\n    window['ScrumBoard'] = ScrumBoard;\r\n}\r\n","'use strict';\r\nimport { CSS } from './CSS';\r\nimport { Node } from './elements/nodes/Node';\r\nimport { DiagramElement, Point } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport class Util {\r\n\r\n    public static isAutoSave: boolean;\r\n\r\n    static getRandomInt(min: number, max: number): number {\r\n        return Math.floor(Math.random() * (max - min + 1)) + min;\r\n    }\r\n\r\n    static createShape(attrs: any): SVGSVGElement {\r\n        let xmlns = attrs.xmlns || 'http://www.w3.org/2000/svg';\r\n        let shape = document.createElementNS(xmlns, attrs.tag);\r\n\r\n        for (let attr in attrs) {\r\n            if (!attrs.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr !== 'tag') {\r\n                shape.setAttribute(attr, attrs[attr]);\r\n\r\n            }\r\n        }\r\n        return <SVGSVGElement><any>shape;\r\n    }\r\n\r\n    static toPascalCase(value: string): string {\r\n        value = value.charAt(0).toUpperCase() + value.substring(1).toLowerCase();\r\n        return value;\r\n    }\r\n\r\n    static isSVG(tag: string): boolean {\r\n        let i,\r\n            list = ['svg', 'path', 'polygon', 'polyline', 'line', 'title', 'rect', 'filter', 'feGaussianBlur', 'feOffset', 'feBlend', 'linearGradient', 'stop', 'text', 'symbol', 'textPath', 'defs', 'fegaussianblur', 'feoffset', 'feblend', 'circle', 'ellipse', 'g'];\r\n        for (i = 0; i < list.length; i += 1) {\r\n            if (list[i] === tag) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    static createHTML(node: any): HTMLElement {\r\n        return <HTMLElement>this.create(node);\r\n    }\r\n    static create(node: any): Element {\r\n        let style, item, xmlns, key, tag, k;\r\n        if (document.createElementNS && (this.isSVG(node.tag) || node.xmlns)) {\r\n            if (node.xmlns) {\r\n                xmlns = node.xmlns;\r\n            } else {\r\n                xmlns = 'http://www.w3.org/2000/svg';\r\n            }\r\n            if (node.tag === 'img' && xmlns) {\r\n                item = document.createElementNS(xmlns, 'image');\r\n                item.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\r\n                item.setAttributeNS('http://www.w3.org/1999/xlink', 'href', node.src);\r\n            } else {\r\n                item = document.createElementNS(xmlns, node.tag);\r\n            }\r\n        } else {\r\n            item = document.createElement(node.tag);\r\n        }\r\n        tag = node.tag.toLowerCase();\r\n        for (key in node) {\r\n            if (!node.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            k = key.toLowerCase();\r\n            if (node[key] === null) {\r\n                continue;\r\n            }\r\n            if (k === 'tag' || k.charAt(0) === '$' || k === '$graphModel') {\r\n                continue;\r\n            }\r\n            if (k.charAt(0) === '#') {\r\n                item[k.substring(1)] = node[key];\r\n                continue;\r\n            }\r\n            if (k === 'rotate') {\r\n                item.setAttribute('transform', 'rotate(' + node[key] + ',' + node.$graphModel.x + ',' + node.$graphModel.y + ')');\r\n                continue;\r\n            }\r\n            if (k === 'value') {\r\n                if (!node[key]) {\r\n                    continue;\r\n                }\r\n                if (tag !== 'input') {\r\n                    if (tag === 'text') {// SVG\r\n                        item.appendChild(document.createTextNode(node[key]));\r\n                    } else {\r\n                        item.innerHTML = node[key];\r\n                    }\r\n                } else {\r\n                    item[key] = node[key];\r\n                }\r\n                continue;\r\n            }\r\n            if (k.indexOf('on') === 0) {\r\n                this.bind(item, k.substring(2), node[key]);\r\n                continue;\r\n            }\r\n            if (k.indexOf('-') >= 0) {\r\n                item.style[key] = node[key];\r\n            } else {\r\n                if (k === 'style' && typeof (node[key]) === 'object') {\r\n                    for (style in node[key]) {\r\n                        if (!node[key].hasOwnProperty(style)) {\r\n                            continue;\r\n                        }\r\n                        if (node[key][style]) {\r\n                            if ('transform' === style) {\r\n                                item.style.transform = node[key][style];\r\n                                item.style.msTransform = item.style.MozTransform = item.style.WebkitTransform = item.style.OTransform = node[key][style];\r\n                            } else {\r\n                                item.style[style] = node[key][style];\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    item.setAttribute(key, node[key]);\r\n                }\r\n            }\r\n        }\r\n        if (node.$parent) {\r\n            node.$parent.appendChild(item);\r\n        }\r\n        if (node.$graphModel) {\r\n            item.$graphModel = node.$graphModel;\r\n        }\r\n        return item;\r\n    }\r\n\r\n    static setSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttribute('width', value);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.setAttribute('height', value);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setAttributeSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttributeNS(null, 'width', value);\r\n        value = Util.getValue(height);\r\n        item.setAttributeNS(null, 'height', value);\r\n    }\r\n\r\n    static setStyleSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setPos(item: any, x: number, y: number): void {\r\n        if (item.x && item.x.baseVal) {\r\n            item.style.left = x + 'px';\r\n            item.style.top = y + 'px';\r\n        } else {\r\n            item.x = x;\r\n            item.y = y;\r\n        }\r\n    }\r\n\r\n    static getValue(value: string | number): number {\r\n        return parseInt(('0' + value).replace('px', ''), 10);\r\n    }\r\n\r\n    static isIE(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('.net') > -1;\r\n    }\r\n\r\n    static isEdge(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('edge') > -1;\r\n    }\r\n\r\n    static isFireFox(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n    }\r\n\r\n    static isSafari(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        return navigator.userAgent.toLowerCase().indexOf('safari') > -1 && !isEdge;\r\n    }\r\n\r\n    static isOpera(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('opera') > -1;\r\n    }\r\n\r\n    static isChrome(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        let isSafari = Util.isSafari();\r\n        return navigator.userAgent.toLowerCase().indexOf('chrome') > -1 && !isEdge && isSafari;\r\n    }\r\n\r\n    static getEventX(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetX'] : event.layerX;\r\n    }\r\n\r\n    static getEventY(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetY'] : event.layerY;\r\n    }\r\n\r\n    static getNumber(str: string): number {\r\n        return parseInt((str || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    static getStyle(styleProp: string): CSS {\r\n        let i, style, diff, current, ref, el = document.createElement('div'), css;\r\n        document.body.appendChild(el);\r\n        css = new CSS(styleProp);\r\n        ref = new CSS(styleProp, el).css;\r\n        style = window.getComputedStyle(el, null);\r\n        el.className = styleProp;\r\n        current = new CSS(styleProp, el).css;\r\n        diff = Util.getNumber(style.getPropertyValue('border-width'));\r\n        for (i in current) {\r\n            if (!current.hasOwnProperty(i)) {\r\n                continue;\r\n            }\r\n            if (i === 'width' || i === 'height') {\r\n                if (Util.getNumber(current[i]) !== 0 && Util.getNumber(current[i]) + diff * 2 !== Util.getNumber(ref[i])) {\r\n                    css.add(i, current[i]);\r\n                }\r\n            } else if (current[i] !== ref[i]) {\r\n                css.add(i, current[i]);\r\n            }\r\n        }\r\n        document.body.removeChild(el);\r\n        return css;\r\n    }\r\n\r\n    static sizeOf(item: string | any, node?: Node): ClientRect {\r\n        let board;\r\n        let rect: ClientRect;\r\n        let addBoard: boolean;\r\n        if (!item) {\r\n            return undefined;\r\n        }\r\n        if (node) {\r\n            board = node.$owner.$view;\r\n            addBoard = false;\r\n        }\r\n\r\n        if (!board) {\r\n            addBoard = true;\r\n            board = Util.createShape({ tag: 'svg', id: 'root', width: 200, height: 200 });\r\n            document.body.appendChild(board);\r\n        }\r\n        if (board.tagName === 'svg') {\r\n            if (typeof item === 'string') {\r\n                item = Util.create({ tag: 'text', $font: true, value: item });\r\n                item.setAttribute('width', '5px');\r\n            }\r\n        } else if (typeof item === 'string') {\r\n            item = document.createTextNode(item);\r\n        }\r\n        board.appendChild(item);\r\n        rect = item.getBoundingClientRect();\r\n        board.removeChild(item);\r\n\r\n        if (addBoard) {\r\n            document.body.removeChild(board);\r\n        }\r\n        return rect;\r\n    }\r\n\r\n    static getColor(style: string, defaultColor?: string) {\r\n        if (style) {\r\n            if (style.toLowerCase() === 'create') {\r\n                return '#008000';\r\n            }\r\n            if (style.toLowerCase() === 'nac') {\r\n                return '#FE3E3E';\r\n            }\r\n            if (style.indexOf('#') === 0) {\r\n                return style;\r\n            }\r\n        }\r\n        if (defaultColor) {\r\n            return defaultColor;\r\n        }\r\n        return '#000';\r\n    }\r\n\r\n    public static utf8$to$b64(str: string): string {\r\n        return window.btoa(encodeURIComponent(str));\r\n    }\r\n\r\n    public static showSVG(control: DiagramElement) {\r\n        let svg = Util.create({\r\n            tag: 'svg',\r\n            style: { left: control.getPos().x, top: control.getPos().y, position: 'absolute' }\r\n        });\r\n        let child = control.getSVG();\r\n        if (child) {\r\n            svg.appendChild(child);\r\n        }\r\n        Util.setSize(svg, control.getSize().x, control.getSize().y);\r\n        document.body.appendChild(svg);\r\n    }\r\n\r\n    public static toJson(ref: JSON | Object): Object {\r\n        let result = {};\r\n        return Util.copy(result, ref, false, false);\r\n    }\r\n\r\n    public static initControl(parent: Control, control: Control, type: string, id: string, json: JSON | Object) {\r\n        if (typeof control.init === 'function') {\r\n            control.init(parent, type, id);\r\n        }\r\n        if (typeof control.load === 'function') {\r\n            control.load(json);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * copy One Json into another\r\n     * @function\r\n     * @param ref reference Json\r\n     * @param src source Json\r\n     * @param full all attributes include privet $\r\n     * @param replace set the original reference or copy it\r\n     * @returns ref\r\n     * @name copy\r\n     */\r\n    public static copy(ref: JSON | Object, src: JSON | Object, full: boolean, replace: boolean) {\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (replace) {\r\n                        ref[i] = src[i];\r\n                        continue;\r\n                    }\r\n                    if (!ref[i]) {\r\n                        if (src[i] instanceof Array) {\r\n                            ref[i] = [];\r\n                        } else {\r\n                            ref[i] = {};\r\n                        }\r\n                    }\r\n                    Util.copy(ref[i], src[i], full, false);\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref[i] = src[i];\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    public static xmlstringify(text: string): string {\r\n        text = text.replace('<', '&lt;');\r\n        text = text.replace('>', '&gt;');\r\n        return text;\r\n    }\r\n\r\n    public static toXML(ref: JSON | Object | any, src: JSON | Object | any, full: boolean, doc: Document): any {\r\n        let name;\r\n        if (!ref) {\r\n            name = src.constructor.name;\r\n            doc = document.implementation.createDocument(null, name, null);\r\n            ref = doc.childNodes[0];\r\n        }\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (!ref.getAttribute(i)) {\r\n                        if (src[i] instanceof Array) {\r\n                            for (let c in src[i]) {\r\n                                if (!src[i].hasOwnProperty(c)) {\r\n                                    continue;\r\n                                }\r\n                                name = src[i][c].constructor.name;\r\n                                let child = doc.createElement(name);\r\n                                ref.appendChild(child);\r\n                                Util.toXML(child, src[i][c], full, doc);\r\n                            }\r\n                        } else {\r\n                            name = src[i].constructor.name;\r\n                            let child = doc.createElement(name);\r\n                            ref.appendChild(child);\r\n                            Util.toXML(child, src[i], full, doc);\r\n                        }\r\n                    } else {\r\n                        Util.toXML(ref.getAttribute(i), src[i], full, doc);\r\n                    }\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref.setAttribute(i, src[i]);\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    static Range(min: Point, max: Point, x: number, y: number) {\r\n        max.x = Math.max(max.x, x);\r\n        max.y = Math.max(max.y, y);\r\n        min.x = Math.min(min.x, x);\r\n        min.y = Math.min(min.y, y);\r\n    }\r\n\r\n    public static getPosition(m: number, n: number, entity: DiagramElement, refCenter: Point) {\r\n        let t, p = [], list, distance = [], min = 999999999, position, i, step = 15;\r\n        let pos: Point = entity.getPos();\r\n        let size: Point = entity.getSize();\r\n        list = [Point.LEFT, Point.RIGHT];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = this.getLRPosition(m, n, entity, list[i]);\r\n            if (t.y >= pos.y && t.y <= (pos.y + size.y + 1)) {\r\n                t.y += (entity['$' + list[i]] * step);\r\n                if (t.y > (pos.y + size.y)) {\r\n                    // Alternative\r\n                    t = Util.getUDPosition(m, n, entity, Point.DOWN, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        list = [Point.UP, Point.DOWN];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = Util.getUDPosition(m, n, entity, list[i]);\r\n            if (t.x >= pos.x && t.x <= (pos.x + size.x + 1)) {\r\n                t.x += (entity['$' + list[i]] * step);\r\n                if (t.x > (pos.x + size.x)) {\r\n                    // Alternative\r\n                    t = this.getLRPosition(m, n, entity, Point.RIGHT, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        for (i = 0; i < p.length; i += 1) {\r\n            if (distance[i] < min) {\r\n                min = distance[i];\r\n                position = p[i];\r\n            }\r\n        }\r\n        return position;\r\n    }\r\n\r\n    public static getUDPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let x, y: number = pos.y;\r\n        if (p === Point.DOWN) {\r\n            y += size.y;\r\n        }\r\n        x = (y - n) / m;\r\n        if (step) {\r\n            x += e['$' + p] * step;\r\n            if (x < pos.x) {\r\n                x = pos.x;\r\n            } else if (x > (pos.x + size.x)) {\r\n                x = pos.x + size.x;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static getLRPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let y: number, x: number = pos.x;\r\n        if (p === Point.RIGHT) {\r\n            x += size.x;\r\n        }\r\n        y = m * x + n;\r\n        if (step) {\r\n            y += e['$' + p] * step;\r\n            if (y < pos.y) {\r\n                y = pos.y;\r\n            } else if (y > (pos.y + size.y)) {\r\n                y = pos.y + size.y;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static hasClass(element: Element, cls: string) {\r\n        let className = element.getAttribute('class');\r\n        return className.indexOf(cls) > 0;\r\n    }\r\n    public static addClass(element: Element, cls: string) {\r\n        if (!Util.hasClass(element, cls)) {\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className + ' ' + cls);\r\n        }\r\n    }\r\n    public static removeClass(element: Element, cls: string) {\r\n        if (Util.hasClass(element, cls)) {\r\n            let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className.replace(reg, ' ').trim());\r\n        }\r\n    }\r\n\r\n    public static startsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.startsWith) {\r\n            return s.indexOf(searchS) === 0;\r\n        }\r\n\r\n        return s.startsWith(searchS);\r\n    }\r\n\r\n    public static endsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.endsWith) {\r\n            let lastIndex = s.lastIndexOf(searchS);\r\n            return lastIndex !== -1 && lastIndex === (s.length - 1);\r\n        }\r\n\r\n        return s.endsWith(searchS);\r\n    }\r\n\r\n    public static includes(s: string, searchS: string): boolean {\r\n        if (!String.prototype.includes) {\r\n            let idx = s.indexOf(searchS);\r\n            return idx > -1;\r\n        }\r\n        if (s === null) {\r\n            return false;\r\n        }\r\n\r\n        return s.includes(searchS);\r\n    }\r\n\r\n    public static isParentOfChild(parent: Element, child: Element): boolean {\r\n\r\n        if (!parent || !child) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isIE()) {\r\n            let children = parent.childNodes;\r\n            // let found = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                let childItem = children[i];\r\n                if (childItem === child) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        return parent.contains(child);\r\n    }\r\n\r\n    public static createCustomEvent(type: string, params?: any): CustomEvent {\r\n        let evt: CustomEvent;\r\n\r\n        if (typeof window['CustomEvent'] !== 'function') {\r\n            params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n            evt = document.createEvent('CustomEvent');\r\n            evt.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\r\n            return evt;\r\n        }\r\n\r\n        evt = new CustomEvent(type);\r\n\r\n        return evt;\r\n    }\r\n\r\n    public static saveToLocalStorage(model: any): boolean {\r\n        if (!this.isAutoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isLocalStorageSupported()) {\r\n            if (model) {\r\n                if (model.$isLoading) {\r\n                    return false;\r\n                }\r\n                let jsonObj = Util.toJson(model);\r\n                let data = JSON.stringify(jsonObj, null, '\\t');\r\n                localStorage.setItem('diagram', data);\r\n            } else {\r\n                localStorage.removeItem('diagram');\r\n            }\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static getDiagramFromLocalStorage(): string {\r\n        if (Util.isLocalStorageSupported()) {\r\n            return localStorage.getItem('diagram');\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    public static isLocalStorageSupported(): boolean {\r\n        if (this.isEdge()) {\r\n            return false;\r\n        }\r\n        return localStorage !== undefined;\r\n    }\r\n}\r\n"],"sourceRoot":""}
Severity: Minor
Found in doc/diagram.js.map by fixme

TODO found
Open

{"version":3,"sources":["webpack://DiagramJS/webpack/bootstrap","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Adapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Bridge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/BridgeElement.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/CSS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Control.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Data.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventBus.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/JSEPS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Palette.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertiesPanel.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertyBinder.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/RGBColor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/SVGConverter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/ScrumBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Toolbar.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/UML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/VirtualKeyBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/JavaAdapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/BaseElements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/ClassEditor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Graph.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Model.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregate.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Association.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Composition.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Generalisation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Implements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Attribute.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/AutoComplete.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/BR.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Button.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Class.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/ClazzProperty.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Dice.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Div.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Form.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/HTML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/InfoText.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Input.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Label.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Method.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Node.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/SO.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/StereoType.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Symbol.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Table.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/AddNode.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Drag.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/GraphListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/ImportFile.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/NewEdge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Select.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Zoom.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayout.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayoutMin.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/Random.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/main.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/util.ts"],"names":[],"mappings":"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","file":"diagram.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./main.ts\");\n","export abstract class Adapter {\r\n    public id: string = null;\r\n\r\n    abstract update(evt: Object): boolean;\r\n}\r\n","'use strict';\r\n\r\nimport * as controls from './elements/nodes';\r\nimport * as adapters from './adapters';\r\nimport Data from './Data';\r\nimport {Control} from './Control';\r\nimport {Adapter} from './Adapter';\r\nimport {Graph} from './elements';\r\nimport {Util} from './util';\r\nimport {Point} from './elements';\r\n\r\nexport class Bridge extends Control {\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public static version: string = '0.42.01.1601007-1739';\r\n    private controlFactory: Object = {};\r\n    private adapterFactory: Object = {};\r\n    private controls: Object = {};\r\n    private adapters: Object = {};\r\n    private items: Object = {};\r\n    private controlNo: number = 1;\r\n    private online: boolean = true;\r\n    private language: string = navigator.language.toUpperCase();\r\n    private toolBar: HTMLElement;\r\n\r\n    constructor(viewRoot?: HTMLElement) {\r\n        super();\r\n        let i;\r\n\r\n        if (viewRoot) {\r\n            this.$view = viewRoot;\r\n        }\r\n\r\n        let keys: string[] = Object.keys(adapters);\r\n        for (i = 0; i < keys.length; i++) {\r\n            let child = adapters[keys[i]];\r\n            if (child && child.id) {\r\n                this.adapterFactory[child.id.toLowerCase()] = child;\r\n            }\r\n        }\r\n\r\n        keys = Object.keys(controls);\r\n        for (i = 0; i < keys.length; i++) {\r\n            this.addControl(controls[keys[i]]);\r\n        }\r\n        this.addControl(Graph);\r\n\r\n        let that = this;\r\n        window.addEventListener('load', function () {\r\n            let updateOnlineStatus = function updateOnlineStatus() {\r\n                that.setOnline(navigator.onLine);\r\n            };\r\n            window.addEventListener('online', updateOnlineStatus);\r\n            window.addEventListener('offline', updateOnlineStatus);\r\n        });\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public setOnline(value: boolean) {\r\n        this.online = value;\r\n        if (this.toolBar.children[0]) {\r\n            this.toolBar.children[0].className = value ? 'online' : 'offline';\r\n        }\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addToolbar(): boolean {\r\n        if (this.toolBar) {\r\n            return false;\r\n        }\r\n        this.toolBar = document.createElement('div');\r\n        this.toolBar.className = 'onlineStatus';\r\n        let child = document.createElement('div');\r\n        child.className = 'online';\r\n        this.toolBar.appendChild(child);\r\n        child = document.createElement('div');\r\n        child.className = 'lang';\r\n        child.innerHTML = this.language;\r\n        this.toolBar.appendChild(child);\r\n\r\n        let body: HTMLElement = document.getElementsByTagName('body')[0];\r\n        body.insertBefore(this.toolBar, body.firstChild);\r\n        // Refresh Online Status\r\n        this.setOnline(this.online);\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addListener = function (listener: any) {\r\n        this.listener.push(listener);\r\n    };\r\n\r\n    public addControl(control: any) {\r\n        if (control && control.name) {\r\n            this.controlFactory[control.name.toLowerCase()] = control;\r\n        }\r\n    }\r\n\r\n    public getId(): string {\r\n        return 'control' + (this.controlNo++);\r\n    }\r\n\r\n    public adapterUpdate(message: string) {\r\n        let keys: string[] = Object.keys(this.adapters);\r\n        if (keys.length > 0) {\r\n            let i;\r\n            for (i = 0; i < keys.length; i++) {\r\n                let adapterList = this.adapters[keys[i]];\r\n                if (adapterList instanceof Adapter) {\r\n                    adapterList.update(message);\r\n                } else {\r\n                    for (let adapter of adapterList) {\r\n                        adapter.update(message);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        let config = {}, className: string, id: string;\r\n        if (typeof(json) === 'string') {\r\n            // Only a String\r\n            config['id'] = '' + json;\r\n            let item = document.getElementById(config['id']);\r\n            let className: string;\r\n            if (item) {\r\n                className = item.getAttribute('class');\r\n                if (!className) {\r\n                    className = item.getAttribute('classname') || '';\r\n                }\r\n                // Found Element and now config Data element\r\n                if (item.getAttribute('property')) {\r\n                    if (this.hasItem(item.getAttribute('property'))) {\r\n                        let data = this.getItem(item.getAttribute('property'));\r\n                        for (let key in data.prop) {\r\n                            if (item.getAttribute(key)) {\r\n                                data.setValue(key, item.getAttribute(key));\r\n                            }\r\n                        }\r\n                        if (item.getAttribute('property')) {\r\n                            // TODO: FIXME!!!\r\n                            // data.property = item.getAttribute(\"property\");\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                className = '' + json;\r\n            }\r\n            className = className.toLowerCase();\r\n            config['className'] = className;\r\n        } else {\r\n            config = <JSON>json;\r\n        }\r\n        // Config validate\r\n        if (!config['id']) {\r\n            config['id'] = this.getId();\r\n        }\r\n        // Backup for Old Graph\r\n        if (!config['className'] && (config['type'] === 'clazzdiagram' || config['type'] === 'objectdiagram')) {\r\n            config['className'] = 'graph';\r\n        }\r\n\r\n        className = config['className'] || config['class'];\r\n        className = className.toLocaleLowerCase();\r\n        id = config['id'];\r\n\r\n        // Check For Control or Data\r\n        if ((config['prop'] || config['upd'] || config['rem']) && this.controls[id] === null) {\r\n            // Its Data\r\n            let newData = !this.hasItem(config['id']);\r\n            let item: Data = this.getItem(config['id']);\r\n            // TODO: FIXME!!!\r\n            // if (id && className && !item.property) {\r\n            //      item.property = className;\r\n            // }\r\n            if (newData) {\r\n                for (let i in this.controls) {\r\n                    if (this.controls.hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    this.controls[i].addItem(this, item);\r\n                }\r\n            }\r\n            // Add all Values to item\r\n            item.addProperties(config);\r\n            // Bridge.addProperties(config['prop'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return item;\r\n        }\r\n\r\n        let control;\r\n        if (this.controls[id]) {\r\n            control = this.controls[id];\r\n            control.initControl(json);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return control;\r\n        }\r\n\r\n        if (typeof(this.controlFactory[className]) === 'object' || typeof(this.controlFactory[className]) === 'function') {\r\n            let obj = this.controlFactory[className];\r\n            control = new obj(json);\r\n            Util.initControl(owner || this, control, config['property'], id, json);\r\n\r\n            if (control.id) {\r\n                this.controls[control.id] = control;\r\n            } else {\r\n                this.controls[id] = control;\r\n            }\r\n\r\n            // create DataObject and register this control as listener to it\r\n            // let obj = {id:id};\r\n            // let data: Data = this.load(obj);\r\n            // data.addListener(this);\r\n\r\n            // Try to Show\r\n            if (typeof control.getSVG === 'function' && typeof control.getSize === 'function') {\r\n                let size: Point = control.getSize();\r\n\r\n                let svg = Util.createShape({\r\n                    tag: 'svg',\r\n                    id: 'root',\r\n                    width: size.x,\r\n                    height: size.y\r\n                });\r\n\r\n                let view = control.getSVG();\r\n                svg.appendChild(view);\r\n                document.getElementsByTagName('body')[0].appendChild(svg);\r\n            }\r\n            return control;\r\n        }\r\n        return null;\r\n        // bridge.load('{class:table, columns:[{id:'firstname'}, {id:'lastname'}]}');\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n\r\n        if (this.items[id] !== undefined) {\r\n            return true;\r\n        }\r\n        id = id.split('.')[0];\r\n        return (this.items[id] !== undefined);\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return this.items;\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        let item = this.items[id];\r\n        if (!item) {\r\n            id = id.split('.')[0];\r\n            item = this.items[id];\r\n            if (!item) {\r\n                item = new Data();\r\n                item.id = id;\r\n                this.items[id] = item;\r\n            }\r\n        }\r\n        return item;\r\n    }\r\n\r\n    /**\r\n     * Method for executing user input -> Event\r\n     * @param object\r\n     * @param attribute\r\n     * @param oldValue\r\n     * @param newValue\r\n     * @returns {boolean}\r\n     */\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        alert('Bridge.setValue: oldVal:' + oldValue + ', newVal: ' +  + newValue + ', attribute: ' + attribute + ', object: ' + JSON.stringify(object));\r\n        let obj: Data;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n\r\n        } else if (object instanceof Data) {\r\n            obj = object;\r\n            id = object.id;\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = <Data>object;\r\n            id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return false;\r\n        }\r\n        if (obj) {\r\n            // Execute Update to Data\r\n            obj.setValue(attribute, newValue);\r\n            // Could be done here, but currently is done at this.execueChange..:\r\n            // obj[attribute] = value;\r\n        }\r\n\r\n        /*let tmp = {'id': id};\r\n        if (typeof(newValue) !== 'undefined' && newValue !== null) {\r\n            let upd = {};\r\n            upd[attribute] = newValue;\r\n            tmp['upd'] = upd;\r\n        }\r\n        if (typeof(oldValue) !== 'undefined' && oldValue !== null) {\r\n            let rem = {};\r\n            rem[attribute] = oldValue;\r\n            tmp['rem'] = rem;\r\n        }*/\r\n        // this.load(tmp);\r\n        return true;\r\n    }\r\n\r\n    public getValue(object: Object, attribute: string): any {\r\n        let obj: Object;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = object;\r\n            // id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return;\r\n        }\r\n        if (obj) {\r\n            if (obj.hasOwnProperty(attribute)) {\r\n                return obj[attribute];\r\n            } else if (obj instanceof Data) {\r\n                return (<Data>obj).getValue(attribute);\r\n            } else {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    public getNumber(object: Object, attribute: string, defaultValue: number = 0): number {\r\n        let res = <number>this.getValue(object, attribute);\r\n        if (typeof res === 'number') {\r\n            return res;\r\n        } else if (typeof res === 'string') {\r\n            // check whether res is a number\r\n            let value = Number(res);\r\n            if (value || value === 0) {\r\n                return value;\r\n            }\r\n        }\r\n        return defaultValue;\r\n    }\r\n\r\n    getControl(controlId: string) {\r\n        return this.controls[controlId];\r\n    }\r\n\r\n    public registerListener(eventType: string, control: Control, callBackfunction: string): Control {\r\n        if (typeof control === 'string') {\r\n            control = this.getControl(<string>control);\r\n        }\r\n        if (!control) {\r\n            return null;\r\n        }\r\n        if (eventType) {\r\n            eventType = eventType.toLowerCase();\r\n        }\r\n        control.registerListenerOnHTMLObject(eventType);\r\n        if (callBackfunction) {\r\n            let adapter: DelegateAdapter = new DelegateAdapter();\r\n            adapter.callBackfunction = callBackfunction;\r\n            adapter.id = control.getId();\r\n            this.addAdapter(adapter, eventType);\r\n        }\r\n        return control;\r\n    }\r\n\r\n    public addAdapter(adapter: Adapter | string, eventType: string): Adapter {\r\n        if (!eventType) {\r\n            eventType = '';\r\n        }\r\n        let result: Adapter;\r\n        if (adapter instanceof String) {\r\n            let obj = this.adapterFactory[adapter.toLowerCase()];\r\n            result = new obj();\r\n        } else {\r\n            result = <Adapter>adapter;\r\n        }\r\n        let handlers = this.adapters[eventType];\r\n\r\n        if (handlers === null || handlers === undefined) {\r\n            handlers = [];\r\n            this.adapters[eventType] = handlers;\r\n        }\r\n        handlers.push(result);\r\n        return result;\r\n    }\r\n\r\n    public fireEvent(evt: Event): void {\r\n        let handlers = this.adapters[''];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n        handlers = this.adapters[evt['eventType']];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport class DelegateAdapter extends Adapter {\r\n    adapter: Adapter;\r\n    callBackfunction: string;\r\n\r\n    update(evt: Event): boolean {\r\n        if (this.adapter) {\r\n            this.adapter.update(evt);\r\n            return true;\r\n        } else if (this.callBackfunction) {\r\n            return this.executeFunction(this.callBackfunction, evt);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public setAdapter(adapter: Adapter): boolean {\r\n        this.adapter = adapter;\r\n        return true;\r\n    }\r\n\r\n    private executeFunction(strValue: string, evt: Event): boolean {\r\n        let scope = window;\r\n        let scopeSplit = strValue.split('.');\r\n        for (let i = 0; i < scopeSplit.length - 1; i++) {\r\n            scope = scope[scopeSplit[i]];\r\n            if (scope === undefined) {\r\n                return false;\r\n            }\r\n        }\r\n        let fn: any = scope[scopeSplit[scopeSplit.length - 1]];\r\n        if (typeof fn === 'function') {\r\n            fn.call(scope);\r\n            return true;\r\n        } else {\r\n            window['callBack1'].update(evt);\r\n\r\n        }\r\n        return false;\r\n    }\r\n}\r\n","'use strict';\r\nimport Data from './Data';\r\n\r\nexport default class BridgeElement {\r\n    private static elementSet: BridgeElement[] = [];\r\n    public model: Data;\r\n    public id: string;\r\n    public gui: HTMLElement;\r\n\r\n    constructor(model: Data) {\r\n        this.model = model;\r\n        this.id = model.id;\r\n        BridgeElement.elementSet.push(this);\r\n    }\r\n}\r\n","import {Util} from './util';\r\n\r\n// \t\t\t\t######################################################### CSS #########################################################\r\nexport class CSS {\r\n    public css: Object;\r\n    private name: string;\r\n\r\n    constructor(name: string, item?: any) {\r\n        let i, value, border: string, prop, el;\r\n        this.name = name;\r\n        this.css = {};\r\n        if (!item) {\r\n            return;\r\n        }\r\n\r\n        el = window.getComputedStyle(item, null);\r\n        border = el.getPropertyValue('border');\r\n        for (i in el) {\r\n            prop = i;\r\n            value = el.getPropertyValue(prop);\r\n            if (value && value !== '') {\r\n                // optimize CSS\r\n                if (border) {\r\n                    if (prop === 'border-bottom' || prop === 'border-right' || prop === 'border-top' || prop === 'border-left') {\r\n                        if (value !== border) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-color' || prop === 'border-bottom-color' || prop === 'border-right-color' || prop === 'border-top-color' || prop === 'border-left-color') {\r\n                        if (border.substring(border.length - value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-width') {\r\n                        if (border.substring(0, value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else {\r\n                        this.css[prop] = value;\r\n                    }\r\n                } else {\r\n                    this.css[prop] = value;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public static getStdDef() {\r\n        let child, def = Util.create({tag: 'defs'});\r\n\r\n        child = Util.create({tag: 'filter', id: 'drop-shadow'});\r\n        child.appendChild(Util.create({tag: 'feGaussianBlur', 'in': 'SourceAlpha', result: 'blur-out', stdDeviation: 2}));\r\n        child.appendChild(Util.create({tag: 'feOffset', 'in': 'blur-out', dx: 2, dy: 2}));\r\n        child.appendChild(Util.create({tag: 'feBlend', 'in': 'SourceGraphic', mode: 'normal'}));\r\n        def.appendChild(child);\r\n        child = Util.create({tag: 'linearGradient', id: 'reflect', x1: 0, x2: 0, y1: '50%', y2: 0, spreadMethod: 'reflect'});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#aaa', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#eee', offset: '100%'}));\r\n        def.appendChild(child);\r\n\r\n        child = Util.create({tag: 'linearGradient', id: 'classelement', x1: 0, x2: '100%', y1: '100%', y2: 0});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#fff', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#d3d3d3', offset: 1}));\r\n        def.appendChild(child);\r\n\r\n        return def;\r\n    }\r\n\r\n    public static getSubstring(str: string, search: string, startChar: string, endChar: string, splitter: string): any {\r\n        let pos, end, count = 0, array = [];\r\n        pos = str.indexOf(search);\r\n        if (pos > 0) {\r\n            end = str.indexOf(startChar, pos);\r\n            pos = end + 1;\r\n            if (end > 0) {\r\n                while (end < str.length) {\r\n                    if (str.charAt(end) === startChar) {\r\n                        count += 1;\r\n                    }\r\n                    if (str.charAt(end) === endChar) {\r\n                        count -= 1;\r\n                        if (count === 0) {\r\n                            if (splitter && pos !== end) {\r\n                                array.push(str.substring(pos, end).trim());\r\n                            }\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (str.charAt(end) === splitter && count === 1) {\r\n                        array.push(str.substring(pos, end).trim());\r\n                        pos = end + 1;\r\n                    }\r\n\r\n                    end += 1;\r\n                }\r\n                if (splitter) {\r\n                    return array;\r\n                }\r\n                return str.substring(pos, end);\r\n            }\r\n            return str.substring(pos);\r\n        }\r\n        return '';\r\n    }\r\n\r\n    public static addStyle(board: SVGElement, styleName: any) {\r\n        let defs, style: any, css;\r\n        if (styleName.baseVal || styleName.baseVal === '') {\r\n            styleName = styleName.baseVal;\r\n        }\r\n        if (!styleName) {\r\n            return;\r\n        }\r\n        defs = CSS.getDefs(board);\r\n        if (defs.getElementsByTagName('style').length > 0) {\r\n            style = defs.getElementsByTagName('style')[0];\r\n        } else {\r\n            style = Util.create({tag: 'style'});\r\n            style.item = {};\r\n            defs.appendChild(style);\r\n        }\r\n        if (!style.item[styleName]) {\r\n            css = Util.getStyle(styleName);\r\n            style.item[styleName] = css;\r\n            style.innerHTML = style.innerHTML + '\\n.' + styleName + css.getSVGString(board);\r\n        }\r\n    }\r\n\r\n    public static addStyles(board: SVGElement, item: any) {\r\n        if (!item) {\r\n            return;\r\n        }\r\n        let items, i, className: any = item.className;\r\n\r\n        if (className) {\r\n            if (className.baseVal || className.baseVal === '') {\r\n                className = className.baseVal;\r\n            }\r\n        }\r\n        if (className) {\r\n            items = className.split(' ');\r\n            for (i = 0; i < items.length; i += 1) {\r\n                CSS.addStyle(board, items[i].trim());\r\n            }\r\n        }\r\n        for (i = 0; i < item.childNodes.length; i += 1) {\r\n            this.addStyles(board, item.childNodes[i]);\r\n        }\r\n    }\r\n\r\n    public static getDefs(board: SVGElement) {\r\n        let defs;\r\n        if (board.getElementsByTagName('defs').length < 1) {\r\n            defs = Util.create({tag: 'defs'});\r\n            board.insertBefore(defs, board.childNodes[0]);\r\n        } else {\r\n            defs = board.getElementsByTagName('defs')[0];\r\n        }\r\n        return defs;\r\n    }\r\n\r\n    public add(key: string, value: string) {\r\n        this.css[key] = value;\r\n    }\r\n\r\n    public get(key: string): any {\r\n        let i;\r\n        for (i in this.css) {\r\n            if (i === key) {\r\n                return this.css[key];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public getNumber(key: string) {\r\n        return parseInt((this.get(key) || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    public getSVGString(board: SVGElement) {\r\n        let str, pos, style, defs, value, filter, z;\r\n        str = '{';\r\n        for (style in this.css) {\r\n            if (!this.css.hasOwnProperty(style)) {\r\n                continue;\r\n            }\r\n            if (style === 'border') {\r\n                pos = this.css[style].indexOf(' ');\r\n                str = str + 'stroke-width: ' + this.css[style].substring(0, pos) + ';';\r\n                pos = this.css[style].indexOf(' ', pos + 1);\r\n                str = str + 'stroke:' + this.css[style].substring(pos) + ';';\r\n            } else if (style === 'background-color') {\r\n                str = str + 'fill: ' + this.css[style] + ';';\r\n            } else if (style === 'background') {\r\n                value = CSS.getSubstring(this.css[style], 'linear-gradient', '(', ')', ',');\r\n                if (value.length > 0) {\r\n                    defs = CSS.getDefs(board);\r\n                    if (value[0] === '45deg') {\r\n                        pos = 1;\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '100%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                    } else {\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '0%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                        pos = 0;\r\n                    }\r\n                    defs.appendChild(filter);\r\n                    while (pos < value.length) {\r\n                        value[pos] = value[pos].trim();\r\n                        z = value[pos].lastIndexOf(' ');\r\n                        filter.appendChild(Util.create({\r\n                            tag: 'stop',\r\n                            'offset': value[pos].substring(z + 1),\r\n                            style: {'stop-color': value[pos].substring(0, z)}\r\n                        }));\r\n                        pos += 1;\r\n                    }\r\n                    str = str + 'fill: url(#' + this.name + ');';\r\n                    continue;\r\n                }\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n                // box-shadow: inset 0 3px 4px #888;\r\n// \t\t\t\t<defs>\r\n// \t\t\t\t\t<filter id='drop-shadow'>\r\n// \t\t\t\t\t\t<feGaussianBlur in='SourceAlpha' result='blur-out' stdDeviation='2'></feGaussianBlur>\r\n// \t\t\t\t\t\t<feOffset in='blur-out' dx='2' dy='2'></feOffset>\r\n// \t\t\t\t\t\t<feBlend in='SourceGraphic' mode='normal'></feBlend>\r\n// \t\t\t\t\t</filter>\r\n// \t\t\t\t</defs>\r\n            } else {\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n            }\r\n        }\r\n        str = str + '}';\r\n        return str;\r\n    }\r\n}\r\n","import {Bridge} from './Bridge';\r\nimport Data from './Data';\r\nimport EventListener from './EventListener';\r\n\r\nexport abstract class Control {\r\n    public $owner: Control;\r\n    /**\r\n     *\r\n     */\r\n    public property: string;\r\n    public id: string;\r\n    public $view: Element;\r\n    public $viewData: Data = null;\r\n\r\n    protected $model: Data;\r\n    protected $viewListener: EventListenerOrEventListenerObject;\r\n\r\n    /**\r\n     * The properties, we want to listen to\r\n     */\r\n    // static defaultProperties: string[] = [];\r\n\r\n    // public getProperties(): string[] {\r\n    //     return this.properties;\r\n    // }\r\n\r\n    constructor() {\r\n        // e.g. this.properties.push(\"key\");\r\n        // this.properties.push(\"property\");\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data: Data = new Data();\r\n        if (oldData) {\r\n            oldData.removeListener(this);\r\n            const keys: string[] = oldData.getKeys();\r\n            for (let i = 0; i < keys.length; i++) {\r\n                let attr = keys[i];\r\n                if (this.$view) {\r\n                    if (this.$view[attr] === null) {\r\n                        continue;\r\n                    }\r\n                    data.setValue(attr, this.$view[attr]);\r\n                } else {\r\n                    data.setValue(attr, null);\r\n                }\r\n            }\r\n        }\r\n        data.addListener(this);\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     *  Set the new HTMLElement and attach listener to it.\r\n     *  Also remove Listeners from old one and return the old one, if present.\r\n     * @param element\r\n     * @returns The previous Element\r\n     */\r\n    public setView(element: Element): Element {\r\n        let oldElement: Element = null;\r\n        if (this.$view) {\r\n            oldElement = this.$view;\r\n            if (this.$viewListener) {\r\n                oldElement.removeEventListener('change', this.$viewListener);\r\n            }\r\n        }\r\n        this.$view = element;\r\n\r\n        if (this.$viewListener) {\r\n            element.addEventListener('change', this.$viewListener);\r\n        }\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n        return element;\r\n    }\r\n\r\n    public init(owner: Control, property ?: string, id ?: string): Control {\r\n        if (!this.$owner) {\r\n            this.$owner = owner;\r\n        }\r\n        if (!this.id) {\r\n            this.id = id;\r\n        }\r\n        if (!this.property) {\r\n            this.property = this.generateID(property, id);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public createEventListener(): EventListener {\r\n        return new EventListener();\r\n    }\r\n\r\n    public getRoot(): Control {\r\n        if (this.$owner) {\r\n            return this.$owner.getRoot();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return null;\r\n    }\r\n\r\n    public initControl(data: any): void {\r\n        if (this.$view === null || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (data.hasOwnProperty('prop')) {\r\n            for (let key in data.prop) {\r\n                let oldValue = this.$viewData.getValue(key);\r\n                if (this.$view) {\r\n                    this.updateElement(key, oldValue, data.prop[key]);\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        let hasRem = data.hasOwnProperty('rem');\r\n        let removed: any[] = [];\r\n        if (data.hasOwnProperty('upd')) {\r\n            for (let key in data.upd) {\r\n                let oldValue;\r\n                let newValue = data.upd[key];\r\n                let entity;\r\n                const temp = false;\r\n                if (temp) {\r\n//                if (newValue == this.getViewData().getValue(key)) {\r\n                    // new Value assertEquals old value, so we don't need to change anything..\r\n                    // delete data.rem[key];\r\n                    if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                        removed.push(data.rem[key]);\r\n                    }\r\n                    continue;\r\n                }\r\n                if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                    // if there's a rem, the oldValue from rem will be used and expected to be right..\r\n                    oldValue = data.rem[key];\r\n                    if (this.$model && this.$model.getValue(key) === oldValue) {\r\n                        entity = this.$model;\r\n//                    } else if (oldValue == this.getViewData().getValue(key)) {\r\n//                        $graphModel = this.getViewData();\r\n                    }\r\n                    delete data.rem[key];\r\n\r\n                    if (entity === null) {\r\n                        continue;\r\n                    }\r\n                }\r\n                if (entity) {\r\n                    if (!hasRem) {\r\n                        if (entity === this.$model) {\r\n                            oldValue = this.$model.getValue(key);\r\n                        } else {\r\n//                           oldValue = this.getViewData().getValue(key);\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (this.$model) {\r\n                        // try to get the oldValue directly from the $graphModel...\r\n                        oldValue = this.$model.getValue(key);\r\n                        entity = this.$model;\r\n                    }\r\n                    if (oldValue === null) {\r\n                        // if there was no data in the entity, we try to get oldValue from the $view\r\n//                        oldValue = this.getViewData().getValue(key);\r\n//                        entity = this.getViewData();\r\n                    }\r\n                }\r\n\r\n                //  || oldValue !== this.$viewData.getValue(key)\r\n                if (newValue === oldValue) {\r\n                    // no match, so update should be wrong...\r\n                    continue;\r\n                }\r\n                const viewDataOldValue = this.$viewData.getValue(key);\r\n                if (entity === this.$viewData) {\r\n\r\n                    // this.getViewData().setValue(key, newValue);\r\n                    if (this.$view) {\r\n                        this.updateElement(key, viewDataOldValue, newValue);\r\n                    }\r\n                } else {\r\n                    this.updateElement(key, viewDataOldValue, newValue);\r\n                }\r\n                this.getRoot().setValue(entity, key, newValue, oldValue);\r\n            }\r\n            // this.saveViewInData();\r\n        }\r\n        if (hasRem) {\r\n            for (let key in data.rem) {\r\n                if (removed.hasOwnProperty(key)) {\r\n                    continue;\r\n                }\r\n                let oldValue;\r\n//                    this.getViewData().getValue(key);\r\n//                if (oldValue != data.rem[key] || data.upd !== undefined && (data.upd[key] == oldValue || this.getViewData().getValue(key) == data.upd[key])) {\r\n                // if rem is invalid, or if the change is already applied, don't do anything..\r\n                //                  continue;\r\n                //            }\r\n                // delete this.$viewData.getValue(key);\r\n                // this.saveViewInData();\r\n                this.updateElement(key, null, null);\r\n                // this.$view.removeAttribute(key);\r\n                if (this.$model) {\r\n//                    this.getRoot().setValue(this.$graphModel, key, this.getViewData().getValue(key), oldValue);\r\n                }\r\n            }\r\n        }\r\n        if (this.property) {\r\n            // Add listener to Input field:\r\n            this.$view['onchange'] = ((ev: Event) => {\r\n                    this.controlChanged(ev);\r\n                }\r\n            );\r\n        }\r\n//        this.saveViewInData();\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        return null;\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n        return false;\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return new Object();\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue ?: Object): boolean {\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Is called when a object, that the Control is listening to, changes its value.\r\n     * @param entity\r\n     * @param property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        if (oldValue === newValue || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (oldValue === this.$viewData.getValue(property)) {\r\n            return;\r\n        }\r\n        // Set NewData to ViewData and Fire PC\r\n        this.$viewData.setValue(property, newValue);\r\n\r\n//\r\n//\r\n//         // if (entity == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.entity) {\r\n//                 alert(\"entity = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.entity.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.entity, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the entity is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"entity = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n// >>>>>>> addOldFunctions\r\n        if (this.$viewData) {\r\n            this.$viewData.setValue(property, newValue);\r\n        }\r\n        if (this.$model) {\r\n            this.$model.setValue(property, newValue);\r\n        }\r\n        this.updateElement(property, oldValue, newValue);\r\n    }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            // Do Nothing\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  Update GUI Element\r\n     * @param {string} property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        if (this.$view && this.$view.hasAttribute(property)) {\r\n            this.$view.setAttribute(property, newValue);\r\n        }\r\n    }\r\n\r\n//        if (oldValue == newValue) {\r\n//            return;\r\n//        }\r\n//        if (oldValue == this.$viewData.getValue(property)) {\r\n//            return;\r\n//        }\r\n//        // Set NewData to ViewData and Fire PC\r\n//        this.$viewData.setValue(property, newValue);\r\n//\r\n//\r\n//\r\n//         // if ($graphModel == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.$graphModel) {\r\n//                 alert(\"$graphModel = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.$graphModel.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.$graphModel, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the $graphModel is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"$graphModel = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n\r\n    public getId(): string {\r\n        return this.id;\r\n    }\r\n\r\n    public load(json: JSON | Object, owner ?: Control): any {\r\n        // Do Nothing\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.property || entity.hasProperty(this.property)) {\r\n                entity.addListener(this, this.property);\r\n                this.$model = entity;\r\n            }\r\n        }\r\n    }\r\n\r\n    public appendChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.appendChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].appendChild(child.$view);\r\n        }\r\n    }\r\n\r\n    public removeChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.removeChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].removeChild(child.$view);\r\n        }\r\n    }\r\n\r\n    /*\r\n     Property looks like: 't1.talk'\r\n     */\r\n    public setProperty(property: string): void {\r\n        if (!this.property) {\r\n            return;\r\n        }\r\n        let objId = property.split('.')[0];\r\n        let object = null;\r\n        if (this.$owner.hasItem(objId)) {\r\n            object = this.$owner.getItem(objId);\r\n        }\r\n\r\n        // remove listener on old object\r\n        if (this.$model) {\r\n            // this.$graphModel.removeListener(this);\r\n            this.$model.removeListener(this, this.lastProperty);\r\n        }\r\n        this.property = property;\r\n\r\n        // add listener to object..\r\n        if (object) {\r\n            object.addListener(this, this.lastProperty);\r\n            this.$model = object;\r\n            this.updateElement(this.lastProperty, this.$viewData.getValue(this.lastProperty), object.prop[this.lastProperty]);\r\n        }\r\n    }\r\n\r\n    public registerListenerOnHTMLObject(eventType: string): boolean {\r\n        return this.registerEventListener(eventType, <HTMLElement>this.$view);\r\n    }\r\n\r\n    // Normal Event HTML-Event\r\n    // Eventtype:string,\r\n    // id:string of Control\r\n    public fireEvent(evt: Event): void {\r\n        // Do Nothing\r\n    }\r\n\r\n    public isClosed(): boolean {\r\n        return this['closed'];\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        if (this.isClosed()) {\r\n            return this.$owner.getShowed();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * the id of the Data object, that contains the properties of the view\r\n     * @returns {string}\r\n     */\r\n    protected getControlDataID() {\r\n        return this.id + '_data';\r\n    }\r\n\r\n    protected generateID(property ?: string, id ?: string): string {\r\n        if (property) {\r\n            return property;\r\n        }\r\n        if (id) {\r\n            // will generate a data Object suitable for the Control..\r\n            // must be overridden, if the changeEvent shouldn't listen on value...\r\n//            return id + '.' + this.getStandardProperty();//+ \"_data\"\r\n            return id + '.' + '_data';\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected updateViewData() {\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n        const keys: string[] = this.$viewData.getKeys();\r\n        for (let i = 0; i < keys.length; i++) {\r\n            let attr = keys[i];\r\n            if (this.$view[attr] === null) {\r\n                continue;\r\n            }\r\n            this.$viewData.setValue(attr, this.$view[attr]);\r\n        }\r\n    }\r\n\r\n    protected registerEventListener(eventType: string, htmlElement: HTMLElement): boolean {\r\n        if (!htmlElement) {\r\n            return false;\r\n        }\r\n        if (htmlElement instanceof HTMLElement === false) {\r\n            return false;\r\n        }\r\n        let control = this;\r\n        let listener = (t: any) => {\r\n            t.eventType = eventType;\r\n            t.id = control.id;\r\n            control.$owner.fireEvent(t);\r\n        };\r\n        htmlElement.addEventListener(eventType, listener);\r\n        return true;\r\n    }\r\n\r\n    get lastProperty(): string {\r\n        if (!this.property) {\r\n            return '';\r\n        }\r\n        let arr: string[] = this.property.split('.');\r\n        return arr[arr.length - 1];\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\n\r\nexport default class Data {\r\n    public prop = {};\r\n    id: string;\r\n    // $listener: Control[] = [];\r\n    $listener: Object = {};\r\n\r\n    private static nullCheck(property: string): string {\r\n        if (property === undefined || property === null) {\r\n            property = '';\r\n        }\r\n        return property;\r\n    }\r\n    public getKeys(): string[] {\r\n        return Object.keys(this.prop);\r\n    }\r\n\r\n    public addProperties(values: Object) {\r\n        if (!values) {\r\n            return;\r\n        }\r\n        if (values['prop']) {\r\n            let prop = values['prop'];\r\n            for (let property in prop) {\r\n                if (prop.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (prop[property] !== null && '' !== prop[property]) {\r\n                    this.setValue(property, prop[property]);\r\n                }\r\n            }\r\n        } else {\r\n            let upd = values['upd'] || {};\r\n            let rem = values['rem'] || {};\r\n\r\n            for (let property in upd) {\r\n                if (upd.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (rem.hasOwnProperty(property) === false) {\r\n                    this.setValue(property, upd[property]);\r\n                } else {\r\n                    // if we have a rem, we wan't to check, if its a valid change (teh old value is the value in rem)\r\n                    if (this.getValue(property) === rem[property]) {\r\n                        this.setValue(property, upd[property]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getValue(attribute: string) {\r\n        return this.prop[attribute];\r\n    }\r\n\r\n    public setValue(attribute: string, newValue: any): void {\r\n        let oldValue = this.prop[attribute];\r\n        if (oldValue === newValue && newValue !== null) {\r\n            return;\r\n        }\r\n        this.prop[attribute] = newValue;\r\n        this.firePropertyChange(attribute, oldValue, newValue);\r\n    }\r\n\r\n    public addTo(attribute: string, newValue: any): boolean {\r\n        let add: boolean;\r\n        if (this.prop[attribute]) {\r\n            if (this.prop[attribute].contains(newValue) === false) {\r\n                add = true;\r\n            }\r\n        } else {\r\n            this.prop[attribute] = [];\r\n            add = true;\r\n        }\r\n        if (add) {\r\n            this.prop[attribute].push(newValue);\r\n            this.firePropertyChange(attribute, null, newValue);\r\n        }\r\n        return add;\r\n    }\r\n\r\n    public removeFrom(attribute: string, newValue: any): boolean {\r\n        if (!this.prop[attribute]) {\r\n            return true;\r\n        }\r\n        let pos: number = this.prop[attribute].indexOf(newValue);\r\n        if (pos < 0) {\r\n            return true;\r\n        }\r\n        this.prop[attribute].splice(pos, 1);\r\n        this.firePropertyChange(attribute, newValue, null);\r\n        return true;\r\n    }\r\n\r\n    public addListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(property);\r\n        if (!listeners) {\r\n            listeners = [];\r\n            this.$listener[Data.nullCheck(property)] = listeners;\r\n        }\r\n        listeners.push(control);\r\n    }\r\n\r\n    public removeListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners = this.getListeners(property);\r\n        if (listeners === null) {\r\n            return;\r\n        }\r\n        let pos = listeners.indexOf(control);\r\n        if (pos >= 0) {\r\n            listeners.splice(pos, 1);\r\n        }\r\n        if (listeners.length === 0 && Data.nullCheck(property) !== '') {\r\n            // only remove, if it's not the default listener list...\r\n            delete this.$listener[property];\r\n        }\r\n    }\r\n\r\n    public hasProperty(property: string): boolean {\r\n        return this.prop.hasOwnProperty(property);\r\n    }\r\n\r\n    public addFrom(attribute: string, oldData: Data): void {\r\n        if (oldData) {\r\n            this.setValue(attribute, oldData.getValue(attribute));\r\n        } else {\r\n            this.setValue(attribute, null);\r\n        }\r\n    }\r\n\r\n    public removeKey(key: string): any {\r\n        if (this.hasProperty(key)) {\r\n            const oldValue = this.prop[key];\r\n            delete this.prop[key];\r\n            return oldValue;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected getListeners(property: string): PropertyChangeSupport[] {\r\n        property = Data.nullCheck(property);\r\n        return this.$listener[property];\r\n    }\r\n\r\n    protected firePropertyChange(attribute: string, oldValue: Object, newValue: Object) {\r\n        attribute = Data.nullCheck(attribute);\r\n        // at first fire for the given property\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(attribute);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n        // now we need to fire the Listeners that wan't to listen to everything\r\n        listeners = this.getListeners(null);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport interface EventHandler {\r\n    canHandle(): boolean;\r\n    handle(event: Event, element: DiagramElement): boolean;\r\n    setActive(active: boolean): void;\r\n}\r\n\r\nexport class EventBus {\r\n    public static CREATE: string = 'Create';\r\n    public static EDITOR: string = 'Editor';\r\n    public static OPENPROPERTIES: string = 'openProperties';\r\n    public static RELOADPROPERTIES: string = 'reloadProperties';\r\n    public static ELEMENTMOUSEDOWN: string = 'ELEMENT:MOUSEDOWN';\r\n    public static ELEMENTMOUSEUP: string = 'ELEMENT:MOUSEUP';\r\n    public static ELEMENTMOUSELEAVE: string = 'ELEMENT:MOUSELEAVE';\r\n    public static ELEMENTMOUSEMOVE: string = 'ELEMENT:MOUSEMOVE';\r\n    public static ELEMENTMOUSEWHEEL: string = 'ELEMENT:MOUSEWHEEL';\r\n    public static ELEMENTCLICK: string = 'ELEMENT:CLICK';\r\n    public static ELEMENTDBLCLICK: string = 'ELEMENT:DBLCLICK';\r\n    public static ELEMENTDRAG: string = 'ELEMENT:DRAG';\r\n    public static ELEMENTDRAGOVER: string = 'ELEMENT:DRAGOVER';\r\n    public static ELEMENTDROP: string = 'ELEMENT:DROP';\r\n    public static ELEMENTDRAGLEAVE: string = 'ELEMENT:DRAGLEAVE';\r\n\r\n    public static EVENTS: string[] = [\r\n        EventBus.CREATE,\r\n        EventBus.EDITOR,\r\n        EventBus.OPENPROPERTIES,\r\n        EventBus.RELOADPROPERTIES,\r\n        EventBus.ELEMENTMOUSEDOWN,\r\n        EventBus.ELEMENTMOUSEUP,\r\n        EventBus.ELEMENTMOUSELEAVE,\r\n        EventBus.ELEMENTMOUSEMOVE,\r\n        EventBus.ELEMENTMOUSEWHEEL,\r\n        EventBus.ELEMENTCLICK,\r\n        EventBus.ELEMENTDRAG,\r\n        EventBus.ELEMENTDBLCLICK,\r\n        EventBus.ELEMENTDRAGOVER,\r\n        EventBus.ELEMENTDROP,\r\n        EventBus.ELEMENTDRAGLEAVE,\r\n    ];\r\n\r\n    private static handlers = {};\r\n\r\n    private static $activeHandler: string = '';\r\n\r\n    public static setActiveHandler(handler: string): void {\r\n        this.$activeHandler = handler;\r\n    }\r\n\r\n    public static isHandlerActiveOrFree(handler: string, notEmpty?: boolean): boolean {\r\n        if (notEmpty) {\r\n            return this.$activeHandler === handler;\r\n        }\r\n        return this.$activeHandler === handler || this.$activeHandler === '' || this.$activeHandler === undefined;\r\n    }\r\n\r\n    public static isAnyHandlerActive(): boolean {\r\n        return !(this.$activeHandler === '' || this.$activeHandler === undefined);\r\n    }\r\n\r\n    public static releaseActiveHandler(): void {\r\n        this.$activeHandler = '';\r\n    }\r\n\r\n    public static getActiveHandler(): string {\r\n        return this.$activeHandler;\r\n    }\r\n\r\n    static register(control: Control, view: Element) {\r\n        let events: string[];\r\n        if (typeof control['getEvents'] === 'function') {\r\n            events = control['getEvents']();\r\n        }\r\n\r\n        if (!events || !view) {\r\n            return;\r\n        }\r\n        for (let event of events) {\r\n            this.registerEvent(view, event, control);\r\n        }\r\n    }\r\n\r\n    static registerEvent(view: Element, event: string, control?: any) {\r\n        const pos: number = event.indexOf(':');\r\n        if (pos > 0) {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        } else {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        }\r\n    }\r\n\r\n    public static publish(element: DiagramElement, evt: Event) {\r\n        let handlers = EventBus.handlers[evt.type];\r\n        if (handlers) {\r\n            for (let handler of handlers) {\r\n                handler.handle(evt, element);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static subscribe(handler: EventHandler, ...eventTypes: string[]) {\r\n        for (let event of eventTypes) {\r\n            let handlers = EventBus.handlers[event];\r\n            if (handlers === null || handlers === undefined) {\r\n                handlers = [];\r\n                EventBus.handlers[event] = handlers;\r\n            }\r\n            handlers.push(handler);\r\n        }\r\n    }\r\n}\r\n","import SimpleEvent from './Event';\r\n\r\nexport default class EventListener {\r\n    private $onUpdate: Function;\r\n\r\n    get onUpdate(): Function {\r\n        return this.$onUpdate;\r\n    }\r\n\r\n    set onUpdate(value: Function) {\r\n        this.$onUpdate = value;\r\n    }\r\n\r\n    update(event: SimpleEvent) {\r\n        this.$onUpdate(event);\r\n    }\r\n}\r\n","// ################################## jsEPS ####################################################\r\nimport {SVGConverter} from './SVGConverter';\r\n\r\nexport class JSEPS {\r\n    private max: number;\r\n    private min: number;\r\n    private inverting: boolean;\r\n    private output: string[];\r\n    private font: number;\r\n\r\n    constructor(options: any) {\r\n        this.max = 0;\r\n        this.min = 999;\r\n        let hasInverting = typeof (options.inverting);\r\n        this.inverting = (options && hasInverting !== 'undefined' ? options.inverting : true);\r\n        this.output = ['%!PS-Adobe-3.0 EPSF-3.0', '1 setlinewidth'];\r\n        this.out('/FSD {findfont exch scalefont def} bind def % In the document prolog: define');\r\n        this.out('/SMS {setfont moveto show} bind def % some useful procedures');\r\n        this.out('/MS {moveto show} bind def');\r\n        this.out('/F1  10  /Helvetica  FSD % At the start of the script: set up');\r\n        this.font = 1;\r\n    }\r\n\r\n    public out(value: string) {this.output.push(value); }\r\n    public rect(x: number, y: number, width: number, height: number, style: string) {\r\n        y = y + (this.inverting ? height : 0);\r\n        if (style && style.indexOf('fill:url(#classelement);') >= 0) {\r\n            this.out('gsave 0.93 0.93 0.93 setrgbcolor newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectfill grestore');\r\n        } else {\r\n            this.out('newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectstroke');\r\n        }\r\n    }\r\n    public setFillColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public y(value: number) {this.max = Math.max(this.max, value); this.min = Math.min(this.min, value); return this.inverting ? '%y(' + value + ')' : value; }\r\n    public getType(): string {\r\n        return 'application/postscript';\r\n    }\r\n\r\n    public getData(): string {\r\n        let t, end, url, text, typ = 'application/postscript', a = document.createElement('a'), data = '', pos, i;\r\n        for (i = 0; i < this.output.length; i += 1) {\r\n            text = this.output[i];\r\n            if (this.inverting) {\r\n                while ((pos = text.indexOf('%y')) >= 0) {\r\n                    end = text.indexOf(')', pos);\r\n                    t = this.max - parseInt(text.substring(pos + 3, end), 10);\r\n                    text = text.substring(0, pos) + t + text.substring(end + 1);\r\n                }\r\n            }\r\n            data = data + text + '\\r\\n';\r\n        }\r\n        return data;\r\n    }\r\n\r\n    public setDrawColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public ellipse(cx: number, cy: number, rx: number, ry: number, colorMode: string) {/*FIXME*/}\r\n    public circle(cx: number, cy: number, r: number, colorMode: string) {/*FIXME*/}\r\n    public setTextColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public text(x: number, y: number, text: string) {this.out('(' + text.replace('&lt;', '<').replace('&gt;', '>') + ') ' + x + ' ' + this.y(y) + ' F1 SMS'); }\r\n    public lineto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' lineto'); this.out('stroke'); }\r\n    public moveto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' moveto'); }\r\n    public line(x1: number, y1: number, x2: number, y2: number) {this.out('newpath ' + x1 + ' ' + this.y(y1) + ' moveto ' + x2 + ' ' + this.y(y2) + ' lineto stroke'); }\r\n    public setLineWidth(value: string) {this.out(value + ' setlinewidth'); }\r\n    public setFont(value: string) {this.out('/F' + (this.font += 1) + ' 10 /' + value + ' FSD'); }\r\n}\r\n","import { Graph } from './elements/Graph';\r\n\r\n/*const buttons = {\r\n    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    clazz: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n};\r\n*/\r\nexport default class Palette {\r\n\r\n    private graph: Graph;\r\n    private palette: Element;\r\n    private root: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n        let div = document.createElement('div');\r\n        div.className = 'palette';\r\n        div.id = 'palette';\r\n        this.root = div;\r\n        this.palette = div;\r\n        for (let key in graph.nodeFactory) {\r\n            let element = graph.nodeFactory[key];\r\n            let control = new element();\r\n            let icon = control.getToolBarIcon();\r\n            if (icon) {\r\n                let button = <HTMLButtonElement>document.createElement('button');\r\n                button.className = 'add' + key + 'Btn';\r\n                button.innerHTML = icon.outerHTML;\r\n                button.onclick = e => {\r\n                    let nextFreePosition = this.graph.getNextFreePosition();\r\n                    // let node = this.graph.addElementWithValues(graph.nodeFactory[key], {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    let node = this.graph.addElementWithValues(key, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    this.graph.drawElement(node);\r\n                };\r\n                this.palette.appendChild(button);\r\n            }\r\n        }\r\n        // this.graph.nodeFactory\r\n//        this.addButtons();\r\n    }\r\n\r\n    public show() {\r\n        document.body.appendChild(this.root);\r\n    }\r\n\r\n    private addButtons() {\r\n        /*for (let btn in buttons) {\r\n            let button = <HTMLButtonElement>document.createElement('button');\r\n            button.className = 'add' + btn + 'Btn';\r\n            button.innerHTML = buttons[btn];\r\n            button.onclick = e => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let node = this.graph.addElementWithValues(btn, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                this.graph.drawElement(node);\r\n            };\r\n            this.palette.appendChild(button);\r\n        }*/\r\n    }\r\n}\r\n","import {Graph} from './elements/Graph';\r\nimport * as edges from './elements/edges';\r\nimport {EventBus, EventHandler} from './EventBus';\r\nimport {DiagramElement} from './elements/BaseElements';\r\nimport {Util} from './util';\r\n\r\nexport class PanelGroup implements EventHandler {\r\n    private graph: Graph;\r\n    private selectedElement: DiagramElement;\r\n    private clearPanel: Panel;\r\n    private generatePanel: Panel;\r\n    private propertiesMasterPanel: HTMLDivElement;\r\n    private propertiesContent: HTMLDivElement;\r\n    private propHeaderLabel: HTMLDivElement;\r\n    private propHeaderButton: HTMLButtonElement;\r\n    private selectedPanel: Panel;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.clearPanel = new ClearPanel(this);\r\n        this.generatePanel = new GeneratePanel(this);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        this.handleOpenProperties(event, element);\r\n\r\n        if (event.type === EventBus.RELOADPROPERTIES\r\n            && this.selectedElement && element.id === this.selectedElement.id) {\r\n            this.handleEvent(event, element);\r\n        }\r\n\r\n        // the same element was clicked. do nothing\r\n        if (this.selectedElement && this.selectedElement.id === element.id) {\r\n            return true;\r\n        }\r\n        if (element.id === 'RootElement') {\r\n            this.setActivePanel(this.clearPanel);\r\n        }\r\n        if (element.id === 'GenerateProp') {\r\n            this.setActivePanel(this.generatePanel);\r\n        }\r\n        this.selectedElement = element;\r\n\r\n        return true;\r\n    }\r\n\r\n    public getGraph(): Graph {\r\n        return this.graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(PanelGroup.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(PanelGroup.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n     public handleEvent(event: any, element: any) {\r\n        // DO NOTHING\r\n    }\r\n\r\n    public show() {\r\n        // main div to display any properties, class, edge, etc.\r\n        this.propertiesMasterPanel = document.createElement('div');\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n\r\n        this.propertiesContent = document.createElement('div');\r\n        this.propertiesContent.className = 'properties-hidden';\r\n\r\n        this.propHeaderLabel = document.createElement('div');\r\n        this.propHeaderLabel.style.display = 'inherit';\r\n        this.propHeaderLabel.style.cursor = 'pointer';\r\n        this.propHeaderLabel.onclick = e => this.toogleProperties(e);\r\n\r\n        // button to display and hide the properties of e.g. a class\r\n        this.propHeaderButton = document.createElement('button');\r\n        this.propHeaderButton.className = 'btnHideProp';\r\n        this.propHeaderButton.style.cssFloat = 'right';\r\n        this.propHeaderButton.onclick = e => this.toogleProperties(e);\r\n\r\n        let propertiesHeader = document.createElement('div');\r\n        propertiesHeader.style.display = 'inline';\r\n        propertiesHeader.appendChild(this.propHeaderLabel);\r\n        propertiesHeader.appendChild(this.propHeaderButton);\r\n\r\n        this.propertiesMasterPanel.appendChild(propertiesHeader);\r\n        this.propertiesMasterPanel.appendChild(this.propertiesContent);\r\n        document.body.appendChild(this.propertiesMasterPanel);\r\n\r\n        this.setActivePanel(this.clearPanel);\r\n    }\r\n\r\n    public setActivePanel(panel: Panel) {\r\n        this.selectedPanel = panel;\r\n        this.propHeaderLabel.innerHTML = panel.getHeaderText();\r\n        if (this.propertiesContent) {\r\n            while (this.propertiesContent.hasChildNodes()) {\r\n                this.propertiesContent.removeChild(this.propertiesContent.childNodes[0]);\r\n            }\r\n        }\r\n        panel.show();\r\n\r\n        panel.showFirstTab();\r\n        if (panel !== this.clearPanel) {\r\n            this.showProperties(null);\r\n        } else {\r\n            this.hideProperties(null);\r\n        }\r\n    }\r\n\r\n    public getProperiesContent(): HTMLDivElement {\r\n        return this.propertiesContent;\r\n    }\r\n\r\n    private handleOpenProperties(event: Event, element: DiagramElement) {\r\n        if (event.type === 'dblclick') {\r\n            this.showProperties(event);\r\n        }\r\n    }\r\n\r\n    private showProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Show\r\n        this.propHeaderButton.innerHTML = '&#8897;';\r\n        this.propHeaderButton.title = 'Hide properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel';\r\n        this.propertiesContent.className = 'properties';\r\n    }\r\n\r\n    private toogleProperties(evt: Event): void {\r\n        if (this.propHeaderButton.title === 'Show properties') {\r\n            this.showProperties(evt);\r\n        } else {\r\n            this.hideProperties(evt);\r\n        }\r\n    }\r\n\r\n    private hideProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Hide\r\n        this.propHeaderButton.innerHTML = '&#8896;';\r\n        this.propHeaderButton.title = 'Show properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n        this.propertiesContent.className = 'properties-hidden';\r\n    }\r\n}\r\n\r\nexport abstract class Panel {\r\n    protected divPropertiesPanel: HTMLDivElement;\r\n    protected divPropertiesTabbedPanel: HTMLDivElement;\r\n    protected element: any;\r\n    protected group: PanelGroup;\r\n    private panelItem: PanelItem[] = [];\r\n\r\n    constructor(group: PanelGroup, element: any) {\r\n        // get the properties content panel\r\n        this.divPropertiesPanel = document.createElement('div');\r\n        this.element = element;\r\n        this.group = group;\r\n\r\n        this.divPropertiesTabbedPanel = document.createElement('div');\r\n        this.divPropertiesTabbedPanel.className = 'tabbedpane';\r\n\r\n        // add tabbed panel\r\n        this.divPropertiesPanel.appendChild(this.divPropertiesTabbedPanel);\r\n    }\r\n\r\n    public show(): void {\r\n        let propertiesContent: HTMLDivElement = this.group.getProperiesContent();\r\n        if (this.panelItem.length > 1) {\r\n            propertiesContent.appendChild(this.getPropertiesTabbedPanel());\r\n        }\r\n\r\n        propertiesContent.appendChild(this.getPropertiesPanel());\r\n    }\r\n\r\n    public getPropertiesTabbedPanel(): HTMLDivElement {\r\n        return this.divPropertiesTabbedPanel;\r\n    }\r\n\r\n    public getPropertiesPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return '';\r\n    }\r\n\r\n    public showFirstTab(): void {\r\n        if (this.panelItem.length > 0) {\r\n            this.openTab(this.panelItem[0]);\r\n        }\r\n    }\r\n\r\n    protected createTabElement(tabText: string, tabValue: string, item: PanelItem): PanelItem {\r\n        let tabElementBtn = document.createElement('button');\r\n        tabElementBtn.className = 'tablinks';\r\n        tabElementBtn.innerText = tabText;\r\n        tabElementBtn.value = tabValue;\r\n\r\n        if (item === null) {\r\n            item = new PanelItem(this);\r\n        }\r\n        item.withButton(tabElementBtn);\r\n\r\n        tabElementBtn.onclick = () => this.openTab(item);\r\n        this.divPropertiesTabbedPanel.appendChild(tabElementBtn);\r\n        this.panelItem.push(item);\r\n        return item;\r\n    }\r\n\r\n    protected openTab(panelItem: PanelItem): void {\r\n        for (let key in this.panelItem) {\r\n            let child = this.panelItem[key];\r\n            if (child !== panelItem) {\r\n                 child.deactive();\r\n            }\r\n        }\r\n        panelItem.active();\r\n        // hide other tabcontent\r\n        if (this.divPropertiesPanel) {\r\n            while (this.divPropertiesPanel.hasChildNodes()) {\r\n                this.divPropertiesPanel.removeChild(this.divPropertiesPanel.childNodes[0]);\r\n            }\r\n        }\r\n\r\n        // ADD\r\n        if (panelItem.getContent()) {\r\n            this.divPropertiesPanel.appendChild(panelItem.getContent());\r\n        }\r\n    }\r\n}\r\n\r\nexport class GeneratePanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n\r\n        let item: PanelItem = this.createTabElement('General', 'General', null);\r\n\r\n        // Workspace and generate code stuff\r\n        let inputGenerateWorkspace: HTMLInputElement =  <HTMLInputElement> Util.createHTML({tag: 'input', id: 'workspace', type: 'text', placeholder: 'Type your Folder for generated code...', value: 'src/main/java', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Folder:', inputGenerateWorkspace);\r\n\r\n        let inputGeneratePackage: HTMLInputElement = <HTMLInputElement> Util.createHTML({tag: 'input', id: 'package', type: 'text', placeholder: 'Type your workspace for generated code...', value: '', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Package:', inputGeneratePackage);\r\n\r\n        let options = document.createElement('div');\r\n        options.style.textAlign = 'center';\r\n        options.style.margin = '3';\r\n        options.style.padding = '5';\r\n\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(options);\r\n\r\n        options.style.borderStyle = 'groove';\r\n        options.style.borderRadius = '10px';\r\n\r\n        let btnGenerate = document.createElement('button');\r\n        btnGenerate.textContent = 'Generate';\r\n        btnGenerate.title = 'Generate code into your workspace';\r\n        btnGenerate.className = 'OptionElement';\r\n\r\n        let that = this;\r\n        btnGenerate.onclick = () => {\r\n            let workspace = inputGeneratePackage.value;\r\n            if (workspace.length === 0) {\r\n                alert('No workspace set.\\nEnter first your workspace');\r\n                inputGeneratePackage.focus();\r\n                return;\r\n            }\r\n            that.group.getGraph().generate(workspace, inputGenerateWorkspace.value);\r\n        };\r\n        options.appendChild(btnGenerate);\r\n        options.appendChild(document.createElement('hr'));\r\n        options.appendChild(document.createElement('br'));\r\n\r\n        let btnAutoLayout = Util.createHTML({tag: 'button', className: 'OptionElement', value: 'Auto Layout', style: {marginRight: '10px'}, onclick: () => {\r\n                that.group.getGraph().layout();\r\n            }});\r\n\r\n        options.appendChild(btnAutoLayout);\r\n\r\n        // delete all nodes\r\n        let btnDeleteAll = document.createElement('button');\r\n        btnDeleteAll.className = 'OptionElement';\r\n        btnDeleteAll.textContent = 'Delete All';\r\n        btnDeleteAll.title = 'Delete all nodes from diagram';\r\n\r\n        btnDeleteAll.onclick = () => {\r\n            let confirmDelete = confirm('All classes will be deleted!');\r\n            if (!confirmDelete) {\r\n                return;\r\n            }\r\n            that.group.getGraph().$graphModel.removeAllElements();\r\n        };\r\n        btnDeleteAll.style.marginRight = '10px';\r\n        options.appendChild(btnDeleteAll);\r\n\r\n        // export stuff\r\n        let exportTypes: string[] = ['Export', 'HTML', 'JSON', 'PDF', 'PNG', 'SVG'];\r\n        let selectExport = document.createElement('select');\r\n\r\n        exportTypes.forEach(type => {\r\n            if (!(!window['jsPDF'] && type === 'PDF')) {\r\n                let option = document.createElement('option');\r\n                option.value = type;\r\n                option.textContent = type;\r\n                selectExport.appendChild(option);\r\n            }\r\n        });\r\n\r\n        selectExport.onchange = (evt) => {\r\n            let selectedExportType = selectExport.options[selectExport.selectedIndex].value;\r\n            selectExport.selectedIndex = 0;\r\n            that.group.getGraph().saveAs(selectedExportType);\r\n        };\r\n        selectExport.className = 'OptionElement';\r\n        options.appendChild(selectExport);\r\n        options.appendChild(document.createElement('br'));\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Properties';\r\n    }\r\n\r\n}\r\n\r\nexport class ClearPanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Select any element to see its properties';\r\n    }\r\n}\r\n\r\nexport class PanelItem {\r\n    protected panel: Panel;\r\n    protected label: string;\r\n    protected button: HTMLButtonElement;\r\n    protected content: HTMLDivElement = <HTMLDivElement>Util.create({tag: 'div', className: 'tabContent'});\r\n\r\n    constructor(panel: Panel, label?: string) {\r\n        this.panel = panel;\r\n        this.label = label;\r\n    }\r\n\r\n    public active(): void {\r\n        if (this.getButton()) {\r\n            this.getButton().className += ' active';\r\n        }\r\n    }\r\n\r\n    public deactive(): void {\r\n        if (this.getButton()) {\r\n            Util.removeClass(this.getButton(), 'active');\r\n        }\r\n    }\r\n\r\n    public withButton(button: HTMLButtonElement): PanelItem {\r\n        this.button = button;\r\n        return this;\r\n    }\r\n\r\n    public withContent(element: HTMLElement): PanelItem {\r\n        this.content.appendChild(element);\r\n        return this;\r\n    }\r\n\r\n    public withInput(labelText: string, element: HTMLElement): PanelItem {\r\n        let group: HTMLDivElement = <HTMLDivElement> Util.createHTML({tag: 'div'});\r\n        let label = Util.createHTML({tag: 'label', for: element.id, value: labelText});\r\n        group.appendChild(label);\r\n        group.appendChild(element);\r\n\r\n        this.content.appendChild(group);\r\n        return this;\r\n    }\r\n\r\n    public getButton(): HTMLButtonElement {\r\n        return this.button;\r\n    }\r\n\r\n    public getContent(): HTMLDivElement {\r\n        return this.content;\r\n    }\r\n\r\n   public getHeader(): string {\r\n        return this.label;\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\nimport Data from './Data';\r\n\r\nexport class PropertyBinder implements PropertyChangeSupport {\r\n    private propertyClass1: string;\r\n    private propertyClass2: string;\r\n    private data1: Data;\r\n    private data2: Data;\r\n    // works like a lock\r\n    private applyingChange: boolean = false;\r\n\r\n    constructor(data1: Data, data2: Data, propertyClass1: string, propertyClass2: string) {\r\n        this.data1 = data1;\r\n        this.data2 = data2;\r\n        this.propertyClass1 = propertyClass1;\r\n        this.propertyClass2 = propertyClass2;\r\n    }\r\n    static bind(data1: Data, data2: Data, property1: string, property2: string) {\r\n        if (!data1 || !data2 || !property1) {\r\n            console.error('NullValue!!');\r\n            return null;\r\n        }\r\n        const propertyBinder = new PropertyBinder(data1, data2, property1, property2);\r\n        propertyBinder.bind();\r\n        return propertyBinder;\r\n    }\r\n\r\n    propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        if (!this.applyingChange) {\r\n            this.applyingChange = true;\r\n            if (entity === this.data1) {\r\n                // fire to data2\r\n                this.data2.setValue(this.propertyClass2, newValue);\r\n            } else if (entity === this.data2) {\r\n                // fire to data1\r\n                this.data1.setValue(this.propertyClass1, newValue);\r\n            }\r\n            this.applyingChange = false;\r\n        }\r\n    }\r\n\r\n    protected bind() {\r\n        // public addListener(control: Control, property?: string)\r\n        // todo: set value immediately\r\n        this.data1.setValue(this.propertyClass1, this.data2.getValue(this.propertyClass2));\r\n\r\n        this.data1.addListener(this, this.propertyClass1);\r\n        this.data2.addListener(this, this.propertyClass2);\r\n    }\r\n\r\n    protected unbind() {\r\n        // public addListener(control: Control, property?: string)\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n    }\r\n}\r\n","// ################################## RGBColor ####################################################\r\nexport class RGBColor {\r\n    public  ok: boolean;\r\n    public r: number;\r\n    public g: number;\r\n    public b: number;\r\n\r\n    constructor(value: string) {\r\n        this.ok = false;\r\n        if (value === 'none') {\r\n            return;\r\n        }\r\n        let computedColor, div = document.createElement('div');\r\n        div.style.backgroundColor = value;\r\n        document.body.appendChild(div);\r\n        computedColor = window.getComputedStyle(div).backgroundColor;\r\n        // cleanup temporary div.\r\n        document.body.removeChild(div);\r\n        this.convert(computedColor);\r\n    }\r\n    public convert(value: any) {\r\n        let values, regex = /rgb *\\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\\)/;\r\n        values = regex.exec(value);\r\n        this.r = parseInt(values[1], 10);\r\n        this.g = parseInt(values[2], 10);\r\n        this.b = parseInt(values[3], 10);\r\n        this.ok = true;\r\n    }\r\n\r\n    public toRGB(): string {return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; }\r\n    public toHex(): string {\r\n        return '#' + (this.r + 0x10000).toString(16).substring(3).toUpperCase() + (this.g + 0x10000).toString(16).substring(3).toUpperCase() + (this.b + 0x10000).toString(16).substring(3).toUpperCase();\r\n    }\r\n}\r\n","/*\r\n NetworkParser\r\n Copyright (c) 2011 - 2014, Stefan Lindel\r\n All rights reserved.\r\n\r\n Licensed under the EUPL, Version 1.1 or (as soon they\r\n will be approved by the European Commission) subsequent\r\n versions of the EUPL (the \"Licence\");\r\n You may not use this work except in compliance with the Licence.\r\n You may obtain a copy of the Licence at:\r\n\r\n http://ec.europa.eu/idabc/eupl5\r\n\r\n Unless required by applicable law or agreed to in\r\n writing, software distributed under the Licence is\r\n distributed on an \"AS IS\" basis,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\r\n express or implied.\r\n See the Licence for the specific language governing\r\n permissions and limitations under the Licence.\r\n*/\r\nimport {RGBColor} from './RGBColor';\r\nimport {JSEPS} from \"./JSEPS\";\r\n\r\nconst epsSvgAttr = {\r\n    // allowed attributes. all others are removed from the preview.\r\n    g: ['stroke', 'fill', 'stroke-width'],\r\n    line: ['x1', 'y1', 'x2', 'y2', 'stroke', 'stroke-width'],\r\n    rect: ['x', 'y', 'width', 'height', 'stroke', 'fill', 'stroke-width'],\r\n    ellipse: ['cx', 'cy', 'rx', 'ry', 'stroke', 'fill', 'stroke-width'],\r\n    circle: ['cx', 'cy', 'r', 'stroke', 'fill', 'stroke-width'],\r\n    text: ['x', 'y', 'font-size', 'font-family', 'text-anchor', 'font-weight', 'font-style', 'fill'],\r\n    path: ['']\r\n};\r\nexport class SVGConverter {\r\n    private k: number;\r\n    private remove: boolean;\r\n    private target: any;\r\n\r\n    constructor(element: any, target: any, options: any) {\r\n        this.k = 1.0;\r\n        let hasScale = typeof (options.scale), hasRemoveInvalid = typeof (options.removeInvalid);\r\n        this.k = (options && hasScale !== 'undefined' ? options.scale : 1.0);\r\n        this.remove = (options && hasRemoveInvalid !== 'undefined' ? options.removeInvalid : false);\r\n        this.target = target;\r\n        this.parse(element);\r\n    }\r\n\r\n    public parse(element: any) {\r\n        let el, i, n, colorMode, hasFillColor, fillRGB, fillColor, strokeColor, strokeRGB, fontType, pdfFontSize, x, y,\r\n            box, xOffset;\r\n        if (!element) {\r\n            return;\r\n        }\r\n        if (typeof element === 'string') {\r\n            el = document.createElement('div');\r\n            el.innerHTML = element;\r\n            element = el.childNodes[0];\r\n        }\r\n        for (i = 0; i < element.children.length; i += 1) {\r\n            n = element.children[i];\r\n            colorMode = null;\r\n            hasFillColor = false;\r\n            if ('g,line,rect,ellipse,circle,text'.indexOf(n.tagName) >= 0) {\r\n                fillColor = n.getAttribute('fill');\r\n                if (fillColor) {\r\n                    fillRGB = new RGBColor(fillColor);\r\n                    if (fillRGB.ok) {\r\n                        hasFillColor = true;\r\n                        colorMode = 'F';\r\n                    }\r\n                }\r\n            }\r\n            if ('g,line,rect,ellipse,circle'.indexOf(n.tagName) >= 0) {\r\n                if (hasFillColor) {\r\n                    this.target.setFillColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                }\r\n                strokeColor = n.getAttribute('stroke');\r\n                if (n.hasAttribute('stroke-width')) {\r\n                    this.target.setLineWidth(this.attr(n, 'stroke-width'));\r\n                }\r\n                if (strokeColor) {\r\n                    strokeRGB = new RGBColor(strokeColor);\r\n                    if (strokeRGB.ok) {\r\n                        this.target.setDrawColor(strokeRGB.r, strokeRGB.g, strokeRGB.b);\r\n                        if (colorMode === 'F') {\r\n                            colorMode = 'FD';\r\n                        } else if (!hasFillColor) {\r\n                            colorMode = 'S';\r\n                        }\r\n                    } else {\r\n                        colorMode = null;\r\n                    }\r\n                }\r\n            }\r\n            // console.log(\"write \"+n.tagName);\r\n            switch (n.tagName.toLowerCase()) {\r\n                case 'svg':\r\n                case 'a':\r\n                case 'g':\r\n                    this.parse(n);\r\n                    break;\r\n                case 'line':\r\n                    this.target.line(this.attr(n, 'x1'), this.attr(n, 'y1'), this.attr(n, 'x2'), this.attr(n, 'y2'));\r\n                    break;\r\n                case 'rect':\r\n                    this.target.rect(this.attr(n, 'x'), this.attr(n, 'y'), this.attr(n, 'width'), this.attr(n, 'height'), n.getAttribute('style'));\r\n                    break;\r\n                case 'ellipse':\r\n                    this.target.ellipse(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'rx'), this.attr(n, 'ry'), colorMode);\r\n                    break;\r\n                case 'circle':\r\n                    this.target.circle(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'r'), colorMode);\r\n                    break;\r\n                case 'text':\r\n                    if (n.hasAttribute('font-family')) {\r\n                        switch (n.getAttribute('font-family').toLowerCase()) {\r\n                            case 'serif':\r\n                                this.target.setFont('times');\r\n                                break;\r\n                            case 'monospace':\r\n                                this.target.setFont('courier');\r\n                                break;\r\n                            default:\r\n                                n.getAttribute('font-family', 'sans-serif');\r\n                                this.target.setFont('Helvetica');\r\n                        }\r\n                    }\r\n                    if (hasFillColor) {\r\n                        this.target.setTextColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                    }\r\n                    if (this.target instanceof JSEPS) {\r\n                        this.target.text(this.attr(n, 'x'), this.attr(n, 'y'), n.innerHTML);\r\n                        break;\r\n                    }\r\n                    fontType = '';\r\n                    if (n.hasAttribute('font-weight')) {\r\n                        if (n.getAttribute('font-weight') === 'bold') {\r\n                            fontType = 'bold';\r\n                        }\r\n                    }\r\n                    if (n.hasAttribute('font-style')) {\r\n                        if (n.getAttribute('font-style') === 'italic') {\r\n                            fontType += 'italic';\r\n                        }\r\n                    }\r\n                    this.target.setFontType(fontType);\r\n                    pdfFontSize = 16;\r\n                    if (n.hasAttribute('font-size')) {\r\n                        pdfFontSize = parseInt(n.getAttribute('font-size'), 10);\r\n                    }\r\n                    box = n.getBBox();\r\n                    // FIXME: use more accurate positioning!!\r\n                    x = this.attr(n, 'x');\r\n                    y = this.attr(n, 'y');\r\n                    xOffset = 0;\r\n                    if (n.hasAttribute('text-anchor')) {\r\n                        switch (n.getAttribute('text-anchor')) {\r\n                            case 'end':\r\n                                xOffset = box.width;\r\n                                break;\r\n                            case 'middle':\r\n                                xOffset = box.width / 2;\r\n                                break;\r\n                            case 'start':\r\n                                break;\r\n                            case 'default':\r\n                                n.getAttribute('text-anchor', 'start');\r\n                                break;\r\n                        }\r\n                        x = x - (xOffset * this.k);\r\n                    }\r\n                    this.target.setFontSize(pdfFontSize).text(x, y, n.innerHTML);\r\n                    break;\r\n                default:\r\n                    if (this.remove) {\r\n                        console.log('cant translate to target:', n);\r\n                        element.removeChild(n);\r\n                        i -= 1;\r\n                    }\r\n            }\r\n        }\r\n    }\r\n\r\n    public attr(node: any, name: string) {\r\n        return this.k * parseInt(node.getAttribute(name), 10);\r\n    }\r\n}\r\n","import {Control} from './Control';\r\n\r\nexport class ScrumBoard extends Control {\r\n    public static cards = [0, 0.5, 1, 2, 3, 5, 8, 13, 20, 40, 100, '?', 'Coffee'];\r\n    private $selected: HTMLDivElement;\r\n    private $board: HTMLDivElement;\r\n\r\n    constructor() {\r\n        super();\r\n        this.redraw();\r\n    }\r\n\r\n    public redraw(): void {\r\n        if (this.$board) {\r\n            while (this.$board.children.length > 0 ) {\r\n                this.$board.removeChild(this.$board.children[0]);\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('div');\r\n            this.$selected = document.createElement('div');\r\n            this.$board = document.createElement('div');\r\n            this.$view.appendChild(this.$board);\r\n            this.$view.appendChild(this.$selected);\r\n        }\r\n        this.$view.className = 'ScrumBoard';\r\n        for ( let i = 0; i < ScrumBoard.cards.length; i++) {\r\n            let card = document.createElement('div');\r\n            card.className = 'ScrumCard';\r\n            card.innerHTML = <string>ScrumBoard.cards[i];\r\n            card['pokervalue'] = <string>ScrumBoard.cards[i];\r\n            card.onclick = e => {\r\n                this.onClick(<HTMLDivElement>e.target);\r\n            };\r\n            this.$board.appendChild(card);\r\n        }\r\n    }\r\n\r\n    public getSVG() {\r\n        this.redraw();\r\n        return this.$view;\r\n    }\r\n\r\n    public onClick(target: HTMLDivElement): void {\r\n        console.log(target['pokervalue']);\r\n\r\n        while (this.$selected.children.length > 0 ) {\r\n            this.$selected.removeChild(this.$selected.children[0]);\r\n        }\r\n        let card = document.createElement('div');\r\n        card.className = 'ScrumCard';\r\n        card['pokervalue'] = target['pokervalue'];\r\n        card.onclick = e => {\r\n            this.onShow(<HTMLDivElement>e.target);\r\n        };\r\n        this.$selected.appendChild(card);\r\n        this.$board['style']['display'] = 'none';\r\n    }\r\n\r\n    public onShow(target: HTMLDivElement): void {\r\n        target.innerHTML = target['pokervalue'];\r\n    }\r\n}\r\n","import {Graph} from './main';\r\nimport {SymbolLibary} from './elements/nodes/Symbol';\r\nimport {EventBus} from './EventBus';\r\n\r\nexport class Toolbar {\r\n\r\n    private graph: Graph;\r\n    private mainDiv: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public show(): void {\r\n        if (this.mainDiv) {\r\n            return;\r\n        }\r\n\r\n        this.mainDiv = document.createElement('div');\r\n        this.mainDiv.className = 'toolbar';\r\n\r\n        let h1Logo = document.createElement('h1');\r\n        h1Logo.className = 'logo';\r\n        h1Logo.textContent = 'DiagramJS';\r\n\r\n        let node = {type: 'Hamburger', property: 'HTML', width: 24, height: 24, id: 'GenerateProp'};\r\n        let hamburger = SymbolLibary.draw( node);\r\n        EventBus.registerEvent(hamburger, 'click', node);\r\n        this.mainDiv.appendChild(hamburger);\r\n\r\n        this.mainDiv.appendChild(h1Logo);\r\n        document.body.appendChild(this.mainDiv);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 06.03.2017.\r\n */\r\nimport Data from './Data';\r\n\r\n// export default class Data {\r\n//    public values = {};\r\n//    id: string;\r\n//    $listener: Control[] = [];\r\n//    property: string;\r\nexport namespace UML {\r\n    export class Clazz extends Data {\r\n        public static NAME: string = 'name';\r\n        public static ATTRIBUTES: string = 'attributes';\r\n        public static METHODS: string = 'methods';\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Clazz';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n\r\n        public getAttributes() {\r\n            return this.prop[Clazz.ATTRIBUTES];\r\n        }\r\n\r\n        public addToAttributes(newValue: string) {\r\n            this.addTo(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n\r\n        public removeFromAttributes(newValue: string) {\r\n            this.removeFrom(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n    }\r\n\r\n    export class Attribute extends Data {\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Attribute';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n    }\r\n\r\n    export class Methods extends Data {\r\n\r\n    }\r\n}\r\n\r\nwindow['UML'] = UML;\r\n","import {Control} from './Control';\r\n\r\nexport class VirtualKeyBoard extends Control {\r\n    constructor(data: any) {\r\n        super();\r\n        if (!data) {\r\n            data = this.getDefault();\r\n        }\r\n        let board = document.createElement('div');\r\n        this.$viewData = data;\r\n\r\n        for (let type in data) {\r\n            if (type === 'normal') {\r\n                for (let line in data[type]) {\r\n                    let lineBoard = document.createElement('div');\r\n                    lineBoard.className = 'vkLine';\r\n                    for (let key in data[type][line]) {\r\n                        let btn: HTMLButtonElement = document.createElement('button');\r\n                        let keyTag = data[type][line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                        btn.ontouchend = () => {this.action(btn); };\r\n                        btn.onclick = () => {this.action(btn); };\r\n                        lineBoard.appendChild(btn);\r\n                    }\r\n                    board.appendChild(lineBoard);\r\n                }\r\n            }\r\n        }\r\n        this.$view = board;\r\n    }\r\n\r\n    public action(btn: HTMLButtonElement) {\r\n        if (btn['key'] === '{Shift}') {\r\n            if ( btn.className === 'vkbuttonAction') {\r\n                let keys = this.$viewData['normal'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                    }\r\n                }\r\n            } else if ( btn.className === 'vkbutton') {\r\n                let keys = this.$viewData['shift'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbuttonAction');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        alert(btn);\r\n    }\r\n\r\n    public getDefault(): any {\r\n        let format = {\r\n            normal: [\r\n                ['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '?', '´', '{Bksp}'],\r\n                ['{Tab}', 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+'],\r\n                ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '#', '{enter}'],\r\n                ['{Shift}', '<', 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n// '{left}', '{up}', '{down}','{right}', '{Cancel}']\r\n            ],\r\n            shift: [\r\n                ['°', '!', '\"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '`', '{Bksp}'],\r\n                ['{Tab}', 'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', 'O', 'P', 'Ü', '*'],\r\n                ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', '\\'', '{enter}'],\r\n                ['{Shift}', '>', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n            ]\r\n        };\r\n        return format;\r\n    }\r\n\r\n    public getBoard() {\r\n        return this.$view;\r\n    }\r\n\r\n    private setButtonValue(keyTag: string, btn: HTMLButtonElement, shiftClass: string) {\r\n        btn.className = 'vkbutton';\r\n        btn['key'] = keyTag;\r\n        btn['type'] = 'normal';\r\n        if (keyTag.substring(0, 1) === '{') {\r\n            if (keyTag === '{Bksp}') {\r\n                btn.innerHTML = 'Bksp';\r\n            } else if (keyTag === '{Tab}') {\r\n                btn.innerHTML = '&#8677; Tab';\r\n            } else if (keyTag === '{enter}') {\r\n                btn.innerHTML = 'enter';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Shift}') {\r\n                btn.innerHTML = 'Shift';\r\n                btn.className = shiftClass;\r\n            } else if (keyTag === '{Accept}') {\r\n                btn.innerHTML = 'Accept';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Alt}') {\r\n                btn.innerHTML = 'Alt';\r\n            } else if (keyTag === '{Space}') {\r\n                btn.innerHTML = '&nbsp;';\r\n                btn.className = 'vkbuttonSpace';\r\n            } else if (keyTag === '{left}') {\r\n                btn.innerHTML = '&#8592';\r\n            } else if (keyTag === '{right}') {\r\n                btn.innerHTML = '&#8594;';\r\n            } else if (keyTag === '{up}') {\r\n                btn.innerHTML = '&#8593;';\r\n            } else if (keyTag === '{down}') {\r\n                btn.innerHTML = '&#8595;';\r\n            } else if (keyTag === '{Cancel}') {\r\n                btn.innerHTML = 'Cancel';\r\n                btn.className = 'vkbuttonAction';\r\n            }\r\n        } else {\r\n            btn.innerHTML = keyTag;\r\n        }\r\n    }\r\n}\r\n","import {Adapter} from '../Adapter';\r\n\r\nexport class JavaAdapter extends Adapter {\r\n    constructor() {\r\n        super();\r\n        this.id = 'JavaAdapter';\r\n    }\r\n    update(evt: Object): boolean {\r\n        if (this.isActive()) {\r\n            window['JavaBridge'].executeChange(evt);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public isActive(): boolean {\r\n        return window['JavaBridge'];\r\n    }\r\n}\r\n","export * from './JavaAdapter';\r\n","import { Util } from '../util';\r\nimport { Control } from '../Control';\r\n\r\nexport interface Size {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\ninterface GraphElement {\r\n    getSize(): Point;\r\n\r\n    getPos(): Point;\r\n\r\n    getCenter(): Point;\r\n\r\n    getSVG(): Element;\r\n\r\n    getCanvas(): Element;\r\n\r\n    getEvents(): string[];\r\n\r\n    withPos(x: number, y: number): GraphElement;\r\n\r\n    load(data: any): any;\r\n\r\n    getToolBarIcon(): Element;\r\n\r\n    loadProperties(properties: any): void;\r\n}\r\n\r\nexport abstract class DiagramElement extends Control implements GraphElement {\r\n\r\n    protected $isDraggable: boolean = true;\r\n    protected $labelHeight = 25;\r\n    protected $labelFontSize = 14;\r\n    private $pos: Point = new Point();\r\n    private $size: Point = new Point();\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getPos(): Point {\r\n        return this.$pos;\r\n    }\r\n\r\n    public getSize(): Point {\r\n        return this.$size;\r\n    }\r\n\r\n    public getCenter(): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        return new Point(pos.x + size.x / 2, pos.y + size.y / 2);\r\n    }\r\n\r\n    public getCenterPosition(p: string): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let offset = this['$' + p];\r\n        let center = this.getCenter();\r\n        if (p === Point.DOWN) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y + size.y, Point.DOWN);\r\n        }\r\n        if (p === Point.UP) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y, Point.UP);\r\n        }\r\n        if (p === Point.LEFT) {\r\n            return new Point(pos.x, Math.min(center.y + offset, pos.y + size.y), Point.LEFT);\r\n        }\r\n        if (p === Point.RIGHT) {\r\n            return new Point(pos.x + size.x, Math.min(center.y + offset, pos.y + size.y), Point.RIGHT);\r\n        }\r\n        return new Point();\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getCanvas(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return null;\r\n    }\r\n\r\n    public getAlreadyDisplayingSVG(): Element {\r\n        return document.getElementById(this.id) || this.getSVG();\r\n    }\r\n\r\n    public load(data: any) {\r\n        // Do Nothing\r\n    }\r\n\r\n    public withPos(x: number, y: number): GraphElement {\r\n        if (x && y) {\r\n            this.$pos = new Point(x, y);\r\n        } else {\r\n            if (typeof (x) !== 'undefined' && x !== null) {\r\n                this.$pos.x = x;\r\n            }\r\n            if (typeof (y) !== 'undefined' && y !== null) {\r\n                this.$pos.y = y;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public withSize(width: number, height: number): DiagramElement {\r\n        if (width && height) {\r\n            this.$size = new Point(width, height);\r\n        } else {\r\n            if (typeof (width) !== 'undefined' && width !== null) {\r\n                this.$size.x = width;\r\n            }\r\n            if (typeof (height) !== 'undefined' && height !== null) {\r\n                this.$size.y = height;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        // FIXME if (this.status === 'close') {\r\n        // if (!this.$owner.isClosed()) {\r\n        //        return this;\r\n        //    }\r\n        // }\r\n        return super.getShowed();\r\n    }\r\n\r\n    public loadProperties(properties: any) {\r\n        // DO Nothing\r\n    }\r\n\r\n    protected createShape(attrs: any): Element {\r\n        return Util.createShape(attrs);\r\n    }\r\n}\r\n\r\nexport class Point {\r\n    public static UP: string = 'UP';\r\n    public static LEFT: string = 'LEFT';\r\n    public static RIGHT: string = 'RIGHT';\r\n    public static DOWN: string = 'DOWN';\r\n    x: number = 0;\r\n    y: number = 0;\r\n\r\n    //    pos:string = '';\r\n\r\n    constructor(x?: number, y?: number, pos?: string) {\r\n        this.x = Math.ceil(x || 0);\r\n        this.y = Math.ceil(y || 0);\r\n        if (pos) {\r\n            this['pos'] = pos;\r\n        }\r\n    }\r\n\r\n    public add(pos: Point) {\r\n        this.x += pos.x;\r\n        this.y += pos.y;\r\n        return this;\r\n    }\r\n\r\n    public getPosition(): string {\r\n        if (!this['pos']) {\r\n            return '';\r\n        }\r\n        return this['pos'];\r\n    }\r\n\r\n    public addNum(x: number, y: number) {\r\n        this.x += x;\r\n        this.y += y;\r\n        return this;\r\n    }\r\n\r\n    public sum(pos: Point) {\r\n        let sum = new Point(this.x, this.y);\r\n        sum.add(pos);\r\n        return sum;\r\n    }\r\n\r\n    public center(posA: Point, posB: Point) {\r\n        let count = 0;\r\n        if (posA) {\r\n            this.x += posA.x;\r\n            this.y += posA.y;\r\n            count++;\r\n        }\r\n        if (posB) {\r\n            this.x += posB.x;\r\n            this.y += posB.y;\r\n            count++;\r\n        }\r\n        if (count > 0) {\r\n            this.x = (this.x / count);\r\n            this.y = (this.y / count);\r\n        }\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        return this.x < 1 && this.y < 1;\r\n    }\r\n\r\n    public size(posA: Point, posB: Point) {\r\n        let x1 = 0, x2 = 0, y1 = 0, y2 = 0;\r\n        if (posA) {\r\n            x1 = posA.x;\r\n            y1 = posA.y;\r\n        }\r\n        if (posB) {\r\n            x2 = posB.x;\r\n            y2 = posB.y;\r\n        }\r\n        if (x1 > x2) {\r\n            this.x = x1 - x2;\r\n        } else {\r\n            this.x = x2 - x1;\r\n        }\r\n        if (y1 > y2) {\r\n            this.y = y1 - y2;\r\n        } else {\r\n            this.y = y2 - y1;\r\n        }\r\n    }\r\n}\r\n\r\n// \t\t\t\t######################################################### Line #########################################################\r\nexport class Line extends DiagramElement {\r\n    public static FORMAT = { SOLID: 'SOLID', DOTTED: 'DOTTED', PATH: 'PATH' };\r\n    public source: Point;\r\n    public target: Point;\r\n    public color: string;\r\n    public lineType: string;\r\n    private path: string;\r\n    private angle: Number;\r\n\r\n    constructor(lineType: string) {\r\n        super();\r\n        this.lineType = lineType;\r\n    }\r\n\r\n    public getTyp(): string {\r\n        return 'SVG';\r\n    }\r\n\r\n    public getPos() {\r\n        let pos = new Point();\r\n        pos.center(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public getSize() {\r\n        let pos = new Point();\r\n        pos.size(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public withColor(color: string): Line {\r\n        this.color = color;\r\n        return this;\r\n    }\r\n\r\n    public withSize(x: number, y: number): DiagramElement {\r\n        return this;\r\n    }\r\n\r\n    public withPath(path: Array<Point>, close: boolean, angle?: any): Line {\r\n        let i: number, d: string = 'M' + path[0].x + ' ' + path[0].y;\r\n        this.lineType = Line.FORMAT.PATH; // It is a Path not a Line\r\n        for (i = 1; i < path.length; i += 1) {\r\n            d = d + 'L ' + path[i].x + ' ' + path[i].y;\r\n        }\r\n        if (close) {\r\n            d = d + ' Z';\r\n            this.target = path[0];\r\n        } else {\r\n            this.target = path[path.length - 1];\r\n        }\r\n        this.path = d;\r\n        if (angle instanceof Number) {\r\n            this.angle = angle;\r\n        } else if (angle) {\r\n            // var lineangle, start = path[0], end = path[path.length - 1];\r\n            // lineangle = Math.atan2(end.y - start.y, end.x - start.x);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): SVGGElement {\r\n        if (this.lineType === 'PATH') {\r\n            return <SVGGElement>Util.create({\r\n                tag: 'path',\r\n                'd': this.path,\r\n                'fill': this.color,\r\n                stroke: '#000',\r\n                'stroke-width': '1px'\r\n            });\r\n        }\r\n        let line: SVGGElement = <SVGGElement>Util.create({\r\n            tag: 'line',\r\n            'x1': this.source.x,\r\n            'y1': this.source.y,\r\n            'x2': this.target.x,\r\n            'y2': this.target.y,\r\n            'stroke': Util.getColor(this.color)\r\n        });\r\n        if (this.lineType && this.lineType.toLowerCase() === 'dotted') {\r\n            line.setAttribute('stroke-miterlimit', '4');\r\n            line.setAttribute('stroke-dasharray', '1,1');\r\n        }\r\n        return line;\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport Options from '../Options';\r\nimport {JavaAdapter} from '../adapters';\r\n\r\nexport class ClassEditor extends Graph {\r\n    private adapter: JavaAdapter;\r\n    constructor(json: any, options: Options) {\r\n        if (!options ) {\r\n            options = {};\r\n        }\r\n        options.canvas = options.canvas || 'canvas';\r\n        // options.origin = options.origin || new Point(150, 45);\r\n//            layout: \"DagreLayout\",\r\n        options.autoSave = options.autoSave || true;\r\n        if (!options.features) {\r\n            options.features = {\r\n                drag: true,\r\n                editor: true,\r\n                palette: true,\r\n                select: true,\r\n                zoom: true,\r\n                toolbar: true,\r\n                import: true,\r\n                properties: true,\r\n                addnode: true,\r\n                newedge: true\r\n            };\r\n        }\r\n        super(json, options);\r\n    }\r\n\r\n    public setBoardStyle(value: string) {\r\n        console.log(value);\r\n        this.importFile.setBoardStyle(value);\r\n    }\r\n\r\n    public registerListener(): void {\r\n        this.adapter = new JavaAdapter();\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return this.adapter;\r\n    }\r\n}\r\n","import * as edges from './edges';\r\nimport { Association } from './edges';\r\nimport * as nodes from './nodes';\r\nimport * as layouts from '../layouts';\r\nimport Layout from '../layouts/Layout';\r\nimport { GraphModel } from './Model';\r\nimport { Point, Size } from './BaseElements';\r\nimport { Util } from '../util';\r\nimport { Control } from '../Control';\r\nimport Data from '../Data';\r\nimport { EventBus } from '../EventBus';\r\nimport { AddNode, Drag, NewEdge, Select, Zoom } from '../handlers';\r\nimport Options from '../Options';\r\nimport { ImportFile } from '../handlers/ImportFile';\r\nimport { CSS } from '../CSS';\r\nimport { DiagramElement } from './index';\r\nimport { Toolbar } from '../Toolbar';\r\nimport {JSEPS} from '../JSEPS';\r\nimport {SVGConverter} from '../SVGConverter';\r\nimport Palette from '../Palette';\r\nimport {PanelGroup} from '../PropertiesPanel';\r\n\r\nexport class Graph extends Control {\r\n    // canvas: HTMLElement;\r\n    root: SVGElement;\r\n    $graphModel: GraphModel;\r\n    options: Options;\r\n    canvasSize: Size;\r\n    nodeFactory: Object;\r\n    edgeFactory: Object;\r\n    layoutFactory: Object;\r\n    protected importFile: ImportFile;\r\n    private currentlayout: Layout;\r\n    // private layerToolBar: SVGSVGElement;\r\n    // https://stackoverflow.com/questions/15181452/how-to-save-export-inline-svg-styled-with-css-from-browser-to-image-file\r\n    private containerElements = ['svg', 'g'];\r\n    private relevantStyles = {\r\n        'rect': ['fill', 'stroke', 'stroke-width'],\r\n        'path': ['fill', 'stroke', 'stroke-width', 'opacity'],\r\n        'circle': ['fill', 'stroke', 'stroke-width'],\r\n        'line': ['stroke', 'stroke-width'],\r\n        'text': ['fill', 'font-size', 'text-anchor', 'font-family'],\r\n        'polygon': ['stroke', 'fill']\r\n    };\r\n\r\n    constructor(json: any, options: Options) {\r\n        super();\r\n        json = json || {};\r\n        if (json['data']) {\r\n            options = json['options'];\r\n            json = json['data'];\r\n            this.id = json['id'];\r\n        }\r\n        this.options = options || {features: { drag: true}};\r\n        if (json['init']) {\r\n            return;\r\n        }\r\n        if (!this.options.origin) {\r\n            this.options.origin = new Point(150, 45);\r\n        }\r\n        if (!this.options.style) {\r\n            // Style can be classic or modern\r\n            this.options.style = 'classic';\r\n        }\r\n        if (this.options.autoSave) {\r\n            Util.isAutoSave = options.autoSave;\r\n        }\r\n\r\n        this.initFactories();\r\n        this.initCanvas();\r\n        this.initFeatures(this.options.features);\r\n\r\n        // load previous session, if user wants it\r\n        // otherwise load the json data\r\n        if (!this.lookupInLocalStorage()) {\r\n            this.load(json);\r\n        }\r\n\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    public lookupInLocalStorage(): boolean {\r\n        if (!this.options.autoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (!Util.isLocalStorageSupported()) {\r\n            return false;\r\n        }\r\n        let diagram = Util.getDiagramFromLocalStorage();\r\n        if (diagram && diagram.length > 0) {\r\n            if (confirm('Restore previous session?')) {\r\n                let jsonData: JSON = JSON.parse(diagram);\r\n                this.load(jsonData);\r\n                this.layout();\r\n                return true;\r\n            } else {\r\n                Util.saveToLocalStorage( null);\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public fitSizeOnNodes(): void {\r\n        let maxWidth: number = 0;\r\n        let maxHeight: number = 0;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            let nodePos = node.getPos();\r\n            let nodeSize = node.getSize();\r\n            let nodeWidestPosX = nodePos.x + nodeSize.x;\r\n            let nodeWidestPosY = nodePos.y + nodeSize.y;\r\n\r\n            if (nodeWidestPosX > maxWidth) {\r\n                maxWidth = nodeWidestPosX;\r\n            }\r\n\r\n            if (nodeWidestPosY > maxHeight) {\r\n                maxHeight = nodeWidestPosY;\r\n            }\r\n        }\r\n\r\n        this.root.setAttributeNS(null, 'width', '' + (maxWidth + 100));\r\n        this.root.setAttributeNS(null, 'height', '' + (maxHeight + 50));\r\n    }\r\n\r\n    public saveAs(typ: string) {\r\n        typ = typ.toLowerCase();\r\n\r\n        // shrink size of graph to minimum. only to show up nodes\r\n        const currentSize = this.getRootSize();\r\n        this.fitSizeOnNodes();\r\n\r\n        if (typ === 'svg') {\r\n            this.exportSvg();\r\n        } else if (typ === 'png') {\r\n            this.exportPng();\r\n        } else if (typ === 'html') {\r\n            this.exportHtml();\r\n\r\n        } else if (typ === 'pdf') {\r\n            this.exportPdf();\r\n            // } else if (typ === 'eps') {\r\n            // this.ExportEPS();\r\n        }\r\n        else if (typ === 'json') {\r\n            this.exportJson();\r\n        }\r\n\r\n        // set the size back to default\r\n        this.root.setAttributeNS(null, 'width', '' + currentSize.width);\r\n        this.root.setAttributeNS(null, 'height', '' + currentSize.height);\r\n    }\r\n\r\n    /**\r\n     * generates a blob file and makes it available for download.\r\n     * @param type type of file\r\n     * @param data raw data\r\n     * @param name name of download file\r\n     */\r\n    public save(type: string, data: any, name: string, context: string) {\r\n        if (window['java']) {\r\n            window['java'].export(type, data, name, context);\r\n            return;\r\n        }\r\n        let a = document.createElement('a');\r\n        a.href = window.URL.createObjectURL(new Blob([data], { type: context }));\r\n        a.download = name;\r\n        document.body.appendChild(a);\r\n        a.click();\r\n        document.body.removeChild(a);\r\n    }\r\n\r\n    /** Exports the diagram as svg. */\r\n    public exportSvg(): void {\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        this.save('svg', this.serializeXmlNode(wellFormatedSvgDom), 'class_diagram.svg', 'image/svg+xml');\r\n    }\r\n\r\n    /** Exports the diagram as html. */\r\n    public exportHtml(): void {\r\n        let htmlFacade = '<html><head><title>DiagramJS - Classdiagram</title></head><body>$content</body></html>';\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        let svgAsXml = this.serializeXmlNode(wellFormatedSvgDom);\r\n\r\n        let htmlResult = htmlFacade.replace('$content', svgAsXml);\r\n\r\n        this.save('html', htmlResult, 'class_diagram.htm', 'text/plain');\r\n    }\r\n\r\n    /** Exports the diagram as json. */\r\n    public exportJson(): void {\r\n        let type = 'text/plain';\r\n        let jsonObj = Util.toJson(this.$graphModel);\r\n        let data = JSON.stringify(jsonObj, null, '\\t');\r\n\r\n        this.save('json', data, 'class_diagram.json', type);\r\n    }\r\n\r\n    /** Exports the diagram as pdf. */\r\n    public exportPdf(): void {\r\n        if (!window['jsPDF']) {\r\n            console.log('jspdf n.a.');\r\n            return;\r\n        }\r\n        let type = 'image/svg+xml';\r\n        let converter, pdf = new window['jsPDF']('l', 'px', [this.$graphModel.getSize().x, this.$graphModel.getSize().y]);\r\n        converter = new SVGConverter(this.$view, pdf, {removeInvalid: false});\r\n        pdf.save('Download.pdf');\r\n/*        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let canvas, context, a, image = new Image();\r\n        let size = this.getRootSize();\r\n\r\n        // create the loaded img source into a canvas. to generate a picture. then place this picture in the pdf\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            let pdf = new window['jsPDF']();\r\n\r\n            pdf.addImage(canvas.toDataURL('image/jpeg'), 'jpeg', 15, 40, 180, 160);\r\n            pdf.save('class_diagram.pdf');\r\n\r\n        };\r\n\r\n        image.src = url;\r\n        */\r\n    }\r\n\r\n    public import(data: string): void {\r\n        let rootElement = this.$graphModel.$view;\r\n        while (rootElement.hasChildNodes()) {\r\n            rootElement.removeChild(rootElement.firstChild);\r\n        }\r\n\r\n        while (this.$view.hasChildNodes()) {\r\n            this.$view.removeChild(this.$view.firstChild);\r\n        }\r\n\r\n        this.clearModel();\r\n        let jsonData = JSON.parse(data);\r\n        this.load(jsonData);\r\n        this.layout();\r\n    }\r\n\r\n    public exportEPS(): void {\r\n          let converter, doc = new JSEPS({inverting: true});\r\n            converter = new SVGConverter(this.$view, doc, {removeInvalid: false});\r\n            this.save('eps', doc.getData(), 'diagram.eps', doc.getType());\r\n    }\r\n\r\n    /** Exports the diagram as png. */\r\n    public exportPng(): void {\r\n        let canvas, context, a, image = new Image();\r\n        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let typ = 'image/svg+xml';\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let size = this.getRootSize();\r\n\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            a = document.createElement('a');\r\n            a.download = 'class_diagram.png';\r\n            a.href = canvas.toDataURL('image/png');\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            document.body.removeChild(a);\r\n        };\r\n\r\n        image.src = url;\r\n\r\n    }\r\n\r\n    public getSvgWithStyleAttributes(): Node {\r\n        let oDOM = this.$graphModel.$view.cloneNode(true);\r\n        this.readElement(oDOM, this.$graphModel.$view);\r\n\r\n        return oDOM;\r\n    }\r\n\r\n    public serializeXmlNode(xmlNode: any) {\r\n        if (window['XMLSerializer'] !== undefined) {\r\n            return (new window['XMLSerializer']()).serializeToString(xmlNode);\r\n        }\r\n        if (xmlNode.xml !== undefined) {\r\n            return xmlNode.xml;\r\n        }\r\n        return xmlNode.outerHTML;\r\n    }\r\n\r\n    public getRootSize(): Size {\r\n        let width: number;\r\n        let height: number;\r\n        width = +this.root.getAttribute('width');\r\n        height = +this.root.getAttribute('height');\r\n\r\n        return { width: width, height: height };\r\n    }\r\n\r\n        // Graph.prototype.ExportEPS = function () {\r\n        //     var converter, doc = new svgConverter.jsEPS({inverting: true});\r\n        //     converter = new svgConverter(this.board, doc, {removeInvalid: false});\r\n        //     doc.save();\r\n        // };\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        this.$graphModel = new GraphModel();\r\n        this.$graphModel.init(this);\r\n        this.$graphModel.load(json);\r\n    }\r\n\r\n    public clearModel(): void {\r\n        this.$graphModel.removeAllElements();\r\n        this.clearSvgRoot();\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.layout();\r\n        return this;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        return;\r\n    }\r\n\r\n    public getNextFreePosition(): Point {\r\n\r\n        if (!this.$graphModel) {\r\n            return new Point(50, 50);\r\n        }\r\n\r\n        let point = new Point(0, 50);\r\n\r\n        let maxX = 0;\r\n        let minX = 9000;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            maxX = Math.max(maxX, node.getPos().x);\r\n            minX = Math.min(minX, node.getPos().x);\r\n        }\r\n\r\n        if (minX > 170) {\r\n            point.x = 10;\r\n        }\r\n        else {\r\n            point.x = maxX + 200;\r\n        }\r\n\r\n        return point;\r\n    }\r\n\r\n    public addElement(type: string, dontDraw?: boolean): boolean {\r\n        let success = this.$graphModel.addElement(type);\r\n        if (success === true) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return success;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues?: Object, layout?: boolean, dontDraw?: boolean): DiagramElement {\r\n        let element = this.$graphModel.addElementWithValues(type, optionalValues);\r\n        if (element && layout) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public layout(dontDraw?: boolean): Graph {\r\n        this.getLayout().layout(this, this.$graphModel);\r\n\r\n        if (dontDraw) {\r\n            return this;\r\n        }\r\n\r\n        this.draw();\r\n        return this;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTDRAGOVER, EventBus.ELEMENTDRAGLEAVE, EventBus.ELEMENTDROP];\r\n    }\r\n\r\n    public draw() {\r\n        this.clearSvgRoot();\r\n        let model = this.$graphModel;\r\n        let root = this.root;\r\n        let max: Point = new Point();\r\n        if (this.options) {\r\n            max.x = this.options.minWidth || 0;\r\n            max.y = this.options.minHeight || 0;\r\n        }\r\n\r\n        for (let node of model.nodes) {\r\n            let svg = node.getSVG();\r\n            EventBus.register(node, svg);\r\n            root.appendChild(svg);\r\n\r\n            let temp: number;\r\n            temp = node.getPos().x + node.getSize().x;\r\n            if (temp > max.x) {\r\n                max.x = temp;\r\n            }\r\n            temp = node.getPos().y + node.getSize().y;\r\n            if (temp > max.y) {\r\n                max.y = temp;\r\n            }\r\n\r\n        }\r\n        Util.setAttributeSize(this.root, max.x + 60, max.y + 40);\r\n\r\n        for (let edge of model.edges) {\r\n            let svg = edge.getSVG();\r\n            EventBus.register(edge, svg);\r\n            root.appendChild(svg);\r\n        }\r\n    }\r\n\r\n    public getNode(id: string) {\r\n        return this.$graphModel.getNodeById(id);\r\n    }\r\n\r\n    public drawElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let svg = element.getSVG();\r\n        this.root.appendChild(svg);\r\n\r\n        // actualize root width size, if neccessary\r\n        // get current width of root\r\n        let rootSize = this.getRootSize();\r\n        let newWidth = element.getPos().x + element.getSize().x + 40;\r\n        let newHeight = element.getPos().y + element.getSize().y;\r\n\r\n        if (rootSize.width < newWidth) {\r\n            this.root.setAttributeNS(null, 'width', '' + newWidth);\r\n        }\r\n\r\n        if (rootSize.height < newHeight) {\r\n            this.root.setAttributeNS(null, 'height', '' + newHeight);\r\n        }\r\n\r\n        // draw edge\r\n        if (element instanceof Association) {\r\n            let edge = <Association>element;\r\n            edge.redraw(edge.$sNode);\r\n            let srcSvg = element.$sNode.getAlreadyDisplayingSVG();\r\n            let targetSvg = element.$tNode.getAlreadyDisplayingSVG();\r\n\r\n            this.root.appendChild(srcSvg);\r\n            this.root.appendChild(targetSvg);\r\n        }\r\n\r\n        EventBus.register(element, svg);\r\n    }\r\n\r\n    public removeElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let alreadyDisplayingSvg = element.getAlreadyDisplayingSVG();\r\n        if (Util.isParentOfChild(this.root, alreadyDisplayingSvg)) {\r\n            this.root.removeChild(alreadyDisplayingSvg);\r\n        }\r\n    }\r\n\r\n    public generate(packageName: string, path?: string) {\r\n        this.$graphModel.package = packageName;\r\n        this.$graphModel.genPath = path;\r\n\r\n        let data, result = Util.toJson(this.$graphModel);\r\n        data = JSON.stringify(result, null, '\\t');\r\n        if (window['java'] && typeof window['java'].generate === 'function') {\r\n            window['java'].generate(data);\r\n        }\r\n    }\r\n// REFACTORING dd\r\n    private readElement(parent: any, origData: any): void {\r\n        let children = parent.childNodes;\r\n        let origChildDat = origData.childNodes;\r\n\r\n        for (let cd = 0; cd < children.length; cd++) {\r\n            let child = children[cd];\r\n\r\n            let tagName = child.tagName;\r\n            if (this.containerElements.indexOf(tagName) !== -1) {\r\n                this.readElement(child, origChildDat[cd]);\r\n            } else if (tagName in this.relevantStyles) {\r\n                let styleDef = window.getComputedStyle(origChildDat[cd]);\r\n\r\n                let styleString = '';\r\n                for (let st = 0; st < this.relevantStyles[tagName].length; st++) {\r\n                    styleString += this.relevantStyles[tagName][st] + ':' + styleDef.getPropertyValue(this.relevantStyles[tagName][st]) + '; ';\r\n                }\r\n\r\n                child.setAttribute('style', styleString);\r\n            }\r\n        }\r\n    }\r\n\r\n    private createPattern(): Element {\r\n        const defs = Util.createShape({ tag: 'defs' });\r\n        const pattern = Util.createShape({\r\n            tag: 'pattern',\r\n            id: 'raster',\r\n            patternUnits: 'userSpaceOnUse',\r\n            width: 40,\r\n            height: 40\r\n        });\r\n        const path = 'M0 4 L0 0 L4 0 M36 0 L40 0 L40 4 M40 36 L40 40 L36 40 M4 40 L0 40 L0 36';\r\n        const cross = Util.createShape({\r\n            tag: 'path',\r\n            d: path,\r\n            stroke: '#DDD',\r\n            'stroke-width': 1,\r\n            fill: 'none'\r\n        });\r\n\r\n        const rect = Util.createShape({\r\n            tag: 'rect',\r\n            x: 0,\r\n            y: 0,\r\n            width: 40,\r\n            height: 40,\r\n            fill: 'none'\r\n        });\r\n        pattern.appendChild(rect);\r\n        pattern.appendChild(cross);\r\n        defs.appendChild(pattern);\r\n        return defs;\r\n    }\r\n\r\n    private clearSvgRoot() {\r\n        const root = this.root;\r\n        this.$graphModel.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n        while (root.firstChild) {\r\n            root.removeChild(root.firstChild);\r\n        }\r\n\r\n        root.appendChild(this.createPattern());\r\n        let fillValue = 'none';\r\n        if (this.options.raster) {\r\n            fillValue = 'url(#raster)';\r\n        }\r\n        let background = Util.createShape({\r\n            tag: 'rect',\r\n            id: 'background',\r\n            width: 5000,\r\n            height: 5000,\r\n            x: 0,\r\n            y: 0,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: fillValue\r\n        });\r\n        root.appendChild(background);\r\n\r\n        // delete inline Edit, if exists\r\n        let inlineEdit = document.getElementById('inlineEdit');\r\n        if (inlineEdit && document.body.contains(inlineEdit)) {\r\n            document.body.removeChild(inlineEdit);\r\n        }\r\n    }\r\n\r\n    private getLayout(): Layout {\r\n        if (this.currentlayout) {\r\n            return this.currentlayout;\r\n        }\r\n\r\n        let layout = this.options.layout || '';\r\n        if (this.layoutFactory[layout]) {\r\n            this.currentlayout = new this.layoutFactory[layout]();\r\n        } else {\r\n            this.currentlayout = new layouts.DagreLayout();\r\n        }\r\n\r\n        return this.currentlayout;\r\n    }\r\n\r\n    private initFactories() {\r\n\r\n        let noder = nodes;\r\n        this.nodeFactory = {};\r\n        for (let id in noder) {\r\n            if (noder.hasOwnProperty(id) === true) {\r\n                this.nodeFactory[id] = noder[id];\r\n            }\r\n        }\r\n\r\n        let edger = edges;\r\n        this.edgeFactory = {};\r\n        for (let id in edger) {\r\n            if (edger.hasOwnProperty(id) === true) {\r\n                this.edgeFactory[id] = edger[id];\r\n            }\r\n        }\r\n\r\n        let layouter = layouts;\r\n        this.layoutFactory = {};\r\n        for (let id in layouter) {\r\n            if (layouter.hasOwnProperty(id) === true) {\r\n                this.layoutFactory[id] = layouter[id];\r\n            }\r\n        }\r\n    }\r\n\r\n    private initCanvas() {\r\n        if (this.options.canvas) {\r\n            this.$view = document.getElementById(this.options.canvas);\r\n        }\r\n        if (!this.$view) {\r\n            this.$view = document.createElement('div');\r\n            this.$view.setAttribute('class', 'diagram');\r\n            document.body.appendChild(this.$view);\r\n        }\r\n    }\r\n\r\n    private initFeatures(features: any) {\r\n\r\n        if (features) {\r\n            if (features.newedge) {\r\n                EventBus.subscribe(new NewEdge(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            this.importFile = new ImportFile(this);\r\n            if (features.import) {\r\n                EventBus.subscribe(this.importFile, 'dragover', 'dragleave', 'drop');\r\n            }\r\n            if (features.zoom) {\r\n                let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n                EventBus.subscribe(new Zoom(this), mousewheel);\r\n            }\r\n            if (features.drag) {\r\n                EventBus.subscribe(new Drag(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            if (features.select) {\r\n                EventBus.subscribe(new Select(this), 'click', 'drag');\r\n            }\r\n            if (features.palette) {\r\n                new Palette(this).show();\r\n            }\r\n            if (features.toolbar) {\r\n                new Toolbar(this).show();\r\n            }\r\n            if (features.properties) {\r\n                let propertyPanel = new PanelGroup(this);\r\n                // let dispatcher = new PropertiesDispatcher(this);\r\n                EventBus.subscribe(propertyPanel, 'dblclick', 'click', EventBus.RELOADPROPERTIES);\r\n                propertyPanel.show();\r\n            }\r\n            if (features.addnode) {\r\n                EventBus.subscribe(new AddNode(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n        }\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport {DiagramElement, Point} from './BaseElements';\r\nimport {Association} from './edges';\r\nimport {Node} from './nodes';\r\nimport {Control} from '../Control';\r\nimport {Util} from '../util';\r\nimport {EventBus} from '../EventBus';\r\n\r\nexport class GraphModel extends DiagramElement {\r\n    nodes: Node[] = [];\r\n    edges: Association[] = [];\r\n    package: string;\r\n    genPath: string;\r\n    $isLoading: boolean;\r\n\r\n    public load(data?: any) {\r\n\r\n        this.$isLoading = true;\r\n        data = data || {};\r\n        this.property = data.type || data.property || 'classdiagram';\r\n        this.id = 'RootElement';\r\n        if (data.nodes) {\r\n            for (let node of data.nodes) {\r\n                this.addNode(node);\r\n            }\r\n        }\r\n        if (data.edges) {\r\n            for (let edge of data.edges) {\r\n                this.addEdge(edge);\r\n            }\r\n        }\r\n\r\n        this.$isLoading = false;\r\n    }\r\n\r\n    public getNodeByPosition(x: number, y: number): Node {\r\n        for (let node of this.nodes) {\r\n            let posOfNode: Point = (<Node>node).getPos();\r\n            let sizeOfNode: Point = (<Node>node).getSize();\r\n\r\n            if ((posOfNode.x <= x && (posOfNode.x + sizeOfNode.x) >= x)\r\n                && (posOfNode.y <= y && (posOfNode.y + sizeOfNode.y) >= y)) {\r\n                return node;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.initCanvas();\r\n        return this;\r\n    }\r\n\r\n    public addElement(type: string): boolean {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n        if (element) {\r\n            Util.saveToLocalStorage(this);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues: Object): DiagramElement {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n\r\n        // position\r\n        if (optionalValues) {\r\n            if (optionalValues.hasOwnProperty('x') && optionalValues.hasOwnProperty('y')) {\r\n                let x = optionalValues['x'];\r\n                let y = optionalValues['y'];\r\n                element.withPos(x, y);\r\n            }\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return element;\r\n    }\r\n\r\n    public removeAllElements(): void {\r\n\r\n        let nodesLength = this.nodes.length;\r\n        for (let i = 0; i < nodesLength; i++) {\r\n            this.removeElement(this.nodes[0].id);\r\n        }\r\n\r\n        this.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n    }\r\n\r\n    public removeElement(id: string): boolean {\r\n\r\n        let element = this.getDiagramElementById(id);\r\n        if (!element) {\r\n            return false;\r\n        }\r\n\r\n        (<Graph>this.$owner).removeElement(element);\r\n\r\n        if (element instanceof Node) {\r\n\r\n            let idxOfNode = this.nodes.indexOf(element);\r\n            if (idxOfNode > -1) {\r\n                this.nodes.splice(idxOfNode, 1);\r\n            }\r\n\r\n            while (element.$edges.length > 0) {\r\n                this.removeElement(element.$edges[0].id);\r\n            }\r\n\r\n            element.$edges = [];\r\n        }\r\n        else if (element instanceof Association) {\r\n\r\n            let idxOfEdge = this.edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                this.edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from source\r\n            idxOfEdge = element.$sNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$sNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from target\r\n            idxOfEdge = element.$tNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$tNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return true;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        const size = 10;\r\n        const path = `M${-size} 0 L${+size} 0 M0 ${-size} L0 ${+size}`;\r\n\r\n        const attr = {\r\n            tag: 'path',\r\n            id: 'origin',\r\n            d: path,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: 'none'\r\n        };\r\n        let shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: 0 - size,\r\n            y: 0 - size / 1.5,\r\n            'text-anchor': 'end',\r\n            'font-family': 'Verdana',\r\n            'font-size': '9',\r\n            fill: '#999'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = '(0, 0)';\r\n\r\n        let group = this.createShape({tag: 'g'});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEUP, EventBus.ELEMENTMOUSELEAVE, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTMOUSEWHEEL, EventBus.ELEMENTCLICK, EventBus.ELEMENTDRAG];\r\n    }\r\n\r\n    public getNewId(prefix?: string): string {\r\n        let id = (prefix ? prefix.toLowerCase() + '-' : '') + Math.floor(Math.random() * 100000);\r\n        return id;\r\n    }\r\n\r\n    public getEdgeById(id: string): Association {\r\n        for (let edge of this.edges) {\r\n            if (edge.id === id) {\r\n                return edge;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    public getDiagramElementById(id: string): DiagramElement {\r\n\r\n        return this.getNodeById(id) || this.getEdgeById(id);\r\n    }\r\n\r\n    /**\r\n     * Add an edge with data in json file. Optional you can say, that the edge should have\r\n     * the points of source node and target node.\r\n     * @param edge information about edge in json\r\n     * @param withPosOfNodes optional. set points to line of source and target node\r\n     */\r\n    public addEdge(edge: any, withPosOfNodes?: boolean): Association {\r\n\r\n        // lookup in factoryedges and check if the edge type realy exists\r\n        if (edge && edge.type) {\r\n            const graph = (<Graph>this.$owner);\r\n            let typeExists = false;\r\n            for (let edgeType in graph.edgeFactory) {\r\n                if (edgeType === edge.type) {\r\n                    typeExists = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!typeExists) {\r\n                edge.type = 'Association';\r\n            }\r\n        }\r\n\r\n        let type = edge.type || 'Association';\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n\r\n        let newEdge = <Association>this.createElement(type, id, edge);\r\n        newEdge.type = type;\r\n\r\n        let source: Node;\r\n        let sourceAsString: string = edge.source.id || edge.source;\r\n        if (sourceAsString) {\r\n            source = this.getNodeById(sourceAsString);\r\n            if (!source) {\r\n                let nodeID = edge.source;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                source = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                source.init(this);\r\n            }\r\n        }\r\n\r\n        let target: Node;\r\n        let targetAsString: string = edge.target.id || edge.target;\r\n        if (targetAsString) {\r\n            target = this.getNodeById(targetAsString);\r\n            if (!target) {\r\n                let nodeID = edge.target;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                target = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                target.init(this);\r\n            }\r\n        }\r\n\r\n        newEdge.withItem(source, target);\r\n\r\n        if (withPosOfNodes) {\r\n            let srcX = source.getPos().x + (source.getSize().x / 2);\r\n            let srcY = source.getPos().y + (source.getSize().y / 2);\r\n\r\n            let targetX = target.getPos().x + (target.getSize().x / 2);\r\n            let targetY = target.getPos().y + (target.getSize().y / 2);\r\n\r\n            newEdge.addPoint(srcX, srcY);\r\n            newEdge.addPoint(targetX, targetY);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public createElement(type: string, id: string, data: Object): DiagramElement {\r\n        const graph = <Graph>this.$owner;\r\n        let element: DiagramElement;\r\n        if (graph.nodeFactory[type]) {\r\n            element = new graph.nodeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.nodes.push(<Node>element);\r\n        }\r\n        if (graph.edgeFactory[type]) {\r\n            element = new graph.edgeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.edges.push(<Association>element);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public getNodeById(id: string): Node {\r\n        for (let node of this.nodes) {\r\n            if (node.id === id) {\r\n                return node;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    private initCanvas() {\r\n        const graph = <Graph>this.$owner;\r\n        graph.canvasSize = {width: graph.$view.clientWidth, height: graph.$view.clientHeight};\r\n        graph.root = Util.createShape({\r\n            tag: 'svg',\r\n            id: 'root',\r\n            width: graph.canvasSize.width,\r\n            height: graph.canvasSize.height\r\n            // FIXME,viewBox: `${this.$graph.options.origin.x * -1} ${this.$graph.options.origin.y * -1} ${this.$graph.canvasSize.width} ${this.$graph.canvasSize.height}`\r\n        });\r\n        this.$view = graph.root;\r\n        graph.$view.appendChild(graph.root);\r\n\r\n        let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    private addNode(node: Node): Node {\r\n        let type = node['type'] || node.property || 'Node';\r\n        type = Util.toPascalCase(type);\r\n        let id = node['id'] || node['name'] || this.getNewId(type);\r\n\r\n        return <Node>this.createElement(type, id, node);\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction } from './index';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\n\r\nexport abstract class Aggregate extends Association {\r\n\r\n    protected $diamond: Element;\r\n\r\n    public getSVG(): Element {\r\n\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled diamond\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n        };\r\n\r\n        this.$diamond = this.createShape(attr);\r\n\r\n        group.appendChild(this.$diamond);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint: Point = this.$points[0];\r\n        let direction: Direction = Direction.Down;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if (this.$sNode.id === startNode.id || this.$points.length == 2) {\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$diamond.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint: Point, direction: Direction): string {\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                path = `M${startX} ${startY} L${startX + 6} ${startY + 10} L${startX} ${startY + 20} L${startX - 6} ${startY + 10} Z`;\r\n                startPoint.y = startPoint.y+20;\r\n                break;\r\n            case Direction.Right:\r\n                path = `M${startX} ${startY} L${startX - 10} ${startY + 6} L${startX - 20} ${startY} L${startX - 10} ${startY - 6} Z`;\r\n                startPoint.x = startPoint.x-20;\r\n                break;\r\n            case Direction.Left:\r\n                path = `M${startX} ${startY} L${startX + 10} ${startY - 6} L${startX + 20} ${startY} L${startX + 10} ${startY + 6} Z`;\r\n                startPoint.x = startPoint.x+20;\r\n                break;\r\n            case Direction.Down:\r\n                path = `M${startX} ${startY} L${startX - 6} ${startY - 10} L${startX} ${startY - 20} L${startX + 6} ${startY - 10} Z`;\r\n                startPoint.y = startPoint.y-20;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Aggregation extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'white');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { DiagramElement, Line, Point } from '../BaseElements';\r\nimport { Node } from '../nodes';\r\nimport { InfoText } from '../nodes/InfoText';\r\nimport { Util } from '../../util';\r\nimport { EventBus } from '../../EventBus';\r\nimport * as edges from '../edges';\r\nimport { Graph } from '../Graph';\r\n\r\nexport const enum Direction {\r\n    Up, Down, Left, Right\r\n}\r\n\r\nexport class Association extends DiagramElement {\r\n    public source: string;\r\n    public target: string;\r\n    public type: string;\r\n    public $sNode: Node;\r\n    public $tNode: Node;\r\n    public lineStyle: string;\r\n    public $points: Point[] = [];\r\n    public $pathSvg: Element;\r\n    public $pathWideSvg: Element;\r\n    public info: InfoText;\r\n    public sourceInfo: InfoText;\r\n    public targetInfo: InfoText;\r\n    $m: number;\r\n    $n: number;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super();\r\n\r\n        this.withData(data);\r\n    }\r\n\r\n    public withData(data: JSON | string | Object | any): Association {\r\n\r\n        if (!data) {\r\n            return this;\r\n        }\r\n        let srcInfo;\r\n        let trgInfo;\r\n\r\n        if (data.source && typeof data.source !== 'string') {\r\n            srcInfo = data.source;\r\n        }\r\n        else if (data.sourceInfo && typeof data.sourceInfo !== 'string') {\r\n            srcInfo = data.sourceInfo;\r\n        }\r\n\r\n        if (srcInfo) {\r\n            this.sourceInfo = new InfoText(srcInfo);\r\n            this.sourceInfo.$owner = this;\r\n        }\r\n\r\n        if (data.target && typeof data.target !== 'string') {\r\n            trgInfo = data.target;\r\n        }\r\n        else if (data.targetInfo && typeof data.targetInfo !== 'string') {\r\n            trgInfo = data.targetInfo;\r\n        }\r\n\r\n        if (trgInfo) {\r\n            this.targetInfo = new InfoText(trgInfo);\r\n            this.targetInfo.$owner = this;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    public updateSrcCardinality(cardinality: string): void {\r\n        this.sourceInfo = this.updateCardinality(this.$sNode, this.sourceInfo, cardinality);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetCardinality(cardinality: string): void {\r\n        this.targetInfo = this.updateCardinality(this.$tNode, this.targetInfo, cardinality);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateSrcProperty(property: string): void {\r\n        this.sourceInfo = this.updateProperty(this.$sNode, this.sourceInfo, property);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetProperty(property: string): void {\r\n        this.targetInfo = this.updateProperty(this.$tNode, this.targetInfo, property);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public withItem(source: Node, target: Node): Association {\r\n        source.$edges.push(this);\r\n        target.$edges.push(this);\r\n        this.$sNode = source;\r\n        this.$tNode = target;\r\n        this.source = source.id;\r\n        this.target = target.id;\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let group = Util.createShape({ tag: 'g', id: this.id, class: 'SVGEdge' });\r\n\r\n        let path: string = this.getPath();\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'none'\r\n        };\r\n        let pathLine = this.createShape(attr);\r\n\r\n        //attr['style'] = 'stroke-width:20;opacity:0;width:20;height:20';\r\n        let extendedPathLine = Util.createShape(attr);\r\n\r\n        group.appendChild(extendedPathLine);\r\n        group.appendChild(pathLine);\r\n\r\n        if (this.sourceInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.sourceInfo.getSVG());\r\n        }\r\n        if (this.targetInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.targetInfo.getSVG());\r\n        }\r\n\r\n        this.$pathWideSvg = extendedPathLine;\r\n        this.$pathSvg = pathLine;\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.EDITOR, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    public convertEdge(type: string, newId: string, redraw?: boolean): Association {\r\n        if (!edges[type]) {\r\n            return this;\r\n        }\r\n\r\n        let newEdge: Association = new edges[type]();\r\n        newEdge.withItem(this.$sNode, this.$tNode);\r\n        newEdge.id = newId;\r\n        newEdge.type = type;\r\n        newEdge.lineStyle = this.lineStyle;\r\n        newEdge.$owner = this.$owner;\r\n\r\n        if (this.sourceInfo) {\r\n            newEdge.sourceInfo = new InfoText({ property: this.sourceInfo.property, cardinality: this.sourceInfo.cardinality });\r\n            newEdge.sourceInfo.$owner = newEdge;\r\n        }\r\n\r\n        if (this.targetInfo) {\r\n            newEdge.targetInfo = new InfoText({ property: this.targetInfo.property, cardinality: this.targetInfo.cardinality });\r\n            newEdge.targetInfo.$owner = newEdge;\r\n        }\r\n\r\n        this.$points.forEach(point => {\r\n            newEdge.addPoint(point.x, point.y);\r\n        });\r\n\r\n        let graph = <Graph>this.getRoot();\r\n        if (!graph) {\r\n            return this;\r\n        }\r\n\r\n        // update model. insert the edge exact on the same index, like the old edge\r\n        let idx = graph.$graphModel.edges.indexOf(this);\r\n        graph.$graphModel.removeElement(this.id);\r\n        if (idx > -1) {\r\n            graph.$graphModel.edges.splice(idx, 0, newEdge);\r\n        }\r\n        else {\r\n            graph.$graphModel.edges.push(newEdge);\r\n        }\r\n\r\n        if (!redraw) {\r\n            return newEdge;\r\n        }\r\n\r\n        let svgRoot: Element;\r\n        if (graph) {\r\n            svgRoot = graph.root;\r\n        }\r\n        else {\r\n            svgRoot = document.getElementById('root');\r\n        }\r\n        let newEdgeSvg = newEdge.getSVG();\r\n\r\n        // update graph\r\n        graph.removeElement(this);\r\n        svgRoot.appendChild(newEdgeSvg);\r\n\r\n        // redraw the edge from both sides to get the correct display\r\n        // if the type is edge, so the path can be redraw.\r\n        // if not, so the inherited class redraw the path with his own logic\r\n\r\n        let dontDrawPath: boolean = (type !== 'Edge');\r\n        newEdge.redraw(newEdge.$sNode, dontDrawPath);\r\n        newEdge.redraw(newEdge.$tNode, dontDrawPath);\r\n\r\n        EventBus.register(newEdge, newEdgeSvg);\r\n\r\n        this.sourceInfo = undefined;\r\n        this.targetInfo = undefined;\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n        // redraw the first point\r\n        // check which point is the near to startnode\r\n        let endPoint: Point;\r\n        let recalcPoint: Point;\r\n        let endPointIdx: number;\r\n\r\n        if (this.$sNode.id === startNode.id) {\r\n            recalcPoint = this.$points[0];\r\n            endPointIdx = 1;\r\n        } else if (this.$tNode.id === startNode.id) {\r\n            recalcPoint = this.$points[this.$points.length - 1];\r\n            endPointIdx = this.$points.length - 2;\r\n        }\r\n\r\n        endPoint = this.$points[endPointIdx];\r\n\r\n        // calculate and set new position of point to redraw\r\n        this.calcIntersection(startNode, recalcPoint, endPoint);\r\n\r\n        // remove the 2nd point next to startnode, if the node was dragged upper the point\r\n        if (this.$points.length > 2 && this.$tNode.id === startNode.id && endPoint.y > (startNode.getPos().y + (startNode.getSize().y / 2))) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$tNode.id === startNode.id && this.$points.length === 2) {\r\n            this.calcIntersection(this.$sNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (this.$points.length > 2 && this.$sNode.id === startNode.id && (startNode.getPos().y + (startNode.getSize().y / 2) > endPoint.y)) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$sNode.id === startNode.id && this.$points.length === 2) {\r\n\r\n            this.calcIntersection(this.$tNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (!dontDrawPoints) {\r\n            this.redrawPointsAndInfo();\r\n        }\r\n    }\r\n\r\n    public getPath(): string {\r\n\r\n        if (this.$points.length === 0) {\r\n            return '';\r\n        }\r\n\r\n        let path: string = 'M';\r\n        for (let i = 0; i < this.$points.length; i++) {\r\n            let point: Point = this.$points[i];\r\n            if (i > 0) {\r\n                path += 'L';\r\n            }\r\n            path += Math.floor(point.x) + ' ' + Math.floor(point.y) + ' ';\r\n        }\r\n\r\n        return path;\r\n    }\r\n    public calcInfoPosNew(infoTxt: InfoText, node: Node): Point {\r\n\r\n        if (!infoTxt || !node) {\r\n            return null;\r\n        }\r\n\r\n        // 1. step: get direction\r\n        let startPoint: Point;\r\n        let nextToStartPoint: Point;\r\n        if (this.$sNode.id === node.id) {\r\n            startPoint = this.$points[0];\r\n            nextToStartPoint = this.$points[1];\r\n        }\r\n        else if (this.$tNode.id === node.id) {\r\n            startPoint = this.$points[this.$points.length - 1];\r\n            nextToStartPoint = this.$points[this.$points.length - 2];\r\n        }\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(node, startPoint);\r\n\r\n        let x: number;\r\n        let y: number;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                break;\r\n            case Direction.Right:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x - (infoTxt.getSize().x) - 5;\r\n                break;\r\n            case Direction.Left:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x + 5;\r\n                break;\r\n            case Direction.Down:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        // assign calculated position to infotext\r\n        return new Point(x, y);\r\n    }\r\n\r\n    public clearPoints(): any {\r\n        this.$points = [];\r\n        this.$points = [];\r\n    }\r\n\r\n    public addPoint(x: number, y: number): Point[] {\r\n        this.$points.push(new Point(x, y));\r\n\r\n        return this.$points;\r\n    }\r\n\r\n    protected redrawPointsAndInfo(): void {\r\n        // redraw the edge with the new position\r\n        let path: string = this.getPath();\r\n        this.$pathSvg.setAttributeNS(null, 'd', path);\r\n        this.$pathWideSvg.setAttributeNS(null, 'd', path);\r\n\r\n        this.redrawSourceInfo();\r\n        this.redrawTargetInfo();\r\n    }\r\n\r\n    protected redrawSourceInfo() {\r\n        if (this.sourceInfo) {\r\n            let newPosOfSrc = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.redrawFromEdge(newPosOfSrc);\r\n        }\r\n    }\r\n\r\n    protected redrawTargetInfo() {\r\n        if (this.targetInfo) {\r\n            let newPosOfTarget = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.redrawFromEdge(newPosOfTarget);\r\n        }\r\n    }\r\n\r\n    protected getDirectionOfPointToNode(node: Node, pointNearNode: Point): Direction {\r\n        /*\r\n            Example to calculate the direction of nearest point to Node\r\n\r\n            node\r\n         x1_ _ _ _\r\n          |       |\r\n          |       |. pointNearNode\r\n          |       |\r\n          |_ _ _ x2\r\n\r\n          the calculation would return Direction.Left\r\n        */\r\n\r\n        let x1: Point = node.getPos();\r\n        let x2: Point = new Point((x1.x + node.getSize().x), (x1.y + node.getSize().y));\r\n        let direction: Direction = Direction.Down;\r\n\r\n        if (x1.y >= pointNearNode.y) {\r\n            direction = Direction.Down;\r\n        }\r\n        if (x2.y <= pointNearNode.y) {\r\n            direction = Direction.Up;\r\n        }\r\n        if (x1.x >= pointNearNode.x) {\r\n            direction = Direction.Right;\r\n        }\r\n        if (x2.x <= pointNearNode.x) {\r\n            direction = Direction.Left;\r\n        }\r\n\r\n        return direction;\r\n    }\r\n\r\n    private updateCardinality(node: Node, infoText: InfoText, cardinality: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'cardinality': cardinality });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.cardinality = cardinality;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateCardinality(cardinality);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private updateProperty(node: Node, infoText: InfoText, property: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'property': property });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.property = property;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateProperty(property);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private calcIntersection(startNode: Node, recalcPoint: Point, endPoint: Point): Point {\r\n\r\n        // https://www.mathelounge.de/21534/schnittpunkt-einer-linie-mit-den-randern-eines-rechtecks\r\n        let h = startNode.getSize().y;\r\n        let w = startNode.getSize().x;\r\n\r\n        let x1: number = startNode.getPos().x + (w / 2);\r\n        let y1: number = startNode.getPos().y + (h / 2);\r\n\r\n        let x2: number = endPoint.x;\r\n        let y2: number = endPoint.y;\r\n\r\n        let newX: number = recalcPoint.x;\r\n        let newY: number = recalcPoint.y;\r\n\r\n        if (x2 > x1) {\r\n            newX = x1 + (w / 2);\r\n        }\r\n        else if (x2 < x1) {\r\n            newX = x1 - (w / 2);\r\n        }\r\n        else {\r\n            newX = x1;\r\n        }\r\n\r\n        if ((x2 - x1) !== 0) {\r\n            newY = ((y2 - y1) / (x2 - x1) * (newX - x1)) + y1;\r\n        }\r\n        else {\r\n            if (y1 > y2) {\r\n                newY = startNode.getPos().y;\r\n            }\r\n            else {\r\n                newY = startNode.getPos().y + h;\r\n            }\r\n        }\r\n\r\n        // if the statement is not true, so the intersection is at the horizontal line\r\n        if (!((y1 - (h / 2) <= newY) && newY <= y1 + (h / 2))) {\r\n\r\n            if (y2 > y1) {\r\n                newY = y1 + (h / 2);\r\n            }\r\n            else {\r\n                newY = y1 - (h / 2);\r\n            }\r\n\r\n            if ((x2 - x1) !== 0) {\r\n                let tmp = ((y2 - y1) / (x2 - x1));\r\n                newX = (newY + (tmp * x1) - y1) / tmp;\r\n            }\r\n            else {\r\n                newX = x1;\r\n            }\r\n        }\r\n\r\n        recalcPoint.x = Math.ceil(newX);\r\n        recalcPoint.y = Math.ceil(newY);\r\n\r\n        return null;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Composition extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'black');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { Association } from './Association';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\nimport { Direction } from '../index';\r\n\r\nexport class Generalisation extends Association {\r\n\r\n    public $TARGET_ELEMENT_HEIGHT : number = 12;\r\n    protected $targetElement: Element;\r\n\r\n    public getSVG(): Element {\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction : Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled arrow\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'white'\r\n          };\r\n\r\n        this.$targetElement = this.createShape(attr);\r\n\r\n        group.appendChild(this.$targetElement);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean) : void {\r\n\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint : Point = this.$points[0];\r\n        let direction : Direction = Direction.Up;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if(this.$sNode.id === startNode.id || this.$points.length == 2){\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$targetElement.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint : Point, direction : Direction) : string{\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch(direction){\r\n            case Direction.Up:\r\n            path = `M${startX} ${startY+3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y+12;\r\n            break;\r\n            case Direction.Right:\r\n            path = `M${startX-3} ${startY} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x-12;\r\n            break;\r\n            case Direction.Left:\r\n            path = `M${startX+3} ${startY} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x+12;\r\n            break;\r\n            case Direction.Down:\r\n            path = `M${startX} ${startY-3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y-12;\r\n            break;\r\n            default :\r\n            break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n\r\n}\r\n","import { Generalisation } from './Generalisation';\r\n\r\nexport class Implements extends Generalisation {\r\n\r\n    public getSVG(): Element {\r\n        let group = super.getSVG();\r\n\r\n        this.$pathSvg.setAttributeNS(null, 'stroke-dasharray', '3, 3');\r\n\r\n        return group;\r\n    }\r\n}\r\n","export * from './Association';\r\nexport * from './Aggregate';\r\nexport * from './Aggregation';\r\nexport * from './Composition';\r\nexport * from './Generalisation';\r\nexport * from './Implements';","export * from './edges';\r\nexport * from './nodes';\r\nexport * from './BaseElements';\r\nexport * from './Graph';\r\nexport * from './Model';\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Attribute extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 28.06.2017.\r\n */\r\nimport {Control} from \"../../Control\";\r\n\r\nexport class AutoComplete extends Control {\r\n    private $inputField:HTMLInputElement;\r\n    private $dataList:HTMLDataListElement;\r\n    private $selected:HTMLSelectElement;\r\n    private $items:HTMLDivElement;\r\n    private isMultiple:boolean;\r\n\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        let div:HTMLDivElement = document.createElement('div');\r\n        this.$view = div;\r\n        this.$inputField = document.createElement('input');\r\n        this.$dataList = document.createElement(\"datalist\");\r\n        this.$dataList.id = \"data_\"+this.id;\r\n        this.$inputField.setAttribute(\"list\", \"data_\"+this.id);\r\n        if(data[\"value\"]) {\r\n            let values = data[\"value\"];\r\n            this.isMultiple = data[\"multiple\"] != null;\r\n            let option:HTMLOptionElement;\r\n            if(this.isMultiple) {\r\n                this.$selected = document.createElement(\"select\");\r\n                this.$selected.className = \"hide\";\r\n                this.$selected.multiple = true;\r\n\r\n                this.$selected.id = this.id;\r\n                this.$items = document.createElement(\"div\");\r\n                this.$items.className = \"selectedList\";\r\n                div.appendChild(this.$items);\r\n                this.$inputField.className = \"selectedInput\";\r\n                div.appendChild(this.$selected);\r\n                this.$view[\"style\"].setProperty(\"float\", \"left\");\r\n                let that = this;\r\n                this.$inputField.oninput = function(){that.onChange();}\r\n            } else {\r\n                this.$inputField.id = this.id;\r\n            }\r\n            for (let attr in values) {\r\n                if (!values.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                option = document.createElement(\"option\");\r\n                option.value = values[attr];\r\n                this.$dataList.appendChild(option);\r\n                if(this.isMultiple) {\r\n                    option = document.createElement(\"option\");\r\n                    option.value = values[attr];\r\n                    option.innerHTML = values[attr];\r\n                    this.$selected.appendChild(option);\r\n                }\r\n        }\r\n\r\n            div.appendChild(this.$inputField);\r\n            div.appendChild(this.$dataList);\r\n        }\r\n\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n            if(this.isMultiple) {\r\n                div.appendChild(this.$selected);\r\n            }\r\n        }\r\n\r\n        parent.appendChild(this);\r\n    }\r\n\r\n    public onChange() : void {\r\n        let textValue:string = this.$inputField.value;\r\n        if(textValue.length<1) {\r\n            return;\r\n        }\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == textValue) {\r\n                if(item.selected == false) {\r\n                    item.selected = true;\r\n                    item.defaultSelected = true;\r\n                    let test = document.createElement(\"li\");\r\n                    let that = this;\r\n                    test.onclick = function() {that.onDelete(item.value, test);};\r\n                    test.className = \"selectedItem\";\r\n                    test.innerHTML = item.value;\r\n                    this.$items.appendChild(test);\r\n                    this.$inputField.value = \"\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n    public onDelete(value:string, selectedItem:HTMLLIElement) : void {\r\n        this.$items.removeChild(selectedItem);\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == value ) {\r\n                if(item.selected) {\r\n                    item.selected = false;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","import {Control} from '../../Control';\r\n\r\nexport class BR extends Control {\r\n    public load(json: JSON): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('br');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            this.$view.setAttribute(attr, data[attr]);\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\nexport class Button extends Control {\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        this.$view = document.createElement('button');\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\nimport { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\nimport { Size } from '../index';\r\nimport ClazzProperty from './ClazzProperty';\r\nimport {SymbolLibary} from './Symbol';\r\nimport {StereoType} from './StereoType';\r\nimport {GraphListener} from '../../handlers/GraphListener';\r\n\r\nexport class Class extends Node {\r\n    public attributes: Attribute[] = [];\r\n    public methods: Method[] = [];\r\n    public modifier: string;\r\n    public stereoType: string;\r\n\r\n    protected $attrHeight = 25;\r\n    protected $attrFontSize = 12;\r\n    protected $labelView: Element;\r\n\r\n    constructor(json: JSON | string | Object | any) {\r\n        super(json);\r\n        return this;\r\n    }\r\n\r\n    public load(json?: any) {\r\n        if (!json) {\r\n            json = {};\r\n        }\r\n        let y = this.$labelHeight;\r\n        let labelObj = json.name || json.id || ('New ' + this.property);\r\n\r\n        let width: number = 150;\r\n        width = Math.max(width, Util.sizeOf(labelObj).width + 60);\r\n\r\n        if (json['attributes']) {\r\n            for (let attr of json['attributes']) {\r\n\r\n                let attrObj = new Attribute(attr);\r\n                attrObj.$owner = this;\r\n                this.attributes.push(attrObj);\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(attrObj.toString()).width);\r\n                let listener = new GraphListener(attrObj);\r\n                attrObj.$data.addListener(listener);\r\n            }\r\n        }\r\n        if (json['stereotype']) {\r\n            this.stereoType = json['stereotype'];\r\n        }\r\n        if (json['methods']) {\r\n            for (let method of json['methods']) {\r\n\r\n                let methodObj = new Method(method);\r\n                methodObj.$owner = this;\r\n                this.methods.push(methodObj);\r\n\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(methodObj.toString()).width);\r\n            }\r\n            y += this.$attrHeight;\r\n        }\r\n        this.withSize(width, y);\r\n    }\r\n\r\n    public getAttributes(): Attribute[] {\r\n        return this.attributes;\r\n    }\r\n\r\n    public getMethods(): Method[] {\r\n        return this.methods;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        let icon = SymbolLibary.draw({type: 'Class', property: 'HTML', width: '50', height: '50', transform: 'translate(-26,-21)'});\r\n        return icon;\r\n        // let group = this.createShape(\r\n//    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n//    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos: Point = this.getPos();\r\n        const size: Point = this.getSize();\r\n\r\n        let group = this.createShape({ tag: 'g', id: this.id, class: 'SVGClazz', transform: 'translate(0 0)' });\r\n\r\n        if (this.stereoType) {\r\n            let type = new StereoType(this.stereoType, pos.x, pos.y);\r\n            group.appendChild(type.getSVG());\r\n        }\r\n\r\n        // Full Shape\r\n        let options = null;\r\n        let style;\r\n        let clazzName;\r\n        if (this.$owner['options']) {\r\n            let options = this.$owner['options'];\r\n            if (options) {\r\n                style = options.style;\r\n            }\r\n        }\r\n        // = = = Background = = =\r\n        if (style === 'modern') {\r\n            clazzName = 'ClazzHeader';\r\n        }\r\n        clazzName = 'ClazzHeader';\r\n        const nodeShape = this.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            height: size.y,\r\n            width: size.x,\r\n            rx: 5,\r\n            ry: 5,\r\n            fill: 'none',\r\n            stroke: 'black',\r\n            'stroke-width': 1\r\n        });\r\n        if (clazzName) {\r\n            nodeShape.setAttribute('className', clazzName);\r\n            let styleHeader = Util.getStyle('ClazzHeader');\r\n            // headerHeight = styleHeader.getNumber('height');\r\n        }\r\n\r\n        // = = = LABEL = = =\r\n        let label = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y + this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': this.$labelFontSize,\r\n            fill: 'black'\r\n        });\r\n        label.textContent = this.id;\r\n        this.$labelView = label;\r\n\r\n        group.appendChild(nodeShape);\r\n        group.appendChild(label);\r\n\r\n        // = = = ATTRIBUTES = = =\r\n        if (this.attributes.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorLabelAttr = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight,\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight,\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorLabelAttr);\r\n\r\n            let groupOfAttributes = this.createShape({ tag: 'g', id: (this.id + 'Attributes') });\r\n            groupOfAttributes.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzAttribute');\r\n            group.appendChild(groupOfAttributes);\r\n\r\n            let y = pos.y + this.$labelHeight + this.$attrHeight / 2;\r\n            for (let attr of this.attributes) {\r\n\r\n                let attrSvg = attr.getSVG();\r\n                attr.$owner = this;\r\n\r\n                attrSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                attrSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfAttributes.appendChild(attrSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        // = = = METHODS = = =\r\n        let height = this.attributes.length * this.$attrHeight;\r\n        let y = pos.y + this.$labelHeight + height + this.$attrHeight / 2;\r\n        if (this.methods.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorAttrMethods = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorAttrMethods);\r\n\r\n            let groupOfMethods = this.createShape({ tag: 'g', id: (this.id + 'Methods') });\r\n            groupOfMethods.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzMethod');\r\n            group.appendChild(groupOfMethods);\r\n\r\n            y += this.$attrHeight / 2;\r\n            for (let method of this.methods) {\r\n\r\n                let methodSvg = method.getSVG();\r\n                method.$owner = this;\r\n\r\n                methodSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                methodSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfMethods.appendChild(methodSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        this.$view = group;\r\n        return group;\r\n    }\r\n\r\n    public copy(): Class {\r\n        let copy: Class;\r\n        copy = <Class>super.copy();\r\n\r\n        // copy label\r\n        copy.id = this.id + 'Copy';\r\n\r\n        // copy attributes\r\n        this.attributes.forEach(attr => {\r\n            copy.attributes.push(new Attribute(attr.toString()));\r\n        });\r\n        // copy methods\r\n        this.methods.forEach(method => {\r\n            copy.methods.push(new Method(method.toString()));\r\n        });\r\n        copy.reCalcSize();\r\n\r\n        return copy;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTCLICK,\r\n                EventBus.ELEMENTDRAG, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES, EventBus.RELOADPROPERTIES];\r\n    }\r\n\r\n    public addProperty(value: string, type: string): any {\r\n        if (!this[type] || !value || value.length === 0) {\r\n            return;\r\n        }\r\n\r\n        let extractedValue;\r\n        if (type === 'attributes') {\r\n            extractedValue = new Attribute(value);\r\n        }\r\n        else if (type === 'methods') {\r\n            extractedValue = new Method(value);\r\n        }\r\n\r\n        for (let valueOfType of this[type]) {\r\n            if (valueOfType.toString() === extractedValue.toString()) {\r\n                alert(extractedValue.toString() + ' already exists.');\r\n                extractedValue = undefined;\r\n                return;\r\n            }\r\n        }\r\n\r\n        this[type].push(extractedValue);\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        return extractedValue;\r\n    }\r\n\r\n    public addAttribute(value: string): Attribute {\r\n        return this.addProperty(value, 'attributes');\r\n    }\r\n\r\n    public addAttributeObj(attr: Attribute): Attribute[] {\r\n        this.attributes.push(attr);\r\n        return this.getAttributes();\r\n    }\r\n\r\n    public addMethodObj(method: Method): Method[] {\r\n        this.methods.push(method);\r\n        return this.getMethods();\r\n    }\r\n\r\n    public addMethod(value: string): Method {\r\n        return this.addProperty(value, 'methods');\r\n    }\r\n\r\n    public removeAttribute(attr: Attribute): void {\r\n        let idx = this.attributes.indexOf(attr);\r\n        this.attributes.splice(idx, 1);\r\n    }\r\n\r\n    public removeMethod(method: Method): void {\r\n        let idx = this.methods.indexOf(method);\r\n        this.methods.splice(idx, 1);\r\n    }\r\n\r\n    public removeProperty(property: ClazzProperty): void {\r\n\r\n        if (property instanceof Attribute) {\r\n            this.removeAttribute(<Attribute>property);\r\n        }\r\n\r\n        if (property instanceof Method) {\r\n            this.removeMethod(<Method>property);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n        let hasSizeChanged: [boolean, Size] = this.hasSizeChanged();\r\n\r\n        if (drawOnlyIfSizeChanged) {\r\n            if (!hasSizeChanged[0]) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n\r\n        // redraw only this clazz\r\n        this.$owner.$view.removeChild(this.$view);\r\n        let newSvg = this.getSVG();\r\n        this.$owner.$view.appendChild(newSvg);\r\n        this.$view = newSvg;\r\n        EventBus.register(this, newSvg);\r\n\r\n        this.redrawEdges();\r\n    }\r\n\r\n    public hasSizeChanged(): [boolean, Size] {\r\n        let oldSize = { width: this.getSize().x, height: this.getSize().y };\r\n        let newSize = this.reCalcSize();\r\n\r\n        // size doenst changed, so nothing to redraw\r\n        if (oldSize.width === newSize.width && oldSize.height === newSize.height) {\r\n            return [false, newSize];\r\n        }\r\n\r\n        return [true, newSize];\r\n    }\r\n\r\n    public updateLabel(newLabel: string): void {\r\n        if (this.$labelView) {\r\n            this.$labelView.textContent = newLabel;\r\n        }\r\n\r\n        // update label in all edges\r\n        this.$edges.forEach(edge => {\r\n            if (this.id === edge.$sNode.id) {\r\n                edge.source = newLabel;\r\n            }\r\n            else if (this.id === edge.$tNode.id) {\r\n                edge.target = newLabel;\r\n            }\r\n        });\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        this.reDraw(true);\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.modifier = modifier;\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reCalcSize(): Size {\r\n        // label\r\n        let newWidth = 150;\r\n        newWidth = Math.max(newWidth, Util.sizeOf(this.id).width + 30);\r\n\r\n        // attributes\r\n        this.attributes.forEach(attrEl => {\r\n\r\n            let widthOfAttr;\r\n            if (attrEl.$view) {\r\n                widthOfAttr = attrEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfAttr = Util.sizeOf(attrEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfAttr + 15);\r\n        });\r\n\r\n        // methods\r\n        this.methods.forEach(methodEl => {\r\n            let widthOfMethod;\r\n            if (methodEl.$view) {\r\n                widthOfMethod = methodEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfMethod = Util.sizeOf(methodEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfMethod + 15);\r\n        });\r\n\r\n        // TODO: height has to be calculated by font-size\r\n        this.getSize().x = newWidth;\r\n        this.getSize().y = this.$labelHeight + ((this.attributes.length + this.methods.length) * this.$attrHeight)\r\n            + this.$attrHeight;\r\n\r\n        let newSize = { width: newWidth, height: this.getSize().y };\r\n\r\n        return newSize;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    private getModernStyle(): Element {\r\n        let width, height, id, size, z, item, rect, g, board, styleHeader, headerHeight, x, y;\r\n        board = this.getRoot()['board'];\r\n        styleHeader = Util.getStyle('ClazzHeader');\r\n        headerHeight = styleHeader.getNumber('height');\r\n        width = 0;\r\n        height = 10 + headerHeight;\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].getType().toLowerCase() === 'objectdiagram') {\r\n            id = this.id.charAt(0).toLowerCase() + this.id.slice(1);\r\n            item = 'Object';\r\n        } else {\r\n            id = this.id;\r\n            item = 'Class';\r\n            if (this['counter']) {\r\n                id += ' (' + this['counter'] + ')';\r\n            }\r\n        }\r\n        g = Util.create({tag: 'g', model: this});\r\n        size = Util.sizeOf(id, this);\r\n        width = Math.max(width, size.width);\r\n        if (this.attributes && this.attributes.length > 0) {\r\n            height = height + this.attributes.length * 25;\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.attributes[z], this).width);\r\n            }\r\n        } else {\r\n            height += 20;\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            height = height + this.methods.length * 25;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.methods[z], this).width);\r\n            }\r\n        }\r\n        width += 20;\r\n\r\n        let pos = this.getPos();\r\n        y = pos.y;\r\n        x = pos.x;\r\n\r\n        rect = {\r\n            tag: 'rect',\r\n            'width': width,\r\n            'height': height,\r\n            'x': x,\r\n            'y': y,\r\n            'class': item + ' draggable',\r\n            'fill': 'none'\r\n        };\r\n        g.appendChild(Util.create(rect));\r\n        g.appendChild(Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            'x': x,\r\n            'y': y,\r\n            height: headerHeight,\r\n            'width': width,\r\n            'class': 'ClazzHeader'\r\n        }));\r\n\r\n        item = Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'class': 'InfoText',\r\n            'text-anchor': 'right',\r\n            'x': x + width / 2 - size.width / 2,\r\n            'y': y + (headerHeight / 2) + (size.height / 2),\r\n            'width': size.width\r\n        });\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].type.toLowerCase() === 'objectdiagram') {\r\n            item.setAttribute('text-decoration', 'underline');\r\n        }\r\n        item.appendChild(document.createTextNode(id));\r\n\r\n        g.appendChild(item);\r\n        g.appendChild(Util.create({\r\n            tag: 'line',\r\n            x1: x,\r\n            y1: y + headerHeight,\r\n            x2: x + width,\r\n            y2: y + headerHeight,\r\n            stroke: '#000'\r\n        }));\r\n        y += headerHeight + 20;\r\n\r\n        if (this.attributes) {\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': (x + 10),\r\n                    'y': y,\r\n                    value: this.attributes[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n            if (this.attributes.length > 0) {\r\n                y -= 10;\r\n            }\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            g.appendChild(Util.create({tag: 'line', x1: x, y1: y, x2: x + width, y2: y, stroke: '#000'}));\r\n            y += 20;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': x + 10,\r\n                    'y': y,\r\n                    value: this.methods[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n        }\r\n        return g;\r\n    }\r\n}\r\n","import {Util} from '../../util';\r\nimport {DiagramElement} from '../BaseElements';\r\nimport Data from '../../Data';\r\n\r\nexport default class ClazzProperty extends DiagramElement {\r\n\r\n    // Public (+)\r\n    // Private (-)\r\n    // Protected (#)\r\n    // Package (~)\r\n\r\n    public $data = new Data();\r\n//    public modifier: string = '+';\r\n//    public name: string;\r\n//    public type: string;\r\n//    public value: string;\r\n\r\n    constructor(data: any | JSON) {\r\n        super();\r\n        this.$data.setValue('modifier', '+');\r\n        this.$data.setValue('name', null);\r\n        this.$data.setValue('type', null);\r\n        this.$data.setValue('value', null);\r\n        this.extractData(data);\r\n    }\r\n\r\n    public update(data: any | JSON): void {\r\n        this.extractData(data);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.$data.setValue('modifier', modifier);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateType(type: string): void {\r\n        this.$data.setValue('type', type);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateValue(value: string): void {\r\n        this.$data.setValue('value', value);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateName(name: string): void {\r\n        this.$data.setValue('name', name);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public getName(): string {\r\n        return this.$data.getValue('name');\r\n    }\r\n\r\n    public getModifier(): string {\r\n        return this.$data.getValue('modifier');\r\n    }\r\n\r\n    public getType(): string {\r\n        return this.$data.getValue('type');\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let attrText = {\r\n            tag: 'text',\r\n            'text-anchor': 'start',\r\n            'alignment-baseline': 'middle',\r\n        };\r\n\r\n        let attrSvg = Util.createShape(attrText);\r\n        attrSvg.textContent = this.toString();\r\n\r\n        this.$view = attrSvg;\r\n\r\n        return attrSvg;\r\n    }\r\n\r\n    public toString(): string {\r\n        let value = this.$data.getValue('value');\r\n        let result = this.$data.getValue('modifier') + ' ';\r\n        result += this.$data.getValue('name') + ' : ';\r\n        result += this.$data.getValue('type');\r\n        if (value && value.length > 0) {\r\n            result += ' = ' + this.$data.getValue('value');\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.$data.setValue('type', data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.$data.setValue('name', data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.$data.setValue('modifier', data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n\r\n            // e.g. name : string or name:string\r\n            let dataSplitted = data.split(':');\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                let name;\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.$data.setValue('modifier', firstChar);\r\n                    name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                }\r\n                else {\r\n                    name = modifierAndNameSplitted;\r\n                }\r\n                // delete whitespaces in name\r\n                name = name.replace(/ /g, '_');\r\n\r\n                this.$data.setValue('name', name);\r\n                let type = dataSplitted[1].trim() || 'String';\r\n\r\n                // if the type was entered with a small begin letter\r\n                if (type.toLowerCase() === 'string') {\r\n                    type = 'String';\r\n                }\r\n                // delete whitespaces in type\r\n                type = type.replace(/ /g, '_');\r\n                this.$data.setValue('type',  type);\r\n            } else {\r\n                dataSplitted = data.split('=');\r\n                if (dataSplitted && dataSplitted.length === 2) {\r\n                    // modifer (and or) name\r\n                    let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                    // first char is +, - or #\r\n                    let firstChar = modifierAndNameSplitted[0];\r\n                    let name;\r\n                    if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                        this.$data.setValue('modifier', firstChar);\r\n                        name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                    }\r\n                    else {\r\n                        name = modifierAndNameSplitted;\r\n                    }\r\n                    // delete whitespaces in name\r\n                    name = name.replace(/ /g, '_');\r\n\r\n                    this.$data.setValue('name', name);\r\n                    let value = dataSplitted[1].trim() || '\"\"';\r\n                    this.$data.setValue('value', value);\r\n                    this.$data.setValue('type', typeof value);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected updateTextOfView() {\r\n        if (this.$view) {\r\n            this.$view.textContent = this.toString();\r\n        }\r\n        if (this.$owner) {\r\n            Util.saveToLocalStorage(this.$owner.$owner);\r\n        }\r\n    }\r\n}\r\n","import {Node} from \"./Node\";\r\n/**\r\n * Created by Stefan on 29.03.2017.\r\n */\r\n\r\nexport class Dice extends Node {\r\n    private value: number;\r\n    private max: number = 6;\r\n    private $animation: SVGElement;\r\n    private $zoom: number = 0.6;\r\n    private $border: number = 0.2;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super(data);\r\n        this.withSize(100, 100);\r\n    }\r\n\r\n    public setNumber(number: number) {\r\n        this.value = number;\r\n        this.refresh();\r\n    }\r\n\r\n    public refresh() {\r\n        if (this.$view) {\r\n            this.reset();\r\n            let group = this.createPointValue();\r\n            if (group) {\r\n                this.$view.appendChild(group);\r\n            }\r\n        }\r\n    }\r\n\r\n    public reset() {\r\n        if (this.$view) {\r\n            while (this.$view.children.length > 1) {\r\n                if(this.$view.children.item(this.$view.children.length - 1).tagName!== \"animateTransform\") {\r\n                    console.log(this.$view.children.item(this.$view.children.length - 1));\r\n                    this.$view.removeChild(this.$view.children.item(this.$view.children.length - 1));\r\n                }else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let dice: SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x + size.x * this.$border,\r\n            y: pos.y + size.y * this.$border,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y * this.$zoom,\r\n            width: size.x * this.$zoom,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        dice.appendChild(this.createShape(attr));\r\n\r\n        let group = this.createPointValue();\r\n        if (group) {\r\n            dice.appendChild(group);\r\n        }\r\n\r\n        this.$view = dice;\r\n        return dice;\r\n    }\r\n\r\n    public animationTimeout(newValues: number[]) {\r\n        if(newValues.length>0) {\r\n            let newValue = newValues.shift();\r\n            this.setNumber(newValue);\r\n            let that=this;\r\n            setTimeout(function() {that.animationTimeout(newValues)}, 100);\r\n        }\r\n    }\r\n\r\n    public roll() {\r\n        this.startAnimation();\r\n        let values:number[]=[];\r\n        let i:number;\r\n        for(i=1;i<this.max;i++) {\r\n            values.push(i);\r\n        }\r\n        for(i=this.max;i>0;i--) {\r\n            values.push(i);\r\n        }\r\n        let that=this;\r\n        values.push( Math.floor(Math.random() * this.max)+1 );\r\n        setTimeout(function() {that.animationTimeout(values)}, 100);\r\n    }\r\n    public startAnimation() {\r\n        if(this.$animation) {\r\n            return;\r\n        }\r\n        let center = this.getPos().x+this.getSize().x /2;\r\n        const attr = {\r\n            tag: 'animateTransform',\r\n            attributeType: \"xml\",\r\n            attributeName:\"transform\",\r\n            type:\"rotate\",\r\n            dur: \"1s\",\r\n            repeatCount:\"1\",\r\n            from:\"0 \"+center+\" \"+center,\r\n            to:\"360 \"+center+\" \"+center\r\n        };\r\n        this.$animation = <SVGElement>this.createShape(attr);\r\n        this.$view.appendChild(this.$animation);\r\n    }\r\n\r\n    public stopAnimation() {\r\n        if(this.$animation) {\r\n            this.$view.removeChild(this.$animation);\r\n            this.$animation = null;\r\n        }\r\n    }\r\n\r\n    public createPointValue() :SVGElement {\r\n        if (this.value == 1) {\r\n           return this.getCircle(2, 2);\r\n        } else if (this.value == 2) {\r\n            return this.getCircle(1, 1, 3, 3);\r\n        } else if (this.value == 3) {\r\n            return this.getCircle(1, 1, 2, 2, 3, 3);\r\n        } else if (this.value == 4) {\r\n            return this.getCircle(1, 1, 1, 3, 3, 1, 3, 3);\r\n        } else if (this.value == 5) {\r\n            return this.getCircle(1, 1, 1, 3, 2, 2, 3, 1, 3, 3);\r\n        } else if (this.value == 6) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 7) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 2, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 8) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 9) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private getCircle(...values:number[]) : SVGElement {\r\n        if (values.length % 2 > 0) {\r\n            return null;\r\n        }\r\n        let size = this.getSize();\r\n        let pos = this.getPos();\r\n        //FIXME let group:SVGElement = <SVGElement>this.createShape({tag: 'g', transform: 'translate(0 0)', height: size.y, width: size.x});\r\n        let group:SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n\r\n\r\n        for (let i: number = 0; i < values.length; i += 2) {\r\n            group.appendChild(this.createCircle(values[i], values[i + 1]));\r\n        }\r\n        return group;\r\n    }\r\n    private createCircle(x:number, y:number) : SVGElement {\r\n        let size = this.getSize();\r\n        let radius = size.x / 10*this.$zoom;\r\n        let border = size.y*this.$border;\r\n        let zoom = size.y*this.$zoom;\r\n        const attr = {\r\n            tag: 'circle',\r\n            r : radius,\r\n            cx: (size.x*this.$zoom * x) / 4 + border,\r\n            cy: (size.y*this.$zoom * y) / 4 + border,\r\n            stroke:\"black\",\r\n            \"stroke-width\":\"3\",\r\n            fill:\"red\",\r\n            style: 'fill:black;stroke:black;stroke-width:2'\r\n        };\r\n        return <SVGElement>this.createShape(attr);\r\n    }\r\n}","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\n\r\nexport class Div extends Control {\r\n    private className: string;\r\n\r\n    public load(data:JSON|any): any {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = <string>data;\r\n        } else {\r\n            id = data.id;\r\n            this.className = data.class;\r\n            this.property = data.property;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let div: HTMLElement = document.getElementById(id);\r\n\r\n        if (!this.property) {\r\n            // if(inputField){\r\n            // TODO disuss how to decide, which property we should listen on...\r\n            // this.property = id;\r\n            this.property = div.getAttribute('Property');\r\n            // }\r\n        }\r\n\r\n        if (div instanceof HTMLDivElement) {\r\n            this.$view = div;\r\n        } else {\r\n            if (!div) {\r\n                this.$view = document.createElement('div');\r\n                this.$view.setAttribute('id', this.id);\r\n                this.$view.setAttribute('property', this.property);\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists+\r\n        if (data.hasOwnProperty('property')) {\r\n            this.setProperty(data['property']);\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        this.$model = entity;\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.className || entity.hasProperty(this.className)) {\r\n                if (entity.id === this.property.split('.')[0]) {\r\n                    entity.addListener(this, this.className);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        this.$view.innerHTML = <string>newValue;\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Form extends Control {\r\n    // private applyingChange: boolean = false;\r\n    private children: Object = {};\r\n    // private property: string = \"\";\r\n\r\n    /**\r\n     * Data should look like the following json:\r\n     *\r\n     * <pre>{\r\n     *      id: \"t1\",\r\n     *      control: \"form\",\r\n     *      elements: [\r\n     *          {id: \"inputField1\", property: \"talk\"},\r\n     *          {id: \"inputField2\", property: \"room\"}\r\n     *      ]\r\n     * }</pre>\r\n     * @param data\r\n     */\r\n    public load(data: any) {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let form: HTMLElement = document.getElementById(id);\r\n\r\n        if (form instanceof HTMLFormElement) {\r\n            this.$view = form;\r\n            if (this.$view.hasAttribute('property')) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            if (!form) {\r\n                this.$view = document.createElement('form');\r\n                this.$view.setAttribute('id', this.id);\r\n\r\n                if (data.hasOwnProperty('property')) {\r\n                    this.property = data['property'];\r\n                }\r\n\r\n                // add all the attributes to the form element\r\n                for (let attr in data) {\r\n                    if (data.hasOwnProperty(attr) === false) {\r\n                        continue;\r\n                    }\r\n                    if (attr === 'elements') {\r\n                        continue;\r\n                    }\r\n                    this.$view.setAttribute(attr, data[attr]);\r\n                }\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists\r\n        let objId = this.property;\r\n        let hasItem = this.$owner.hasItem(objId);\r\n        if (hasItem) {\r\n            let item = this.$owner.getItem(objId);\r\n            item.addListener(this);\r\n            this.$model = item;\r\n        }\r\n\r\n        // now create all the sub input controls\r\n        for (let field of data.elements) {\r\n            // this.createField(field);\r\n            if (field.hasOwnProperty('property')) {\r\n                let property = field['property'];\r\n                property = this.property + '.' + property;\r\n                field['property'] = property;\r\n            }\r\n            if (!field.hasOwnProperty('class')) {\r\n                field['class'] = 'input';\r\n            }\r\n\r\n            // let the Bridge load the subControl\r\n            let control: Control = this.$owner.load(field, this);\r\n\r\n            // add subControl to children\r\n            this.children[control.getId()] = control;\r\n        }\r\n\r\n    }\r\n\r\n    public setProperty(id: string): void {\r\n        this.property = id;\r\n        let keys: string[] = Object.keys(this.children);\r\n        for (let k = 0; k < keys.length; k++) {\r\n            let key = keys[k];\r\n            let childControl = this.children[key];\r\n            // only set Property, if there is a Property defined before\r\n            if (childControl.property) {\r\n                childControl.setProperty(this.property + '.' + childControl.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object,  oldValue?: Object): boolean {\r\n        if (this.$owner != null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    /**\r\n     * Here we create the form elements and put all the attributes to them in order for the Control only having to load\r\n     * the data were appending here. Alternative would be loading with the bridge and afterwards setting\r\n     * the owner to the form instead of the body..\r\n     * @param field\r\n     */\r\n    /*private createField(field: Object) {\r\n     let control = 'input';\r\n     if (field.hasOwnProperty('class')) {\r\n     control = field['class'];\r\n     }\r\n     let input = document.createElement(control);\r\n     input.setAttribute('class', control);\r\n     let id: string;\r\n     if (!field.hasOwnProperty('id')) {\r\n     // TODO: not the best solution for generating unique id's for forms...\r\n     id = this.$owner.getId();\r\n     field['id'] = id;\r\n     }\r\n     if (field.hasOwnProperty('property')) {\r\n     let property = field['property'];\r\n     property = this.id + '.' + property;\r\n     input.setAttribute('property', property);\r\n     }\r\n     for (let attr in field) {\r\n     if (attr === 'property' || attr === 'class' || !field.hasOwnProperty(attr)) {\r\n     continue;\r\n     }\r\n     input.setAttribute(attr, field[attr]);\r\n     }\r\n\r\n     this.$viewElement.appendChild(input);\r\n\r\n     let newcontrol: Control = this.$owner.load(field['id']);\r\n     this.children[newcontrol.getId()] = newcontrol;\r\n     }*/\r\n}\r\n","/**\r\n * Created by Stefan on 01.03.2017.\r\n */\r\nimport {Control} from '../../Control';\r\n\r\nexport class HTML extends Control {\r\n    constructor(data: JSON|Object|any) {\r\n        super();\r\n\r\n        let id: string;\r\n        let tag: string;\r\n\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            data = {};\r\n        } else if (data) {\r\n            id = data.id;\r\n        }\r\n        if (id) {\r\n            this.id = id;\r\n            this.$view = document.getElementById(id);\r\n        }\r\n        if (!this.$view) {\r\n            if (data) {\r\n                tag = data['tag'] || 'div';\r\n            } else {\r\n                tag = 'div';\r\n            }\r\n            this.$view = document.createElement(tag);\r\n            let parent = document.getElementsByTagName('body')[0];\r\n            parent.appendChild(this.$view);\r\n        }\r\n        if (!parent) {\r\n            return;\r\n        }\r\n        this.writeAttribute(data, this.$view);\r\n    }\r\n\r\n    private writeAttribute(properties: Object, entity?: any) {\r\n        let lowKey;\r\n        if (!entity) {\r\n            lowKey = properties['tag'] || 'div';\r\n            entity = document.createElement(lowKey);\r\n        }\r\n        for (let key in properties) {\r\n            if (!properties.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            lowKey = key.toLowerCase();\r\n            if (properties[key] === null) {\r\n                entity.setAttribute(key, '');\r\n                continue;\r\n            }\r\n\r\n            if (lowKey === 'tag' || lowKey.charAt(0) === '$' || lowKey === '$graphModel' || lowKey === 'class') {\r\n                continue;\r\n            }\r\n            if (lowKey === 'children') {\r\n                if (Array.isArray(properties[key])) {\r\n                    for (let item in properties[key]) {\r\n                        if (properties[key].hasOwnProperty(item) === false) {\r\n                            continue;\r\n                        }\r\n                        let child = this.writeAttribute(item);\r\n                        if (child) {\r\n                            entity.appendChild(child);\r\n                        }\r\n                    }\r\n                } else {\r\n                    let child = this.writeAttribute(properties[key]);\r\n                    if (child) {\r\n                        entity.appendChild(child);\r\n                    }\r\n                }\r\n                continue;\r\n            }\r\n            entity[key] = properties[key];\r\n        }\r\n        return entity;\r\n    }\r\n}\r\n","import { Point } from '../BaseElements';\r\nimport { Util } from '../../util';\r\nimport { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\n\r\nexport class InfoText extends Node {\r\n\r\n    public cardinality: string = '';\r\n    private $heightOfOneTextItem: number;\r\n    private $cardinalitySvg: Element;\r\n    private $propertySvg: Element;\r\n    private $rectBackground: Element;\r\n\r\n    constructor(info: any) {\r\n        super(info);\r\n        if (typeof (info) === 'string') {\r\n            this.id = info;\r\n        } else {\r\n            if (info.property) {\r\n                this.property = info.property;\r\n            }\r\n            if (info.cardinality) {\r\n                this.cardinality = info.cardinality;\r\n            }\r\n        }\r\n        this.$isDraggable = true;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n    }\r\n\r\n    public updateCardinality(cardinality: string): void {\r\n        this.cardinality = cardinality;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (this.$rectBackground) {\r\n            this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n            this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n        }\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((cardinality.length === 0 && this.property.length > 0) || !this.$cardinalitySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$cardinalitySvg) {\r\n            this.$cardinalitySvg.textContent = cardinality;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.property.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    public updateProperty(property: string): void {\r\n        this.property = property;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((property.length === 0 && this.cardinality.length > 0) || !this.$propertySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$propertySvg) {\r\n            this.$propertySvg.textContent = property;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.cardinality.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos: Point = this.getPos();\r\n        let group = Util.create({ tag: 'g', class: 'SVGEdgeInfo', transform: 'translate(0, 0)' });\r\n\r\n        // append rect as background for text items\r\n        this.$rectBackground = Util.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y - this.$heightOfOneTextItem + 3,\r\n            width: this.getSize().x,\r\n            height: this.getSize().y,\r\n            fill: '#DDD',\r\n            'stroke-width': 0,\r\n            rx: '5',\r\n            ry: '5'\r\n        });\r\n        group.appendChild(this.$rectBackground);\r\n\r\n        let y = pos.y;\r\n        if (this.property) {\r\n            // property\r\n            this.$propertySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$propertySvg.textContent = this.property;\r\n            group.appendChild(this.$propertySvg);\r\n\r\n            y += this.$heightOfOneTextItem;\r\n        }\r\n\r\n        // cardinality\r\n        if (this.cardinality) {\r\n            this.$cardinalitySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$cardinalitySvg.textContent = this.cardinality;\r\n            group.appendChild(this.$cardinalitySvg);\r\n        }\r\n\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        let cardinalityAvailable = this.cardinality && this.cardinality.length > 0;\r\n        let propertyAvailable = this.property && this.property.length > 0;\r\n\r\n        return !propertyAvailable && !cardinalityAvailable;\r\n    }\r\n\r\n    public redrawFromEdge(newPos: Point): void {\r\n\r\n        if (!newPos) {\r\n            return;\r\n        }\r\n\r\n        let oldPos = this.getPos();\r\n\r\n        // get difference between new and the old position\r\n        let diffPos = new Point();\r\n        diffPos.x = newPos.x - oldPos.x;\r\n        diffPos.y = newPos.y - oldPos.y;\r\n\r\n        // get translate information\r\n        let translation = this.$view.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        let sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        // set new traslation values\r\n        let newTransX = (sx + diffPos.x);\r\n        let newTransY = (sy + diffPos.y);\r\n        this.$view.setAttributeNS(null, 'transform', 'translate(' + newTransX + ' ' + newTransY + ')');\r\n\r\n        // set new position of svg\r\n        this.getPos().x = newPos.x;\r\n        this.getPos().y = newPos.y;\r\n    }\r\n\r\n    public getText(): string {\r\n        let infoTxt: string = '';\r\n\r\n        if (this.property) {\r\n            infoTxt = this.property;\r\n        }\r\n        if (this.cardinality) {\r\n            if (infoTxt.length > 0) {\r\n                infoTxt += '\\n';\r\n            }\r\n            infoTxt += this.cardinality;\r\n        }\r\n\r\n        return infoTxt;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    private calcSize(): Point {\r\n        let text: string = this.getText();\r\n        let items: Array<string> = text.split('\\n');\r\n\r\n        let maxSize = new Point(0, 0);\r\n        if (text.length === 0) {\r\n            return maxSize;\r\n        }\r\n\r\n        for (let i = 0; i < items.length; i += 1) {\r\n            // calculate size\r\n            let sizeOfText: ClientRect = Util.sizeOf(items[i]);\r\n            maxSize.x = Math.max(maxSize.x, sizeOfText.width);\r\n            maxSize.y += sizeOfText.height;\r\n\r\n            this.$heightOfOneTextItem = sizeOfText.height;\r\n        }\r\n\r\n        return maxSize;\r\n    }\r\n    private resetAllSvgElements() {\r\n        this.$cardinalitySvg = undefined;\r\n        this.$view = undefined;\r\n        this.$propertySvg = undefined;\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\nimport {PropertyBinder} from '../../PropertyBinder';\r\n\r\nexport class Input extends Control {\r\n    private type: string;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data = super.initViewDataProperties(oldData);\r\n        if ('checkbox' === this.type || 'radio' === this.type) {\r\n            data.addFrom('checked', oldData);\r\n        }\r\n        data.addFrom('value', oldData);\r\n        data.addFrom('type', oldData);\r\n        return data;\r\n    }\r\n\r\n    public load(data: any) {\r\n        let id: string;\r\n        let inputField: HTMLElement;\r\n        let useData: boolean;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            useData = true;\r\n        } else {\r\n            id = data.id;\r\n            if (data.type) {\r\n                this.setType(data['type']);\r\n            } else {\r\n                this.setType('text');\r\n            }\r\n            if (data.hasOwnProperty('property')) {\r\n                this.setProperty(data['property']);\r\n            }\r\n            useData = false;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n\r\n        inputField = document.getElementById(id);\r\n\r\n        if (useData) {\r\n            if (inputField) {\r\n                // TODO disuss how to decide, which property we should listen on...\r\n                // this.property = id;\r\n                if (inputField.hasAttribute('Property')) {\r\n                    this.setProperty(inputField.getAttribute('Property'));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (inputField instanceof HTMLInputElement) {\r\n            this.setView(inputField);\r\n            this.type = inputField.type;\r\n            // useData = false;\r\n        } else {\r\n            if (!inputField) {\r\n                this.setView(document.createElement('input'));\r\n                this.$viewData = this.initViewDataProperties(this.$viewData);\r\n                // append viewListener\r\n                // this.$view.addEventListener('change', this.$viewListener);\r\n                if (typeof(data) !== 'string') {\r\n                    for (let attr in data) {\r\n                        if (data.hasOwnProperty(attr) === false) {\r\n                            continue;\r\n                        }\r\n                        // this.$view[attr] = data[attr];\r\n                        this.$viewData.setValue(attr, data[attr]);\r\n                    }\r\n                } else {\r\n                    if (this.type) {\r\n                        this.$view.setAttribute('type', this.type);\r\n                    }\r\n                    if (data.hasOwnProperty('class')) {\r\n                        this.$view.setAttribute('class', data['class']);\r\n                    }\r\n                    this.$view.setAttribute('id', this.id);\r\n                    this.$view.setAttribute('property', this.property);\r\n                }\r\n\r\n                if (data.value) {\r\n                    // if theres a value at the control, we want to change the model to the new value\r\n                    if (this.$model) {\r\n                        this.$model.setValue(this.lastProperty, data.value);\r\n                    }\r\n                }\r\n                if (this.$model) {\r\n                    PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                }\r\n\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (this.property && entity) {\r\n            if (entity.id === this.property.split('.')[0]) {\r\n                this.$model = entity;\r\n                PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                // entity.addListener(this, this.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n    // TODO FIXME protected updateElement(property: string, value: string) {\r\n    //     if (this.$view instanceof HTMLInputElement) {\r\n    //         if (value != null) {\r\n    //             if(property == this.lastProperty) {\r\n    //                 (<HTMLInputElement>this.$view)[this.getStandardProperty()] = value;\r\n    //             } else {\r\n    //                 // this.getRoot().setValue(this, property, value, (<HTMLInputElement>this.$view)[property]);\r\n    //                 (<HTMLInputElement>this.$view)[property] = value;\r\n    //             }\r\n    //         } else {\r\n    //             delete (<HTMLInputElement>this.$view)[property];\r\n    //         }\r\n    //     }\r\n    // }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            super.controlChanged(ev);\r\n        }\r\n// <<<<<<< HEAD\r\n//             let newVal = element[this.getStandardProperty()];\r\n//             if (this.isKeyOnly()) {\r\n//                 // we expect, element[this.lastProperty] to be boolean:\r\n//                 if (!newVal) {\r\n//                     newVal = null;\r\n//                 }\r\n//             } else {\r\n//             }\r\n        // let $graphModel;\r\n        // let value;\r\n        /*if (this.$graphModel) {\r\n            $graphModel = this.$graphModel;\r\n            value = this.$graphModel.getValue(this.lastProperty);\r\n        } else {\r\n            $graphModel = this;\r\n            if (this.$view) {\r\n                value = this.$view[this.lastProperty];\r\n            }\r\n        }*/\r\n        // this.$model.setValue(this.lastProperty, newVal);\r\n        // this.propertyChange(this.$graphModel,this.lastProperty, this.$graphModel.getValue(this.lastProperty), newVal);\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n// =======\r\n        // let newVal = element[this.lastProperty];\r\n        // if (this.isKeyOnly()) {\r\n        //     // we expect, element[this.lastProperty] to be boolean:\r\n        //     if (!newVal) {\r\n        //         newVal = null;\r\n        //     }\r\n        // } else {\r\n        // }\r\n        // let $graphModel;\r\n        // let value;\r\n\r\n        // $graphModel = this.getViewData();\r\n        // if (this.$graphModel) {\r\n        //     $graphModel = this.$graphModel;\r\n        //     value = this.$graphModel.getValue(this.lastProperty);\r\n        // } else {\r\n        //     $graphModel = this;\r\n        //     if (this.$view) {\r\n        //         value = this.$view[this.lastProperty];\r\n        //     }\r\n        // }\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n//            this.saveViewInData();\r\n// >>>>>>> addOldFunctions\r\n//         } else {\r\n//             console.log('value does not match the pattern...');\r\n//         }\r\n    }\r\n\r\n    public setType(type: string): void {\r\n        let oldValue: string = this.type;\r\n        if (oldValue === type) {\r\n            return;\r\n        }\r\n        if (type === 'radio') {\r\n            this.$viewData.setValue('checked', null);\r\n        } else {\r\n            this.$viewData.removeKey('checked');\r\n        }\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\n\r\nexport class Label extends Control {\r\n    public load(data: JSON): any {\r\n        this.createControl(this.$owner, data);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('label');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr === 'textContent') {\r\n                this.$view.textContent = data['textContent'];\r\n            } else {\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Method extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.updateType(data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.updateType(data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.updateType(data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n            // e.g. setName() : string or name:string\r\n            let dataSplitted = data.split(':');\r\n\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }\r\n                else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType(dataSplitted[1].trim() || 'void');\r\n            }\r\n            // set default return type of void\r\n            else {\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = data.trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }  else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType('void');\r\n            }\r\n        }\r\n\r\n        if (Util.includes(this.$data.getValue('name'), '(') && !Util.includes(this.$data.getValue('name'), ')') === false) {\r\n            this.$data.setValue('name', this.$data.getValue('name') + '()');\r\n        }\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\nimport {Association} from '../edges';\r\nimport { GraphModel } from '..';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\n\r\nexport class Node extends DiagramElement {\r\n    public $edges: Association[] = [];\r\n    public $minWidth: number = 150;\r\n    public $minheight: number = 25;\r\n    public $defaulEdgeType: string;\r\n\r\n    constructor(data: JSON|string|Object|any) {\r\n        super();\r\n\r\n        // default size\r\n        this.withSize(this.$minWidth, this.$minheight);\r\n\r\n        if (data) {\r\n            if (data['x'] && data['y']) {\r\n                this.withPos(data['x'], data['y']);\r\n            }\r\n            if (data['width'] || data['height']) {\r\n                this.withSize(data['width'], data['height']);\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos = this.getPos();\r\n        const size = this.getSize();\r\n\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x - size.x / 2,\r\n            y: pos.y - size.y / 2,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y,\r\n            width: size.x,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        const shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'middle',\r\n            'font-family': 'Verdana',\r\n            'font-size': '14',\r\n            fill: 'black'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = this.id;\r\n\r\n        let group = this.createShape({tag: 'g', id: this.id});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public copy(): Node {\r\n        let copy: Node;\r\n        // create new id\r\n        let model = <GraphModel>this.$owner || <GraphModel>this.getRoot();\r\n        if (model) {\r\n            let type = this.property || Node.name;\r\n            let newId = model.getNewId(type);\r\n            copy = <Node>model.createElement(type, newId, null);\r\n            copy.withSize(this.getSize().x, this.getSize().y);\r\n            copy.$owner = model;\r\n        } else {\r\n            copy.id = this.id + '-copy';\r\n            copy.$owner = this.getRoot();\r\n        }\r\n        return copy;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n// EMPTY\r\n    }\r\n    public addAttribute(value: string): Attribute {\r\n        return null;\r\n    }\r\n    public getAttributes(): Attribute[] {\r\n        return null;\r\n    }\r\n    public addMethod(value: string): Method {\r\n        return null;\r\n    }\r\n    public updateLabel(newLabel: string): void {\r\n// EMPTY\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\n\r\nexport class SO extends DiagramElement {\r\n    public static create(element: Object) {\r\n        let result: SO = new SO();\r\n        for (let key in element) {\r\n            if (element.hasOwnProperty(key) === false) {\r\n                continue;\r\n            }\r\n            result.withKeyValue(key, element[key]);\r\n\r\n        }\r\n        return result;\r\n    }\r\n\r\n    public withKeyValue(key: string, value: any): SO {\r\n        if (key === 'typ') {\r\n            this.property = value;\r\n        } else if (key === 'x') {\r\n            this.withPos(value, null);\r\n        } else if (key === 'y') {\r\n            this.withPos(null, value);\r\n        } else if (key === 'width') {\r\n            this.withSize(value, null);\r\n        } else if (key === 'height') {\r\n            this.withSize(null, value);\r\n        } else {\r\n            this[key] = value;\r\n        }\r\n        return this;\r\n    }\r\n}\r\n","import {Point} from '../BaseElements';\r\nimport {Node} from './Node';\r\n\r\nexport class StereoType extends Node {\r\n\r\n    protected stereoType: string;\r\n\r\n    constructor (type: string, x: number, y: number) {\r\n        super('');\r\n        this.withPos(x, y);\r\n        this.setStereoType(type);\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        let pos: Point = this.getPos();\r\n        let size: Point = this.getSize();\r\n\r\n               // = = = STEREOTYPE = = =\r\n        let stereoType = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y - this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': 10,\r\n            'font-weight': 'bold',\r\n            fill: 'black'\r\n        });\r\n        stereoType.textContent = this.stereoType;\r\n\r\n        this.$view = stereoType;\r\n        return stereoType;\r\n    }\r\n\r\n    public setStereoType(value: string): void {\r\n        this.stereoType = '<<' + value + '>>';\r\n    }\r\n\r\n    public getStereoType(): string {\r\n        return this.stereoType;\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { SO } from './SO';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport { Util } from '../../util';\r\n\r\nexport class Symbol extends Node {\r\n    public $heightMax: number = 0;\r\n    public $heightMin: number = 0;\r\n\r\n    constructor(typ: string) {\r\n        super(typ);\r\n    }\r\n\r\n    public draw(typ?: string): SVGElement {\r\n        return SymbolLibary.draw(this);\r\n    }\r\n}\r\n\r\n// \t\t\t\t###################################################### SymbolLibary ####################################################################################\r\n// Example Items\r\n// {tag: 'path', d: ''}\r\n// {tag: 'rect', width:46, height:34}\r\n// {tag: 'ellipse', width:23, height:4}\r\n// {tag: 'line', x1:650, y1:-286, x2:650, y2:-252}\r\n// {tag: 'circle', r:5, x:12, y:0}\r\n// {tag: 'image', height: 30, width: 50, content$src: hallo}\r\n// {tag: 'text', 'text-anchor': 'left', x: '10'}\r\nexport class SymbolLibary {\r\n\r\n    public static drawSVG(node: any): SVGSVGElement {\r\n        // const lib = new SymbolLibary();\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            const parent = SO.create(node);\r\n            parent['property'] = 'SVG';\r\n            symbol = fn(parent);\r\n            // symbol = fn.apply(lib, parent);\r\n\r\n            return SymbolLibary.createGroup(parent, symbol);\r\n        }\r\n        return symbol;\r\n    }\r\n\r\n    public static draw(node: any, parent?: Object): SVGElement {\r\n        // Node is Symbol or simple Object\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            if (!(node instanceof DiagramElement)) {\r\n                node = SO.create(node);\r\n                if (!node.property) {\r\n                    node.property = 'SVG';\r\n                }\r\n            }\r\n            symbol = fn.apply(this, [node]);\r\n            if (!parent) {\r\n                return SymbolLibary.createGroup(node, symbol);\r\n            }\r\n            return SymbolLibary.createGroup(node, symbol);\r\n        } else if (node.property) {\r\n            symbol = new Symbol(node.property);\r\n            symbol.init(node);\r\n            let pos = node.getPos();\r\n            let size = node.getSize();\r\n            symbol.withPos(pos.x, pos.y);\r\n            symbol.withSize(size.x, size.y);\r\n            symbol['value'] = node['value'];\r\n            parent = node['$parent'];\r\n            return SymbolLibary.draw(symbol, parent);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public static upFirstChar(txt: string): string {\r\n        return txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase();\r\n    }\r\n\r\n    public static isSymbolName(typ: string): boolean {\r\n        let fn = SymbolLibary['draw' + SymbolLibary.upFirstChar(typ)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static isSymbol(node: Symbol) {\r\n        let fn = SymbolLibary[SymbolLibary.getName(node)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static getName(node: any): string {\r\n        if (node['type']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['type']);\r\n        }\r\n        if (node.property) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node.property);\r\n        }\r\n        if (node['src']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['src']);\r\n        }\r\n        return 'drawNode';\r\n    }\r\n\r\n    /*FIXME   public static createImage(node: Symbol, $graphModel:Node) {\r\n           let n, img: HTMLElement;\r\n           // node.$graphModel = node;\r\n           if (SymbolLibary.isSymbol(node)) {\r\n               return SymbolLibary.draw(null, node);\r\n           }\r\n           n = {tag: 'img', $graphModel: node, src: node['src']};\r\n           let size = node.getSize();\r\n           if (size.isEmpty() === false) {\r\n               n['width'] = size.x;\r\n               n['height'] = size.y;\r\n           } else {\r\n               n['xmlns'] = 'http://www.w3.org/1999/xhtml';\r\n           }\r\n           img = Util.create(n);\r\n           if (size.isEmpty()) {\r\n               $graphModel.appendImage(img);\r\n               return null;\r\n           }\r\n           return img;\r\n       }*/\r\n\r\n    public static createGroup(node: DiagramElement, group: any) {\r\n        let func, y: number, z: number, box, item: Element, transform, i, offsetX = 0, offsetY = 0;\r\n        let svg: any;\r\n        if (node.property.toUpperCase() === 'HTML') {\r\n            let so = {\r\n                tag: 'svg',\r\n                style: { left: (group.x | 0) + node.getPos().x, top: (group.y | 0) + node.getPos().y, position: 'absolute' }\r\n            };\r\n            if (node['transform']) {\r\n                so['transform'] = node['transform'];\r\n            }\r\n            svg = Util.create(so);\r\n        } else {\r\n            svg = Util.create({ tag: 'g' });\r\n            transform = 'translate(' + group.getPos().x + ' ' + group.getPos().y + ')';\r\n            if (group.scale) {\r\n                transform += ' scale(' + group.scale + ')';\r\n            }\r\n            if (group.rotate) {\r\n                transform += ' rotate(' + group.rotate + ')';\r\n            }\r\n            svg.setAttribute('transform', transform);\r\n            if (group['id']) {\r\n                svg.id = group['id'];\r\n            }\r\n        }\r\n\r\n        if (node['tooltip']) {\r\n            const tooltipTitleAttr = {\r\n                tag: 'title'\r\n            };\r\n            let tooltipTitle = Util.createShape(tooltipTitleAttr);\r\n            tooltipTitle.textContent = node['tooltip'];\r\n            svg.appendChild(tooltipTitle);\r\n        }\r\n\r\n        if (node['background']) {\r\n            const attrCircle = {\r\n                tag: 'circle',\r\n                cx: 20,\r\n                cy: 20,\r\n                r: 17,\r\n                stroke: '#888',\r\n                'stroke-width': 0,\r\n                fill: '#DDD'\r\n            };\r\n            svg.appendChild(Util.create(attrCircle));\r\n        }\r\n\r\n        for (i = 0; i < group.items.length; i += 1) {\r\n            svg.appendChild(Util.create(group.items[i]));\r\n        }\r\n        let elements = node['elements'];\r\n        Util.setSize(svg, group.width + node.getSize().x, group.height + node.getSize().y);\r\n        node['$heightMin'] = node.getSize().y;\r\n        if (elements) {\r\n            for (i = 0; i < elements.length; i += 1) {\r\n                if (!elements[i] && elements[i].length < 1) {\r\n                    elements.splice(i, 1);\r\n                    i -= 1;\r\n                }\r\n            }\r\n            box = Util.create({ tag: 'g' });\r\n            // Calculate new Height\r\n            let c: number;\r\n            z = 0;\r\n            for (c = 0; c < elements.length; c += 1) {\r\n                if (typeof elements[c] === 'string') {\r\n                    z += 1;\r\n                } else {\r\n                    z += elements[c].length;\r\n                }\r\n            }\r\n            z = z * 25 + 6;\r\n            box.appendChild(Util.create({\r\n                tag: 'rect',\r\n                rx: 0,\r\n                x: offsetX,\r\n                y: (offsetY + 28),\r\n                width: 70,\r\n                height: z,\r\n                stroke: '#000',\r\n                fill: '#fff',\r\n                opacity: '0.7'\r\n            }));\r\n            node['$heightMax'] = z + node['$heightMin'];\r\n\r\n            svg['elements'] = elements;\r\n            if (node['type'] === 'DropDown') {\r\n                svg['activ'] = Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': 60,\r\n                    'x': (10 + offsetX),\r\n                    'y': 20,\r\n                    value: node['activText']\r\n                });\r\n                svg.appendChild(svg.activ);\r\n            }\r\n\r\n            y = offsetY + 46;\r\n            // 46 -28 = 18\r\n\r\n            func = function (event: Event) {\r\n                if (svg.activ) {\r\n                    svg.activ.textContent = (<any>event.currentTarget).value;\r\n                }\r\n            };\r\n            let txt: string;\r\n            let textClass = 'SVGTEXT';\r\n            for (z = 0; z < elements.length; z += 1) {\r\n                if (typeof elements[z] === 'string') {\r\n                    txt = elements[z];\r\n                } else {\r\n                    item = this.addText(y, offsetX, box, elements[z][0], 'SVGTEXT');\r\n                    y += 26;\r\n                    for (c = 1; c < elements[z].length; c += 1) {\r\n                        item = this.addText(y, offsetX, box, '* ' + elements[z][c], 'SVGTEXTITEM');\r\n\r\n                        item['value'] = elements[z];\r\n                        if (node['action']) {\r\n                            item['onclick'] = node['action'];\r\n                        } else {\r\n                            item['onclick'] = func;\r\n                        }\r\n                        y += 26;\r\n                    }\r\n                    txt = elements[z];\r\n                    let subBox = Util.create({\r\n                        tag: 'rect',\r\n                        rx: 0,\r\n                        x: offsetX,\r\n                        y: (offsetY + 28),\r\n                        width: 60,\r\n                        height: z,\r\n                        stroke: '#000',\r\n                        fill: '#fff',\r\n                        opacity: '0.7'\r\n                    });\r\n                    continue;\r\n                }\r\n                // let txt = elements[z];\r\n                item = this.addText(y, offsetX, box, txt, textClass);\r\n\r\n                item['value'] = elements[z];\r\n                if (node['action']) {\r\n                    item['onclick'] = node['action'];\r\n                } else {\r\n                    item['onclick'] = func;\r\n                }\r\n                y += 26;\r\n            }\r\n            svg.choicebox = box;\r\n        }\r\n        svg.tool = node;\r\n        svg.onclick = function () {\r\n            if (svg.status === 'close') {\r\n                svg.open();\r\n            } else {\r\n                svg.close();\r\n            }\r\n        };\r\n        svg.close = function () {\r\n            if (svg.status === 'open' && svg.choicebox) {\r\n                this.removeChild(svg.choicebox);\r\n            }\r\n            svg.status = 'close';\r\n            svg.tool.$size.height = svg.tool.heightMin;\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x, g.tool.height + g.tool.y);\r\n            Util.setSize(svg, svg.tool.$size.x, svg.tool.$size.y);\r\n        };\r\n        svg.open = function () {\r\n            if (this.tagName === 'svg') {\r\n                return;\r\n            }\r\n            if (svg.status === 'close' && svg.choicebox) {\r\n                this.appendChild(svg.choicebox);\r\n            }\r\n            svg.status = 'open';\r\n            svg.tool.$size.height = svg.tool.heightMax;\r\n            Util.setSize(svg, svg.tool.width, svg.tool.height);\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x + 10, g.tool.height + g.tool.y + 10);\r\n        };\r\n        svg.close();\r\n        return svg;\r\n    }\r\n\r\n    public static addChild(parent: SVGElement, json: JSON | Element): void {\r\n        let item: Element;\r\n        if ((<any>json).offsetLeft) {\r\n            item = <Element>json;\r\n        } else {\r\n            item = Util.create(json);\r\n        }\r\n        item.setAttribute('class', 'draggable');\r\n        parent.appendChild(item);\r\n    }\r\n\r\n    public static all(node: any): void {\r\n        SymbolLibary.drawSmiley(node);\r\n        SymbolLibary.drawDatabase(node);\r\n        SymbolLibary.drawLetter(node);\r\n        SymbolLibary.drawMobilephone(node);\r\n        SymbolLibary.drawWall(node);\r\n        SymbolLibary.drawActor(node);\r\n        SymbolLibary.drawLamp(node);\r\n        SymbolLibary.drawArrow(node);\r\n        SymbolLibary.drawButton(node);\r\n        SymbolLibary.drawDropdown(node);\r\n        SymbolLibary.drawClassicon(node);\r\n        SymbolLibary.drawClassWithEdgeicon(node);\r\n    }\r\n\r\n    public static drawHamburger(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'circle', r: 10, fill: '#ccc', cx: 12, cy: 12, 'stroke-width': 1, stroke: 'black'},\r\n                { tag: 'path', d: 'M 8,7 H 16 M 8,12 H 16 M 8,17 H 16', stroke: 'black', fill: 'none' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawSmiley(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'path', d: 'm49.01774,25.64542a24.5001,24.5 0 1 1 -49.0001,0a24.5001,24.5 0 1 1 49.0001,0z', stroke: 'black', fill: 'none' }, { tag: 'path', d: 'm8,31.5c16,20 32,0.3 32,0.3' },\r\n                { tag: 'path', d: 'm19.15,20.32a1.74,2.52 0 1 1 -3.49,0a1.74,2.52 0 1 1 3.49,0z' },\r\n                { tag: 'path', d: 'm33,20.32a1.74,2.52 0 1 1 -3.48,0a1.74,2.52 0 1 1 3.48,0z' },\r\n                { tag: 'path', d: 'm5.57,31.65c3.39,0.91 4.03,-2.20 4.03,-2.20' },\r\n                { tag: 'path', d: 'm43,32c-3,0.91 -4,-2.20 -4.04,-2.20' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDatabase(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 40,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,-6.26 25.03,-6.26 25.03,0l0,25.82c0,6.26 -25.03,6.26 -25.03,0l0,-25.82z',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLetter(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 17,\r\n            items: [\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1,1l22,0l0,14l-22,0l0,-14z' },\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1.06,1.14l10.94,6.81l10.91,-6.91' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMobilephone(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 4.2 0.5 15.61 0c 2 0 3.7 1.65 3.7 3.7l 0 41.6c 0 2-1.65 3.7-3.7 3.7l-15.6 0c-2 0-3.7-1.6-3.7-3.7l 0-41.6c 0-2 1.6-3.7 3.7-3.7z',\r\n                    fill: 'none',\r\n                    stroke: 'black'\r\n                },\r\n                { tag: 'path', d: 'm 12.5 2.73a 0.5 0.5 0 1 1-1 0 0.5 0.5 0 1 1 1 0z' },\r\n                { tag: 'path', d: 'm 14 46a 2 2 0 1 1-4 0 2 2 0 1 1 4 0z' },\r\n                { tag: 'path', d: 'm 8 5 7 0' },\r\n                { tag: 'path', d: 'm 1.63 7.54 20.73 0 0 34-20.73 0z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawWall(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'path', d: 'm26,45.44l-5,3.56l-21,-9l0,-36.41l5,-3.56l20.96,9l-0,36.4z' },\r\n                {\r\n                    tag: 'path',\r\n                    stroke: 'white',\r\n                    d: 'm2.21,11l18.34,7.91m-14.46,-12.57l0,6.3m8.2,21.74l0,6.35m-8.6,-10l0,6.351m4.1,-10.67l0,6.3m4.8,-10.2l0,6.3m-8.87,-10.23l0,6.35m4.78,-10.22l0,6.35m-8,14.5l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m0,-13l0,34m-18.23,-41.84l18.3,8m0,0.11l5,-3.57'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawActor(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'line', stroke: '#000', x1: '12', y1: '10', x2: '12', y2: '30' },\r\n                { tag: 'circle', stroke: '#000', cy: '5', cx: '12', r: '5' },\r\n                { tag: 'line', stroke: '#000', y2: '18', x2: '25', y1: '18', x1: '0' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '5', y1: '30', x1: '12' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '20', y1: '30', x1: '12' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLamp(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 22.47 10.58c-6.57 0-11.89 5.17-11.89 11.54 0 2.35 0.74 4.54 2 6.36 2 4 4.36 5.63 4.42 10.4l 11.15 0c 0.12-4.9 2.5-6.8 4.43-10.4 1.39-1.5 1.8-4.5 1.8-6.4 0-6.4-5.3-11.5-11.9-11.5z',\r\n                    fill: 'white',\r\n                    stroke: 'black'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 40 8 0c 0.58 0 1 0.5 1 1 0 0.6-0.5 1-1 1l-8 0c-0.6 0-1-0.47-1-1 0-0.58 0.47-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 42.7 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 45.3 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                { tag: 'path', d: 'm 19.5 48c 0.37 0.8 1 1.3 1.9 1.7 0.6 0.3 1.5 0.3 2 0 0.8-0.3 1.4-0.8 1.9-1.8z' },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 6 37.5 4.2-4c 0.3-0.3 0.8-0.3 1 0 0.3 0.3 0.3 0.8 0 1.1l-4.2 4c-0.3 0.3-0.8 0.3-1.1 0-0.3-0.3-0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 39 37.56-4.15-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 38 23 5.8 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.8 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 1.3 23 6 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.9 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 34.75 11.2 4-4.1c 0.3-0.3 0.3-0.8 0-1-0.3-0.3-0.8-0.3-1 0l-4 4.1c-0.3 0.3-0.3 0.8 0 1 0.3 0.3 0.8 0.3 1 0z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 11.23 10-4-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 21.64 1.3 0 5.8c 0 0.4 0.3 0.8 0.8 0.8 0.4 0 0.8-0.3 0.8-0.8l 0-5.8c 0-0.4-0.3-0.8-0.8-0.8-0.4 0-0.8 0.3-0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 26.1 24.3c-0.5 0-1 0.2-1.3 0.4-1.1 0.6-2 3-2.27 3.5-0.26-0.69-1.14-2.9-2.2-3.5-0.7-0.4-2-0.7-2.5 0-0.6 0.8 0.2 2.2 0.9 2.9 1 0.9 3.9 0.9 3.9 0.9 0 0 0 0 0 0 0.54 0 2.8 0 3.7-0.9 0.7-0.7 1.5-2 0.9-2.9-0.2-0.3-0.7-0.4-1.2-0.4z'\r\n                },\r\n                { tag: 'path', d: 'm 22.5 28.57 0 10.7' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawStop(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 30,\r\n            height: 30,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: '#FFF',\r\n                    'stroke-width': '2',\r\n                    stroke: '#B00',\r\n                    d: 'm 6,6 a 14,14 0 1 0 0.06,-0.06 z m 0,0 20,21'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMin(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    d: 'm 0,0 19,0 0,19 -19,0 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 13,-0.04'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawArrow(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 10,\r\n            height: 9,\r\n            rotate: node['rotate'],\r\n            items: [\r\n                { tag: 'path', fill: '#000', stroke: '#000', d: 'M 0,0 10,4 0,9 z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMax(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    'stroke-dashoffset': 2,\r\n                    'stroke-dasharray': '4.8,4.8',\r\n                    d: 'm 0,0 4.91187,0 5.44643,0 9.11886,0 0,19.47716 -19.47716,0 0,-15.88809 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 6,0.006 0.02,5 0.01,-11 -0.03,6.02 c 2,-0.01 4,-0.002 6,0.01'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawButton(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight, btnValue;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        btnValue = node['value'] || '';\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: 60,\r\n            height: 28,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 8,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    filter: 'url(#drop-shadow)',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                { tag: 'text', $font: true, x: 10, y: 18, fill: 'black', value: btnValue, 'class': 'hand' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDropdown(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 0,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth - 20,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 2,\r\n                    x: btnWidth - 20,\r\n                    y: 0,\r\n                    width: 20,\r\n                    height: 28,\r\n                    stroke: '#000',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    style: 'fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1',\r\n                    d: 'm ' + (btnWidth - 15) + ',13 10,0 L ' + (btnWidth - 10) + ',20 z'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassicon(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.19999l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm25.68807,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.2l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                { tag: 'line', x1: 11, y1: 7, x2: 25, y2: 7, stroke: '#000' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassWithEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M2,10 20,10 20,35 2,35 Z M2,17 20,17 M20,10 28,5 28,9 M 28.5,4.7 24,4',\r\n                    style: 'fill:none;stroke:#000000;transform:scale(0.8);'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClass(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: '100%',\r\n            height: '100%',\r\n            items: [\r\n                { tag: 'rect', width: 50, height: 40, x: 0, y: 0, 'stroke-width': 2, stroke: 'black', fill: 'none'},\r\n                { tag: 'rect', width: 50, height: 12, x: 0, y: 18, 'stroke-width': 1, stroke: 'black', fill: 'none'},\r\n                { tag: 'text', x: 27, y: 14, 'text-anchor': 'middle', 'font-size': 11, value: 'Class'},\r\n                { tag: 'text', x: 5, y: 24, 'font-size': 5, value: '+ field: type'},\r\n                { tag: 'text', x: 5, y: 36, 'font-size': 5, value: '+ method(type)'}\r\n            ]\r\n        });\r\n    }\r\n/*\r\n<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n    <g>\r\n    <text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text>\r\n        <text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>\r\n*/\r\n\r\n    public static drawEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M10,30 30,10 M19,10 30,10 30,21',\r\n                    style: 'fill:none;stroke:#555;stroke-width:2;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawCopynode(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M5 5 L15 5 L15 20 L5 20 Z M5 10 L15 10',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M8 2 L18 2 L18 17 L8 17 Z M8 7 L18 7'\r\n                        + 'M11 4.5 L15 4.5 '\r\n                        + 'M10 10 L16 10 '\r\n                        + 'M10 13 L16 13 ',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawBasket(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M12 12 L18 12 L18 11 L22 11 L22 12 L28 12 L28 14 L27 14 L27 29 L13 29 L13 14 L12 14 Z M13 14 L27 14 M20 17 L20 26 M17 16 L17 27 M23 16 L23 27',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawPencil(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M6 20 L12 23 L33 23 L33 17 L12 17 Z M30 17 L30 23 M12 17 L12 23 M15 19 L28 19 M15 21 L28 21',\r\n                    stroke: '#000',\r\n                    'stroke-width': 1,\r\n                    fill: 'white'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    private static addText(y: number, offsetX: number, box: Element, text: string, textClass: string): Element {\r\n        let item: Element;\r\n        box.appendChild(Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'text-anchor': 'left',\r\n            width: 70,\r\n            x: 10,\r\n            y: y,\r\n            class: textClass,\r\n            value: text,\r\n            eventValue: text\r\n        }));\r\n        if (textClass === 'SVGTEXT') {\r\n            textClass = 'SVGChoiceText';\r\n        } else {\r\n            textClass = 'SVGChoice';\r\n        }\r\n\r\n        item = Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            x: offsetX,\r\n            y: y - 18,\r\n            width: 70,\r\n            height: 24,\r\n            stroke: 'none',\r\n            class: textClass,\r\n        });\r\n        item['eventValue'] = text;\r\n        box.appendChild(item);\r\n        return item;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n}\r\n","import {Control} from '../../Control';\r\nimport BridgeElement from '../../BridgeElement';\r\nimport Data from '../../Data';\r\nimport {Util} from '../../util';\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Table extends Control {\r\n    protected items: BridgeElement[] = [];\r\n    private columns: Column[] = [];\r\n    private cells: Object = {};\r\n    private $bodysection: HTMLTableSectionElement;\r\n    private $headersection: HTMLTableSectionElement;\r\n    private showedItems: Array<BridgeElement> = [];\r\n    // BridgeElements:\r\n    private itemsIds: Object = {};\r\n    private countElement: HTMLElement;\r\n    private countColumn: HTMLElement;\r\n    private countColumnPos: number;\r\n    private resultColumn: string;\r\n    private lastSearchText: string;\r\n    private searchColumns: Array<string> = [];\r\n    private searchText: Array<string> = [];\r\n    private sortColumn: Column;\r\n    private direction: number;\r\n    private moveElement: Column = null;\r\n    private isDrag: boolean = false;\r\n    private moveTimeStamp: number;\r\n    private moveX: number;\r\n    private movePos: number;\r\n    private dragColumn: Column;\r\n    private dragPos: number;\r\n    private tableOption: HTMLTableHeaderCellElement;\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    private static indexOfChild(item: BridgeElement) {\r\n        let i: number = 0;\r\n        let child: Node = item.gui;\r\n        while ((child = child.previousSibling) !== null) {\r\n            i++;\r\n        }\r\n        return i;\r\n    }\r\n\r\n    public load(data: any): void {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n            if (data.property) {\r\n                this.property = data.property;\r\n            }\r\n\r\n            if (data.searchColumns) {\r\n                let search: Array<string> = [];\r\n                if (typeof(data.searchColumns) === 'string') {\r\n                    search = data.searchColumns.split(' ');\r\n                } else {\r\n                    search = data.searchColumns;\r\n                }\r\n                for (let z: number = 0; z < search.length; z++) {\r\n                    let item = search[z].trim();\r\n                    if (item.length > 0) {\r\n                        if (this.searchColumns.indexOf(item) < 0) {\r\n                            this.searchColumns.push(item);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        if (this.$view) {\r\n            // Must be an Update\r\n            if (data['columns']) {\r\n                // It is a json must add all things and generate HTML\r\n                for (let i in data['columns']) {\r\n                    if (data['columns'].hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    let col = this.parseData(data['columns'][i]);\r\n                    this.addHeaderInfo(col);\r\n                    this.columns.push(col);\r\n                    this.tableOption.parentElement.insertBefore(col.$element, this.tableOption);\r\n                }\r\n                for (let i in this.showedItems) {\r\n                    let item: BridgeElement = this.showedItems[i];\r\n                    let cell;\r\n                    // Now Add some Children\r\n                    while (item.gui.children.length < this.columns.length) {\r\n                        cell = document.createElement('td');\r\n                        item.gui.appendChild(cell);\r\n                    }\r\n                    // Now Remove Some Children\r\n                    while (item.gui.children.length > this.columns.length) {\r\n                        item.gui.removeChild(item.gui.children[item.gui.children.length - 1]);\r\n                    }\r\n                    for (let c: number = 0; c < this.columns.length; c++) {\r\n                        let name = this.columns[c].attribute;\r\n                        // let count = this.columns.length;\r\n                        cell = item.gui.children[c];\r\n                        cell.innerHTML = item.model.getValue(name);\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n\r\n        this.$view = document.getElementById(id);\r\n        let headerrow: HTMLTableRowElement;\r\n        if (this.$view) {\r\n            if (!this.property) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('table');\r\n            this.$owner.appendChild(this);\r\n        }\r\n        if (!this.$bodysection) {\r\n            // add tbody element if missing\r\n            this.$bodysection = document.createElement('tbody');\r\n            this.$view.appendChild(this.$bodysection);\r\n        }\r\n        if (data['classname']) {\r\n            this.$view.className = data['classname'];\r\n        } else {\r\n            this.$view.className = 'mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp';\r\n        }\r\n\r\n        this.id = id;\r\n        this.$view.id = id;\r\n        this.$view.setAttribute('type', this.constructor['name'].toLowerCase());\r\n        let counter = 0;\r\n        for (let c = 0; c < this.$view.children.length; c++) {\r\n            let row: HTMLTableRowElement = <HTMLTableRowElement>this.$view.children[c];\r\n            if (row instanceof HTMLTableSectionElement) {\r\n                if (row.tagName === 'THEAD') {\r\n                    headerrow = row;\r\n                    // Its a thead\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingHeader(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                } else {\r\n                    // Its a tbody\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingData(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                }\r\n            } else {\r\n                // fallback, if there are no thead and tbody...\r\n                if (counter === 0) {\r\n                    headerrow = row;\r\n                    this.parsingHeader(row);\r\n                } else {\r\n                    this.parsingData(row);\r\n                }\r\n            }\r\n            counter++;\r\n        }\r\n        if (!headerrow || !this.$headersection) {\r\n            if (!this.$headersection) {\r\n                // find eventually existing thead\r\n                let header = this.$view.getElementsByTagName('thead');\r\n                if (header.length === 0) {\r\n                    this.$headersection = document.createElement('thead');\r\n                    this.$view.appendChild(this.$headersection);\r\n                } else {\r\n                    // take first thead element\r\n                    this.$headersection = <HTMLTableSectionElement>header.item(0);\r\n                }\r\n            }\r\n            if (!headerrow) {\r\n                headerrow = document.createElement('tr');\r\n                this.$headersection.appendChild(headerrow);\r\n            }\r\n        }\r\n\r\n        if (data['columns']) {\r\n            // It is a json must add all things and generate HTML\r\n            for (let i in data['columns']) {\r\n                if (data['columns'].hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                let col = this.parseData(data['columns'][i]);\r\n                this.addHeaderInfo(col);\r\n                this.columns.push(col);\r\n                headerrow.appendChild(col.$element);\r\n            }\r\n            this.tableOption = document.createElement('th');\r\n            this.tableOption.classList.add('tableOption');\r\n            headerrow.appendChild(this.tableOption);\r\n            let context: HTMLElement = this.addOptionItem(null, this.tableOption, true);\r\n            let contentChild: HTMLElement = this.addOptionItem('show', context, true);\r\n            // let simpleLink: HTMLElement = this.addOptionItem('show', contentChild, false);\r\n            this.addOptionItem('show', contentChild, false);\r\n        }\r\n        this.registerEvents(['mousemove', 'mousedown', 'mouseup', 'resize', 'dragstart', 'dragover', 'drop', 'dragend']);\r\n\r\n        // Check for SearchBar\r\n        // if(data[\"searchproperty\"]){\r\n        // Create Full Row\r\n        let searchBar = document.createElement('tr');\r\n        let cell = document.createElement('td');\r\n        cell.setAttribute('colspan', '' + (this.columns.length));\r\n        searchBar.appendChild(cell);\r\n\r\n        let search = document.createElement('input');\r\n        search.className = 'search';\r\n        let that = this;\r\n        search.addEventListener('keyup', function (evt) {\r\n            that.search(evt.target['value']);\r\n        });\r\n\r\n        cell.appendChild(search);\r\n        if (this.resultColumn) {\r\n            if (this.resultColumn.indexOf('#') !== 0) {\r\n                this.countElement = document.createElement('div');\r\n                searchBar.appendChild(this.countElement);\r\n            } else {\r\n                for (let z: number = 0; z < this.$headersection.children.length; z++) {\r\n                    if (this.$headersection.children[z].innerHTML === this.resultColumn) {\r\n                        this.countColumn = <HTMLElement> this.$headersection.children[z];\r\n                        this.countColumnPos = z;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        let first = this.$headersection.children.item(0);\r\n        this.$headersection.insertBefore(searchBar, first);\r\n\r\n        this.updateElement(this.property, null);\r\n\r\n        // now update those elements, that were not loaded currently\r\n    }\r\n\r\n    public tableEvent(type: string, e: Event) {\r\n        let button: number = 0;\r\n        let eventX: number = 0;\r\n        if (e instanceof MouseEvent) {\r\n            button = e.buttons;\r\n            eventX = e.pageX;\r\n        }\r\n        if (type === 'mouseup') {\r\n            this.moveElement = null;\r\n        } else if (type === 'mousedown' || type === 'resize') {\r\n            // End to Resize\r\n            this.moveElement = null;\r\n            if (button === 1) {\r\n                let c: number;\r\n                for (c = 0; c < this.columns.length; c++) {\r\n                    if (this.columns[c].$resize === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = false;\r\n                        break;\r\n                    } else if (this.columns[c].$element === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = true;\r\n                    }\r\n                }\r\n                this.moveTimeStamp = e.timeStamp;\r\n                this.moveX = eventX;\r\n            } else {\r\n                this.moveTimeStamp = 0;\r\n            }\r\n        } else if (type === 'mousemove') {\r\n            if (button === 1 && this.moveElement) {\r\n                if (this.moveTimeStamp && e.timeStamp - this.moveTimeStamp < 2000) {\r\n                    if (this.isDrag) {\r\n                        // FIXME\r\n                    } else {\r\n                        let x = eventX - this.moveX;\r\n                        let width = this.moveElement.$element.offsetWidth;\r\n                        this.moveElement.$element.width = '' + (width + x);\r\n                        e.stopPropagation();\r\n                    }\r\n                }\r\n                this.moveX = eventX;\r\n                this.moveTimeStamp = e.timeStamp;\r\n            }\r\n        } else if (this.isDrag) {\r\n            this.columnDragEvent(type, <DragEvent> e);\r\n        }\r\n    }\r\n\r\n    public parsingHeader(row: HTMLTableRowElement) {\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let column: HTMLTableHeaderCellElement = <HTMLTableHeaderCellElement>row.children[i];\r\n            let id = column.innerHTML.trim();\r\n            let col: Column = null;\r\n            for (let c in this.columns) {\r\n                if (this.columns.hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                if (this.columns[c].label === id) {\r\n                    col = this.columns[c];\r\n                    col.$element = column;\r\n                    break;\r\n                }\r\n            }\r\n            if (col === null) {\r\n                col = new Column();\r\n                col.label = id;\r\n                col.attribute = column.getAttribute('attribute');\r\n                col.$element = column;\r\n                this.columns.push(col);\r\n            }\r\n            this.addHeaderInfo(col);\r\n        }\r\n    }\r\n\r\n    public parsingData(row: HTMLTableRowElement) {\r\n        let id = row.getAttribute('id');\r\n        let item: Data = this.$owner.getItem(id);\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let cell: HTMLTableCellElement = <HTMLTableCellElement>row.children[i];\r\n            let colAttribute = this.columns[i].attribute;\r\n            if (colAttribute.indexOf('\\.') < 0) {\r\n                item[colAttribute] = cell.innerHTML.trim();\r\n            }\r\n        }\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: Object, newValue: Object) {\r\n        if (entity) {\r\n            // Check for Show\r\n            if (this.property && !entity.hasProperty(property)) {\r\n                return;\r\n            }\r\n        }\r\n        if (entity.id === undefined) {\r\n            return;\r\n        }\r\n        let item: BridgeElement = <BridgeElement>this.itemsIds[entity.id];\r\n        let row: HTMLTableRowElement;\r\n        if (!item) {\r\n            item = new BridgeElement(entity);\r\n            this.items.push(item);\r\n            this.itemsIds[entity.id] = item;\r\n        }\r\n        row = this.cells[entity.id];\r\n        if (row) {\r\n            item.gui = row;\r\n        }\r\n        if (this.searching(item) === false) {\r\n            return;\r\n        }\r\n        let cell;\r\n        let showItem = false;\r\n\r\n        if (!row) {\r\n            showItem = true;\r\n            row = document.createElement('tr');\r\n            let count = this.columns.length;\r\n            for (let i = 0; i < count; i++) {\r\n                cell = document.createElement('td');\r\n                row.appendChild(cell);\r\n            }\r\n            this.cells[entity.id] = row;\r\n            item.gui = row;\r\n        }\r\n        for (let c: number = 0; c < this.columns.length; c++) {\r\n            let name = this.columns[c].attribute;\r\n            if (name === property) {\r\n                cell = row.children[c];\r\n                cell.innerHTML = <string>newValue;\r\n            }\r\n        }\r\n        if (showItem) {\r\n            this.showItem(item, true);\r\n        }\r\n        // super.propertyChange(entity, property, newValue, oldValue);\r\n    }\r\n\r\n    public sort(column: Column) {\r\n        if (this.sortColumn === column) {\r\n            if (this.direction === 1) {\r\n                this.direction = -1;\r\n                column.$element.classList.remove('asc');\r\n                column.$element.classList.add('desc');\r\n            } else {\r\n                this.direction = 1;\r\n                column.$element.classList.remove('desc');\r\n                column.$element.classList.add('asc');\r\n            }\r\n        } else {\r\n            if (this.sortColumn !== null) {\r\n                this.sortColumn.$element.classList.remove('desc');\r\n                this.sortColumn.$element.classList.remove('asc');\r\n            }\r\n            this.sortColumn = column;\r\n            this.sortColumn.$element.classList.add('asc');\r\n            this.direction = 1;\r\n        }\r\n        let that = this;\r\n        let sort = function (a: BridgeElement, b: BridgeElement) {\r\n            return that.sorting(a, b);\r\n        };\r\n        this.showedItems.sort(sort);\r\n        let len: number = this.showedItems.length;\r\n        let body = this.$bodysection;\r\n        let i = 0;\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            if (i !== Table.indexOfChild(item)) {\r\n                break;\r\n            }\r\n            i = i + 1;\r\n        }\r\n        while (body.children.length > i) {\r\n            body.removeChild(body.children.item(body.children.length - 1));\r\n        }\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            body.appendChild(item.gui);\r\n            i = i + 1;\r\n        }\r\n\r\n        //      body.removeChild(item.gui);\r\n        //      body.remove\r\n    }\r\n\r\n    public sorting(a: BridgeElement, b: BridgeElement): number {\r\n        let path: string[] = this.sortColumn.attribute.split('.');\r\n        let itemA = a.model.prop;\r\n        let itemB = b.model.prop;\r\n        let check = this.sortColumn.attribute;\r\n        for (let p = 0; p < path.length; p++) {\r\n            check = path[p];\r\n            if (itemA[check]) {\r\n                itemA = itemA[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n            if (itemB[check]) {\r\n                itemB = itemB[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n        if (itemA !== itemB) {\r\n            if (this.direction === 1) {\r\n                return (itemA < itemB) ? -1 : 1;\r\n            }\r\n            return (itemA < itemB) ? 1 : -1;\r\n\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    // Searching\r\n    public search(origSearchText: string): void {\r\n        if (!origSearchText) {\r\n            origSearchText = '';\r\n        }\r\n        let searchText: string = origSearchText.trim().toLowerCase();\r\n        if (searchText === this.lastSearchText && searchText !== '') {\r\n            return; // <==== nothing to be done\r\n        }\r\n        let oldSearch: string = this.lastSearchText;\r\n        this.lastSearchText = searchText;\r\n\r\n        this.parseSearchArray();\r\n        if (searchText !== '' && oldSearch !== null && searchText.indexOf(oldSearch) >= 0 && searchText.indexOf('|') < 0) {\r\n            this.searchArray(this.showedItems);\r\n        } else {\r\n            this.searchSet(this.items);\r\n        }\r\n        this.refreshCounter();\r\n    }\r\n\r\n    public refreshCounter() {\r\n        if (this.countColumn) {\r\n            this.countColumn.innerHTML = this.columns[this.countColumnPos].label + ' (' + this.showedItems.length + ')';\r\n        }\r\n        // var countElement = document.getElementById('talkCount');\r\n        //  if (countElement) {\r\n        //     var txt = (this.showedItems.size() > 0 && searchText.length > 0 ) ? this.options.TEXT_SEARCHLIST : this.options.TEXT_SEARCHFULLLIST;\r\n        //     countElement.innerHTML = txt.replace(\"%LEN%\", this.root['children'].length).replace(\"%COUNT%\", this.showedItems.size()).replace(\"%SEARCH%\", origSearchText);\r\n        // }\r\n        // if (this.countColumn) {\r\n        //     this.countColu1mn.innerHTML = this.countColumn[\"label\"] + \" (\" + this.showedItems.size() + \")\";\r\n        // }\r\n    }\r\n\r\n    public parseSearchArray() {\r\n        let pos: number = 0;\r\n        let split: Array<string> = [];\r\n        let quote: boolean = false;\r\n        for (let i: number = 0; i < this.lastSearchText.length; i++) {\r\n            if ((this.lastSearchText.charAt(i) === ' ') && !quote) {\r\n                let txt = this.lastSearchText.substring(pos, i).trim();\r\n                if (txt.length > 0) {\r\n                    split.push(txt);\r\n                }\r\n                pos = i + 1;\r\n            } else if (this.lastSearchText.charAt(i) === '\\\"') {\r\n                if (quote) {\r\n                    let txt = this.lastSearchText.substring(pos, i).trim();\r\n                    if (txt.length > 0) {\r\n                        split.push(txt);\r\n                    }\r\n                    pos = i + 1;\r\n                } else {\r\n                    pos = i + 1;\r\n                }\r\n                quote = !quote;\r\n            }\r\n        }\r\n        if (pos < this.lastSearchText.length) {\r\n            split.push(this.lastSearchText.substring(pos, this.lastSearchText.length).trim());\r\n        }\r\n        this.searchText = split;\r\n        return split;\r\n    }\r\n\r\n    public searchArray(root: Array<BridgeElement>) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let i: number = 0; i < root.length; i++) {\r\n            let item: BridgeElement = root[i];\r\n            this.showItem(item, this.searching(item));\r\n        }\r\n    }\r\n\r\n    public searchSet(root: BridgeElement[]) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let item of root) {\r\n            let child: BridgeElement = <BridgeElement>item;\r\n            this.showItem(child, this.searching(child));\r\n        }\r\n    }\r\n\r\n    public showItem(item: BridgeElement, visible: boolean) {\r\n        if (visible) {\r\n            this.showedItems.push(item);\r\n            this.$bodysection.appendChild(item.gui);\r\n        } else if (item.gui && item.gui.parentElement) {\r\n            this.$bodysection.removeChild(item.gui);\r\n        }\r\n    }\r\n\r\n    public searching(item: BridgeElement): boolean {\r\n        let fullText: string = '';\r\n        for (let i: number = 0; i < this.searchColumns.length; i++) {\r\n            fullText = fullText + ' ' + item.model.getValue(this.searchColumns[i]);\r\n        }\r\n        fullText = fullText.trim().toLowerCase();\r\n        for (let z: number = 0; z < this.searchText.length; z++) {\r\n            if ('' !== this.searchText[z]) {\r\n                let orSplit: Array<string>;\r\n                if (this.searchText[z].indexOf('|') > 0) {\r\n                    orSplit = this.searchText[z].split('|');\r\n                } else {\r\n                    orSplit = [this.searchText[z]];\r\n                }\r\n                let o: number = 0;\r\n                for (; o < orSplit.length; o++) {\r\n                    let pos: number = orSplit[o].indexOf(':');\r\n                    if (orSplit[o].indexOf('#') === 0 && pos > 1) {\r\n                        // if (searchProperties.contains(propString)) {\r\n                        let value: string = orSplit[o].substring(pos + 1);\r\n                        let column: string = orSplit[o].substring(1, pos - 1);\r\n                        let dataValue: Object = item.model.getValue(column);\r\n                        if (dataValue) {\r\n                            if (dataValue.toString().toLowerCase().indexOf(value) >= 0) {\r\n                                // Search for simple Property\r\n                                break;\r\n                            }\r\n                        }\r\n                    } else if (orSplit[o].length > 1 && orSplit[o].indexOf('-') === 0) {\r\n                        if (fullText.indexOf(orSplit[o].substring(1)) < 0) {\r\n                            break;\r\n                        }\r\n                    } else if (fullText.indexOf(orSplit[o]) >= 0) {\r\n                        // his search word is found in full text\r\n                        break;\r\n                    }\r\n                }\r\n                if (o === orSplit.length) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public getColumn(): Column[] {\r\n        return this.columns;\r\n    }\r\n\r\n    public updateElement(property: string, value: string): void {\r\n        // first clear all elements inside the table:\r\n        for (let item of this.items) {\r\n            if (item instanceof BridgeElement) {\r\n                (<BridgeElement>item).model.removeListener(this);\r\n            }\r\n        }\r\n\r\n        this.items = [];\r\n        this.itemsIds = {};\r\n\r\n        // load all entitys that match the property\r\n        if (this.property !== undefined) {\r\n            let items = this.$owner.getItems();\r\n            for (let j in items) {\r\n                if (items.hasOwnProperty(j)) {\r\n                    let item = items[j];\r\n                    if (item instanceof Data) {\r\n                        if (property === j) {\r\n                            // if (property == item.property) {\r\n                            let i = new BridgeElement(<Data>item);\r\n                            this.items.push(i);\r\n                            this.itemsIds[item.id] = i;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            this.redrawAllElements();\r\n        }\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        if (this.$owner !== null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    protected redrawAllElements() {\r\n        let children: HTMLCollection = this.$bodysection.children;\r\n        // remove old children\r\n        for (let i = 0; i < children.length; i++) {\r\n            let child = children.item(i);\r\n            // remove child\r\n            this.$bodysection.removeChild(child);\r\n        }\r\n\r\n        // load new children\r\n        for (let obj of this.items) {\r\n            // register listeners\r\n            obj.model.addListener(this);\r\n            // create tr\r\n            let row = this.createRow(obj);\r\n            this.$bodysection.appendChild(row);\r\n            this.cells[obj.id] = row;\r\n        }\r\n    }\r\n\r\n    private parseData(column: any): Column {\r\n        let col = new Column();\r\n        col.label = column.label || column.id;\r\n        col.attribute = column.attribute || column.label || column.id;\r\n        col.$element = document.createElement('th');\r\n        col.$element.innerHTML = col.label;\r\n        col.$element.draggable = true;\r\n\r\n        // resize Header\r\n        col.$resize = document.createElement('div');\r\n        col.$resize.classList.add('resize');\r\n        col.$element.appendChild(col.$resize);\r\n\r\n        return col;\r\n    }\r\n\r\n    private createRow(data: BridgeElement): HTMLTableRowElement {\r\n        let tr: HTMLTableRowElement = document.createElement('tr');\r\n\r\n        for (let id of this.columns) {\r\n            let td: HTMLTableDataCellElement = document.createElement('td');\r\n            tr.appendChild(td);\r\n            td.innerHTML = data.model.getValue(id.attribute);\r\n        }\r\n        return tr;\r\n    }\r\n\r\n    private addHeaderInfo(col: Column) {\r\n        let element: HTMLTableCellElement = col.$element;\r\n        let that = this;\r\n        element.classList.add('sort');\r\n        element.addEventListener('click',\r\n            function () {\r\n                that.sort(col);\r\n            },\r\n            false);\r\n    }\r\n\r\n    private columnDragEvent(type: string, e: DragEvent) {\r\n        if (type === 'dragstart') {\r\n            // Target (this) element is the source node.\r\n            this.moveElement.$element.style.opacity = '0.4';\r\n            e.dataTransfer.effectAllowed = 'move';\r\n            e.dataTransfer.setData('text/json', JSON.stringify(Util.toJson(this.moveElement)));\r\n        } else if (type === 'dragenter') {\r\n            // TO Nothing\r\n        } else if (type === 'dragleave') {\r\n            this.moveElement.$element.classList.remove('over');\r\n        } else if (type === 'dragover') {\r\n            if (e.preventDefault) {\r\n                e.preventDefault(); // Necessary. Allows us to drop.\r\n            }\r\n            for (let c = 0; c < this.columns.length; c++) {\r\n                if (this.columns[c].$element === e.target) {\r\n                    this.dragColumn = this.columns[c];\r\n                    this.dragPos = c;\r\n                    this.columns[c].$element.classList.add('over');\r\n                } else {\r\n                    this.columns[c].$element.classList.remove('over');\r\n                }\r\n            }\r\n            if (e.target === this.tableOption) {\r\n                this.tableOption.classList.add('over');\r\n                this.dragPos = this.columns.length;\r\n            } else {\r\n                this.tableOption.classList.remove('over');\r\n            }\r\n            e.dataTransfer.dropEffect = 'move';  // See the section on the DataTransfer object.\r\n        } else if (type === 'drop') {\r\n            // this / e.target is current target element.\r\n            if (e.stopPropagation) {\r\n                e.stopPropagation(); // stops the browser from redirecting.\r\n            }\r\n            if (this.movePos === this.dragPos) {\r\n                return;\r\n            }\r\n            // movePos -> dragPos\r\n            // See the section on the DataTransfer object.\r\n            // DataModel\r\n            this.columns.splice(this.movePos, 1);\r\n            if (this.movePos >= this.dragPos) {\r\n                this.columns.splice(this.dragPos, 0, this.moveElement);\r\n            } else {\r\n                this.columns.splice(this.dragPos - 1, 0, this.moveElement);\r\n            }\r\n\r\n            // Header Line\r\n            let line: HTMLElement = this.moveElement.$element.parentElement;\r\n            line.removeChild(this.moveElement.$element);\r\n            if (this.dragPos < this.columns.length) {\r\n                line.insertBefore(this.moveElement.$element, this.dragColumn.$element);\r\n            } else {\r\n                line.insertBefore(this.moveElement.$element, this.tableOption);\r\n            }\r\n\r\n            let oldElement: Element;\r\n            let newElement: Element;\r\n\r\n            // Now all Childs\r\n            for (let i = 0; i < this.$bodysection.children.length; i++) {\r\n                // Each line\r\n                line = <HTMLElement>this.$bodysection.children.item(i);\r\n                oldElement = line.children.item(this.movePos);\r\n                newElement = line.children.item(this.dragPos);\r\n                line.removeChild(oldElement);\r\n                line.insertBefore(oldElement, newElement);\r\n            }\r\n        } else if (type === 'dragend') {\r\n            // this/e.target is the source node.\r\n            this.moveElement.$element.style.opacity = '1';\r\n            for (let i = 0; i < this.columns.length; i++) {\r\n                this.columns[i].$element.classList.remove('over');\r\n            }\r\n            this.tableOption.classList.remove('over');\r\n        }\r\n    }\r\n\r\n    private addOptionItem(label: string, parent: HTMLElement, sub: boolean): HTMLElement {\r\n        let labelControl;\r\n        if (label) {\r\n            labelControl = document.createElement('a');\r\n            labelControl.appendChild(document.createTextNode(label));\r\n            labelControl.href = 'javascript:void(0);';\r\n            parent.appendChild(labelControl);\r\n        }\r\n        if (sub) {\r\n            let context = document.createElement('div');\r\n            context.classList.add('dropdown-content');\r\n            context.style.setProperty('position', 'absolute');\r\n            parent.appendChild(context);\r\n\r\n            /* When the user clicks on the button,\r\n             toggle between hiding and showing the dropdown content */\r\n            parent.addEventListener(\r\n                'click',\r\n                function () {\r\n                    context.classList.toggle('show');\r\n                },\r\n                false);\r\n            return context;\r\n        }\r\n        return labelControl;\r\n    }\r\n\r\n    private registerEvents(events: string[]) {\r\n        let that = this;\r\n        for (let i = 0; i < events.length; i++) {\r\n            this.$view.addEventListener(events[i], function (evt) {\r\n                return that.tableEvent(events[i], evt);\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\nclass Column {\r\n    label: string;\r\n    attribute: string;\r\n    $element: HTMLTableHeaderCellElement;\r\n    $resize: HTMLDivElement;\r\n    visible: boolean;\r\n}\r\n","import { AutoComplete } from './AutoComplete';\r\nimport { BR } from './BR';\r\nimport { Div } from './Div';\r\nimport { Label } from './Label';\r\n\r\nexport * from './Node';\r\nexport * from './Class';\r\nexport * from './SO';\r\nexport * from './Symbol';\r\n\r\nexport * from './BR';\r\nexport * from './Button';\r\nexport * from './Div';\r\nexport * from './Form';\r\nexport * from './Input';\r\nexport * from './Label';\r\nexport * from './Table';\r\nexport * from './HTML';\r\nexport * from './Dice';\r\nexport * from './AutoComplete';\r\nexport * from './Attribute';\r\nexport * from './Method';\r\nexport * from './ClazzProperty';\r\n\r\nnew AutoComplete();\r\nnew BR();\r\nnew Div();\r\nnew Label();\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class AddNode implements EventHandler {\r\n\r\n    public MIN_SIZE_TO_ADD_NODE: number = 30;\r\n    public MIN_SIZE_TO_ADD_TEXT: number = 10;\r\n    private graph: Graph;\r\n    private svgRect: SVGSVGElement;\r\n    private svgGroupAddNode: SVGSVGElement;\r\n    private svgTextAddNode: SVGSVGElement;\r\n    private svgTextRectAddNode: SVGSVGElement;\r\n    private isRectDrawing: boolean;\r\n    private isDrawToLeft: boolean;\r\n    private isDrawToTop: boolean;\r\n    private isBigEnoughForAddNode: boolean;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(AddNode.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(AddNode.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!this.canHandle()) {\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element.id !== 'RootElement') {\r\n            return false;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element.id === 'RootElement') {\r\n                    this.start(event, element);\r\n\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mousemove':\r\n                this.drawRect(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.removeRect();\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.addNode();\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawRect(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isRectDrawing) {\r\n            return;\r\n        }\r\n\r\n        evt.stopPropagation();\r\n\r\n        let width = Util.getEventX(evt) - this.x;\r\n        let height = Util.getEventY(evt) - this.y;\r\n\r\n        // rectangle is in a negative area, drawn to upper case. not possibble with svg\r\n        if (width < 0) {\r\n            this.isDrawToLeft = true;\r\n            width *= -1;\r\n        } else {\r\n            this.isDrawToLeft = false;\r\n        }\r\n\r\n        if (height < 0) {\r\n            this.isDrawToTop = true;\r\n            height *= -1;\r\n        } else {\r\n            this.isDrawToTop = false;\r\n        }\r\n\r\n        if (width > this.MIN_SIZE_TO_ADD_NODE && height > this.MIN_SIZE_TO_ADD_NODE) {\r\n            this.isBigEnoughForAddNode = true;\r\n        } else {\r\n            this.isBigEnoughForAddNode = false;\r\n        }\r\n\r\n        this.graph.root.style.cursor = 'pointer';\r\n\r\n        // if line wasnt draw\r\n        if (!this.svgRect) {\r\n\r\n            let rectAddNode = Util.createShape({\r\n                tag: 'rect',\r\n                id: 'addNodeRect',\r\n                x: this.x,\r\n                y: this.y,\r\n                width: 1,\r\n                height: 1,\r\n                class: 'SVGAddNode'\r\n            });\r\n\r\n            let group = Util.createShape({ tag: 'g', id: 'groupAddNode' });\r\n            group.appendChild(rectAddNode);\r\n\r\n            this.graph.root.appendChild(group);\r\n            this.svgRect = rectAddNode;\r\n            this.svgGroupAddNode = group;\r\n        }\r\n        else {\r\n\r\n            let svgRectBBox = this.svgRect.getBBox();\r\n\r\n            // if rect is big enough, show text as helper\r\n            if ((svgRectBBox.width > this.MIN_SIZE_TO_ADD_TEXT\r\n                || svgRectBBox.height > this.MIN_SIZE_TO_ADD_TEXT) && !this.svgTextAddNode) {\r\n\r\n                let textAddNode = Util.createShape({\r\n                    tag: 'text',\r\n                    x: this.x,\r\n                    y: this.y - 5,\r\n                    'font-family': 'Verdana',\r\n                    'font-size': 12,\r\n                    fill: 'black'\r\n                });\r\n                textAddNode.textContent = 'Hold on and move to create a new class';\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n\r\n\r\n                // get correct size of text node\r\n                let sizeClientRect: ClientRect = textAddNode.getBoundingClientRect();\r\n\r\n                let rectBackgroundForText = Util.createShape({\r\n                    tag: 'rect',\r\n                    x: this.x,\r\n                    y: this.y - sizeClientRect.height,\r\n                    width: sizeClientRect.width,\r\n                    height: sizeClientRect.height,\r\n                    fill: '#DDD',\r\n                    'stroke-width': 0\r\n                });\r\n\r\n                this.svgTextRectAddNode = rectBackgroundForText;\r\n                this.svgTextAddNode = textAddNode;\r\n                this.svgGroupAddNode.appendChild(rectBackgroundForText);\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n            }\r\n\r\n            if (this.isDrawToLeft) {\r\n                this.svgRect.setAttributeNS(null, 'x', '' + Util.getEventX(evt));\r\n            }\r\n\r\n            if (this.isDrawToTop) {\r\n                this.svgRect.setAttributeNS(null, 'y', '' + Util.getEventY(evt));\r\n            }\r\n\r\n            // set width and height\r\n            this.svgRect.setAttributeNS(null, 'width', width.toString());\r\n            this.svgRect.setAttributeNS(null, 'height', height.toString());\r\n\r\n            // set color\r\n            if (this.isBigEnoughForAddNode) {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode-ready');\r\n\r\n                // draw text\r\n            }\r\n            else {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeRect(): void {\r\n        this.isRectDrawing = false;\r\n        this.isBigEnoughForAddNode = false;\r\n\r\n        this.graph.root.style.cursor = 'default';\r\n\r\n        if (this.svgGroupAddNode) {\r\n            this.graph.root.removeChild(this.svgGroupAddNode);\r\n            this.svgGroupAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgRect) {\r\n            this.svgRect = undefined;\r\n        }\r\n\r\n        if (this.svgTextAddNode) {\r\n            this.svgTextAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgTextRectAddNode) {\r\n            this.svgTextRectAddNode = undefined;\r\n        }\r\n    }\r\n\r\n    private addNode(): void {\r\n\r\n        if (!this.isBigEnoughForAddNode) {\r\n            this.removeRect();\r\n            return;\r\n        }\r\n\r\n        this.removeRect();\r\n        let node = this.graph.addElementWithValues('Class', { x: this.x, y: this.y });\r\n        this.graph.drawElement(node);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isRectDrawing) {\r\n            return;\r\n        }\r\n        this.isRectDrawing = true;\r\n\r\n        this.x = Util.getEventX(evt);\r\n        this.y = Util.getEventY(evt);\r\n    }\r\n\r\n}\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement, Point } from '../elements/BaseElements';\r\nimport { GraphModel } from '../elements/Model';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Control } from '../Control';\r\nimport { Util } from '../util';\r\n\r\nexport class Drag implements EventHandler {\r\n\r\n    private element: DiagramElement;\r\n    private svgElement: SVGSVGElement;\r\n    private dragging = false;\r\n    private reinsert = false;\r\n    private mouseOffset = new Point();\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        if (!this.canHandle()) {\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if ((!this.dragging) && (element.id !== 'RootElement')) {\r\n                    this.element = element;\r\n                    this.svgElement = <SVGSVGElement>element.$view;\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mouseup':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n\r\n                break;\r\n            case 'mousemove':\r\n                if (this.dragging) {\r\n                    this.drag(event, element);\r\n                }\r\n                break;\r\n            case 'mouseleave':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Drag.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Drag.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private reset() {\r\n        this.dragging = false;\r\n        this.svgElement.style.cursor = 'pointer';\r\n\r\n        /*  WORKAROUND\r\n            Chrome got problem with the Node.appendChild() method.\r\n            Sometimes it works, sometimes not.\r\n            So the background is, in the drag method will the current element be appended\r\n            to front of the svg root.\r\n            If this happend, the click event won't fire.\r\n            So it will be fired manually.\r\n            This problem occurs only in chrome.\r\n        */\r\n        if (Util.isChrome()) {\r\n            let clickEvt = Util.createCustomEvent('click');\r\n            this.svgElement.dispatchEvent(clickEvt);\r\n        }\r\n    }\r\n\r\n    private start(evt: Event | any, element: Control) {\r\n\r\n        this.dragging = true;\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n        this.reinsert = true;\r\n\r\n        this.svgElement.style.cursor = 'move';\r\n    }\r\n\r\n    private drag(evt: Event | any, element: DiagramElement) {\r\n\r\n        if (this.reinsert) {\r\n            if (this.element.id !== 'RootElement') {\r\n                // nesseccary to set the dragged object on top of svg children\r\n                this.graph.root.appendChild(this.svgElement);\r\n            }\r\n\r\n            let dragEvent = Util.createCustomEvent('drag');\r\n            element.$view.dispatchEvent(dragEvent);\r\n        }\r\n        this.reinsert = false;\r\n\r\n        evt.stopPropagation();\r\n\r\n        const translation = this.svgElement.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        const sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        const transX = sx + evt.clientX - this.mouseOffset.x;\r\n        const transY = sy + evt.clientY - this.mouseOffset.y;\r\n        this.svgElement.setAttributeNS(null, 'transform', 'translate(' + transX + ' ' + transY + ')');\r\n        this.element.getPos().addNum(transX - sx, transY - sy);\r\n\r\n        if (this.element instanceof Node) {\r\n            (<Node>this.element).redrawEdges();\r\n        }\r\n\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n\r\n\r\n        // resize svg root\r\n        let maxX = this.element.getPos().x + this.element.getSize().x;\r\n        let maxY = this.element.getPos().y + this.element.getSize().y;\r\n\r\n        let domRectRoot = this.graph.root.getBoundingClientRect();\r\n        if(!domRectRoot){\r\n            return;\r\n        }\r\n\r\n        if(maxX > domRectRoot.width){\r\n            this.graph.root.setAttributeNS(null, 'width', '' + maxX);\r\n        }\r\n        \r\n        if(maxY > domRectRoot.height){\r\n            this.graph.root.setAttributeNS(null, 'height', '' + maxY);\r\n        }\r\n    }\r\n}\r\n","import PropertyChangeSupport from '../PropertyChangeSupport';\r\nimport Data from '../Data';\r\nimport {Adapter} from '../Adapter';\r\nimport ClazzProperty from '../elements/nodes/ClazzProperty';\r\n\r\nexport class GraphListener implements PropertyChangeSupport {\r\n    private $owner: ClazzProperty;\r\n\r\n    constructor(owner: ClazzProperty) {\r\n        this.$owner = owner;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        let adapter = this.$owner.getRoot().getAdapter();\r\n        if (adapter) {\r\n            // messages.add(\"{\\\"class\\\":\\\"de.uniks.networkparser.test.model.House\\\",\\\"id\\\":\\\"H1\\\",\\\"rem\\\":{\\\"floor\\\":4},\\\"upd\\\":{\\\"floor\\\":42}}\");\r\n            let myId =  this.$owner.$owner.getId();\r\n            if (myId && myId.length > 0) {\r\n                let pos = myId.indexOf(':');\r\n                if (pos > 0) {\r\n                    myId = myId.substring(0, pos).trim();\r\n                }\r\n            }\r\n            let myName = this.$owner.getName();\r\n            let remJson = {};\r\n            remJson[myName] = oldValue;\r\n            let updJson = {};\r\n            updJson[myName] = newValue;\r\n            let json = {};\r\n            json['id'] = myId;\r\n            json['rem'] = remJson;\r\n            json['upd'] = updJson;\r\n            let message = JSON.stringify(json);\r\n            (<Adapter> adapter).update(message);\r\n        }\r\n    }\r\n}\r\n","import {Graph} from '../elements/';\r\nimport {EventHandler, EventBus} from '../EventBus';\r\nimport {DiagramElement} from '../elements/';\r\nimport {Util} from '../util';\r\n\r\nexport class ImportFile implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(ImportFile.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(ImportFile.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        let type: string = typeof event;\r\n        if (type !== 'DragEvent') {\r\n            return false;\r\n        }\r\n        let evt: DragEvent = <DragEvent>event;\r\n        if (evt.type === 'dragover') {\r\n            this.handleDragOver(evt);\r\n        } else if (evt.type === 'dragleave') {\r\n            if (this.graph.$view !== evt.target) {\r\n                return false;\r\n            }\r\n            this.setBoardStyle('dragleave');\r\n        } else if (evt.type === 'drop') {\r\n            this.handleLoadFile(evt);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public setBoardStyle(typ: string): boolean {\r\n        let b = this.graph.$view;\r\n        Util.removeClass(b, 'Error');\r\n        Util.removeClass(b, 'Ok');\r\n        Util.removeClass(b, 'Add');\r\n        if (typ === 'dragleave') {\r\n            if (b['errorText']) {\r\n                b.removeChild(b['errorText']);\r\n                b['errorText'] = null;\r\n            }\r\n            return true;\r\n        }\r\n        Util.addClass(b, typ);\r\n        if (typ === 'Error') {\r\n            if (!b['errorText']) {\r\n                b['errorText'] = Util.create({tag: 'div', style: 'margin-top: 30%', value: 'NO TEXTFILE'});\r\n                b.appendChild(b['errorText']);\r\n            }\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private handleLoadFile(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n\r\n        let files = evt.dataTransfer.files; // FileList object.\r\n\r\n        if (files.length > 1) {\r\n            evt.dataTransfer.dropEffect = 'none';\r\n            return;\r\n        }\r\n\r\n        // files is a FileList of File objects. List some properties.\r\n        let reader  = new FileReader();\r\n        let output = [];\r\n        let htmlResult = '';\r\n        let that = this;\r\n        for (let i = 0, f; f = files[i]; i++) {\r\n            reader.onload = function(event) {\r\n                htmlResult = event.target['result'];\r\n                console.log('fileContent: ' + htmlResult);\r\n\r\n                // CHANGE TO INTERNAL OBJECT\r\n                if (that.graph) {\r\n                    that.graph.import(htmlResult);\r\n                }\r\n            };\r\n            reader.readAsText(f);\r\n        }\r\n        this.setBoardStyle('dragleave');\r\n    }\r\n\r\n    private handleDragOver(evt: DragEvent): void {\r\n        let error: boolean = true, n: string, f;\r\n        let files = evt.dataTransfer.files;\r\n        // process all File objects\r\n        if (files && files.length > 0) {\r\n            for (let i: number = 0; i < files.length; i += 1) {\r\n                f = files[i];\r\n                if (f.type.indexOf('text') === 0) {\r\n                    error = false;\r\n                } else if (f.type === '') {\r\n                    n = f.name.toLowerCase();\r\n                    if (n.indexOf('json', n.length - 4) !== -1) {\r\n                        error = false;\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            let items = evt.dataTransfer.items;\r\n            if (items && items.length > 0) {\r\n                for (let z = 0; z < items.length; z ++) {\r\n                    if (items[z].type === '' || items[z].type === 'text/plain') {\r\n                        error = false;\r\n                    }\r\n                }\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.\r\n        if (error) {\r\n            this.dragStyler(evt, 'Error');\r\n        } else if (evt.ctrlKey) {\r\n            this.dragStyler(evt, 'Add');\r\n        } else {\r\n            this.dragStyler(evt, 'Ok');\r\n        }\r\n        /* //evt.target['className'] += ' diagramLoadFile';\r\n        '//console.log('handDragOver');*/\r\n    }\r\n\r\n    private dragStyler(event: Event, typ: string) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n        this.setBoardStyle(typ);\r\n    }\r\n\r\n    private handleDragLeave(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n        evt.dataTransfer.dropEffect = 'link'; // Explicitly show this is a copy.\r\n        evt.target['className'] = 'diagram';\r\n        console.log('handDragLeave');\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Class } from '../elements/nodes/Class';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Association } from '../elements/index';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class NewEdge implements EventHandler {\r\n    private graph: Graph;\r\n    private svgLine: SVGSVGElement;\r\n    private isEdgeDrawing: boolean;\r\n    private sourceNode: Node;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    private lastTargetNode: Node;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(NewEdge.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(NewEdge.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!((<KeyboardEvent>event).ctrlKey || EventBus.isHandlerActiveOrFree('NewEdge', true))) {\r\n            this.removeLine();\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element instanceof Node) {\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n\r\n            case 'mousemove':\r\n                this.drawEdge(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.setNewEdgeToNode(event);\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default: break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawEdge(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        let lineToX = Util.getEventX(evt);\r\n        let lineToy = Util.getEventY(evt);\r\n\r\n        let path = `M${this.x} ${this.y} L${lineToX} ${lineToy}`;\r\n        // if line wasnt draw\r\n        if (!this.svgLine) {\r\n\r\n            let attr = {\r\n                tag: 'path',\r\n                id: 'newEdgePath',\r\n                d: path,\r\n                class: 'SVGEdge'\r\n            };\r\n\r\n            let shape = Util.createShape(attr);\r\n            this.svgLine = shape;\r\n\r\n            this.graph.root.appendChild(shape);\r\n            this.graph.root.appendChild(this.sourceNode.$view);\r\n        }\r\n        else {\r\n\r\n            // set new L path\r\n            this.svgLine.setAttributeNS(null, 'd', path);\r\n\r\n            // get node from position\r\n            let targetNode = this.graph.$graphModel.getNodeByPosition(Util.getEventX(evt), Util.getEventY(evt));\r\n\r\n            // if some targetnode is available, so highlight the node\r\n            if (targetNode) {\r\n\r\n                // reset the last one\r\n                if (this.lastTargetNode && this.lastTargetNode.id !== targetNode.id) {\r\n                    this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n                }\r\n\r\n                this.lastTargetNode = targetNode;\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz-drawedge');\r\n            }\r\n            else if (this.lastTargetNode) {\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeLine(): void {\r\n        this.isEdgeDrawing = false;\r\n\r\n        if (this.svgLine) {\r\n            this.graph.root.removeChild(this.svgLine);\r\n            this.svgLine = null;\r\n        }\r\n\r\n        if (this.lastTargetNode) {\r\n            this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n        }\r\n    }\r\n\r\n    private setNewEdgeToNode(event: Event | any): void {\r\n        // get node from position\r\n        let targetNode = this.graph.$graphModel\r\n            .getNodeByPosition(Util.getEventX(event), Util.getEventY(event));\r\n\r\n        if (!targetNode) {\r\n            this.removeLine();\r\n\r\n            return;\r\n        }\r\n\r\n        this.removeLine();\r\n        let edgeType = this.sourceNode.$defaulEdgeType || 'Association';\r\n\r\n        let jsonData = {\r\n            type: edgeType,\r\n            source: this.sourceNode.id,\r\n            target: targetNode.id\r\n        };\r\n\r\n        let newEdge = this.graph.$graphModel.addEdge(<any>jsonData, true);\r\n        this.graph.drawElement(newEdge);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        this.isEdgeDrawing = true;\r\n        this.sourceNode = element as Class;\r\n\r\n        this.x = this.sourceNode.getPos().x + (this.sourceNode.getSize().x / 2);\r\n        this.y = this.sourceNode.getPos().y + (this.sourceNode.getSize().y / 2);\r\n\r\n        // TODO: get this into util or select\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Node } from '../elements/nodes';\r\nimport { Association } from '../elements/edges';\r\nimport { Util } from '../util';\r\nimport { SymbolLibary } from '../elements/nodes/Symbol';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\nimport Attribute from '../elements/nodes/Attribute';\r\n\r\nexport class Select implements EventHandler {\r\n\r\n    private deleteShape: SVGSVGElement;\r\n    private addEdgeShape: SVGSVGElement;\r\n    private copyNodeShape: SVGSVGElement;\r\n    private graph: Graph;\r\n    private padding = 5;\r\n\r\n    private lastSelectedNode: Element;\r\n    private lastSelectedEdge: Element;\r\n\r\n    private isDragged: boolean;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.deleteShape = SymbolLibary.drawSVG({ type: 'Basket', background: true, id: 'trashcan', tooltip: 'Delete class' });\r\n        this.copyNodeShape = SymbolLibary.drawSVG({ type: 'Copynode', background: true, id: 'copyNode', tooltip: 'Copy class' });\r\n        this.addEdgeShape = SymbolLibary.drawSVG({ type: 'Edgeicon', background: true, id: 'addEdge', tooltip: 'Click and drag to connect this class' });\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        let x = Util.getEventX(event);\r\n        let y = Util.getEventY(event);\r\n\r\n        event.stopPropagation();\r\n        if (event.type === 'drag') {\r\n            this.isDragged = true;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            if (element instanceof Node) {\r\n                this.lastSelectedNode = <Element>element.$view;\r\n            }\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n        }\r\n\r\n        if (event.target['id'] === 'background' || element === this.graph.$graphModel) {\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let e = <Node>element;\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.graph.root.appendChild(this.addEdgeShape);\r\n            this.graph.root.appendChild(this.copyNodeShape);\r\n            this.graph.root.appendChild(element.$view);\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'visible');\r\n\r\n            let x = (e.getPos().x + e.getSize().x) + 5;\r\n            let y = e.getPos().y;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y + this.padding})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.copyNodeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 40 + this.padding})`);\r\n            this.copyNodeShape.onclick = (evt) => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let copyClass = (element).copy();\r\n                copyClass.withPos(nextFreePosition.x, nextFreePosition.y);\r\n                this.graph.drawElement(copyClass);\r\n            };\r\n\r\n            this.addEdgeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 80 + this.padding})`);\r\n            this.addEdgeShape.onmousedown = function () {\r\n                EventBus.setActiveHandler('NewEdge');\r\n                element.$view.dispatchEvent(Util.createCustomEvent('mousedown'));\r\n            };\r\n        }\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let clazz = <Node>element;\r\n\r\n            if (Util.isChrome()) {\r\n                if (this.lastSelectedNode && element.id === this.lastSelectedNode.id && !this.isDragged) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            this.isDragged = false;\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            this.lastSelectedNode = <Element>element.$view;\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete class');\r\n\r\n            // draw textbox to edit clazz in one line\r\n            let divInlineEdit = document.createElement('div');\r\n            divInlineEdit.id = 'inlineEdit';\r\n            divInlineEdit.style.position = 'absolute';\r\n            divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n            divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n            divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n            divInlineEdit.style.zIndex = '42';\r\n\r\n            let inputText = document.createElement('input');\r\n            inputText.type = 'text';\r\n            inputText.style.width = '100%';\r\n            inputText.placeholder = 'Add properties, edit label';\r\n\r\n            divInlineEdit.appendChild(inputText);\r\n            document.body.appendChild(divInlineEdit);\r\n\r\n            inputText.addEventListener('focusout', (evt) => {\r\n\r\n                if (Util.isChrome()) {\r\n                    // only if input is empty, remove the inline edit function\r\n                    if ((!inputText.value || inputText.value.length === 0) && (!this.lastSelectedNode || element.id !== this.lastSelectedNode.id)) {\r\n                        this.removeLastInlineEdit();\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                // only if input is empty, remove the inline edit function\r\n                if ((!inputText.value || inputText.value.length === 0)) {\r\n                    this.removeLastInlineEdit();\r\n                }\r\n            });\r\n\r\n            let g = this.graph;\r\n            let propertyTypes: string[] = ['boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'short', 'String', 'void'];\r\n            inputText.addEventListener('keydown', function (evt) {\r\n\r\n                let keyCode = (<any>evt).which;\r\n                let inputValue = <any>inputText.value;\r\n\r\n                if (Util.endsWith(inputValue, ':') && !document.getElementById('selectPropertyType')) {\r\n                    let selectType = document.createElement('select');\r\n                    selectType.id = 'selectPropertyType';\r\n                    selectType.style.width = '100%';\r\n\r\n                    for (let type of propertyTypes) {\r\n                        let selectOption = document.createElement('option');\r\n                        selectOption.value = type;\r\n                        selectOption.innerHTML = type;\r\n                        selectType.appendChild(selectOption);\r\n                    }\r\n\r\n                    selectType.addEventListener('change', function (evt) {\r\n                        let inputValueSplitted = inputValue.split(':');\r\n                        let selectedPropertyType = selectType.options[selectType.selectedIndex].value;\r\n\r\n                        if (inputValueSplitted.length >= 1) {\r\n                            inputText.value = inputValueSplitted[0].trim() + ' : ' + selectedPropertyType;\r\n                            inputText.focus();\r\n                        }\r\n                    });\r\n\r\n                    divInlineEdit.appendChild(selectType);\r\n                }\r\n                else if (!Util.includes(inputValue, ':')) {\r\n                    let selectType = document.getElementById('selectPropertyType');\r\n\r\n                    if (selectType) {\r\n                        selectType.remove();\r\n                    }\r\n                }\r\n\r\n                if (keyCode !== 13) {\r\n                    return;\r\n                }\r\n\r\n                // attribute\r\n                if ((Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) === false) {\r\n                    if (Util.includes(inputValue, ':')) {\r\n                        clazz.addAttribute(inputValue.trim());\r\n                        clazz.reDraw();\r\n                    } else if (Util.includes(inputValue, '=') ) {\r\n                        let attr: Attribute = null;\r\n                        let name = inputValue.substring(0, inputValue.indexOf('=')).trim();\r\n                        for (let child of clazz.getAttributes() ) {\r\n                            if ( name === child.getName()) {\r\n                                attr = child;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (attr) {\r\n                            attr.updateValue(inputValue.substring(inputValue.indexOf('=') + 1).trim());\r\n                        }\r\n                        clazz.reDraw();\r\n                    }\r\n                }\r\n\r\n                // method\r\n                else if (Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) {\r\n                    clazz.addMethod(inputValue.trim());\r\n                    clazz.reDraw();\r\n                }\r\n                // label\r\n                else if (inputValue.trim().split(' ').length === 1 && inputValue.trim().length > 0) {\r\n                    clazz.updateLabel(inputValue.trim());\r\n                }\r\n\r\n                // reset size\r\n                divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n                divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n                divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n\r\n                inputText.value = '';\r\n\r\n                // remove combobox to select type of property\r\n                let selectType = document.getElementById('selectPropertyType');\r\n\r\n                if (selectType) {\r\n                    selectType.remove();\r\n                }\r\n\r\n                // TODO: reload propertiespanel. not working!\r\n                // event wont dispatch\r\n                // let customEvt = Util.createCustomEvent(EventBus.RELOADPROPERTIES);\r\n                // element.$view.dispatchEvent(customEvt);\r\n            });\r\n\r\n            (<any>divInlineEdit.children[0]).focus();\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Association) {\r\n            this.graph.root.appendChild(element.$view);\r\n            this.graph.root.appendChild(element.$sNode.$view);\r\n            this.graph.root.appendChild(element.$tNode.$view);\r\n\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete edge');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            let edge = <Association>element;\r\n            this.lastSelectedEdge = edge.$view;\r\n\r\n            Util.addClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Select.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Select.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private setTooltipOfShape(shape: SVGSVGElement, tooltip: string): void {\r\n        if (!shape || !shape.hasChildNodes()) {\r\n            return;\r\n        }\r\n\r\n        let titleElement = <SVGSVGElement>shape.childNodes[0];\r\n        if (!titleElement || titleElement.tagName !== 'title') {\r\n            return;\r\n        }\r\n\r\n        titleElement.textContent = tooltip;\r\n    }\r\n\r\n    private resetLastSelectedElements() {\r\n        // reset the last one\r\n        if (this.lastSelectedNode) {\r\n            Util.removeClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.lastSelectedNode = undefined;\r\n        }\r\n\r\n        if (this.lastSelectedEdge) {\r\n            Util.removeClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n            this.lastSelectedEdge = undefined;\r\n        }\r\n\r\n        this.removeLastInlineEdit();\r\n    }\r\n\r\n    private removeLastInlineEdit(): void {\r\n        // remove last inline edit of clazz\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n\r\n            // its not supported in internet explorer\r\n            // lastInlineEdit.remove();\r\n        }\r\n    }\r\n\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\n\r\nexport class Zoom implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n    }\r\n\r\n    public handle(e: any, element: DiagramElement): boolean {\r\n        let delta = e.deltaY || e.wheelDeltaY || -e.wheelDelta;\r\n        let d = 1 + (delta / 1000);\r\n\r\n        let values = this.graph.root.getAttribute('viewBox').split(' ');\r\n        const newViewBox = `${values[0]} ${values[1]} ${parseInt(values[2]) * d} ${parseInt(values[3]) * d}`;\r\n        this.graph.root.setAttribute('viewBox', newViewBox);\r\n\r\n        e.preventDefault();\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Zoom.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Zoom.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n}\r\n","export * from './Drag';\r\nexport * from './Select';\r\nexport * from './Zoom';\r\nexport * from './NewEdge';\r\nexport * from './ImportFile';\r\nexport * from './AddNode';\r\n","import { Association } from '../elements/edges';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport Layout from './Layout';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\n\r\nexport class DagreLayout implements Layout {\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        if (!window['dagre']) {\r\n            return;\r\n        }\r\n        let model = graph.$graphModel;\r\n        let g = new window['dagre'].graphlib.Graph();\r\n\r\n        g.setGraph({ marginx: 100, marginy: 20 }).setDefaultEdgeLabel(function () {\r\n            return {};\r\n        });\r\n\r\n        for (let node of model.nodes) {\r\n            g.setNode(node.id, { width: node.getSize().x, height: node.getSize().y });\r\n        }\r\n\r\n        for (let edge of model.edges) {\r\n            g.setEdge(edge.$sNode.id, edge.$tNode.id);\r\n        }\r\n\r\n        window['dagre'].layout(g);\r\n\r\n        g.nodes().forEach(function (nodeId: string) {\r\n            for (let node of model.nodes) {\r\n                if (node.id === nodeId) {\r\n                    node.withPos(g.node(nodeId).x - g.node(nodeId).width / 2, g.node(nodeId).y - g.node(nodeId).height / 2);\r\n                }\r\n            }\r\n        });\r\n        g.edges().forEach(function (e: any) {\r\n            for (let edge of model.edges) {\r\n                if (edge.$sNode.id === e.v && edge.$tNode.id === e.w) {\r\n                    let size = g.edge(e).points.length;\r\n                    edge.clearPoints();\r\n                    for (let i = 0; i < size; i++) {\r\n                        let point: SVGPoint = g.edge(e).points[i];\r\n                        edge.addPoint(point.x, point.y);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n}\r\n","import {DiagramElement} from '../elements/BaseElements';\r\nimport Layout from './Layout';\r\nimport {Graph} from '../elements/Graph';\r\nimport {Association} from '../elements/edges/Association';\r\nimport {Node} from '../elements/nodes/Node';\r\nimport {Control} from '../Control';\r\n\r\nexport class LayoutGraphMin {\r\n    public nodes: Object = {};\r\n    public edges: Array<Object> = [];\r\n    public outEdges: Object = {};\r\n    public inEdges: Object = {};\r\n    public dummyNodes: Array<LayoutGraphNode> = [];\r\n    public dummyEdges: Object = {};\r\n    public count: number = 0;\r\n    public minRank: number = Number.POSITIVE_INFINITY;\r\n    public maxRank: number = 0;\r\n    public maxHeight: number = 0;\r\n    public maxWidth: number = 0;\r\n    public ranksep: number = 0;\r\n    public edgesLabel: Array<Object> = [];\r\n\r\n    public nodeCount(): number {\r\n        return this.count;\r\n    }\r\n\r\n    public node(id: string) {\r\n        return this.nodes[id];\r\n    }\r\n\r\n    public setNode(id: string, n: LayoutGraphNode) {\r\n        if (n && !this.nodes[id]) {\r\n            this.nodes[id] = n;\r\n            this.count = this.count + 1;\r\n        } else if (!n && this.nodes[id]) {\r\n            delete this.nodes[id];\r\n        }\r\n    }\r\n}\r\n\r\nexport class LayoutGraphNode {\r\n    public id: string;\r\n    public width: number;\r\n    public height: number;\r\n    public x: number;\r\n    public y: number;\r\n    public edgeObj: LayoutGraphEdge;\r\n    public rank: number;\r\n\r\n    constructor(id: string, width: number, height: number, x: number, y: number) {\r\n        this.id = id;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n\r\nexport class LayoutGraphEdge {\r\n    public source: string;\r\n    public target: string;\r\n}\r\n\r\n// \t\t\t\t######################################################### DagreGraph #########################################################\r\nexport class DagreLayoutMin implements Layout {\r\n    public static EDGE_KEY_DELIM = '\\x01';\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        let g, layoutNode, nodes, newEdge, edges;\r\n        let i, n, x, y, sId, tId, split = DagreLayoutMin.EDGE_KEY_DELIM;\r\n        let e: Association;\r\n\r\n        nodes = node['nodes'];\r\n        edges = node['edges'];\r\n        g = new LayoutGraphMin();\r\n\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            g.setNode(n.id, new LayoutGraphNode(n.id, n.getSize().x, n.getSize().y, n.getPos().x, n.getPos().y));\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            sId = this.getNodeId(e.$sNode);\r\n            tId = this.getNodeId(e.$tNode);\r\n            if (sId > tId) {\r\n                let tmp = tId;\r\n                tId = sId;\r\n                sId = tmp;\r\n            }\r\n            let idAB = sId + split + tId + split;\r\n            let idBA = tId + split + sId + split;\r\n            if (sId !== tId && g.edgesLabel.indexOf(idAB) < 0 && g.edgesLabel.indexOf(idBA) < 0) {\r\n                newEdge = {source: sId, target: tId, minlen: 1, weight: 1};\r\n                g.edges.push(newEdge);\r\n                g.edgesLabel.push(idAB);\r\n                // In Edges\r\n                if (!g.inEdges[tId]) {\r\n                    g.inEdges[tId] = [];\r\n                }\r\n                g.inEdges[tId].push(newEdge);\r\n\r\n                // Out Edges\r\n                if (!g.outEdges[sId]) {\r\n                    g.outEdges[sId] = [];\r\n                }\r\n                g.outEdges[sId].push(newEdge);\r\n            }\r\n        }\r\n        this.layouting(g);\r\n        // Set the layouting back\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            layoutNode = g.node(n.id);\r\n            x = n.getPos().x;\r\n            y = n.getPos().y;\r\n            if (x < 1 && y < 1) {\r\n                n.withPos(Math.ceil(layoutNode.x), Math.ceil(layoutNode.y));\r\n            }\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            // OBSOLETE method:  e.calc(graph.canvas);\r\n        }\r\n        graph.draw();\r\n    }\r\n\r\n    public getNodeId(node: Control): string {\r\n        if (node.$owner) {\r\n            return this.getNodeId(node.$owner) || node.id;\r\n        }\r\n        return node.id;\r\n    }\r\n\r\n    public layouting(g: LayoutGraphMin) {\r\n        this.longestPath(g);\r\n        this.normalizeRanks(g);\r\n        this.normalizeEdge(g);\r\n        // this.setSimpleOrder(g);\r\n        this.order(g);\r\n        g.ranksep = 25;\r\n        // remove Dummy\r\n        this.removeDummy(g);\r\n        this.position(g);\r\n    }\r\n\r\n    public setSimpleOrder(g: LayoutGraphMin) {\r\n        let i, n;\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            n.order = n.rank;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Applies heuristics to minimize edge crossings in the graph and sets the best\r\n     * order solution as an order attribute on each node.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Graph must be DAG\r\n     *    2. Graph nodes must be objects with a \"rank\" attribute\r\n     *    3. Graph edges must have the \"weight\" attribute\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Graph nodes will have an \"order\" attribute based on the results of the\r\n     *       algorithm.\r\n     */\r\n    public order(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        let visited = {};\r\n        let node, n, order, i;\r\n        for (i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (n in g.nodes) {\r\n            if (visited[n]) {\r\n                continue;\r\n            }\r\n            visited[n] = true;\r\n            node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank].push(n);\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                g.nodes[layering[order][n]].order = parseInt(n);\r\n            }\r\n        }\r\n        // Fix resolve conflict\r\n        for (order in layering) {\r\n            if (layering[order].length > 1) {\r\n                for (n in layering[order]) {\r\n                    if (layering[order].hasOwnProperty(n) === false) {\r\n                        continue;\r\n                    }\r\n                    let name = layering[order][n];\r\n                    let sum = 0;\r\n                    let weight = 1;\r\n                    let edges = g.dummyEdges[name];\r\n                    if (edges) {\r\n                        for (i in edges) {\r\n                            if (edges.hasOwnProperty(i) === false) {\r\n                                continue;\r\n                            }\r\n                            let edge = edges[i];\r\n                            let nodeU = g.node(edge.target);\r\n                            sum = sum + (edge.weight * nodeU.order);\r\n                            weight = weight + edge.weight;\r\n                        }\r\n                    }\r\n                    g.node(name).barycenter = sum / weight;\r\n                    g.node(name).weight = weight;\r\n                }\r\n            } else if (layering[order].length > 0) {\r\n                for (n in layering[order]) {\r\n                    let name = layering[order][n];\r\n                    g.node(name).barycenter = 1;\r\n                    g.node(name).weight = 1;\r\n                }\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                let node = g.nodes[layering[order][n]];\r\n                node.order = parseInt(n) + node.barycenter * node.weight;\r\n                if (isNaN(node.order)) {\r\n                    console.log('ERROR');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public removeDummy(g: LayoutGraphMin) {\r\n        for (let z in g.dummyNodes) {\r\n            let node = g.dummyNodes[z];\r\n            g.setNode(node.id, null);\r\n        }\r\n        g.dummyNodes = [];\r\n        g.dummyEdges = {};\r\n    }\r\n\r\n    /*\r\n     * Breaks any long edges in the graph into short segments that span 1 layer\r\n     * each. This operation is undoable with the denormalize function.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. The input graph is a DAG.\r\n     *    2. Each node in the graph has a \"rank\" property.\r\n     *\r\n     * Post-condition:\r\n     *\r\n     *    1. All edges in the graph have a length of 1.\r\n     *    2. Dummy nodes are added where edges have been split into segments.\r\n     *    3. The graph is augmented with a \"dummyChains\" attribute which contains\r\n     *       the first dummy in each chain of dummy nodes produced.\r\n     */\r\n    public normalizeEdge(g: LayoutGraphMin): void {\r\n        let i: number = 1;\r\n        for (let id in g.edges) {\r\n            let e: LayoutGraphEdge = <LayoutGraphEdge>g.edges[id];\r\n            let v: string = e.source;\r\n            let vRank = g.node(v).rank;\r\n            const w: string = e.target;\r\n            const wRank: number = g.node(w).rank;\r\n            let name: string;\r\n\r\n            if (wRank === vRank + 1) {\r\n                continue;\r\n            }\r\n\r\n            let dummy;\r\n            for (vRank = vRank + 1; vRank < wRank; ++vRank) {\r\n                name = '_d' + e.source + e.target + (i++);\r\n                let newEdge = {source: v, target: name, minlen: 1, weight: 1};\r\n                dummy = new LayoutGraphNode(name, 0, 0, 0, 0);\r\n                dummy.edgeObj = e;\r\n                dummy.rank = vRank;\r\n                // Dummy Edges\r\n                if (!g.dummyEdges[v]) {\r\n                    g.dummyEdges[v] = [];\r\n                }\r\n                g.dummyEdges[v].push(newEdge);\r\n\r\n                g.dummyNodes.push(dummy);\r\n                g.setNode(dummy.id, dummy);\r\n                v = name;\r\n            }\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Initializes ranks for the input graph using the longest path algorithm. This\r\n     * algorithm scales well and is fast in practice, it yields rather poor\r\n     * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\r\n     * ranks wide and leaving edges longer than necessary. However, due to its\r\n     * speed, this algorithm is good for getting an initial ranking that can be fed\r\n     * into other algorithms.\r\n     *\r\n     * This algorithm does not normalize layers because it will be used by other\r\n     * algorithms in most cases. If using this algorithm directly, be sure to\r\n     * run normalize at the end.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Input graph is a DAG.\r\n     *    2. Input graph node labels can be assigned properties.\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Each node will be assign an (unnormalized) \"rank\" property.\r\n     */\r\n    public longestPath(g: LayoutGraphMin) {\r\n        let i, n, visited = [];\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            visited.push(i);\r\n            n.rank = this.findAllPaths(g, n, 0, visited);\r\n            g.minRank = Math.min(g.minRank, n.rank);\r\n        }\r\n    }\r\n\r\n    public findAllPaths(g: LayoutGraphMin, n: Node, currentCost: number, path: Array<String>) {\r\n        let min: number = 0;\r\n        let id: string;\r\n        let z: number;\r\n        let target;\r\n        if (g.outEdges[n.id]) {\r\n            for (z = 0; z < g.outEdges[n.id].length; z++) {\r\n                id = g.outEdges[n.id][z].target;\r\n                target = g.nodes[id];\r\n                if (path[id]) {\r\n                    min = Math.min(min, target.rank);\r\n                } else if (path.indexOf(id) < 0) {\r\n                    min = Math.min(min, this.findAllPaths(g, target, currentCost - 2, path));\r\n                } else {\r\n                    min = currentCost;\r\n                }\r\n            }\r\n            return min;\r\n        }\r\n        return currentCost;\r\n    }\r\n\r\n    /*\r\n     * Adjusts the ranks for all nodes in the graph such that all nodes v have\r\n     * rank(v) >= 0 and at least one node w has rank(w) = 0.\r\n     */\r\n    public normalizeRanks(g: LayoutGraphMin) {\r\n        let min = g.minRank;\r\n        let value;\r\n        g.maxRank = Number.NEGATIVE_INFINITY;\r\n        g.maxHeight = 0;\r\n        g.maxWidth = 0;\r\n        for (let i in g.nodes) {\r\n            let node = g.nodes[i];\r\n            if (node.rank !== undefined) {\r\n                node.rank -= min;\r\n                value = Math.abs(node.rank);\r\n                if (value > g.maxRank) {\r\n                    g.maxRank = value;\r\n                }\r\n                g.maxHeight = Math.max(g.maxHeight, node.height);\r\n                g.maxWidth = Math.max(g.maxWidth, node.width);\r\n            }\r\n        }\r\n    }\r\n\r\n    public position(g: LayoutGraphMin) {\r\n        this.positionY(g);\r\n        let list = this.positionX(g);\r\n        for (let i in list) {\r\n            for (let pos in list[i]) {\r\n                if (list[i].hasOwnProperty(pos) === false) {\r\n                    continue;\r\n                }\r\n                if (g.node(list[i][pos])) {\r\n                    g.node(list[i][pos]).x = parseInt(pos) * g.maxWidth;\r\n                }\r\n            }\r\n\r\n        }\r\n    }\r\n\r\n    public positionY(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        let rankSep = g.ranksep;\r\n        let prevY = 0;\r\n        for (let layer in layering) {\r\n            let maxHeight = g.maxHeight;\r\n            for (let v in layering[layer]) {\r\n                if (layering[layer].hasOwnProperty(v) === false) {\r\n                    continue;\r\n                }\r\n                let id = layering[layer][v];\r\n                g.nodes[id].y = prevY + maxHeight / 2;\r\n            }\r\n            prevY += maxHeight + rankSep;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\r\n     * function will produce a matrix with the ids of each node.\r\n     */\r\n    public buildLayerMatrix(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        for (let i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (let n in g.nodes) {\r\n            let node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank][node.order] = n;\r\n            }\r\n        }\r\n        return layering;\r\n    }\r\n\r\n    public positionX(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        return layering;\r\n    }\r\n}\r\n","import { Point } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport Layout from './Layout';\r\n\r\nexport class Random implements Layout {\r\n\r\n  public layout(graph: Graph) {\r\n\r\n    let model = graph.$graphModel;\r\n\r\n    if (model.nodes) {\r\n      for (let node of model.nodes) {\r\n        let pos: Point = node.getPos();\r\n        if (pos.x === 0 && pos.y === 0) {\r\n          let x = Util.getRandomInt(0, graph.canvasSize.width);\r\n          let y = Util.getRandomInt(0, graph.canvasSize.height);\r\n          node.withPos(x, y);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","export * from './DagreLayout';\r\nexport * from './Random';\r\nexport * from './DagreLayoutMin';\r\n\r\nimport {DagreLayout} from './DagreLayout';\r\nimport {DagreLayoutMin} from './DagreLayoutMin';\r\nimport {Random} from './Random';\r\nnew DagreLayout();\r\nnew DagreLayoutMin();\r\nnew Random();\r\n","import {VirtualKeyBoard} from './VirtualKeyBoard';\r\n\r\nexport {Point} from './elements/BaseElements';\r\nexport {Bridge, DelegateAdapter} from './Bridge';\r\nexport {Graph} from './elements/Graph';\r\nexport * from './elements/nodes';\r\nexport * from './elements/edges';\r\nexport * from './adapters';\r\nexport * from './UML';\r\nimport {Point} from './elements/BaseElements';\r\nimport {Graph} from './elements/Graph';\r\nimport {ClassEditor} from './elements/ClassEditor';\r\nimport {Bridge} from './Bridge';\r\nimport {Util} from './util';\r\nimport * as nodes  from './elements/nodes';\r\nimport * as edges from './elements/edges';\r\nimport {ScrumBoard} from './ScrumBoard';\r\n\r\nif (!window['Point']) {\r\n    window['Point'] = Point;\r\n    window['Graph'] = Graph;\r\n    window['bridge'] = new Bridge();\r\n    window['Util'] = Util;\r\n    window['Class'] = nodes.Class;\r\n    window['Association'] = edges.Association;\r\n    window['SymbolLibary'] = nodes.SymbolLibary;\r\n    window['ClassEditor'] = ClassEditor;\r\n    window['VirtualKeyBoard'] = VirtualKeyBoard;\r\n    window['ScrumBoard'] = ScrumBoard;\r\n}\r\n","'use strict';\r\nimport { CSS } from './CSS';\r\nimport { Node } from './elements/nodes/Node';\r\nimport { DiagramElement, Point } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport class Util {\r\n\r\n    public static isAutoSave: boolean;\r\n\r\n    static getRandomInt(min: number, max: number): number {\r\n        return Math.floor(Math.random() * (max - min + 1)) + min;\r\n    }\r\n\r\n    static createShape(attrs: any): SVGSVGElement {\r\n        let xmlns = attrs.xmlns || 'http://www.w3.org/2000/svg';\r\n        let shape = document.createElementNS(xmlns, attrs.tag);\r\n\r\n        for (let attr in attrs) {\r\n            if (!attrs.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr !== 'tag') {\r\n                shape.setAttribute(attr, attrs[attr]);\r\n\r\n            }\r\n        }\r\n        return <SVGSVGElement><any>shape;\r\n    }\r\n\r\n    static toPascalCase(value: string): string {\r\n        value = value.charAt(0).toUpperCase() + value.substring(1).toLowerCase();\r\n        return value;\r\n    }\r\n\r\n    static isSVG(tag: string): boolean {\r\n        let i,\r\n            list = ['svg', 'path', 'polygon', 'polyline', 'line', 'title', 'rect', 'filter', 'feGaussianBlur', 'feOffset', 'feBlend', 'linearGradient', 'stop', 'text', 'symbol', 'textPath', 'defs', 'fegaussianblur', 'feoffset', 'feblend', 'circle', 'ellipse', 'g'];\r\n        for (i = 0; i < list.length; i += 1) {\r\n            if (list[i] === tag) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    static createHTML(node: any): HTMLElement {\r\n        return <HTMLElement>this.create(node);\r\n    }\r\n    static create(node: any): Element {\r\n        let style, item, xmlns, key, tag, k;\r\n        if (document.createElementNS && (this.isSVG(node.tag) || node.xmlns)) {\r\n            if (node.xmlns) {\r\n                xmlns = node.xmlns;\r\n            } else {\r\n                xmlns = 'http://www.w3.org/2000/svg';\r\n            }\r\n            if (node.tag === 'img' && xmlns) {\r\n                item = document.createElementNS(xmlns, 'image');\r\n                item.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\r\n                item.setAttributeNS('http://www.w3.org/1999/xlink', 'href', node.src);\r\n            } else {\r\n                item = document.createElementNS(xmlns, node.tag);\r\n            }\r\n        } else {\r\n            item = document.createElement(node.tag);\r\n        }\r\n        tag = node.tag.toLowerCase();\r\n        for (key in node) {\r\n            if (!node.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            k = key.toLowerCase();\r\n            if (node[key] === null) {\r\n                continue;\r\n            }\r\n            if (k === 'tag' || k.charAt(0) === '$' || k === '$graphModel') {\r\n                continue;\r\n            }\r\n            if (k.charAt(0) === '#') {\r\n                item[k.substring(1)] = node[key];\r\n                continue;\r\n            }\r\n            if (k === 'rotate') {\r\n                item.setAttribute('transform', 'rotate(' + node[key] + ',' + node.$graphModel.x + ',' + node.$graphModel.y + ')');\r\n                continue;\r\n            }\r\n            if (k === 'value') {\r\n                if (!node[key]) {\r\n                    continue;\r\n                }\r\n                if (tag !== 'input') {\r\n                    if (tag === 'text') {// SVG\r\n                        item.appendChild(document.createTextNode(node[key]));\r\n                    } else {\r\n                        item.innerHTML = node[key];\r\n                    }\r\n                } else {\r\n                    item[key] = node[key];\r\n                }\r\n                continue;\r\n            }\r\n            if (k.indexOf('on') === 0) {\r\n                this.bind(item, k.substring(2), node[key]);\r\n                continue;\r\n            }\r\n            if (k.indexOf('-') >= 0) {\r\n                item.style[key] = node[key];\r\n            } else {\r\n                if (k === 'style' && typeof (node[key]) === 'object') {\r\n                    for (style in node[key]) {\r\n                        if (!node[key].hasOwnProperty(style)) {\r\n                            continue;\r\n                        }\r\n                        if (node[key][style]) {\r\n                            if ('transform' === style) {\r\n                                item.style.transform = node[key][style];\r\n                                item.style.msTransform = item.style.MozTransform = item.style.WebkitTransform = item.style.OTransform = node[key][style];\r\n                            } else {\r\n                                item.style[style] = node[key][style];\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    item.setAttribute(key, node[key]);\r\n                }\r\n            }\r\n        }\r\n        if (node.$parent) {\r\n            node.$parent.appendChild(item);\r\n        }\r\n        if (node.$graphModel) {\r\n            item.$graphModel = node.$graphModel;\r\n        }\r\n        return item;\r\n    }\r\n\r\n    static setSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttribute('width', value);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.setAttribute('height', value);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setAttributeSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttributeNS(null, 'width', value);\r\n        value = Util.getValue(height);\r\n        item.setAttributeNS(null, 'height', value);\r\n    }\r\n\r\n    static setStyleSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setPos(item: any, x: number, y: number): void {\r\n        if (item.x && item.x.baseVal) {\r\n            item.style.left = x + 'px';\r\n            item.style.top = y + 'px';\r\n        } else {\r\n            item.x = x;\r\n            item.y = y;\r\n        }\r\n    }\r\n\r\n    static getValue(value: string | number): number {\r\n        return parseInt(('0' + value).replace('px', ''), 10);\r\n    }\r\n\r\n    static isIE(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('.net') > -1;\r\n    }\r\n\r\n    static isEdge(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('edge') > -1;\r\n    }\r\n\r\n    static isFireFox(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n    }\r\n\r\n    static isSafari(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        return navigator.userAgent.toLowerCase().indexOf('safari') > -1 && !isEdge;\r\n    }\r\n\r\n    static isOpera(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('opera') > -1;\r\n    }\r\n\r\n    static isChrome(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        let isSafari = Util.isSafari();\r\n        return navigator.userAgent.toLowerCase().indexOf('chrome') > -1 && !isEdge && isSafari;\r\n    }\r\n\r\n    static getEventX(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetX'] : event.layerX;\r\n    }\r\n\r\n    static getEventY(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetY'] : event.layerY;\r\n    }\r\n\r\n    static getNumber(str: string): number {\r\n        return parseInt((str || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    static getStyle(styleProp: string): CSS {\r\n        let i, style, diff, current, ref, el = document.createElement('div'), css;\r\n        document.body.appendChild(el);\r\n        css = new CSS(styleProp);\r\n        ref = new CSS(styleProp, el).css;\r\n        style = window.getComputedStyle(el, null);\r\n        el.className = styleProp;\r\n        current = new CSS(styleProp, el).css;\r\n        diff = Util.getNumber(style.getPropertyValue('border-width'));\r\n        for (i in current) {\r\n            if (!current.hasOwnProperty(i)) {\r\n                continue;\r\n            }\r\n            if (i === 'width' || i === 'height') {\r\n                if (Util.getNumber(current[i]) !== 0 && Util.getNumber(current[i]) + diff * 2 !== Util.getNumber(ref[i])) {\r\n                    css.add(i, current[i]);\r\n                }\r\n            } else if (current[i] !== ref[i]) {\r\n                css.add(i, current[i]);\r\n            }\r\n        }\r\n        document.body.removeChild(el);\r\n        return css;\r\n    }\r\n\r\n    static sizeOf(item: string | any, node?: Node): ClientRect {\r\n        let board;\r\n        let rect: ClientRect;\r\n        let addBoard: boolean;\r\n        if (!item) {\r\n            return undefined;\r\n        }\r\n        if (node) {\r\n            board = node.$owner.$view;\r\n            addBoard = false;\r\n        }\r\n\r\n        if (!board) {\r\n            addBoard = true;\r\n            board = Util.createShape({ tag: 'svg', id: 'root', width: 200, height: 200 });\r\n            document.body.appendChild(board);\r\n        }\r\n        if (board.tagName === 'svg') {\r\n            if (typeof item === 'string') {\r\n                item = Util.create({ tag: 'text', $font: true, value: item });\r\n                item.setAttribute('width', '5px');\r\n            }\r\n        } else if (typeof item === 'string') {\r\n            item = document.createTextNode(item);\r\n        }\r\n        board.appendChild(item);\r\n        rect = item.getBoundingClientRect();\r\n        board.removeChild(item);\r\n\r\n        if (addBoard) {\r\n            document.body.removeChild(board);\r\n        }\r\n        return rect;\r\n    }\r\n\r\n    static getColor(style: string, defaultColor?: string) {\r\n        if (style) {\r\n            if (style.toLowerCase() === 'create') {\r\n                return '#008000';\r\n            }\r\n            if (style.toLowerCase() === 'nac') {\r\n                return '#FE3E3E';\r\n            }\r\n            if (style.indexOf('#') === 0) {\r\n                return style;\r\n            }\r\n        }\r\n        if (defaultColor) {\r\n            return defaultColor;\r\n        }\r\n        return '#000';\r\n    }\r\n\r\n    public static utf8$to$b64(str: string): string {\r\n        return window.btoa(encodeURIComponent(str));\r\n    }\r\n\r\n    public static showSVG(control: DiagramElement) {\r\n        let svg = Util.create({\r\n            tag: 'svg',\r\n            style: { left: control.getPos().x, top: control.getPos().y, position: 'absolute' }\r\n        });\r\n        let child = control.getSVG();\r\n        if (child) {\r\n            svg.appendChild(child);\r\n        }\r\n        Util.setSize(svg, control.getSize().x, control.getSize().y);\r\n        document.body.appendChild(svg);\r\n    }\r\n\r\n    public static toJson(ref: JSON | Object): Object {\r\n        let result = {};\r\n        return Util.copy(result, ref, false, false);\r\n    }\r\n\r\n    public static initControl(parent: Control, control: Control, type: string, id: string, json: JSON | Object) {\r\n        if (typeof control.init === 'function') {\r\n            control.init(parent, type, id);\r\n        }\r\n        if (typeof control.load === 'function') {\r\n            control.load(json);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * copy One Json into another\r\n     * @function\r\n     * @param ref reference Json\r\n     * @param src source Json\r\n     * @param full all attributes include privet $\r\n     * @param replace set the original reference or copy it\r\n     * @returns ref\r\n     * @name copy\r\n     */\r\n    public static copy(ref: JSON | Object, src: JSON | Object, full: boolean, replace: boolean) {\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (replace) {\r\n                        ref[i] = src[i];\r\n                        continue;\r\n                    }\r\n                    if (!ref[i]) {\r\n                        if (src[i] instanceof Array) {\r\n                            ref[i] = [];\r\n                        } else {\r\n                            ref[i] = {};\r\n                        }\r\n                    }\r\n                    Util.copy(ref[i], src[i], full, false);\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref[i] = src[i];\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    public static xmlstringify(text: string): string {\r\n        text = text.replace('<', '&lt;');\r\n        text = text.replace('>', '&gt;');\r\n        return text;\r\n    }\r\n\r\n    public static toXML(ref: JSON | Object | any, src: JSON | Object | any, full: boolean, doc: Document): any {\r\n        let name;\r\n        if (!ref) {\r\n            name = src.constructor.name;\r\n            doc = document.implementation.createDocument(null, name, null);\r\n            ref = doc.childNodes[0];\r\n        }\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (!ref.getAttribute(i)) {\r\n                        if (src[i] instanceof Array) {\r\n                            for (let c in src[i]) {\r\n                                if (!src[i].hasOwnProperty(c)) {\r\n                                    continue;\r\n                                }\r\n                                name = src[i][c].constructor.name;\r\n                                let child = doc.createElement(name);\r\n                                ref.appendChild(child);\r\n                                Util.toXML(child, src[i][c], full, doc);\r\n                            }\r\n                        } else {\r\n                            name = src[i].constructor.name;\r\n                            let child = doc.createElement(name);\r\n                            ref.appendChild(child);\r\n                            Util.toXML(child, src[i], full, doc);\r\n                        }\r\n                    } else {\r\n                        Util.toXML(ref.getAttribute(i), src[i], full, doc);\r\n                    }\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref.setAttribute(i, src[i]);\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    static Range(min: Point, max: Point, x: number, y: number) {\r\n        max.x = Math.max(max.x, x);\r\n        max.y = Math.max(max.y, y);\r\n        min.x = Math.min(min.x, x);\r\n        min.y = Math.min(min.y, y);\r\n    }\r\n\r\n    public static getPosition(m: number, n: number, entity: DiagramElement, refCenter: Point) {\r\n        let t, p = [], list, distance = [], min = 999999999, position, i, step = 15;\r\n        let pos: Point = entity.getPos();\r\n        let size: Point = entity.getSize();\r\n        list = [Point.LEFT, Point.RIGHT];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = this.getLRPosition(m, n, entity, list[i]);\r\n            if (t.y >= pos.y && t.y <= (pos.y + size.y + 1)) {\r\n                t.y += (entity['$' + list[i]] * step);\r\n                if (t.y > (pos.y + size.y)) {\r\n                    // Alternative\r\n                    t = Util.getUDPosition(m, n, entity, Point.DOWN, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        list = [Point.UP, Point.DOWN];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = Util.getUDPosition(m, n, entity, list[i]);\r\n            if (t.x >= pos.x && t.x <= (pos.x + size.x + 1)) {\r\n                t.x += (entity['$' + list[i]] * step);\r\n                if (t.x > (pos.x + size.x)) {\r\n                    // Alternative\r\n                    t = this.getLRPosition(m, n, entity, Point.RIGHT, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        for (i = 0; i < p.length; i += 1) {\r\n            if (distance[i] < min) {\r\n                min = distance[i];\r\n                position = p[i];\r\n            }\r\n        }\r\n        return position;\r\n    }\r\n\r\n    public static getUDPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let x, y: number = pos.y;\r\n        if (p === Point.DOWN) {\r\n            y += size.y;\r\n        }\r\n        x = (y - n) / m;\r\n        if (step) {\r\n            x += e['$' + p] * step;\r\n            if (x < pos.x) {\r\n                x = pos.x;\r\n            } else if (x > (pos.x + size.x)) {\r\n                x = pos.x + size.x;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static getLRPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let y: number, x: number = pos.x;\r\n        if (p === Point.RIGHT) {\r\n            x += size.x;\r\n        }\r\n        y = m * x + n;\r\n        if (step) {\r\n            y += e['$' + p] * step;\r\n            if (y < pos.y) {\r\n                y = pos.y;\r\n            } else if (y > (pos.y + size.y)) {\r\n                y = pos.y + size.y;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static hasClass(element: Element, cls: string) {\r\n        let className = element.getAttribute('class');\r\n        return className.indexOf(cls) > 0;\r\n    }\r\n    public static addClass(element: Element, cls: string) {\r\n        if (!Util.hasClass(element, cls)) {\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className + ' ' + cls);\r\n        }\r\n    }\r\n    public static removeClass(element: Element, cls: string) {\r\n        if (Util.hasClass(element, cls)) {\r\n            let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className.replace(reg, ' ').trim());\r\n        }\r\n    }\r\n\r\n    public static startsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.startsWith) {\r\n            return s.indexOf(searchS) === 0;\r\n        }\r\n\r\n        return s.startsWith(searchS);\r\n    }\r\n\r\n    public static endsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.endsWith) {\r\n            let lastIndex = s.lastIndexOf(searchS);\r\n            return lastIndex !== -1 && lastIndex === (s.length - 1);\r\n        }\r\n\r\n        return s.endsWith(searchS);\r\n    }\r\n\r\n    public static includes(s: string, searchS: string): boolean {\r\n        if (!String.prototype.includes) {\r\n            let idx = s.indexOf(searchS);\r\n            return idx > -1;\r\n        }\r\n        if (s === null) {\r\n            return false;\r\n        }\r\n\r\n        return s.includes(searchS);\r\n    }\r\n\r\n    public static isParentOfChild(parent: Element, child: Element): boolean {\r\n\r\n        if (!parent || !child) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isIE()) {\r\n            let children = parent.childNodes;\r\n            // let found = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                let childItem = children[i];\r\n                if (childItem === child) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        return parent.contains(child);\r\n    }\r\n\r\n    public static createCustomEvent(type: string, params?: any): CustomEvent {\r\n        let evt: CustomEvent;\r\n\r\n        if (typeof window['CustomEvent'] !== 'function') {\r\n            params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n            evt = document.createEvent('CustomEvent');\r\n            evt.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\r\n            return evt;\r\n        }\r\n\r\n        evt = new CustomEvent(type);\r\n\r\n        return evt;\r\n    }\r\n\r\n    public static saveToLocalStorage(model: any): boolean {\r\n        if (!this.isAutoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isLocalStorageSupported()) {\r\n            if (model) {\r\n                if (model.$isLoading) {\r\n                    return false;\r\n                }\r\n                let jsonObj = Util.toJson(model);\r\n                let data = JSON.stringify(jsonObj, null, '\\t');\r\n                localStorage.setItem('diagram', data);\r\n            } else {\r\n                localStorage.removeItem('diagram');\r\n            }\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static getDiagramFromLocalStorage(): string {\r\n        if (Util.isLocalStorageSupported()) {\r\n            return localStorage.getItem('diagram');\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    public static isLocalStorageSupported(): boolean {\r\n        if (this.isEdge()) {\r\n            return false;\r\n        }\r\n        return localStorage !== undefined;\r\n    }\r\n}\r\n"],"sourceRoot":""}
Severity: Minor
Found in doc/diagram.js.map by fixme

TODO found
Open

{"version":3,"sources":["webpack://DiagramJS/webpack/bootstrap","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Adapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Bridge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/BridgeElement.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/CSS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Control.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Data.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventBus.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/JSEPS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Palette.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertiesPanel.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertyBinder.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/RGBColor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/SVGConverter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/ScrumBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Toolbar.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/UML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/VirtualKeyBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/JavaAdapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/BaseElements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/ClassEditor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Graph.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Model.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregate.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Association.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Composition.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Generalisation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Implements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Attribute.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/AutoComplete.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/BR.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Button.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Class.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/ClazzProperty.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Dice.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Div.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Form.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/HTML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/InfoText.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Input.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Label.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Method.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Node.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/SO.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/StereoType.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Symbol.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Table.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/AddNode.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Drag.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/GraphListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/ImportFile.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/NewEdge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Select.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Zoom.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayout.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayoutMin.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/Random.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/main.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/util.ts"],"names":[],"mappings":"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","file":"diagram.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./main.ts\");\n","export abstract class Adapter {\r\n    public id: string = null;\r\n\r\n    abstract update(evt: Object): boolean;\r\n}\r\n","'use strict';\r\n\r\nimport * as controls from './elements/nodes';\r\nimport * as adapters from './adapters';\r\nimport Data from './Data';\r\nimport {Control} from './Control';\r\nimport {Adapter} from './Adapter';\r\nimport {Graph} from './elements';\r\nimport {Util} from './util';\r\nimport {Point} from './elements';\r\n\r\nexport class Bridge extends Control {\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public static version: string = '0.42.01.1601007-1739';\r\n    private controlFactory: Object = {};\r\n    private adapterFactory: Object = {};\r\n    private controls: Object = {};\r\n    private adapters: Object = {};\r\n    private items: Object = {};\r\n    private controlNo: number = 1;\r\n    private online: boolean = true;\r\n    private language: string = navigator.language.toUpperCase();\r\n    private toolBar: HTMLElement;\r\n\r\n    constructor(viewRoot?: HTMLElement) {\r\n        super();\r\n        let i;\r\n\r\n        if (viewRoot) {\r\n            this.$view = viewRoot;\r\n        }\r\n\r\n        let keys: string[] = Object.keys(adapters);\r\n        for (i = 0; i < keys.length; i++) {\r\n            let child = adapters[keys[i]];\r\n            if (child && child.id) {\r\n                this.adapterFactory[child.id.toLowerCase()] = child;\r\n            }\r\n        }\r\n\r\n        keys = Object.keys(controls);\r\n        for (i = 0; i < keys.length; i++) {\r\n            this.addControl(controls[keys[i]]);\r\n        }\r\n        this.addControl(Graph);\r\n\r\n        let that = this;\r\n        window.addEventListener('load', function () {\r\n            let updateOnlineStatus = function updateOnlineStatus() {\r\n                that.setOnline(navigator.onLine);\r\n            };\r\n            window.addEventListener('online', updateOnlineStatus);\r\n            window.addEventListener('offline', updateOnlineStatus);\r\n        });\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public setOnline(value: boolean) {\r\n        this.online = value;\r\n        if (this.toolBar.children[0]) {\r\n            this.toolBar.children[0].className = value ? 'online' : 'offline';\r\n        }\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addToolbar(): boolean {\r\n        if (this.toolBar) {\r\n            return false;\r\n        }\r\n        this.toolBar = document.createElement('div');\r\n        this.toolBar.className = 'onlineStatus';\r\n        let child = document.createElement('div');\r\n        child.className = 'online';\r\n        this.toolBar.appendChild(child);\r\n        child = document.createElement('div');\r\n        child.className = 'lang';\r\n        child.innerHTML = this.language;\r\n        this.toolBar.appendChild(child);\r\n\r\n        let body: HTMLElement = document.getElementsByTagName('body')[0];\r\n        body.insertBefore(this.toolBar, body.firstChild);\r\n        // Refresh Online Status\r\n        this.setOnline(this.online);\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addListener = function (listener: any) {\r\n        this.listener.push(listener);\r\n    };\r\n\r\n    public addControl(control: any) {\r\n        if (control && control.name) {\r\n            this.controlFactory[control.name.toLowerCase()] = control;\r\n        }\r\n    }\r\n\r\n    public getId(): string {\r\n        return 'control' + (this.controlNo++);\r\n    }\r\n\r\n    public adapterUpdate(message: string) {\r\n        let keys: string[] = Object.keys(this.adapters);\r\n        if (keys.length > 0) {\r\n            let i;\r\n            for (i = 0; i < keys.length; i++) {\r\n                let adapterList = this.adapters[keys[i]];\r\n                if (adapterList instanceof Adapter) {\r\n                    adapterList.update(message);\r\n                } else {\r\n                    for (let adapter of adapterList) {\r\n                        adapter.update(message);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        let config = {}, className: string, id: string;\r\n        if (typeof(json) === 'string') {\r\n            // Only a String\r\n            config['id'] = '' + json;\r\n            let item = document.getElementById(config['id']);\r\n            let className: string;\r\n            if (item) {\r\n                className = item.getAttribute('class');\r\n                if (!className) {\r\n                    className = item.getAttribute('classname') || '';\r\n                }\r\n                // Found Element and now config Data element\r\n                if (item.getAttribute('property')) {\r\n                    if (this.hasItem(item.getAttribute('property'))) {\r\n                        let data = this.getItem(item.getAttribute('property'));\r\n                        for (let key in data.prop) {\r\n                            if (item.getAttribute(key)) {\r\n                                data.setValue(key, item.getAttribute(key));\r\n                            }\r\n                        }\r\n                        if (item.getAttribute('property')) {\r\n                            // TODO: FIXME!!!\r\n                            // data.property = item.getAttribute(\"property\");\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                className = '' + json;\r\n            }\r\n            className = className.toLowerCase();\r\n            config['className'] = className;\r\n        } else {\r\n            config = <JSON>json;\r\n        }\r\n        // Config validate\r\n        if (!config['id']) {\r\n            config['id'] = this.getId();\r\n        }\r\n        // Backup for Old Graph\r\n        if (!config['className'] && (config['type'] === 'clazzdiagram' || config['type'] === 'objectdiagram')) {\r\n            config['className'] = 'graph';\r\n        }\r\n\r\n        className = config['className'] || config['class'];\r\n        className = className.toLocaleLowerCase();\r\n        id = config['id'];\r\n\r\n        // Check For Control or Data\r\n        if ((config['prop'] || config['upd'] || config['rem']) && this.controls[id] === null) {\r\n            // Its Data\r\n            let newData = !this.hasItem(config['id']);\r\n            let item: Data = this.getItem(config['id']);\r\n            // TODO: FIXME!!!\r\n            // if (id && className && !item.property) {\r\n            //      item.property = className;\r\n            // }\r\n            if (newData) {\r\n                for (let i in this.controls) {\r\n                    if (this.controls.hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    this.controls[i].addItem(this, item);\r\n                }\r\n            }\r\n            // Add all Values to item\r\n            item.addProperties(config);\r\n            // Bridge.addProperties(config['prop'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return item;\r\n        }\r\n\r\n        let control;\r\n        if (this.controls[id]) {\r\n            control = this.controls[id];\r\n            control.initControl(json);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return control;\r\n        }\r\n\r\n        if (typeof(this.controlFactory[className]) === 'object' || typeof(this.controlFactory[className]) === 'function') {\r\n            let obj = this.controlFactory[className];\r\n            control = new obj(json);\r\n            Util.initControl(owner || this, control, config['property'], id, json);\r\n\r\n            if (control.id) {\r\n                this.controls[control.id] = control;\r\n            } else {\r\n                this.controls[id] = control;\r\n            }\r\n\r\n            // create DataObject and register this control as listener to it\r\n            // let obj = {id:id};\r\n            // let data: Data = this.load(obj);\r\n            // data.addListener(this);\r\n\r\n            // Try to Show\r\n            if (typeof control.getSVG === 'function' && typeof control.getSize === 'function') {\r\n                let size: Point = control.getSize();\r\n\r\n                let svg = Util.createShape({\r\n                    tag: 'svg',\r\n                    id: 'root',\r\n                    width: size.x,\r\n                    height: size.y\r\n                });\r\n\r\n                let view = control.getSVG();\r\n                svg.appendChild(view);\r\n                document.getElementsByTagName('body')[0].appendChild(svg);\r\n            }\r\n            return control;\r\n        }\r\n        return null;\r\n        // bridge.load('{class:table, columns:[{id:'firstname'}, {id:'lastname'}]}');\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n\r\n        if (this.items[id] !== undefined) {\r\n            return true;\r\n        }\r\n        id = id.split('.')[0];\r\n        return (this.items[id] !== undefined);\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return this.items;\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        let item = this.items[id];\r\n        if (!item) {\r\n            id = id.split('.')[0];\r\n            item = this.items[id];\r\n            if (!item) {\r\n                item = new Data();\r\n                item.id = id;\r\n                this.items[id] = item;\r\n            }\r\n        }\r\n        return item;\r\n    }\r\n\r\n    /**\r\n     * Method for executing user input -> Event\r\n     * @param object\r\n     * @param attribute\r\n     * @param oldValue\r\n     * @param newValue\r\n     * @returns {boolean}\r\n     */\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        alert('Bridge.setValue: oldVal:' + oldValue + ', newVal: ' +  + newValue + ', attribute: ' + attribute + ', object: ' + JSON.stringify(object));\r\n        let obj: Data;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n\r\n        } else if (object instanceof Data) {\r\n            obj = object;\r\n            id = object.id;\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = <Data>object;\r\n            id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return false;\r\n        }\r\n        if (obj) {\r\n            // Execute Update to Data\r\n            obj.setValue(attribute, newValue);\r\n            // Could be done here, but currently is done at this.execueChange..:\r\n            // obj[attribute] = value;\r\n        }\r\n\r\n        /*let tmp = {'id': id};\r\n        if (typeof(newValue) !== 'undefined' && newValue !== null) {\r\n            let upd = {};\r\n            upd[attribute] = newValue;\r\n            tmp['upd'] = upd;\r\n        }\r\n        if (typeof(oldValue) !== 'undefined' && oldValue !== null) {\r\n            let rem = {};\r\n            rem[attribute] = oldValue;\r\n            tmp['rem'] = rem;\r\n        }*/\r\n        // this.load(tmp);\r\n        return true;\r\n    }\r\n\r\n    public getValue(object: Object, attribute: string): any {\r\n        let obj: Object;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = object;\r\n            // id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return;\r\n        }\r\n        if (obj) {\r\n            if (obj.hasOwnProperty(attribute)) {\r\n                return obj[attribute];\r\n            } else if (obj instanceof Data) {\r\n                return (<Data>obj).getValue(attribute);\r\n            } else {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    public getNumber(object: Object, attribute: string, defaultValue: number = 0): number {\r\n        let res = <number>this.getValue(object, attribute);\r\n        if (typeof res === 'number') {\r\n            return res;\r\n        } else if (typeof res === 'string') {\r\n            // check whether res is a number\r\n            let value = Number(res);\r\n            if (value || value === 0) {\r\n                return value;\r\n            }\r\n        }\r\n        return defaultValue;\r\n    }\r\n\r\n    getControl(controlId: string) {\r\n        return this.controls[controlId];\r\n    }\r\n\r\n    public registerListener(eventType: string, control: Control, callBackfunction: string): Control {\r\n        if (typeof control === 'string') {\r\n            control = this.getControl(<string>control);\r\n        }\r\n        if (!control) {\r\n            return null;\r\n        }\r\n        if (eventType) {\r\n            eventType = eventType.toLowerCase();\r\n        }\r\n        control.registerListenerOnHTMLObject(eventType);\r\n        if (callBackfunction) {\r\n            let adapter: DelegateAdapter = new DelegateAdapter();\r\n            adapter.callBackfunction = callBackfunction;\r\n            adapter.id = control.getId();\r\n            this.addAdapter(adapter, eventType);\r\n        }\r\n        return control;\r\n    }\r\n\r\n    public addAdapter(adapter: Adapter | string, eventType: string): Adapter {\r\n        if (!eventType) {\r\n            eventType = '';\r\n        }\r\n        let result: Adapter;\r\n        if (adapter instanceof String) {\r\n            let obj = this.adapterFactory[adapter.toLowerCase()];\r\n            result = new obj();\r\n        } else {\r\n            result = <Adapter>adapter;\r\n        }\r\n        let handlers = this.adapters[eventType];\r\n\r\n        if (handlers === null || handlers === undefined) {\r\n            handlers = [];\r\n            this.adapters[eventType] = handlers;\r\n        }\r\n        handlers.push(result);\r\n        return result;\r\n    }\r\n\r\n    public fireEvent(evt: Event): void {\r\n        let handlers = this.adapters[''];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n        handlers = this.adapters[evt['eventType']];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport class DelegateAdapter extends Adapter {\r\n    adapter: Adapter;\r\n    callBackfunction: string;\r\n\r\n    update(evt: Event): boolean {\r\n        if (this.adapter) {\r\n            this.adapter.update(evt);\r\n            return true;\r\n        } else if (this.callBackfunction) {\r\n            return this.executeFunction(this.callBackfunction, evt);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public setAdapter(adapter: Adapter): boolean {\r\n        this.adapter = adapter;\r\n        return true;\r\n    }\r\n\r\n    private executeFunction(strValue: string, evt: Event): boolean {\r\n        let scope = window;\r\n        let scopeSplit = strValue.split('.');\r\n        for (let i = 0; i < scopeSplit.length - 1; i++) {\r\n            scope = scope[scopeSplit[i]];\r\n            if (scope === undefined) {\r\n                return false;\r\n            }\r\n        }\r\n        let fn: any = scope[scopeSplit[scopeSplit.length - 1]];\r\n        if (typeof fn === 'function') {\r\n            fn.call(scope);\r\n            return true;\r\n        } else {\r\n            window['callBack1'].update(evt);\r\n\r\n        }\r\n        return false;\r\n    }\r\n}\r\n","'use strict';\r\nimport Data from './Data';\r\n\r\nexport default class BridgeElement {\r\n    private static elementSet: BridgeElement[] = [];\r\n    public model: Data;\r\n    public id: string;\r\n    public gui: HTMLElement;\r\n\r\n    constructor(model: Data) {\r\n        this.model = model;\r\n        this.id = model.id;\r\n        BridgeElement.elementSet.push(this);\r\n    }\r\n}\r\n","import {Util} from './util';\r\n\r\n// \t\t\t\t######################################################### CSS #########################################################\r\nexport class CSS {\r\n    public css: Object;\r\n    private name: string;\r\n\r\n    constructor(name: string, item?: any) {\r\n        let i, value, border: string, prop, el;\r\n        this.name = name;\r\n        this.css = {};\r\n        if (!item) {\r\n            return;\r\n        }\r\n\r\n        el = window.getComputedStyle(item, null);\r\n        border = el.getPropertyValue('border');\r\n        for (i in el) {\r\n            prop = i;\r\n            value = el.getPropertyValue(prop);\r\n            if (value && value !== '') {\r\n                // optimize CSS\r\n                if (border) {\r\n                    if (prop === 'border-bottom' || prop === 'border-right' || prop === 'border-top' || prop === 'border-left') {\r\n                        if (value !== border) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-color' || prop === 'border-bottom-color' || prop === 'border-right-color' || prop === 'border-top-color' || prop === 'border-left-color') {\r\n                        if (border.substring(border.length - value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-width') {\r\n                        if (border.substring(0, value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else {\r\n                        this.css[prop] = value;\r\n                    }\r\n                } else {\r\n                    this.css[prop] = value;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public static getStdDef() {\r\n        let child, def = Util.create({tag: 'defs'});\r\n\r\n        child = Util.create({tag: 'filter', id: 'drop-shadow'});\r\n        child.appendChild(Util.create({tag: 'feGaussianBlur', 'in': 'SourceAlpha', result: 'blur-out', stdDeviation: 2}));\r\n        child.appendChild(Util.create({tag: 'feOffset', 'in': 'blur-out', dx: 2, dy: 2}));\r\n        child.appendChild(Util.create({tag: 'feBlend', 'in': 'SourceGraphic', mode: 'normal'}));\r\n        def.appendChild(child);\r\n        child = Util.create({tag: 'linearGradient', id: 'reflect', x1: 0, x2: 0, y1: '50%', y2: 0, spreadMethod: 'reflect'});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#aaa', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#eee', offset: '100%'}));\r\n        def.appendChild(child);\r\n\r\n        child = Util.create({tag: 'linearGradient', id: 'classelement', x1: 0, x2: '100%', y1: '100%', y2: 0});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#fff', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#d3d3d3', offset: 1}));\r\n        def.appendChild(child);\r\n\r\n        return def;\r\n    }\r\n\r\n    public static getSubstring(str: string, search: string, startChar: string, endChar: string, splitter: string): any {\r\n        let pos, end, count = 0, array = [];\r\n        pos = str.indexOf(search);\r\n        if (pos > 0) {\r\n            end = str.indexOf(startChar, pos);\r\n            pos = end + 1;\r\n            if (end > 0) {\r\n                while (end < str.length) {\r\n                    if (str.charAt(end) === startChar) {\r\n                        count += 1;\r\n                    }\r\n                    if (str.charAt(end) === endChar) {\r\n                        count -= 1;\r\n                        if (count === 0) {\r\n                            if (splitter && pos !== end) {\r\n                                array.push(str.substring(pos, end).trim());\r\n                            }\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (str.charAt(end) === splitter && count === 1) {\r\n                        array.push(str.substring(pos, end).trim());\r\n                        pos = end + 1;\r\n                    }\r\n\r\n                    end += 1;\r\n                }\r\n                if (splitter) {\r\n                    return array;\r\n                }\r\n                return str.substring(pos, end);\r\n            }\r\n            return str.substring(pos);\r\n        }\r\n        return '';\r\n    }\r\n\r\n    public static addStyle(board: SVGElement, styleName: any) {\r\n        let defs, style: any, css;\r\n        if (styleName.baseVal || styleName.baseVal === '') {\r\n            styleName = styleName.baseVal;\r\n        }\r\n        if (!styleName) {\r\n            return;\r\n        }\r\n        defs = CSS.getDefs(board);\r\n        if (defs.getElementsByTagName('style').length > 0) {\r\n            style = defs.getElementsByTagName('style')[0];\r\n        } else {\r\n            style = Util.create({tag: 'style'});\r\n            style.item = {};\r\n            defs.appendChild(style);\r\n        }\r\n        if (!style.item[styleName]) {\r\n            css = Util.getStyle(styleName);\r\n            style.item[styleName] = css;\r\n            style.innerHTML = style.innerHTML + '\\n.' + styleName + css.getSVGString(board);\r\n        }\r\n    }\r\n\r\n    public static addStyles(board: SVGElement, item: any) {\r\n        if (!item) {\r\n            return;\r\n        }\r\n        let items, i, className: any = item.className;\r\n\r\n        if (className) {\r\n            if (className.baseVal || className.baseVal === '') {\r\n                className = className.baseVal;\r\n            }\r\n        }\r\n        if (className) {\r\n            items = className.split(' ');\r\n            for (i = 0; i < items.length; i += 1) {\r\n                CSS.addStyle(board, items[i].trim());\r\n            }\r\n        }\r\n        for (i = 0; i < item.childNodes.length; i += 1) {\r\n            this.addStyles(board, item.childNodes[i]);\r\n        }\r\n    }\r\n\r\n    public static getDefs(board: SVGElement) {\r\n        let defs;\r\n        if (board.getElementsByTagName('defs').length < 1) {\r\n            defs = Util.create({tag: 'defs'});\r\n            board.insertBefore(defs, board.childNodes[0]);\r\n        } else {\r\n            defs = board.getElementsByTagName('defs')[0];\r\n        }\r\n        return defs;\r\n    }\r\n\r\n    public add(key: string, value: string) {\r\n        this.css[key] = value;\r\n    }\r\n\r\n    public get(key: string): any {\r\n        let i;\r\n        for (i in this.css) {\r\n            if (i === key) {\r\n                return this.css[key];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public getNumber(key: string) {\r\n        return parseInt((this.get(key) || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    public getSVGString(board: SVGElement) {\r\n        let str, pos, style, defs, value, filter, z;\r\n        str = '{';\r\n        for (style in this.css) {\r\n            if (!this.css.hasOwnProperty(style)) {\r\n                continue;\r\n            }\r\n            if (style === 'border') {\r\n                pos = this.css[style].indexOf(' ');\r\n                str = str + 'stroke-width: ' + this.css[style].substring(0, pos) + ';';\r\n                pos = this.css[style].indexOf(' ', pos + 1);\r\n                str = str + 'stroke:' + this.css[style].substring(pos) + ';';\r\n            } else if (style === 'background-color') {\r\n                str = str + 'fill: ' + this.css[style] + ';';\r\n            } else if (style === 'background') {\r\n                value = CSS.getSubstring(this.css[style], 'linear-gradient', '(', ')', ',');\r\n                if (value.length > 0) {\r\n                    defs = CSS.getDefs(board);\r\n                    if (value[0] === '45deg') {\r\n                        pos = 1;\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '100%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                    } else {\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '0%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                        pos = 0;\r\n                    }\r\n                    defs.appendChild(filter);\r\n                    while (pos < value.length) {\r\n                        value[pos] = value[pos].trim();\r\n                        z = value[pos].lastIndexOf(' ');\r\n                        filter.appendChild(Util.create({\r\n                            tag: 'stop',\r\n                            'offset': value[pos].substring(z + 1),\r\n                            style: {'stop-color': value[pos].substring(0, z)}\r\n                        }));\r\n                        pos += 1;\r\n                    }\r\n                    str = str + 'fill: url(#' + this.name + ');';\r\n                    continue;\r\n                }\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n                // box-shadow: inset 0 3px 4px #888;\r\n// \t\t\t\t<defs>\r\n// \t\t\t\t\t<filter id='drop-shadow'>\r\n// \t\t\t\t\t\t<feGaussianBlur in='SourceAlpha' result='blur-out' stdDeviation='2'></feGaussianBlur>\r\n// \t\t\t\t\t\t<feOffset in='blur-out' dx='2' dy='2'></feOffset>\r\n// \t\t\t\t\t\t<feBlend in='SourceGraphic' mode='normal'></feBlend>\r\n// \t\t\t\t\t</filter>\r\n// \t\t\t\t</defs>\r\n            } else {\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n            }\r\n        }\r\n        str = str + '}';\r\n        return str;\r\n    }\r\n}\r\n","import {Bridge} from './Bridge';\r\nimport Data from './Data';\r\nimport EventListener from './EventListener';\r\n\r\nexport abstract class Control {\r\n    public $owner: Control;\r\n    /**\r\n     *\r\n     */\r\n    public property: string;\r\n    public id: string;\r\n    public $view: Element;\r\n    public $viewData: Data = null;\r\n\r\n    protected $model: Data;\r\n    protected $viewListener: EventListenerOrEventListenerObject;\r\n\r\n    /**\r\n     * The properties, we want to listen to\r\n     */\r\n    // static defaultProperties: string[] = [];\r\n\r\n    // public getProperties(): string[] {\r\n    //     return this.properties;\r\n    // }\r\n\r\n    constructor() {\r\n        // e.g. this.properties.push(\"key\");\r\n        // this.properties.push(\"property\");\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data: Data = new Data();\r\n        if (oldData) {\r\n            oldData.removeListener(this);\r\n            const keys: string[] = oldData.getKeys();\r\n            for (let i = 0; i < keys.length; i++) {\r\n                let attr = keys[i];\r\n                if (this.$view) {\r\n                    if (this.$view[attr] === null) {\r\n                        continue;\r\n                    }\r\n                    data.setValue(attr, this.$view[attr]);\r\n                } else {\r\n                    data.setValue(attr, null);\r\n                }\r\n            }\r\n        }\r\n        data.addListener(this);\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     *  Set the new HTMLElement and attach listener to it.\r\n     *  Also remove Listeners from old one and return the old one, if present.\r\n     * @param element\r\n     * @returns The previous Element\r\n     */\r\n    public setView(element: Element): Element {\r\n        let oldElement: Element = null;\r\n        if (this.$view) {\r\n            oldElement = this.$view;\r\n            if (this.$viewListener) {\r\n                oldElement.removeEventListener('change', this.$viewListener);\r\n            }\r\n        }\r\n        this.$view = element;\r\n\r\n        if (this.$viewListener) {\r\n            element.addEventListener('change', this.$viewListener);\r\n        }\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n        return element;\r\n    }\r\n\r\n    public init(owner: Control, property ?: string, id ?: string): Control {\r\n        if (!this.$owner) {\r\n            this.$owner = owner;\r\n        }\r\n        if (!this.id) {\r\n            this.id = id;\r\n        }\r\n        if (!this.property) {\r\n            this.property = this.generateID(property, id);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public createEventListener(): EventListener {\r\n        return new EventListener();\r\n    }\r\n\r\n    public getRoot(): Control {\r\n        if (this.$owner) {\r\n            return this.$owner.getRoot();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return null;\r\n    }\r\n\r\n    public initControl(data: any): void {\r\n        if (this.$view === null || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (data.hasOwnProperty('prop')) {\r\n            for (let key in data.prop) {\r\n                let oldValue = this.$viewData.getValue(key);\r\n                if (this.$view) {\r\n                    this.updateElement(key, oldValue, data.prop[key]);\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        let hasRem = data.hasOwnProperty('rem');\r\n        let removed: any[] = [];\r\n        if (data.hasOwnProperty('upd')) {\r\n            for (let key in data.upd) {\r\n                let oldValue;\r\n                let newValue = data.upd[key];\r\n                let entity;\r\n                const temp = false;\r\n                if (temp) {\r\n//                if (newValue == this.getViewData().getValue(key)) {\r\n                    // new Value assertEquals old value, so we don't need to change anything..\r\n                    // delete data.rem[key];\r\n                    if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                        removed.push(data.rem[key]);\r\n                    }\r\n                    continue;\r\n                }\r\n                if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                    // if there's a rem, the oldValue from rem will be used and expected to be right..\r\n                    oldValue = data.rem[key];\r\n                    if (this.$model && this.$model.getValue(key) === oldValue) {\r\n                        entity = this.$model;\r\n//                    } else if (oldValue == this.getViewData().getValue(key)) {\r\n//                        $graphModel = this.getViewData();\r\n                    }\r\n                    delete data.rem[key];\r\n\r\n                    if (entity === null) {\r\n                        continue;\r\n                    }\r\n                }\r\n                if (entity) {\r\n                    if (!hasRem) {\r\n                        if (entity === this.$model) {\r\n                            oldValue = this.$model.getValue(key);\r\n                        } else {\r\n//                           oldValue = this.getViewData().getValue(key);\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (this.$model) {\r\n                        // try to get the oldValue directly from the $graphModel...\r\n                        oldValue = this.$model.getValue(key);\r\n                        entity = this.$model;\r\n                    }\r\n                    if (oldValue === null) {\r\n                        // if there was no data in the entity, we try to get oldValue from the $view\r\n//                        oldValue = this.getViewData().getValue(key);\r\n//                        entity = this.getViewData();\r\n                    }\r\n                }\r\n\r\n                //  || oldValue !== this.$viewData.getValue(key)\r\n                if (newValue === oldValue) {\r\n                    // no match, so update should be wrong...\r\n                    continue;\r\n                }\r\n                const viewDataOldValue = this.$viewData.getValue(key);\r\n                if (entity === this.$viewData) {\r\n\r\n                    // this.getViewData().setValue(key, newValue);\r\n                    if (this.$view) {\r\n                        this.updateElement(key, viewDataOldValue, newValue);\r\n                    }\r\n                } else {\r\n                    this.updateElement(key, viewDataOldValue, newValue);\r\n                }\r\n                this.getRoot().setValue(entity, key, newValue, oldValue);\r\n            }\r\n            // this.saveViewInData();\r\n        }\r\n        if (hasRem) {\r\n            for (let key in data.rem) {\r\n                if (removed.hasOwnProperty(key)) {\r\n                    continue;\r\n                }\r\n                let oldValue;\r\n//                    this.getViewData().getValue(key);\r\n//                if (oldValue != data.rem[key] || data.upd !== undefined && (data.upd[key] == oldValue || this.getViewData().getValue(key) == data.upd[key])) {\r\n                // if rem is invalid, or if the change is already applied, don't do anything..\r\n                //                  continue;\r\n                //            }\r\n                // delete this.$viewData.getValue(key);\r\n                // this.saveViewInData();\r\n                this.updateElement(key, null, null);\r\n                // this.$view.removeAttribute(key);\r\n                if (this.$model) {\r\n//                    this.getRoot().setValue(this.$graphModel, key, this.getViewData().getValue(key), oldValue);\r\n                }\r\n            }\r\n        }\r\n        if (this.property) {\r\n            // Add listener to Input field:\r\n            this.$view['onchange'] = ((ev: Event) => {\r\n                    this.controlChanged(ev);\r\n                }\r\n            );\r\n        }\r\n//        this.saveViewInData();\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        return null;\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n        return false;\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return new Object();\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue ?: Object): boolean {\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Is called when a object, that the Control is listening to, changes its value.\r\n     * @param entity\r\n     * @param property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        if (oldValue === newValue || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (oldValue === this.$viewData.getValue(property)) {\r\n            return;\r\n        }\r\n        // Set NewData to ViewData and Fire PC\r\n        this.$viewData.setValue(property, newValue);\r\n\r\n//\r\n//\r\n//         // if (entity == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.entity) {\r\n//                 alert(\"entity = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.entity.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.entity, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the entity is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"entity = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n// >>>>>>> addOldFunctions\r\n        if (this.$viewData) {\r\n            this.$viewData.setValue(property, newValue);\r\n        }\r\n        if (this.$model) {\r\n            this.$model.setValue(property, newValue);\r\n        }\r\n        this.updateElement(property, oldValue, newValue);\r\n    }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            // Do Nothing\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  Update GUI Element\r\n     * @param {string} property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        if (this.$view && this.$view.hasAttribute(property)) {\r\n            this.$view.setAttribute(property, newValue);\r\n        }\r\n    }\r\n\r\n//        if (oldValue == newValue) {\r\n//            return;\r\n//        }\r\n//        if (oldValue == this.$viewData.getValue(property)) {\r\n//            return;\r\n//        }\r\n//        // Set NewData to ViewData and Fire PC\r\n//        this.$viewData.setValue(property, newValue);\r\n//\r\n//\r\n//\r\n//         // if ($graphModel == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.$graphModel) {\r\n//                 alert(\"$graphModel = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.$graphModel.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.$graphModel, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the $graphModel is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"$graphModel = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n\r\n    public getId(): string {\r\n        return this.id;\r\n    }\r\n\r\n    public load(json: JSON | Object, owner ?: Control): any {\r\n        // Do Nothing\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.property || entity.hasProperty(this.property)) {\r\n                entity.addListener(this, this.property);\r\n                this.$model = entity;\r\n            }\r\n        }\r\n    }\r\n\r\n    public appendChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.appendChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].appendChild(child.$view);\r\n        }\r\n    }\r\n\r\n    public removeChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.removeChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].removeChild(child.$view);\r\n        }\r\n    }\r\n\r\n    /*\r\n     Property looks like: 't1.talk'\r\n     */\r\n    public setProperty(property: string): void {\r\n        if (!this.property) {\r\n            return;\r\n        }\r\n        let objId = property.split('.')[0];\r\n        let object = null;\r\n        if (this.$owner.hasItem(objId)) {\r\n            object = this.$owner.getItem(objId);\r\n        }\r\n\r\n        // remove listener on old object\r\n        if (this.$model) {\r\n            // this.$graphModel.removeListener(this);\r\n            this.$model.removeListener(this, this.lastProperty);\r\n        }\r\n        this.property = property;\r\n\r\n        // add listener to object..\r\n        if (object) {\r\n            object.addListener(this, this.lastProperty);\r\n            this.$model = object;\r\n            this.updateElement(this.lastProperty, this.$viewData.getValue(this.lastProperty), object.prop[this.lastProperty]);\r\n        }\r\n    }\r\n\r\n    public registerListenerOnHTMLObject(eventType: string): boolean {\r\n        return this.registerEventListener(eventType, <HTMLElement>this.$view);\r\n    }\r\n\r\n    // Normal Event HTML-Event\r\n    // Eventtype:string,\r\n    // id:string of Control\r\n    public fireEvent(evt: Event): void {\r\n        // Do Nothing\r\n    }\r\n\r\n    public isClosed(): boolean {\r\n        return this['closed'];\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        if (this.isClosed()) {\r\n            return this.$owner.getShowed();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * the id of the Data object, that contains the properties of the view\r\n     * @returns {string}\r\n     */\r\n    protected getControlDataID() {\r\n        return this.id + '_data';\r\n    }\r\n\r\n    protected generateID(property ?: string, id ?: string): string {\r\n        if (property) {\r\n            return property;\r\n        }\r\n        if (id) {\r\n            // will generate a data Object suitable for the Control..\r\n            // must be overridden, if the changeEvent shouldn't listen on value...\r\n//            return id + '.' + this.getStandardProperty();//+ \"_data\"\r\n            return id + '.' + '_data';\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected updateViewData() {\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n        const keys: string[] = this.$viewData.getKeys();\r\n        for (let i = 0; i < keys.length; i++) {\r\n            let attr = keys[i];\r\n            if (this.$view[attr] === null) {\r\n                continue;\r\n            }\r\n            this.$viewData.setValue(attr, this.$view[attr]);\r\n        }\r\n    }\r\n\r\n    protected registerEventListener(eventType: string, htmlElement: HTMLElement): boolean {\r\n        if (!htmlElement) {\r\n            return false;\r\n        }\r\n        if (htmlElement instanceof HTMLElement === false) {\r\n            return false;\r\n        }\r\n        let control = this;\r\n        let listener = (t: any) => {\r\n            t.eventType = eventType;\r\n            t.id = control.id;\r\n            control.$owner.fireEvent(t);\r\n        };\r\n        htmlElement.addEventListener(eventType, listener);\r\n        return true;\r\n    }\r\n\r\n    get lastProperty(): string {\r\n        if (!this.property) {\r\n            return '';\r\n        }\r\n        let arr: string[] = this.property.split('.');\r\n        return arr[arr.length - 1];\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\n\r\nexport default class Data {\r\n    public prop = {};\r\n    id: string;\r\n    // $listener: Control[] = [];\r\n    $listener: Object = {};\r\n\r\n    private static nullCheck(property: string): string {\r\n        if (property === undefined || property === null) {\r\n            property = '';\r\n        }\r\n        return property;\r\n    }\r\n    public getKeys(): string[] {\r\n        return Object.keys(this.prop);\r\n    }\r\n\r\n    public addProperties(values: Object) {\r\n        if (!values) {\r\n            return;\r\n        }\r\n        if (values['prop']) {\r\n            let prop = values['prop'];\r\n            for (let property in prop) {\r\n                if (prop.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (prop[property] !== null && '' !== prop[property]) {\r\n                    this.setValue(property, prop[property]);\r\n                }\r\n            }\r\n        } else {\r\n            let upd = values['upd'] || {};\r\n            let rem = values['rem'] || {};\r\n\r\n            for (let property in upd) {\r\n                if (upd.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (rem.hasOwnProperty(property) === false) {\r\n                    this.setValue(property, upd[property]);\r\n                } else {\r\n                    // if we have a rem, we wan't to check, if its a valid change (teh old value is the value in rem)\r\n                    if (this.getValue(property) === rem[property]) {\r\n                        this.setValue(property, upd[property]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getValue(attribute: string) {\r\n        return this.prop[attribute];\r\n    }\r\n\r\n    public setValue(attribute: string, newValue: any): void {\r\n        let oldValue = this.prop[attribute];\r\n        if (oldValue === newValue && newValue !== null) {\r\n            return;\r\n        }\r\n        this.prop[attribute] = newValue;\r\n        this.firePropertyChange(attribute, oldValue, newValue);\r\n    }\r\n\r\n    public addTo(attribute: string, newValue: any): boolean {\r\n        let add: boolean;\r\n        if (this.prop[attribute]) {\r\n            if (this.prop[attribute].contains(newValue) === false) {\r\n                add = true;\r\n            }\r\n        } else {\r\n            this.prop[attribute] = [];\r\n            add = true;\r\n        }\r\n        if (add) {\r\n            this.prop[attribute].push(newValue);\r\n            this.firePropertyChange(attribute, null, newValue);\r\n        }\r\n        return add;\r\n    }\r\n\r\n    public removeFrom(attribute: string, newValue: any): boolean {\r\n        if (!this.prop[attribute]) {\r\n            return true;\r\n        }\r\n        let pos: number = this.prop[attribute].indexOf(newValue);\r\n        if (pos < 0) {\r\n            return true;\r\n        }\r\n        this.prop[attribute].splice(pos, 1);\r\n        this.firePropertyChange(attribute, newValue, null);\r\n        return true;\r\n    }\r\n\r\n    public addListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(property);\r\n        if (!listeners) {\r\n            listeners = [];\r\n            this.$listener[Data.nullCheck(property)] = listeners;\r\n        }\r\n        listeners.push(control);\r\n    }\r\n\r\n    public removeListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners = this.getListeners(property);\r\n        if (listeners === null) {\r\n            return;\r\n        }\r\n        let pos = listeners.indexOf(control);\r\n        if (pos >= 0) {\r\n            listeners.splice(pos, 1);\r\n        }\r\n        if (listeners.length === 0 && Data.nullCheck(property) !== '') {\r\n            // only remove, if it's not the default listener list...\r\n            delete this.$listener[property];\r\n        }\r\n    }\r\n\r\n    public hasProperty(property: string): boolean {\r\n        return this.prop.hasOwnProperty(property);\r\n    }\r\n\r\n    public addFrom(attribute: string, oldData: Data): void {\r\n        if (oldData) {\r\n            this.setValue(attribute, oldData.getValue(attribute));\r\n        } else {\r\n            this.setValue(attribute, null);\r\n        }\r\n    }\r\n\r\n    public removeKey(key: string): any {\r\n        if (this.hasProperty(key)) {\r\n            const oldValue = this.prop[key];\r\n            delete this.prop[key];\r\n            return oldValue;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected getListeners(property: string): PropertyChangeSupport[] {\r\n        property = Data.nullCheck(property);\r\n        return this.$listener[property];\r\n    }\r\n\r\n    protected firePropertyChange(attribute: string, oldValue: Object, newValue: Object) {\r\n        attribute = Data.nullCheck(attribute);\r\n        // at first fire for the given property\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(attribute);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n        // now we need to fire the Listeners that wan't to listen to everything\r\n        listeners = this.getListeners(null);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport interface EventHandler {\r\n    canHandle(): boolean;\r\n    handle(event: Event, element: DiagramElement): boolean;\r\n    setActive(active: boolean): void;\r\n}\r\n\r\nexport class EventBus {\r\n    public static CREATE: string = 'Create';\r\n    public static EDITOR: string = 'Editor';\r\n    public static OPENPROPERTIES: string = 'openProperties';\r\n    public static RELOADPROPERTIES: string = 'reloadProperties';\r\n    public static ELEMENTMOUSEDOWN: string = 'ELEMENT:MOUSEDOWN';\r\n    public static ELEMENTMOUSEUP: string = 'ELEMENT:MOUSEUP';\r\n    public static ELEMENTMOUSELEAVE: string = 'ELEMENT:MOUSELEAVE';\r\n    public static ELEMENTMOUSEMOVE: string = 'ELEMENT:MOUSEMOVE';\r\n    public static ELEMENTMOUSEWHEEL: string = 'ELEMENT:MOUSEWHEEL';\r\n    public static ELEMENTCLICK: string = 'ELEMENT:CLICK';\r\n    public static ELEMENTDBLCLICK: string = 'ELEMENT:DBLCLICK';\r\n    public static ELEMENTDRAG: string = 'ELEMENT:DRAG';\r\n    public static ELEMENTDRAGOVER: string = 'ELEMENT:DRAGOVER';\r\n    public static ELEMENTDROP: string = 'ELEMENT:DROP';\r\n    public static ELEMENTDRAGLEAVE: string = 'ELEMENT:DRAGLEAVE';\r\n\r\n    public static EVENTS: string[] = [\r\n        EventBus.CREATE,\r\n        EventBus.EDITOR,\r\n        EventBus.OPENPROPERTIES,\r\n        EventBus.RELOADPROPERTIES,\r\n        EventBus.ELEMENTMOUSEDOWN,\r\n        EventBus.ELEMENTMOUSEUP,\r\n        EventBus.ELEMENTMOUSELEAVE,\r\n        EventBus.ELEMENTMOUSEMOVE,\r\n        EventBus.ELEMENTMOUSEWHEEL,\r\n        EventBus.ELEMENTCLICK,\r\n        EventBus.ELEMENTDRAG,\r\n        EventBus.ELEMENTDBLCLICK,\r\n        EventBus.ELEMENTDRAGOVER,\r\n        EventBus.ELEMENTDROP,\r\n        EventBus.ELEMENTDRAGLEAVE,\r\n    ];\r\n\r\n    private static handlers = {};\r\n\r\n    private static $activeHandler: string = '';\r\n\r\n    public static setActiveHandler(handler: string): void {\r\n        this.$activeHandler = handler;\r\n    }\r\n\r\n    public static isHandlerActiveOrFree(handler: string, notEmpty?: boolean): boolean {\r\n        if (notEmpty) {\r\n            return this.$activeHandler === handler;\r\n        }\r\n        return this.$activeHandler === handler || this.$activeHandler === '' || this.$activeHandler === undefined;\r\n    }\r\n\r\n    public static isAnyHandlerActive(): boolean {\r\n        return !(this.$activeHandler === '' || this.$activeHandler === undefined);\r\n    }\r\n\r\n    public static releaseActiveHandler(): void {\r\n        this.$activeHandler = '';\r\n    }\r\n\r\n    public static getActiveHandler(): string {\r\n        return this.$activeHandler;\r\n    }\r\n\r\n    static register(control: Control, view: Element) {\r\n        let events: string[];\r\n        if (typeof control['getEvents'] === 'function') {\r\n            events = control['getEvents']();\r\n        }\r\n\r\n        if (!events || !view) {\r\n            return;\r\n        }\r\n        for (let event of events) {\r\n            this.registerEvent(view, event, control);\r\n        }\r\n    }\r\n\r\n    static registerEvent(view: Element, event: string, control?: any) {\r\n        const pos: number = event.indexOf(':');\r\n        if (pos > 0) {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        } else {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        }\r\n    }\r\n\r\n    public static publish(element: DiagramElement, evt: Event) {\r\n        let handlers = EventBus.handlers[evt.type];\r\n        if (handlers) {\r\n            for (let handler of handlers) {\r\n                handler.handle(evt, element);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static subscribe(handler: EventHandler, ...eventTypes: string[]) {\r\n        for (let event of eventTypes) {\r\n            let handlers = EventBus.handlers[event];\r\n            if (handlers === null || handlers === undefined) {\r\n                handlers = [];\r\n                EventBus.handlers[event] = handlers;\r\n            }\r\n            handlers.push(handler);\r\n        }\r\n    }\r\n}\r\n","import SimpleEvent from './Event';\r\n\r\nexport default class EventListener {\r\n    private $onUpdate: Function;\r\n\r\n    get onUpdate(): Function {\r\n        return this.$onUpdate;\r\n    }\r\n\r\n    set onUpdate(value: Function) {\r\n        this.$onUpdate = value;\r\n    }\r\n\r\n    update(event: SimpleEvent) {\r\n        this.$onUpdate(event);\r\n    }\r\n}\r\n","// ################################## jsEPS ####################################################\r\nimport {SVGConverter} from './SVGConverter';\r\n\r\nexport class JSEPS {\r\n    private max: number;\r\n    private min: number;\r\n    private inverting: boolean;\r\n    private output: string[];\r\n    private font: number;\r\n\r\n    constructor(options: any) {\r\n        this.max = 0;\r\n        this.min = 999;\r\n        let hasInverting = typeof (options.inverting);\r\n        this.inverting = (options && hasInverting !== 'undefined' ? options.inverting : true);\r\n        this.output = ['%!PS-Adobe-3.0 EPSF-3.0', '1 setlinewidth'];\r\n        this.out('/FSD {findfont exch scalefont def} bind def % In the document prolog: define');\r\n        this.out('/SMS {setfont moveto show} bind def % some useful procedures');\r\n        this.out('/MS {moveto show} bind def');\r\n        this.out('/F1  10  /Helvetica  FSD % At the start of the script: set up');\r\n        this.font = 1;\r\n    }\r\n\r\n    public out(value: string) {this.output.push(value); }\r\n    public rect(x: number, y: number, width: number, height: number, style: string) {\r\n        y = y + (this.inverting ? height : 0);\r\n        if (style && style.indexOf('fill:url(#classelement);') >= 0) {\r\n            this.out('gsave 0.93 0.93 0.93 setrgbcolor newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectfill grestore');\r\n        } else {\r\n            this.out('newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectstroke');\r\n        }\r\n    }\r\n    public setFillColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public y(value: number) {this.max = Math.max(this.max, value); this.min = Math.min(this.min, value); return this.inverting ? '%y(' + value + ')' : value; }\r\n    public getType(): string {\r\n        return 'application/postscript';\r\n    }\r\n\r\n    public getData(): string {\r\n        let t, end, url, text, typ = 'application/postscript', a = document.createElement('a'), data = '', pos, i;\r\n        for (i = 0; i < this.output.length; i += 1) {\r\n            text = this.output[i];\r\n            if (this.inverting) {\r\n                while ((pos = text.indexOf('%y')) >= 0) {\r\n                    end = text.indexOf(')', pos);\r\n                    t = this.max - parseInt(text.substring(pos + 3, end), 10);\r\n                    text = text.substring(0, pos) + t + text.substring(end + 1);\r\n                }\r\n            }\r\n            data = data + text + '\\r\\n';\r\n        }\r\n        return data;\r\n    }\r\n\r\n    public setDrawColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public ellipse(cx: number, cy: number, rx: number, ry: number, colorMode: string) {/*FIXME*/}\r\n    public circle(cx: number, cy: number, r: number, colorMode: string) {/*FIXME*/}\r\n    public setTextColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public text(x: number, y: number, text: string) {this.out('(' + text.replace('&lt;', '<').replace('&gt;', '>') + ') ' + x + ' ' + this.y(y) + ' F1 SMS'); }\r\n    public lineto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' lineto'); this.out('stroke'); }\r\n    public moveto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' moveto'); }\r\n    public line(x1: number, y1: number, x2: number, y2: number) {this.out('newpath ' + x1 + ' ' + this.y(y1) + ' moveto ' + x2 + ' ' + this.y(y2) + ' lineto stroke'); }\r\n    public setLineWidth(value: string) {this.out(value + ' setlinewidth'); }\r\n    public setFont(value: string) {this.out('/F' + (this.font += 1) + ' 10 /' + value + ' FSD'); }\r\n}\r\n","import { Graph } from './elements/Graph';\r\n\r\n/*const buttons = {\r\n    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    clazz: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n};\r\n*/\r\nexport default class Palette {\r\n\r\n    private graph: Graph;\r\n    private palette: Element;\r\n    private root: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n        let div = document.createElement('div');\r\n        div.className = 'palette';\r\n        div.id = 'palette';\r\n        this.root = div;\r\n        this.palette = div;\r\n        for (let key in graph.nodeFactory) {\r\n            let element = graph.nodeFactory[key];\r\n            let control = new element();\r\n            let icon = control.getToolBarIcon();\r\n            if (icon) {\r\n                let button = <HTMLButtonElement>document.createElement('button');\r\n                button.className = 'add' + key + 'Btn';\r\n                button.innerHTML = icon.outerHTML;\r\n                button.onclick = e => {\r\n                    let nextFreePosition = this.graph.getNextFreePosition();\r\n                    // let node = this.graph.addElementWithValues(graph.nodeFactory[key], {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    let node = this.graph.addElementWithValues(key, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    this.graph.drawElement(node);\r\n                };\r\n                this.palette.appendChild(button);\r\n            }\r\n        }\r\n        // this.graph.nodeFactory\r\n//        this.addButtons();\r\n    }\r\n\r\n    public show() {\r\n        document.body.appendChild(this.root);\r\n    }\r\n\r\n    private addButtons() {\r\n        /*for (let btn in buttons) {\r\n            let button = <HTMLButtonElement>document.createElement('button');\r\n            button.className = 'add' + btn + 'Btn';\r\n            button.innerHTML = buttons[btn];\r\n            button.onclick = e => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let node = this.graph.addElementWithValues(btn, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                this.graph.drawElement(node);\r\n            };\r\n            this.palette.appendChild(button);\r\n        }*/\r\n    }\r\n}\r\n","import {Graph} from './elements/Graph';\r\nimport * as edges from './elements/edges';\r\nimport {EventBus, EventHandler} from './EventBus';\r\nimport {DiagramElement} from './elements/BaseElements';\r\nimport {Util} from './util';\r\n\r\nexport class PanelGroup implements EventHandler {\r\n    private graph: Graph;\r\n    private selectedElement: DiagramElement;\r\n    private clearPanel: Panel;\r\n    private generatePanel: Panel;\r\n    private propertiesMasterPanel: HTMLDivElement;\r\n    private propertiesContent: HTMLDivElement;\r\n    private propHeaderLabel: HTMLDivElement;\r\n    private propHeaderButton: HTMLButtonElement;\r\n    private selectedPanel: Panel;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.clearPanel = new ClearPanel(this);\r\n        this.generatePanel = new GeneratePanel(this);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        this.handleOpenProperties(event, element);\r\n\r\n        if (event.type === EventBus.RELOADPROPERTIES\r\n            && this.selectedElement && element.id === this.selectedElement.id) {\r\n            this.handleEvent(event, element);\r\n        }\r\n\r\n        // the same element was clicked. do nothing\r\n        if (this.selectedElement && this.selectedElement.id === element.id) {\r\n            return true;\r\n        }\r\n        if (element.id === 'RootElement') {\r\n            this.setActivePanel(this.clearPanel);\r\n        }\r\n        if (element.id === 'GenerateProp') {\r\n            this.setActivePanel(this.generatePanel);\r\n        }\r\n        this.selectedElement = element;\r\n\r\n        return true;\r\n    }\r\n\r\n    public getGraph(): Graph {\r\n        return this.graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(PanelGroup.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(PanelGroup.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n     public handleEvent(event: any, element: any) {\r\n        // DO NOTHING\r\n    }\r\n\r\n    public show() {\r\n        // main div to display any properties, class, edge, etc.\r\n        this.propertiesMasterPanel = document.createElement('div');\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n\r\n        this.propertiesContent = document.createElement('div');\r\n        this.propertiesContent.className = 'properties-hidden';\r\n\r\n        this.propHeaderLabel = document.createElement('div');\r\n        this.propHeaderLabel.style.display = 'inherit';\r\n        this.propHeaderLabel.style.cursor = 'pointer';\r\n        this.propHeaderLabel.onclick = e => this.toogleProperties(e);\r\n\r\n        // button to display and hide the properties of e.g. a class\r\n        this.propHeaderButton = document.createElement('button');\r\n        this.propHeaderButton.className = 'btnHideProp';\r\n        this.propHeaderButton.style.cssFloat = 'right';\r\n        this.propHeaderButton.onclick = e => this.toogleProperties(e);\r\n\r\n        let propertiesHeader = document.createElement('div');\r\n        propertiesHeader.style.display = 'inline';\r\n        propertiesHeader.appendChild(this.propHeaderLabel);\r\n        propertiesHeader.appendChild(this.propHeaderButton);\r\n\r\n        this.propertiesMasterPanel.appendChild(propertiesHeader);\r\n        this.propertiesMasterPanel.appendChild(this.propertiesContent);\r\n        document.body.appendChild(this.propertiesMasterPanel);\r\n\r\n        this.setActivePanel(this.clearPanel);\r\n    }\r\n\r\n    public setActivePanel(panel: Panel) {\r\n        this.selectedPanel = panel;\r\n        this.propHeaderLabel.innerHTML = panel.getHeaderText();\r\n        if (this.propertiesContent) {\r\n            while (this.propertiesContent.hasChildNodes()) {\r\n                this.propertiesContent.removeChild(this.propertiesContent.childNodes[0]);\r\n            }\r\n        }\r\n        panel.show();\r\n\r\n        panel.showFirstTab();\r\n        if (panel !== this.clearPanel) {\r\n            this.showProperties(null);\r\n        } else {\r\n            this.hideProperties(null);\r\n        }\r\n    }\r\n\r\n    public getProperiesContent(): HTMLDivElement {\r\n        return this.propertiesContent;\r\n    }\r\n\r\n    private handleOpenProperties(event: Event, element: DiagramElement) {\r\n        if (event.type === 'dblclick') {\r\n            this.showProperties(event);\r\n        }\r\n    }\r\n\r\n    private showProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Show\r\n        this.propHeaderButton.innerHTML = '&#8897;';\r\n        this.propHeaderButton.title = 'Hide properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel';\r\n        this.propertiesContent.className = 'properties';\r\n    }\r\n\r\n    private toogleProperties(evt: Event): void {\r\n        if (this.propHeaderButton.title === 'Show properties') {\r\n            this.showProperties(evt);\r\n        } else {\r\n            this.hideProperties(evt);\r\n        }\r\n    }\r\n\r\n    private hideProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Hide\r\n        this.propHeaderButton.innerHTML = '&#8896;';\r\n        this.propHeaderButton.title = 'Show properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n        this.propertiesContent.className = 'properties-hidden';\r\n    }\r\n}\r\n\r\nexport abstract class Panel {\r\n    protected divPropertiesPanel: HTMLDivElement;\r\n    protected divPropertiesTabbedPanel: HTMLDivElement;\r\n    protected element: any;\r\n    protected group: PanelGroup;\r\n    private panelItem: PanelItem[] = [];\r\n\r\n    constructor(group: PanelGroup, element: any) {\r\n        // get the properties content panel\r\n        this.divPropertiesPanel = document.createElement('div');\r\n        this.element = element;\r\n        this.group = group;\r\n\r\n        this.divPropertiesTabbedPanel = document.createElement('div');\r\n        this.divPropertiesTabbedPanel.className = 'tabbedpane';\r\n\r\n        // add tabbed panel\r\n        this.divPropertiesPanel.appendChild(this.divPropertiesTabbedPanel);\r\n    }\r\n\r\n    public show(): void {\r\n        let propertiesContent: HTMLDivElement = this.group.getProperiesContent();\r\n        if (this.panelItem.length > 1) {\r\n            propertiesContent.appendChild(this.getPropertiesTabbedPanel());\r\n        }\r\n\r\n        propertiesContent.appendChild(this.getPropertiesPanel());\r\n    }\r\n\r\n    public getPropertiesTabbedPanel(): HTMLDivElement {\r\n        return this.divPropertiesTabbedPanel;\r\n    }\r\n\r\n    public getPropertiesPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return '';\r\n    }\r\n\r\n    public showFirstTab(): void {\r\n        if (this.panelItem.length > 0) {\r\n            this.openTab(this.panelItem[0]);\r\n        }\r\n    }\r\n\r\n    protected createTabElement(tabText: string, tabValue: string, item: PanelItem): PanelItem {\r\n        let tabElementBtn = document.createElement('button');\r\n        tabElementBtn.className = 'tablinks';\r\n        tabElementBtn.innerText = tabText;\r\n        tabElementBtn.value = tabValue;\r\n\r\n        if (item === null) {\r\n            item = new PanelItem(this);\r\n        }\r\n        item.withButton(tabElementBtn);\r\n\r\n        tabElementBtn.onclick = () => this.openTab(item);\r\n        this.divPropertiesTabbedPanel.appendChild(tabElementBtn);\r\n        this.panelItem.push(item);\r\n        return item;\r\n    }\r\n\r\n    protected openTab(panelItem: PanelItem): void {\r\n        for (let key in this.panelItem) {\r\n            let child = this.panelItem[key];\r\n            if (child !== panelItem) {\r\n                 child.deactive();\r\n            }\r\n        }\r\n        panelItem.active();\r\n        // hide other tabcontent\r\n        if (this.divPropertiesPanel) {\r\n            while (this.divPropertiesPanel.hasChildNodes()) {\r\n                this.divPropertiesPanel.removeChild(this.divPropertiesPanel.childNodes[0]);\r\n            }\r\n        }\r\n\r\n        // ADD\r\n        if (panelItem.getContent()) {\r\n            this.divPropertiesPanel.appendChild(panelItem.getContent());\r\n        }\r\n    }\r\n}\r\n\r\nexport class GeneratePanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n\r\n        let item: PanelItem = this.createTabElement('General', 'General', null);\r\n\r\n        // Workspace and generate code stuff\r\n        let inputGenerateWorkspace: HTMLInputElement =  <HTMLInputElement> Util.createHTML({tag: 'input', id: 'workspace', type: 'text', placeholder: 'Type your Folder for generated code...', value: 'src/main/java', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Folder:', inputGenerateWorkspace);\r\n\r\n        let inputGeneratePackage: HTMLInputElement = <HTMLInputElement> Util.createHTML({tag: 'input', id: 'package', type: 'text', placeholder: 'Type your workspace for generated code...', value: '', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Package:', inputGeneratePackage);\r\n\r\n        let options = document.createElement('div');\r\n        options.style.textAlign = 'center';\r\n        options.style.margin = '3';\r\n        options.style.padding = '5';\r\n\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(options);\r\n\r\n        options.style.borderStyle = 'groove';\r\n        options.style.borderRadius = '10px';\r\n\r\n        let btnGenerate = document.createElement('button');\r\n        btnGenerate.textContent = 'Generate';\r\n        btnGenerate.title = 'Generate code into your workspace';\r\n        btnGenerate.className = 'OptionElement';\r\n\r\n        let that = this;\r\n        btnGenerate.onclick = () => {\r\n            let workspace = inputGeneratePackage.value;\r\n            if (workspace.length === 0) {\r\n                alert('No workspace set.\\nEnter first your workspace');\r\n                inputGeneratePackage.focus();\r\n                return;\r\n            }\r\n            that.group.getGraph().generate(workspace, inputGenerateWorkspace.value);\r\n        };\r\n        options.appendChild(btnGenerate);\r\n        options.appendChild(document.createElement('hr'));\r\n        options.appendChild(document.createElement('br'));\r\n\r\n        let btnAutoLayout = Util.createHTML({tag: 'button', className: 'OptionElement', value: 'Auto Layout', style: {marginRight: '10px'}, onclick: () => {\r\n                that.group.getGraph().layout();\r\n            }});\r\n\r\n        options.appendChild(btnAutoLayout);\r\n\r\n        // delete all nodes\r\n        let btnDeleteAll = document.createElement('button');\r\n        btnDeleteAll.className = 'OptionElement';\r\n        btnDeleteAll.textContent = 'Delete All';\r\n        btnDeleteAll.title = 'Delete all nodes from diagram';\r\n\r\n        btnDeleteAll.onclick = () => {\r\n            let confirmDelete = confirm('All classes will be deleted!');\r\n            if (!confirmDelete) {\r\n                return;\r\n            }\r\n            that.group.getGraph().$graphModel.removeAllElements();\r\n        };\r\n        btnDeleteAll.style.marginRight = '10px';\r\n        options.appendChild(btnDeleteAll);\r\n\r\n        // export stuff\r\n        let exportTypes: string[] = ['Export', 'HTML', 'JSON', 'PDF', 'PNG', 'SVG'];\r\n        let selectExport = document.createElement('select');\r\n\r\n        exportTypes.forEach(type => {\r\n            if (!(!window['jsPDF'] && type === 'PDF')) {\r\n                let option = document.createElement('option');\r\n                option.value = type;\r\n                option.textContent = type;\r\n                selectExport.appendChild(option);\r\n            }\r\n        });\r\n\r\n        selectExport.onchange = (evt) => {\r\n            let selectedExportType = selectExport.options[selectExport.selectedIndex].value;\r\n            selectExport.selectedIndex = 0;\r\n            that.group.getGraph().saveAs(selectedExportType);\r\n        };\r\n        selectExport.className = 'OptionElement';\r\n        options.appendChild(selectExport);\r\n        options.appendChild(document.createElement('br'));\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Properties';\r\n    }\r\n\r\n}\r\n\r\nexport class ClearPanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Select any element to see its properties';\r\n    }\r\n}\r\n\r\nexport class PanelItem {\r\n    protected panel: Panel;\r\n    protected label: string;\r\n    protected button: HTMLButtonElement;\r\n    protected content: HTMLDivElement = <HTMLDivElement>Util.create({tag: 'div', className: 'tabContent'});\r\n\r\n    constructor(panel: Panel, label?: string) {\r\n        this.panel = panel;\r\n        this.label = label;\r\n    }\r\n\r\n    public active(): void {\r\n        if (this.getButton()) {\r\n            this.getButton().className += ' active';\r\n        }\r\n    }\r\n\r\n    public deactive(): void {\r\n        if (this.getButton()) {\r\n            Util.removeClass(this.getButton(), 'active');\r\n        }\r\n    }\r\n\r\n    public withButton(button: HTMLButtonElement): PanelItem {\r\n        this.button = button;\r\n        return this;\r\n    }\r\n\r\n    public withContent(element: HTMLElement): PanelItem {\r\n        this.content.appendChild(element);\r\n        return this;\r\n    }\r\n\r\n    public withInput(labelText: string, element: HTMLElement): PanelItem {\r\n        let group: HTMLDivElement = <HTMLDivElement> Util.createHTML({tag: 'div'});\r\n        let label = Util.createHTML({tag: 'label', for: element.id, value: labelText});\r\n        group.appendChild(label);\r\n        group.appendChild(element);\r\n\r\n        this.content.appendChild(group);\r\n        return this;\r\n    }\r\n\r\n    public getButton(): HTMLButtonElement {\r\n        return this.button;\r\n    }\r\n\r\n    public getContent(): HTMLDivElement {\r\n        return this.content;\r\n    }\r\n\r\n   public getHeader(): string {\r\n        return this.label;\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\nimport Data from './Data';\r\n\r\nexport class PropertyBinder implements PropertyChangeSupport {\r\n    private propertyClass1: string;\r\n    private propertyClass2: string;\r\n    private data1: Data;\r\n    private data2: Data;\r\n    // works like a lock\r\n    private applyingChange: boolean = false;\r\n\r\n    constructor(data1: Data, data2: Data, propertyClass1: string, propertyClass2: string) {\r\n        this.data1 = data1;\r\n        this.data2 = data2;\r\n        this.propertyClass1 = propertyClass1;\r\n        this.propertyClass2 = propertyClass2;\r\n    }\r\n    static bind(data1: Data, data2: Data, property1: string, property2: string) {\r\n        if (!data1 || !data2 || !property1) {\r\n            console.error('NullValue!!');\r\n            return null;\r\n        }\r\n        const propertyBinder = new PropertyBinder(data1, data2, property1, property2);\r\n        propertyBinder.bind();\r\n        return propertyBinder;\r\n    }\r\n\r\n    propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        if (!this.applyingChange) {\r\n            this.applyingChange = true;\r\n            if (entity === this.data1) {\r\n                // fire to data2\r\n                this.data2.setValue(this.propertyClass2, newValue);\r\n            } else if (entity === this.data2) {\r\n                // fire to data1\r\n                this.data1.setValue(this.propertyClass1, newValue);\r\n            }\r\n            this.applyingChange = false;\r\n        }\r\n    }\r\n\r\n    protected bind() {\r\n        // public addListener(control: Control, property?: string)\r\n        // todo: set value immediately\r\n        this.data1.setValue(this.propertyClass1, this.data2.getValue(this.propertyClass2));\r\n\r\n        this.data1.addListener(this, this.propertyClass1);\r\n        this.data2.addListener(this, this.propertyClass2);\r\n    }\r\n\r\n    protected unbind() {\r\n        // public addListener(control: Control, property?: string)\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n    }\r\n}\r\n","// ################################## RGBColor ####################################################\r\nexport class RGBColor {\r\n    public  ok: boolean;\r\n    public r: number;\r\n    public g: number;\r\n    public b: number;\r\n\r\n    constructor(value: string) {\r\n        this.ok = false;\r\n        if (value === 'none') {\r\n            return;\r\n        }\r\n        let computedColor, div = document.createElement('div');\r\n        div.style.backgroundColor = value;\r\n        document.body.appendChild(div);\r\n        computedColor = window.getComputedStyle(div).backgroundColor;\r\n        // cleanup temporary div.\r\n        document.body.removeChild(div);\r\n        this.convert(computedColor);\r\n    }\r\n    public convert(value: any) {\r\n        let values, regex = /rgb *\\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\\)/;\r\n        values = regex.exec(value);\r\n        this.r = parseInt(values[1], 10);\r\n        this.g = parseInt(values[2], 10);\r\n        this.b = parseInt(values[3], 10);\r\n        this.ok = true;\r\n    }\r\n\r\n    public toRGB(): string {return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; }\r\n    public toHex(): string {\r\n        return '#' + (this.r + 0x10000).toString(16).substring(3).toUpperCase() + (this.g + 0x10000).toString(16).substring(3).toUpperCase() + (this.b + 0x10000).toString(16).substring(3).toUpperCase();\r\n    }\r\n}\r\n","/*\r\n NetworkParser\r\n Copyright (c) 2011 - 2014, Stefan Lindel\r\n All rights reserved.\r\n\r\n Licensed under the EUPL, Version 1.1 or (as soon they\r\n will be approved by the European Commission) subsequent\r\n versions of the EUPL (the \"Licence\");\r\n You may not use this work except in compliance with the Licence.\r\n You may obtain a copy of the Licence at:\r\n\r\n http://ec.europa.eu/idabc/eupl5\r\n\r\n Unless required by applicable law or agreed to in\r\n writing, software distributed under the Licence is\r\n distributed on an \"AS IS\" basis,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\r\n express or implied.\r\n See the Licence for the specific language governing\r\n permissions and limitations under the Licence.\r\n*/\r\nimport {RGBColor} from './RGBColor';\r\nimport {JSEPS} from \"./JSEPS\";\r\n\r\nconst epsSvgAttr = {\r\n    // allowed attributes. all others are removed from the preview.\r\n    g: ['stroke', 'fill', 'stroke-width'],\r\n    line: ['x1', 'y1', 'x2', 'y2', 'stroke', 'stroke-width'],\r\n    rect: ['x', 'y', 'width', 'height', 'stroke', 'fill', 'stroke-width'],\r\n    ellipse: ['cx', 'cy', 'rx', 'ry', 'stroke', 'fill', 'stroke-width'],\r\n    circle: ['cx', 'cy', 'r', 'stroke', 'fill', 'stroke-width'],\r\n    text: ['x', 'y', 'font-size', 'font-family', 'text-anchor', 'font-weight', 'font-style', 'fill'],\r\n    path: ['']\r\n};\r\nexport class SVGConverter {\r\n    private k: number;\r\n    private remove: boolean;\r\n    private target: any;\r\n\r\n    constructor(element: any, target: any, options: any) {\r\n        this.k = 1.0;\r\n        let hasScale = typeof (options.scale), hasRemoveInvalid = typeof (options.removeInvalid);\r\n        this.k = (options && hasScale !== 'undefined' ? options.scale : 1.0);\r\n        this.remove = (options && hasRemoveInvalid !== 'undefined' ? options.removeInvalid : false);\r\n        this.target = target;\r\n        this.parse(element);\r\n    }\r\n\r\n    public parse(element: any) {\r\n        let el, i, n, colorMode, hasFillColor, fillRGB, fillColor, strokeColor, strokeRGB, fontType, pdfFontSize, x, y,\r\n            box, xOffset;\r\n        if (!element) {\r\n            return;\r\n        }\r\n        if (typeof element === 'string') {\r\n            el = document.createElement('div');\r\n            el.innerHTML = element;\r\n            element = el.childNodes[0];\r\n        }\r\n        for (i = 0; i < element.children.length; i += 1) {\r\n            n = element.children[i];\r\n            colorMode = null;\r\n            hasFillColor = false;\r\n            if ('g,line,rect,ellipse,circle,text'.indexOf(n.tagName) >= 0) {\r\n                fillColor = n.getAttribute('fill');\r\n                if (fillColor) {\r\n                    fillRGB = new RGBColor(fillColor);\r\n                    if (fillRGB.ok) {\r\n                        hasFillColor = true;\r\n                        colorMode = 'F';\r\n                    }\r\n                }\r\n            }\r\n            if ('g,line,rect,ellipse,circle'.indexOf(n.tagName) >= 0) {\r\n                if (hasFillColor) {\r\n                    this.target.setFillColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                }\r\n                strokeColor = n.getAttribute('stroke');\r\n                if (n.hasAttribute('stroke-width')) {\r\n                    this.target.setLineWidth(this.attr(n, 'stroke-width'));\r\n                }\r\n                if (strokeColor) {\r\n                    strokeRGB = new RGBColor(strokeColor);\r\n                    if (strokeRGB.ok) {\r\n                        this.target.setDrawColor(strokeRGB.r, strokeRGB.g, strokeRGB.b);\r\n                        if (colorMode === 'F') {\r\n                            colorMode = 'FD';\r\n                        } else if (!hasFillColor) {\r\n                            colorMode = 'S';\r\n                        }\r\n                    } else {\r\n                        colorMode = null;\r\n                    }\r\n                }\r\n            }\r\n            // console.log(\"write \"+n.tagName);\r\n            switch (n.tagName.toLowerCase()) {\r\n                case 'svg':\r\n                case 'a':\r\n                case 'g':\r\n                    this.parse(n);\r\n                    break;\r\n                case 'line':\r\n                    this.target.line(this.attr(n, 'x1'), this.attr(n, 'y1'), this.attr(n, 'x2'), this.attr(n, 'y2'));\r\n                    break;\r\n                case 'rect':\r\n                    this.target.rect(this.attr(n, 'x'), this.attr(n, 'y'), this.attr(n, 'width'), this.attr(n, 'height'), n.getAttribute('style'));\r\n                    break;\r\n                case 'ellipse':\r\n                    this.target.ellipse(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'rx'), this.attr(n, 'ry'), colorMode);\r\n                    break;\r\n                case 'circle':\r\n                    this.target.circle(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'r'), colorMode);\r\n                    break;\r\n                case 'text':\r\n                    if (n.hasAttribute('font-family')) {\r\n                        switch (n.getAttribute('font-family').toLowerCase()) {\r\n                            case 'serif':\r\n                                this.target.setFont('times');\r\n                                break;\r\n                            case 'monospace':\r\n                                this.target.setFont('courier');\r\n                                break;\r\n                            default:\r\n                                n.getAttribute('font-family', 'sans-serif');\r\n                                this.target.setFont('Helvetica');\r\n                        }\r\n                    }\r\n                    if (hasFillColor) {\r\n                        this.target.setTextColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                    }\r\n                    if (this.target instanceof JSEPS) {\r\n                        this.target.text(this.attr(n, 'x'), this.attr(n, 'y'), n.innerHTML);\r\n                        break;\r\n                    }\r\n                    fontType = '';\r\n                    if (n.hasAttribute('font-weight')) {\r\n                        if (n.getAttribute('font-weight') === 'bold') {\r\n                            fontType = 'bold';\r\n                        }\r\n                    }\r\n                    if (n.hasAttribute('font-style')) {\r\n                        if (n.getAttribute('font-style') === 'italic') {\r\n                            fontType += 'italic';\r\n                        }\r\n                    }\r\n                    this.target.setFontType(fontType);\r\n                    pdfFontSize = 16;\r\n                    if (n.hasAttribute('font-size')) {\r\n                        pdfFontSize = parseInt(n.getAttribute('font-size'), 10);\r\n                    }\r\n                    box = n.getBBox();\r\n                    // FIXME: use more accurate positioning!!\r\n                    x = this.attr(n, 'x');\r\n                    y = this.attr(n, 'y');\r\n                    xOffset = 0;\r\n                    if (n.hasAttribute('text-anchor')) {\r\n                        switch (n.getAttribute('text-anchor')) {\r\n                            case 'end':\r\n                                xOffset = box.width;\r\n                                break;\r\n                            case 'middle':\r\n                                xOffset = box.width / 2;\r\n                                break;\r\n                            case 'start':\r\n                                break;\r\n                            case 'default':\r\n                                n.getAttribute('text-anchor', 'start');\r\n                                break;\r\n                        }\r\n                        x = x - (xOffset * this.k);\r\n                    }\r\n                    this.target.setFontSize(pdfFontSize).text(x, y, n.innerHTML);\r\n                    break;\r\n                default:\r\n                    if (this.remove) {\r\n                        console.log('cant translate to target:', n);\r\n                        element.removeChild(n);\r\n                        i -= 1;\r\n                    }\r\n            }\r\n        }\r\n    }\r\n\r\n    public attr(node: any, name: string) {\r\n        return this.k * parseInt(node.getAttribute(name), 10);\r\n    }\r\n}\r\n","import {Control} from './Control';\r\n\r\nexport class ScrumBoard extends Control {\r\n    public static cards = [0, 0.5, 1, 2, 3, 5, 8, 13, 20, 40, 100, '?', 'Coffee'];\r\n    private $selected: HTMLDivElement;\r\n    private $board: HTMLDivElement;\r\n\r\n    constructor() {\r\n        super();\r\n        this.redraw();\r\n    }\r\n\r\n    public redraw(): void {\r\n        if (this.$board) {\r\n            while (this.$board.children.length > 0 ) {\r\n                this.$board.removeChild(this.$board.children[0]);\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('div');\r\n            this.$selected = document.createElement('div');\r\n            this.$board = document.createElement('div');\r\n            this.$view.appendChild(this.$board);\r\n            this.$view.appendChild(this.$selected);\r\n        }\r\n        this.$view.className = 'ScrumBoard';\r\n        for ( let i = 0; i < ScrumBoard.cards.length; i++) {\r\n            let card = document.createElement('div');\r\n            card.className = 'ScrumCard';\r\n            card.innerHTML = <string>ScrumBoard.cards[i];\r\n            card['pokervalue'] = <string>ScrumBoard.cards[i];\r\n            card.onclick = e => {\r\n                this.onClick(<HTMLDivElement>e.target);\r\n            };\r\n            this.$board.appendChild(card);\r\n        }\r\n    }\r\n\r\n    public getSVG() {\r\n        this.redraw();\r\n        return this.$view;\r\n    }\r\n\r\n    public onClick(target: HTMLDivElement): void {\r\n        console.log(target['pokervalue']);\r\n\r\n        while (this.$selected.children.length > 0 ) {\r\n            this.$selected.removeChild(this.$selected.children[0]);\r\n        }\r\n        let card = document.createElement('div');\r\n        card.className = 'ScrumCard';\r\n        card['pokervalue'] = target['pokervalue'];\r\n        card.onclick = e => {\r\n            this.onShow(<HTMLDivElement>e.target);\r\n        };\r\n        this.$selected.appendChild(card);\r\n        this.$board['style']['display'] = 'none';\r\n    }\r\n\r\n    public onShow(target: HTMLDivElement): void {\r\n        target.innerHTML = target['pokervalue'];\r\n    }\r\n}\r\n","import {Graph} from './main';\r\nimport {SymbolLibary} from './elements/nodes/Symbol';\r\nimport {EventBus} from './EventBus';\r\n\r\nexport class Toolbar {\r\n\r\n    private graph: Graph;\r\n    private mainDiv: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public show(): void {\r\n        if (this.mainDiv) {\r\n            return;\r\n        }\r\n\r\n        this.mainDiv = document.createElement('div');\r\n        this.mainDiv.className = 'toolbar';\r\n\r\n        let h1Logo = document.createElement('h1');\r\n        h1Logo.className = 'logo';\r\n        h1Logo.textContent = 'DiagramJS';\r\n\r\n        let node = {type: 'Hamburger', property: 'HTML', width: 24, height: 24, id: 'GenerateProp'};\r\n        let hamburger = SymbolLibary.draw( node);\r\n        EventBus.registerEvent(hamburger, 'click', node);\r\n        this.mainDiv.appendChild(hamburger);\r\n\r\n        this.mainDiv.appendChild(h1Logo);\r\n        document.body.appendChild(this.mainDiv);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 06.03.2017.\r\n */\r\nimport Data from './Data';\r\n\r\n// export default class Data {\r\n//    public values = {};\r\n//    id: string;\r\n//    $listener: Control[] = [];\r\n//    property: string;\r\nexport namespace UML {\r\n    export class Clazz extends Data {\r\n        public static NAME: string = 'name';\r\n        public static ATTRIBUTES: string = 'attributes';\r\n        public static METHODS: string = 'methods';\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Clazz';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n\r\n        public getAttributes() {\r\n            return this.prop[Clazz.ATTRIBUTES];\r\n        }\r\n\r\n        public addToAttributes(newValue: string) {\r\n            this.addTo(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n\r\n        public removeFromAttributes(newValue: string) {\r\n            this.removeFrom(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n    }\r\n\r\n    export class Attribute extends Data {\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Attribute';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n    }\r\n\r\n    export class Methods extends Data {\r\n\r\n    }\r\n}\r\n\r\nwindow['UML'] = UML;\r\n","import {Control} from './Control';\r\n\r\nexport class VirtualKeyBoard extends Control {\r\n    constructor(data: any) {\r\n        super();\r\n        if (!data) {\r\n            data = this.getDefault();\r\n        }\r\n        let board = document.createElement('div');\r\n        this.$viewData = data;\r\n\r\n        for (let type in data) {\r\n            if (type === 'normal') {\r\n                for (let line in data[type]) {\r\n                    let lineBoard = document.createElement('div');\r\n                    lineBoard.className = 'vkLine';\r\n                    for (let key in data[type][line]) {\r\n                        let btn: HTMLButtonElement = document.createElement('button');\r\n                        let keyTag = data[type][line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                        btn.ontouchend = () => {this.action(btn); };\r\n                        btn.onclick = () => {this.action(btn); };\r\n                        lineBoard.appendChild(btn);\r\n                    }\r\n                    board.appendChild(lineBoard);\r\n                }\r\n            }\r\n        }\r\n        this.$view = board;\r\n    }\r\n\r\n    public action(btn: HTMLButtonElement) {\r\n        if (btn['key'] === '{Shift}') {\r\n            if ( btn.className === 'vkbuttonAction') {\r\n                let keys = this.$viewData['normal'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                    }\r\n                }\r\n            } else if ( btn.className === 'vkbutton') {\r\n                let keys = this.$viewData['shift'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbuttonAction');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        alert(btn);\r\n    }\r\n\r\n    public getDefault(): any {\r\n        let format = {\r\n            normal: [\r\n                ['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '?', '´', '{Bksp}'],\r\n                ['{Tab}', 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+'],\r\n                ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '#', '{enter}'],\r\n                ['{Shift}', '<', 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n// '{left}', '{up}', '{down}','{right}', '{Cancel}']\r\n            ],\r\n            shift: [\r\n                ['°', '!', '\"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '`', '{Bksp}'],\r\n                ['{Tab}', 'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', 'O', 'P', 'Ü', '*'],\r\n                ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', '\\'', '{enter}'],\r\n                ['{Shift}', '>', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n            ]\r\n        };\r\n        return format;\r\n    }\r\n\r\n    public getBoard() {\r\n        return this.$view;\r\n    }\r\n\r\n    private setButtonValue(keyTag: string, btn: HTMLButtonElement, shiftClass: string) {\r\n        btn.className = 'vkbutton';\r\n        btn['key'] = keyTag;\r\n        btn['type'] = 'normal';\r\n        if (keyTag.substring(0, 1) === '{') {\r\n            if (keyTag === '{Bksp}') {\r\n                btn.innerHTML = 'Bksp';\r\n            } else if (keyTag === '{Tab}') {\r\n                btn.innerHTML = '&#8677; Tab';\r\n            } else if (keyTag === '{enter}') {\r\n                btn.innerHTML = 'enter';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Shift}') {\r\n                btn.innerHTML = 'Shift';\r\n                btn.className = shiftClass;\r\n            } else if (keyTag === '{Accept}') {\r\n                btn.innerHTML = 'Accept';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Alt}') {\r\n                btn.innerHTML = 'Alt';\r\n            } else if (keyTag === '{Space}') {\r\n                btn.innerHTML = '&nbsp;';\r\n                btn.className = 'vkbuttonSpace';\r\n            } else if (keyTag === '{left}') {\r\n                btn.innerHTML = '&#8592';\r\n            } else if (keyTag === '{right}') {\r\n                btn.innerHTML = '&#8594;';\r\n            } else if (keyTag === '{up}') {\r\n                btn.innerHTML = '&#8593;';\r\n            } else if (keyTag === '{down}') {\r\n                btn.innerHTML = '&#8595;';\r\n            } else if (keyTag === '{Cancel}') {\r\n                btn.innerHTML = 'Cancel';\r\n                btn.className = 'vkbuttonAction';\r\n            }\r\n        } else {\r\n            btn.innerHTML = keyTag;\r\n        }\r\n    }\r\n}\r\n","import {Adapter} from '../Adapter';\r\n\r\nexport class JavaAdapter extends Adapter {\r\n    constructor() {\r\n        super();\r\n        this.id = 'JavaAdapter';\r\n    }\r\n    update(evt: Object): boolean {\r\n        if (this.isActive()) {\r\n            window['JavaBridge'].executeChange(evt);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public isActive(): boolean {\r\n        return window['JavaBridge'];\r\n    }\r\n}\r\n","export * from './JavaAdapter';\r\n","import { Util } from '../util';\r\nimport { Control } from '../Control';\r\n\r\nexport interface Size {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\ninterface GraphElement {\r\n    getSize(): Point;\r\n\r\n    getPos(): Point;\r\n\r\n    getCenter(): Point;\r\n\r\n    getSVG(): Element;\r\n\r\n    getCanvas(): Element;\r\n\r\n    getEvents(): string[];\r\n\r\n    withPos(x: number, y: number): GraphElement;\r\n\r\n    load(data: any): any;\r\n\r\n    getToolBarIcon(): Element;\r\n\r\n    loadProperties(properties: any): void;\r\n}\r\n\r\nexport abstract class DiagramElement extends Control implements GraphElement {\r\n\r\n    protected $isDraggable: boolean = true;\r\n    protected $labelHeight = 25;\r\n    protected $labelFontSize = 14;\r\n    private $pos: Point = new Point();\r\n    private $size: Point = new Point();\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getPos(): Point {\r\n        return this.$pos;\r\n    }\r\n\r\n    public getSize(): Point {\r\n        return this.$size;\r\n    }\r\n\r\n    public getCenter(): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        return new Point(pos.x + size.x / 2, pos.y + size.y / 2);\r\n    }\r\n\r\n    public getCenterPosition(p: string): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let offset = this['$' + p];\r\n        let center = this.getCenter();\r\n        if (p === Point.DOWN) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y + size.y, Point.DOWN);\r\n        }\r\n        if (p === Point.UP) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y, Point.UP);\r\n        }\r\n        if (p === Point.LEFT) {\r\n            return new Point(pos.x, Math.min(center.y + offset, pos.y + size.y), Point.LEFT);\r\n        }\r\n        if (p === Point.RIGHT) {\r\n            return new Point(pos.x + size.x, Math.min(center.y + offset, pos.y + size.y), Point.RIGHT);\r\n        }\r\n        return new Point();\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getCanvas(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return null;\r\n    }\r\n\r\n    public getAlreadyDisplayingSVG(): Element {\r\n        return document.getElementById(this.id) || this.getSVG();\r\n    }\r\n\r\n    public load(data: any) {\r\n        // Do Nothing\r\n    }\r\n\r\n    public withPos(x: number, y: number): GraphElement {\r\n        if (x && y) {\r\n            this.$pos = new Point(x, y);\r\n        } else {\r\n            if (typeof (x) !== 'undefined' && x !== null) {\r\n                this.$pos.x = x;\r\n            }\r\n            if (typeof (y) !== 'undefined' && y !== null) {\r\n                this.$pos.y = y;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public withSize(width: number, height: number): DiagramElement {\r\n        if (width && height) {\r\n            this.$size = new Point(width, height);\r\n        } else {\r\n            if (typeof (width) !== 'undefined' && width !== null) {\r\n                this.$size.x = width;\r\n            }\r\n            if (typeof (height) !== 'undefined' && height !== null) {\r\n                this.$size.y = height;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        // FIXME if (this.status === 'close') {\r\n        // if (!this.$owner.isClosed()) {\r\n        //        return this;\r\n        //    }\r\n        // }\r\n        return super.getShowed();\r\n    }\r\n\r\n    public loadProperties(properties: any) {\r\n        // DO Nothing\r\n    }\r\n\r\n    protected createShape(attrs: any): Element {\r\n        return Util.createShape(attrs);\r\n    }\r\n}\r\n\r\nexport class Point {\r\n    public static UP: string = 'UP';\r\n    public static LEFT: string = 'LEFT';\r\n    public static RIGHT: string = 'RIGHT';\r\n    public static DOWN: string = 'DOWN';\r\n    x: number = 0;\r\n    y: number = 0;\r\n\r\n    //    pos:string = '';\r\n\r\n    constructor(x?: number, y?: number, pos?: string) {\r\n        this.x = Math.ceil(x || 0);\r\n        this.y = Math.ceil(y || 0);\r\n        if (pos) {\r\n            this['pos'] = pos;\r\n        }\r\n    }\r\n\r\n    public add(pos: Point) {\r\n        this.x += pos.x;\r\n        this.y += pos.y;\r\n        return this;\r\n    }\r\n\r\n    public getPosition(): string {\r\n        if (!this['pos']) {\r\n            return '';\r\n        }\r\n        return this['pos'];\r\n    }\r\n\r\n    public addNum(x: number, y: number) {\r\n        this.x += x;\r\n        this.y += y;\r\n        return this;\r\n    }\r\n\r\n    public sum(pos: Point) {\r\n        let sum = new Point(this.x, this.y);\r\n        sum.add(pos);\r\n        return sum;\r\n    }\r\n\r\n    public center(posA: Point, posB: Point) {\r\n        let count = 0;\r\n        if (posA) {\r\n            this.x += posA.x;\r\n            this.y += posA.y;\r\n            count++;\r\n        }\r\n        if (posB) {\r\n            this.x += posB.x;\r\n            this.y += posB.y;\r\n            count++;\r\n        }\r\n        if (count > 0) {\r\n            this.x = (this.x / count);\r\n            this.y = (this.y / count);\r\n        }\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        return this.x < 1 && this.y < 1;\r\n    }\r\n\r\n    public size(posA: Point, posB: Point) {\r\n        let x1 = 0, x2 = 0, y1 = 0, y2 = 0;\r\n        if (posA) {\r\n            x1 = posA.x;\r\n            y1 = posA.y;\r\n        }\r\n        if (posB) {\r\n            x2 = posB.x;\r\n            y2 = posB.y;\r\n        }\r\n        if (x1 > x2) {\r\n            this.x = x1 - x2;\r\n        } else {\r\n            this.x = x2 - x1;\r\n        }\r\n        if (y1 > y2) {\r\n            this.y = y1 - y2;\r\n        } else {\r\n            this.y = y2 - y1;\r\n        }\r\n    }\r\n}\r\n\r\n// \t\t\t\t######################################################### Line #########################################################\r\nexport class Line extends DiagramElement {\r\n    public static FORMAT = { SOLID: 'SOLID', DOTTED: 'DOTTED', PATH: 'PATH' };\r\n    public source: Point;\r\n    public target: Point;\r\n    public color: string;\r\n    public lineType: string;\r\n    private path: string;\r\n    private angle: Number;\r\n\r\n    constructor(lineType: string) {\r\n        super();\r\n        this.lineType = lineType;\r\n    }\r\n\r\n    public getTyp(): string {\r\n        return 'SVG';\r\n    }\r\n\r\n    public getPos() {\r\n        let pos = new Point();\r\n        pos.center(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public getSize() {\r\n        let pos = new Point();\r\n        pos.size(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public withColor(color: string): Line {\r\n        this.color = color;\r\n        return this;\r\n    }\r\n\r\n    public withSize(x: number, y: number): DiagramElement {\r\n        return this;\r\n    }\r\n\r\n    public withPath(path: Array<Point>, close: boolean, angle?: any): Line {\r\n        let i: number, d: string = 'M' + path[0].x + ' ' + path[0].y;\r\n        this.lineType = Line.FORMAT.PATH; // It is a Path not a Line\r\n        for (i = 1; i < path.length; i += 1) {\r\n            d = d + 'L ' + path[i].x + ' ' + path[i].y;\r\n        }\r\n        if (close) {\r\n            d = d + ' Z';\r\n            this.target = path[0];\r\n        } else {\r\n            this.target = path[path.length - 1];\r\n        }\r\n        this.path = d;\r\n        if (angle instanceof Number) {\r\n            this.angle = angle;\r\n        } else if (angle) {\r\n            // var lineangle, start = path[0], end = path[path.length - 1];\r\n            // lineangle = Math.atan2(end.y - start.y, end.x - start.x);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): SVGGElement {\r\n        if (this.lineType === 'PATH') {\r\n            return <SVGGElement>Util.create({\r\n                tag: 'path',\r\n                'd': this.path,\r\n                'fill': this.color,\r\n                stroke: '#000',\r\n                'stroke-width': '1px'\r\n            });\r\n        }\r\n        let line: SVGGElement = <SVGGElement>Util.create({\r\n            tag: 'line',\r\n            'x1': this.source.x,\r\n            'y1': this.source.y,\r\n            'x2': this.target.x,\r\n            'y2': this.target.y,\r\n            'stroke': Util.getColor(this.color)\r\n        });\r\n        if (this.lineType && this.lineType.toLowerCase() === 'dotted') {\r\n            line.setAttribute('stroke-miterlimit', '4');\r\n            line.setAttribute('stroke-dasharray', '1,1');\r\n        }\r\n        return line;\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport Options from '../Options';\r\nimport {JavaAdapter} from '../adapters';\r\n\r\nexport class ClassEditor extends Graph {\r\n    private adapter: JavaAdapter;\r\n    constructor(json: any, options: Options) {\r\n        if (!options ) {\r\n            options = {};\r\n        }\r\n        options.canvas = options.canvas || 'canvas';\r\n        // options.origin = options.origin || new Point(150, 45);\r\n//            layout: \"DagreLayout\",\r\n        options.autoSave = options.autoSave || true;\r\n        if (!options.features) {\r\n            options.features = {\r\n                drag: true,\r\n                editor: true,\r\n                palette: true,\r\n                select: true,\r\n                zoom: true,\r\n                toolbar: true,\r\n                import: true,\r\n                properties: true,\r\n                addnode: true,\r\n                newedge: true\r\n            };\r\n        }\r\n        super(json, options);\r\n    }\r\n\r\n    public setBoardStyle(value: string) {\r\n        console.log(value);\r\n        this.importFile.setBoardStyle(value);\r\n    }\r\n\r\n    public registerListener(): void {\r\n        this.adapter = new JavaAdapter();\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return this.adapter;\r\n    }\r\n}\r\n","import * as edges from './edges';\r\nimport { Association } from './edges';\r\nimport * as nodes from './nodes';\r\nimport * as layouts from '../layouts';\r\nimport Layout from '../layouts/Layout';\r\nimport { GraphModel } from './Model';\r\nimport { Point, Size } from './BaseElements';\r\nimport { Util } from '../util';\r\nimport { Control } from '../Control';\r\nimport Data from '../Data';\r\nimport { EventBus } from '../EventBus';\r\nimport { AddNode, Drag, NewEdge, Select, Zoom } from '../handlers';\r\nimport Options from '../Options';\r\nimport { ImportFile } from '../handlers/ImportFile';\r\nimport { CSS } from '../CSS';\r\nimport { DiagramElement } from './index';\r\nimport { Toolbar } from '../Toolbar';\r\nimport {JSEPS} from '../JSEPS';\r\nimport {SVGConverter} from '../SVGConverter';\r\nimport Palette from '../Palette';\r\nimport {PanelGroup} from '../PropertiesPanel';\r\n\r\nexport class Graph extends Control {\r\n    // canvas: HTMLElement;\r\n    root: SVGElement;\r\n    $graphModel: GraphModel;\r\n    options: Options;\r\n    canvasSize: Size;\r\n    nodeFactory: Object;\r\n    edgeFactory: Object;\r\n    layoutFactory: Object;\r\n    protected importFile: ImportFile;\r\n    private currentlayout: Layout;\r\n    // private layerToolBar: SVGSVGElement;\r\n    // https://stackoverflow.com/questions/15181452/how-to-save-export-inline-svg-styled-with-css-from-browser-to-image-file\r\n    private containerElements = ['svg', 'g'];\r\n    private relevantStyles = {\r\n        'rect': ['fill', 'stroke', 'stroke-width'],\r\n        'path': ['fill', 'stroke', 'stroke-width', 'opacity'],\r\n        'circle': ['fill', 'stroke', 'stroke-width'],\r\n        'line': ['stroke', 'stroke-width'],\r\n        'text': ['fill', 'font-size', 'text-anchor', 'font-family'],\r\n        'polygon': ['stroke', 'fill']\r\n    };\r\n\r\n    constructor(json: any, options: Options) {\r\n        super();\r\n        json = json || {};\r\n        if (json['data']) {\r\n            options = json['options'];\r\n            json = json['data'];\r\n            this.id = json['id'];\r\n        }\r\n        this.options = options || {features: { drag: true}};\r\n        if (json['init']) {\r\n            return;\r\n        }\r\n        if (!this.options.origin) {\r\n            this.options.origin = new Point(150, 45);\r\n        }\r\n        if (!this.options.style) {\r\n            // Style can be classic or modern\r\n            this.options.style = 'classic';\r\n        }\r\n        if (this.options.autoSave) {\r\n            Util.isAutoSave = options.autoSave;\r\n        }\r\n\r\n        this.initFactories();\r\n        this.initCanvas();\r\n        this.initFeatures(this.options.features);\r\n\r\n        // load previous session, if user wants it\r\n        // otherwise load the json data\r\n        if (!this.lookupInLocalStorage()) {\r\n            this.load(json);\r\n        }\r\n\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    public lookupInLocalStorage(): boolean {\r\n        if (!this.options.autoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (!Util.isLocalStorageSupported()) {\r\n            return false;\r\n        }\r\n        let diagram = Util.getDiagramFromLocalStorage();\r\n        if (diagram && diagram.length > 0) {\r\n            if (confirm('Restore previous session?')) {\r\n                let jsonData: JSON = JSON.parse(diagram);\r\n                this.load(jsonData);\r\n                this.layout();\r\n                return true;\r\n            } else {\r\n                Util.saveToLocalStorage( null);\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public fitSizeOnNodes(): void {\r\n        let maxWidth: number = 0;\r\n        let maxHeight: number = 0;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            let nodePos = node.getPos();\r\n            let nodeSize = node.getSize();\r\n            let nodeWidestPosX = nodePos.x + nodeSize.x;\r\n            let nodeWidestPosY = nodePos.y + nodeSize.y;\r\n\r\n            if (nodeWidestPosX > maxWidth) {\r\n                maxWidth = nodeWidestPosX;\r\n            }\r\n\r\n            if (nodeWidestPosY > maxHeight) {\r\n                maxHeight = nodeWidestPosY;\r\n            }\r\n        }\r\n\r\n        this.root.setAttributeNS(null, 'width', '' + (maxWidth + 100));\r\n        this.root.setAttributeNS(null, 'height', '' + (maxHeight + 50));\r\n    }\r\n\r\n    public saveAs(typ: string) {\r\n        typ = typ.toLowerCase();\r\n\r\n        // shrink size of graph to minimum. only to show up nodes\r\n        const currentSize = this.getRootSize();\r\n        this.fitSizeOnNodes();\r\n\r\n        if (typ === 'svg') {\r\n            this.exportSvg();\r\n        } else if (typ === 'png') {\r\n            this.exportPng();\r\n        } else if (typ === 'html') {\r\n            this.exportHtml();\r\n\r\n        } else if (typ === 'pdf') {\r\n            this.exportPdf();\r\n            // } else if (typ === 'eps') {\r\n            // this.ExportEPS();\r\n        }\r\n        else if (typ === 'json') {\r\n            this.exportJson();\r\n        }\r\n\r\n        // set the size back to default\r\n        this.root.setAttributeNS(null, 'width', '' + currentSize.width);\r\n        this.root.setAttributeNS(null, 'height', '' + currentSize.height);\r\n    }\r\n\r\n    /**\r\n     * generates a blob file and makes it available for download.\r\n     * @param type type of file\r\n     * @param data raw data\r\n     * @param name name of download file\r\n     */\r\n    public save(type: string, data: any, name: string, context: string) {\r\n        if (window['java']) {\r\n            window['java'].export(type, data, name, context);\r\n            return;\r\n        }\r\n        let a = document.createElement('a');\r\n        a.href = window.URL.createObjectURL(new Blob([data], { type: context }));\r\n        a.download = name;\r\n        document.body.appendChild(a);\r\n        a.click();\r\n        document.body.removeChild(a);\r\n    }\r\n\r\n    /** Exports the diagram as svg. */\r\n    public exportSvg(): void {\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        this.save('svg', this.serializeXmlNode(wellFormatedSvgDom), 'class_diagram.svg', 'image/svg+xml');\r\n    }\r\n\r\n    /** Exports the diagram as html. */\r\n    public exportHtml(): void {\r\n        let htmlFacade = '<html><head><title>DiagramJS - Classdiagram</title></head><body>$content</body></html>';\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        let svgAsXml = this.serializeXmlNode(wellFormatedSvgDom);\r\n\r\n        let htmlResult = htmlFacade.replace('$content', svgAsXml);\r\n\r\n        this.save('html', htmlResult, 'class_diagram.htm', 'text/plain');\r\n    }\r\n\r\n    /** Exports the diagram as json. */\r\n    public exportJson(): void {\r\n        let type = 'text/plain';\r\n        let jsonObj = Util.toJson(this.$graphModel);\r\n        let data = JSON.stringify(jsonObj, null, '\\t');\r\n\r\n        this.save('json', data, 'class_diagram.json', type);\r\n    }\r\n\r\n    /** Exports the diagram as pdf. */\r\n    public exportPdf(): void {\r\n        if (!window['jsPDF']) {\r\n            console.log('jspdf n.a.');\r\n            return;\r\n        }\r\n        let type = 'image/svg+xml';\r\n        let converter, pdf = new window['jsPDF']('l', 'px', [this.$graphModel.getSize().x, this.$graphModel.getSize().y]);\r\n        converter = new SVGConverter(this.$view, pdf, {removeInvalid: false});\r\n        pdf.save('Download.pdf');\r\n/*        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let canvas, context, a, image = new Image();\r\n        let size = this.getRootSize();\r\n\r\n        // create the loaded img source into a canvas. to generate a picture. then place this picture in the pdf\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            let pdf = new window['jsPDF']();\r\n\r\n            pdf.addImage(canvas.toDataURL('image/jpeg'), 'jpeg', 15, 40, 180, 160);\r\n            pdf.save('class_diagram.pdf');\r\n\r\n        };\r\n\r\n        image.src = url;\r\n        */\r\n    }\r\n\r\n    public import(data: string): void {\r\n        let rootElement = this.$graphModel.$view;\r\n        while (rootElement.hasChildNodes()) {\r\n            rootElement.removeChild(rootElement.firstChild);\r\n        }\r\n\r\n        while (this.$view.hasChildNodes()) {\r\n            this.$view.removeChild(this.$view.firstChild);\r\n        }\r\n\r\n        this.clearModel();\r\n        let jsonData = JSON.parse(data);\r\n        this.load(jsonData);\r\n        this.layout();\r\n    }\r\n\r\n    public exportEPS(): void {\r\n          let converter, doc = new JSEPS({inverting: true});\r\n            converter = new SVGConverter(this.$view, doc, {removeInvalid: false});\r\n            this.save('eps', doc.getData(), 'diagram.eps', doc.getType());\r\n    }\r\n\r\n    /** Exports the diagram as png. */\r\n    public exportPng(): void {\r\n        let canvas, context, a, image = new Image();\r\n        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let typ = 'image/svg+xml';\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let size = this.getRootSize();\r\n\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            a = document.createElement('a');\r\n            a.download = 'class_diagram.png';\r\n            a.href = canvas.toDataURL('image/png');\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            document.body.removeChild(a);\r\n        };\r\n\r\n        image.src = url;\r\n\r\n    }\r\n\r\n    public getSvgWithStyleAttributes(): Node {\r\n        let oDOM = this.$graphModel.$view.cloneNode(true);\r\n        this.readElement(oDOM, this.$graphModel.$view);\r\n\r\n        return oDOM;\r\n    }\r\n\r\n    public serializeXmlNode(xmlNode: any) {\r\n        if (window['XMLSerializer'] !== undefined) {\r\n            return (new window['XMLSerializer']()).serializeToString(xmlNode);\r\n        }\r\n        if (xmlNode.xml !== undefined) {\r\n            return xmlNode.xml;\r\n        }\r\n        return xmlNode.outerHTML;\r\n    }\r\n\r\n    public getRootSize(): Size {\r\n        let width: number;\r\n        let height: number;\r\n        width = +this.root.getAttribute('width');\r\n        height = +this.root.getAttribute('height');\r\n\r\n        return { width: width, height: height };\r\n    }\r\n\r\n        // Graph.prototype.ExportEPS = function () {\r\n        //     var converter, doc = new svgConverter.jsEPS({inverting: true});\r\n        //     converter = new svgConverter(this.board, doc, {removeInvalid: false});\r\n        //     doc.save();\r\n        // };\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        this.$graphModel = new GraphModel();\r\n        this.$graphModel.init(this);\r\n        this.$graphModel.load(json);\r\n    }\r\n\r\n    public clearModel(): void {\r\n        this.$graphModel.removeAllElements();\r\n        this.clearSvgRoot();\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.layout();\r\n        return this;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        return;\r\n    }\r\n\r\n    public getNextFreePosition(): Point {\r\n\r\n        if (!this.$graphModel) {\r\n            return new Point(50, 50);\r\n        }\r\n\r\n        let point = new Point(0, 50);\r\n\r\n        let maxX = 0;\r\n        let minX = 9000;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            maxX = Math.max(maxX, node.getPos().x);\r\n            minX = Math.min(minX, node.getPos().x);\r\n        }\r\n\r\n        if (minX > 170) {\r\n            point.x = 10;\r\n        }\r\n        else {\r\n            point.x = maxX + 200;\r\n        }\r\n\r\n        return point;\r\n    }\r\n\r\n    public addElement(type: string, dontDraw?: boolean): boolean {\r\n        let success = this.$graphModel.addElement(type);\r\n        if (success === true) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return success;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues?: Object, layout?: boolean, dontDraw?: boolean): DiagramElement {\r\n        let element = this.$graphModel.addElementWithValues(type, optionalValues);\r\n        if (element && layout) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public layout(dontDraw?: boolean): Graph {\r\n        this.getLayout().layout(this, this.$graphModel);\r\n\r\n        if (dontDraw) {\r\n            return this;\r\n        }\r\n\r\n        this.draw();\r\n        return this;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTDRAGOVER, EventBus.ELEMENTDRAGLEAVE, EventBus.ELEMENTDROP];\r\n    }\r\n\r\n    public draw() {\r\n        this.clearSvgRoot();\r\n        let model = this.$graphModel;\r\n        let root = this.root;\r\n        let max: Point = new Point();\r\n        if (this.options) {\r\n            max.x = this.options.minWidth || 0;\r\n            max.y = this.options.minHeight || 0;\r\n        }\r\n\r\n        for (let node of model.nodes) {\r\n            let svg = node.getSVG();\r\n            EventBus.register(node, svg);\r\n            root.appendChild(svg);\r\n\r\n            let temp: number;\r\n            temp = node.getPos().x + node.getSize().x;\r\n            if (temp > max.x) {\r\n                max.x = temp;\r\n            }\r\n            temp = node.getPos().y + node.getSize().y;\r\n            if (temp > max.y) {\r\n                max.y = temp;\r\n            }\r\n\r\n        }\r\n        Util.setAttributeSize(this.root, max.x + 60, max.y + 40);\r\n\r\n        for (let edge of model.edges) {\r\n            let svg = edge.getSVG();\r\n            EventBus.register(edge, svg);\r\n            root.appendChild(svg);\r\n        }\r\n    }\r\n\r\n    public getNode(id: string) {\r\n        return this.$graphModel.getNodeById(id);\r\n    }\r\n\r\n    public drawElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let svg = element.getSVG();\r\n        this.root.appendChild(svg);\r\n\r\n        // actualize root width size, if neccessary\r\n        // get current width of root\r\n        let rootSize = this.getRootSize();\r\n        let newWidth = element.getPos().x + element.getSize().x + 40;\r\n        let newHeight = element.getPos().y + element.getSize().y;\r\n\r\n        if (rootSize.width < newWidth) {\r\n            this.root.setAttributeNS(null, 'width', '' + newWidth);\r\n        }\r\n\r\n        if (rootSize.height < newHeight) {\r\n            this.root.setAttributeNS(null, 'height', '' + newHeight);\r\n        }\r\n\r\n        // draw edge\r\n        if (element instanceof Association) {\r\n            let edge = <Association>element;\r\n            edge.redraw(edge.$sNode);\r\n            let srcSvg = element.$sNode.getAlreadyDisplayingSVG();\r\n            let targetSvg = element.$tNode.getAlreadyDisplayingSVG();\r\n\r\n            this.root.appendChild(srcSvg);\r\n            this.root.appendChild(targetSvg);\r\n        }\r\n\r\n        EventBus.register(element, svg);\r\n    }\r\n\r\n    public removeElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let alreadyDisplayingSvg = element.getAlreadyDisplayingSVG();\r\n        if (Util.isParentOfChild(this.root, alreadyDisplayingSvg)) {\r\n            this.root.removeChild(alreadyDisplayingSvg);\r\n        }\r\n    }\r\n\r\n    public generate(packageName: string, path?: string) {\r\n        this.$graphModel.package = packageName;\r\n        this.$graphModel.genPath = path;\r\n\r\n        let data, result = Util.toJson(this.$graphModel);\r\n        data = JSON.stringify(result, null, '\\t');\r\n        if (window['java'] && typeof window['java'].generate === 'function') {\r\n            window['java'].generate(data);\r\n        }\r\n    }\r\n// REFACTORING dd\r\n    private readElement(parent: any, origData: any): void {\r\n        let children = parent.childNodes;\r\n        let origChildDat = origData.childNodes;\r\n\r\n        for (let cd = 0; cd < children.length; cd++) {\r\n            let child = children[cd];\r\n\r\n            let tagName = child.tagName;\r\n            if (this.containerElements.indexOf(tagName) !== -1) {\r\n                this.readElement(child, origChildDat[cd]);\r\n            } else if (tagName in this.relevantStyles) {\r\n                let styleDef = window.getComputedStyle(origChildDat[cd]);\r\n\r\n                let styleString = '';\r\n                for (let st = 0; st < this.relevantStyles[tagName].length; st++) {\r\n                    styleString += this.relevantStyles[tagName][st] + ':' + styleDef.getPropertyValue(this.relevantStyles[tagName][st]) + '; ';\r\n                }\r\n\r\n                child.setAttribute('style', styleString);\r\n            }\r\n        }\r\n    }\r\n\r\n    private createPattern(): Element {\r\n        const defs = Util.createShape({ tag: 'defs' });\r\n        const pattern = Util.createShape({\r\n            tag: 'pattern',\r\n            id: 'raster',\r\n            patternUnits: 'userSpaceOnUse',\r\n            width: 40,\r\n            height: 40\r\n        });\r\n        const path = 'M0 4 L0 0 L4 0 M36 0 L40 0 L40 4 M40 36 L40 40 L36 40 M4 40 L0 40 L0 36';\r\n        const cross = Util.createShape({\r\n            tag: 'path',\r\n            d: path,\r\n            stroke: '#DDD',\r\n            'stroke-width': 1,\r\n            fill: 'none'\r\n        });\r\n\r\n        const rect = Util.createShape({\r\n            tag: 'rect',\r\n            x: 0,\r\n            y: 0,\r\n            width: 40,\r\n            height: 40,\r\n            fill: 'none'\r\n        });\r\n        pattern.appendChild(rect);\r\n        pattern.appendChild(cross);\r\n        defs.appendChild(pattern);\r\n        return defs;\r\n    }\r\n\r\n    private clearSvgRoot() {\r\n        const root = this.root;\r\n        this.$graphModel.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n        while (root.firstChild) {\r\n            root.removeChild(root.firstChild);\r\n        }\r\n\r\n        root.appendChild(this.createPattern());\r\n        let fillValue = 'none';\r\n        if (this.options.raster) {\r\n            fillValue = 'url(#raster)';\r\n        }\r\n        let background = Util.createShape({\r\n            tag: 'rect',\r\n            id: 'background',\r\n            width: 5000,\r\n            height: 5000,\r\n            x: 0,\r\n            y: 0,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: fillValue\r\n        });\r\n        root.appendChild(background);\r\n\r\n        // delete inline Edit, if exists\r\n        let inlineEdit = document.getElementById('inlineEdit');\r\n        if (inlineEdit && document.body.contains(inlineEdit)) {\r\n            document.body.removeChild(inlineEdit);\r\n        }\r\n    }\r\n\r\n    private getLayout(): Layout {\r\n        if (this.currentlayout) {\r\n            return this.currentlayout;\r\n        }\r\n\r\n        let layout = this.options.layout || '';\r\n        if (this.layoutFactory[layout]) {\r\n            this.currentlayout = new this.layoutFactory[layout]();\r\n        } else {\r\n            this.currentlayout = new layouts.DagreLayout();\r\n        }\r\n\r\n        return this.currentlayout;\r\n    }\r\n\r\n    private initFactories() {\r\n\r\n        let noder = nodes;\r\n        this.nodeFactory = {};\r\n        for (let id in noder) {\r\n            if (noder.hasOwnProperty(id) === true) {\r\n                this.nodeFactory[id] = noder[id];\r\n            }\r\n        }\r\n\r\n        let edger = edges;\r\n        this.edgeFactory = {};\r\n        for (let id in edger) {\r\n            if (edger.hasOwnProperty(id) === true) {\r\n                this.edgeFactory[id] = edger[id];\r\n            }\r\n        }\r\n\r\n        let layouter = layouts;\r\n        this.layoutFactory = {};\r\n        for (let id in layouter) {\r\n            if (layouter.hasOwnProperty(id) === true) {\r\n                this.layoutFactory[id] = layouter[id];\r\n            }\r\n        }\r\n    }\r\n\r\n    private initCanvas() {\r\n        if (this.options.canvas) {\r\n            this.$view = document.getElementById(this.options.canvas);\r\n        }\r\n        if (!this.$view) {\r\n            this.$view = document.createElement('div');\r\n            this.$view.setAttribute('class', 'diagram');\r\n            document.body.appendChild(this.$view);\r\n        }\r\n    }\r\n\r\n    private initFeatures(features: any) {\r\n\r\n        if (features) {\r\n            if (features.newedge) {\r\n                EventBus.subscribe(new NewEdge(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            this.importFile = new ImportFile(this);\r\n            if (features.import) {\r\n                EventBus.subscribe(this.importFile, 'dragover', 'dragleave', 'drop');\r\n            }\r\n            if (features.zoom) {\r\n                let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n                EventBus.subscribe(new Zoom(this), mousewheel);\r\n            }\r\n            if (features.drag) {\r\n                EventBus.subscribe(new Drag(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            if (features.select) {\r\n                EventBus.subscribe(new Select(this), 'click', 'drag');\r\n            }\r\n            if (features.palette) {\r\n                new Palette(this).show();\r\n            }\r\n            if (features.toolbar) {\r\n                new Toolbar(this).show();\r\n            }\r\n            if (features.properties) {\r\n                let propertyPanel = new PanelGroup(this);\r\n                // let dispatcher = new PropertiesDispatcher(this);\r\n                EventBus.subscribe(propertyPanel, 'dblclick', 'click', EventBus.RELOADPROPERTIES);\r\n                propertyPanel.show();\r\n            }\r\n            if (features.addnode) {\r\n                EventBus.subscribe(new AddNode(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n        }\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport {DiagramElement, Point} from './BaseElements';\r\nimport {Association} from './edges';\r\nimport {Node} from './nodes';\r\nimport {Control} from '../Control';\r\nimport {Util} from '../util';\r\nimport {EventBus} from '../EventBus';\r\n\r\nexport class GraphModel extends DiagramElement {\r\n    nodes: Node[] = [];\r\n    edges: Association[] = [];\r\n    package: string;\r\n    genPath: string;\r\n    $isLoading: boolean;\r\n\r\n    public load(data?: any) {\r\n\r\n        this.$isLoading = true;\r\n        data = data || {};\r\n        this.property = data.type || data.property || 'classdiagram';\r\n        this.id = 'RootElement';\r\n        if (data.nodes) {\r\n            for (let node of data.nodes) {\r\n                this.addNode(node);\r\n            }\r\n        }\r\n        if (data.edges) {\r\n            for (let edge of data.edges) {\r\n                this.addEdge(edge);\r\n            }\r\n        }\r\n\r\n        this.$isLoading = false;\r\n    }\r\n\r\n    public getNodeByPosition(x: number, y: number): Node {\r\n        for (let node of this.nodes) {\r\n            let posOfNode: Point = (<Node>node).getPos();\r\n            let sizeOfNode: Point = (<Node>node).getSize();\r\n\r\n            if ((posOfNode.x <= x && (posOfNode.x + sizeOfNode.x) >= x)\r\n                && (posOfNode.y <= y && (posOfNode.y + sizeOfNode.y) >= y)) {\r\n                return node;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.initCanvas();\r\n        return this;\r\n    }\r\n\r\n    public addElement(type: string): boolean {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n        if (element) {\r\n            Util.saveToLocalStorage(this);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues: Object): DiagramElement {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n\r\n        // position\r\n        if (optionalValues) {\r\n            if (optionalValues.hasOwnProperty('x') && optionalValues.hasOwnProperty('y')) {\r\n                let x = optionalValues['x'];\r\n                let y = optionalValues['y'];\r\n                element.withPos(x, y);\r\n            }\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return element;\r\n    }\r\n\r\n    public removeAllElements(): void {\r\n\r\n        let nodesLength = this.nodes.length;\r\n        for (let i = 0; i < nodesLength; i++) {\r\n            this.removeElement(this.nodes[0].id);\r\n        }\r\n\r\n        this.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n    }\r\n\r\n    public removeElement(id: string): boolean {\r\n\r\n        let element = this.getDiagramElementById(id);\r\n        if (!element) {\r\n            return false;\r\n        }\r\n\r\n        (<Graph>this.$owner).removeElement(element);\r\n\r\n        if (element instanceof Node) {\r\n\r\n            let idxOfNode = this.nodes.indexOf(element);\r\n            if (idxOfNode > -1) {\r\n                this.nodes.splice(idxOfNode, 1);\r\n            }\r\n\r\n            while (element.$edges.length > 0) {\r\n                this.removeElement(element.$edges[0].id);\r\n            }\r\n\r\n            element.$edges = [];\r\n        }\r\n        else if (element instanceof Association) {\r\n\r\n            let idxOfEdge = this.edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                this.edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from source\r\n            idxOfEdge = element.$sNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$sNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from target\r\n            idxOfEdge = element.$tNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$tNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return true;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        const size = 10;\r\n        const path = `M${-size} 0 L${+size} 0 M0 ${-size} L0 ${+size}`;\r\n\r\n        const attr = {\r\n            tag: 'path',\r\n            id: 'origin',\r\n            d: path,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: 'none'\r\n        };\r\n        let shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: 0 - size,\r\n            y: 0 - size / 1.5,\r\n            'text-anchor': 'end',\r\n            'font-family': 'Verdana',\r\n            'font-size': '9',\r\n            fill: '#999'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = '(0, 0)';\r\n\r\n        let group = this.createShape({tag: 'g'});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEUP, EventBus.ELEMENTMOUSELEAVE, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTMOUSEWHEEL, EventBus.ELEMENTCLICK, EventBus.ELEMENTDRAG];\r\n    }\r\n\r\n    public getNewId(prefix?: string): string {\r\n        let id = (prefix ? prefix.toLowerCase() + '-' : '') + Math.floor(Math.random() * 100000);\r\n        return id;\r\n    }\r\n\r\n    public getEdgeById(id: string): Association {\r\n        for (let edge of this.edges) {\r\n            if (edge.id === id) {\r\n                return edge;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    public getDiagramElementById(id: string): DiagramElement {\r\n\r\n        return this.getNodeById(id) || this.getEdgeById(id);\r\n    }\r\n\r\n    /**\r\n     * Add an edge with data in json file. Optional you can say, that the edge should have\r\n     * the points of source node and target node.\r\n     * @param edge information about edge in json\r\n     * @param withPosOfNodes optional. set points to line of source and target node\r\n     */\r\n    public addEdge(edge: any, withPosOfNodes?: boolean): Association {\r\n\r\n        // lookup in factoryedges and check if the edge type realy exists\r\n        if (edge && edge.type) {\r\n            const graph = (<Graph>this.$owner);\r\n            let typeExists = false;\r\n            for (let edgeType in graph.edgeFactory) {\r\n                if (edgeType === edge.type) {\r\n                    typeExists = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!typeExists) {\r\n                edge.type = 'Association';\r\n            }\r\n        }\r\n\r\n        let type = edge.type || 'Association';\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n\r\n        let newEdge = <Association>this.createElement(type, id, edge);\r\n        newEdge.type = type;\r\n\r\n        let source: Node;\r\n        let sourceAsString: string = edge.source.id || edge.source;\r\n        if (sourceAsString) {\r\n            source = this.getNodeById(sourceAsString);\r\n            if (!source) {\r\n                let nodeID = edge.source;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                source = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                source.init(this);\r\n            }\r\n        }\r\n\r\n        let target: Node;\r\n        let targetAsString: string = edge.target.id || edge.target;\r\n        if (targetAsString) {\r\n            target = this.getNodeById(targetAsString);\r\n            if (!target) {\r\n                let nodeID = edge.target;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                target = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                target.init(this);\r\n            }\r\n        }\r\n\r\n        newEdge.withItem(source, target);\r\n\r\n        if (withPosOfNodes) {\r\n            let srcX = source.getPos().x + (source.getSize().x / 2);\r\n            let srcY = source.getPos().y + (source.getSize().y / 2);\r\n\r\n            let targetX = target.getPos().x + (target.getSize().x / 2);\r\n            let targetY = target.getPos().y + (target.getSize().y / 2);\r\n\r\n            newEdge.addPoint(srcX, srcY);\r\n            newEdge.addPoint(targetX, targetY);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public createElement(type: string, id: string, data: Object): DiagramElement {\r\n        const graph = <Graph>this.$owner;\r\n        let element: DiagramElement;\r\n        if (graph.nodeFactory[type]) {\r\n            element = new graph.nodeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.nodes.push(<Node>element);\r\n        }\r\n        if (graph.edgeFactory[type]) {\r\n            element = new graph.edgeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.edges.push(<Association>element);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public getNodeById(id: string): Node {\r\n        for (let node of this.nodes) {\r\n            if (node.id === id) {\r\n                return node;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    private initCanvas() {\r\n        const graph = <Graph>this.$owner;\r\n        graph.canvasSize = {width: graph.$view.clientWidth, height: graph.$view.clientHeight};\r\n        graph.root = Util.createShape({\r\n            tag: 'svg',\r\n            id: 'root',\r\n            width: graph.canvasSize.width,\r\n            height: graph.canvasSize.height\r\n            // FIXME,viewBox: `${this.$graph.options.origin.x * -1} ${this.$graph.options.origin.y * -1} ${this.$graph.canvasSize.width} ${this.$graph.canvasSize.height}`\r\n        });\r\n        this.$view = graph.root;\r\n        graph.$view.appendChild(graph.root);\r\n\r\n        let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    private addNode(node: Node): Node {\r\n        let type = node['type'] || node.property || 'Node';\r\n        type = Util.toPascalCase(type);\r\n        let id = node['id'] || node['name'] || this.getNewId(type);\r\n\r\n        return <Node>this.createElement(type, id, node);\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction } from './index';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\n\r\nexport abstract class Aggregate extends Association {\r\n\r\n    protected $diamond: Element;\r\n\r\n    public getSVG(): Element {\r\n\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled diamond\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n        };\r\n\r\n        this.$diamond = this.createShape(attr);\r\n\r\n        group.appendChild(this.$diamond);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint: Point = this.$points[0];\r\n        let direction: Direction = Direction.Down;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if (this.$sNode.id === startNode.id || this.$points.length == 2) {\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$diamond.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint: Point, direction: Direction): string {\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                path = `M${startX} ${startY} L${startX + 6} ${startY + 10} L${startX} ${startY + 20} L${startX - 6} ${startY + 10} Z`;\r\n                startPoint.y = startPoint.y+20;\r\n                break;\r\n            case Direction.Right:\r\n                path = `M${startX} ${startY} L${startX - 10} ${startY + 6} L${startX - 20} ${startY} L${startX - 10} ${startY - 6} Z`;\r\n                startPoint.x = startPoint.x-20;\r\n                break;\r\n            case Direction.Left:\r\n                path = `M${startX} ${startY} L${startX + 10} ${startY - 6} L${startX + 20} ${startY} L${startX + 10} ${startY + 6} Z`;\r\n                startPoint.x = startPoint.x+20;\r\n                break;\r\n            case Direction.Down:\r\n                path = `M${startX} ${startY} L${startX - 6} ${startY - 10} L${startX} ${startY - 20} L${startX + 6} ${startY - 10} Z`;\r\n                startPoint.y = startPoint.y-20;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Aggregation extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'white');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { DiagramElement, Line, Point } from '../BaseElements';\r\nimport { Node } from '../nodes';\r\nimport { InfoText } from '../nodes/InfoText';\r\nimport { Util } from '../../util';\r\nimport { EventBus } from '../../EventBus';\r\nimport * as edges from '../edges';\r\nimport { Graph } from '../Graph';\r\n\r\nexport const enum Direction {\r\n    Up, Down, Left, Right\r\n}\r\n\r\nexport class Association extends DiagramElement {\r\n    public source: string;\r\n    public target: string;\r\n    public type: string;\r\n    public $sNode: Node;\r\n    public $tNode: Node;\r\n    public lineStyle: string;\r\n    public $points: Point[] = [];\r\n    public $pathSvg: Element;\r\n    public $pathWideSvg: Element;\r\n    public info: InfoText;\r\n    public sourceInfo: InfoText;\r\n    public targetInfo: InfoText;\r\n    $m: number;\r\n    $n: number;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super();\r\n\r\n        this.withData(data);\r\n    }\r\n\r\n    public withData(data: JSON | string | Object | any): Association {\r\n\r\n        if (!data) {\r\n            return this;\r\n        }\r\n        let srcInfo;\r\n        let trgInfo;\r\n\r\n        if (data.source && typeof data.source !== 'string') {\r\n            srcInfo = data.source;\r\n        }\r\n        else if (data.sourceInfo && typeof data.sourceInfo !== 'string') {\r\n            srcInfo = data.sourceInfo;\r\n        }\r\n\r\n        if (srcInfo) {\r\n            this.sourceInfo = new InfoText(srcInfo);\r\n            this.sourceInfo.$owner = this;\r\n        }\r\n\r\n        if (data.target && typeof data.target !== 'string') {\r\n            trgInfo = data.target;\r\n        }\r\n        else if (data.targetInfo && typeof data.targetInfo !== 'string') {\r\n            trgInfo = data.targetInfo;\r\n        }\r\n\r\n        if (trgInfo) {\r\n            this.targetInfo = new InfoText(trgInfo);\r\n            this.targetInfo.$owner = this;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    public updateSrcCardinality(cardinality: string): void {\r\n        this.sourceInfo = this.updateCardinality(this.$sNode, this.sourceInfo, cardinality);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetCardinality(cardinality: string): void {\r\n        this.targetInfo = this.updateCardinality(this.$tNode, this.targetInfo, cardinality);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateSrcProperty(property: string): void {\r\n        this.sourceInfo = this.updateProperty(this.$sNode, this.sourceInfo, property);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetProperty(property: string): void {\r\n        this.targetInfo = this.updateProperty(this.$tNode, this.targetInfo, property);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public withItem(source: Node, target: Node): Association {\r\n        source.$edges.push(this);\r\n        target.$edges.push(this);\r\n        this.$sNode = source;\r\n        this.$tNode = target;\r\n        this.source = source.id;\r\n        this.target = target.id;\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let group = Util.createShape({ tag: 'g', id: this.id, class: 'SVGEdge' });\r\n\r\n        let path: string = this.getPath();\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'none'\r\n        };\r\n        let pathLine = this.createShape(attr);\r\n\r\n        //attr['style'] = 'stroke-width:20;opacity:0;width:20;height:20';\r\n        let extendedPathLine = Util.createShape(attr);\r\n\r\n        group.appendChild(extendedPathLine);\r\n        group.appendChild(pathLine);\r\n\r\n        if (this.sourceInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.sourceInfo.getSVG());\r\n        }\r\n        if (this.targetInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.targetInfo.getSVG());\r\n        }\r\n\r\n        this.$pathWideSvg = extendedPathLine;\r\n        this.$pathSvg = pathLine;\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.EDITOR, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    public convertEdge(type: string, newId: string, redraw?: boolean): Association {\r\n        if (!edges[type]) {\r\n            return this;\r\n        }\r\n\r\n        let newEdge: Association = new edges[type]();\r\n        newEdge.withItem(this.$sNode, this.$tNode);\r\n        newEdge.id = newId;\r\n        newEdge.type = type;\r\n        newEdge.lineStyle = this.lineStyle;\r\n        newEdge.$owner = this.$owner;\r\n\r\n        if (this.sourceInfo) {\r\n            newEdge.sourceInfo = new InfoText({ property: this.sourceInfo.property, cardinality: this.sourceInfo.cardinality });\r\n            newEdge.sourceInfo.$owner = newEdge;\r\n        }\r\n\r\n        if (this.targetInfo) {\r\n            newEdge.targetInfo = new InfoText({ property: this.targetInfo.property, cardinality: this.targetInfo.cardinality });\r\n            newEdge.targetInfo.$owner = newEdge;\r\n        }\r\n\r\n        this.$points.forEach(point => {\r\n            newEdge.addPoint(point.x, point.y);\r\n        });\r\n\r\n        let graph = <Graph>this.getRoot();\r\n        if (!graph) {\r\n            return this;\r\n        }\r\n\r\n        // update model. insert the edge exact on the same index, like the old edge\r\n        let idx = graph.$graphModel.edges.indexOf(this);\r\n        graph.$graphModel.removeElement(this.id);\r\n        if (idx > -1) {\r\n            graph.$graphModel.edges.splice(idx, 0, newEdge);\r\n        }\r\n        else {\r\n            graph.$graphModel.edges.push(newEdge);\r\n        }\r\n\r\n        if (!redraw) {\r\n            return newEdge;\r\n        }\r\n\r\n        let svgRoot: Element;\r\n        if (graph) {\r\n            svgRoot = graph.root;\r\n        }\r\n        else {\r\n            svgRoot = document.getElementById('root');\r\n        }\r\n        let newEdgeSvg = newEdge.getSVG();\r\n\r\n        // update graph\r\n        graph.removeElement(this);\r\n        svgRoot.appendChild(newEdgeSvg);\r\n\r\n        // redraw the edge from both sides to get the correct display\r\n        // if the type is edge, so the path can be redraw.\r\n        // if not, so the inherited class redraw the path with his own logic\r\n\r\n        let dontDrawPath: boolean = (type !== 'Edge');\r\n        newEdge.redraw(newEdge.$sNode, dontDrawPath);\r\n        newEdge.redraw(newEdge.$tNode, dontDrawPath);\r\n\r\n        EventBus.register(newEdge, newEdgeSvg);\r\n\r\n        this.sourceInfo = undefined;\r\n        this.targetInfo = undefined;\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n        // redraw the first point\r\n        // check which point is the near to startnode\r\n        let endPoint: Point;\r\n        let recalcPoint: Point;\r\n        let endPointIdx: number;\r\n\r\n        if (this.$sNode.id === startNode.id) {\r\n            recalcPoint = this.$points[0];\r\n            endPointIdx = 1;\r\n        } else if (this.$tNode.id === startNode.id) {\r\n            recalcPoint = this.$points[this.$points.length - 1];\r\n            endPointIdx = this.$points.length - 2;\r\n        }\r\n\r\n        endPoint = this.$points[endPointIdx];\r\n\r\n        // calculate and set new position of point to redraw\r\n        this.calcIntersection(startNode, recalcPoint, endPoint);\r\n\r\n        // remove the 2nd point next to startnode, if the node was dragged upper the point\r\n        if (this.$points.length > 2 && this.$tNode.id === startNode.id && endPoint.y > (startNode.getPos().y + (startNode.getSize().y / 2))) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$tNode.id === startNode.id && this.$points.length === 2) {\r\n            this.calcIntersection(this.$sNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (this.$points.length > 2 && this.$sNode.id === startNode.id && (startNode.getPos().y + (startNode.getSize().y / 2) > endPoint.y)) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$sNode.id === startNode.id && this.$points.length === 2) {\r\n\r\n            this.calcIntersection(this.$tNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (!dontDrawPoints) {\r\n            this.redrawPointsAndInfo();\r\n        }\r\n    }\r\n\r\n    public getPath(): string {\r\n\r\n        if (this.$points.length === 0) {\r\n            return '';\r\n        }\r\n\r\n        let path: string = 'M';\r\n        for (let i = 0; i < this.$points.length; i++) {\r\n            let point: Point = this.$points[i];\r\n            if (i > 0) {\r\n                path += 'L';\r\n            }\r\n            path += Math.floor(point.x) + ' ' + Math.floor(point.y) + ' ';\r\n        }\r\n\r\n        return path;\r\n    }\r\n    public calcInfoPosNew(infoTxt: InfoText, node: Node): Point {\r\n\r\n        if (!infoTxt || !node) {\r\n            return null;\r\n        }\r\n\r\n        // 1. step: get direction\r\n        let startPoint: Point;\r\n        let nextToStartPoint: Point;\r\n        if (this.$sNode.id === node.id) {\r\n            startPoint = this.$points[0];\r\n            nextToStartPoint = this.$points[1];\r\n        }\r\n        else if (this.$tNode.id === node.id) {\r\n            startPoint = this.$points[this.$points.length - 1];\r\n            nextToStartPoint = this.$points[this.$points.length - 2];\r\n        }\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(node, startPoint);\r\n\r\n        let x: number;\r\n        let y: number;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                break;\r\n            case Direction.Right:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x - (infoTxt.getSize().x) - 5;\r\n                break;\r\n            case Direction.Left:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x + 5;\r\n                break;\r\n            case Direction.Down:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        // assign calculated position to infotext\r\n        return new Point(x, y);\r\n    }\r\n\r\n    public clearPoints(): any {\r\n        this.$points = [];\r\n        this.$points = [];\r\n    }\r\n\r\n    public addPoint(x: number, y: number): Point[] {\r\n        this.$points.push(new Point(x, y));\r\n\r\n        return this.$points;\r\n    }\r\n\r\n    protected redrawPointsAndInfo(): void {\r\n        // redraw the edge with the new position\r\n        let path: string = this.getPath();\r\n        this.$pathSvg.setAttributeNS(null, 'd', path);\r\n        this.$pathWideSvg.setAttributeNS(null, 'd', path);\r\n\r\n        this.redrawSourceInfo();\r\n        this.redrawTargetInfo();\r\n    }\r\n\r\n    protected redrawSourceInfo() {\r\n        if (this.sourceInfo) {\r\n            let newPosOfSrc = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.redrawFromEdge(newPosOfSrc);\r\n        }\r\n    }\r\n\r\n    protected redrawTargetInfo() {\r\n        if (this.targetInfo) {\r\n            let newPosOfTarget = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.redrawFromEdge(newPosOfTarget);\r\n        }\r\n    }\r\n\r\n    protected getDirectionOfPointToNode(node: Node, pointNearNode: Point): Direction {\r\n        /*\r\n            Example to calculate the direction of nearest point to Node\r\n\r\n            node\r\n         x1_ _ _ _\r\n          |       |\r\n          |       |. pointNearNode\r\n          |       |\r\n          |_ _ _ x2\r\n\r\n          the calculation would return Direction.Left\r\n        */\r\n\r\n        let x1: Point = node.getPos();\r\n        let x2: Point = new Point((x1.x + node.getSize().x), (x1.y + node.getSize().y));\r\n        let direction: Direction = Direction.Down;\r\n\r\n        if (x1.y >= pointNearNode.y) {\r\n            direction = Direction.Down;\r\n        }\r\n        if (x2.y <= pointNearNode.y) {\r\n            direction = Direction.Up;\r\n        }\r\n        if (x1.x >= pointNearNode.x) {\r\n            direction = Direction.Right;\r\n        }\r\n        if (x2.x <= pointNearNode.x) {\r\n            direction = Direction.Left;\r\n        }\r\n\r\n        return direction;\r\n    }\r\n\r\n    private updateCardinality(node: Node, infoText: InfoText, cardinality: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'cardinality': cardinality });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.cardinality = cardinality;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateCardinality(cardinality);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private updateProperty(node: Node, infoText: InfoText, property: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'property': property });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.property = property;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateProperty(property);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private calcIntersection(startNode: Node, recalcPoint: Point, endPoint: Point): Point {\r\n\r\n        // https://www.mathelounge.de/21534/schnittpunkt-einer-linie-mit-den-randern-eines-rechtecks\r\n        let h = startNode.getSize().y;\r\n        let w = startNode.getSize().x;\r\n\r\n        let x1: number = startNode.getPos().x + (w / 2);\r\n        let y1: number = startNode.getPos().y + (h / 2);\r\n\r\n        let x2: number = endPoint.x;\r\n        let y2: number = endPoint.y;\r\n\r\n        let newX: number = recalcPoint.x;\r\n        let newY: number = recalcPoint.y;\r\n\r\n        if (x2 > x1) {\r\n            newX = x1 + (w / 2);\r\n        }\r\n        else if (x2 < x1) {\r\n            newX = x1 - (w / 2);\r\n        }\r\n        else {\r\n            newX = x1;\r\n        }\r\n\r\n        if ((x2 - x1) !== 0) {\r\n            newY = ((y2 - y1) / (x2 - x1) * (newX - x1)) + y1;\r\n        }\r\n        else {\r\n            if (y1 > y2) {\r\n                newY = startNode.getPos().y;\r\n            }\r\n            else {\r\n                newY = startNode.getPos().y + h;\r\n            }\r\n        }\r\n\r\n        // if the statement is not true, so the intersection is at the horizontal line\r\n        if (!((y1 - (h / 2) <= newY) && newY <= y1 + (h / 2))) {\r\n\r\n            if (y2 > y1) {\r\n                newY = y1 + (h / 2);\r\n            }\r\n            else {\r\n                newY = y1 - (h / 2);\r\n            }\r\n\r\n            if ((x2 - x1) !== 0) {\r\n                let tmp = ((y2 - y1) / (x2 - x1));\r\n                newX = (newY + (tmp * x1) - y1) / tmp;\r\n            }\r\n            else {\r\n                newX = x1;\r\n            }\r\n        }\r\n\r\n        recalcPoint.x = Math.ceil(newX);\r\n        recalcPoint.y = Math.ceil(newY);\r\n\r\n        return null;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Composition extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'black');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { Association } from './Association';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\nimport { Direction } from '../index';\r\n\r\nexport class Generalisation extends Association {\r\n\r\n    public $TARGET_ELEMENT_HEIGHT : number = 12;\r\n    protected $targetElement: Element;\r\n\r\n    public getSVG(): Element {\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction : Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled arrow\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'white'\r\n          };\r\n\r\n        this.$targetElement = this.createShape(attr);\r\n\r\n        group.appendChild(this.$targetElement);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean) : void {\r\n\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint : Point = this.$points[0];\r\n        let direction : Direction = Direction.Up;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if(this.$sNode.id === startNode.id || this.$points.length == 2){\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$targetElement.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint : Point, direction : Direction) : string{\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch(direction){\r\n            case Direction.Up:\r\n            path = `M${startX} ${startY+3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y+12;\r\n            break;\r\n            case Direction.Right:\r\n            path = `M${startX-3} ${startY} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x-12;\r\n            break;\r\n            case Direction.Left:\r\n            path = `M${startX+3} ${startY} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x+12;\r\n            break;\r\n            case Direction.Down:\r\n            path = `M${startX} ${startY-3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y-12;\r\n            break;\r\n            default :\r\n            break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n\r\n}\r\n","import { Generalisation } from './Generalisation';\r\n\r\nexport class Implements extends Generalisation {\r\n\r\n    public getSVG(): Element {\r\n        let group = super.getSVG();\r\n\r\n        this.$pathSvg.setAttributeNS(null, 'stroke-dasharray', '3, 3');\r\n\r\n        return group;\r\n    }\r\n}\r\n","export * from './Association';\r\nexport * from './Aggregate';\r\nexport * from './Aggregation';\r\nexport * from './Composition';\r\nexport * from './Generalisation';\r\nexport * from './Implements';","export * from './edges';\r\nexport * from './nodes';\r\nexport * from './BaseElements';\r\nexport * from './Graph';\r\nexport * from './Model';\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Attribute extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 28.06.2017.\r\n */\r\nimport {Control} from \"../../Control\";\r\n\r\nexport class AutoComplete extends Control {\r\n    private $inputField:HTMLInputElement;\r\n    private $dataList:HTMLDataListElement;\r\n    private $selected:HTMLSelectElement;\r\n    private $items:HTMLDivElement;\r\n    private isMultiple:boolean;\r\n\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        let div:HTMLDivElement = document.createElement('div');\r\n        this.$view = div;\r\n        this.$inputField = document.createElement('input');\r\n        this.$dataList = document.createElement(\"datalist\");\r\n        this.$dataList.id = \"data_\"+this.id;\r\n        this.$inputField.setAttribute(\"list\", \"data_\"+this.id);\r\n        if(data[\"value\"]) {\r\n            let values = data[\"value\"];\r\n            this.isMultiple = data[\"multiple\"] != null;\r\n            let option:HTMLOptionElement;\r\n            if(this.isMultiple) {\r\n                this.$selected = document.createElement(\"select\");\r\n                this.$selected.className = \"hide\";\r\n                this.$selected.multiple = true;\r\n\r\n                this.$selected.id = this.id;\r\n                this.$items = document.createElement(\"div\");\r\n                this.$items.className = \"selectedList\";\r\n                div.appendChild(this.$items);\r\n                this.$inputField.className = \"selectedInput\";\r\n                div.appendChild(this.$selected);\r\n                this.$view[\"style\"].setProperty(\"float\", \"left\");\r\n                let that = this;\r\n                this.$inputField.oninput = function(){that.onChange();}\r\n            } else {\r\n                this.$inputField.id = this.id;\r\n            }\r\n            for (let attr in values) {\r\n                if (!values.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                option = document.createElement(\"option\");\r\n                option.value = values[attr];\r\n                this.$dataList.appendChild(option);\r\n                if(this.isMultiple) {\r\n                    option = document.createElement(\"option\");\r\n                    option.value = values[attr];\r\n                    option.innerHTML = values[attr];\r\n                    this.$selected.appendChild(option);\r\n                }\r\n        }\r\n\r\n            div.appendChild(this.$inputField);\r\n            div.appendChild(this.$dataList);\r\n        }\r\n\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n            if(this.isMultiple) {\r\n                div.appendChild(this.$selected);\r\n            }\r\n        }\r\n\r\n        parent.appendChild(this);\r\n    }\r\n\r\n    public onChange() : void {\r\n        let textValue:string = this.$inputField.value;\r\n        if(textValue.length<1) {\r\n            return;\r\n        }\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == textValue) {\r\n                if(item.selected == false) {\r\n                    item.selected = true;\r\n                    item.defaultSelected = true;\r\n                    let test = document.createElement(\"li\");\r\n                    let that = this;\r\n                    test.onclick = function() {that.onDelete(item.value, test);};\r\n                    test.className = \"selectedItem\";\r\n                    test.innerHTML = item.value;\r\n                    this.$items.appendChild(test);\r\n                    this.$inputField.value = \"\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n    public onDelete(value:string, selectedItem:HTMLLIElement) : void {\r\n        this.$items.removeChild(selectedItem);\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == value ) {\r\n                if(item.selected) {\r\n                    item.selected = false;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","import {Control} from '../../Control';\r\n\r\nexport class BR extends Control {\r\n    public load(json: JSON): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('br');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            this.$view.setAttribute(attr, data[attr]);\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\nexport class Button extends Control {\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        this.$view = document.createElement('button');\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\nimport { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\nimport { Size } from '../index';\r\nimport ClazzProperty from './ClazzProperty';\r\nimport {SymbolLibary} from './Symbol';\r\nimport {StereoType} from './StereoType';\r\nimport {GraphListener} from '../../handlers/GraphListener';\r\n\r\nexport class Class extends Node {\r\n    public attributes: Attribute[] = [];\r\n    public methods: Method[] = [];\r\n    public modifier: string;\r\n    public stereoType: string;\r\n\r\n    protected $attrHeight = 25;\r\n    protected $attrFontSize = 12;\r\n    protected $labelView: Element;\r\n\r\n    constructor(json: JSON | string | Object | any) {\r\n        super(json);\r\n        return this;\r\n    }\r\n\r\n    public load(json?: any) {\r\n        if (!json) {\r\n            json = {};\r\n        }\r\n        let y = this.$labelHeight;\r\n        let labelObj = json.name || json.id || ('New ' + this.property);\r\n\r\n        let width: number = 150;\r\n        width = Math.max(width, Util.sizeOf(labelObj).width + 60);\r\n\r\n        if (json['attributes']) {\r\n            for (let attr of json['attributes']) {\r\n\r\n                let attrObj = new Attribute(attr);\r\n                attrObj.$owner = this;\r\n                this.attributes.push(attrObj);\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(attrObj.toString()).width);\r\n                let listener = new GraphListener(attrObj);\r\n                attrObj.$data.addListener(listener);\r\n            }\r\n        }\r\n        if (json['stereotype']) {\r\n            this.stereoType = json['stereotype'];\r\n        }\r\n        if (json['methods']) {\r\n            for (let method of json['methods']) {\r\n\r\n                let methodObj = new Method(method);\r\n                methodObj.$owner = this;\r\n                this.methods.push(methodObj);\r\n\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(methodObj.toString()).width);\r\n            }\r\n            y += this.$attrHeight;\r\n        }\r\n        this.withSize(width, y);\r\n    }\r\n\r\n    public getAttributes(): Attribute[] {\r\n        return this.attributes;\r\n    }\r\n\r\n    public getMethods(): Method[] {\r\n        return this.methods;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        let icon = SymbolLibary.draw({type: 'Class', property: 'HTML', width: '50', height: '50', transform: 'translate(-26,-21)'});\r\n        return icon;\r\n        // let group = this.createShape(\r\n//    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n//    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos: Point = this.getPos();\r\n        const size: Point = this.getSize();\r\n\r\n        let group = this.createShape({ tag: 'g', id: this.id, class: 'SVGClazz', transform: 'translate(0 0)' });\r\n\r\n        if (this.stereoType) {\r\n            let type = new StereoType(this.stereoType, pos.x, pos.y);\r\n            group.appendChild(type.getSVG());\r\n        }\r\n\r\n        // Full Shape\r\n        let options = null;\r\n        let style;\r\n        let clazzName;\r\n        if (this.$owner['options']) {\r\n            let options = this.$owner['options'];\r\n            if (options) {\r\n                style = options.style;\r\n            }\r\n        }\r\n        // = = = Background = = =\r\n        if (style === 'modern') {\r\n            clazzName = 'ClazzHeader';\r\n        }\r\n        clazzName = 'ClazzHeader';\r\n        const nodeShape = this.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            height: size.y,\r\n            width: size.x,\r\n            rx: 5,\r\n            ry: 5,\r\n            fill: 'none',\r\n            stroke: 'black',\r\n            'stroke-width': 1\r\n        });\r\n        if (clazzName) {\r\n            nodeShape.setAttribute('className', clazzName);\r\n            let styleHeader = Util.getStyle('ClazzHeader');\r\n            // headerHeight = styleHeader.getNumber('height');\r\n        }\r\n\r\n        // = = = LABEL = = =\r\n        let label = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y + this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': this.$labelFontSize,\r\n            fill: 'black'\r\n        });\r\n        label.textContent = this.id;\r\n        this.$labelView = label;\r\n\r\n        group.appendChild(nodeShape);\r\n        group.appendChild(label);\r\n\r\n        // = = = ATTRIBUTES = = =\r\n        if (this.attributes.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorLabelAttr = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight,\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight,\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorLabelAttr);\r\n\r\n            let groupOfAttributes = this.createShape({ tag: 'g', id: (this.id + 'Attributes') });\r\n            groupOfAttributes.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzAttribute');\r\n            group.appendChild(groupOfAttributes);\r\n\r\n            let y = pos.y + this.$labelHeight + this.$attrHeight / 2;\r\n            for (let attr of this.attributes) {\r\n\r\n                let attrSvg = attr.getSVG();\r\n                attr.$owner = this;\r\n\r\n                attrSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                attrSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfAttributes.appendChild(attrSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        // = = = METHODS = = =\r\n        let height = this.attributes.length * this.$attrHeight;\r\n        let y = pos.y + this.$labelHeight + height + this.$attrHeight / 2;\r\n        if (this.methods.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorAttrMethods = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorAttrMethods);\r\n\r\n            let groupOfMethods = this.createShape({ tag: 'g', id: (this.id + 'Methods') });\r\n            groupOfMethods.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzMethod');\r\n            group.appendChild(groupOfMethods);\r\n\r\n            y += this.$attrHeight / 2;\r\n            for (let method of this.methods) {\r\n\r\n                let methodSvg = method.getSVG();\r\n                method.$owner = this;\r\n\r\n                methodSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                methodSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfMethods.appendChild(methodSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        this.$view = group;\r\n        return group;\r\n    }\r\n\r\n    public copy(): Class {\r\n        let copy: Class;\r\n        copy = <Class>super.copy();\r\n\r\n        // copy label\r\n        copy.id = this.id + 'Copy';\r\n\r\n        // copy attributes\r\n        this.attributes.forEach(attr => {\r\n            copy.attributes.push(new Attribute(attr.toString()));\r\n        });\r\n        // copy methods\r\n        this.methods.forEach(method => {\r\n            copy.methods.push(new Method(method.toString()));\r\n        });\r\n        copy.reCalcSize();\r\n\r\n        return copy;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTCLICK,\r\n                EventBus.ELEMENTDRAG, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES, EventBus.RELOADPROPERTIES];\r\n    }\r\n\r\n    public addProperty(value: string, type: string): any {\r\n        if (!this[type] || !value || value.length === 0) {\r\n            return;\r\n        }\r\n\r\n        let extractedValue;\r\n        if (type === 'attributes') {\r\n            extractedValue = new Attribute(value);\r\n        }\r\n        else if (type === 'methods') {\r\n            extractedValue = new Method(value);\r\n        }\r\n\r\n        for (let valueOfType of this[type]) {\r\n            if (valueOfType.toString() === extractedValue.toString()) {\r\n                alert(extractedValue.toString() + ' already exists.');\r\n                extractedValue = undefined;\r\n                return;\r\n            }\r\n        }\r\n\r\n        this[type].push(extractedValue);\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        return extractedValue;\r\n    }\r\n\r\n    public addAttribute(value: string): Attribute {\r\n        return this.addProperty(value, 'attributes');\r\n    }\r\n\r\n    public addAttributeObj(attr: Attribute): Attribute[] {\r\n        this.attributes.push(attr);\r\n        return this.getAttributes();\r\n    }\r\n\r\n    public addMethodObj(method: Method): Method[] {\r\n        this.methods.push(method);\r\n        return this.getMethods();\r\n    }\r\n\r\n    public addMethod(value: string): Method {\r\n        return this.addProperty(value, 'methods');\r\n    }\r\n\r\n    public removeAttribute(attr: Attribute): void {\r\n        let idx = this.attributes.indexOf(attr);\r\n        this.attributes.splice(idx, 1);\r\n    }\r\n\r\n    public removeMethod(method: Method): void {\r\n        let idx = this.methods.indexOf(method);\r\n        this.methods.splice(idx, 1);\r\n    }\r\n\r\n    public removeProperty(property: ClazzProperty): void {\r\n\r\n        if (property instanceof Attribute) {\r\n            this.removeAttribute(<Attribute>property);\r\n        }\r\n\r\n        if (property instanceof Method) {\r\n            this.removeMethod(<Method>property);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n        let hasSizeChanged: [boolean, Size] = this.hasSizeChanged();\r\n\r\n        if (drawOnlyIfSizeChanged) {\r\n            if (!hasSizeChanged[0]) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n\r\n        // redraw only this clazz\r\n        this.$owner.$view.removeChild(this.$view);\r\n        let newSvg = this.getSVG();\r\n        this.$owner.$view.appendChild(newSvg);\r\n        this.$view = newSvg;\r\n        EventBus.register(this, newSvg);\r\n\r\n        this.redrawEdges();\r\n    }\r\n\r\n    public hasSizeChanged(): [boolean, Size] {\r\n        let oldSize = { width: this.getSize().x, height: this.getSize().y };\r\n        let newSize = this.reCalcSize();\r\n\r\n        // size doenst changed, so nothing to redraw\r\n        if (oldSize.width === newSize.width && oldSize.height === newSize.height) {\r\n            return [false, newSize];\r\n        }\r\n\r\n        return [true, newSize];\r\n    }\r\n\r\n    public updateLabel(newLabel: string): void {\r\n        if (this.$labelView) {\r\n            this.$labelView.textContent = newLabel;\r\n        }\r\n\r\n        // update label in all edges\r\n        this.$edges.forEach(edge => {\r\n            if (this.id === edge.$sNode.id) {\r\n                edge.source = newLabel;\r\n            }\r\n            else if (this.id === edge.$tNode.id) {\r\n                edge.target = newLabel;\r\n            }\r\n        });\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        this.reDraw(true);\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.modifier = modifier;\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reCalcSize(): Size {\r\n        // label\r\n        let newWidth = 150;\r\n        newWidth = Math.max(newWidth, Util.sizeOf(this.id).width + 30);\r\n\r\n        // attributes\r\n        this.attributes.forEach(attrEl => {\r\n\r\n            let widthOfAttr;\r\n            if (attrEl.$view) {\r\n                widthOfAttr = attrEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfAttr = Util.sizeOf(attrEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfAttr + 15);\r\n        });\r\n\r\n        // methods\r\n        this.methods.forEach(methodEl => {\r\n            let widthOfMethod;\r\n            if (methodEl.$view) {\r\n                widthOfMethod = methodEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfMethod = Util.sizeOf(methodEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfMethod + 15);\r\n        });\r\n\r\n        // TODO: height has to be calculated by font-size\r\n        this.getSize().x = newWidth;\r\n        this.getSize().y = this.$labelHeight + ((this.attributes.length + this.methods.length) * this.$attrHeight)\r\n            + this.$attrHeight;\r\n\r\n        let newSize = { width: newWidth, height: this.getSize().y };\r\n\r\n        return newSize;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    private getModernStyle(): Element {\r\n        let width, height, id, size, z, item, rect, g, board, styleHeader, headerHeight, x, y;\r\n        board = this.getRoot()['board'];\r\n        styleHeader = Util.getStyle('ClazzHeader');\r\n        headerHeight = styleHeader.getNumber('height');\r\n        width = 0;\r\n        height = 10 + headerHeight;\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].getType().toLowerCase() === 'objectdiagram') {\r\n            id = this.id.charAt(0).toLowerCase() + this.id.slice(1);\r\n            item = 'Object';\r\n        } else {\r\n            id = this.id;\r\n            item = 'Class';\r\n            if (this['counter']) {\r\n                id += ' (' + this['counter'] + ')';\r\n            }\r\n        }\r\n        g = Util.create({tag: 'g', model: this});\r\n        size = Util.sizeOf(id, this);\r\n        width = Math.max(width, size.width);\r\n        if (this.attributes && this.attributes.length > 0) {\r\n            height = height + this.attributes.length * 25;\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.attributes[z], this).width);\r\n            }\r\n        } else {\r\n            height += 20;\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            height = height + this.methods.length * 25;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.methods[z], this).width);\r\n            }\r\n        }\r\n        width += 20;\r\n\r\n        let pos = this.getPos();\r\n        y = pos.y;\r\n        x = pos.x;\r\n\r\n        rect = {\r\n            tag: 'rect',\r\n            'width': width,\r\n            'height': height,\r\n            'x': x,\r\n            'y': y,\r\n            'class': item + ' draggable',\r\n            'fill': 'none'\r\n        };\r\n        g.appendChild(Util.create(rect));\r\n        g.appendChild(Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            'x': x,\r\n            'y': y,\r\n            height: headerHeight,\r\n            'width': width,\r\n            'class': 'ClazzHeader'\r\n        }));\r\n\r\n        item = Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'class': 'InfoText',\r\n            'text-anchor': 'right',\r\n            'x': x + width / 2 - size.width / 2,\r\n            'y': y + (headerHeight / 2) + (size.height / 2),\r\n            'width': size.width\r\n        });\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].type.toLowerCase() === 'objectdiagram') {\r\n            item.setAttribute('text-decoration', 'underline');\r\n        }\r\n        item.appendChild(document.createTextNode(id));\r\n\r\n        g.appendChild(item);\r\n        g.appendChild(Util.create({\r\n            tag: 'line',\r\n            x1: x,\r\n            y1: y + headerHeight,\r\n            x2: x + width,\r\n            y2: y + headerHeight,\r\n            stroke: '#000'\r\n        }));\r\n        y += headerHeight + 20;\r\n\r\n        if (this.attributes) {\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': (x + 10),\r\n                    'y': y,\r\n                    value: this.attributes[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n            if (this.attributes.length > 0) {\r\n                y -= 10;\r\n            }\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            g.appendChild(Util.create({tag: 'line', x1: x, y1: y, x2: x + width, y2: y, stroke: '#000'}));\r\n            y += 20;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': x + 10,\r\n                    'y': y,\r\n                    value: this.methods[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n        }\r\n        return g;\r\n    }\r\n}\r\n","import {Util} from '../../util';\r\nimport {DiagramElement} from '../BaseElements';\r\nimport Data from '../../Data';\r\n\r\nexport default class ClazzProperty extends DiagramElement {\r\n\r\n    // Public (+)\r\n    // Private (-)\r\n    // Protected (#)\r\n    // Package (~)\r\n\r\n    public $data = new Data();\r\n//    public modifier: string = '+';\r\n//    public name: string;\r\n//    public type: string;\r\n//    public value: string;\r\n\r\n    constructor(data: any | JSON) {\r\n        super();\r\n        this.$data.setValue('modifier', '+');\r\n        this.$data.setValue('name', null);\r\n        this.$data.setValue('type', null);\r\n        this.$data.setValue('value', null);\r\n        this.extractData(data);\r\n    }\r\n\r\n    public update(data: any | JSON): void {\r\n        this.extractData(data);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.$data.setValue('modifier', modifier);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateType(type: string): void {\r\n        this.$data.setValue('type', type);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateValue(value: string): void {\r\n        this.$data.setValue('value', value);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateName(name: string): void {\r\n        this.$data.setValue('name', name);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public getName(): string {\r\n        return this.$data.getValue('name');\r\n    }\r\n\r\n    public getModifier(): string {\r\n        return this.$data.getValue('modifier');\r\n    }\r\n\r\n    public getType(): string {\r\n        return this.$data.getValue('type');\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let attrText = {\r\n            tag: 'text',\r\n            'text-anchor': 'start',\r\n            'alignment-baseline': 'middle',\r\n        };\r\n\r\n        let attrSvg = Util.createShape(attrText);\r\n        attrSvg.textContent = this.toString();\r\n\r\n        this.$view = attrSvg;\r\n\r\n        return attrSvg;\r\n    }\r\n\r\n    public toString(): string {\r\n        let value = this.$data.getValue('value');\r\n        let result = this.$data.getValue('modifier') + ' ';\r\n        result += this.$data.getValue('name') + ' : ';\r\n        result += this.$data.getValue('type');\r\n        if (value && value.length > 0) {\r\n            result += ' = ' + this.$data.getValue('value');\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.$data.setValue('type', data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.$data.setValue('name', data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.$data.setValue('modifier', data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n\r\n            // e.g. name : string or name:string\r\n            let dataSplitted = data.split(':');\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                let name;\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.$data.setValue('modifier', firstChar);\r\n                    name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                }\r\n                else {\r\n                    name = modifierAndNameSplitted;\r\n                }\r\n                // delete whitespaces in name\r\n                name = name.replace(/ /g, '_');\r\n\r\n                this.$data.setValue('name', name);\r\n                let type = dataSplitted[1].trim() || 'String';\r\n\r\n                // if the type was entered with a small begin letter\r\n                if (type.toLowerCase() === 'string') {\r\n                    type = 'String';\r\n                }\r\n                // delete whitespaces in type\r\n                type = type.replace(/ /g, '_');\r\n                this.$data.setValue('type',  type);\r\n            } else {\r\n                dataSplitted = data.split('=');\r\n                if (dataSplitted && dataSplitted.length === 2) {\r\n                    // modifer (and or) name\r\n                    let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                    // first char is +, - or #\r\n                    let firstChar = modifierAndNameSplitted[0];\r\n                    let name;\r\n                    if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                        this.$data.setValue('modifier', firstChar);\r\n                        name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                    }\r\n                    else {\r\n                        name = modifierAndNameSplitted;\r\n                    }\r\n                    // delete whitespaces in name\r\n                    name = name.replace(/ /g, '_');\r\n\r\n                    this.$data.setValue('name', name);\r\n                    let value = dataSplitted[1].trim() || '\"\"';\r\n                    this.$data.setValue('value', value);\r\n                    this.$data.setValue('type', typeof value);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected updateTextOfView() {\r\n        if (this.$view) {\r\n            this.$view.textContent = this.toString();\r\n        }\r\n        if (this.$owner) {\r\n            Util.saveToLocalStorage(this.$owner.$owner);\r\n        }\r\n    }\r\n}\r\n","import {Node} from \"./Node\";\r\n/**\r\n * Created by Stefan on 29.03.2017.\r\n */\r\n\r\nexport class Dice extends Node {\r\n    private value: number;\r\n    private max: number = 6;\r\n    private $animation: SVGElement;\r\n    private $zoom: number = 0.6;\r\n    private $border: number = 0.2;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super(data);\r\n        this.withSize(100, 100);\r\n    }\r\n\r\n    public setNumber(number: number) {\r\n        this.value = number;\r\n        this.refresh();\r\n    }\r\n\r\n    public refresh() {\r\n        if (this.$view) {\r\n            this.reset();\r\n            let group = this.createPointValue();\r\n            if (group) {\r\n                this.$view.appendChild(group);\r\n            }\r\n        }\r\n    }\r\n\r\n    public reset() {\r\n        if (this.$view) {\r\n            while (this.$view.children.length > 1) {\r\n                if(this.$view.children.item(this.$view.children.length - 1).tagName!== \"animateTransform\") {\r\n                    console.log(this.$view.children.item(this.$view.children.length - 1));\r\n                    this.$view.removeChild(this.$view.children.item(this.$view.children.length - 1));\r\n                }else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let dice: SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x + size.x * this.$border,\r\n            y: pos.y + size.y * this.$border,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y * this.$zoom,\r\n            width: size.x * this.$zoom,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        dice.appendChild(this.createShape(attr));\r\n\r\n        let group = this.createPointValue();\r\n        if (group) {\r\n            dice.appendChild(group);\r\n        }\r\n\r\n        this.$view = dice;\r\n        return dice;\r\n    }\r\n\r\n    public animationTimeout(newValues: number[]) {\r\n        if(newValues.length>0) {\r\n            let newValue = newValues.shift();\r\n            this.setNumber(newValue);\r\n            let that=this;\r\n            setTimeout(function() {that.animationTimeout(newValues)}, 100);\r\n        }\r\n    }\r\n\r\n    public roll() {\r\n        this.startAnimation();\r\n        let values:number[]=[];\r\n        let i:number;\r\n        for(i=1;i<this.max;i++) {\r\n            values.push(i);\r\n        }\r\n        for(i=this.max;i>0;i--) {\r\n            values.push(i);\r\n        }\r\n        let that=this;\r\n        values.push( Math.floor(Math.random() * this.max)+1 );\r\n        setTimeout(function() {that.animationTimeout(values)}, 100);\r\n    }\r\n    public startAnimation() {\r\n        if(this.$animation) {\r\n            return;\r\n        }\r\n        let center = this.getPos().x+this.getSize().x /2;\r\n        const attr = {\r\n            tag: 'animateTransform',\r\n            attributeType: \"xml\",\r\n            attributeName:\"transform\",\r\n            type:\"rotate\",\r\n            dur: \"1s\",\r\n            repeatCount:\"1\",\r\n            from:\"0 \"+center+\" \"+center,\r\n            to:\"360 \"+center+\" \"+center\r\n        };\r\n        this.$animation = <SVGElement>this.createShape(attr);\r\n        this.$view.appendChild(this.$animation);\r\n    }\r\n\r\n    public stopAnimation() {\r\n        if(this.$animation) {\r\n            this.$view.removeChild(this.$animation);\r\n            this.$animation = null;\r\n        }\r\n    }\r\n\r\n    public createPointValue() :SVGElement {\r\n        if (this.value == 1) {\r\n           return this.getCircle(2, 2);\r\n        } else if (this.value == 2) {\r\n            return this.getCircle(1, 1, 3, 3);\r\n        } else if (this.value == 3) {\r\n            return this.getCircle(1, 1, 2, 2, 3, 3);\r\n        } else if (this.value == 4) {\r\n            return this.getCircle(1, 1, 1, 3, 3, 1, 3, 3);\r\n        } else if (this.value == 5) {\r\n            return this.getCircle(1, 1, 1, 3, 2, 2, 3, 1, 3, 3);\r\n        } else if (this.value == 6) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 7) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 2, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 8) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 9) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private getCircle(...values:number[]) : SVGElement {\r\n        if (values.length % 2 > 0) {\r\n            return null;\r\n        }\r\n        let size = this.getSize();\r\n        let pos = this.getPos();\r\n        //FIXME let group:SVGElement = <SVGElement>this.createShape({tag: 'g', transform: 'translate(0 0)', height: size.y, width: size.x});\r\n        let group:SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n\r\n\r\n        for (let i: number = 0; i < values.length; i += 2) {\r\n            group.appendChild(this.createCircle(values[i], values[i + 1]));\r\n        }\r\n        return group;\r\n    }\r\n    private createCircle(x:number, y:number) : SVGElement {\r\n        let size = this.getSize();\r\n        let radius = size.x / 10*this.$zoom;\r\n        let border = size.y*this.$border;\r\n        let zoom = size.y*this.$zoom;\r\n        const attr = {\r\n            tag: 'circle',\r\n            r : radius,\r\n            cx: (size.x*this.$zoom * x) / 4 + border,\r\n            cy: (size.y*this.$zoom * y) / 4 + border,\r\n            stroke:\"black\",\r\n            \"stroke-width\":\"3\",\r\n            fill:\"red\",\r\n            style: 'fill:black;stroke:black;stroke-width:2'\r\n        };\r\n        return <SVGElement>this.createShape(attr);\r\n    }\r\n}","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\n\r\nexport class Div extends Control {\r\n    private className: string;\r\n\r\n    public load(data:JSON|any): any {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = <string>data;\r\n        } else {\r\n            id = data.id;\r\n            this.className = data.class;\r\n            this.property = data.property;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let div: HTMLElement = document.getElementById(id);\r\n\r\n        if (!this.property) {\r\n            // if(inputField){\r\n            // TODO disuss how to decide, which property we should listen on...\r\n            // this.property = id;\r\n            this.property = div.getAttribute('Property');\r\n            // }\r\n        }\r\n\r\n        if (div instanceof HTMLDivElement) {\r\n            this.$view = div;\r\n        } else {\r\n            if (!div) {\r\n                this.$view = document.createElement('div');\r\n                this.$view.setAttribute('id', this.id);\r\n                this.$view.setAttribute('property', this.property);\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists+\r\n        if (data.hasOwnProperty('property')) {\r\n            this.setProperty(data['property']);\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        this.$model = entity;\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.className || entity.hasProperty(this.className)) {\r\n                if (entity.id === this.property.split('.')[0]) {\r\n                    entity.addListener(this, this.className);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        this.$view.innerHTML = <string>newValue;\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Form extends Control {\r\n    // private applyingChange: boolean = false;\r\n    private children: Object = {};\r\n    // private property: string = \"\";\r\n\r\n    /**\r\n     * Data should look like the following json:\r\n     *\r\n     * <pre>{\r\n     *      id: \"t1\",\r\n     *      control: \"form\",\r\n     *      elements: [\r\n     *          {id: \"inputField1\", property: \"talk\"},\r\n     *          {id: \"inputField2\", property: \"room\"}\r\n     *      ]\r\n     * }</pre>\r\n     * @param data\r\n     */\r\n    public load(data: any) {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let form: HTMLElement = document.getElementById(id);\r\n\r\n        if (form instanceof HTMLFormElement) {\r\n            this.$view = form;\r\n            if (this.$view.hasAttribute('property')) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            if (!form) {\r\n                this.$view = document.createElement('form');\r\n                this.$view.setAttribute('id', this.id);\r\n\r\n                if (data.hasOwnProperty('property')) {\r\n                    this.property = data['property'];\r\n                }\r\n\r\n                // add all the attributes to the form element\r\n                for (let attr in data) {\r\n                    if (data.hasOwnProperty(attr) === false) {\r\n                        continue;\r\n                    }\r\n                    if (attr === 'elements') {\r\n                        continue;\r\n                    }\r\n                    this.$view.setAttribute(attr, data[attr]);\r\n                }\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists\r\n        let objId = this.property;\r\n        let hasItem = this.$owner.hasItem(objId);\r\n        if (hasItem) {\r\n            let item = this.$owner.getItem(objId);\r\n            item.addListener(this);\r\n            this.$model = item;\r\n        }\r\n\r\n        // now create all the sub input controls\r\n        for (let field of data.elements) {\r\n            // this.createField(field);\r\n            if (field.hasOwnProperty('property')) {\r\n                let property = field['property'];\r\n                property = this.property + '.' + property;\r\n                field['property'] = property;\r\n            }\r\n            if (!field.hasOwnProperty('class')) {\r\n                field['class'] = 'input';\r\n            }\r\n\r\n            // let the Bridge load the subControl\r\n            let control: Control = this.$owner.load(field, this);\r\n\r\n            // add subControl to children\r\n            this.children[control.getId()] = control;\r\n        }\r\n\r\n    }\r\n\r\n    public setProperty(id: string): void {\r\n        this.property = id;\r\n        let keys: string[] = Object.keys(this.children);\r\n        for (let k = 0; k < keys.length; k++) {\r\n            let key = keys[k];\r\n            let childControl = this.children[key];\r\n            // only set Property, if there is a Property defined before\r\n            if (childControl.property) {\r\n                childControl.setProperty(this.property + '.' + childControl.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object,  oldValue?: Object): boolean {\r\n        if (this.$owner != null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    /**\r\n     * Here we create the form elements and put all the attributes to them in order for the Control only having to load\r\n     * the data were appending here. Alternative would be loading with the bridge and afterwards setting\r\n     * the owner to the form instead of the body..\r\n     * @param field\r\n     */\r\n    /*private createField(field: Object) {\r\n     let control = 'input';\r\n     if (field.hasOwnProperty('class')) {\r\n     control = field['class'];\r\n     }\r\n     let input = document.createElement(control);\r\n     input.setAttribute('class', control);\r\n     let id: string;\r\n     if (!field.hasOwnProperty('id')) {\r\n     // TODO: not the best solution for generating unique id's for forms...\r\n     id = this.$owner.getId();\r\n     field['id'] = id;\r\n     }\r\n     if (field.hasOwnProperty('property')) {\r\n     let property = field['property'];\r\n     property = this.id + '.' + property;\r\n     input.setAttribute('property', property);\r\n     }\r\n     for (let attr in field) {\r\n     if (attr === 'property' || attr === 'class' || !field.hasOwnProperty(attr)) {\r\n     continue;\r\n     }\r\n     input.setAttribute(attr, field[attr]);\r\n     }\r\n\r\n     this.$viewElement.appendChild(input);\r\n\r\n     let newcontrol: Control = this.$owner.load(field['id']);\r\n     this.children[newcontrol.getId()] = newcontrol;\r\n     }*/\r\n}\r\n","/**\r\n * Created by Stefan on 01.03.2017.\r\n */\r\nimport {Control} from '../../Control';\r\n\r\nexport class HTML extends Control {\r\n    constructor(data: JSON|Object|any) {\r\n        super();\r\n\r\n        let id: string;\r\n        let tag: string;\r\n\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            data = {};\r\n        } else if (data) {\r\n            id = data.id;\r\n        }\r\n        if (id) {\r\n            this.id = id;\r\n            this.$view = document.getElementById(id);\r\n        }\r\n        if (!this.$view) {\r\n            if (data) {\r\n                tag = data['tag'] || 'div';\r\n            } else {\r\n                tag = 'div';\r\n            }\r\n            this.$view = document.createElement(tag);\r\n            let parent = document.getElementsByTagName('body')[0];\r\n            parent.appendChild(this.$view);\r\n        }\r\n        if (!parent) {\r\n            return;\r\n        }\r\n        this.writeAttribute(data, this.$view);\r\n    }\r\n\r\n    private writeAttribute(properties: Object, entity?: any) {\r\n        let lowKey;\r\n        if (!entity) {\r\n            lowKey = properties['tag'] || 'div';\r\n            entity = document.createElement(lowKey);\r\n        }\r\n        for (let key in properties) {\r\n            if (!properties.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            lowKey = key.toLowerCase();\r\n            if (properties[key] === null) {\r\n                entity.setAttribute(key, '');\r\n                continue;\r\n            }\r\n\r\n            if (lowKey === 'tag' || lowKey.charAt(0) === '$' || lowKey === '$graphModel' || lowKey === 'class') {\r\n                continue;\r\n            }\r\n            if (lowKey === 'children') {\r\n                if (Array.isArray(properties[key])) {\r\n                    for (let item in properties[key]) {\r\n                        if (properties[key].hasOwnProperty(item) === false) {\r\n                            continue;\r\n                        }\r\n                        let child = this.writeAttribute(item);\r\n                        if (child) {\r\n                            entity.appendChild(child);\r\n                        }\r\n                    }\r\n                } else {\r\n                    let child = this.writeAttribute(properties[key]);\r\n                    if (child) {\r\n                        entity.appendChild(child);\r\n                    }\r\n                }\r\n                continue;\r\n            }\r\n            entity[key] = properties[key];\r\n        }\r\n        return entity;\r\n    }\r\n}\r\n","import { Point } from '../BaseElements';\r\nimport { Util } from '../../util';\r\nimport { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\n\r\nexport class InfoText extends Node {\r\n\r\n    public cardinality: string = '';\r\n    private $heightOfOneTextItem: number;\r\n    private $cardinalitySvg: Element;\r\n    private $propertySvg: Element;\r\n    private $rectBackground: Element;\r\n\r\n    constructor(info: any) {\r\n        super(info);\r\n        if (typeof (info) === 'string') {\r\n            this.id = info;\r\n        } else {\r\n            if (info.property) {\r\n                this.property = info.property;\r\n            }\r\n            if (info.cardinality) {\r\n                this.cardinality = info.cardinality;\r\n            }\r\n        }\r\n        this.$isDraggable = true;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n    }\r\n\r\n    public updateCardinality(cardinality: string): void {\r\n        this.cardinality = cardinality;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (this.$rectBackground) {\r\n            this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n            this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n        }\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((cardinality.length === 0 && this.property.length > 0) || !this.$cardinalitySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$cardinalitySvg) {\r\n            this.$cardinalitySvg.textContent = cardinality;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.property.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    public updateProperty(property: string): void {\r\n        this.property = property;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((property.length === 0 && this.cardinality.length > 0) || !this.$propertySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$propertySvg) {\r\n            this.$propertySvg.textContent = property;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.cardinality.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos: Point = this.getPos();\r\n        let group = Util.create({ tag: 'g', class: 'SVGEdgeInfo', transform: 'translate(0, 0)' });\r\n\r\n        // append rect as background for text items\r\n        this.$rectBackground = Util.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y - this.$heightOfOneTextItem + 3,\r\n            width: this.getSize().x,\r\n            height: this.getSize().y,\r\n            fill: '#DDD',\r\n            'stroke-width': 0,\r\n            rx: '5',\r\n            ry: '5'\r\n        });\r\n        group.appendChild(this.$rectBackground);\r\n\r\n        let y = pos.y;\r\n        if (this.property) {\r\n            // property\r\n            this.$propertySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$propertySvg.textContent = this.property;\r\n            group.appendChild(this.$propertySvg);\r\n\r\n            y += this.$heightOfOneTextItem;\r\n        }\r\n\r\n        // cardinality\r\n        if (this.cardinality) {\r\n            this.$cardinalitySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$cardinalitySvg.textContent = this.cardinality;\r\n            group.appendChild(this.$cardinalitySvg);\r\n        }\r\n\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        let cardinalityAvailable = this.cardinality && this.cardinality.length > 0;\r\n        let propertyAvailable = this.property && this.property.length > 0;\r\n\r\n        return !propertyAvailable && !cardinalityAvailable;\r\n    }\r\n\r\n    public redrawFromEdge(newPos: Point): void {\r\n\r\n        if (!newPos) {\r\n            return;\r\n        }\r\n\r\n        let oldPos = this.getPos();\r\n\r\n        // get difference between new and the old position\r\n        let diffPos = new Point();\r\n        diffPos.x = newPos.x - oldPos.x;\r\n        diffPos.y = newPos.y - oldPos.y;\r\n\r\n        // get translate information\r\n        let translation = this.$view.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        let sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        // set new traslation values\r\n        let newTransX = (sx + diffPos.x);\r\n        let newTransY = (sy + diffPos.y);\r\n        this.$view.setAttributeNS(null, 'transform', 'translate(' + newTransX + ' ' + newTransY + ')');\r\n\r\n        // set new position of svg\r\n        this.getPos().x = newPos.x;\r\n        this.getPos().y = newPos.y;\r\n    }\r\n\r\n    public getText(): string {\r\n        let infoTxt: string = '';\r\n\r\n        if (this.property) {\r\n            infoTxt = this.property;\r\n        }\r\n        if (this.cardinality) {\r\n            if (infoTxt.length > 0) {\r\n                infoTxt += '\\n';\r\n            }\r\n            infoTxt += this.cardinality;\r\n        }\r\n\r\n        return infoTxt;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    private calcSize(): Point {\r\n        let text: string = this.getText();\r\n        let items: Array<string> = text.split('\\n');\r\n\r\n        let maxSize = new Point(0, 0);\r\n        if (text.length === 0) {\r\n            return maxSize;\r\n        }\r\n\r\n        for (let i = 0; i < items.length; i += 1) {\r\n            // calculate size\r\n            let sizeOfText: ClientRect = Util.sizeOf(items[i]);\r\n            maxSize.x = Math.max(maxSize.x, sizeOfText.width);\r\n            maxSize.y += sizeOfText.height;\r\n\r\n            this.$heightOfOneTextItem = sizeOfText.height;\r\n        }\r\n\r\n        return maxSize;\r\n    }\r\n    private resetAllSvgElements() {\r\n        this.$cardinalitySvg = undefined;\r\n        this.$view = undefined;\r\n        this.$propertySvg = undefined;\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\nimport {PropertyBinder} from '../../PropertyBinder';\r\n\r\nexport class Input extends Control {\r\n    private type: string;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data = super.initViewDataProperties(oldData);\r\n        if ('checkbox' === this.type || 'radio' === this.type) {\r\n            data.addFrom('checked', oldData);\r\n        }\r\n        data.addFrom('value', oldData);\r\n        data.addFrom('type', oldData);\r\n        return data;\r\n    }\r\n\r\n    public load(data: any) {\r\n        let id: string;\r\n        let inputField: HTMLElement;\r\n        let useData: boolean;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            useData = true;\r\n        } else {\r\n            id = data.id;\r\n            if (data.type) {\r\n                this.setType(data['type']);\r\n            } else {\r\n                this.setType('text');\r\n            }\r\n            if (data.hasOwnProperty('property')) {\r\n                this.setProperty(data['property']);\r\n            }\r\n            useData = false;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n\r\n        inputField = document.getElementById(id);\r\n\r\n        if (useData) {\r\n            if (inputField) {\r\n                // TODO disuss how to decide, which property we should listen on...\r\n                // this.property = id;\r\n                if (inputField.hasAttribute('Property')) {\r\n                    this.setProperty(inputField.getAttribute('Property'));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (inputField instanceof HTMLInputElement) {\r\n            this.setView(inputField);\r\n            this.type = inputField.type;\r\n            // useData = false;\r\n        } else {\r\n            if (!inputField) {\r\n                this.setView(document.createElement('input'));\r\n                this.$viewData = this.initViewDataProperties(this.$viewData);\r\n                // append viewListener\r\n                // this.$view.addEventListener('change', this.$viewListener);\r\n                if (typeof(data) !== 'string') {\r\n                    for (let attr in data) {\r\n                        if (data.hasOwnProperty(attr) === false) {\r\n                            continue;\r\n                        }\r\n                        // this.$view[attr] = data[attr];\r\n                        this.$viewData.setValue(attr, data[attr]);\r\n                    }\r\n                } else {\r\n                    if (this.type) {\r\n                        this.$view.setAttribute('type', this.type);\r\n                    }\r\n                    if (data.hasOwnProperty('class')) {\r\n                        this.$view.setAttribute('class', data['class']);\r\n                    }\r\n                    this.$view.setAttribute('id', this.id);\r\n                    this.$view.setAttribute('property', this.property);\r\n                }\r\n\r\n                if (data.value) {\r\n                    // if theres a value at the control, we want to change the model to the new value\r\n                    if (this.$model) {\r\n                        this.$model.setValue(this.lastProperty, data.value);\r\n                    }\r\n                }\r\n                if (this.$model) {\r\n                    PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                }\r\n\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (this.property && entity) {\r\n            if (entity.id === this.property.split('.')[0]) {\r\n                this.$model = entity;\r\n                PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                // entity.addListener(this, this.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n    // TODO FIXME protected updateElement(property: string, value: string) {\r\n    //     if (this.$view instanceof HTMLInputElement) {\r\n    //         if (value != null) {\r\n    //             if(property == this.lastProperty) {\r\n    //                 (<HTMLInputElement>this.$view)[this.getStandardProperty()] = value;\r\n    //             } else {\r\n    //                 // this.getRoot().setValue(this, property, value, (<HTMLInputElement>this.$view)[property]);\r\n    //                 (<HTMLInputElement>this.$view)[property] = value;\r\n    //             }\r\n    //         } else {\r\n    //             delete (<HTMLInputElement>this.$view)[property];\r\n    //         }\r\n    //     }\r\n    // }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            super.controlChanged(ev);\r\n        }\r\n// <<<<<<< HEAD\r\n//             let newVal = element[this.getStandardProperty()];\r\n//             if (this.isKeyOnly()) {\r\n//                 // we expect, element[this.lastProperty] to be boolean:\r\n//                 if (!newVal) {\r\n//                     newVal = null;\r\n//                 }\r\n//             } else {\r\n//             }\r\n        // let $graphModel;\r\n        // let value;\r\n        /*if (this.$graphModel) {\r\n            $graphModel = this.$graphModel;\r\n            value = this.$graphModel.getValue(this.lastProperty);\r\n        } else {\r\n            $graphModel = this;\r\n            if (this.$view) {\r\n                value = this.$view[this.lastProperty];\r\n            }\r\n        }*/\r\n        // this.$model.setValue(this.lastProperty, newVal);\r\n        // this.propertyChange(this.$graphModel,this.lastProperty, this.$graphModel.getValue(this.lastProperty), newVal);\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n// =======\r\n        // let newVal = element[this.lastProperty];\r\n        // if (this.isKeyOnly()) {\r\n        //     // we expect, element[this.lastProperty] to be boolean:\r\n        //     if (!newVal) {\r\n        //         newVal = null;\r\n        //     }\r\n        // } else {\r\n        // }\r\n        // let $graphModel;\r\n        // let value;\r\n\r\n        // $graphModel = this.getViewData();\r\n        // if (this.$graphModel) {\r\n        //     $graphModel = this.$graphModel;\r\n        //     value = this.$graphModel.getValue(this.lastProperty);\r\n        // } else {\r\n        //     $graphModel = this;\r\n        //     if (this.$view) {\r\n        //         value = this.$view[this.lastProperty];\r\n        //     }\r\n        // }\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n//            this.saveViewInData();\r\n// >>>>>>> addOldFunctions\r\n//         } else {\r\n//             console.log('value does not match the pattern...');\r\n//         }\r\n    }\r\n\r\n    public setType(type: string): void {\r\n        let oldValue: string = this.type;\r\n        if (oldValue === type) {\r\n            return;\r\n        }\r\n        if (type === 'radio') {\r\n            this.$viewData.setValue('checked', null);\r\n        } else {\r\n            this.$viewData.removeKey('checked');\r\n        }\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\n\r\nexport class Label extends Control {\r\n    public load(data: JSON): any {\r\n        this.createControl(this.$owner, data);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('label');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr === 'textContent') {\r\n                this.$view.textContent = data['textContent'];\r\n            } else {\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Method extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.updateType(data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.updateType(data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.updateType(data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n            // e.g. setName() : string or name:string\r\n            let dataSplitted = data.split(':');\r\n\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }\r\n                else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType(dataSplitted[1].trim() || 'void');\r\n            }\r\n            // set default return type of void\r\n            else {\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = data.trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }  else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType('void');\r\n            }\r\n        }\r\n\r\n        if (Util.includes(this.$data.getValue('name'), '(') && !Util.includes(this.$data.getValue('name'), ')') === false) {\r\n            this.$data.setValue('name', this.$data.getValue('name') + '()');\r\n        }\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\nimport {Association} from '../edges';\r\nimport { GraphModel } from '..';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\n\r\nexport class Node extends DiagramElement {\r\n    public $edges: Association[] = [];\r\n    public $minWidth: number = 150;\r\n    public $minheight: number = 25;\r\n    public $defaulEdgeType: string;\r\n\r\n    constructor(data: JSON|string|Object|any) {\r\n        super();\r\n\r\n        // default size\r\n        this.withSize(this.$minWidth, this.$minheight);\r\n\r\n        if (data) {\r\n            if (data['x'] && data['y']) {\r\n                this.withPos(data['x'], data['y']);\r\n            }\r\n            if (data['width'] || data['height']) {\r\n                this.withSize(data['width'], data['height']);\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos = this.getPos();\r\n        const size = this.getSize();\r\n\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x - size.x / 2,\r\n            y: pos.y - size.y / 2,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y,\r\n            width: size.x,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        const shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'middle',\r\n            'font-family': 'Verdana',\r\n            'font-size': '14',\r\n            fill: 'black'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = this.id;\r\n\r\n        let group = this.createShape({tag: 'g', id: this.id});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public copy(): Node {\r\n        let copy: Node;\r\n        // create new id\r\n        let model = <GraphModel>this.$owner || <GraphModel>this.getRoot();\r\n        if (model) {\r\n            let type = this.property || Node.name;\r\n            let newId = model.getNewId(type);\r\n            copy = <Node>model.createElement(type, newId, null);\r\n            copy.withSize(this.getSize().x, this.getSize().y);\r\n            copy.$owner = model;\r\n        } else {\r\n            copy.id = this.id + '-copy';\r\n            copy.$owner = this.getRoot();\r\n        }\r\n        return copy;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n// EMPTY\r\n    }\r\n    public addAttribute(value: string): Attribute {\r\n        return null;\r\n    }\r\n    public getAttributes(): Attribute[] {\r\n        return null;\r\n    }\r\n    public addMethod(value: string): Method {\r\n        return null;\r\n    }\r\n    public updateLabel(newLabel: string): void {\r\n// EMPTY\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\n\r\nexport class SO extends DiagramElement {\r\n    public static create(element: Object) {\r\n        let result: SO = new SO();\r\n        for (let key in element) {\r\n            if (element.hasOwnProperty(key) === false) {\r\n                continue;\r\n            }\r\n            result.withKeyValue(key, element[key]);\r\n\r\n        }\r\n        return result;\r\n    }\r\n\r\n    public withKeyValue(key: string, value: any): SO {\r\n        if (key === 'typ') {\r\n            this.property = value;\r\n        } else if (key === 'x') {\r\n            this.withPos(value, null);\r\n        } else if (key === 'y') {\r\n            this.withPos(null, value);\r\n        } else if (key === 'width') {\r\n            this.withSize(value, null);\r\n        } else if (key === 'height') {\r\n            this.withSize(null, value);\r\n        } else {\r\n            this[key] = value;\r\n        }\r\n        return this;\r\n    }\r\n}\r\n","import {Point} from '../BaseElements';\r\nimport {Node} from './Node';\r\n\r\nexport class StereoType extends Node {\r\n\r\n    protected stereoType: string;\r\n\r\n    constructor (type: string, x: number, y: number) {\r\n        super('');\r\n        this.withPos(x, y);\r\n        this.setStereoType(type);\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        let pos: Point = this.getPos();\r\n        let size: Point = this.getSize();\r\n\r\n               // = = = STEREOTYPE = = =\r\n        let stereoType = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y - this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': 10,\r\n            'font-weight': 'bold',\r\n            fill: 'black'\r\n        });\r\n        stereoType.textContent = this.stereoType;\r\n\r\n        this.$view = stereoType;\r\n        return stereoType;\r\n    }\r\n\r\n    public setStereoType(value: string): void {\r\n        this.stereoType = '<<' + value + '>>';\r\n    }\r\n\r\n    public getStereoType(): string {\r\n        return this.stereoType;\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { SO } from './SO';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport { Util } from '../../util';\r\n\r\nexport class Symbol extends Node {\r\n    public $heightMax: number = 0;\r\n    public $heightMin: number = 0;\r\n\r\n    constructor(typ: string) {\r\n        super(typ);\r\n    }\r\n\r\n    public draw(typ?: string): SVGElement {\r\n        return SymbolLibary.draw(this);\r\n    }\r\n}\r\n\r\n// \t\t\t\t###################################################### SymbolLibary ####################################################################################\r\n// Example Items\r\n// {tag: 'path', d: ''}\r\n// {tag: 'rect', width:46, height:34}\r\n// {tag: 'ellipse', width:23, height:4}\r\n// {tag: 'line', x1:650, y1:-286, x2:650, y2:-252}\r\n// {tag: 'circle', r:5, x:12, y:0}\r\n// {tag: 'image', height: 30, width: 50, content$src: hallo}\r\n// {tag: 'text', 'text-anchor': 'left', x: '10'}\r\nexport class SymbolLibary {\r\n\r\n    public static drawSVG(node: any): SVGSVGElement {\r\n        // const lib = new SymbolLibary();\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            const parent = SO.create(node);\r\n            parent['property'] = 'SVG';\r\n            symbol = fn(parent);\r\n            // symbol = fn.apply(lib, parent);\r\n\r\n            return SymbolLibary.createGroup(parent, symbol);\r\n        }\r\n        return symbol;\r\n    }\r\n\r\n    public static draw(node: any, parent?: Object): SVGElement {\r\n        // Node is Symbol or simple Object\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            if (!(node instanceof DiagramElement)) {\r\n                node = SO.create(node);\r\n                if (!node.property) {\r\n                    node.property = 'SVG';\r\n                }\r\n            }\r\n            symbol = fn.apply(this, [node]);\r\n            if (!parent) {\r\n                return SymbolLibary.createGroup(node, symbol);\r\n            }\r\n            return SymbolLibary.createGroup(node, symbol);\r\n        } else if (node.property) {\r\n            symbol = new Symbol(node.property);\r\n            symbol.init(node);\r\n            let pos = node.getPos();\r\n            let size = node.getSize();\r\n            symbol.withPos(pos.x, pos.y);\r\n            symbol.withSize(size.x, size.y);\r\n            symbol['value'] = node['value'];\r\n            parent = node['$parent'];\r\n            return SymbolLibary.draw(symbol, parent);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public static upFirstChar(txt: string): string {\r\n        return txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase();\r\n    }\r\n\r\n    public static isSymbolName(typ: string): boolean {\r\n        let fn = SymbolLibary['draw' + SymbolLibary.upFirstChar(typ)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static isSymbol(node: Symbol) {\r\n        let fn = SymbolLibary[SymbolLibary.getName(node)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static getName(node: any): string {\r\n        if (node['type']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['type']);\r\n        }\r\n        if (node.property) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node.property);\r\n        }\r\n        if (node['src']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['src']);\r\n        }\r\n        return 'drawNode';\r\n    }\r\n\r\n    /*FIXME   public static createImage(node: Symbol, $graphModel:Node) {\r\n           let n, img: HTMLElement;\r\n           // node.$graphModel = node;\r\n           if (SymbolLibary.isSymbol(node)) {\r\n               return SymbolLibary.draw(null, node);\r\n           }\r\n           n = {tag: 'img', $graphModel: node, src: node['src']};\r\n           let size = node.getSize();\r\n           if (size.isEmpty() === false) {\r\n               n['width'] = size.x;\r\n               n['height'] = size.y;\r\n           } else {\r\n               n['xmlns'] = 'http://www.w3.org/1999/xhtml';\r\n           }\r\n           img = Util.create(n);\r\n           if (size.isEmpty()) {\r\n               $graphModel.appendImage(img);\r\n               return null;\r\n           }\r\n           return img;\r\n       }*/\r\n\r\n    public static createGroup(node: DiagramElement, group: any) {\r\n        let func, y: number, z: number, box, item: Element, transform, i, offsetX = 0, offsetY = 0;\r\n        let svg: any;\r\n        if (node.property.toUpperCase() === 'HTML') {\r\n            let so = {\r\n                tag: 'svg',\r\n                style: { left: (group.x | 0) + node.getPos().x, top: (group.y | 0) + node.getPos().y, position: 'absolute' }\r\n            };\r\n            if (node['transform']) {\r\n                so['transform'] = node['transform'];\r\n            }\r\n            svg = Util.create(so);\r\n        } else {\r\n            svg = Util.create({ tag: 'g' });\r\n            transform = 'translate(' + group.getPos().x + ' ' + group.getPos().y + ')';\r\n            if (group.scale) {\r\n                transform += ' scale(' + group.scale + ')';\r\n            }\r\n            if (group.rotate) {\r\n                transform += ' rotate(' + group.rotate + ')';\r\n            }\r\n            svg.setAttribute('transform', transform);\r\n            if (group['id']) {\r\n                svg.id = group['id'];\r\n            }\r\n        }\r\n\r\n        if (node['tooltip']) {\r\n            const tooltipTitleAttr = {\r\n                tag: 'title'\r\n            };\r\n            let tooltipTitle = Util.createShape(tooltipTitleAttr);\r\n            tooltipTitle.textContent = node['tooltip'];\r\n            svg.appendChild(tooltipTitle);\r\n        }\r\n\r\n        if (node['background']) {\r\n            const attrCircle = {\r\n                tag: 'circle',\r\n                cx: 20,\r\n                cy: 20,\r\n                r: 17,\r\n                stroke: '#888',\r\n                'stroke-width': 0,\r\n                fill: '#DDD'\r\n            };\r\n            svg.appendChild(Util.create(attrCircle));\r\n        }\r\n\r\n        for (i = 0; i < group.items.length; i += 1) {\r\n            svg.appendChild(Util.create(group.items[i]));\r\n        }\r\n        let elements = node['elements'];\r\n        Util.setSize(svg, group.width + node.getSize().x, group.height + node.getSize().y);\r\n        node['$heightMin'] = node.getSize().y;\r\n        if (elements) {\r\n            for (i = 0; i < elements.length; i += 1) {\r\n                if (!elements[i] && elements[i].length < 1) {\r\n                    elements.splice(i, 1);\r\n                    i -= 1;\r\n                }\r\n            }\r\n            box = Util.create({ tag: 'g' });\r\n            // Calculate new Height\r\n            let c: number;\r\n            z = 0;\r\n            for (c = 0; c < elements.length; c += 1) {\r\n                if (typeof elements[c] === 'string') {\r\n                    z += 1;\r\n                } else {\r\n                    z += elements[c].length;\r\n                }\r\n            }\r\n            z = z * 25 + 6;\r\n            box.appendChild(Util.create({\r\n                tag: 'rect',\r\n                rx: 0,\r\n                x: offsetX,\r\n                y: (offsetY + 28),\r\n                width: 70,\r\n                height: z,\r\n                stroke: '#000',\r\n                fill: '#fff',\r\n                opacity: '0.7'\r\n            }));\r\n            node['$heightMax'] = z + node['$heightMin'];\r\n\r\n            svg['elements'] = elements;\r\n            if (node['type'] === 'DropDown') {\r\n                svg['activ'] = Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': 60,\r\n                    'x': (10 + offsetX),\r\n                    'y': 20,\r\n                    value: node['activText']\r\n                });\r\n                svg.appendChild(svg.activ);\r\n            }\r\n\r\n            y = offsetY + 46;\r\n            // 46 -28 = 18\r\n\r\n            func = function (event: Event) {\r\n                if (svg.activ) {\r\n                    svg.activ.textContent = (<any>event.currentTarget).value;\r\n                }\r\n            };\r\n            let txt: string;\r\n            let textClass = 'SVGTEXT';\r\n            for (z = 0; z < elements.length; z += 1) {\r\n                if (typeof elements[z] === 'string') {\r\n                    txt = elements[z];\r\n                } else {\r\n                    item = this.addText(y, offsetX, box, elements[z][0], 'SVGTEXT');\r\n                    y += 26;\r\n                    for (c = 1; c < elements[z].length; c += 1) {\r\n                        item = this.addText(y, offsetX, box, '* ' + elements[z][c], 'SVGTEXTITEM');\r\n\r\n                        item['value'] = elements[z];\r\n                        if (node['action']) {\r\n                            item['onclick'] = node['action'];\r\n                        } else {\r\n                            item['onclick'] = func;\r\n                        }\r\n                        y += 26;\r\n                    }\r\n                    txt = elements[z];\r\n                    let subBox = Util.create({\r\n                        tag: 'rect',\r\n                        rx: 0,\r\n                        x: offsetX,\r\n                        y: (offsetY + 28),\r\n                        width: 60,\r\n                        height: z,\r\n                        stroke: '#000',\r\n                        fill: '#fff',\r\n                        opacity: '0.7'\r\n                    });\r\n                    continue;\r\n                }\r\n                // let txt = elements[z];\r\n                item = this.addText(y, offsetX, box, txt, textClass);\r\n\r\n                item['value'] = elements[z];\r\n                if (node['action']) {\r\n                    item['onclick'] = node['action'];\r\n                } else {\r\n                    item['onclick'] = func;\r\n                }\r\n                y += 26;\r\n            }\r\n            svg.choicebox = box;\r\n        }\r\n        svg.tool = node;\r\n        svg.onclick = function () {\r\n            if (svg.status === 'close') {\r\n                svg.open();\r\n            } else {\r\n                svg.close();\r\n            }\r\n        };\r\n        svg.close = function () {\r\n            if (svg.status === 'open' && svg.choicebox) {\r\n                this.removeChild(svg.choicebox);\r\n            }\r\n            svg.status = 'close';\r\n            svg.tool.$size.height = svg.tool.heightMin;\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x, g.tool.height + g.tool.y);\r\n            Util.setSize(svg, svg.tool.$size.x, svg.tool.$size.y);\r\n        };\r\n        svg.open = function () {\r\n            if (this.tagName === 'svg') {\r\n                return;\r\n            }\r\n            if (svg.status === 'close' && svg.choicebox) {\r\n                this.appendChild(svg.choicebox);\r\n            }\r\n            svg.status = 'open';\r\n            svg.tool.$size.height = svg.tool.heightMax;\r\n            Util.setSize(svg, svg.tool.width, svg.tool.height);\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x + 10, g.tool.height + g.tool.y + 10);\r\n        };\r\n        svg.close();\r\n        return svg;\r\n    }\r\n\r\n    public static addChild(parent: SVGElement, json: JSON | Element): void {\r\n        let item: Element;\r\n        if ((<any>json).offsetLeft) {\r\n            item = <Element>json;\r\n        } else {\r\n            item = Util.create(json);\r\n        }\r\n        item.setAttribute('class', 'draggable');\r\n        parent.appendChild(item);\r\n    }\r\n\r\n    public static all(node: any): void {\r\n        SymbolLibary.drawSmiley(node);\r\n        SymbolLibary.drawDatabase(node);\r\n        SymbolLibary.drawLetter(node);\r\n        SymbolLibary.drawMobilephone(node);\r\n        SymbolLibary.drawWall(node);\r\n        SymbolLibary.drawActor(node);\r\n        SymbolLibary.drawLamp(node);\r\n        SymbolLibary.drawArrow(node);\r\n        SymbolLibary.drawButton(node);\r\n        SymbolLibary.drawDropdown(node);\r\n        SymbolLibary.drawClassicon(node);\r\n        SymbolLibary.drawClassWithEdgeicon(node);\r\n    }\r\n\r\n    public static drawHamburger(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'circle', r: 10, fill: '#ccc', cx: 12, cy: 12, 'stroke-width': 1, stroke: 'black'},\r\n                { tag: 'path', d: 'M 8,7 H 16 M 8,12 H 16 M 8,17 H 16', stroke: 'black', fill: 'none' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawSmiley(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'path', d: 'm49.01774,25.64542a24.5001,24.5 0 1 1 -49.0001,0a24.5001,24.5 0 1 1 49.0001,0z', stroke: 'black', fill: 'none' }, { tag: 'path', d: 'm8,31.5c16,20 32,0.3 32,0.3' },\r\n                { tag: 'path', d: 'm19.15,20.32a1.74,2.52 0 1 1 -3.49,0a1.74,2.52 0 1 1 3.49,0z' },\r\n                { tag: 'path', d: 'm33,20.32a1.74,2.52 0 1 1 -3.48,0a1.74,2.52 0 1 1 3.48,0z' },\r\n                { tag: 'path', d: 'm5.57,31.65c3.39,0.91 4.03,-2.20 4.03,-2.20' },\r\n                { tag: 'path', d: 'm43,32c-3,0.91 -4,-2.20 -4.04,-2.20' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDatabase(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 40,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,-6.26 25.03,-6.26 25.03,0l0,25.82c0,6.26 -25.03,6.26 -25.03,0l0,-25.82z',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLetter(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 17,\r\n            items: [\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1,1l22,0l0,14l-22,0l0,-14z' },\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1.06,1.14l10.94,6.81l10.91,-6.91' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMobilephone(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 4.2 0.5 15.61 0c 2 0 3.7 1.65 3.7 3.7l 0 41.6c 0 2-1.65 3.7-3.7 3.7l-15.6 0c-2 0-3.7-1.6-3.7-3.7l 0-41.6c 0-2 1.6-3.7 3.7-3.7z',\r\n                    fill: 'none',\r\n                    stroke: 'black'\r\n                },\r\n                { tag: 'path', d: 'm 12.5 2.73a 0.5 0.5 0 1 1-1 0 0.5 0.5 0 1 1 1 0z' },\r\n                { tag: 'path', d: 'm 14 46a 2 2 0 1 1-4 0 2 2 0 1 1 4 0z' },\r\n                { tag: 'path', d: 'm 8 5 7 0' },\r\n                { tag: 'path', d: 'm 1.63 7.54 20.73 0 0 34-20.73 0z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawWall(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'path', d: 'm26,45.44l-5,3.56l-21,-9l0,-36.41l5,-3.56l20.96,9l-0,36.4z' },\r\n                {\r\n                    tag: 'path',\r\n                    stroke: 'white',\r\n                    d: 'm2.21,11l18.34,7.91m-14.46,-12.57l0,6.3m8.2,21.74l0,6.35m-8.6,-10l0,6.351m4.1,-10.67l0,6.3m4.8,-10.2l0,6.3m-8.87,-10.23l0,6.35m4.78,-10.22l0,6.35m-8,14.5l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m0,-13l0,34m-18.23,-41.84l18.3,8m0,0.11l5,-3.57'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawActor(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'line', stroke: '#000', x1: '12', y1: '10', x2: '12', y2: '30' },\r\n                { tag: 'circle', stroke: '#000', cy: '5', cx: '12', r: '5' },\r\n                { tag: 'line', stroke: '#000', y2: '18', x2: '25', y1: '18', x1: '0' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '5', y1: '30', x1: '12' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '20', y1: '30', x1: '12' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLamp(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 22.47 10.58c-6.57 0-11.89 5.17-11.89 11.54 0 2.35 0.74 4.54 2 6.36 2 4 4.36 5.63 4.42 10.4l 11.15 0c 0.12-4.9 2.5-6.8 4.43-10.4 1.39-1.5 1.8-4.5 1.8-6.4 0-6.4-5.3-11.5-11.9-11.5z',\r\n                    fill: 'white',\r\n                    stroke: 'black'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 40 8 0c 0.58 0 1 0.5 1 1 0 0.6-0.5 1-1 1l-8 0c-0.6 0-1-0.47-1-1 0-0.58 0.47-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 42.7 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 45.3 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                { tag: 'path', d: 'm 19.5 48c 0.37 0.8 1 1.3 1.9 1.7 0.6 0.3 1.5 0.3 2 0 0.8-0.3 1.4-0.8 1.9-1.8z' },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 6 37.5 4.2-4c 0.3-0.3 0.8-0.3 1 0 0.3 0.3 0.3 0.8 0 1.1l-4.2 4c-0.3 0.3-0.8 0.3-1.1 0-0.3-0.3-0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 39 37.56-4.15-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 38 23 5.8 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.8 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 1.3 23 6 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.9 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 34.75 11.2 4-4.1c 0.3-0.3 0.3-0.8 0-1-0.3-0.3-0.8-0.3-1 0l-4 4.1c-0.3 0.3-0.3 0.8 0 1 0.3 0.3 0.8 0.3 1 0z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 11.23 10-4-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 21.64 1.3 0 5.8c 0 0.4 0.3 0.8 0.8 0.8 0.4 0 0.8-0.3 0.8-0.8l 0-5.8c 0-0.4-0.3-0.8-0.8-0.8-0.4 0-0.8 0.3-0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 26.1 24.3c-0.5 0-1 0.2-1.3 0.4-1.1 0.6-2 3-2.27 3.5-0.26-0.69-1.14-2.9-2.2-3.5-0.7-0.4-2-0.7-2.5 0-0.6 0.8 0.2 2.2 0.9 2.9 1 0.9 3.9 0.9 3.9 0.9 0 0 0 0 0 0 0.54 0 2.8 0 3.7-0.9 0.7-0.7 1.5-2 0.9-2.9-0.2-0.3-0.7-0.4-1.2-0.4z'\r\n                },\r\n                { tag: 'path', d: 'm 22.5 28.57 0 10.7' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawStop(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 30,\r\n            height: 30,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: '#FFF',\r\n                    'stroke-width': '2',\r\n                    stroke: '#B00',\r\n                    d: 'm 6,6 a 14,14 0 1 0 0.06,-0.06 z m 0,0 20,21'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMin(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    d: 'm 0,0 19,0 0,19 -19,0 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 13,-0.04'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawArrow(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 10,\r\n            height: 9,\r\n            rotate: node['rotate'],\r\n            items: [\r\n                { tag: 'path', fill: '#000', stroke: '#000', d: 'M 0,0 10,4 0,9 z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMax(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    'stroke-dashoffset': 2,\r\n                    'stroke-dasharray': '4.8,4.8',\r\n                    d: 'm 0,0 4.91187,0 5.44643,0 9.11886,0 0,19.47716 -19.47716,0 0,-15.88809 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 6,0.006 0.02,5 0.01,-11 -0.03,6.02 c 2,-0.01 4,-0.002 6,0.01'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawButton(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight, btnValue;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        btnValue = node['value'] || '';\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: 60,\r\n            height: 28,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 8,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    filter: 'url(#drop-shadow)',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                { tag: 'text', $font: true, x: 10, y: 18, fill: 'black', value: btnValue, 'class': 'hand' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDropdown(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 0,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth - 20,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 2,\r\n                    x: btnWidth - 20,\r\n                    y: 0,\r\n                    width: 20,\r\n                    height: 28,\r\n                    stroke: '#000',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    style: 'fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1',\r\n                    d: 'm ' + (btnWidth - 15) + ',13 10,0 L ' + (btnWidth - 10) + ',20 z'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassicon(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.19999l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm25.68807,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.2l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                { tag: 'line', x1: 11, y1: 7, x2: 25, y2: 7, stroke: '#000' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassWithEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M2,10 20,10 20,35 2,35 Z M2,17 20,17 M20,10 28,5 28,9 M 28.5,4.7 24,4',\r\n                    style: 'fill:none;stroke:#000000;transform:scale(0.8);'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClass(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: '100%',\r\n            height: '100%',\r\n            items: [\r\n                { tag: 'rect', width: 50, height: 40, x: 0, y: 0, 'stroke-width': 2, stroke: 'black', fill: 'none'},\r\n                { tag: 'rect', width: 50, height: 12, x: 0, y: 18, 'stroke-width': 1, stroke: 'black', fill: 'none'},\r\n                { tag: 'text', x: 27, y: 14, 'text-anchor': 'middle', 'font-size': 11, value: 'Class'},\r\n                { tag: 'text', x: 5, y: 24, 'font-size': 5, value: '+ field: type'},\r\n                { tag: 'text', x: 5, y: 36, 'font-size': 5, value: '+ method(type)'}\r\n            ]\r\n        });\r\n    }\r\n/*\r\n<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n    <g>\r\n    <text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text>\r\n        <text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>\r\n*/\r\n\r\n    public static drawEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M10,30 30,10 M19,10 30,10 30,21',\r\n                    style: 'fill:none;stroke:#555;stroke-width:2;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawCopynode(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M5 5 L15 5 L15 20 L5 20 Z M5 10 L15 10',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M8 2 L18 2 L18 17 L8 17 Z M8 7 L18 7'\r\n                        + 'M11 4.5 L15 4.5 '\r\n                        + 'M10 10 L16 10 '\r\n                        + 'M10 13 L16 13 ',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawBasket(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M12 12 L18 12 L18 11 L22 11 L22 12 L28 12 L28 14 L27 14 L27 29 L13 29 L13 14 L12 14 Z M13 14 L27 14 M20 17 L20 26 M17 16 L17 27 M23 16 L23 27',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawPencil(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M6 20 L12 23 L33 23 L33 17 L12 17 Z M30 17 L30 23 M12 17 L12 23 M15 19 L28 19 M15 21 L28 21',\r\n                    stroke: '#000',\r\n                    'stroke-width': 1,\r\n                    fill: 'white'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    private static addText(y: number, offsetX: number, box: Element, text: string, textClass: string): Element {\r\n        let item: Element;\r\n        box.appendChild(Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'text-anchor': 'left',\r\n            width: 70,\r\n            x: 10,\r\n            y: y,\r\n            class: textClass,\r\n            value: text,\r\n            eventValue: text\r\n        }));\r\n        if (textClass === 'SVGTEXT') {\r\n            textClass = 'SVGChoiceText';\r\n        } else {\r\n            textClass = 'SVGChoice';\r\n        }\r\n\r\n        item = Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            x: offsetX,\r\n            y: y - 18,\r\n            width: 70,\r\n            height: 24,\r\n            stroke: 'none',\r\n            class: textClass,\r\n        });\r\n        item['eventValue'] = text;\r\n        box.appendChild(item);\r\n        return item;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n}\r\n","import {Control} from '../../Control';\r\nimport BridgeElement from '../../BridgeElement';\r\nimport Data from '../../Data';\r\nimport {Util} from '../../util';\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Table extends Control {\r\n    protected items: BridgeElement[] = [];\r\n    private columns: Column[] = [];\r\n    private cells: Object = {};\r\n    private $bodysection: HTMLTableSectionElement;\r\n    private $headersection: HTMLTableSectionElement;\r\n    private showedItems: Array<BridgeElement> = [];\r\n    // BridgeElements:\r\n    private itemsIds: Object = {};\r\n    private countElement: HTMLElement;\r\n    private countColumn: HTMLElement;\r\n    private countColumnPos: number;\r\n    private resultColumn: string;\r\n    private lastSearchText: string;\r\n    private searchColumns: Array<string> = [];\r\n    private searchText: Array<string> = [];\r\n    private sortColumn: Column;\r\n    private direction: number;\r\n    private moveElement: Column = null;\r\n    private isDrag: boolean = false;\r\n    private moveTimeStamp: number;\r\n    private moveX: number;\r\n    private movePos: number;\r\n    private dragColumn: Column;\r\n    private dragPos: number;\r\n    private tableOption: HTMLTableHeaderCellElement;\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    private static indexOfChild(item: BridgeElement) {\r\n        let i: number = 0;\r\n        let child: Node = item.gui;\r\n        while ((child = child.previousSibling) !== null) {\r\n            i++;\r\n        }\r\n        return i;\r\n    }\r\n\r\n    public load(data: any): void {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n            if (data.property) {\r\n                this.property = data.property;\r\n            }\r\n\r\n            if (data.searchColumns) {\r\n                let search: Array<string> = [];\r\n                if (typeof(data.searchColumns) === 'string') {\r\n                    search = data.searchColumns.split(' ');\r\n                } else {\r\n                    search = data.searchColumns;\r\n                }\r\n                for (let z: number = 0; z < search.length; z++) {\r\n                    let item = search[z].trim();\r\n                    if (item.length > 0) {\r\n                        if (this.searchColumns.indexOf(item) < 0) {\r\n                            this.searchColumns.push(item);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        if (this.$view) {\r\n            // Must be an Update\r\n            if (data['columns']) {\r\n                // It is a json must add all things and generate HTML\r\n                for (let i in data['columns']) {\r\n                    if (data['columns'].hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    let col = this.parseData(data['columns'][i]);\r\n                    this.addHeaderInfo(col);\r\n                    this.columns.push(col);\r\n                    this.tableOption.parentElement.insertBefore(col.$element, this.tableOption);\r\n                }\r\n                for (let i in this.showedItems) {\r\n                    let item: BridgeElement = this.showedItems[i];\r\n                    let cell;\r\n                    // Now Add some Children\r\n                    while (item.gui.children.length < this.columns.length) {\r\n                        cell = document.createElement('td');\r\n                        item.gui.appendChild(cell);\r\n                    }\r\n                    // Now Remove Some Children\r\n                    while (item.gui.children.length > this.columns.length) {\r\n                        item.gui.removeChild(item.gui.children[item.gui.children.length - 1]);\r\n                    }\r\n                    for (let c: number = 0; c < this.columns.length; c++) {\r\n                        let name = this.columns[c].attribute;\r\n                        // let count = this.columns.length;\r\n                        cell = item.gui.children[c];\r\n                        cell.innerHTML = item.model.getValue(name);\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n\r\n        this.$view = document.getElementById(id);\r\n        let headerrow: HTMLTableRowElement;\r\n        if (this.$view) {\r\n            if (!this.property) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('table');\r\n            this.$owner.appendChild(this);\r\n        }\r\n        if (!this.$bodysection) {\r\n            // add tbody element if missing\r\n            this.$bodysection = document.createElement('tbody');\r\n            this.$view.appendChild(this.$bodysection);\r\n        }\r\n        if (data['classname']) {\r\n            this.$view.className = data['classname'];\r\n        } else {\r\n            this.$view.className = 'mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp';\r\n        }\r\n\r\n        this.id = id;\r\n        this.$view.id = id;\r\n        this.$view.setAttribute('type', this.constructor['name'].toLowerCase());\r\n        let counter = 0;\r\n        for (let c = 0; c < this.$view.children.length; c++) {\r\n            let row: HTMLTableRowElement = <HTMLTableRowElement>this.$view.children[c];\r\n            if (row instanceof HTMLTableSectionElement) {\r\n                if (row.tagName === 'THEAD') {\r\n                    headerrow = row;\r\n                    // Its a thead\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingHeader(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                } else {\r\n                    // Its a tbody\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingData(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                }\r\n            } else {\r\n                // fallback, if there are no thead and tbody...\r\n                if (counter === 0) {\r\n                    headerrow = row;\r\n                    this.parsingHeader(row);\r\n                } else {\r\n                    this.parsingData(row);\r\n                }\r\n            }\r\n            counter++;\r\n        }\r\n        if (!headerrow || !this.$headersection) {\r\n            if (!this.$headersection) {\r\n                // find eventually existing thead\r\n                let header = this.$view.getElementsByTagName('thead');\r\n                if (header.length === 0) {\r\n                    this.$headersection = document.createElement('thead');\r\n                    this.$view.appendChild(this.$headersection);\r\n                } else {\r\n                    // take first thead element\r\n                    this.$headersection = <HTMLTableSectionElement>header.item(0);\r\n                }\r\n            }\r\n            if (!headerrow) {\r\n                headerrow = document.createElement('tr');\r\n                this.$headersection.appendChild(headerrow);\r\n            }\r\n        }\r\n\r\n        if (data['columns']) {\r\n            // It is a json must add all things and generate HTML\r\n            for (let i in data['columns']) {\r\n                if (data['columns'].hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                let col = this.parseData(data['columns'][i]);\r\n                this.addHeaderInfo(col);\r\n                this.columns.push(col);\r\n                headerrow.appendChild(col.$element);\r\n            }\r\n            this.tableOption = document.createElement('th');\r\n            this.tableOption.classList.add('tableOption');\r\n            headerrow.appendChild(this.tableOption);\r\n            let context: HTMLElement = this.addOptionItem(null, this.tableOption, true);\r\n            let contentChild: HTMLElement = this.addOptionItem('show', context, true);\r\n            // let simpleLink: HTMLElement = this.addOptionItem('show', contentChild, false);\r\n            this.addOptionItem('show', contentChild, false);\r\n        }\r\n        this.registerEvents(['mousemove', 'mousedown', 'mouseup', 'resize', 'dragstart', 'dragover', 'drop', 'dragend']);\r\n\r\n        // Check for SearchBar\r\n        // if(data[\"searchproperty\"]){\r\n        // Create Full Row\r\n        let searchBar = document.createElement('tr');\r\n        let cell = document.createElement('td');\r\n        cell.setAttribute('colspan', '' + (this.columns.length));\r\n        searchBar.appendChild(cell);\r\n\r\n        let search = document.createElement('input');\r\n        search.className = 'search';\r\n        let that = this;\r\n        search.addEventListener('keyup', function (evt) {\r\n            that.search(evt.target['value']);\r\n        });\r\n\r\n        cell.appendChild(search);\r\n        if (this.resultColumn) {\r\n            if (this.resultColumn.indexOf('#') !== 0) {\r\n                this.countElement = document.createElement('div');\r\n                searchBar.appendChild(this.countElement);\r\n            } else {\r\n                for (let z: number = 0; z < this.$headersection.children.length; z++) {\r\n                    if (this.$headersection.children[z].innerHTML === this.resultColumn) {\r\n                        this.countColumn = <HTMLElement> this.$headersection.children[z];\r\n                        this.countColumnPos = z;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        let first = this.$headersection.children.item(0);\r\n        this.$headersection.insertBefore(searchBar, first);\r\n\r\n        this.updateElement(this.property, null);\r\n\r\n        // now update those elements, that were not loaded currently\r\n    }\r\n\r\n    public tableEvent(type: string, e: Event) {\r\n        let button: number = 0;\r\n        let eventX: number = 0;\r\n        if (e instanceof MouseEvent) {\r\n            button = e.buttons;\r\n            eventX = e.pageX;\r\n        }\r\n        if (type === 'mouseup') {\r\n            this.moveElement = null;\r\n        } else if (type === 'mousedown' || type === 'resize') {\r\n            // End to Resize\r\n            this.moveElement = null;\r\n            if (button === 1) {\r\n                let c: number;\r\n                for (c = 0; c < this.columns.length; c++) {\r\n                    if (this.columns[c].$resize === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = false;\r\n                        break;\r\n                    } else if (this.columns[c].$element === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = true;\r\n                    }\r\n                }\r\n                this.moveTimeStamp = e.timeStamp;\r\n                this.moveX = eventX;\r\n            } else {\r\n                this.moveTimeStamp = 0;\r\n            }\r\n        } else if (type === 'mousemove') {\r\n            if (button === 1 && this.moveElement) {\r\n                if (this.moveTimeStamp && e.timeStamp - this.moveTimeStamp < 2000) {\r\n                    if (this.isDrag) {\r\n                        // FIXME\r\n                    } else {\r\n                        let x = eventX - this.moveX;\r\n                        let width = this.moveElement.$element.offsetWidth;\r\n                        this.moveElement.$element.width = '' + (width + x);\r\n                        e.stopPropagation();\r\n                    }\r\n                }\r\n                this.moveX = eventX;\r\n                this.moveTimeStamp = e.timeStamp;\r\n            }\r\n        } else if (this.isDrag) {\r\n            this.columnDragEvent(type, <DragEvent> e);\r\n        }\r\n    }\r\n\r\n    public parsingHeader(row: HTMLTableRowElement) {\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let column: HTMLTableHeaderCellElement = <HTMLTableHeaderCellElement>row.children[i];\r\n            let id = column.innerHTML.trim();\r\n            let col: Column = null;\r\n            for (let c in this.columns) {\r\n                if (this.columns.hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                if (this.columns[c].label === id) {\r\n                    col = this.columns[c];\r\n                    col.$element = column;\r\n                    break;\r\n                }\r\n            }\r\n            if (col === null) {\r\n                col = new Column();\r\n                col.label = id;\r\n                col.attribute = column.getAttribute('attribute');\r\n                col.$element = column;\r\n                this.columns.push(col);\r\n            }\r\n            this.addHeaderInfo(col);\r\n        }\r\n    }\r\n\r\n    public parsingData(row: HTMLTableRowElement) {\r\n        let id = row.getAttribute('id');\r\n        let item: Data = this.$owner.getItem(id);\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let cell: HTMLTableCellElement = <HTMLTableCellElement>row.children[i];\r\n            let colAttribute = this.columns[i].attribute;\r\n            if (colAttribute.indexOf('\\.') < 0) {\r\n                item[colAttribute] = cell.innerHTML.trim();\r\n            }\r\n        }\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: Object, newValue: Object) {\r\n        if (entity) {\r\n            // Check for Show\r\n            if (this.property && !entity.hasProperty(property)) {\r\n                return;\r\n            }\r\n        }\r\n        if (entity.id === undefined) {\r\n            return;\r\n        }\r\n        let item: BridgeElement = <BridgeElement>this.itemsIds[entity.id];\r\n        let row: HTMLTableRowElement;\r\n        if (!item) {\r\n            item = new BridgeElement(entity);\r\n            this.items.push(item);\r\n            this.itemsIds[entity.id] = item;\r\n        }\r\n        row = this.cells[entity.id];\r\n        if (row) {\r\n            item.gui = row;\r\n        }\r\n        if (this.searching(item) === false) {\r\n            return;\r\n        }\r\n        let cell;\r\n        let showItem = false;\r\n\r\n        if (!row) {\r\n            showItem = true;\r\n            row = document.createElement('tr');\r\n            let count = this.columns.length;\r\n            for (let i = 0; i < count; i++) {\r\n                cell = document.createElement('td');\r\n                row.appendChild(cell);\r\n            }\r\n            this.cells[entity.id] = row;\r\n            item.gui = row;\r\n        }\r\n        for (let c: number = 0; c < this.columns.length; c++) {\r\n            let name = this.columns[c].attribute;\r\n            if (name === property) {\r\n                cell = row.children[c];\r\n                cell.innerHTML = <string>newValue;\r\n            }\r\n        }\r\n        if (showItem) {\r\n            this.showItem(item, true);\r\n        }\r\n        // super.propertyChange(entity, property, newValue, oldValue);\r\n    }\r\n\r\n    public sort(column: Column) {\r\n        if (this.sortColumn === column) {\r\n            if (this.direction === 1) {\r\n                this.direction = -1;\r\n                column.$element.classList.remove('asc');\r\n                column.$element.classList.add('desc');\r\n            } else {\r\n                this.direction = 1;\r\n                column.$element.classList.remove('desc');\r\n                column.$element.classList.add('asc');\r\n            }\r\n        } else {\r\n            if (this.sortColumn !== null) {\r\n                this.sortColumn.$element.classList.remove('desc');\r\n                this.sortColumn.$element.classList.remove('asc');\r\n            }\r\n            this.sortColumn = column;\r\n            this.sortColumn.$element.classList.add('asc');\r\n            this.direction = 1;\r\n        }\r\n        let that = this;\r\n        let sort = function (a: BridgeElement, b: BridgeElement) {\r\n            return that.sorting(a, b);\r\n        };\r\n        this.showedItems.sort(sort);\r\n        let len: number = this.showedItems.length;\r\n        let body = this.$bodysection;\r\n        let i = 0;\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            if (i !== Table.indexOfChild(item)) {\r\n                break;\r\n            }\r\n            i = i + 1;\r\n        }\r\n        while (body.children.length > i) {\r\n            body.removeChild(body.children.item(body.children.length - 1));\r\n        }\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            body.appendChild(item.gui);\r\n            i = i + 1;\r\n        }\r\n\r\n        //      body.removeChild(item.gui);\r\n        //      body.remove\r\n    }\r\n\r\n    public sorting(a: BridgeElement, b: BridgeElement): number {\r\n        let path: string[] = this.sortColumn.attribute.split('.');\r\n        let itemA = a.model.prop;\r\n        let itemB = b.model.prop;\r\n        let check = this.sortColumn.attribute;\r\n        for (let p = 0; p < path.length; p++) {\r\n            check = path[p];\r\n            if (itemA[check]) {\r\n                itemA = itemA[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n            if (itemB[check]) {\r\n                itemB = itemB[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n        if (itemA !== itemB) {\r\n            if (this.direction === 1) {\r\n                return (itemA < itemB) ? -1 : 1;\r\n            }\r\n            return (itemA < itemB) ? 1 : -1;\r\n\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    // Searching\r\n    public search(origSearchText: string): void {\r\n        if (!origSearchText) {\r\n            origSearchText = '';\r\n        }\r\n        let searchText: string = origSearchText.trim().toLowerCase();\r\n        if (searchText === this.lastSearchText && searchText !== '') {\r\n            return; // <==== nothing to be done\r\n        }\r\n        let oldSearch: string = this.lastSearchText;\r\n        this.lastSearchText = searchText;\r\n\r\n        this.parseSearchArray();\r\n        if (searchText !== '' && oldSearch !== null && searchText.indexOf(oldSearch) >= 0 && searchText.indexOf('|') < 0) {\r\n            this.searchArray(this.showedItems);\r\n        } else {\r\n            this.searchSet(this.items);\r\n        }\r\n        this.refreshCounter();\r\n    }\r\n\r\n    public refreshCounter() {\r\n        if (this.countColumn) {\r\n            this.countColumn.innerHTML = this.columns[this.countColumnPos].label + ' (' + this.showedItems.length + ')';\r\n        }\r\n        // var countElement = document.getElementById('talkCount');\r\n        //  if (countElement) {\r\n        //     var txt = (this.showedItems.size() > 0 && searchText.length > 0 ) ? this.options.TEXT_SEARCHLIST : this.options.TEXT_SEARCHFULLLIST;\r\n        //     countElement.innerHTML = txt.replace(\"%LEN%\", this.root['children'].length).replace(\"%COUNT%\", this.showedItems.size()).replace(\"%SEARCH%\", origSearchText);\r\n        // }\r\n        // if (this.countColumn) {\r\n        //     this.countColu1mn.innerHTML = this.countColumn[\"label\"] + \" (\" + this.showedItems.size() + \")\";\r\n        // }\r\n    }\r\n\r\n    public parseSearchArray() {\r\n        let pos: number = 0;\r\n        let split: Array<string> = [];\r\n        let quote: boolean = false;\r\n        for (let i: number = 0; i < this.lastSearchText.length; i++) {\r\n            if ((this.lastSearchText.charAt(i) === ' ') && !quote) {\r\n                let txt = this.lastSearchText.substring(pos, i).trim();\r\n                if (txt.length > 0) {\r\n                    split.push(txt);\r\n                }\r\n                pos = i + 1;\r\n            } else if (this.lastSearchText.charAt(i) === '\\\"') {\r\n                if (quote) {\r\n                    let txt = this.lastSearchText.substring(pos, i).trim();\r\n                    if (txt.length > 0) {\r\n                        split.push(txt);\r\n                    }\r\n                    pos = i + 1;\r\n                } else {\r\n                    pos = i + 1;\r\n                }\r\n                quote = !quote;\r\n            }\r\n        }\r\n        if (pos < this.lastSearchText.length) {\r\n            split.push(this.lastSearchText.substring(pos, this.lastSearchText.length).trim());\r\n        }\r\n        this.searchText = split;\r\n        return split;\r\n    }\r\n\r\n    public searchArray(root: Array<BridgeElement>) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let i: number = 0; i < root.length; i++) {\r\n            let item: BridgeElement = root[i];\r\n            this.showItem(item, this.searching(item));\r\n        }\r\n    }\r\n\r\n    public searchSet(root: BridgeElement[]) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let item of root) {\r\n            let child: BridgeElement = <BridgeElement>item;\r\n            this.showItem(child, this.searching(child));\r\n        }\r\n    }\r\n\r\n    public showItem(item: BridgeElement, visible: boolean) {\r\n        if (visible) {\r\n            this.showedItems.push(item);\r\n            this.$bodysection.appendChild(item.gui);\r\n        } else if (item.gui && item.gui.parentElement) {\r\n            this.$bodysection.removeChild(item.gui);\r\n        }\r\n    }\r\n\r\n    public searching(item: BridgeElement): boolean {\r\n        let fullText: string = '';\r\n        for (let i: number = 0; i < this.searchColumns.length; i++) {\r\n            fullText = fullText + ' ' + item.model.getValue(this.searchColumns[i]);\r\n        }\r\n        fullText = fullText.trim().toLowerCase();\r\n        for (let z: number = 0; z < this.searchText.length; z++) {\r\n            if ('' !== this.searchText[z]) {\r\n                let orSplit: Array<string>;\r\n                if (this.searchText[z].indexOf('|') > 0) {\r\n                    orSplit = this.searchText[z].split('|');\r\n                } else {\r\n                    orSplit = [this.searchText[z]];\r\n                }\r\n                let o: number = 0;\r\n                for (; o < orSplit.length; o++) {\r\n                    let pos: number = orSplit[o].indexOf(':');\r\n                    if (orSplit[o].indexOf('#') === 0 && pos > 1) {\r\n                        // if (searchProperties.contains(propString)) {\r\n                        let value: string = orSplit[o].substring(pos + 1);\r\n                        let column: string = orSplit[o].substring(1, pos - 1);\r\n                        let dataValue: Object = item.model.getValue(column);\r\n                        if (dataValue) {\r\n                            if (dataValue.toString().toLowerCase().indexOf(value) >= 0) {\r\n                                // Search for simple Property\r\n                                break;\r\n                            }\r\n                        }\r\n                    } else if (orSplit[o].length > 1 && orSplit[o].indexOf('-') === 0) {\r\n                        if (fullText.indexOf(orSplit[o].substring(1)) < 0) {\r\n                            break;\r\n                        }\r\n                    } else if (fullText.indexOf(orSplit[o]) >= 0) {\r\n                        // his search word is found in full text\r\n                        break;\r\n                    }\r\n                }\r\n                if (o === orSplit.length) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public getColumn(): Column[] {\r\n        return this.columns;\r\n    }\r\n\r\n    public updateElement(property: string, value: string): void {\r\n        // first clear all elements inside the table:\r\n        for (let item of this.items) {\r\n            if (item instanceof BridgeElement) {\r\n                (<BridgeElement>item).model.removeListener(this);\r\n            }\r\n        }\r\n\r\n        this.items = [];\r\n        this.itemsIds = {};\r\n\r\n        // load all entitys that match the property\r\n        if (this.property !== undefined) {\r\n            let items = this.$owner.getItems();\r\n            for (let j in items) {\r\n                if (items.hasOwnProperty(j)) {\r\n                    let item = items[j];\r\n                    if (item instanceof Data) {\r\n                        if (property === j) {\r\n                            // if (property == item.property) {\r\n                            let i = new BridgeElement(<Data>item);\r\n                            this.items.push(i);\r\n                            this.itemsIds[item.id] = i;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            this.redrawAllElements();\r\n        }\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        if (this.$owner !== null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    protected redrawAllElements() {\r\n        let children: HTMLCollection = this.$bodysection.children;\r\n        // remove old children\r\n        for (let i = 0; i < children.length; i++) {\r\n            let child = children.item(i);\r\n            // remove child\r\n            this.$bodysection.removeChild(child);\r\n        }\r\n\r\n        // load new children\r\n        for (let obj of this.items) {\r\n            // register listeners\r\n            obj.model.addListener(this);\r\n            // create tr\r\n            let row = this.createRow(obj);\r\n            this.$bodysection.appendChild(row);\r\n            this.cells[obj.id] = row;\r\n        }\r\n    }\r\n\r\n    private parseData(column: any): Column {\r\n        let col = new Column();\r\n        col.label = column.label || column.id;\r\n        col.attribute = column.attribute || column.label || column.id;\r\n        col.$element = document.createElement('th');\r\n        col.$element.innerHTML = col.label;\r\n        col.$element.draggable = true;\r\n\r\n        // resize Header\r\n        col.$resize = document.createElement('div');\r\n        col.$resize.classList.add('resize');\r\n        col.$element.appendChild(col.$resize);\r\n\r\n        return col;\r\n    }\r\n\r\n    private createRow(data: BridgeElement): HTMLTableRowElement {\r\n        let tr: HTMLTableRowElement = document.createElement('tr');\r\n\r\n        for (let id of this.columns) {\r\n            let td: HTMLTableDataCellElement = document.createElement('td');\r\n            tr.appendChild(td);\r\n            td.innerHTML = data.model.getValue(id.attribute);\r\n        }\r\n        return tr;\r\n    }\r\n\r\n    private addHeaderInfo(col: Column) {\r\n        let element: HTMLTableCellElement = col.$element;\r\n        let that = this;\r\n        element.classList.add('sort');\r\n        element.addEventListener('click',\r\n            function () {\r\n                that.sort(col);\r\n            },\r\n            false);\r\n    }\r\n\r\n    private columnDragEvent(type: string, e: DragEvent) {\r\n        if (type === 'dragstart') {\r\n            // Target (this) element is the source node.\r\n            this.moveElement.$element.style.opacity = '0.4';\r\n            e.dataTransfer.effectAllowed = 'move';\r\n            e.dataTransfer.setData('text/json', JSON.stringify(Util.toJson(this.moveElement)));\r\n        } else if (type === 'dragenter') {\r\n            // TO Nothing\r\n        } else if (type === 'dragleave') {\r\n            this.moveElement.$element.classList.remove('over');\r\n        } else if (type === 'dragover') {\r\n            if (e.preventDefault) {\r\n                e.preventDefault(); // Necessary. Allows us to drop.\r\n            }\r\n            for (let c = 0; c < this.columns.length; c++) {\r\n                if (this.columns[c].$element === e.target) {\r\n                    this.dragColumn = this.columns[c];\r\n                    this.dragPos = c;\r\n                    this.columns[c].$element.classList.add('over');\r\n                } else {\r\n                    this.columns[c].$element.classList.remove('over');\r\n                }\r\n            }\r\n            if (e.target === this.tableOption) {\r\n                this.tableOption.classList.add('over');\r\n                this.dragPos = this.columns.length;\r\n            } else {\r\n                this.tableOption.classList.remove('over');\r\n            }\r\n            e.dataTransfer.dropEffect = 'move';  // See the section on the DataTransfer object.\r\n        } else if (type === 'drop') {\r\n            // this / e.target is current target element.\r\n            if (e.stopPropagation) {\r\n                e.stopPropagation(); // stops the browser from redirecting.\r\n            }\r\n            if (this.movePos === this.dragPos) {\r\n                return;\r\n            }\r\n            // movePos -> dragPos\r\n            // See the section on the DataTransfer object.\r\n            // DataModel\r\n            this.columns.splice(this.movePos, 1);\r\n            if (this.movePos >= this.dragPos) {\r\n                this.columns.splice(this.dragPos, 0, this.moveElement);\r\n            } else {\r\n                this.columns.splice(this.dragPos - 1, 0, this.moveElement);\r\n            }\r\n\r\n            // Header Line\r\n            let line: HTMLElement = this.moveElement.$element.parentElement;\r\n            line.removeChild(this.moveElement.$element);\r\n            if (this.dragPos < this.columns.length) {\r\n                line.insertBefore(this.moveElement.$element, this.dragColumn.$element);\r\n            } else {\r\n                line.insertBefore(this.moveElement.$element, this.tableOption);\r\n            }\r\n\r\n            let oldElement: Element;\r\n            let newElement: Element;\r\n\r\n            // Now all Childs\r\n            for (let i = 0; i < this.$bodysection.children.length; i++) {\r\n                // Each line\r\n                line = <HTMLElement>this.$bodysection.children.item(i);\r\n                oldElement = line.children.item(this.movePos);\r\n                newElement = line.children.item(this.dragPos);\r\n                line.removeChild(oldElement);\r\n                line.insertBefore(oldElement, newElement);\r\n            }\r\n        } else if (type === 'dragend') {\r\n            // this/e.target is the source node.\r\n            this.moveElement.$element.style.opacity = '1';\r\n            for (let i = 0; i < this.columns.length; i++) {\r\n                this.columns[i].$element.classList.remove('over');\r\n            }\r\n            this.tableOption.classList.remove('over');\r\n        }\r\n    }\r\n\r\n    private addOptionItem(label: string, parent: HTMLElement, sub: boolean): HTMLElement {\r\n        let labelControl;\r\n        if (label) {\r\n            labelControl = document.createElement('a');\r\n            labelControl.appendChild(document.createTextNode(label));\r\n            labelControl.href = 'javascript:void(0);';\r\n            parent.appendChild(labelControl);\r\n        }\r\n        if (sub) {\r\n            let context = document.createElement('div');\r\n            context.classList.add('dropdown-content');\r\n            context.style.setProperty('position', 'absolute');\r\n            parent.appendChild(context);\r\n\r\n            /* When the user clicks on the button,\r\n             toggle between hiding and showing the dropdown content */\r\n            parent.addEventListener(\r\n                'click',\r\n                function () {\r\n                    context.classList.toggle('show');\r\n                },\r\n                false);\r\n            return context;\r\n        }\r\n        return labelControl;\r\n    }\r\n\r\n    private registerEvents(events: string[]) {\r\n        let that = this;\r\n        for (let i = 0; i < events.length; i++) {\r\n            this.$view.addEventListener(events[i], function (evt) {\r\n                return that.tableEvent(events[i], evt);\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\nclass Column {\r\n    label: string;\r\n    attribute: string;\r\n    $element: HTMLTableHeaderCellElement;\r\n    $resize: HTMLDivElement;\r\n    visible: boolean;\r\n}\r\n","import { AutoComplete } from './AutoComplete';\r\nimport { BR } from './BR';\r\nimport { Div } from './Div';\r\nimport { Label } from './Label';\r\n\r\nexport * from './Node';\r\nexport * from './Class';\r\nexport * from './SO';\r\nexport * from './Symbol';\r\n\r\nexport * from './BR';\r\nexport * from './Button';\r\nexport * from './Div';\r\nexport * from './Form';\r\nexport * from './Input';\r\nexport * from './Label';\r\nexport * from './Table';\r\nexport * from './HTML';\r\nexport * from './Dice';\r\nexport * from './AutoComplete';\r\nexport * from './Attribute';\r\nexport * from './Method';\r\nexport * from './ClazzProperty';\r\n\r\nnew AutoComplete();\r\nnew BR();\r\nnew Div();\r\nnew Label();\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class AddNode implements EventHandler {\r\n\r\n    public MIN_SIZE_TO_ADD_NODE: number = 30;\r\n    public MIN_SIZE_TO_ADD_TEXT: number = 10;\r\n    private graph: Graph;\r\n    private svgRect: SVGSVGElement;\r\n    private svgGroupAddNode: SVGSVGElement;\r\n    private svgTextAddNode: SVGSVGElement;\r\n    private svgTextRectAddNode: SVGSVGElement;\r\n    private isRectDrawing: boolean;\r\n    private isDrawToLeft: boolean;\r\n    private isDrawToTop: boolean;\r\n    private isBigEnoughForAddNode: boolean;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(AddNode.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(AddNode.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!this.canHandle()) {\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element.id !== 'RootElement') {\r\n            return false;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element.id === 'RootElement') {\r\n                    this.start(event, element);\r\n\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mousemove':\r\n                this.drawRect(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.removeRect();\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.addNode();\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawRect(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isRectDrawing) {\r\n            return;\r\n        }\r\n\r\n        evt.stopPropagation();\r\n\r\n        let width = Util.getEventX(evt) - this.x;\r\n        let height = Util.getEventY(evt) - this.y;\r\n\r\n        // rectangle is in a negative area, drawn to upper case. not possibble with svg\r\n        if (width < 0) {\r\n            this.isDrawToLeft = true;\r\n            width *= -1;\r\n        } else {\r\n            this.isDrawToLeft = false;\r\n        }\r\n\r\n        if (height < 0) {\r\n            this.isDrawToTop = true;\r\n            height *= -1;\r\n        } else {\r\n            this.isDrawToTop = false;\r\n        }\r\n\r\n        if (width > this.MIN_SIZE_TO_ADD_NODE && height > this.MIN_SIZE_TO_ADD_NODE) {\r\n            this.isBigEnoughForAddNode = true;\r\n        } else {\r\n            this.isBigEnoughForAddNode = false;\r\n        }\r\n\r\n        this.graph.root.style.cursor = 'pointer';\r\n\r\n        // if line wasnt draw\r\n        if (!this.svgRect) {\r\n\r\n            let rectAddNode = Util.createShape({\r\n                tag: 'rect',\r\n                id: 'addNodeRect',\r\n                x: this.x,\r\n                y: this.y,\r\n                width: 1,\r\n                height: 1,\r\n                class: 'SVGAddNode'\r\n            });\r\n\r\n            let group = Util.createShape({ tag: 'g', id: 'groupAddNode' });\r\n            group.appendChild(rectAddNode);\r\n\r\n            this.graph.root.appendChild(group);\r\n            this.svgRect = rectAddNode;\r\n            this.svgGroupAddNode = group;\r\n        }\r\n        else {\r\n\r\n            let svgRectBBox = this.svgRect.getBBox();\r\n\r\n            // if rect is big enough, show text as helper\r\n            if ((svgRectBBox.width > this.MIN_SIZE_TO_ADD_TEXT\r\n                || svgRectBBox.height > this.MIN_SIZE_TO_ADD_TEXT) && !this.svgTextAddNode) {\r\n\r\n                let textAddNode = Util.createShape({\r\n                    tag: 'text',\r\n                    x: this.x,\r\n                    y: this.y - 5,\r\n                    'font-family': 'Verdana',\r\n                    'font-size': 12,\r\n                    fill: 'black'\r\n                });\r\n                textAddNode.textContent = 'Hold on and move to create a new class';\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n\r\n\r\n                // get correct size of text node\r\n                let sizeClientRect: ClientRect = textAddNode.getBoundingClientRect();\r\n\r\n                let rectBackgroundForText = Util.createShape({\r\n                    tag: 'rect',\r\n                    x: this.x,\r\n                    y: this.y - sizeClientRect.height,\r\n                    width: sizeClientRect.width,\r\n                    height: sizeClientRect.height,\r\n                    fill: '#DDD',\r\n                    'stroke-width': 0\r\n                });\r\n\r\n                this.svgTextRectAddNode = rectBackgroundForText;\r\n                this.svgTextAddNode = textAddNode;\r\n                this.svgGroupAddNode.appendChild(rectBackgroundForText);\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n            }\r\n\r\n            if (this.isDrawToLeft) {\r\n                this.svgRect.setAttributeNS(null, 'x', '' + Util.getEventX(evt));\r\n            }\r\n\r\n            if (this.isDrawToTop) {\r\n                this.svgRect.setAttributeNS(null, 'y', '' + Util.getEventY(evt));\r\n            }\r\n\r\n            // set width and height\r\n            this.svgRect.setAttributeNS(null, 'width', width.toString());\r\n            this.svgRect.setAttributeNS(null, 'height', height.toString());\r\n\r\n            // set color\r\n            if (this.isBigEnoughForAddNode) {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode-ready');\r\n\r\n                // draw text\r\n            }\r\n            else {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeRect(): void {\r\n        this.isRectDrawing = false;\r\n        this.isBigEnoughForAddNode = false;\r\n\r\n        this.graph.root.style.cursor = 'default';\r\n\r\n        if (this.svgGroupAddNode) {\r\n            this.graph.root.removeChild(this.svgGroupAddNode);\r\n            this.svgGroupAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgRect) {\r\n            this.svgRect = undefined;\r\n        }\r\n\r\n        if (this.svgTextAddNode) {\r\n            this.svgTextAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgTextRectAddNode) {\r\n            this.svgTextRectAddNode = undefined;\r\n        }\r\n    }\r\n\r\n    private addNode(): void {\r\n\r\n        if (!this.isBigEnoughForAddNode) {\r\n            this.removeRect();\r\n            return;\r\n        }\r\n\r\n        this.removeRect();\r\n        let node = this.graph.addElementWithValues('Class', { x: this.x, y: this.y });\r\n        this.graph.drawElement(node);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isRectDrawing) {\r\n            return;\r\n        }\r\n        this.isRectDrawing = true;\r\n\r\n        this.x = Util.getEventX(evt);\r\n        this.y = Util.getEventY(evt);\r\n    }\r\n\r\n}\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement, Point } from '../elements/BaseElements';\r\nimport { GraphModel } from '../elements/Model';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Control } from '../Control';\r\nimport { Util } from '../util';\r\n\r\nexport class Drag implements EventHandler {\r\n\r\n    private element: DiagramElement;\r\n    private svgElement: SVGSVGElement;\r\n    private dragging = false;\r\n    private reinsert = false;\r\n    private mouseOffset = new Point();\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        if (!this.canHandle()) {\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if ((!this.dragging) && (element.id !== 'RootElement')) {\r\n                    this.element = element;\r\n                    this.svgElement = <SVGSVGElement>element.$view;\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mouseup':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n\r\n                break;\r\n            case 'mousemove':\r\n                if (this.dragging) {\r\n                    this.drag(event, element);\r\n                }\r\n                break;\r\n            case 'mouseleave':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Drag.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Drag.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private reset() {\r\n        this.dragging = false;\r\n        this.svgElement.style.cursor = 'pointer';\r\n\r\n        /*  WORKAROUND\r\n            Chrome got problem with the Node.appendChild() method.\r\n            Sometimes it works, sometimes not.\r\n            So the background is, in the drag method will the current element be appended\r\n            to front of the svg root.\r\n            If this happend, the click event won't fire.\r\n            So it will be fired manually.\r\n            This problem occurs only in chrome.\r\n        */\r\n        if (Util.isChrome()) {\r\n            let clickEvt = Util.createCustomEvent('click');\r\n            this.svgElement.dispatchEvent(clickEvt);\r\n        }\r\n    }\r\n\r\n    private start(evt: Event | any, element: Control) {\r\n\r\n        this.dragging = true;\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n        this.reinsert = true;\r\n\r\n        this.svgElement.style.cursor = 'move';\r\n    }\r\n\r\n    private drag(evt: Event | any, element: DiagramElement) {\r\n\r\n        if (this.reinsert) {\r\n            if (this.element.id !== 'RootElement') {\r\n                // nesseccary to set the dragged object on top of svg children\r\n                this.graph.root.appendChild(this.svgElement);\r\n            }\r\n\r\n            let dragEvent = Util.createCustomEvent('drag');\r\n            element.$view.dispatchEvent(dragEvent);\r\n        }\r\n        this.reinsert = false;\r\n\r\n        evt.stopPropagation();\r\n\r\n        const translation = this.svgElement.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        const sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        const transX = sx + evt.clientX - this.mouseOffset.x;\r\n        const transY = sy + evt.clientY - this.mouseOffset.y;\r\n        this.svgElement.setAttributeNS(null, 'transform', 'translate(' + transX + ' ' + transY + ')');\r\n        this.element.getPos().addNum(transX - sx, transY - sy);\r\n\r\n        if (this.element instanceof Node) {\r\n            (<Node>this.element).redrawEdges();\r\n        }\r\n\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n\r\n\r\n        // resize svg root\r\n        let maxX = this.element.getPos().x + this.element.getSize().x;\r\n        let maxY = this.element.getPos().y + this.element.getSize().y;\r\n\r\n        let domRectRoot = this.graph.root.getBoundingClientRect();\r\n        if(!domRectRoot){\r\n            return;\r\n        }\r\n\r\n        if(maxX > domRectRoot.width){\r\n            this.graph.root.setAttributeNS(null, 'width', '' + maxX);\r\n        }\r\n        \r\n        if(maxY > domRectRoot.height){\r\n            this.graph.root.setAttributeNS(null, 'height', '' + maxY);\r\n        }\r\n    }\r\n}\r\n","import PropertyChangeSupport from '../PropertyChangeSupport';\r\nimport Data from '../Data';\r\nimport {Adapter} from '../Adapter';\r\nimport ClazzProperty from '../elements/nodes/ClazzProperty';\r\n\r\nexport class GraphListener implements PropertyChangeSupport {\r\n    private $owner: ClazzProperty;\r\n\r\n    constructor(owner: ClazzProperty) {\r\n        this.$owner = owner;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        let adapter = this.$owner.getRoot().getAdapter();\r\n        if (adapter) {\r\n            // messages.add(\"{\\\"class\\\":\\\"de.uniks.networkparser.test.model.House\\\",\\\"id\\\":\\\"H1\\\",\\\"rem\\\":{\\\"floor\\\":4},\\\"upd\\\":{\\\"floor\\\":42}}\");\r\n            let myId =  this.$owner.$owner.getId();\r\n            if (myId && myId.length > 0) {\r\n                let pos = myId.indexOf(':');\r\n                if (pos > 0) {\r\n                    myId = myId.substring(0, pos).trim();\r\n                }\r\n            }\r\n            let myName = this.$owner.getName();\r\n            let remJson = {};\r\n            remJson[myName] = oldValue;\r\n            let updJson = {};\r\n            updJson[myName] = newValue;\r\n            let json = {};\r\n            json['id'] = myId;\r\n            json['rem'] = remJson;\r\n            json['upd'] = updJson;\r\n            let message = JSON.stringify(json);\r\n            (<Adapter> adapter).update(message);\r\n        }\r\n    }\r\n}\r\n","import {Graph} from '../elements/';\r\nimport {EventHandler, EventBus} from '../EventBus';\r\nimport {DiagramElement} from '../elements/';\r\nimport {Util} from '../util';\r\n\r\nexport class ImportFile implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(ImportFile.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(ImportFile.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        let type: string = typeof event;\r\n        if (type !== 'DragEvent') {\r\n            return false;\r\n        }\r\n        let evt: DragEvent = <DragEvent>event;\r\n        if (evt.type === 'dragover') {\r\n            this.handleDragOver(evt);\r\n        } else if (evt.type === 'dragleave') {\r\n            if (this.graph.$view !== evt.target) {\r\n                return false;\r\n            }\r\n            this.setBoardStyle('dragleave');\r\n        } else if (evt.type === 'drop') {\r\n            this.handleLoadFile(evt);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public setBoardStyle(typ: string): boolean {\r\n        let b = this.graph.$view;\r\n        Util.removeClass(b, 'Error');\r\n        Util.removeClass(b, 'Ok');\r\n        Util.removeClass(b, 'Add');\r\n        if (typ === 'dragleave') {\r\n            if (b['errorText']) {\r\n                b.removeChild(b['errorText']);\r\n                b['errorText'] = null;\r\n            }\r\n            return true;\r\n        }\r\n        Util.addClass(b, typ);\r\n        if (typ === 'Error') {\r\n            if (!b['errorText']) {\r\n                b['errorText'] = Util.create({tag: 'div', style: 'margin-top: 30%', value: 'NO TEXTFILE'});\r\n                b.appendChild(b['errorText']);\r\n            }\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private handleLoadFile(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n\r\n        let files = evt.dataTransfer.files; // FileList object.\r\n\r\n        if (files.length > 1) {\r\n            evt.dataTransfer.dropEffect = 'none';\r\n            return;\r\n        }\r\n\r\n        // files is a FileList of File objects. List some properties.\r\n        let reader  = new FileReader();\r\n        let output = [];\r\n        let htmlResult = '';\r\n        let that = this;\r\n        for (let i = 0, f; f = files[i]; i++) {\r\n            reader.onload = function(event) {\r\n                htmlResult = event.target['result'];\r\n                console.log('fileContent: ' + htmlResult);\r\n\r\n                // CHANGE TO INTERNAL OBJECT\r\n                if (that.graph) {\r\n                    that.graph.import(htmlResult);\r\n                }\r\n            };\r\n            reader.readAsText(f);\r\n        }\r\n        this.setBoardStyle('dragleave');\r\n    }\r\n\r\n    private handleDragOver(evt: DragEvent): void {\r\n        let error: boolean = true, n: string, f;\r\n        let files = evt.dataTransfer.files;\r\n        // process all File objects\r\n        if (files && files.length > 0) {\r\n            for (let i: number = 0; i < files.length; i += 1) {\r\n                f = files[i];\r\n                if (f.type.indexOf('text') === 0) {\r\n                    error = false;\r\n                } else if (f.type === '') {\r\n                    n = f.name.toLowerCase();\r\n                    if (n.indexOf('json', n.length - 4) !== -1) {\r\n                        error = false;\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            let items = evt.dataTransfer.items;\r\n            if (items && items.length > 0) {\r\n                for (let z = 0; z < items.length; z ++) {\r\n                    if (items[z].type === '' || items[z].type === 'text/plain') {\r\n                        error = false;\r\n                    }\r\n                }\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.\r\n        if (error) {\r\n            this.dragStyler(evt, 'Error');\r\n        } else if (evt.ctrlKey) {\r\n            this.dragStyler(evt, 'Add');\r\n        } else {\r\n            this.dragStyler(evt, 'Ok');\r\n        }\r\n        /* //evt.target['className'] += ' diagramLoadFile';\r\n        '//console.log('handDragOver');*/\r\n    }\r\n\r\n    private dragStyler(event: Event, typ: string) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n        this.setBoardStyle(typ);\r\n    }\r\n\r\n    private handleDragLeave(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n        evt.dataTransfer.dropEffect = 'link'; // Explicitly show this is a copy.\r\n        evt.target['className'] = 'diagram';\r\n        console.log('handDragLeave');\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Class } from '../elements/nodes/Class';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Association } from '../elements/index';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class NewEdge implements EventHandler {\r\n    private graph: Graph;\r\n    private svgLine: SVGSVGElement;\r\n    private isEdgeDrawing: boolean;\r\n    private sourceNode: Node;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    private lastTargetNode: Node;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(NewEdge.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(NewEdge.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!((<KeyboardEvent>event).ctrlKey || EventBus.isHandlerActiveOrFree('NewEdge', true))) {\r\n            this.removeLine();\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element instanceof Node) {\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n\r\n            case 'mousemove':\r\n                this.drawEdge(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.setNewEdgeToNode(event);\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default: break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawEdge(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        let lineToX = Util.getEventX(evt);\r\n        let lineToy = Util.getEventY(evt);\r\n\r\n        let path = `M${this.x} ${this.y} L${lineToX} ${lineToy}`;\r\n        // if line wasnt draw\r\n        if (!this.svgLine) {\r\n\r\n            let attr = {\r\n                tag: 'path',\r\n                id: 'newEdgePath',\r\n                d: path,\r\n                class: 'SVGEdge'\r\n            };\r\n\r\n            let shape = Util.createShape(attr);\r\n            this.svgLine = shape;\r\n\r\n            this.graph.root.appendChild(shape);\r\n            this.graph.root.appendChild(this.sourceNode.$view);\r\n        }\r\n        else {\r\n\r\n            // set new L path\r\n            this.svgLine.setAttributeNS(null, 'd', path);\r\n\r\n            // get node from position\r\n            let targetNode = this.graph.$graphModel.getNodeByPosition(Util.getEventX(evt), Util.getEventY(evt));\r\n\r\n            // if some targetnode is available, so highlight the node\r\n            if (targetNode) {\r\n\r\n                // reset the last one\r\n                if (this.lastTargetNode && this.lastTargetNode.id !== targetNode.id) {\r\n                    this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n                }\r\n\r\n                this.lastTargetNode = targetNode;\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz-drawedge');\r\n            }\r\n            else if (this.lastTargetNode) {\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeLine(): void {\r\n        this.isEdgeDrawing = false;\r\n\r\n        if (this.svgLine) {\r\n            this.graph.root.removeChild(this.svgLine);\r\n            this.svgLine = null;\r\n        }\r\n\r\n        if (this.lastTargetNode) {\r\n            this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n        }\r\n    }\r\n\r\n    private setNewEdgeToNode(event: Event | any): void {\r\n        // get node from position\r\n        let targetNode = this.graph.$graphModel\r\n            .getNodeByPosition(Util.getEventX(event), Util.getEventY(event));\r\n\r\n        if (!targetNode) {\r\n            this.removeLine();\r\n\r\n            return;\r\n        }\r\n\r\n        this.removeLine();\r\n        let edgeType = this.sourceNode.$defaulEdgeType || 'Association';\r\n\r\n        let jsonData = {\r\n            type: edgeType,\r\n            source: this.sourceNode.id,\r\n            target: targetNode.id\r\n        };\r\n\r\n        let newEdge = this.graph.$graphModel.addEdge(<any>jsonData, true);\r\n        this.graph.drawElement(newEdge);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        this.isEdgeDrawing = true;\r\n        this.sourceNode = element as Class;\r\n\r\n        this.x = this.sourceNode.getPos().x + (this.sourceNode.getSize().x / 2);\r\n        this.y = this.sourceNode.getPos().y + (this.sourceNode.getSize().y / 2);\r\n\r\n        // TODO: get this into util or select\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Node } from '../elements/nodes';\r\nimport { Association } from '../elements/edges';\r\nimport { Util } from '../util';\r\nimport { SymbolLibary } from '../elements/nodes/Symbol';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\nimport Attribute from '../elements/nodes/Attribute';\r\n\r\nexport class Select implements EventHandler {\r\n\r\n    private deleteShape: SVGSVGElement;\r\n    private addEdgeShape: SVGSVGElement;\r\n    private copyNodeShape: SVGSVGElement;\r\n    private graph: Graph;\r\n    private padding = 5;\r\n\r\n    private lastSelectedNode: Element;\r\n    private lastSelectedEdge: Element;\r\n\r\n    private isDragged: boolean;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.deleteShape = SymbolLibary.drawSVG({ type: 'Basket', background: true, id: 'trashcan', tooltip: 'Delete class' });\r\n        this.copyNodeShape = SymbolLibary.drawSVG({ type: 'Copynode', background: true, id: 'copyNode', tooltip: 'Copy class' });\r\n        this.addEdgeShape = SymbolLibary.drawSVG({ type: 'Edgeicon', background: true, id: 'addEdge', tooltip: 'Click and drag to connect this class' });\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        let x = Util.getEventX(event);\r\n        let y = Util.getEventY(event);\r\n\r\n        event.stopPropagation();\r\n        if (event.type === 'drag') {\r\n            this.isDragged = true;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            if (element instanceof Node) {\r\n                this.lastSelectedNode = <Element>element.$view;\r\n            }\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n        }\r\n\r\n        if (event.target['id'] === 'background' || element === this.graph.$graphModel) {\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let e = <Node>element;\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.graph.root.appendChild(this.addEdgeShape);\r\n            this.graph.root.appendChild(this.copyNodeShape);\r\n            this.graph.root.appendChild(element.$view);\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'visible');\r\n\r\n            let x = (e.getPos().x + e.getSize().x) + 5;\r\n            let y = e.getPos().y;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y + this.padding})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.copyNodeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 40 + this.padding})`);\r\n            this.copyNodeShape.onclick = (evt) => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let copyClass = (element).copy();\r\n                copyClass.withPos(nextFreePosition.x, nextFreePosition.y);\r\n                this.graph.drawElement(copyClass);\r\n            };\r\n\r\n            this.addEdgeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 80 + this.padding})`);\r\n            this.addEdgeShape.onmousedown = function () {\r\n                EventBus.setActiveHandler('NewEdge');\r\n                element.$view.dispatchEvent(Util.createCustomEvent('mousedown'));\r\n            };\r\n        }\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let clazz = <Node>element;\r\n\r\n            if (Util.isChrome()) {\r\n                if (this.lastSelectedNode && element.id === this.lastSelectedNode.id && !this.isDragged) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            this.isDragged = false;\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            this.lastSelectedNode = <Element>element.$view;\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete class');\r\n\r\n            // draw textbox to edit clazz in one line\r\n            let divInlineEdit = document.createElement('div');\r\n            divInlineEdit.id = 'inlineEdit';\r\n            divInlineEdit.style.position = 'absolute';\r\n            divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n            divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n            divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n            divInlineEdit.style.zIndex = '42';\r\n\r\n            let inputText = document.createElement('input');\r\n            inputText.type = 'text';\r\n            inputText.style.width = '100%';\r\n            inputText.placeholder = 'Add properties, edit label';\r\n\r\n            divInlineEdit.appendChild(inputText);\r\n            document.body.appendChild(divInlineEdit);\r\n\r\n            inputText.addEventListener('focusout', (evt) => {\r\n\r\n                if (Util.isChrome()) {\r\n                    // only if input is empty, remove the inline edit function\r\n                    if ((!inputText.value || inputText.value.length === 0) && (!this.lastSelectedNode || element.id !== this.lastSelectedNode.id)) {\r\n                        this.removeLastInlineEdit();\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                // only if input is empty, remove the inline edit function\r\n                if ((!inputText.value || inputText.value.length === 0)) {\r\n                    this.removeLastInlineEdit();\r\n                }\r\n            });\r\n\r\n            let g = this.graph;\r\n            let propertyTypes: string[] = ['boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'short', 'String', 'void'];\r\n            inputText.addEventListener('keydown', function (evt) {\r\n\r\n                let keyCode = (<any>evt).which;\r\n                let inputValue = <any>inputText.value;\r\n\r\n                if (Util.endsWith(inputValue, ':') && !document.getElementById('selectPropertyType')) {\r\n                    let selectType = document.createElement('select');\r\n                    selectType.id = 'selectPropertyType';\r\n                    selectType.style.width = '100%';\r\n\r\n                    for (let type of propertyTypes) {\r\n                        let selectOption = document.createElement('option');\r\n                        selectOption.value = type;\r\n                        selectOption.innerHTML = type;\r\n                        selectType.appendChild(selectOption);\r\n                    }\r\n\r\n                    selectType.addEventListener('change', function (evt) {\r\n                        let inputValueSplitted = inputValue.split(':');\r\n                        let selectedPropertyType = selectType.options[selectType.selectedIndex].value;\r\n\r\n                        if (inputValueSplitted.length >= 1) {\r\n                            inputText.value = inputValueSplitted[0].trim() + ' : ' + selectedPropertyType;\r\n                            inputText.focus();\r\n                        }\r\n                    });\r\n\r\n                    divInlineEdit.appendChild(selectType);\r\n                }\r\n                else if (!Util.includes(inputValue, ':')) {\r\n                    let selectType = document.getElementById('selectPropertyType');\r\n\r\n                    if (selectType) {\r\n                        selectType.remove();\r\n                    }\r\n                }\r\n\r\n                if (keyCode !== 13) {\r\n                    return;\r\n                }\r\n\r\n                // attribute\r\n                if ((Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) === false) {\r\n                    if (Util.includes(inputValue, ':')) {\r\n                        clazz.addAttribute(inputValue.trim());\r\n                        clazz.reDraw();\r\n                    } else if (Util.includes(inputValue, '=') ) {\r\n                        let attr: Attribute = null;\r\n                        let name = inputValue.substring(0, inputValue.indexOf('=')).trim();\r\n                        for (let child of clazz.getAttributes() ) {\r\n                            if ( name === child.getName()) {\r\n                                attr = child;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (attr) {\r\n                            attr.updateValue(inputValue.substring(inputValue.indexOf('=') + 1).trim());\r\n                        }\r\n                        clazz.reDraw();\r\n                    }\r\n                }\r\n\r\n                // method\r\n                else if (Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) {\r\n                    clazz.addMethod(inputValue.trim());\r\n                    clazz.reDraw();\r\n                }\r\n                // label\r\n                else if (inputValue.trim().split(' ').length === 1 && inputValue.trim().length > 0) {\r\n                    clazz.updateLabel(inputValue.trim());\r\n                }\r\n\r\n                // reset size\r\n                divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n                divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n                divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n\r\n                inputText.value = '';\r\n\r\n                // remove combobox to select type of property\r\n                let selectType = document.getElementById('selectPropertyType');\r\n\r\n                if (selectType) {\r\n                    selectType.remove();\r\n                }\r\n\r\n                // TODO: reload propertiespanel. not working!\r\n                // event wont dispatch\r\n                // let customEvt = Util.createCustomEvent(EventBus.RELOADPROPERTIES);\r\n                // element.$view.dispatchEvent(customEvt);\r\n            });\r\n\r\n            (<any>divInlineEdit.children[0]).focus();\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Association) {\r\n            this.graph.root.appendChild(element.$view);\r\n            this.graph.root.appendChild(element.$sNode.$view);\r\n            this.graph.root.appendChild(element.$tNode.$view);\r\n\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete edge');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            let edge = <Association>element;\r\n            this.lastSelectedEdge = edge.$view;\r\n\r\n            Util.addClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Select.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Select.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private setTooltipOfShape(shape: SVGSVGElement, tooltip: string): void {\r\n        if (!shape || !shape.hasChildNodes()) {\r\n            return;\r\n        }\r\n\r\n        let titleElement = <SVGSVGElement>shape.childNodes[0];\r\n        if (!titleElement || titleElement.tagName !== 'title') {\r\n            return;\r\n        }\r\n\r\n        titleElement.textContent = tooltip;\r\n    }\r\n\r\n    private resetLastSelectedElements() {\r\n        // reset the last one\r\n        if (this.lastSelectedNode) {\r\n            Util.removeClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.lastSelectedNode = undefined;\r\n        }\r\n\r\n        if (this.lastSelectedEdge) {\r\n            Util.removeClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n            this.lastSelectedEdge = undefined;\r\n        }\r\n\r\n        this.removeLastInlineEdit();\r\n    }\r\n\r\n    private removeLastInlineEdit(): void {\r\n        // remove last inline edit of clazz\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n\r\n            // its not supported in internet explorer\r\n            // lastInlineEdit.remove();\r\n        }\r\n    }\r\n\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\n\r\nexport class Zoom implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n    }\r\n\r\n    public handle(e: any, element: DiagramElement): boolean {\r\n        let delta = e.deltaY || e.wheelDeltaY || -e.wheelDelta;\r\n        let d = 1 + (delta / 1000);\r\n\r\n        let values = this.graph.root.getAttribute('viewBox').split(' ');\r\n        const newViewBox = `${values[0]} ${values[1]} ${parseInt(values[2]) * d} ${parseInt(values[3]) * d}`;\r\n        this.graph.root.setAttribute('viewBox', newViewBox);\r\n\r\n        e.preventDefault();\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Zoom.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Zoom.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n}\r\n","export * from './Drag';\r\nexport * from './Select';\r\nexport * from './Zoom';\r\nexport * from './NewEdge';\r\nexport * from './ImportFile';\r\nexport * from './AddNode';\r\n","import { Association } from '../elements/edges';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport Layout from './Layout';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\n\r\nexport class DagreLayout implements Layout {\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        if (!window['dagre']) {\r\n            return;\r\n        }\r\n        let model = graph.$graphModel;\r\n        let g = new window['dagre'].graphlib.Graph();\r\n\r\n        g.setGraph({ marginx: 100, marginy: 20 }).setDefaultEdgeLabel(function () {\r\n            return {};\r\n        });\r\n\r\n        for (let node of model.nodes) {\r\n            g.setNode(node.id, { width: node.getSize().x, height: node.getSize().y });\r\n        }\r\n\r\n        for (let edge of model.edges) {\r\n            g.setEdge(edge.$sNode.id, edge.$tNode.id);\r\n        }\r\n\r\n        window['dagre'].layout(g);\r\n\r\n        g.nodes().forEach(function (nodeId: string) {\r\n            for (let node of model.nodes) {\r\n                if (node.id === nodeId) {\r\n                    node.withPos(g.node(nodeId).x - g.node(nodeId).width / 2, g.node(nodeId).y - g.node(nodeId).height / 2);\r\n                }\r\n            }\r\n        });\r\n        g.edges().forEach(function (e: any) {\r\n            for (let edge of model.edges) {\r\n                if (edge.$sNode.id === e.v && edge.$tNode.id === e.w) {\r\n                    let size = g.edge(e).points.length;\r\n                    edge.clearPoints();\r\n                    for (let i = 0; i < size; i++) {\r\n                        let point: SVGPoint = g.edge(e).points[i];\r\n                        edge.addPoint(point.x, point.y);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n}\r\n","import {DiagramElement} from '../elements/BaseElements';\r\nimport Layout from './Layout';\r\nimport {Graph} from '../elements/Graph';\r\nimport {Association} from '../elements/edges/Association';\r\nimport {Node} from '../elements/nodes/Node';\r\nimport {Control} from '../Control';\r\n\r\nexport class LayoutGraphMin {\r\n    public nodes: Object = {};\r\n    public edges: Array<Object> = [];\r\n    public outEdges: Object = {};\r\n    public inEdges: Object = {};\r\n    public dummyNodes: Array<LayoutGraphNode> = [];\r\n    public dummyEdges: Object = {};\r\n    public count: number = 0;\r\n    public minRank: number = Number.POSITIVE_INFINITY;\r\n    public maxRank: number = 0;\r\n    public maxHeight: number = 0;\r\n    public maxWidth: number = 0;\r\n    public ranksep: number = 0;\r\n    public edgesLabel: Array<Object> = [];\r\n\r\n    public nodeCount(): number {\r\n        return this.count;\r\n    }\r\n\r\n    public node(id: string) {\r\n        return this.nodes[id];\r\n    }\r\n\r\n    public setNode(id: string, n: LayoutGraphNode) {\r\n        if (n && !this.nodes[id]) {\r\n            this.nodes[id] = n;\r\n            this.count = this.count + 1;\r\n        } else if (!n && this.nodes[id]) {\r\n            delete this.nodes[id];\r\n        }\r\n    }\r\n}\r\n\r\nexport class LayoutGraphNode {\r\n    public id: string;\r\n    public width: number;\r\n    public height: number;\r\n    public x: number;\r\n    public y: number;\r\n    public edgeObj: LayoutGraphEdge;\r\n    public rank: number;\r\n\r\n    constructor(id: string, width: number, height: number, x: number, y: number) {\r\n        this.id = id;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n\r\nexport class LayoutGraphEdge {\r\n    public source: string;\r\n    public target: string;\r\n}\r\n\r\n// \t\t\t\t######################################################### DagreGraph #########################################################\r\nexport class DagreLayoutMin implements Layout {\r\n    public static EDGE_KEY_DELIM = '\\x01';\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        let g, layoutNode, nodes, newEdge, edges;\r\n        let i, n, x, y, sId, tId, split = DagreLayoutMin.EDGE_KEY_DELIM;\r\n        let e: Association;\r\n\r\n        nodes = node['nodes'];\r\n        edges = node['edges'];\r\n        g = new LayoutGraphMin();\r\n\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            g.setNode(n.id, new LayoutGraphNode(n.id, n.getSize().x, n.getSize().y, n.getPos().x, n.getPos().y));\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            sId = this.getNodeId(e.$sNode);\r\n            tId = this.getNodeId(e.$tNode);\r\n            if (sId > tId) {\r\n                let tmp = tId;\r\n                tId = sId;\r\n                sId = tmp;\r\n            }\r\n            let idAB = sId + split + tId + split;\r\n            let idBA = tId + split + sId + split;\r\n            if (sId !== tId && g.edgesLabel.indexOf(idAB) < 0 && g.edgesLabel.indexOf(idBA) < 0) {\r\n                newEdge = {source: sId, target: tId, minlen: 1, weight: 1};\r\n                g.edges.push(newEdge);\r\n                g.edgesLabel.push(idAB);\r\n                // In Edges\r\n                if (!g.inEdges[tId]) {\r\n                    g.inEdges[tId] = [];\r\n                }\r\n                g.inEdges[tId].push(newEdge);\r\n\r\n                // Out Edges\r\n                if (!g.outEdges[sId]) {\r\n                    g.outEdges[sId] = [];\r\n                }\r\n                g.outEdges[sId].push(newEdge);\r\n            }\r\n        }\r\n        this.layouting(g);\r\n        // Set the layouting back\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            layoutNode = g.node(n.id);\r\n            x = n.getPos().x;\r\n            y = n.getPos().y;\r\n            if (x < 1 && y < 1) {\r\n                n.withPos(Math.ceil(layoutNode.x), Math.ceil(layoutNode.y));\r\n            }\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            // OBSOLETE method:  e.calc(graph.canvas);\r\n        }\r\n        graph.draw();\r\n    }\r\n\r\n    public getNodeId(node: Control): string {\r\n        if (node.$owner) {\r\n            return this.getNodeId(node.$owner) || node.id;\r\n        }\r\n        return node.id;\r\n    }\r\n\r\n    public layouting(g: LayoutGraphMin) {\r\n        this.longestPath(g);\r\n        this.normalizeRanks(g);\r\n        this.normalizeEdge(g);\r\n        // this.setSimpleOrder(g);\r\n        this.order(g);\r\n        g.ranksep = 25;\r\n        // remove Dummy\r\n        this.removeDummy(g);\r\n        this.position(g);\r\n    }\r\n\r\n    public setSimpleOrder(g: LayoutGraphMin) {\r\n        let i, n;\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            n.order = n.rank;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Applies heuristics to minimize edge crossings in the graph and sets the best\r\n     * order solution as an order attribute on each node.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Graph must be DAG\r\n     *    2. Graph nodes must be objects with a \"rank\" attribute\r\n     *    3. Graph edges must have the \"weight\" attribute\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Graph nodes will have an \"order\" attribute based on the results of the\r\n     *       algorithm.\r\n     */\r\n    public order(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        let visited = {};\r\n        let node, n, order, i;\r\n        for (i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (n in g.nodes) {\r\n            if (visited[n]) {\r\n                continue;\r\n            }\r\n            visited[n] = true;\r\n            node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank].push(n);\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                g.nodes[layering[order][n]].order = parseInt(n);\r\n            }\r\n        }\r\n        // Fix resolve conflict\r\n        for (order in layering) {\r\n            if (layering[order].length > 1) {\r\n                for (n in layering[order]) {\r\n                    if (layering[order].hasOwnProperty(n) === false) {\r\n                        continue;\r\n                    }\r\n                    let name = layering[order][n];\r\n                    let sum = 0;\r\n                    let weight = 1;\r\n                    let edges = g.dummyEdges[name];\r\n                    if (edges) {\r\n                        for (i in edges) {\r\n                            if (edges.hasOwnProperty(i) === false) {\r\n                                continue;\r\n                            }\r\n                            let edge = edges[i];\r\n                            let nodeU = g.node(edge.target);\r\n                            sum = sum + (edge.weight * nodeU.order);\r\n                            weight = weight + edge.weight;\r\n                        }\r\n                    }\r\n                    g.node(name).barycenter = sum / weight;\r\n                    g.node(name).weight = weight;\r\n                }\r\n            } else if (layering[order].length > 0) {\r\n                for (n in layering[order]) {\r\n                    let name = layering[order][n];\r\n                    g.node(name).barycenter = 1;\r\n                    g.node(name).weight = 1;\r\n                }\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                let node = g.nodes[layering[order][n]];\r\n                node.order = parseInt(n) + node.barycenter * node.weight;\r\n                if (isNaN(node.order)) {\r\n                    console.log('ERROR');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public removeDummy(g: LayoutGraphMin) {\r\n        for (let z in g.dummyNodes) {\r\n            let node = g.dummyNodes[z];\r\n            g.setNode(node.id, null);\r\n        }\r\n        g.dummyNodes = [];\r\n        g.dummyEdges = {};\r\n    }\r\n\r\n    /*\r\n     * Breaks any long edges in the graph into short segments that span 1 layer\r\n     * each. This operation is undoable with the denormalize function.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. The input graph is a DAG.\r\n     *    2. Each node in the graph has a \"rank\" property.\r\n     *\r\n     * Post-condition:\r\n     *\r\n     *    1. All edges in the graph have a length of 1.\r\n     *    2. Dummy nodes are added where edges have been split into segments.\r\n     *    3. The graph is augmented with a \"dummyChains\" attribute which contains\r\n     *       the first dummy in each chain of dummy nodes produced.\r\n     */\r\n    public normalizeEdge(g: LayoutGraphMin): void {\r\n        let i: number = 1;\r\n        for (let id in g.edges) {\r\n            let e: LayoutGraphEdge = <LayoutGraphEdge>g.edges[id];\r\n            let v: string = e.source;\r\n            let vRank = g.node(v).rank;\r\n            const w: string = e.target;\r\n            const wRank: number = g.node(w).rank;\r\n            let name: string;\r\n\r\n            if (wRank === vRank + 1) {\r\n                continue;\r\n            }\r\n\r\n            let dummy;\r\n            for (vRank = vRank + 1; vRank < wRank; ++vRank) {\r\n                name = '_d' + e.source + e.target + (i++);\r\n                let newEdge = {source: v, target: name, minlen: 1, weight: 1};\r\n                dummy = new LayoutGraphNode(name, 0, 0, 0, 0);\r\n                dummy.edgeObj = e;\r\n                dummy.rank = vRank;\r\n                // Dummy Edges\r\n                if (!g.dummyEdges[v]) {\r\n                    g.dummyEdges[v] = [];\r\n                }\r\n                g.dummyEdges[v].push(newEdge);\r\n\r\n                g.dummyNodes.push(dummy);\r\n                g.setNode(dummy.id, dummy);\r\n                v = name;\r\n            }\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Initializes ranks for the input graph using the longest path algorithm. This\r\n     * algorithm scales well and is fast in practice, it yields rather poor\r\n     * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\r\n     * ranks wide and leaving edges longer than necessary. However, due to its\r\n     * speed, this algorithm is good for getting an initial ranking that can be fed\r\n     * into other algorithms.\r\n     *\r\n     * This algorithm does not normalize layers because it will be used by other\r\n     * algorithms in most cases. If using this algorithm directly, be sure to\r\n     * run normalize at the end.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Input graph is a DAG.\r\n     *    2. Input graph node labels can be assigned properties.\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Each node will be assign an (unnormalized) \"rank\" property.\r\n     */\r\n    public longestPath(g: LayoutGraphMin) {\r\n        let i, n, visited = [];\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            visited.push(i);\r\n            n.rank = this.findAllPaths(g, n, 0, visited);\r\n            g.minRank = Math.min(g.minRank, n.rank);\r\n        }\r\n    }\r\n\r\n    public findAllPaths(g: LayoutGraphMin, n: Node, currentCost: number, path: Array<String>) {\r\n        let min: number = 0;\r\n        let id: string;\r\n        let z: number;\r\n        let target;\r\n        if (g.outEdges[n.id]) {\r\n            for (z = 0; z < g.outEdges[n.id].length; z++) {\r\n                id = g.outEdges[n.id][z].target;\r\n                target = g.nodes[id];\r\n                if (path[id]) {\r\n                    min = Math.min(min, target.rank);\r\n                } else if (path.indexOf(id) < 0) {\r\n                    min = Math.min(min, this.findAllPaths(g, target, currentCost - 2, path));\r\n                } else {\r\n                    min = currentCost;\r\n                }\r\n            }\r\n            return min;\r\n        }\r\n        return currentCost;\r\n    }\r\n\r\n    /*\r\n     * Adjusts the ranks for all nodes in the graph such that all nodes v have\r\n     * rank(v) >= 0 and at least one node w has rank(w) = 0.\r\n     */\r\n    public normalizeRanks(g: LayoutGraphMin) {\r\n        let min = g.minRank;\r\n        let value;\r\n        g.maxRank = Number.NEGATIVE_INFINITY;\r\n        g.maxHeight = 0;\r\n        g.maxWidth = 0;\r\n        for (let i in g.nodes) {\r\n            let node = g.nodes[i];\r\n            if (node.rank !== undefined) {\r\n                node.rank -= min;\r\n                value = Math.abs(node.rank);\r\n                if (value > g.maxRank) {\r\n                    g.maxRank = value;\r\n                }\r\n                g.maxHeight = Math.max(g.maxHeight, node.height);\r\n                g.maxWidth = Math.max(g.maxWidth, node.width);\r\n            }\r\n        }\r\n    }\r\n\r\n    public position(g: LayoutGraphMin) {\r\n        this.positionY(g);\r\n        let list = this.positionX(g);\r\n        for (let i in list) {\r\n            for (let pos in list[i]) {\r\n                if (list[i].hasOwnProperty(pos) === false) {\r\n                    continue;\r\n                }\r\n                if (g.node(list[i][pos])) {\r\n                    g.node(list[i][pos]).x = parseInt(pos) * g.maxWidth;\r\n                }\r\n            }\r\n\r\n        }\r\n    }\r\n\r\n    public positionY(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        let rankSep = g.ranksep;\r\n        let prevY = 0;\r\n        for (let layer in layering) {\r\n            let maxHeight = g.maxHeight;\r\n            for (let v in layering[layer]) {\r\n                if (layering[layer].hasOwnProperty(v) === false) {\r\n                    continue;\r\n                }\r\n                let id = layering[layer][v];\r\n                g.nodes[id].y = prevY + maxHeight / 2;\r\n            }\r\n            prevY += maxHeight + rankSep;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\r\n     * function will produce a matrix with the ids of each node.\r\n     */\r\n    public buildLayerMatrix(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        for (let i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (let n in g.nodes) {\r\n            let node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank][node.order] = n;\r\n            }\r\n        }\r\n        return layering;\r\n    }\r\n\r\n    public positionX(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        return layering;\r\n    }\r\n}\r\n","import { Point } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport Layout from './Layout';\r\n\r\nexport class Random implements Layout {\r\n\r\n  public layout(graph: Graph) {\r\n\r\n    let model = graph.$graphModel;\r\n\r\n    if (model.nodes) {\r\n      for (let node of model.nodes) {\r\n        let pos: Point = node.getPos();\r\n        if (pos.x === 0 && pos.y === 0) {\r\n          let x = Util.getRandomInt(0, graph.canvasSize.width);\r\n          let y = Util.getRandomInt(0, graph.canvasSize.height);\r\n          node.withPos(x, y);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","export * from './DagreLayout';\r\nexport * from './Random';\r\nexport * from './DagreLayoutMin';\r\n\r\nimport {DagreLayout} from './DagreLayout';\r\nimport {DagreLayoutMin} from './DagreLayoutMin';\r\nimport {Random} from './Random';\r\nnew DagreLayout();\r\nnew DagreLayoutMin();\r\nnew Random();\r\n","import {VirtualKeyBoard} from './VirtualKeyBoard';\r\n\r\nexport {Point} from './elements/BaseElements';\r\nexport {Bridge, DelegateAdapter} from './Bridge';\r\nexport {Graph} from './elements/Graph';\r\nexport * from './elements/nodes';\r\nexport * from './elements/edges';\r\nexport * from './adapters';\r\nexport * from './UML';\r\nimport {Point} from './elements/BaseElements';\r\nimport {Graph} from './elements/Graph';\r\nimport {ClassEditor} from './elements/ClassEditor';\r\nimport {Bridge} from './Bridge';\r\nimport {Util} from './util';\r\nimport * as nodes  from './elements/nodes';\r\nimport * as edges from './elements/edges';\r\nimport {ScrumBoard} from './ScrumBoard';\r\n\r\nif (!window['Point']) {\r\n    window['Point'] = Point;\r\n    window['Graph'] = Graph;\r\n    window['bridge'] = new Bridge();\r\n    window['Util'] = Util;\r\n    window['Class'] = nodes.Class;\r\n    window['Association'] = edges.Association;\r\n    window['SymbolLibary'] = nodes.SymbolLibary;\r\n    window['ClassEditor'] = ClassEditor;\r\n    window['VirtualKeyBoard'] = VirtualKeyBoard;\r\n    window['ScrumBoard'] = ScrumBoard;\r\n}\r\n","'use strict';\r\nimport { CSS } from './CSS';\r\nimport { Node } from './elements/nodes/Node';\r\nimport { DiagramElement, Point } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport class Util {\r\n\r\n    public static isAutoSave: boolean;\r\n\r\n    static getRandomInt(min: number, max: number): number {\r\n        return Math.floor(Math.random() * (max - min + 1)) + min;\r\n    }\r\n\r\n    static createShape(attrs: any): SVGSVGElement {\r\n        let xmlns = attrs.xmlns || 'http://www.w3.org/2000/svg';\r\n        let shape = document.createElementNS(xmlns, attrs.tag);\r\n\r\n        for (let attr in attrs) {\r\n            if (!attrs.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr !== 'tag') {\r\n                shape.setAttribute(attr, attrs[attr]);\r\n\r\n            }\r\n        }\r\n        return <SVGSVGElement><any>shape;\r\n    }\r\n\r\n    static toPascalCase(value: string): string {\r\n        value = value.charAt(0).toUpperCase() + value.substring(1).toLowerCase();\r\n        return value;\r\n    }\r\n\r\n    static isSVG(tag: string): boolean {\r\n        let i,\r\n            list = ['svg', 'path', 'polygon', 'polyline', 'line', 'title', 'rect', 'filter', 'feGaussianBlur', 'feOffset', 'feBlend', 'linearGradient', 'stop', 'text', 'symbol', 'textPath', 'defs', 'fegaussianblur', 'feoffset', 'feblend', 'circle', 'ellipse', 'g'];\r\n        for (i = 0; i < list.length; i += 1) {\r\n            if (list[i] === tag) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    static createHTML(node: any): HTMLElement {\r\n        return <HTMLElement>this.create(node);\r\n    }\r\n    static create(node: any): Element {\r\n        let style, item, xmlns, key, tag, k;\r\n        if (document.createElementNS && (this.isSVG(node.tag) || node.xmlns)) {\r\n            if (node.xmlns) {\r\n                xmlns = node.xmlns;\r\n            } else {\r\n                xmlns = 'http://www.w3.org/2000/svg';\r\n            }\r\n            if (node.tag === 'img' && xmlns) {\r\n                item = document.createElementNS(xmlns, 'image');\r\n                item.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\r\n                item.setAttributeNS('http://www.w3.org/1999/xlink', 'href', node.src);\r\n            } else {\r\n                item = document.createElementNS(xmlns, node.tag);\r\n            }\r\n        } else {\r\n            item = document.createElement(node.tag);\r\n        }\r\n        tag = node.tag.toLowerCase();\r\n        for (key in node) {\r\n            if (!node.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            k = key.toLowerCase();\r\n            if (node[key] === null) {\r\n                continue;\r\n            }\r\n            if (k === 'tag' || k.charAt(0) === '$' || k === '$graphModel') {\r\n                continue;\r\n            }\r\n            if (k.charAt(0) === '#') {\r\n                item[k.substring(1)] = node[key];\r\n                continue;\r\n            }\r\n            if (k === 'rotate') {\r\n                item.setAttribute('transform', 'rotate(' + node[key] + ',' + node.$graphModel.x + ',' + node.$graphModel.y + ')');\r\n                continue;\r\n            }\r\n            if (k === 'value') {\r\n                if (!node[key]) {\r\n                    continue;\r\n                }\r\n                if (tag !== 'input') {\r\n                    if (tag === 'text') {// SVG\r\n                        item.appendChild(document.createTextNode(node[key]));\r\n                    } else {\r\n                        item.innerHTML = node[key];\r\n                    }\r\n                } else {\r\n                    item[key] = node[key];\r\n                }\r\n                continue;\r\n            }\r\n            if (k.indexOf('on') === 0) {\r\n                this.bind(item, k.substring(2), node[key]);\r\n                continue;\r\n            }\r\n            if (k.indexOf('-') >= 0) {\r\n                item.style[key] = node[key];\r\n            } else {\r\n                if (k === 'style' && typeof (node[key]) === 'object') {\r\n                    for (style in node[key]) {\r\n                        if (!node[key].hasOwnProperty(style)) {\r\n                            continue;\r\n                        }\r\n                        if (node[key][style]) {\r\n                            if ('transform' === style) {\r\n                                item.style.transform = node[key][style];\r\n                                item.style.msTransform = item.style.MozTransform = item.style.WebkitTransform = item.style.OTransform = node[key][style];\r\n                            } else {\r\n                                item.style[style] = node[key][style];\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    item.setAttribute(key, node[key]);\r\n                }\r\n            }\r\n        }\r\n        if (node.$parent) {\r\n            node.$parent.appendChild(item);\r\n        }\r\n        if (node.$graphModel) {\r\n            item.$graphModel = node.$graphModel;\r\n        }\r\n        return item;\r\n    }\r\n\r\n    static setSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttribute('width', value);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.setAttribute('height', value);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setAttributeSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttributeNS(null, 'width', value);\r\n        value = Util.getValue(height);\r\n        item.setAttributeNS(null, 'height', value);\r\n    }\r\n\r\n    static setStyleSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setPos(item: any, x: number, y: number): void {\r\n        if (item.x && item.x.baseVal) {\r\n            item.style.left = x + 'px';\r\n            item.style.top = y + 'px';\r\n        } else {\r\n            item.x = x;\r\n            item.y = y;\r\n        }\r\n    }\r\n\r\n    static getValue(value: string | number): number {\r\n        return parseInt(('0' + value).replace('px', ''), 10);\r\n    }\r\n\r\n    static isIE(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('.net') > -1;\r\n    }\r\n\r\n    static isEdge(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('edge') > -1;\r\n    }\r\n\r\n    static isFireFox(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n    }\r\n\r\n    static isSafari(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        return navigator.userAgent.toLowerCase().indexOf('safari') > -1 && !isEdge;\r\n    }\r\n\r\n    static isOpera(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('opera') > -1;\r\n    }\r\n\r\n    static isChrome(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        let isSafari = Util.isSafari();\r\n        return navigator.userAgent.toLowerCase().indexOf('chrome') > -1 && !isEdge && isSafari;\r\n    }\r\n\r\n    static getEventX(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetX'] : event.layerX;\r\n    }\r\n\r\n    static getEventY(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetY'] : event.layerY;\r\n    }\r\n\r\n    static getNumber(str: string): number {\r\n        return parseInt((str || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    static getStyle(styleProp: string): CSS {\r\n        let i, style, diff, current, ref, el = document.createElement('div'), css;\r\n        document.body.appendChild(el);\r\n        css = new CSS(styleProp);\r\n        ref = new CSS(styleProp, el).css;\r\n        style = window.getComputedStyle(el, null);\r\n        el.className = styleProp;\r\n        current = new CSS(styleProp, el).css;\r\n        diff = Util.getNumber(style.getPropertyValue('border-width'));\r\n        for (i in current) {\r\n            if (!current.hasOwnProperty(i)) {\r\n                continue;\r\n            }\r\n            if (i === 'width' || i === 'height') {\r\n                if (Util.getNumber(current[i]) !== 0 && Util.getNumber(current[i]) + diff * 2 !== Util.getNumber(ref[i])) {\r\n                    css.add(i, current[i]);\r\n                }\r\n            } else if (current[i] !== ref[i]) {\r\n                css.add(i, current[i]);\r\n            }\r\n        }\r\n        document.body.removeChild(el);\r\n        return css;\r\n    }\r\n\r\n    static sizeOf(item: string | any, node?: Node): ClientRect {\r\n        let board;\r\n        let rect: ClientRect;\r\n        let addBoard: boolean;\r\n        if (!item) {\r\n            return undefined;\r\n        }\r\n        if (node) {\r\n            board = node.$owner.$view;\r\n            addBoard = false;\r\n        }\r\n\r\n        if (!board) {\r\n            addBoard = true;\r\n            board = Util.createShape({ tag: 'svg', id: 'root', width: 200, height: 200 });\r\n            document.body.appendChild(board);\r\n        }\r\n        if (board.tagName === 'svg') {\r\n            if (typeof item === 'string') {\r\n                item = Util.create({ tag: 'text', $font: true, value: item });\r\n                item.setAttribute('width', '5px');\r\n            }\r\n        } else if (typeof item === 'string') {\r\n            item = document.createTextNode(item);\r\n        }\r\n        board.appendChild(item);\r\n        rect = item.getBoundingClientRect();\r\n        board.removeChild(item);\r\n\r\n        if (addBoard) {\r\n            document.body.removeChild(board);\r\n        }\r\n        return rect;\r\n    }\r\n\r\n    static getColor(style: string, defaultColor?: string) {\r\n        if (style) {\r\n            if (style.toLowerCase() === 'create') {\r\n                return '#008000';\r\n            }\r\n            if (style.toLowerCase() === 'nac') {\r\n                return '#FE3E3E';\r\n            }\r\n            if (style.indexOf('#') === 0) {\r\n                return style;\r\n            }\r\n        }\r\n        if (defaultColor) {\r\n            return defaultColor;\r\n        }\r\n        return '#000';\r\n    }\r\n\r\n    public static utf8$to$b64(str: string): string {\r\n        return window.btoa(encodeURIComponent(str));\r\n    }\r\n\r\n    public static showSVG(control: DiagramElement) {\r\n        let svg = Util.create({\r\n            tag: 'svg',\r\n            style: { left: control.getPos().x, top: control.getPos().y, position: 'absolute' }\r\n        });\r\n        let child = control.getSVG();\r\n        if (child) {\r\n            svg.appendChild(child);\r\n        }\r\n        Util.setSize(svg, control.getSize().x, control.getSize().y);\r\n        document.body.appendChild(svg);\r\n    }\r\n\r\n    public static toJson(ref: JSON | Object): Object {\r\n        let result = {};\r\n        return Util.copy(result, ref, false, false);\r\n    }\r\n\r\n    public static initControl(parent: Control, control: Control, type: string, id: string, json: JSON | Object) {\r\n        if (typeof control.init === 'function') {\r\n            control.init(parent, type, id);\r\n        }\r\n        if (typeof control.load === 'function') {\r\n            control.load(json);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * copy One Json into another\r\n     * @function\r\n     * @param ref reference Json\r\n     * @param src source Json\r\n     * @param full all attributes include privet $\r\n     * @param replace set the original reference or copy it\r\n     * @returns ref\r\n     * @name copy\r\n     */\r\n    public static copy(ref: JSON | Object, src: JSON | Object, full: boolean, replace: boolean) {\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (replace) {\r\n                        ref[i] = src[i];\r\n                        continue;\r\n                    }\r\n                    if (!ref[i]) {\r\n                        if (src[i] instanceof Array) {\r\n                            ref[i] = [];\r\n                        } else {\r\n                            ref[i] = {};\r\n                        }\r\n                    }\r\n                    Util.copy(ref[i], src[i], full, false);\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref[i] = src[i];\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    public static xmlstringify(text: string): string {\r\n        text = text.replace('<', '&lt;');\r\n        text = text.replace('>', '&gt;');\r\n        return text;\r\n    }\r\n\r\n    public static toXML(ref: JSON | Object | any, src: JSON | Object | any, full: boolean, doc: Document): any {\r\n        let name;\r\n        if (!ref) {\r\n            name = src.constructor.name;\r\n            doc = document.implementation.createDocument(null, name, null);\r\n            ref = doc.childNodes[0];\r\n        }\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (!ref.getAttribute(i)) {\r\n                        if (src[i] instanceof Array) {\r\n                            for (let c in src[i]) {\r\n                                if (!src[i].hasOwnProperty(c)) {\r\n                                    continue;\r\n                                }\r\n                                name = src[i][c].constructor.name;\r\n                                let child = doc.createElement(name);\r\n                                ref.appendChild(child);\r\n                                Util.toXML(child, src[i][c], full, doc);\r\n                            }\r\n                        } else {\r\n                            name = src[i].constructor.name;\r\n                            let child = doc.createElement(name);\r\n                            ref.appendChild(child);\r\n                            Util.toXML(child, src[i], full, doc);\r\n                        }\r\n                    } else {\r\n                        Util.toXML(ref.getAttribute(i), src[i], full, doc);\r\n                    }\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref.setAttribute(i, src[i]);\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    static Range(min: Point, max: Point, x: number, y: number) {\r\n        max.x = Math.max(max.x, x);\r\n        max.y = Math.max(max.y, y);\r\n        min.x = Math.min(min.x, x);\r\n        min.y = Math.min(min.y, y);\r\n    }\r\n\r\n    public static getPosition(m: number, n: number, entity: DiagramElement, refCenter: Point) {\r\n        let t, p = [], list, distance = [], min = 999999999, position, i, step = 15;\r\n        let pos: Point = entity.getPos();\r\n        let size: Point = entity.getSize();\r\n        list = [Point.LEFT, Point.RIGHT];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = this.getLRPosition(m, n, entity, list[i]);\r\n            if (t.y >= pos.y && t.y <= (pos.y + size.y + 1)) {\r\n                t.y += (entity['$' + list[i]] * step);\r\n                if (t.y > (pos.y + size.y)) {\r\n                    // Alternative\r\n                    t = Util.getUDPosition(m, n, entity, Point.DOWN, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        list = [Point.UP, Point.DOWN];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = Util.getUDPosition(m, n, entity, list[i]);\r\n            if (t.x >= pos.x && t.x <= (pos.x + size.x + 1)) {\r\n                t.x += (entity['$' + list[i]] * step);\r\n                if (t.x > (pos.x + size.x)) {\r\n                    // Alternative\r\n                    t = this.getLRPosition(m, n, entity, Point.RIGHT, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        for (i = 0; i < p.length; i += 1) {\r\n            if (distance[i] < min) {\r\n                min = distance[i];\r\n                position = p[i];\r\n            }\r\n        }\r\n        return position;\r\n    }\r\n\r\n    public static getUDPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let x, y: number = pos.y;\r\n        if (p === Point.DOWN) {\r\n            y += size.y;\r\n        }\r\n        x = (y - n) / m;\r\n        if (step) {\r\n            x += e['$' + p] * step;\r\n            if (x < pos.x) {\r\n                x = pos.x;\r\n            } else if (x > (pos.x + size.x)) {\r\n                x = pos.x + size.x;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static getLRPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let y: number, x: number = pos.x;\r\n        if (p === Point.RIGHT) {\r\n            x += size.x;\r\n        }\r\n        y = m * x + n;\r\n        if (step) {\r\n            y += e['$' + p] * step;\r\n            if (y < pos.y) {\r\n                y = pos.y;\r\n            } else if (y > (pos.y + size.y)) {\r\n                y = pos.y + size.y;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static hasClass(element: Element, cls: string) {\r\n        let className = element.getAttribute('class');\r\n        return className.indexOf(cls) > 0;\r\n    }\r\n    public static addClass(element: Element, cls: string) {\r\n        if (!Util.hasClass(element, cls)) {\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className + ' ' + cls);\r\n        }\r\n    }\r\n    public static removeClass(element: Element, cls: string) {\r\n        if (Util.hasClass(element, cls)) {\r\n            let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className.replace(reg, ' ').trim());\r\n        }\r\n    }\r\n\r\n    public static startsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.startsWith) {\r\n            return s.indexOf(searchS) === 0;\r\n        }\r\n\r\n        return s.startsWith(searchS);\r\n    }\r\n\r\n    public static endsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.endsWith) {\r\n            let lastIndex = s.lastIndexOf(searchS);\r\n            return lastIndex !== -1 && lastIndex === (s.length - 1);\r\n        }\r\n\r\n        return s.endsWith(searchS);\r\n    }\r\n\r\n    public static includes(s: string, searchS: string): boolean {\r\n        if (!String.prototype.includes) {\r\n            let idx = s.indexOf(searchS);\r\n            return idx > -1;\r\n        }\r\n        if (s === null) {\r\n            return false;\r\n        }\r\n\r\n        return s.includes(searchS);\r\n    }\r\n\r\n    public static isParentOfChild(parent: Element, child: Element): boolean {\r\n\r\n        if (!parent || !child) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isIE()) {\r\n            let children = parent.childNodes;\r\n            // let found = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                let childItem = children[i];\r\n                if (childItem === child) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        return parent.contains(child);\r\n    }\r\n\r\n    public static createCustomEvent(type: string, params?: any): CustomEvent {\r\n        let evt: CustomEvent;\r\n\r\n        if (typeof window['CustomEvent'] !== 'function') {\r\n            params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n            evt = document.createEvent('CustomEvent');\r\n            evt.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\r\n            return evt;\r\n        }\r\n\r\n        evt = new CustomEvent(type);\r\n\r\n        return evt;\r\n    }\r\n\r\n    public static saveToLocalStorage(model: any): boolean {\r\n        if (!this.isAutoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isLocalStorageSupported()) {\r\n            if (model) {\r\n                if (model.$isLoading) {\r\n                    return false;\r\n                }\r\n                let jsonObj = Util.toJson(model);\r\n                let data = JSON.stringify(jsonObj, null, '\\t');\r\n                localStorage.setItem('diagram', data);\r\n            } else {\r\n                localStorage.removeItem('diagram');\r\n            }\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static getDiagramFromLocalStorage(): string {\r\n        if (Util.isLocalStorageSupported()) {\r\n            return localStorage.getItem('diagram');\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    public static isLocalStorageSupported(): boolean {\r\n        if (this.isEdge()) {\r\n            return false;\r\n        }\r\n        return localStorage !== undefined;\r\n    }\r\n}\r\n"],"sourceRoot":""}
Severity: Minor
Found in doc/diagram.js.map by fixme

FIXME found
Open

{"version":3,"sources":["webpack://DiagramJS/webpack/bootstrap","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Adapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Bridge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/BridgeElement.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/CSS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Control.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Data.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventBus.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/JSEPS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Palette.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertiesPanel.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertyBinder.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/RGBColor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/SVGConverter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/ScrumBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Toolbar.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/UML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/VirtualKeyBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/JavaAdapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/BaseElements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/ClassEditor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Graph.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Model.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregate.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Association.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Composition.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Generalisation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Implements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Attribute.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/AutoComplete.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/BR.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Button.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Class.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/ClazzProperty.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Dice.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Div.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Form.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/HTML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/InfoText.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Input.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Label.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Method.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Node.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/SO.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/StereoType.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Symbol.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Table.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/AddNode.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Drag.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/GraphListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/ImportFile.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/NewEdge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Select.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Zoom.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayout.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayoutMin.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/Random.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/main.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/util.ts"],"names":[],"mappings":"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","file":"diagram.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./main.ts\");\n","export abstract class Adapter {\r\n    public id: string = null;\r\n\r\n    abstract update(evt: Object): boolean;\r\n}\r\n","'use strict';\r\n\r\nimport * as controls from './elements/nodes';\r\nimport * as adapters from './adapters';\r\nimport Data from './Data';\r\nimport {Control} from './Control';\r\nimport {Adapter} from './Adapter';\r\nimport {Graph} from './elements';\r\nimport {Util} from './util';\r\nimport {Point} from './elements';\r\n\r\nexport class Bridge extends Control {\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public static version: string = '0.42.01.1601007-1739';\r\n    private controlFactory: Object = {};\r\n    private adapterFactory: Object = {};\r\n    private controls: Object = {};\r\n    private adapters: Object = {};\r\n    private items: Object = {};\r\n    private controlNo: number = 1;\r\n    private online: boolean = true;\r\n    private language: string = navigator.language.toUpperCase();\r\n    private toolBar: HTMLElement;\r\n\r\n    constructor(viewRoot?: HTMLElement) {\r\n        super();\r\n        let i;\r\n\r\n        if (viewRoot) {\r\n            this.$view = viewRoot;\r\n        }\r\n\r\n        let keys: string[] = Object.keys(adapters);\r\n        for (i = 0; i < keys.length; i++) {\r\n            let child = adapters[keys[i]];\r\n            if (child && child.id) {\r\n                this.adapterFactory[child.id.toLowerCase()] = child;\r\n            }\r\n        }\r\n\r\n        keys = Object.keys(controls);\r\n        for (i = 0; i < keys.length; i++) {\r\n            this.addControl(controls[keys[i]]);\r\n        }\r\n        this.addControl(Graph);\r\n\r\n        let that = this;\r\n        window.addEventListener('load', function () {\r\n            let updateOnlineStatus = function updateOnlineStatus() {\r\n                that.setOnline(navigator.onLine);\r\n            };\r\n            window.addEventListener('online', updateOnlineStatus);\r\n            window.addEventListener('offline', updateOnlineStatus);\r\n        });\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public setOnline(value: boolean) {\r\n        this.online = value;\r\n        if (this.toolBar.children[0]) {\r\n            this.toolBar.children[0].className = value ? 'online' : 'offline';\r\n        }\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addToolbar(): boolean {\r\n        if (this.toolBar) {\r\n            return false;\r\n        }\r\n        this.toolBar = document.createElement('div');\r\n        this.toolBar.className = 'onlineStatus';\r\n        let child = document.createElement('div');\r\n        child.className = 'online';\r\n        this.toolBar.appendChild(child);\r\n        child = document.createElement('div');\r\n        child.className = 'lang';\r\n        child.innerHTML = this.language;\r\n        this.toolBar.appendChild(child);\r\n\r\n        let body: HTMLElement = document.getElementsByTagName('body')[0];\r\n        body.insertBefore(this.toolBar, body.firstChild);\r\n        // Refresh Online Status\r\n        this.setOnline(this.online);\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addListener = function (listener: any) {\r\n        this.listener.push(listener);\r\n    };\r\n\r\n    public addControl(control: any) {\r\n        if (control && control.name) {\r\n            this.controlFactory[control.name.toLowerCase()] = control;\r\n        }\r\n    }\r\n\r\n    public getId(): string {\r\n        return 'control' + (this.controlNo++);\r\n    }\r\n\r\n    public adapterUpdate(message: string) {\r\n        let keys: string[] = Object.keys(this.adapters);\r\n        if (keys.length > 0) {\r\n            let i;\r\n            for (i = 0; i < keys.length; i++) {\r\n                let adapterList = this.adapters[keys[i]];\r\n                if (adapterList instanceof Adapter) {\r\n                    adapterList.update(message);\r\n                } else {\r\n                    for (let adapter of adapterList) {\r\n                        adapter.update(message);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        let config = {}, className: string, id: string;\r\n        if (typeof(json) === 'string') {\r\n            // Only a String\r\n            config['id'] = '' + json;\r\n            let item = document.getElementById(config['id']);\r\n            let className: string;\r\n            if (item) {\r\n                className = item.getAttribute('class');\r\n                if (!className) {\r\n                    className = item.getAttribute('classname') || '';\r\n                }\r\n                // Found Element and now config Data element\r\n                if (item.getAttribute('property')) {\r\n                    if (this.hasItem(item.getAttribute('property'))) {\r\n                        let data = this.getItem(item.getAttribute('property'));\r\n                        for (let key in data.prop) {\r\n                            if (item.getAttribute(key)) {\r\n                                data.setValue(key, item.getAttribute(key));\r\n                            }\r\n                        }\r\n                        if (item.getAttribute('property')) {\r\n                            // TODO: FIXME!!!\r\n                            // data.property = item.getAttribute(\"property\");\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                className = '' + json;\r\n            }\r\n            className = className.toLowerCase();\r\n            config['className'] = className;\r\n        } else {\r\n            config = <JSON>json;\r\n        }\r\n        // Config validate\r\n        if (!config['id']) {\r\n            config['id'] = this.getId();\r\n        }\r\n        // Backup for Old Graph\r\n        if (!config['className'] && (config['type'] === 'clazzdiagram' || config['type'] === 'objectdiagram')) {\r\n            config['className'] = 'graph';\r\n        }\r\n\r\n        className = config['className'] || config['class'];\r\n        className = className.toLocaleLowerCase();\r\n        id = config['id'];\r\n\r\n        // Check For Control or Data\r\n        if ((config['prop'] || config['upd'] || config['rem']) && this.controls[id] === null) {\r\n            // Its Data\r\n            let newData = !this.hasItem(config['id']);\r\n            let item: Data = this.getItem(config['id']);\r\n            // TODO: FIXME!!!\r\n            // if (id && className && !item.property) {\r\n            //      item.property = className;\r\n            // }\r\n            if (newData) {\r\n                for (let i in this.controls) {\r\n                    if (this.controls.hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    this.controls[i].addItem(this, item);\r\n                }\r\n            }\r\n            // Add all Values to item\r\n            item.addProperties(config);\r\n            // Bridge.addProperties(config['prop'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return item;\r\n        }\r\n\r\n        let control;\r\n        if (this.controls[id]) {\r\n            control = this.controls[id];\r\n            control.initControl(json);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return control;\r\n        }\r\n\r\n        if (typeof(this.controlFactory[className]) === 'object' || typeof(this.controlFactory[className]) === 'function') {\r\n            let obj = this.controlFactory[className];\r\n            control = new obj(json);\r\n            Util.initControl(owner || this, control, config['property'], id, json);\r\n\r\n            if (control.id) {\r\n                this.controls[control.id] = control;\r\n            } else {\r\n                this.controls[id] = control;\r\n            }\r\n\r\n            // create DataObject and register this control as listener to it\r\n            // let obj = {id:id};\r\n            // let data: Data = this.load(obj);\r\n            // data.addListener(this);\r\n\r\n            // Try to Show\r\n            if (typeof control.getSVG === 'function' && typeof control.getSize === 'function') {\r\n                let size: Point = control.getSize();\r\n\r\n                let svg = Util.createShape({\r\n                    tag: 'svg',\r\n                    id: 'root',\r\n                    width: size.x,\r\n                    height: size.y\r\n                });\r\n\r\n                let view = control.getSVG();\r\n                svg.appendChild(view);\r\n                document.getElementsByTagName('body')[0].appendChild(svg);\r\n            }\r\n            return control;\r\n        }\r\n        return null;\r\n        // bridge.load('{class:table, columns:[{id:'firstname'}, {id:'lastname'}]}');\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n\r\n        if (this.items[id] !== undefined) {\r\n            return true;\r\n        }\r\n        id = id.split('.')[0];\r\n        return (this.items[id] !== undefined);\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return this.items;\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        let item = this.items[id];\r\n        if (!item) {\r\n            id = id.split('.')[0];\r\n            item = this.items[id];\r\n            if (!item) {\r\n                item = new Data();\r\n                item.id = id;\r\n                this.items[id] = item;\r\n            }\r\n        }\r\n        return item;\r\n    }\r\n\r\n    /**\r\n     * Method for executing user input -> Event\r\n     * @param object\r\n     * @param attribute\r\n     * @param oldValue\r\n     * @param newValue\r\n     * @returns {boolean}\r\n     */\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        alert('Bridge.setValue: oldVal:' + oldValue + ', newVal: ' +  + newValue + ', attribute: ' + attribute + ', object: ' + JSON.stringify(object));\r\n        let obj: Data;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n\r\n        } else if (object instanceof Data) {\r\n            obj = object;\r\n            id = object.id;\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = <Data>object;\r\n            id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return false;\r\n        }\r\n        if (obj) {\r\n            // Execute Update to Data\r\n            obj.setValue(attribute, newValue);\r\n            // Could be done here, but currently is done at this.execueChange..:\r\n            // obj[attribute] = value;\r\n        }\r\n\r\n        /*let tmp = {'id': id};\r\n        if (typeof(newValue) !== 'undefined' && newValue !== null) {\r\n            let upd = {};\r\n            upd[attribute] = newValue;\r\n            tmp['upd'] = upd;\r\n        }\r\n        if (typeof(oldValue) !== 'undefined' && oldValue !== null) {\r\n            let rem = {};\r\n            rem[attribute] = oldValue;\r\n            tmp['rem'] = rem;\r\n        }*/\r\n        // this.load(tmp);\r\n        return true;\r\n    }\r\n\r\n    public getValue(object: Object, attribute: string): any {\r\n        let obj: Object;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = object;\r\n            // id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return;\r\n        }\r\n        if (obj) {\r\n            if (obj.hasOwnProperty(attribute)) {\r\n                return obj[attribute];\r\n            } else if (obj instanceof Data) {\r\n                return (<Data>obj).getValue(attribute);\r\n            } else {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    public getNumber(object: Object, attribute: string, defaultValue: number = 0): number {\r\n        let res = <number>this.getValue(object, attribute);\r\n        if (typeof res === 'number') {\r\n            return res;\r\n        } else if (typeof res === 'string') {\r\n            // check whether res is a number\r\n            let value = Number(res);\r\n            if (value || value === 0) {\r\n                return value;\r\n            }\r\n        }\r\n        return defaultValue;\r\n    }\r\n\r\n    getControl(controlId: string) {\r\n        return this.controls[controlId];\r\n    }\r\n\r\n    public registerListener(eventType: string, control: Control, callBackfunction: string): Control {\r\n        if (typeof control === 'string') {\r\n            control = this.getControl(<string>control);\r\n        }\r\n        if (!control) {\r\n            return null;\r\n        }\r\n        if (eventType) {\r\n            eventType = eventType.toLowerCase();\r\n        }\r\n        control.registerListenerOnHTMLObject(eventType);\r\n        if (callBackfunction) {\r\n            let adapter: DelegateAdapter = new DelegateAdapter();\r\n            adapter.callBackfunction = callBackfunction;\r\n            adapter.id = control.getId();\r\n            this.addAdapter(adapter, eventType);\r\n        }\r\n        return control;\r\n    }\r\n\r\n    public addAdapter(adapter: Adapter | string, eventType: string): Adapter {\r\n        if (!eventType) {\r\n            eventType = '';\r\n        }\r\n        let result: Adapter;\r\n        if (adapter instanceof String) {\r\n            let obj = this.adapterFactory[adapter.toLowerCase()];\r\n            result = new obj();\r\n        } else {\r\n            result = <Adapter>adapter;\r\n        }\r\n        let handlers = this.adapters[eventType];\r\n\r\n        if (handlers === null || handlers === undefined) {\r\n            handlers = [];\r\n            this.adapters[eventType] = handlers;\r\n        }\r\n        handlers.push(result);\r\n        return result;\r\n    }\r\n\r\n    public fireEvent(evt: Event): void {\r\n        let handlers = this.adapters[''];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n        handlers = this.adapters[evt['eventType']];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport class DelegateAdapter extends Adapter {\r\n    adapter: Adapter;\r\n    callBackfunction: string;\r\n\r\n    update(evt: Event): boolean {\r\n        if (this.adapter) {\r\n            this.adapter.update(evt);\r\n            return true;\r\n        } else if (this.callBackfunction) {\r\n            return this.executeFunction(this.callBackfunction, evt);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public setAdapter(adapter: Adapter): boolean {\r\n        this.adapter = adapter;\r\n        return true;\r\n    }\r\n\r\n    private executeFunction(strValue: string, evt: Event): boolean {\r\n        let scope = window;\r\n        let scopeSplit = strValue.split('.');\r\n        for (let i = 0; i < scopeSplit.length - 1; i++) {\r\n            scope = scope[scopeSplit[i]];\r\n            if (scope === undefined) {\r\n                return false;\r\n            }\r\n        }\r\n        let fn: any = scope[scopeSplit[scopeSplit.length - 1]];\r\n        if (typeof fn === 'function') {\r\n            fn.call(scope);\r\n            return true;\r\n        } else {\r\n            window['callBack1'].update(evt);\r\n\r\n        }\r\n        return false;\r\n    }\r\n}\r\n","'use strict';\r\nimport Data from './Data';\r\n\r\nexport default class BridgeElement {\r\n    private static elementSet: BridgeElement[] = [];\r\n    public model: Data;\r\n    public id: string;\r\n    public gui: HTMLElement;\r\n\r\n    constructor(model: Data) {\r\n        this.model = model;\r\n        this.id = model.id;\r\n        BridgeElement.elementSet.push(this);\r\n    }\r\n}\r\n","import {Util} from './util';\r\n\r\n// \t\t\t\t######################################################### CSS #########################################################\r\nexport class CSS {\r\n    public css: Object;\r\n    private name: string;\r\n\r\n    constructor(name: string, item?: any) {\r\n        let i, value, border: string, prop, el;\r\n        this.name = name;\r\n        this.css = {};\r\n        if (!item) {\r\n            return;\r\n        }\r\n\r\n        el = window.getComputedStyle(item, null);\r\n        border = el.getPropertyValue('border');\r\n        for (i in el) {\r\n            prop = i;\r\n            value = el.getPropertyValue(prop);\r\n            if (value && value !== '') {\r\n                // optimize CSS\r\n                if (border) {\r\n                    if (prop === 'border-bottom' || prop === 'border-right' || prop === 'border-top' || prop === 'border-left') {\r\n                        if (value !== border) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-color' || prop === 'border-bottom-color' || prop === 'border-right-color' || prop === 'border-top-color' || prop === 'border-left-color') {\r\n                        if (border.substring(border.length - value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-width') {\r\n                        if (border.substring(0, value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else {\r\n                        this.css[prop] = value;\r\n                    }\r\n                } else {\r\n                    this.css[prop] = value;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public static getStdDef() {\r\n        let child, def = Util.create({tag: 'defs'});\r\n\r\n        child = Util.create({tag: 'filter', id: 'drop-shadow'});\r\n        child.appendChild(Util.create({tag: 'feGaussianBlur', 'in': 'SourceAlpha', result: 'blur-out', stdDeviation: 2}));\r\n        child.appendChild(Util.create({tag: 'feOffset', 'in': 'blur-out', dx: 2, dy: 2}));\r\n        child.appendChild(Util.create({tag: 'feBlend', 'in': 'SourceGraphic', mode: 'normal'}));\r\n        def.appendChild(child);\r\n        child = Util.create({tag: 'linearGradient', id: 'reflect', x1: 0, x2: 0, y1: '50%', y2: 0, spreadMethod: 'reflect'});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#aaa', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#eee', offset: '100%'}));\r\n        def.appendChild(child);\r\n\r\n        child = Util.create({tag: 'linearGradient', id: 'classelement', x1: 0, x2: '100%', y1: '100%', y2: 0});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#fff', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#d3d3d3', offset: 1}));\r\n        def.appendChild(child);\r\n\r\n        return def;\r\n    }\r\n\r\n    public static getSubstring(str: string, search: string, startChar: string, endChar: string, splitter: string): any {\r\n        let pos, end, count = 0, array = [];\r\n        pos = str.indexOf(search);\r\n        if (pos > 0) {\r\n            end = str.indexOf(startChar, pos);\r\n            pos = end + 1;\r\n            if (end > 0) {\r\n                while (end < str.length) {\r\n                    if (str.charAt(end) === startChar) {\r\n                        count += 1;\r\n                    }\r\n                    if (str.charAt(end) === endChar) {\r\n                        count -= 1;\r\n                        if (count === 0) {\r\n                            if (splitter && pos !== end) {\r\n                                array.push(str.substring(pos, end).trim());\r\n                            }\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (str.charAt(end) === splitter && count === 1) {\r\n                        array.push(str.substring(pos, end).trim());\r\n                        pos = end + 1;\r\n                    }\r\n\r\n                    end += 1;\r\n                }\r\n                if (splitter) {\r\n                    return array;\r\n                }\r\n                return str.substring(pos, end);\r\n            }\r\n            return str.substring(pos);\r\n        }\r\n        return '';\r\n    }\r\n\r\n    public static addStyle(board: SVGElement, styleName: any) {\r\n        let defs, style: any, css;\r\n        if (styleName.baseVal || styleName.baseVal === '') {\r\n            styleName = styleName.baseVal;\r\n        }\r\n        if (!styleName) {\r\n            return;\r\n        }\r\n        defs = CSS.getDefs(board);\r\n        if (defs.getElementsByTagName('style').length > 0) {\r\n            style = defs.getElementsByTagName('style')[0];\r\n        } else {\r\n            style = Util.create({tag: 'style'});\r\n            style.item = {};\r\n            defs.appendChild(style);\r\n        }\r\n        if (!style.item[styleName]) {\r\n            css = Util.getStyle(styleName);\r\n            style.item[styleName] = css;\r\n            style.innerHTML = style.innerHTML + '\\n.' + styleName + css.getSVGString(board);\r\n        }\r\n    }\r\n\r\n    public static addStyles(board: SVGElement, item: any) {\r\n        if (!item) {\r\n            return;\r\n        }\r\n        let items, i, className: any = item.className;\r\n\r\n        if (className) {\r\n            if (className.baseVal || className.baseVal === '') {\r\n                className = className.baseVal;\r\n            }\r\n        }\r\n        if (className) {\r\n            items = className.split(' ');\r\n            for (i = 0; i < items.length; i += 1) {\r\n                CSS.addStyle(board, items[i].trim());\r\n            }\r\n        }\r\n        for (i = 0; i < item.childNodes.length; i += 1) {\r\n            this.addStyles(board, item.childNodes[i]);\r\n        }\r\n    }\r\n\r\n    public static getDefs(board: SVGElement) {\r\n        let defs;\r\n        if (board.getElementsByTagName('defs').length < 1) {\r\n            defs = Util.create({tag: 'defs'});\r\n            board.insertBefore(defs, board.childNodes[0]);\r\n        } else {\r\n            defs = board.getElementsByTagName('defs')[0];\r\n        }\r\n        return defs;\r\n    }\r\n\r\n    public add(key: string, value: string) {\r\n        this.css[key] = value;\r\n    }\r\n\r\n    public get(key: string): any {\r\n        let i;\r\n        for (i in this.css) {\r\n            if (i === key) {\r\n                return this.css[key];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public getNumber(key: string) {\r\n        return parseInt((this.get(key) || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    public getSVGString(board: SVGElement) {\r\n        let str, pos, style, defs, value, filter, z;\r\n        str = '{';\r\n        for (style in this.css) {\r\n            if (!this.css.hasOwnProperty(style)) {\r\n                continue;\r\n            }\r\n            if (style === 'border') {\r\n                pos = this.css[style].indexOf(' ');\r\n                str = str + 'stroke-width: ' + this.css[style].substring(0, pos) + ';';\r\n                pos = this.css[style].indexOf(' ', pos + 1);\r\n                str = str + 'stroke:' + this.css[style].substring(pos) + ';';\r\n            } else if (style === 'background-color') {\r\n                str = str + 'fill: ' + this.css[style] + ';';\r\n            } else if (style === 'background') {\r\n                value = CSS.getSubstring(this.css[style], 'linear-gradient', '(', ')', ',');\r\n                if (value.length > 0) {\r\n                    defs = CSS.getDefs(board);\r\n                    if (value[0] === '45deg') {\r\n                        pos = 1;\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '100%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                    } else {\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '0%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                        pos = 0;\r\n                    }\r\n                    defs.appendChild(filter);\r\n                    while (pos < value.length) {\r\n                        value[pos] = value[pos].trim();\r\n                        z = value[pos].lastIndexOf(' ');\r\n                        filter.appendChild(Util.create({\r\n                            tag: 'stop',\r\n                            'offset': value[pos].substring(z + 1),\r\n                            style: {'stop-color': value[pos].substring(0, z)}\r\n                        }));\r\n                        pos += 1;\r\n                    }\r\n                    str = str + 'fill: url(#' + this.name + ');';\r\n                    continue;\r\n                }\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n                // box-shadow: inset 0 3px 4px #888;\r\n// \t\t\t\t<defs>\r\n// \t\t\t\t\t<filter id='drop-shadow'>\r\n// \t\t\t\t\t\t<feGaussianBlur in='SourceAlpha' result='blur-out' stdDeviation='2'></feGaussianBlur>\r\n// \t\t\t\t\t\t<feOffset in='blur-out' dx='2' dy='2'></feOffset>\r\n// \t\t\t\t\t\t<feBlend in='SourceGraphic' mode='normal'></feBlend>\r\n// \t\t\t\t\t</filter>\r\n// \t\t\t\t</defs>\r\n            } else {\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n            }\r\n        }\r\n        str = str + '}';\r\n        return str;\r\n    }\r\n}\r\n","import {Bridge} from './Bridge';\r\nimport Data from './Data';\r\nimport EventListener from './EventListener';\r\n\r\nexport abstract class Control {\r\n    public $owner: Control;\r\n    /**\r\n     *\r\n     */\r\n    public property: string;\r\n    public id: string;\r\n    public $view: Element;\r\n    public $viewData: Data = null;\r\n\r\n    protected $model: Data;\r\n    protected $viewListener: EventListenerOrEventListenerObject;\r\n\r\n    /**\r\n     * The properties, we want to listen to\r\n     */\r\n    // static defaultProperties: string[] = [];\r\n\r\n    // public getProperties(): string[] {\r\n    //     return this.properties;\r\n    // }\r\n\r\n    constructor() {\r\n        // e.g. this.properties.push(\"key\");\r\n        // this.properties.push(\"property\");\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data: Data = new Data();\r\n        if (oldData) {\r\n            oldData.removeListener(this);\r\n            const keys: string[] = oldData.getKeys();\r\n            for (let i = 0; i < keys.length; i++) {\r\n                let attr = keys[i];\r\n                if (this.$view) {\r\n                    if (this.$view[attr] === null) {\r\n                        continue;\r\n                    }\r\n                    data.setValue(attr, this.$view[attr]);\r\n                } else {\r\n                    data.setValue(attr, null);\r\n                }\r\n            }\r\n        }\r\n        data.addListener(this);\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     *  Set the new HTMLElement and attach listener to it.\r\n     *  Also remove Listeners from old one and return the old one, if present.\r\n     * @param element\r\n     * @returns The previous Element\r\n     */\r\n    public setView(element: Element): Element {\r\n        let oldElement: Element = null;\r\n        if (this.$view) {\r\n            oldElement = this.$view;\r\n            if (this.$viewListener) {\r\n                oldElement.removeEventListener('change', this.$viewListener);\r\n            }\r\n        }\r\n        this.$view = element;\r\n\r\n        if (this.$viewListener) {\r\n            element.addEventListener('change', this.$viewListener);\r\n        }\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n        return element;\r\n    }\r\n\r\n    public init(owner: Control, property ?: string, id ?: string): Control {\r\n        if (!this.$owner) {\r\n            this.$owner = owner;\r\n        }\r\n        if (!this.id) {\r\n            this.id = id;\r\n        }\r\n        if (!this.property) {\r\n            this.property = this.generateID(property, id);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public createEventListener(): EventListener {\r\n        return new EventListener();\r\n    }\r\n\r\n    public getRoot(): Control {\r\n        if (this.$owner) {\r\n            return this.$owner.getRoot();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return null;\r\n    }\r\n\r\n    public initControl(data: any): void {\r\n        if (this.$view === null || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (data.hasOwnProperty('prop')) {\r\n            for (let key in data.prop) {\r\n                let oldValue = this.$viewData.getValue(key);\r\n                if (this.$view) {\r\n                    this.updateElement(key, oldValue, data.prop[key]);\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        let hasRem = data.hasOwnProperty('rem');\r\n        let removed: any[] = [];\r\n        if (data.hasOwnProperty('upd')) {\r\n            for (let key in data.upd) {\r\n                let oldValue;\r\n                let newValue = data.upd[key];\r\n                let entity;\r\n                const temp = false;\r\n                if (temp) {\r\n//                if (newValue == this.getViewData().getValue(key)) {\r\n                    // new Value assertEquals old value, so we don't need to change anything..\r\n                    // delete data.rem[key];\r\n                    if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                        removed.push(data.rem[key]);\r\n                    }\r\n                    continue;\r\n                }\r\n                if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                    // if there's a rem, the oldValue from rem will be used and expected to be right..\r\n                    oldValue = data.rem[key];\r\n                    if (this.$model && this.$model.getValue(key) === oldValue) {\r\n                        entity = this.$model;\r\n//                    } else if (oldValue == this.getViewData().getValue(key)) {\r\n//                        $graphModel = this.getViewData();\r\n                    }\r\n                    delete data.rem[key];\r\n\r\n                    if (entity === null) {\r\n                        continue;\r\n                    }\r\n                }\r\n                if (entity) {\r\n                    if (!hasRem) {\r\n                        if (entity === this.$model) {\r\n                            oldValue = this.$model.getValue(key);\r\n                        } else {\r\n//                           oldValue = this.getViewData().getValue(key);\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (this.$model) {\r\n                        // try to get the oldValue directly from the $graphModel...\r\n                        oldValue = this.$model.getValue(key);\r\n                        entity = this.$model;\r\n                    }\r\n                    if (oldValue === null) {\r\n                        // if there was no data in the entity, we try to get oldValue from the $view\r\n//                        oldValue = this.getViewData().getValue(key);\r\n//                        entity = this.getViewData();\r\n                    }\r\n                }\r\n\r\n                //  || oldValue !== this.$viewData.getValue(key)\r\n                if (newValue === oldValue) {\r\n                    // no match, so update should be wrong...\r\n                    continue;\r\n                }\r\n                const viewDataOldValue = this.$viewData.getValue(key);\r\n                if (entity === this.$viewData) {\r\n\r\n                    // this.getViewData().setValue(key, newValue);\r\n                    if (this.$view) {\r\n                        this.updateElement(key, viewDataOldValue, newValue);\r\n                    }\r\n                } else {\r\n                    this.updateElement(key, viewDataOldValue, newValue);\r\n                }\r\n                this.getRoot().setValue(entity, key, newValue, oldValue);\r\n            }\r\n            // this.saveViewInData();\r\n        }\r\n        if (hasRem) {\r\n            for (let key in data.rem) {\r\n                if (removed.hasOwnProperty(key)) {\r\n                    continue;\r\n                }\r\n                let oldValue;\r\n//                    this.getViewData().getValue(key);\r\n//                if (oldValue != data.rem[key] || data.upd !== undefined && (data.upd[key] == oldValue || this.getViewData().getValue(key) == data.upd[key])) {\r\n                // if rem is invalid, or if the change is already applied, don't do anything..\r\n                //                  continue;\r\n                //            }\r\n                // delete this.$viewData.getValue(key);\r\n                // this.saveViewInData();\r\n                this.updateElement(key, null, null);\r\n                // this.$view.removeAttribute(key);\r\n                if (this.$model) {\r\n//                    this.getRoot().setValue(this.$graphModel, key, this.getViewData().getValue(key), oldValue);\r\n                }\r\n            }\r\n        }\r\n        if (this.property) {\r\n            // Add listener to Input field:\r\n            this.$view['onchange'] = ((ev: Event) => {\r\n                    this.controlChanged(ev);\r\n                }\r\n            );\r\n        }\r\n//        this.saveViewInData();\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        return null;\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n        return false;\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return new Object();\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue ?: Object): boolean {\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Is called when a object, that the Control is listening to, changes its value.\r\n     * @param entity\r\n     * @param property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        if (oldValue === newValue || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (oldValue === this.$viewData.getValue(property)) {\r\n            return;\r\n        }\r\n        // Set NewData to ViewData and Fire PC\r\n        this.$viewData.setValue(property, newValue);\r\n\r\n//\r\n//\r\n//         // if (entity == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.entity) {\r\n//                 alert(\"entity = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.entity.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.entity, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the entity is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"entity = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n// >>>>>>> addOldFunctions\r\n        if (this.$viewData) {\r\n            this.$viewData.setValue(property, newValue);\r\n        }\r\n        if (this.$model) {\r\n            this.$model.setValue(property, newValue);\r\n        }\r\n        this.updateElement(property, oldValue, newValue);\r\n    }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            // Do Nothing\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  Update GUI Element\r\n     * @param {string} property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        if (this.$view && this.$view.hasAttribute(property)) {\r\n            this.$view.setAttribute(property, newValue);\r\n        }\r\n    }\r\n\r\n//        if (oldValue == newValue) {\r\n//            return;\r\n//        }\r\n//        if (oldValue == this.$viewData.getValue(property)) {\r\n//            return;\r\n//        }\r\n//        // Set NewData to ViewData and Fire PC\r\n//        this.$viewData.setValue(property, newValue);\r\n//\r\n//\r\n//\r\n//         // if ($graphModel == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.$graphModel) {\r\n//                 alert(\"$graphModel = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.$graphModel.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.$graphModel, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the $graphModel is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"$graphModel = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n\r\n    public getId(): string {\r\n        return this.id;\r\n    }\r\n\r\n    public load(json: JSON | Object, owner ?: Control): any {\r\n        // Do Nothing\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.property || entity.hasProperty(this.property)) {\r\n                entity.addListener(this, this.property);\r\n                this.$model = entity;\r\n            }\r\n        }\r\n    }\r\n\r\n    public appendChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.appendChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].appendChild(child.$view);\r\n        }\r\n    }\r\n\r\n    public removeChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.removeChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].removeChild(child.$view);\r\n        }\r\n    }\r\n\r\n    /*\r\n     Property looks like: 't1.talk'\r\n     */\r\n    public setProperty(property: string): void {\r\n        if (!this.property) {\r\n            return;\r\n        }\r\n        let objId = property.split('.')[0];\r\n        let object = null;\r\n        if (this.$owner.hasItem(objId)) {\r\n            object = this.$owner.getItem(objId);\r\n        }\r\n\r\n        // remove listener on old object\r\n        if (this.$model) {\r\n            // this.$graphModel.removeListener(this);\r\n            this.$model.removeListener(this, this.lastProperty);\r\n        }\r\n        this.property = property;\r\n\r\n        // add listener to object..\r\n        if (object) {\r\n            object.addListener(this, this.lastProperty);\r\n            this.$model = object;\r\n            this.updateElement(this.lastProperty, this.$viewData.getValue(this.lastProperty), object.prop[this.lastProperty]);\r\n        }\r\n    }\r\n\r\n    public registerListenerOnHTMLObject(eventType: string): boolean {\r\n        return this.registerEventListener(eventType, <HTMLElement>this.$view);\r\n    }\r\n\r\n    // Normal Event HTML-Event\r\n    // Eventtype:string,\r\n    // id:string of Control\r\n    public fireEvent(evt: Event): void {\r\n        // Do Nothing\r\n    }\r\n\r\n    public isClosed(): boolean {\r\n        return this['closed'];\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        if (this.isClosed()) {\r\n            return this.$owner.getShowed();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * the id of the Data object, that contains the properties of the view\r\n     * @returns {string}\r\n     */\r\n    protected getControlDataID() {\r\n        return this.id + '_data';\r\n    }\r\n\r\n    protected generateID(property ?: string, id ?: string): string {\r\n        if (property) {\r\n            return property;\r\n        }\r\n        if (id) {\r\n            // will generate a data Object suitable for the Control..\r\n            // must be overridden, if the changeEvent shouldn't listen on value...\r\n//            return id + '.' + this.getStandardProperty();//+ \"_data\"\r\n            return id + '.' + '_data';\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected updateViewData() {\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n        const keys: string[] = this.$viewData.getKeys();\r\n        for (let i = 0; i < keys.length; i++) {\r\n            let attr = keys[i];\r\n            if (this.$view[attr] === null) {\r\n                continue;\r\n            }\r\n            this.$viewData.setValue(attr, this.$view[attr]);\r\n        }\r\n    }\r\n\r\n    protected registerEventListener(eventType: string, htmlElement: HTMLElement): boolean {\r\n        if (!htmlElement) {\r\n            return false;\r\n        }\r\n        if (htmlElement instanceof HTMLElement === false) {\r\n            return false;\r\n        }\r\n        let control = this;\r\n        let listener = (t: any) => {\r\n            t.eventType = eventType;\r\n            t.id = control.id;\r\n            control.$owner.fireEvent(t);\r\n        };\r\n        htmlElement.addEventListener(eventType, listener);\r\n        return true;\r\n    }\r\n\r\n    get lastProperty(): string {\r\n        if (!this.property) {\r\n            return '';\r\n        }\r\n        let arr: string[] = this.property.split('.');\r\n        return arr[arr.length - 1];\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\n\r\nexport default class Data {\r\n    public prop = {};\r\n    id: string;\r\n    // $listener: Control[] = [];\r\n    $listener: Object = {};\r\n\r\n    private static nullCheck(property: string): string {\r\n        if (property === undefined || property === null) {\r\n            property = '';\r\n        }\r\n        return property;\r\n    }\r\n    public getKeys(): string[] {\r\n        return Object.keys(this.prop);\r\n    }\r\n\r\n    public addProperties(values: Object) {\r\n        if (!values) {\r\n            return;\r\n        }\r\n        if (values['prop']) {\r\n            let prop = values['prop'];\r\n            for (let property in prop) {\r\n                if (prop.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (prop[property] !== null && '' !== prop[property]) {\r\n                    this.setValue(property, prop[property]);\r\n                }\r\n            }\r\n        } else {\r\n            let upd = values['upd'] || {};\r\n            let rem = values['rem'] || {};\r\n\r\n            for (let property in upd) {\r\n                if (upd.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (rem.hasOwnProperty(property) === false) {\r\n                    this.setValue(property, upd[property]);\r\n                } else {\r\n                    // if we have a rem, we wan't to check, if its a valid change (teh old value is the value in rem)\r\n                    if (this.getValue(property) === rem[property]) {\r\n                        this.setValue(property, upd[property]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getValue(attribute: string) {\r\n        return this.prop[attribute];\r\n    }\r\n\r\n    public setValue(attribute: string, newValue: any): void {\r\n        let oldValue = this.prop[attribute];\r\n        if (oldValue === newValue && newValue !== null) {\r\n            return;\r\n        }\r\n        this.prop[attribute] = newValue;\r\n        this.firePropertyChange(attribute, oldValue, newValue);\r\n    }\r\n\r\n    public addTo(attribute: string, newValue: any): boolean {\r\n        let add: boolean;\r\n        if (this.prop[attribute]) {\r\n            if (this.prop[attribute].contains(newValue) === false) {\r\n                add = true;\r\n            }\r\n        } else {\r\n            this.prop[attribute] = [];\r\n            add = true;\r\n        }\r\n        if (add) {\r\n            this.prop[attribute].push(newValue);\r\n            this.firePropertyChange(attribute, null, newValue);\r\n        }\r\n        return add;\r\n    }\r\n\r\n    public removeFrom(attribute: string, newValue: any): boolean {\r\n        if (!this.prop[attribute]) {\r\n            return true;\r\n        }\r\n        let pos: number = this.prop[attribute].indexOf(newValue);\r\n        if (pos < 0) {\r\n            return true;\r\n        }\r\n        this.prop[attribute].splice(pos, 1);\r\n        this.firePropertyChange(attribute, newValue, null);\r\n        return true;\r\n    }\r\n\r\n    public addListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(property);\r\n        if (!listeners) {\r\n            listeners = [];\r\n            this.$listener[Data.nullCheck(property)] = listeners;\r\n        }\r\n        listeners.push(control);\r\n    }\r\n\r\n    public removeListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners = this.getListeners(property);\r\n        if (listeners === null) {\r\n            return;\r\n        }\r\n        let pos = listeners.indexOf(control);\r\n        if (pos >= 0) {\r\n            listeners.splice(pos, 1);\r\n        }\r\n        if (listeners.length === 0 && Data.nullCheck(property) !== '') {\r\n            // only remove, if it's not the default listener list...\r\n            delete this.$listener[property];\r\n        }\r\n    }\r\n\r\n    public hasProperty(property: string): boolean {\r\n        return this.prop.hasOwnProperty(property);\r\n    }\r\n\r\n    public addFrom(attribute: string, oldData: Data): void {\r\n        if (oldData) {\r\n            this.setValue(attribute, oldData.getValue(attribute));\r\n        } else {\r\n            this.setValue(attribute, null);\r\n        }\r\n    }\r\n\r\n    public removeKey(key: string): any {\r\n        if (this.hasProperty(key)) {\r\n            const oldValue = this.prop[key];\r\n            delete this.prop[key];\r\n            return oldValue;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected getListeners(property: string): PropertyChangeSupport[] {\r\n        property = Data.nullCheck(property);\r\n        return this.$listener[property];\r\n    }\r\n\r\n    protected firePropertyChange(attribute: string, oldValue: Object, newValue: Object) {\r\n        attribute = Data.nullCheck(attribute);\r\n        // at first fire for the given property\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(attribute);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n        // now we need to fire the Listeners that wan't to listen to everything\r\n        listeners = this.getListeners(null);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport interface EventHandler {\r\n    canHandle(): boolean;\r\n    handle(event: Event, element: DiagramElement): boolean;\r\n    setActive(active: boolean): void;\r\n}\r\n\r\nexport class EventBus {\r\n    public static CREATE: string = 'Create';\r\n    public static EDITOR: string = 'Editor';\r\n    public static OPENPROPERTIES: string = 'openProperties';\r\n    public static RELOADPROPERTIES: string = 'reloadProperties';\r\n    public static ELEMENTMOUSEDOWN: string = 'ELEMENT:MOUSEDOWN';\r\n    public static ELEMENTMOUSEUP: string = 'ELEMENT:MOUSEUP';\r\n    public static ELEMENTMOUSELEAVE: string = 'ELEMENT:MOUSELEAVE';\r\n    public static ELEMENTMOUSEMOVE: string = 'ELEMENT:MOUSEMOVE';\r\n    public static ELEMENTMOUSEWHEEL: string = 'ELEMENT:MOUSEWHEEL';\r\n    public static ELEMENTCLICK: string = 'ELEMENT:CLICK';\r\n    public static ELEMENTDBLCLICK: string = 'ELEMENT:DBLCLICK';\r\n    public static ELEMENTDRAG: string = 'ELEMENT:DRAG';\r\n    public static ELEMENTDRAGOVER: string = 'ELEMENT:DRAGOVER';\r\n    public static ELEMENTDROP: string = 'ELEMENT:DROP';\r\n    public static ELEMENTDRAGLEAVE: string = 'ELEMENT:DRAGLEAVE';\r\n\r\n    public static EVENTS: string[] = [\r\n        EventBus.CREATE,\r\n        EventBus.EDITOR,\r\n        EventBus.OPENPROPERTIES,\r\n        EventBus.RELOADPROPERTIES,\r\n        EventBus.ELEMENTMOUSEDOWN,\r\n        EventBus.ELEMENTMOUSEUP,\r\n        EventBus.ELEMENTMOUSELEAVE,\r\n        EventBus.ELEMENTMOUSEMOVE,\r\n        EventBus.ELEMENTMOUSEWHEEL,\r\n        EventBus.ELEMENTCLICK,\r\n        EventBus.ELEMENTDRAG,\r\n        EventBus.ELEMENTDBLCLICK,\r\n        EventBus.ELEMENTDRAGOVER,\r\n        EventBus.ELEMENTDROP,\r\n        EventBus.ELEMENTDRAGLEAVE,\r\n    ];\r\n\r\n    private static handlers = {};\r\n\r\n    private static $activeHandler: string = '';\r\n\r\n    public static setActiveHandler(handler: string): void {\r\n        this.$activeHandler = handler;\r\n    }\r\n\r\n    public static isHandlerActiveOrFree(handler: string, notEmpty?: boolean): boolean {\r\n        if (notEmpty) {\r\n            return this.$activeHandler === handler;\r\n        }\r\n        return this.$activeHandler === handler || this.$activeHandler === '' || this.$activeHandler === undefined;\r\n    }\r\n\r\n    public static isAnyHandlerActive(): boolean {\r\n        return !(this.$activeHandler === '' || this.$activeHandler === undefined);\r\n    }\r\n\r\n    public static releaseActiveHandler(): void {\r\n        this.$activeHandler = '';\r\n    }\r\n\r\n    public static getActiveHandler(): string {\r\n        return this.$activeHandler;\r\n    }\r\n\r\n    static register(control: Control, view: Element) {\r\n        let events: string[];\r\n        if (typeof control['getEvents'] === 'function') {\r\n            events = control['getEvents']();\r\n        }\r\n\r\n        if (!events || !view) {\r\n            return;\r\n        }\r\n        for (let event of events) {\r\n            this.registerEvent(view, event, control);\r\n        }\r\n    }\r\n\r\n    static registerEvent(view: Element, event: string, control?: any) {\r\n        const pos: number = event.indexOf(':');\r\n        if (pos > 0) {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        } else {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        }\r\n    }\r\n\r\n    public static publish(element: DiagramElement, evt: Event) {\r\n        let handlers = EventBus.handlers[evt.type];\r\n        if (handlers) {\r\n            for (let handler of handlers) {\r\n                handler.handle(evt, element);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static subscribe(handler: EventHandler, ...eventTypes: string[]) {\r\n        for (let event of eventTypes) {\r\n            let handlers = EventBus.handlers[event];\r\n            if (handlers === null || handlers === undefined) {\r\n                handlers = [];\r\n                EventBus.handlers[event] = handlers;\r\n            }\r\n            handlers.push(handler);\r\n        }\r\n    }\r\n}\r\n","import SimpleEvent from './Event';\r\n\r\nexport default class EventListener {\r\n    private $onUpdate: Function;\r\n\r\n    get onUpdate(): Function {\r\n        return this.$onUpdate;\r\n    }\r\n\r\n    set onUpdate(value: Function) {\r\n        this.$onUpdate = value;\r\n    }\r\n\r\n    update(event: SimpleEvent) {\r\n        this.$onUpdate(event);\r\n    }\r\n}\r\n","// ################################## jsEPS ####################################################\r\nimport {SVGConverter} from './SVGConverter';\r\n\r\nexport class JSEPS {\r\n    private max: number;\r\n    private min: number;\r\n    private inverting: boolean;\r\n    private output: string[];\r\n    private font: number;\r\n\r\n    constructor(options: any) {\r\n        this.max = 0;\r\n        this.min = 999;\r\n        let hasInverting = typeof (options.inverting);\r\n        this.inverting = (options && hasInverting !== 'undefined' ? options.inverting : true);\r\n        this.output = ['%!PS-Adobe-3.0 EPSF-3.0', '1 setlinewidth'];\r\n        this.out('/FSD {findfont exch scalefont def} bind def % In the document prolog: define');\r\n        this.out('/SMS {setfont moveto show} bind def % some useful procedures');\r\n        this.out('/MS {moveto show} bind def');\r\n        this.out('/F1  10  /Helvetica  FSD % At the start of the script: set up');\r\n        this.font = 1;\r\n    }\r\n\r\n    public out(value: string) {this.output.push(value); }\r\n    public rect(x: number, y: number, width: number, height: number, style: string) {\r\n        y = y + (this.inverting ? height : 0);\r\n        if (style && style.indexOf('fill:url(#classelement);') >= 0) {\r\n            this.out('gsave 0.93 0.93 0.93 setrgbcolor newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectfill grestore');\r\n        } else {\r\n            this.out('newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectstroke');\r\n        }\r\n    }\r\n    public setFillColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public y(value: number) {this.max = Math.max(this.max, value); this.min = Math.min(this.min, value); return this.inverting ? '%y(' + value + ')' : value; }\r\n    public getType(): string {\r\n        return 'application/postscript';\r\n    }\r\n\r\n    public getData(): string {\r\n        let t, end, url, text, typ = 'application/postscript', a = document.createElement('a'), data = '', pos, i;\r\n        for (i = 0; i < this.output.length; i += 1) {\r\n            text = this.output[i];\r\n            if (this.inverting) {\r\n                while ((pos = text.indexOf('%y')) >= 0) {\r\n                    end = text.indexOf(')', pos);\r\n                    t = this.max - parseInt(text.substring(pos + 3, end), 10);\r\n                    text = text.substring(0, pos) + t + text.substring(end + 1);\r\n                }\r\n            }\r\n            data = data + text + '\\r\\n';\r\n        }\r\n        return data;\r\n    }\r\n\r\n    public setDrawColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public ellipse(cx: number, cy: number, rx: number, ry: number, colorMode: string) {/*FIXME*/}\r\n    public circle(cx: number, cy: number, r: number, colorMode: string) {/*FIXME*/}\r\n    public setTextColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public text(x: number, y: number, text: string) {this.out('(' + text.replace('&lt;', '<').replace('&gt;', '>') + ') ' + x + ' ' + this.y(y) + ' F1 SMS'); }\r\n    public lineto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' lineto'); this.out('stroke'); }\r\n    public moveto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' moveto'); }\r\n    public line(x1: number, y1: number, x2: number, y2: number) {this.out('newpath ' + x1 + ' ' + this.y(y1) + ' moveto ' + x2 + ' ' + this.y(y2) + ' lineto stroke'); }\r\n    public setLineWidth(value: string) {this.out(value + ' setlinewidth'); }\r\n    public setFont(value: string) {this.out('/F' + (this.font += 1) + ' 10 /' + value + ' FSD'); }\r\n}\r\n","import { Graph } from './elements/Graph';\r\n\r\n/*const buttons = {\r\n    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    clazz: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n};\r\n*/\r\nexport default class Palette {\r\n\r\n    private graph: Graph;\r\n    private palette: Element;\r\n    private root: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n        let div = document.createElement('div');\r\n        div.className = 'palette';\r\n        div.id = 'palette';\r\n        this.root = div;\r\n        this.palette = div;\r\n        for (let key in graph.nodeFactory) {\r\n            let element = graph.nodeFactory[key];\r\n            let control = new element();\r\n            let icon = control.getToolBarIcon();\r\n            if (icon) {\r\n                let button = <HTMLButtonElement>document.createElement('button');\r\n                button.className = 'add' + key + 'Btn';\r\n                button.innerHTML = icon.outerHTML;\r\n                button.onclick = e => {\r\n                    let nextFreePosition = this.graph.getNextFreePosition();\r\n                    // let node = this.graph.addElementWithValues(graph.nodeFactory[key], {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    let node = this.graph.addElementWithValues(key, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    this.graph.drawElement(node);\r\n                };\r\n                this.palette.appendChild(button);\r\n            }\r\n        }\r\n        // this.graph.nodeFactory\r\n//        this.addButtons();\r\n    }\r\n\r\n    public show() {\r\n        document.body.appendChild(this.root);\r\n    }\r\n\r\n    private addButtons() {\r\n        /*for (let btn in buttons) {\r\n            let button = <HTMLButtonElement>document.createElement('button');\r\n            button.className = 'add' + btn + 'Btn';\r\n            button.innerHTML = buttons[btn];\r\n            button.onclick = e => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let node = this.graph.addElementWithValues(btn, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                this.graph.drawElement(node);\r\n            };\r\n            this.palette.appendChild(button);\r\n        }*/\r\n    }\r\n}\r\n","import {Graph} from './elements/Graph';\r\nimport * as edges from './elements/edges';\r\nimport {EventBus, EventHandler} from './EventBus';\r\nimport {DiagramElement} from './elements/BaseElements';\r\nimport {Util} from './util';\r\n\r\nexport class PanelGroup implements EventHandler {\r\n    private graph: Graph;\r\n    private selectedElement: DiagramElement;\r\n    private clearPanel: Panel;\r\n    private generatePanel: Panel;\r\n    private propertiesMasterPanel: HTMLDivElement;\r\n    private propertiesContent: HTMLDivElement;\r\n    private propHeaderLabel: HTMLDivElement;\r\n    private propHeaderButton: HTMLButtonElement;\r\n    private selectedPanel: Panel;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.clearPanel = new ClearPanel(this);\r\n        this.generatePanel = new GeneratePanel(this);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        this.handleOpenProperties(event, element);\r\n\r\n        if (event.type === EventBus.RELOADPROPERTIES\r\n            && this.selectedElement && element.id === this.selectedElement.id) {\r\n            this.handleEvent(event, element);\r\n        }\r\n\r\n        // the same element was clicked. do nothing\r\n        if (this.selectedElement && this.selectedElement.id === element.id) {\r\n            return true;\r\n        }\r\n        if (element.id === 'RootElement') {\r\n            this.setActivePanel(this.clearPanel);\r\n        }\r\n        if (element.id === 'GenerateProp') {\r\n            this.setActivePanel(this.generatePanel);\r\n        }\r\n        this.selectedElement = element;\r\n\r\n        return true;\r\n    }\r\n\r\n    public getGraph(): Graph {\r\n        return this.graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(PanelGroup.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(PanelGroup.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n     public handleEvent(event: any, element: any) {\r\n        // DO NOTHING\r\n    }\r\n\r\n    public show() {\r\n        // main div to display any properties, class, edge, etc.\r\n        this.propertiesMasterPanel = document.createElement('div');\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n\r\n        this.propertiesContent = document.createElement('div');\r\n        this.propertiesContent.className = 'properties-hidden';\r\n\r\n        this.propHeaderLabel = document.createElement('div');\r\n        this.propHeaderLabel.style.display = 'inherit';\r\n        this.propHeaderLabel.style.cursor = 'pointer';\r\n        this.propHeaderLabel.onclick = e => this.toogleProperties(e);\r\n\r\n        // button to display and hide the properties of e.g. a class\r\n        this.propHeaderButton = document.createElement('button');\r\n        this.propHeaderButton.className = 'btnHideProp';\r\n        this.propHeaderButton.style.cssFloat = 'right';\r\n        this.propHeaderButton.onclick = e => this.toogleProperties(e);\r\n\r\n        let propertiesHeader = document.createElement('div');\r\n        propertiesHeader.style.display = 'inline';\r\n        propertiesHeader.appendChild(this.propHeaderLabel);\r\n        propertiesHeader.appendChild(this.propHeaderButton);\r\n\r\n        this.propertiesMasterPanel.appendChild(propertiesHeader);\r\n        this.propertiesMasterPanel.appendChild(this.propertiesContent);\r\n        document.body.appendChild(this.propertiesMasterPanel);\r\n\r\n        this.setActivePanel(this.clearPanel);\r\n    }\r\n\r\n    public setActivePanel(panel: Panel) {\r\n        this.selectedPanel = panel;\r\n        this.propHeaderLabel.innerHTML = panel.getHeaderText();\r\n        if (this.propertiesContent) {\r\n            while (this.propertiesContent.hasChildNodes()) {\r\n                this.propertiesContent.removeChild(this.propertiesContent.childNodes[0]);\r\n            }\r\n        }\r\n        panel.show();\r\n\r\n        panel.showFirstTab();\r\n        if (panel !== this.clearPanel) {\r\n            this.showProperties(null);\r\n        } else {\r\n            this.hideProperties(null);\r\n        }\r\n    }\r\n\r\n    public getProperiesContent(): HTMLDivElement {\r\n        return this.propertiesContent;\r\n    }\r\n\r\n    private handleOpenProperties(event: Event, element: DiagramElement) {\r\n        if (event.type === 'dblclick') {\r\n            this.showProperties(event);\r\n        }\r\n    }\r\n\r\n    private showProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Show\r\n        this.propHeaderButton.innerHTML = '&#8897;';\r\n        this.propHeaderButton.title = 'Hide properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel';\r\n        this.propertiesContent.className = 'properties';\r\n    }\r\n\r\n    private toogleProperties(evt: Event): void {\r\n        if (this.propHeaderButton.title === 'Show properties') {\r\n            this.showProperties(evt);\r\n        } else {\r\n            this.hideProperties(evt);\r\n        }\r\n    }\r\n\r\n    private hideProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Hide\r\n        this.propHeaderButton.innerHTML = '&#8896;';\r\n        this.propHeaderButton.title = 'Show properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n        this.propertiesContent.className = 'properties-hidden';\r\n    }\r\n}\r\n\r\nexport abstract class Panel {\r\n    protected divPropertiesPanel: HTMLDivElement;\r\n    protected divPropertiesTabbedPanel: HTMLDivElement;\r\n    protected element: any;\r\n    protected group: PanelGroup;\r\n    private panelItem: PanelItem[] = [];\r\n\r\n    constructor(group: PanelGroup, element: any) {\r\n        // get the properties content panel\r\n        this.divPropertiesPanel = document.createElement('div');\r\n        this.element = element;\r\n        this.group = group;\r\n\r\n        this.divPropertiesTabbedPanel = document.createElement('div');\r\n        this.divPropertiesTabbedPanel.className = 'tabbedpane';\r\n\r\n        // add tabbed panel\r\n        this.divPropertiesPanel.appendChild(this.divPropertiesTabbedPanel);\r\n    }\r\n\r\n    public show(): void {\r\n        let propertiesContent: HTMLDivElement = this.group.getProperiesContent();\r\n        if (this.panelItem.length > 1) {\r\n            propertiesContent.appendChild(this.getPropertiesTabbedPanel());\r\n        }\r\n\r\n        propertiesContent.appendChild(this.getPropertiesPanel());\r\n    }\r\n\r\n    public getPropertiesTabbedPanel(): HTMLDivElement {\r\n        return this.divPropertiesTabbedPanel;\r\n    }\r\n\r\n    public getPropertiesPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return '';\r\n    }\r\n\r\n    public showFirstTab(): void {\r\n        if (this.panelItem.length > 0) {\r\n            this.openTab(this.panelItem[0]);\r\n        }\r\n    }\r\n\r\n    protected createTabElement(tabText: string, tabValue: string, item: PanelItem): PanelItem {\r\n        let tabElementBtn = document.createElement('button');\r\n        tabElementBtn.className = 'tablinks';\r\n        tabElementBtn.innerText = tabText;\r\n        tabElementBtn.value = tabValue;\r\n\r\n        if (item === null) {\r\n            item = new PanelItem(this);\r\n        }\r\n        item.withButton(tabElementBtn);\r\n\r\n        tabElementBtn.onclick = () => this.openTab(item);\r\n        this.divPropertiesTabbedPanel.appendChild(tabElementBtn);\r\n        this.panelItem.push(item);\r\n        return item;\r\n    }\r\n\r\n    protected openTab(panelItem: PanelItem): void {\r\n        for (let key in this.panelItem) {\r\n            let child = this.panelItem[key];\r\n            if (child !== panelItem) {\r\n                 child.deactive();\r\n            }\r\n        }\r\n        panelItem.active();\r\n        // hide other tabcontent\r\n        if (this.divPropertiesPanel) {\r\n            while (this.divPropertiesPanel.hasChildNodes()) {\r\n                this.divPropertiesPanel.removeChild(this.divPropertiesPanel.childNodes[0]);\r\n            }\r\n        }\r\n\r\n        // ADD\r\n        if (panelItem.getContent()) {\r\n            this.divPropertiesPanel.appendChild(panelItem.getContent());\r\n        }\r\n    }\r\n}\r\n\r\nexport class GeneratePanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n\r\n        let item: PanelItem = this.createTabElement('General', 'General', null);\r\n\r\n        // Workspace and generate code stuff\r\n        let inputGenerateWorkspace: HTMLInputElement =  <HTMLInputElement> Util.createHTML({tag: 'input', id: 'workspace', type: 'text', placeholder: 'Type your Folder for generated code...', value: 'src/main/java', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Folder:', inputGenerateWorkspace);\r\n\r\n        let inputGeneratePackage: HTMLInputElement = <HTMLInputElement> Util.createHTML({tag: 'input', id: 'package', type: 'text', placeholder: 'Type your workspace for generated code...', value: '', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Package:', inputGeneratePackage);\r\n\r\n        let options = document.createElement('div');\r\n        options.style.textAlign = 'center';\r\n        options.style.margin = '3';\r\n        options.style.padding = '5';\r\n\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(options);\r\n\r\n        options.style.borderStyle = 'groove';\r\n        options.style.borderRadius = '10px';\r\n\r\n        let btnGenerate = document.createElement('button');\r\n        btnGenerate.textContent = 'Generate';\r\n        btnGenerate.title = 'Generate code into your workspace';\r\n        btnGenerate.className = 'OptionElement';\r\n\r\n        let that = this;\r\n        btnGenerate.onclick = () => {\r\n            let workspace = inputGeneratePackage.value;\r\n            if (workspace.length === 0) {\r\n                alert('No workspace set.\\nEnter first your workspace');\r\n                inputGeneratePackage.focus();\r\n                return;\r\n            }\r\n            that.group.getGraph().generate(workspace, inputGenerateWorkspace.value);\r\n        };\r\n        options.appendChild(btnGenerate);\r\n        options.appendChild(document.createElement('hr'));\r\n        options.appendChild(document.createElement('br'));\r\n\r\n        let btnAutoLayout = Util.createHTML({tag: 'button', className: 'OptionElement', value: 'Auto Layout', style: {marginRight: '10px'}, onclick: () => {\r\n                that.group.getGraph().layout();\r\n            }});\r\n\r\n        options.appendChild(btnAutoLayout);\r\n\r\n        // delete all nodes\r\n        let btnDeleteAll = document.createElement('button');\r\n        btnDeleteAll.className = 'OptionElement';\r\n        btnDeleteAll.textContent = 'Delete All';\r\n        btnDeleteAll.title = 'Delete all nodes from diagram';\r\n\r\n        btnDeleteAll.onclick = () => {\r\n            let confirmDelete = confirm('All classes will be deleted!');\r\n            if (!confirmDelete) {\r\n                return;\r\n            }\r\n            that.group.getGraph().$graphModel.removeAllElements();\r\n        };\r\n        btnDeleteAll.style.marginRight = '10px';\r\n        options.appendChild(btnDeleteAll);\r\n\r\n        // export stuff\r\n        let exportTypes: string[] = ['Export', 'HTML', 'JSON', 'PDF', 'PNG', 'SVG'];\r\n        let selectExport = document.createElement('select');\r\n\r\n        exportTypes.forEach(type => {\r\n            if (!(!window['jsPDF'] && type === 'PDF')) {\r\n                let option = document.createElement('option');\r\n                option.value = type;\r\n                option.textContent = type;\r\n                selectExport.appendChild(option);\r\n            }\r\n        });\r\n\r\n        selectExport.onchange = (evt) => {\r\n            let selectedExportType = selectExport.options[selectExport.selectedIndex].value;\r\n            selectExport.selectedIndex = 0;\r\n            that.group.getGraph().saveAs(selectedExportType);\r\n        };\r\n        selectExport.className = 'OptionElement';\r\n        options.appendChild(selectExport);\r\n        options.appendChild(document.createElement('br'));\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Properties';\r\n    }\r\n\r\n}\r\n\r\nexport class ClearPanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Select any element to see its properties';\r\n    }\r\n}\r\n\r\nexport class PanelItem {\r\n    protected panel: Panel;\r\n    protected label: string;\r\n    protected button: HTMLButtonElement;\r\n    protected content: HTMLDivElement = <HTMLDivElement>Util.create({tag: 'div', className: 'tabContent'});\r\n\r\n    constructor(panel: Panel, label?: string) {\r\n        this.panel = panel;\r\n        this.label = label;\r\n    }\r\n\r\n    public active(): void {\r\n        if (this.getButton()) {\r\n            this.getButton().className += ' active';\r\n        }\r\n    }\r\n\r\n    public deactive(): void {\r\n        if (this.getButton()) {\r\n            Util.removeClass(this.getButton(), 'active');\r\n        }\r\n    }\r\n\r\n    public withButton(button: HTMLButtonElement): PanelItem {\r\n        this.button = button;\r\n        return this;\r\n    }\r\n\r\n    public withContent(element: HTMLElement): PanelItem {\r\n        this.content.appendChild(element);\r\n        return this;\r\n    }\r\n\r\n    public withInput(labelText: string, element: HTMLElement): PanelItem {\r\n        let group: HTMLDivElement = <HTMLDivElement> Util.createHTML({tag: 'div'});\r\n        let label = Util.createHTML({tag: 'label', for: element.id, value: labelText});\r\n        group.appendChild(label);\r\n        group.appendChild(element);\r\n\r\n        this.content.appendChild(group);\r\n        return this;\r\n    }\r\n\r\n    public getButton(): HTMLButtonElement {\r\n        return this.button;\r\n    }\r\n\r\n    public getContent(): HTMLDivElement {\r\n        return this.content;\r\n    }\r\n\r\n   public getHeader(): string {\r\n        return this.label;\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\nimport Data from './Data';\r\n\r\nexport class PropertyBinder implements PropertyChangeSupport {\r\n    private propertyClass1: string;\r\n    private propertyClass2: string;\r\n    private data1: Data;\r\n    private data2: Data;\r\n    // works like a lock\r\n    private applyingChange: boolean = false;\r\n\r\n    constructor(data1: Data, data2: Data, propertyClass1: string, propertyClass2: string) {\r\n        this.data1 = data1;\r\n        this.data2 = data2;\r\n        this.propertyClass1 = propertyClass1;\r\n        this.propertyClass2 = propertyClass2;\r\n    }\r\n    static bind(data1: Data, data2: Data, property1: string, property2: string) {\r\n        if (!data1 || !data2 || !property1) {\r\n            console.error('NullValue!!');\r\n            return null;\r\n        }\r\n        const propertyBinder = new PropertyBinder(data1, data2, property1, property2);\r\n        propertyBinder.bind();\r\n        return propertyBinder;\r\n    }\r\n\r\n    propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        if (!this.applyingChange) {\r\n            this.applyingChange = true;\r\n            if (entity === this.data1) {\r\n                // fire to data2\r\n                this.data2.setValue(this.propertyClass2, newValue);\r\n            } else if (entity === this.data2) {\r\n                // fire to data1\r\n                this.data1.setValue(this.propertyClass1, newValue);\r\n            }\r\n            this.applyingChange = false;\r\n        }\r\n    }\r\n\r\n    protected bind() {\r\n        // public addListener(control: Control, property?: string)\r\n        // todo: set value immediately\r\n        this.data1.setValue(this.propertyClass1, this.data2.getValue(this.propertyClass2));\r\n\r\n        this.data1.addListener(this, this.propertyClass1);\r\n        this.data2.addListener(this, this.propertyClass2);\r\n    }\r\n\r\n    protected unbind() {\r\n        // public addListener(control: Control, property?: string)\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n    }\r\n}\r\n","// ################################## RGBColor ####################################################\r\nexport class RGBColor {\r\n    public  ok: boolean;\r\n    public r: number;\r\n    public g: number;\r\n    public b: number;\r\n\r\n    constructor(value: string) {\r\n        this.ok = false;\r\n        if (value === 'none') {\r\n            return;\r\n        }\r\n        let computedColor, div = document.createElement('div');\r\n        div.style.backgroundColor = value;\r\n        document.body.appendChild(div);\r\n        computedColor = window.getComputedStyle(div).backgroundColor;\r\n        // cleanup temporary div.\r\n        document.body.removeChild(div);\r\n        this.convert(computedColor);\r\n    }\r\n    public convert(value: any) {\r\n        let values, regex = /rgb *\\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\\)/;\r\n        values = regex.exec(value);\r\n        this.r = parseInt(values[1], 10);\r\n        this.g = parseInt(values[2], 10);\r\n        this.b = parseInt(values[3], 10);\r\n        this.ok = true;\r\n    }\r\n\r\n    public toRGB(): string {return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; }\r\n    public toHex(): string {\r\n        return '#' + (this.r + 0x10000).toString(16).substring(3).toUpperCase() + (this.g + 0x10000).toString(16).substring(3).toUpperCase() + (this.b + 0x10000).toString(16).substring(3).toUpperCase();\r\n    }\r\n}\r\n","/*\r\n NetworkParser\r\n Copyright (c) 2011 - 2014, Stefan Lindel\r\n All rights reserved.\r\n\r\n Licensed under the EUPL, Version 1.1 or (as soon they\r\n will be approved by the European Commission) subsequent\r\n versions of the EUPL (the \"Licence\");\r\n You may not use this work except in compliance with the Licence.\r\n You may obtain a copy of the Licence at:\r\n\r\n http://ec.europa.eu/idabc/eupl5\r\n\r\n Unless required by applicable law or agreed to in\r\n writing, software distributed under the Licence is\r\n distributed on an \"AS IS\" basis,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\r\n express or implied.\r\n See the Licence for the specific language governing\r\n permissions and limitations under the Licence.\r\n*/\r\nimport {RGBColor} from './RGBColor';\r\nimport {JSEPS} from \"./JSEPS\";\r\n\r\nconst epsSvgAttr = {\r\n    // allowed attributes. all others are removed from the preview.\r\n    g: ['stroke', 'fill', 'stroke-width'],\r\n    line: ['x1', 'y1', 'x2', 'y2', 'stroke', 'stroke-width'],\r\n    rect: ['x', 'y', 'width', 'height', 'stroke', 'fill', 'stroke-width'],\r\n    ellipse: ['cx', 'cy', 'rx', 'ry', 'stroke', 'fill', 'stroke-width'],\r\n    circle: ['cx', 'cy', 'r', 'stroke', 'fill', 'stroke-width'],\r\n    text: ['x', 'y', 'font-size', 'font-family', 'text-anchor', 'font-weight', 'font-style', 'fill'],\r\n    path: ['']\r\n};\r\nexport class SVGConverter {\r\n    private k: number;\r\n    private remove: boolean;\r\n    private target: any;\r\n\r\n    constructor(element: any, target: any, options: any) {\r\n        this.k = 1.0;\r\n        let hasScale = typeof (options.scale), hasRemoveInvalid = typeof (options.removeInvalid);\r\n        this.k = (options && hasScale !== 'undefined' ? options.scale : 1.0);\r\n        this.remove = (options && hasRemoveInvalid !== 'undefined' ? options.removeInvalid : false);\r\n        this.target = target;\r\n        this.parse(element);\r\n    }\r\n\r\n    public parse(element: any) {\r\n        let el, i, n, colorMode, hasFillColor, fillRGB, fillColor, strokeColor, strokeRGB, fontType, pdfFontSize, x, y,\r\n            box, xOffset;\r\n        if (!element) {\r\n            return;\r\n        }\r\n        if (typeof element === 'string') {\r\n            el = document.createElement('div');\r\n            el.innerHTML = element;\r\n            element = el.childNodes[0];\r\n        }\r\n        for (i = 0; i < element.children.length; i += 1) {\r\n            n = element.children[i];\r\n            colorMode = null;\r\n            hasFillColor = false;\r\n            if ('g,line,rect,ellipse,circle,text'.indexOf(n.tagName) >= 0) {\r\n                fillColor = n.getAttribute('fill');\r\n                if (fillColor) {\r\n                    fillRGB = new RGBColor(fillColor);\r\n                    if (fillRGB.ok) {\r\n                        hasFillColor = true;\r\n                        colorMode = 'F';\r\n                    }\r\n                }\r\n            }\r\n            if ('g,line,rect,ellipse,circle'.indexOf(n.tagName) >= 0) {\r\n                if (hasFillColor) {\r\n                    this.target.setFillColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                }\r\n                strokeColor = n.getAttribute('stroke');\r\n                if (n.hasAttribute('stroke-width')) {\r\n                    this.target.setLineWidth(this.attr(n, 'stroke-width'));\r\n                }\r\n                if (strokeColor) {\r\n                    strokeRGB = new RGBColor(strokeColor);\r\n                    if (strokeRGB.ok) {\r\n                        this.target.setDrawColor(strokeRGB.r, strokeRGB.g, strokeRGB.b);\r\n                        if (colorMode === 'F') {\r\n                            colorMode = 'FD';\r\n                        } else if (!hasFillColor) {\r\n                            colorMode = 'S';\r\n                        }\r\n                    } else {\r\n                        colorMode = null;\r\n                    }\r\n                }\r\n            }\r\n            // console.log(\"write \"+n.tagName);\r\n            switch (n.tagName.toLowerCase()) {\r\n                case 'svg':\r\n                case 'a':\r\n                case 'g':\r\n                    this.parse(n);\r\n                    break;\r\n                case 'line':\r\n                    this.target.line(this.attr(n, 'x1'), this.attr(n, 'y1'), this.attr(n, 'x2'), this.attr(n, 'y2'));\r\n                    break;\r\n                case 'rect':\r\n                    this.target.rect(this.attr(n, 'x'), this.attr(n, 'y'), this.attr(n, 'width'), this.attr(n, 'height'), n.getAttribute('style'));\r\n                    break;\r\n                case 'ellipse':\r\n                    this.target.ellipse(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'rx'), this.attr(n, 'ry'), colorMode);\r\n                    break;\r\n                case 'circle':\r\n                    this.target.circle(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'r'), colorMode);\r\n                    break;\r\n                case 'text':\r\n                    if (n.hasAttribute('font-family')) {\r\n                        switch (n.getAttribute('font-family').toLowerCase()) {\r\n                            case 'serif':\r\n                                this.target.setFont('times');\r\n                                break;\r\n                            case 'monospace':\r\n                                this.target.setFont('courier');\r\n                                break;\r\n                            default:\r\n                                n.getAttribute('font-family', 'sans-serif');\r\n                                this.target.setFont('Helvetica');\r\n                        }\r\n                    }\r\n                    if (hasFillColor) {\r\n                        this.target.setTextColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                    }\r\n                    if (this.target instanceof JSEPS) {\r\n                        this.target.text(this.attr(n, 'x'), this.attr(n, 'y'), n.innerHTML);\r\n                        break;\r\n                    }\r\n                    fontType = '';\r\n                    if (n.hasAttribute('font-weight')) {\r\n                        if (n.getAttribute('font-weight') === 'bold') {\r\n                            fontType = 'bold';\r\n                        }\r\n                    }\r\n                    if (n.hasAttribute('font-style')) {\r\n                        if (n.getAttribute('font-style') === 'italic') {\r\n                            fontType += 'italic';\r\n                        }\r\n                    }\r\n                    this.target.setFontType(fontType);\r\n                    pdfFontSize = 16;\r\n                    if (n.hasAttribute('font-size')) {\r\n                        pdfFontSize = parseInt(n.getAttribute('font-size'), 10);\r\n                    }\r\n                    box = n.getBBox();\r\n                    // FIXME: use more accurate positioning!!\r\n                    x = this.attr(n, 'x');\r\n                    y = this.attr(n, 'y');\r\n                    xOffset = 0;\r\n                    if (n.hasAttribute('text-anchor')) {\r\n                        switch (n.getAttribute('text-anchor')) {\r\n                            case 'end':\r\n                                xOffset = box.width;\r\n                                break;\r\n                            case 'middle':\r\n                                xOffset = box.width / 2;\r\n                                break;\r\n                            case 'start':\r\n                                break;\r\n                            case 'default':\r\n                                n.getAttribute('text-anchor', 'start');\r\n                                break;\r\n                        }\r\n                        x = x - (xOffset * this.k);\r\n                    }\r\n                    this.target.setFontSize(pdfFontSize).text(x, y, n.innerHTML);\r\n                    break;\r\n                default:\r\n                    if (this.remove) {\r\n                        console.log('cant translate to target:', n);\r\n                        element.removeChild(n);\r\n                        i -= 1;\r\n                    }\r\n            }\r\n        }\r\n    }\r\n\r\n    public attr(node: any, name: string) {\r\n        return this.k * parseInt(node.getAttribute(name), 10);\r\n    }\r\n}\r\n","import {Control} from './Control';\r\n\r\nexport class ScrumBoard extends Control {\r\n    public static cards = [0, 0.5, 1, 2, 3, 5, 8, 13, 20, 40, 100, '?', 'Coffee'];\r\n    private $selected: HTMLDivElement;\r\n    private $board: HTMLDivElement;\r\n\r\n    constructor() {\r\n        super();\r\n        this.redraw();\r\n    }\r\n\r\n    public redraw(): void {\r\n        if (this.$board) {\r\n            while (this.$board.children.length > 0 ) {\r\n                this.$board.removeChild(this.$board.children[0]);\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('div');\r\n            this.$selected = document.createElement('div');\r\n            this.$board = document.createElement('div');\r\n            this.$view.appendChild(this.$board);\r\n            this.$view.appendChild(this.$selected);\r\n        }\r\n        this.$view.className = 'ScrumBoard';\r\n        for ( let i = 0; i < ScrumBoard.cards.length; i++) {\r\n            let card = document.createElement('div');\r\n            card.className = 'ScrumCard';\r\n            card.innerHTML = <string>ScrumBoard.cards[i];\r\n            card['pokervalue'] = <string>ScrumBoard.cards[i];\r\n            card.onclick = e => {\r\n                this.onClick(<HTMLDivElement>e.target);\r\n            };\r\n            this.$board.appendChild(card);\r\n        }\r\n    }\r\n\r\n    public getSVG() {\r\n        this.redraw();\r\n        return this.$view;\r\n    }\r\n\r\n    public onClick(target: HTMLDivElement): void {\r\n        console.log(target['pokervalue']);\r\n\r\n        while (this.$selected.children.length > 0 ) {\r\n            this.$selected.removeChild(this.$selected.children[0]);\r\n        }\r\n        let card = document.createElement('div');\r\n        card.className = 'ScrumCard';\r\n        card['pokervalue'] = target['pokervalue'];\r\n        card.onclick = e => {\r\n            this.onShow(<HTMLDivElement>e.target);\r\n        };\r\n        this.$selected.appendChild(card);\r\n        this.$board['style']['display'] = 'none';\r\n    }\r\n\r\n    public onShow(target: HTMLDivElement): void {\r\n        target.innerHTML = target['pokervalue'];\r\n    }\r\n}\r\n","import {Graph} from './main';\r\nimport {SymbolLibary} from './elements/nodes/Symbol';\r\nimport {EventBus} from './EventBus';\r\n\r\nexport class Toolbar {\r\n\r\n    private graph: Graph;\r\n    private mainDiv: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public show(): void {\r\n        if (this.mainDiv) {\r\n            return;\r\n        }\r\n\r\n        this.mainDiv = document.createElement('div');\r\n        this.mainDiv.className = 'toolbar';\r\n\r\n        let h1Logo = document.createElement('h1');\r\n        h1Logo.className = 'logo';\r\n        h1Logo.textContent = 'DiagramJS';\r\n\r\n        let node = {type: 'Hamburger', property: 'HTML', width: 24, height: 24, id: 'GenerateProp'};\r\n        let hamburger = SymbolLibary.draw( node);\r\n        EventBus.registerEvent(hamburger, 'click', node);\r\n        this.mainDiv.appendChild(hamburger);\r\n\r\n        this.mainDiv.appendChild(h1Logo);\r\n        document.body.appendChild(this.mainDiv);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 06.03.2017.\r\n */\r\nimport Data from './Data';\r\n\r\n// export default class Data {\r\n//    public values = {};\r\n//    id: string;\r\n//    $listener: Control[] = [];\r\n//    property: string;\r\nexport namespace UML {\r\n    export class Clazz extends Data {\r\n        public static NAME: string = 'name';\r\n        public static ATTRIBUTES: string = 'attributes';\r\n        public static METHODS: string = 'methods';\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Clazz';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n\r\n        public getAttributes() {\r\n            return this.prop[Clazz.ATTRIBUTES];\r\n        }\r\n\r\n        public addToAttributes(newValue: string) {\r\n            this.addTo(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n\r\n        public removeFromAttributes(newValue: string) {\r\n            this.removeFrom(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n    }\r\n\r\n    export class Attribute extends Data {\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Attribute';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n    }\r\n\r\n    export class Methods extends Data {\r\n\r\n    }\r\n}\r\n\r\nwindow['UML'] = UML;\r\n","import {Control} from './Control';\r\n\r\nexport class VirtualKeyBoard extends Control {\r\n    constructor(data: any) {\r\n        super();\r\n        if (!data) {\r\n            data = this.getDefault();\r\n        }\r\n        let board = document.createElement('div');\r\n        this.$viewData = data;\r\n\r\n        for (let type in data) {\r\n            if (type === 'normal') {\r\n                for (let line in data[type]) {\r\n                    let lineBoard = document.createElement('div');\r\n                    lineBoard.className = 'vkLine';\r\n                    for (let key in data[type][line]) {\r\n                        let btn: HTMLButtonElement = document.createElement('button');\r\n                        let keyTag = data[type][line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                        btn.ontouchend = () => {this.action(btn); };\r\n                        btn.onclick = () => {this.action(btn); };\r\n                        lineBoard.appendChild(btn);\r\n                    }\r\n                    board.appendChild(lineBoard);\r\n                }\r\n            }\r\n        }\r\n        this.$view = board;\r\n    }\r\n\r\n    public action(btn: HTMLButtonElement) {\r\n        if (btn['key'] === '{Shift}') {\r\n            if ( btn.className === 'vkbuttonAction') {\r\n                let keys = this.$viewData['normal'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                    }\r\n                }\r\n            } else if ( btn.className === 'vkbutton') {\r\n                let keys = this.$viewData['shift'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbuttonAction');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        alert(btn);\r\n    }\r\n\r\n    public getDefault(): any {\r\n        let format = {\r\n            normal: [\r\n                ['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '?', '´', '{Bksp}'],\r\n                ['{Tab}', 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+'],\r\n                ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '#', '{enter}'],\r\n                ['{Shift}', '<', 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n// '{left}', '{up}', '{down}','{right}', '{Cancel}']\r\n            ],\r\n            shift: [\r\n                ['°', '!', '\"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '`', '{Bksp}'],\r\n                ['{Tab}', 'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', 'O', 'P', 'Ü', '*'],\r\n                ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', '\\'', '{enter}'],\r\n                ['{Shift}', '>', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n            ]\r\n        };\r\n        return format;\r\n    }\r\n\r\n    public getBoard() {\r\n        return this.$view;\r\n    }\r\n\r\n    private setButtonValue(keyTag: string, btn: HTMLButtonElement, shiftClass: string) {\r\n        btn.className = 'vkbutton';\r\n        btn['key'] = keyTag;\r\n        btn['type'] = 'normal';\r\n        if (keyTag.substring(0, 1) === '{') {\r\n            if (keyTag === '{Bksp}') {\r\n                btn.innerHTML = 'Bksp';\r\n            } else if (keyTag === '{Tab}') {\r\n                btn.innerHTML = '&#8677; Tab';\r\n            } else if (keyTag === '{enter}') {\r\n                btn.innerHTML = 'enter';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Shift}') {\r\n                btn.innerHTML = 'Shift';\r\n                btn.className = shiftClass;\r\n            } else if (keyTag === '{Accept}') {\r\n                btn.innerHTML = 'Accept';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Alt}') {\r\n                btn.innerHTML = 'Alt';\r\n            } else if (keyTag === '{Space}') {\r\n                btn.innerHTML = '&nbsp;';\r\n                btn.className = 'vkbuttonSpace';\r\n            } else if (keyTag === '{left}') {\r\n                btn.innerHTML = '&#8592';\r\n            } else if (keyTag === '{right}') {\r\n                btn.innerHTML = '&#8594;';\r\n            } else if (keyTag === '{up}') {\r\n                btn.innerHTML = '&#8593;';\r\n            } else if (keyTag === '{down}') {\r\n                btn.innerHTML = '&#8595;';\r\n            } else if (keyTag === '{Cancel}') {\r\n                btn.innerHTML = 'Cancel';\r\n                btn.className = 'vkbuttonAction';\r\n            }\r\n        } else {\r\n            btn.innerHTML = keyTag;\r\n        }\r\n    }\r\n}\r\n","import {Adapter} from '../Adapter';\r\n\r\nexport class JavaAdapter extends Adapter {\r\n    constructor() {\r\n        super();\r\n        this.id = 'JavaAdapter';\r\n    }\r\n    update(evt: Object): boolean {\r\n        if (this.isActive()) {\r\n            window['JavaBridge'].executeChange(evt);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public isActive(): boolean {\r\n        return window['JavaBridge'];\r\n    }\r\n}\r\n","export * from './JavaAdapter';\r\n","import { Util } from '../util';\r\nimport { Control } from '../Control';\r\n\r\nexport interface Size {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\ninterface GraphElement {\r\n    getSize(): Point;\r\n\r\n    getPos(): Point;\r\n\r\n    getCenter(): Point;\r\n\r\n    getSVG(): Element;\r\n\r\n    getCanvas(): Element;\r\n\r\n    getEvents(): string[];\r\n\r\n    withPos(x: number, y: number): GraphElement;\r\n\r\n    load(data: any): any;\r\n\r\n    getToolBarIcon(): Element;\r\n\r\n    loadProperties(properties: any): void;\r\n}\r\n\r\nexport abstract class DiagramElement extends Control implements GraphElement {\r\n\r\n    protected $isDraggable: boolean = true;\r\n    protected $labelHeight = 25;\r\n    protected $labelFontSize = 14;\r\n    private $pos: Point = new Point();\r\n    private $size: Point = new Point();\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getPos(): Point {\r\n        return this.$pos;\r\n    }\r\n\r\n    public getSize(): Point {\r\n        return this.$size;\r\n    }\r\n\r\n    public getCenter(): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        return new Point(pos.x + size.x / 2, pos.y + size.y / 2);\r\n    }\r\n\r\n    public getCenterPosition(p: string): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let offset = this['$' + p];\r\n        let center = this.getCenter();\r\n        if (p === Point.DOWN) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y + size.y, Point.DOWN);\r\n        }\r\n        if (p === Point.UP) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y, Point.UP);\r\n        }\r\n        if (p === Point.LEFT) {\r\n            return new Point(pos.x, Math.min(center.y + offset, pos.y + size.y), Point.LEFT);\r\n        }\r\n        if (p === Point.RIGHT) {\r\n            return new Point(pos.x + size.x, Math.min(center.y + offset, pos.y + size.y), Point.RIGHT);\r\n        }\r\n        return new Point();\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getCanvas(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return null;\r\n    }\r\n\r\n    public getAlreadyDisplayingSVG(): Element {\r\n        return document.getElementById(this.id) || this.getSVG();\r\n    }\r\n\r\n    public load(data: any) {\r\n        // Do Nothing\r\n    }\r\n\r\n    public withPos(x: number, y: number): GraphElement {\r\n        if (x && y) {\r\n            this.$pos = new Point(x, y);\r\n        } else {\r\n            if (typeof (x) !== 'undefined' && x !== null) {\r\n                this.$pos.x = x;\r\n            }\r\n            if (typeof (y) !== 'undefined' && y !== null) {\r\n                this.$pos.y = y;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public withSize(width: number, height: number): DiagramElement {\r\n        if (width && height) {\r\n            this.$size = new Point(width, height);\r\n        } else {\r\n            if (typeof (width) !== 'undefined' && width !== null) {\r\n                this.$size.x = width;\r\n            }\r\n            if (typeof (height) !== 'undefined' && height !== null) {\r\n                this.$size.y = height;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        // FIXME if (this.status === 'close') {\r\n        // if (!this.$owner.isClosed()) {\r\n        //        return this;\r\n        //    }\r\n        // }\r\n        return super.getShowed();\r\n    }\r\n\r\n    public loadProperties(properties: any) {\r\n        // DO Nothing\r\n    }\r\n\r\n    protected createShape(attrs: any): Element {\r\n        return Util.createShape(attrs);\r\n    }\r\n}\r\n\r\nexport class Point {\r\n    public static UP: string = 'UP';\r\n    public static LEFT: string = 'LEFT';\r\n    public static RIGHT: string = 'RIGHT';\r\n    public static DOWN: string = 'DOWN';\r\n    x: number = 0;\r\n    y: number = 0;\r\n\r\n    //    pos:string = '';\r\n\r\n    constructor(x?: number, y?: number, pos?: string) {\r\n        this.x = Math.ceil(x || 0);\r\n        this.y = Math.ceil(y || 0);\r\n        if (pos) {\r\n            this['pos'] = pos;\r\n        }\r\n    }\r\n\r\n    public add(pos: Point) {\r\n        this.x += pos.x;\r\n        this.y += pos.y;\r\n        return this;\r\n    }\r\n\r\n    public getPosition(): string {\r\n        if (!this['pos']) {\r\n            return '';\r\n        }\r\n        return this['pos'];\r\n    }\r\n\r\n    public addNum(x: number, y: number) {\r\n        this.x += x;\r\n        this.y += y;\r\n        return this;\r\n    }\r\n\r\n    public sum(pos: Point) {\r\n        let sum = new Point(this.x, this.y);\r\n        sum.add(pos);\r\n        return sum;\r\n    }\r\n\r\n    public center(posA: Point, posB: Point) {\r\n        let count = 0;\r\n        if (posA) {\r\n            this.x += posA.x;\r\n            this.y += posA.y;\r\n            count++;\r\n        }\r\n        if (posB) {\r\n            this.x += posB.x;\r\n            this.y += posB.y;\r\n            count++;\r\n        }\r\n        if (count > 0) {\r\n            this.x = (this.x / count);\r\n            this.y = (this.y / count);\r\n        }\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        return this.x < 1 && this.y < 1;\r\n    }\r\n\r\n    public size(posA: Point, posB: Point) {\r\n        let x1 = 0, x2 = 0, y1 = 0, y2 = 0;\r\n        if (posA) {\r\n            x1 = posA.x;\r\n            y1 = posA.y;\r\n        }\r\n        if (posB) {\r\n            x2 = posB.x;\r\n            y2 = posB.y;\r\n        }\r\n        if (x1 > x2) {\r\n            this.x = x1 - x2;\r\n        } else {\r\n            this.x = x2 - x1;\r\n        }\r\n        if (y1 > y2) {\r\n            this.y = y1 - y2;\r\n        } else {\r\n            this.y = y2 - y1;\r\n        }\r\n    }\r\n}\r\n\r\n// \t\t\t\t######################################################### Line #########################################################\r\nexport class Line extends DiagramElement {\r\n    public static FORMAT = { SOLID: 'SOLID', DOTTED: 'DOTTED', PATH: 'PATH' };\r\n    public source: Point;\r\n    public target: Point;\r\n    public color: string;\r\n    public lineType: string;\r\n    private path: string;\r\n    private angle: Number;\r\n\r\n    constructor(lineType: string) {\r\n        super();\r\n        this.lineType = lineType;\r\n    }\r\n\r\n    public getTyp(): string {\r\n        return 'SVG';\r\n    }\r\n\r\n    public getPos() {\r\n        let pos = new Point();\r\n        pos.center(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public getSize() {\r\n        let pos = new Point();\r\n        pos.size(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public withColor(color: string): Line {\r\n        this.color = color;\r\n        return this;\r\n    }\r\n\r\n    public withSize(x: number, y: number): DiagramElement {\r\n        return this;\r\n    }\r\n\r\n    public withPath(path: Array<Point>, close: boolean, angle?: any): Line {\r\n        let i: number, d: string = 'M' + path[0].x + ' ' + path[0].y;\r\n        this.lineType = Line.FORMAT.PATH; // It is a Path not a Line\r\n        for (i = 1; i < path.length; i += 1) {\r\n            d = d + 'L ' + path[i].x + ' ' + path[i].y;\r\n        }\r\n        if (close) {\r\n            d = d + ' Z';\r\n            this.target = path[0];\r\n        } else {\r\n            this.target = path[path.length - 1];\r\n        }\r\n        this.path = d;\r\n        if (angle instanceof Number) {\r\n            this.angle = angle;\r\n        } else if (angle) {\r\n            // var lineangle, start = path[0], end = path[path.length - 1];\r\n            // lineangle = Math.atan2(end.y - start.y, end.x - start.x);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): SVGGElement {\r\n        if (this.lineType === 'PATH') {\r\n            return <SVGGElement>Util.create({\r\n                tag: 'path',\r\n                'd': this.path,\r\n                'fill': this.color,\r\n                stroke: '#000',\r\n                'stroke-width': '1px'\r\n            });\r\n        }\r\n        let line: SVGGElement = <SVGGElement>Util.create({\r\n            tag: 'line',\r\n            'x1': this.source.x,\r\n            'y1': this.source.y,\r\n            'x2': this.target.x,\r\n            'y2': this.target.y,\r\n            'stroke': Util.getColor(this.color)\r\n        });\r\n        if (this.lineType && this.lineType.toLowerCase() === 'dotted') {\r\n            line.setAttribute('stroke-miterlimit', '4');\r\n            line.setAttribute('stroke-dasharray', '1,1');\r\n        }\r\n        return line;\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport Options from '../Options';\r\nimport {JavaAdapter} from '../adapters';\r\n\r\nexport class ClassEditor extends Graph {\r\n    private adapter: JavaAdapter;\r\n    constructor(json: any, options: Options) {\r\n        if (!options ) {\r\n            options = {};\r\n        }\r\n        options.canvas = options.canvas || 'canvas';\r\n        // options.origin = options.origin || new Point(150, 45);\r\n//            layout: \"DagreLayout\",\r\n        options.autoSave = options.autoSave || true;\r\n        if (!options.features) {\r\n            options.features = {\r\n                drag: true,\r\n                editor: true,\r\n                palette: true,\r\n                select: true,\r\n                zoom: true,\r\n                toolbar: true,\r\n                import: true,\r\n                properties: true,\r\n                addnode: true,\r\n                newedge: true\r\n            };\r\n        }\r\n        super(json, options);\r\n    }\r\n\r\n    public setBoardStyle(value: string) {\r\n        console.log(value);\r\n        this.importFile.setBoardStyle(value);\r\n    }\r\n\r\n    public registerListener(): void {\r\n        this.adapter = new JavaAdapter();\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return this.adapter;\r\n    }\r\n}\r\n","import * as edges from './edges';\r\nimport { Association } from './edges';\r\nimport * as nodes from './nodes';\r\nimport * as layouts from '../layouts';\r\nimport Layout from '../layouts/Layout';\r\nimport { GraphModel } from './Model';\r\nimport { Point, Size } from './BaseElements';\r\nimport { Util } from '../util';\r\nimport { Control } from '../Control';\r\nimport Data from '../Data';\r\nimport { EventBus } from '../EventBus';\r\nimport { AddNode, Drag, NewEdge, Select, Zoom } from '../handlers';\r\nimport Options from '../Options';\r\nimport { ImportFile } from '../handlers/ImportFile';\r\nimport { CSS } from '../CSS';\r\nimport { DiagramElement } from './index';\r\nimport { Toolbar } from '../Toolbar';\r\nimport {JSEPS} from '../JSEPS';\r\nimport {SVGConverter} from '../SVGConverter';\r\nimport Palette from '../Palette';\r\nimport {PanelGroup} from '../PropertiesPanel';\r\n\r\nexport class Graph extends Control {\r\n    // canvas: HTMLElement;\r\n    root: SVGElement;\r\n    $graphModel: GraphModel;\r\n    options: Options;\r\n    canvasSize: Size;\r\n    nodeFactory: Object;\r\n    edgeFactory: Object;\r\n    layoutFactory: Object;\r\n    protected importFile: ImportFile;\r\n    private currentlayout: Layout;\r\n    // private layerToolBar: SVGSVGElement;\r\n    // https://stackoverflow.com/questions/15181452/how-to-save-export-inline-svg-styled-with-css-from-browser-to-image-file\r\n    private containerElements = ['svg', 'g'];\r\n    private relevantStyles = {\r\n        'rect': ['fill', 'stroke', 'stroke-width'],\r\n        'path': ['fill', 'stroke', 'stroke-width', 'opacity'],\r\n        'circle': ['fill', 'stroke', 'stroke-width'],\r\n        'line': ['stroke', 'stroke-width'],\r\n        'text': ['fill', 'font-size', 'text-anchor', 'font-family'],\r\n        'polygon': ['stroke', 'fill']\r\n    };\r\n\r\n    constructor(json: any, options: Options) {\r\n        super();\r\n        json = json || {};\r\n        if (json['data']) {\r\n            options = json['options'];\r\n            json = json['data'];\r\n            this.id = json['id'];\r\n        }\r\n        this.options = options || {features: { drag: true}};\r\n        if (json['init']) {\r\n            return;\r\n        }\r\n        if (!this.options.origin) {\r\n            this.options.origin = new Point(150, 45);\r\n        }\r\n        if (!this.options.style) {\r\n            // Style can be classic or modern\r\n            this.options.style = 'classic';\r\n        }\r\n        if (this.options.autoSave) {\r\n            Util.isAutoSave = options.autoSave;\r\n        }\r\n\r\n        this.initFactories();\r\n        this.initCanvas();\r\n        this.initFeatures(this.options.features);\r\n\r\n        // load previous session, if user wants it\r\n        // otherwise load the json data\r\n        if (!this.lookupInLocalStorage()) {\r\n            this.load(json);\r\n        }\r\n\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    public lookupInLocalStorage(): boolean {\r\n        if (!this.options.autoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (!Util.isLocalStorageSupported()) {\r\n            return false;\r\n        }\r\n        let diagram = Util.getDiagramFromLocalStorage();\r\n        if (diagram && diagram.length > 0) {\r\n            if (confirm('Restore previous session?')) {\r\n                let jsonData: JSON = JSON.parse(diagram);\r\n                this.load(jsonData);\r\n                this.layout();\r\n                return true;\r\n            } else {\r\n                Util.saveToLocalStorage( null);\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public fitSizeOnNodes(): void {\r\n        let maxWidth: number = 0;\r\n        let maxHeight: number = 0;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            let nodePos = node.getPos();\r\n            let nodeSize = node.getSize();\r\n            let nodeWidestPosX = nodePos.x + nodeSize.x;\r\n            let nodeWidestPosY = nodePos.y + nodeSize.y;\r\n\r\n            if (nodeWidestPosX > maxWidth) {\r\n                maxWidth = nodeWidestPosX;\r\n            }\r\n\r\n            if (nodeWidestPosY > maxHeight) {\r\n                maxHeight = nodeWidestPosY;\r\n            }\r\n        }\r\n\r\n        this.root.setAttributeNS(null, 'width', '' + (maxWidth + 100));\r\n        this.root.setAttributeNS(null, 'height', '' + (maxHeight + 50));\r\n    }\r\n\r\n    public saveAs(typ: string) {\r\n        typ = typ.toLowerCase();\r\n\r\n        // shrink size of graph to minimum. only to show up nodes\r\n        const currentSize = this.getRootSize();\r\n        this.fitSizeOnNodes();\r\n\r\n        if (typ === 'svg') {\r\n            this.exportSvg();\r\n        } else if (typ === 'png') {\r\n            this.exportPng();\r\n        } else if (typ === 'html') {\r\n            this.exportHtml();\r\n\r\n        } else if (typ === 'pdf') {\r\n            this.exportPdf();\r\n            // } else if (typ === 'eps') {\r\n            // this.ExportEPS();\r\n        }\r\n        else if (typ === 'json') {\r\n            this.exportJson();\r\n        }\r\n\r\n        // set the size back to default\r\n        this.root.setAttributeNS(null, 'width', '' + currentSize.width);\r\n        this.root.setAttributeNS(null, 'height', '' + currentSize.height);\r\n    }\r\n\r\n    /**\r\n     * generates a blob file and makes it available for download.\r\n     * @param type type of file\r\n     * @param data raw data\r\n     * @param name name of download file\r\n     */\r\n    public save(type: string, data: any, name: string, context: string) {\r\n        if (window['java']) {\r\n            window['java'].export(type, data, name, context);\r\n            return;\r\n        }\r\n        let a = document.createElement('a');\r\n        a.href = window.URL.createObjectURL(new Blob([data], { type: context }));\r\n        a.download = name;\r\n        document.body.appendChild(a);\r\n        a.click();\r\n        document.body.removeChild(a);\r\n    }\r\n\r\n    /** Exports the diagram as svg. */\r\n    public exportSvg(): void {\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        this.save('svg', this.serializeXmlNode(wellFormatedSvgDom), 'class_diagram.svg', 'image/svg+xml');\r\n    }\r\n\r\n    /** Exports the diagram as html. */\r\n    public exportHtml(): void {\r\n        let htmlFacade = '<html><head><title>DiagramJS - Classdiagram</title></head><body>$content</body></html>';\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        let svgAsXml = this.serializeXmlNode(wellFormatedSvgDom);\r\n\r\n        let htmlResult = htmlFacade.replace('$content', svgAsXml);\r\n\r\n        this.save('html', htmlResult, 'class_diagram.htm', 'text/plain');\r\n    }\r\n\r\n    /** Exports the diagram as json. */\r\n    public exportJson(): void {\r\n        let type = 'text/plain';\r\n        let jsonObj = Util.toJson(this.$graphModel);\r\n        let data = JSON.stringify(jsonObj, null, '\\t');\r\n\r\n        this.save('json', data, 'class_diagram.json', type);\r\n    }\r\n\r\n    /** Exports the diagram as pdf. */\r\n    public exportPdf(): void {\r\n        if (!window['jsPDF']) {\r\n            console.log('jspdf n.a.');\r\n            return;\r\n        }\r\n        let type = 'image/svg+xml';\r\n        let converter, pdf = new window['jsPDF']('l', 'px', [this.$graphModel.getSize().x, this.$graphModel.getSize().y]);\r\n        converter = new SVGConverter(this.$view, pdf, {removeInvalid: false});\r\n        pdf.save('Download.pdf');\r\n/*        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let canvas, context, a, image = new Image();\r\n        let size = this.getRootSize();\r\n\r\n        // create the loaded img source into a canvas. to generate a picture. then place this picture in the pdf\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            let pdf = new window['jsPDF']();\r\n\r\n            pdf.addImage(canvas.toDataURL('image/jpeg'), 'jpeg', 15, 40, 180, 160);\r\n            pdf.save('class_diagram.pdf');\r\n\r\n        };\r\n\r\n        image.src = url;\r\n        */\r\n    }\r\n\r\n    public import(data: string): void {\r\n        let rootElement = this.$graphModel.$view;\r\n        while (rootElement.hasChildNodes()) {\r\n            rootElement.removeChild(rootElement.firstChild);\r\n        }\r\n\r\n        while (this.$view.hasChildNodes()) {\r\n            this.$view.removeChild(this.$view.firstChild);\r\n        }\r\n\r\n        this.clearModel();\r\n        let jsonData = JSON.parse(data);\r\n        this.load(jsonData);\r\n        this.layout();\r\n    }\r\n\r\n    public exportEPS(): void {\r\n          let converter, doc = new JSEPS({inverting: true});\r\n            converter = new SVGConverter(this.$view, doc, {removeInvalid: false});\r\n            this.save('eps', doc.getData(), 'diagram.eps', doc.getType());\r\n    }\r\n\r\n    /** Exports the diagram as png. */\r\n    public exportPng(): void {\r\n        let canvas, context, a, image = new Image();\r\n        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let typ = 'image/svg+xml';\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let size = this.getRootSize();\r\n\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            a = document.createElement('a');\r\n            a.download = 'class_diagram.png';\r\n            a.href = canvas.toDataURL('image/png');\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            document.body.removeChild(a);\r\n        };\r\n\r\n        image.src = url;\r\n\r\n    }\r\n\r\n    public getSvgWithStyleAttributes(): Node {\r\n        let oDOM = this.$graphModel.$view.cloneNode(true);\r\n        this.readElement(oDOM, this.$graphModel.$view);\r\n\r\n        return oDOM;\r\n    }\r\n\r\n    public serializeXmlNode(xmlNode: any) {\r\n        if (window['XMLSerializer'] !== undefined) {\r\n            return (new window['XMLSerializer']()).serializeToString(xmlNode);\r\n        }\r\n        if (xmlNode.xml !== undefined) {\r\n            return xmlNode.xml;\r\n        }\r\n        return xmlNode.outerHTML;\r\n    }\r\n\r\n    public getRootSize(): Size {\r\n        let width: number;\r\n        let height: number;\r\n        width = +this.root.getAttribute('width');\r\n        height = +this.root.getAttribute('height');\r\n\r\n        return { width: width, height: height };\r\n    }\r\n\r\n        // Graph.prototype.ExportEPS = function () {\r\n        //     var converter, doc = new svgConverter.jsEPS({inverting: true});\r\n        //     converter = new svgConverter(this.board, doc, {removeInvalid: false});\r\n        //     doc.save();\r\n        // };\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        this.$graphModel = new GraphModel();\r\n        this.$graphModel.init(this);\r\n        this.$graphModel.load(json);\r\n    }\r\n\r\n    public clearModel(): void {\r\n        this.$graphModel.removeAllElements();\r\n        this.clearSvgRoot();\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.layout();\r\n        return this;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        return;\r\n    }\r\n\r\n    public getNextFreePosition(): Point {\r\n\r\n        if (!this.$graphModel) {\r\n            return new Point(50, 50);\r\n        }\r\n\r\n        let point = new Point(0, 50);\r\n\r\n        let maxX = 0;\r\n        let minX = 9000;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            maxX = Math.max(maxX, node.getPos().x);\r\n            minX = Math.min(minX, node.getPos().x);\r\n        }\r\n\r\n        if (minX > 170) {\r\n            point.x = 10;\r\n        }\r\n        else {\r\n            point.x = maxX + 200;\r\n        }\r\n\r\n        return point;\r\n    }\r\n\r\n    public addElement(type: string, dontDraw?: boolean): boolean {\r\n        let success = this.$graphModel.addElement(type);\r\n        if (success === true) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return success;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues?: Object, layout?: boolean, dontDraw?: boolean): DiagramElement {\r\n        let element = this.$graphModel.addElementWithValues(type, optionalValues);\r\n        if (element && layout) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public layout(dontDraw?: boolean): Graph {\r\n        this.getLayout().layout(this, this.$graphModel);\r\n\r\n        if (dontDraw) {\r\n            return this;\r\n        }\r\n\r\n        this.draw();\r\n        return this;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTDRAGOVER, EventBus.ELEMENTDRAGLEAVE, EventBus.ELEMENTDROP];\r\n    }\r\n\r\n    public draw() {\r\n        this.clearSvgRoot();\r\n        let model = this.$graphModel;\r\n        let root = this.root;\r\n        let max: Point = new Point();\r\n        if (this.options) {\r\n            max.x = this.options.minWidth || 0;\r\n            max.y = this.options.minHeight || 0;\r\n        }\r\n\r\n        for (let node of model.nodes) {\r\n            let svg = node.getSVG();\r\n            EventBus.register(node, svg);\r\n            root.appendChild(svg);\r\n\r\n            let temp: number;\r\n            temp = node.getPos().x + node.getSize().x;\r\n            if (temp > max.x) {\r\n                max.x = temp;\r\n            }\r\n            temp = node.getPos().y + node.getSize().y;\r\n            if (temp > max.y) {\r\n                max.y = temp;\r\n            }\r\n\r\n        }\r\n        Util.setAttributeSize(this.root, max.x + 60, max.y + 40);\r\n\r\n        for (let edge of model.edges) {\r\n            let svg = edge.getSVG();\r\n            EventBus.register(edge, svg);\r\n            root.appendChild(svg);\r\n        }\r\n    }\r\n\r\n    public getNode(id: string) {\r\n        return this.$graphModel.getNodeById(id);\r\n    }\r\n\r\n    public drawElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let svg = element.getSVG();\r\n        this.root.appendChild(svg);\r\n\r\n        // actualize root width size, if neccessary\r\n        // get current width of root\r\n        let rootSize = this.getRootSize();\r\n        let newWidth = element.getPos().x + element.getSize().x + 40;\r\n        let newHeight = element.getPos().y + element.getSize().y;\r\n\r\n        if (rootSize.width < newWidth) {\r\n            this.root.setAttributeNS(null, 'width', '' + newWidth);\r\n        }\r\n\r\n        if (rootSize.height < newHeight) {\r\n            this.root.setAttributeNS(null, 'height', '' + newHeight);\r\n        }\r\n\r\n        // draw edge\r\n        if (element instanceof Association) {\r\n            let edge = <Association>element;\r\n            edge.redraw(edge.$sNode);\r\n            let srcSvg = element.$sNode.getAlreadyDisplayingSVG();\r\n            let targetSvg = element.$tNode.getAlreadyDisplayingSVG();\r\n\r\n            this.root.appendChild(srcSvg);\r\n            this.root.appendChild(targetSvg);\r\n        }\r\n\r\n        EventBus.register(element, svg);\r\n    }\r\n\r\n    public removeElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let alreadyDisplayingSvg = element.getAlreadyDisplayingSVG();\r\n        if (Util.isParentOfChild(this.root, alreadyDisplayingSvg)) {\r\n            this.root.removeChild(alreadyDisplayingSvg);\r\n        }\r\n    }\r\n\r\n    public generate(packageName: string, path?: string) {\r\n        this.$graphModel.package = packageName;\r\n        this.$graphModel.genPath = path;\r\n\r\n        let data, result = Util.toJson(this.$graphModel);\r\n        data = JSON.stringify(result, null, '\\t');\r\n        if (window['java'] && typeof window['java'].generate === 'function') {\r\n            window['java'].generate(data);\r\n        }\r\n    }\r\n// REFACTORING dd\r\n    private readElement(parent: any, origData: any): void {\r\n        let children = parent.childNodes;\r\n        let origChildDat = origData.childNodes;\r\n\r\n        for (let cd = 0; cd < children.length; cd++) {\r\n            let child = children[cd];\r\n\r\n            let tagName = child.tagName;\r\n            if (this.containerElements.indexOf(tagName) !== -1) {\r\n                this.readElement(child, origChildDat[cd]);\r\n            } else if (tagName in this.relevantStyles) {\r\n                let styleDef = window.getComputedStyle(origChildDat[cd]);\r\n\r\n                let styleString = '';\r\n                for (let st = 0; st < this.relevantStyles[tagName].length; st++) {\r\n                    styleString += this.relevantStyles[tagName][st] + ':' + styleDef.getPropertyValue(this.relevantStyles[tagName][st]) + '; ';\r\n                }\r\n\r\n                child.setAttribute('style', styleString);\r\n            }\r\n        }\r\n    }\r\n\r\n    private createPattern(): Element {\r\n        const defs = Util.createShape({ tag: 'defs' });\r\n        const pattern = Util.createShape({\r\n            tag: 'pattern',\r\n            id: 'raster',\r\n            patternUnits: 'userSpaceOnUse',\r\n            width: 40,\r\n            height: 40\r\n        });\r\n        const path = 'M0 4 L0 0 L4 0 M36 0 L40 0 L40 4 M40 36 L40 40 L36 40 M4 40 L0 40 L0 36';\r\n        const cross = Util.createShape({\r\n            tag: 'path',\r\n            d: path,\r\n            stroke: '#DDD',\r\n            'stroke-width': 1,\r\n            fill: 'none'\r\n        });\r\n\r\n        const rect = Util.createShape({\r\n            tag: 'rect',\r\n            x: 0,\r\n            y: 0,\r\n            width: 40,\r\n            height: 40,\r\n            fill: 'none'\r\n        });\r\n        pattern.appendChild(rect);\r\n        pattern.appendChild(cross);\r\n        defs.appendChild(pattern);\r\n        return defs;\r\n    }\r\n\r\n    private clearSvgRoot() {\r\n        const root = this.root;\r\n        this.$graphModel.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n        while (root.firstChild) {\r\n            root.removeChild(root.firstChild);\r\n        }\r\n\r\n        root.appendChild(this.createPattern());\r\n        let fillValue = 'none';\r\n        if (this.options.raster) {\r\n            fillValue = 'url(#raster)';\r\n        }\r\n        let background = Util.createShape({\r\n            tag: 'rect',\r\n            id: 'background',\r\n            width: 5000,\r\n            height: 5000,\r\n            x: 0,\r\n            y: 0,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: fillValue\r\n        });\r\n        root.appendChild(background);\r\n\r\n        // delete inline Edit, if exists\r\n        let inlineEdit = document.getElementById('inlineEdit');\r\n        if (inlineEdit && document.body.contains(inlineEdit)) {\r\n            document.body.removeChild(inlineEdit);\r\n        }\r\n    }\r\n\r\n    private getLayout(): Layout {\r\n        if (this.currentlayout) {\r\n            return this.currentlayout;\r\n        }\r\n\r\n        let layout = this.options.layout || '';\r\n        if (this.layoutFactory[layout]) {\r\n            this.currentlayout = new this.layoutFactory[layout]();\r\n        } else {\r\n            this.currentlayout = new layouts.DagreLayout();\r\n        }\r\n\r\n        return this.currentlayout;\r\n    }\r\n\r\n    private initFactories() {\r\n\r\n        let noder = nodes;\r\n        this.nodeFactory = {};\r\n        for (let id in noder) {\r\n            if (noder.hasOwnProperty(id) === true) {\r\n                this.nodeFactory[id] = noder[id];\r\n            }\r\n        }\r\n\r\n        let edger = edges;\r\n        this.edgeFactory = {};\r\n        for (let id in edger) {\r\n            if (edger.hasOwnProperty(id) === true) {\r\n                this.edgeFactory[id] = edger[id];\r\n            }\r\n        }\r\n\r\n        let layouter = layouts;\r\n        this.layoutFactory = {};\r\n        for (let id in layouter) {\r\n            if (layouter.hasOwnProperty(id) === true) {\r\n                this.layoutFactory[id] = layouter[id];\r\n            }\r\n        }\r\n    }\r\n\r\n    private initCanvas() {\r\n        if (this.options.canvas) {\r\n            this.$view = document.getElementById(this.options.canvas);\r\n        }\r\n        if (!this.$view) {\r\n            this.$view = document.createElement('div');\r\n            this.$view.setAttribute('class', 'diagram');\r\n            document.body.appendChild(this.$view);\r\n        }\r\n    }\r\n\r\n    private initFeatures(features: any) {\r\n\r\n        if (features) {\r\n            if (features.newedge) {\r\n                EventBus.subscribe(new NewEdge(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            this.importFile = new ImportFile(this);\r\n            if (features.import) {\r\n                EventBus.subscribe(this.importFile, 'dragover', 'dragleave', 'drop');\r\n            }\r\n            if (features.zoom) {\r\n                let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n                EventBus.subscribe(new Zoom(this), mousewheel);\r\n            }\r\n            if (features.drag) {\r\n                EventBus.subscribe(new Drag(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            if (features.select) {\r\n                EventBus.subscribe(new Select(this), 'click', 'drag');\r\n            }\r\n            if (features.palette) {\r\n                new Palette(this).show();\r\n            }\r\n            if (features.toolbar) {\r\n                new Toolbar(this).show();\r\n            }\r\n            if (features.properties) {\r\n                let propertyPanel = new PanelGroup(this);\r\n                // let dispatcher = new PropertiesDispatcher(this);\r\n                EventBus.subscribe(propertyPanel, 'dblclick', 'click', EventBus.RELOADPROPERTIES);\r\n                propertyPanel.show();\r\n            }\r\n            if (features.addnode) {\r\n                EventBus.subscribe(new AddNode(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n        }\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport {DiagramElement, Point} from './BaseElements';\r\nimport {Association} from './edges';\r\nimport {Node} from './nodes';\r\nimport {Control} from '../Control';\r\nimport {Util} from '../util';\r\nimport {EventBus} from '../EventBus';\r\n\r\nexport class GraphModel extends DiagramElement {\r\n    nodes: Node[] = [];\r\n    edges: Association[] = [];\r\n    package: string;\r\n    genPath: string;\r\n    $isLoading: boolean;\r\n\r\n    public load(data?: any) {\r\n\r\n        this.$isLoading = true;\r\n        data = data || {};\r\n        this.property = data.type || data.property || 'classdiagram';\r\n        this.id = 'RootElement';\r\n        if (data.nodes) {\r\n            for (let node of data.nodes) {\r\n                this.addNode(node);\r\n            }\r\n        }\r\n        if (data.edges) {\r\n            for (let edge of data.edges) {\r\n                this.addEdge(edge);\r\n            }\r\n        }\r\n\r\n        this.$isLoading = false;\r\n    }\r\n\r\n    public getNodeByPosition(x: number, y: number): Node {\r\n        for (let node of this.nodes) {\r\n            let posOfNode: Point = (<Node>node).getPos();\r\n            let sizeOfNode: Point = (<Node>node).getSize();\r\n\r\n            if ((posOfNode.x <= x && (posOfNode.x + sizeOfNode.x) >= x)\r\n                && (posOfNode.y <= y && (posOfNode.y + sizeOfNode.y) >= y)) {\r\n                return node;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.initCanvas();\r\n        return this;\r\n    }\r\n\r\n    public addElement(type: string): boolean {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n        if (element) {\r\n            Util.saveToLocalStorage(this);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues: Object): DiagramElement {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n\r\n        // position\r\n        if (optionalValues) {\r\n            if (optionalValues.hasOwnProperty('x') && optionalValues.hasOwnProperty('y')) {\r\n                let x = optionalValues['x'];\r\n                let y = optionalValues['y'];\r\n                element.withPos(x, y);\r\n            }\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return element;\r\n    }\r\n\r\n    public removeAllElements(): void {\r\n\r\n        let nodesLength = this.nodes.length;\r\n        for (let i = 0; i < nodesLength; i++) {\r\n            this.removeElement(this.nodes[0].id);\r\n        }\r\n\r\n        this.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n    }\r\n\r\n    public removeElement(id: string): boolean {\r\n\r\n        let element = this.getDiagramElementById(id);\r\n        if (!element) {\r\n            return false;\r\n        }\r\n\r\n        (<Graph>this.$owner).removeElement(element);\r\n\r\n        if (element instanceof Node) {\r\n\r\n            let idxOfNode = this.nodes.indexOf(element);\r\n            if (idxOfNode > -1) {\r\n                this.nodes.splice(idxOfNode, 1);\r\n            }\r\n\r\n            while (element.$edges.length > 0) {\r\n                this.removeElement(element.$edges[0].id);\r\n            }\r\n\r\n            element.$edges = [];\r\n        }\r\n        else if (element instanceof Association) {\r\n\r\n            let idxOfEdge = this.edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                this.edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from source\r\n            idxOfEdge = element.$sNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$sNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from target\r\n            idxOfEdge = element.$tNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$tNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return true;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        const size = 10;\r\n        const path = `M${-size} 0 L${+size} 0 M0 ${-size} L0 ${+size}`;\r\n\r\n        const attr = {\r\n            tag: 'path',\r\n            id: 'origin',\r\n            d: path,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: 'none'\r\n        };\r\n        let shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: 0 - size,\r\n            y: 0 - size / 1.5,\r\n            'text-anchor': 'end',\r\n            'font-family': 'Verdana',\r\n            'font-size': '9',\r\n            fill: '#999'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = '(0, 0)';\r\n\r\n        let group = this.createShape({tag: 'g'});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEUP, EventBus.ELEMENTMOUSELEAVE, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTMOUSEWHEEL, EventBus.ELEMENTCLICK, EventBus.ELEMENTDRAG];\r\n    }\r\n\r\n    public getNewId(prefix?: string): string {\r\n        let id = (prefix ? prefix.toLowerCase() + '-' : '') + Math.floor(Math.random() * 100000);\r\n        return id;\r\n    }\r\n\r\n    public getEdgeById(id: string): Association {\r\n        for (let edge of this.edges) {\r\n            if (edge.id === id) {\r\n                return edge;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    public getDiagramElementById(id: string): DiagramElement {\r\n\r\n        return this.getNodeById(id) || this.getEdgeById(id);\r\n    }\r\n\r\n    /**\r\n     * Add an edge with data in json file. Optional you can say, that the edge should have\r\n     * the points of source node and target node.\r\n     * @param edge information about edge in json\r\n     * @param withPosOfNodes optional. set points to line of source and target node\r\n     */\r\n    public addEdge(edge: any, withPosOfNodes?: boolean): Association {\r\n\r\n        // lookup in factoryedges and check if the edge type realy exists\r\n        if (edge && edge.type) {\r\n            const graph = (<Graph>this.$owner);\r\n            let typeExists = false;\r\n            for (let edgeType in graph.edgeFactory) {\r\n                if (edgeType === edge.type) {\r\n                    typeExists = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!typeExists) {\r\n                edge.type = 'Association';\r\n            }\r\n        }\r\n\r\n        let type = edge.type || 'Association';\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n\r\n        let newEdge = <Association>this.createElement(type, id, edge);\r\n        newEdge.type = type;\r\n\r\n        let source: Node;\r\n        let sourceAsString: string = edge.source.id || edge.source;\r\n        if (sourceAsString) {\r\n            source = this.getNodeById(sourceAsString);\r\n            if (!source) {\r\n                let nodeID = edge.source;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                source = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                source.init(this);\r\n            }\r\n        }\r\n\r\n        let target: Node;\r\n        let targetAsString: string = edge.target.id || edge.target;\r\n        if (targetAsString) {\r\n            target = this.getNodeById(targetAsString);\r\n            if (!target) {\r\n                let nodeID = edge.target;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                target = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                target.init(this);\r\n            }\r\n        }\r\n\r\n        newEdge.withItem(source, target);\r\n\r\n        if (withPosOfNodes) {\r\n            let srcX = source.getPos().x + (source.getSize().x / 2);\r\n            let srcY = source.getPos().y + (source.getSize().y / 2);\r\n\r\n            let targetX = target.getPos().x + (target.getSize().x / 2);\r\n            let targetY = target.getPos().y + (target.getSize().y / 2);\r\n\r\n            newEdge.addPoint(srcX, srcY);\r\n            newEdge.addPoint(targetX, targetY);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public createElement(type: string, id: string, data: Object): DiagramElement {\r\n        const graph = <Graph>this.$owner;\r\n        let element: DiagramElement;\r\n        if (graph.nodeFactory[type]) {\r\n            element = new graph.nodeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.nodes.push(<Node>element);\r\n        }\r\n        if (graph.edgeFactory[type]) {\r\n            element = new graph.edgeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.edges.push(<Association>element);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public getNodeById(id: string): Node {\r\n        for (let node of this.nodes) {\r\n            if (node.id === id) {\r\n                return node;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    private initCanvas() {\r\n        const graph = <Graph>this.$owner;\r\n        graph.canvasSize = {width: graph.$view.clientWidth, height: graph.$view.clientHeight};\r\n        graph.root = Util.createShape({\r\n            tag: 'svg',\r\n            id: 'root',\r\n            width: graph.canvasSize.width,\r\n            height: graph.canvasSize.height\r\n            // FIXME,viewBox: `${this.$graph.options.origin.x * -1} ${this.$graph.options.origin.y * -1} ${this.$graph.canvasSize.width} ${this.$graph.canvasSize.height}`\r\n        });\r\n        this.$view = graph.root;\r\n        graph.$view.appendChild(graph.root);\r\n\r\n        let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    private addNode(node: Node): Node {\r\n        let type = node['type'] || node.property || 'Node';\r\n        type = Util.toPascalCase(type);\r\n        let id = node['id'] || node['name'] || this.getNewId(type);\r\n\r\n        return <Node>this.createElement(type, id, node);\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction } from './index';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\n\r\nexport abstract class Aggregate extends Association {\r\n\r\n    protected $diamond: Element;\r\n\r\n    public getSVG(): Element {\r\n\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled diamond\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n        };\r\n\r\n        this.$diamond = this.createShape(attr);\r\n\r\n        group.appendChild(this.$diamond);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint: Point = this.$points[0];\r\n        let direction: Direction = Direction.Down;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if (this.$sNode.id === startNode.id || this.$points.length == 2) {\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$diamond.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint: Point, direction: Direction): string {\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                path = `M${startX} ${startY} L${startX + 6} ${startY + 10} L${startX} ${startY + 20} L${startX - 6} ${startY + 10} Z`;\r\n                startPoint.y = startPoint.y+20;\r\n                break;\r\n            case Direction.Right:\r\n                path = `M${startX} ${startY} L${startX - 10} ${startY + 6} L${startX - 20} ${startY} L${startX - 10} ${startY - 6} Z`;\r\n                startPoint.x = startPoint.x-20;\r\n                break;\r\n            case Direction.Left:\r\n                path = `M${startX} ${startY} L${startX + 10} ${startY - 6} L${startX + 20} ${startY} L${startX + 10} ${startY + 6} Z`;\r\n                startPoint.x = startPoint.x+20;\r\n                break;\r\n            case Direction.Down:\r\n                path = `M${startX} ${startY} L${startX - 6} ${startY - 10} L${startX} ${startY - 20} L${startX + 6} ${startY - 10} Z`;\r\n                startPoint.y = startPoint.y-20;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Aggregation extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'white');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { DiagramElement, Line, Point } from '../BaseElements';\r\nimport { Node } from '../nodes';\r\nimport { InfoText } from '../nodes/InfoText';\r\nimport { Util } from '../../util';\r\nimport { EventBus } from '../../EventBus';\r\nimport * as edges from '../edges';\r\nimport { Graph } from '../Graph';\r\n\r\nexport const enum Direction {\r\n    Up, Down, Left, Right\r\n}\r\n\r\nexport class Association extends DiagramElement {\r\n    public source: string;\r\n    public target: string;\r\n    public type: string;\r\n    public $sNode: Node;\r\n    public $tNode: Node;\r\n    public lineStyle: string;\r\n    public $points: Point[] = [];\r\n    public $pathSvg: Element;\r\n    public $pathWideSvg: Element;\r\n    public info: InfoText;\r\n    public sourceInfo: InfoText;\r\n    public targetInfo: InfoText;\r\n    $m: number;\r\n    $n: number;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super();\r\n\r\n        this.withData(data);\r\n    }\r\n\r\n    public withData(data: JSON | string | Object | any): Association {\r\n\r\n        if (!data) {\r\n            return this;\r\n        }\r\n        let srcInfo;\r\n        let trgInfo;\r\n\r\n        if (data.source && typeof data.source !== 'string') {\r\n            srcInfo = data.source;\r\n        }\r\n        else if (data.sourceInfo && typeof data.sourceInfo !== 'string') {\r\n            srcInfo = data.sourceInfo;\r\n        }\r\n\r\n        if (srcInfo) {\r\n            this.sourceInfo = new InfoText(srcInfo);\r\n            this.sourceInfo.$owner = this;\r\n        }\r\n\r\n        if (data.target && typeof data.target !== 'string') {\r\n            trgInfo = data.target;\r\n        }\r\n        else if (data.targetInfo && typeof data.targetInfo !== 'string') {\r\n            trgInfo = data.targetInfo;\r\n        }\r\n\r\n        if (trgInfo) {\r\n            this.targetInfo = new InfoText(trgInfo);\r\n            this.targetInfo.$owner = this;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    public updateSrcCardinality(cardinality: string): void {\r\n        this.sourceInfo = this.updateCardinality(this.$sNode, this.sourceInfo, cardinality);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetCardinality(cardinality: string): void {\r\n        this.targetInfo = this.updateCardinality(this.$tNode, this.targetInfo, cardinality);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateSrcProperty(property: string): void {\r\n        this.sourceInfo = this.updateProperty(this.$sNode, this.sourceInfo, property);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetProperty(property: string): void {\r\n        this.targetInfo = this.updateProperty(this.$tNode, this.targetInfo, property);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public withItem(source: Node, target: Node): Association {\r\n        source.$edges.push(this);\r\n        target.$edges.push(this);\r\n        this.$sNode = source;\r\n        this.$tNode = target;\r\n        this.source = source.id;\r\n        this.target = target.id;\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let group = Util.createShape({ tag: 'g', id: this.id, class: 'SVGEdge' });\r\n\r\n        let path: string = this.getPath();\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'none'\r\n        };\r\n        let pathLine = this.createShape(attr);\r\n\r\n        //attr['style'] = 'stroke-width:20;opacity:0;width:20;height:20';\r\n        let extendedPathLine = Util.createShape(attr);\r\n\r\n        group.appendChild(extendedPathLine);\r\n        group.appendChild(pathLine);\r\n\r\n        if (this.sourceInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.sourceInfo.getSVG());\r\n        }\r\n        if (this.targetInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.targetInfo.getSVG());\r\n        }\r\n\r\n        this.$pathWideSvg = extendedPathLine;\r\n        this.$pathSvg = pathLine;\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.EDITOR, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    public convertEdge(type: string, newId: string, redraw?: boolean): Association {\r\n        if (!edges[type]) {\r\n            return this;\r\n        }\r\n\r\n        let newEdge: Association = new edges[type]();\r\n        newEdge.withItem(this.$sNode, this.$tNode);\r\n        newEdge.id = newId;\r\n        newEdge.type = type;\r\n        newEdge.lineStyle = this.lineStyle;\r\n        newEdge.$owner = this.$owner;\r\n\r\n        if (this.sourceInfo) {\r\n            newEdge.sourceInfo = new InfoText({ property: this.sourceInfo.property, cardinality: this.sourceInfo.cardinality });\r\n            newEdge.sourceInfo.$owner = newEdge;\r\n        }\r\n\r\n        if (this.targetInfo) {\r\n            newEdge.targetInfo = new InfoText({ property: this.targetInfo.property, cardinality: this.targetInfo.cardinality });\r\n            newEdge.targetInfo.$owner = newEdge;\r\n        }\r\n\r\n        this.$points.forEach(point => {\r\n            newEdge.addPoint(point.x, point.y);\r\n        });\r\n\r\n        let graph = <Graph>this.getRoot();\r\n        if (!graph) {\r\n            return this;\r\n        }\r\n\r\n        // update model. insert the edge exact on the same index, like the old edge\r\n        let idx = graph.$graphModel.edges.indexOf(this);\r\n        graph.$graphModel.removeElement(this.id);\r\n        if (idx > -1) {\r\n            graph.$graphModel.edges.splice(idx, 0, newEdge);\r\n        }\r\n        else {\r\n            graph.$graphModel.edges.push(newEdge);\r\n        }\r\n\r\n        if (!redraw) {\r\n            return newEdge;\r\n        }\r\n\r\n        let svgRoot: Element;\r\n        if (graph) {\r\n            svgRoot = graph.root;\r\n        }\r\n        else {\r\n            svgRoot = document.getElementById('root');\r\n        }\r\n        let newEdgeSvg = newEdge.getSVG();\r\n\r\n        // update graph\r\n        graph.removeElement(this);\r\n        svgRoot.appendChild(newEdgeSvg);\r\n\r\n        // redraw the edge from both sides to get the correct display\r\n        // if the type is edge, so the path can be redraw.\r\n        // if not, so the inherited class redraw the path with his own logic\r\n\r\n        let dontDrawPath: boolean = (type !== 'Edge');\r\n        newEdge.redraw(newEdge.$sNode, dontDrawPath);\r\n        newEdge.redraw(newEdge.$tNode, dontDrawPath);\r\n\r\n        EventBus.register(newEdge, newEdgeSvg);\r\n\r\n        this.sourceInfo = undefined;\r\n        this.targetInfo = undefined;\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n        // redraw the first point\r\n        // check which point is the near to startnode\r\n        let endPoint: Point;\r\n        let recalcPoint: Point;\r\n        let endPointIdx: number;\r\n\r\n        if (this.$sNode.id === startNode.id) {\r\n            recalcPoint = this.$points[0];\r\n            endPointIdx = 1;\r\n        } else if (this.$tNode.id === startNode.id) {\r\n            recalcPoint = this.$points[this.$points.length - 1];\r\n            endPointIdx = this.$points.length - 2;\r\n        }\r\n\r\n        endPoint = this.$points[endPointIdx];\r\n\r\n        // calculate and set new position of point to redraw\r\n        this.calcIntersection(startNode, recalcPoint, endPoint);\r\n\r\n        // remove the 2nd point next to startnode, if the node was dragged upper the point\r\n        if (this.$points.length > 2 && this.$tNode.id === startNode.id && endPoint.y > (startNode.getPos().y + (startNode.getSize().y / 2))) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$tNode.id === startNode.id && this.$points.length === 2) {\r\n            this.calcIntersection(this.$sNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (this.$points.length > 2 && this.$sNode.id === startNode.id && (startNode.getPos().y + (startNode.getSize().y / 2) > endPoint.y)) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$sNode.id === startNode.id && this.$points.length === 2) {\r\n\r\n            this.calcIntersection(this.$tNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (!dontDrawPoints) {\r\n            this.redrawPointsAndInfo();\r\n        }\r\n    }\r\n\r\n    public getPath(): string {\r\n\r\n        if (this.$points.length === 0) {\r\n            return '';\r\n        }\r\n\r\n        let path: string = 'M';\r\n        for (let i = 0; i < this.$points.length; i++) {\r\n            let point: Point = this.$points[i];\r\n            if (i > 0) {\r\n                path += 'L';\r\n            }\r\n            path += Math.floor(point.x) + ' ' + Math.floor(point.y) + ' ';\r\n        }\r\n\r\n        return path;\r\n    }\r\n    public calcInfoPosNew(infoTxt: InfoText, node: Node): Point {\r\n\r\n        if (!infoTxt || !node) {\r\n            return null;\r\n        }\r\n\r\n        // 1. step: get direction\r\n        let startPoint: Point;\r\n        let nextToStartPoint: Point;\r\n        if (this.$sNode.id === node.id) {\r\n            startPoint = this.$points[0];\r\n            nextToStartPoint = this.$points[1];\r\n        }\r\n        else if (this.$tNode.id === node.id) {\r\n            startPoint = this.$points[this.$points.length - 1];\r\n            nextToStartPoint = this.$points[this.$points.length - 2];\r\n        }\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(node, startPoint);\r\n\r\n        let x: number;\r\n        let y: number;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                break;\r\n            case Direction.Right:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x - (infoTxt.getSize().x) - 5;\r\n                break;\r\n            case Direction.Left:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x + 5;\r\n                break;\r\n            case Direction.Down:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        // assign calculated position to infotext\r\n        return new Point(x, y);\r\n    }\r\n\r\n    public clearPoints(): any {\r\n        this.$points = [];\r\n        this.$points = [];\r\n    }\r\n\r\n    public addPoint(x: number, y: number): Point[] {\r\n        this.$points.push(new Point(x, y));\r\n\r\n        return this.$points;\r\n    }\r\n\r\n    protected redrawPointsAndInfo(): void {\r\n        // redraw the edge with the new position\r\n        let path: string = this.getPath();\r\n        this.$pathSvg.setAttributeNS(null, 'd', path);\r\n        this.$pathWideSvg.setAttributeNS(null, 'd', path);\r\n\r\n        this.redrawSourceInfo();\r\n        this.redrawTargetInfo();\r\n    }\r\n\r\n    protected redrawSourceInfo() {\r\n        if (this.sourceInfo) {\r\n            let newPosOfSrc = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.redrawFromEdge(newPosOfSrc);\r\n        }\r\n    }\r\n\r\n    protected redrawTargetInfo() {\r\n        if (this.targetInfo) {\r\n            let newPosOfTarget = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.redrawFromEdge(newPosOfTarget);\r\n        }\r\n    }\r\n\r\n    protected getDirectionOfPointToNode(node: Node, pointNearNode: Point): Direction {\r\n        /*\r\n            Example to calculate the direction of nearest point to Node\r\n\r\n            node\r\n         x1_ _ _ _\r\n          |       |\r\n          |       |. pointNearNode\r\n          |       |\r\n          |_ _ _ x2\r\n\r\n          the calculation would return Direction.Left\r\n        */\r\n\r\n        let x1: Point = node.getPos();\r\n        let x2: Point = new Point((x1.x + node.getSize().x), (x1.y + node.getSize().y));\r\n        let direction: Direction = Direction.Down;\r\n\r\n        if (x1.y >= pointNearNode.y) {\r\n            direction = Direction.Down;\r\n        }\r\n        if (x2.y <= pointNearNode.y) {\r\n            direction = Direction.Up;\r\n        }\r\n        if (x1.x >= pointNearNode.x) {\r\n            direction = Direction.Right;\r\n        }\r\n        if (x2.x <= pointNearNode.x) {\r\n            direction = Direction.Left;\r\n        }\r\n\r\n        return direction;\r\n    }\r\n\r\n    private updateCardinality(node: Node, infoText: InfoText, cardinality: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'cardinality': cardinality });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.cardinality = cardinality;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateCardinality(cardinality);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private updateProperty(node: Node, infoText: InfoText, property: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'property': property });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.property = property;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateProperty(property);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private calcIntersection(startNode: Node, recalcPoint: Point, endPoint: Point): Point {\r\n\r\n        // https://www.mathelounge.de/21534/schnittpunkt-einer-linie-mit-den-randern-eines-rechtecks\r\n        let h = startNode.getSize().y;\r\n        let w = startNode.getSize().x;\r\n\r\n        let x1: number = startNode.getPos().x + (w / 2);\r\n        let y1: number = startNode.getPos().y + (h / 2);\r\n\r\n        let x2: number = endPoint.x;\r\n        let y2: number = endPoint.y;\r\n\r\n        let newX: number = recalcPoint.x;\r\n        let newY: number = recalcPoint.y;\r\n\r\n        if (x2 > x1) {\r\n            newX = x1 + (w / 2);\r\n        }\r\n        else if (x2 < x1) {\r\n            newX = x1 - (w / 2);\r\n        }\r\n        else {\r\n            newX = x1;\r\n        }\r\n\r\n        if ((x2 - x1) !== 0) {\r\n            newY = ((y2 - y1) / (x2 - x1) * (newX - x1)) + y1;\r\n        }\r\n        else {\r\n            if (y1 > y2) {\r\n                newY = startNode.getPos().y;\r\n            }\r\n            else {\r\n                newY = startNode.getPos().y + h;\r\n            }\r\n        }\r\n\r\n        // if the statement is not true, so the intersection is at the horizontal line\r\n        if (!((y1 - (h / 2) <= newY) && newY <= y1 + (h / 2))) {\r\n\r\n            if (y2 > y1) {\r\n                newY = y1 + (h / 2);\r\n            }\r\n            else {\r\n                newY = y1 - (h / 2);\r\n            }\r\n\r\n            if ((x2 - x1) !== 0) {\r\n                let tmp = ((y2 - y1) / (x2 - x1));\r\n                newX = (newY + (tmp * x1) - y1) / tmp;\r\n            }\r\n            else {\r\n                newX = x1;\r\n            }\r\n        }\r\n\r\n        recalcPoint.x = Math.ceil(newX);\r\n        recalcPoint.y = Math.ceil(newY);\r\n\r\n        return null;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Composition extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'black');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { Association } from './Association';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\nimport { Direction } from '../index';\r\n\r\nexport class Generalisation extends Association {\r\n\r\n    public $TARGET_ELEMENT_HEIGHT : number = 12;\r\n    protected $targetElement: Element;\r\n\r\n    public getSVG(): Element {\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction : Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled arrow\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'white'\r\n          };\r\n\r\n        this.$targetElement = this.createShape(attr);\r\n\r\n        group.appendChild(this.$targetElement);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean) : void {\r\n\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint : Point = this.$points[0];\r\n        let direction : Direction = Direction.Up;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if(this.$sNode.id === startNode.id || this.$points.length == 2){\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$targetElement.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint : Point, direction : Direction) : string{\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch(direction){\r\n            case Direction.Up:\r\n            path = `M${startX} ${startY+3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y+12;\r\n            break;\r\n            case Direction.Right:\r\n            path = `M${startX-3} ${startY} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x-12;\r\n            break;\r\n            case Direction.Left:\r\n            path = `M${startX+3} ${startY} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x+12;\r\n            break;\r\n            case Direction.Down:\r\n            path = `M${startX} ${startY-3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y-12;\r\n            break;\r\n            default :\r\n            break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n\r\n}\r\n","import { Generalisation } from './Generalisation';\r\n\r\nexport class Implements extends Generalisation {\r\n\r\n    public getSVG(): Element {\r\n        let group = super.getSVG();\r\n\r\n        this.$pathSvg.setAttributeNS(null, 'stroke-dasharray', '3, 3');\r\n\r\n        return group;\r\n    }\r\n}\r\n","export * from './Association';\r\nexport * from './Aggregate';\r\nexport * from './Aggregation';\r\nexport * from './Composition';\r\nexport * from './Generalisation';\r\nexport * from './Implements';","export * from './edges';\r\nexport * from './nodes';\r\nexport * from './BaseElements';\r\nexport * from './Graph';\r\nexport * from './Model';\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Attribute extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 28.06.2017.\r\n */\r\nimport {Control} from \"../../Control\";\r\n\r\nexport class AutoComplete extends Control {\r\n    private $inputField:HTMLInputElement;\r\n    private $dataList:HTMLDataListElement;\r\n    private $selected:HTMLSelectElement;\r\n    private $items:HTMLDivElement;\r\n    private isMultiple:boolean;\r\n\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        let div:HTMLDivElement = document.createElement('div');\r\n        this.$view = div;\r\n        this.$inputField = document.createElement('input');\r\n        this.$dataList = document.createElement(\"datalist\");\r\n        this.$dataList.id = \"data_\"+this.id;\r\n        this.$inputField.setAttribute(\"list\", \"data_\"+this.id);\r\n        if(data[\"value\"]) {\r\n            let values = data[\"value\"];\r\n            this.isMultiple = data[\"multiple\"] != null;\r\n            let option:HTMLOptionElement;\r\n            if(this.isMultiple) {\r\n                this.$selected = document.createElement(\"select\");\r\n                this.$selected.className = \"hide\";\r\n                this.$selected.multiple = true;\r\n\r\n                this.$selected.id = this.id;\r\n                this.$items = document.createElement(\"div\");\r\n                this.$items.className = \"selectedList\";\r\n                div.appendChild(this.$items);\r\n                this.$inputField.className = \"selectedInput\";\r\n                div.appendChild(this.$selected);\r\n                this.$view[\"style\"].setProperty(\"float\", \"left\");\r\n                let that = this;\r\n                this.$inputField.oninput = function(){that.onChange();}\r\n            } else {\r\n                this.$inputField.id = this.id;\r\n            }\r\n            for (let attr in values) {\r\n                if (!values.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                option = document.createElement(\"option\");\r\n                option.value = values[attr];\r\n                this.$dataList.appendChild(option);\r\n                if(this.isMultiple) {\r\n                    option = document.createElement(\"option\");\r\n                    option.value = values[attr];\r\n                    option.innerHTML = values[attr];\r\n                    this.$selected.appendChild(option);\r\n                }\r\n        }\r\n\r\n            div.appendChild(this.$inputField);\r\n            div.appendChild(this.$dataList);\r\n        }\r\n\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n            if(this.isMultiple) {\r\n                div.appendChild(this.$selected);\r\n            }\r\n        }\r\n\r\n        parent.appendChild(this);\r\n    }\r\n\r\n    public onChange() : void {\r\n        let textValue:string = this.$inputField.value;\r\n        if(textValue.length<1) {\r\n            return;\r\n        }\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == textValue) {\r\n                if(item.selected == false) {\r\n                    item.selected = true;\r\n                    item.defaultSelected = true;\r\n                    let test = document.createElement(\"li\");\r\n                    let that = this;\r\n                    test.onclick = function() {that.onDelete(item.value, test);};\r\n                    test.className = \"selectedItem\";\r\n                    test.innerHTML = item.value;\r\n                    this.$items.appendChild(test);\r\n                    this.$inputField.value = \"\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n    public onDelete(value:string, selectedItem:HTMLLIElement) : void {\r\n        this.$items.removeChild(selectedItem);\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == value ) {\r\n                if(item.selected) {\r\n                    item.selected = false;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","import {Control} from '../../Control';\r\n\r\nexport class BR extends Control {\r\n    public load(json: JSON): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('br');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            this.$view.setAttribute(attr, data[attr]);\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\nexport class Button extends Control {\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        this.$view = document.createElement('button');\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\nimport { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\nimport { Size } from '../index';\r\nimport ClazzProperty from './ClazzProperty';\r\nimport {SymbolLibary} from './Symbol';\r\nimport {StereoType} from './StereoType';\r\nimport {GraphListener} from '../../handlers/GraphListener';\r\n\r\nexport class Class extends Node {\r\n    public attributes: Attribute[] = [];\r\n    public methods: Method[] = [];\r\n    public modifier: string;\r\n    public stereoType: string;\r\n\r\n    protected $attrHeight = 25;\r\n    protected $attrFontSize = 12;\r\n    protected $labelView: Element;\r\n\r\n    constructor(json: JSON | string | Object | any) {\r\n        super(json);\r\n        return this;\r\n    }\r\n\r\n    public load(json?: any) {\r\n        if (!json) {\r\n            json = {};\r\n        }\r\n        let y = this.$labelHeight;\r\n        let labelObj = json.name || json.id || ('New ' + this.property);\r\n\r\n        let width: number = 150;\r\n        width = Math.max(width, Util.sizeOf(labelObj).width + 60);\r\n\r\n        if (json['attributes']) {\r\n            for (let attr of json['attributes']) {\r\n\r\n                let attrObj = new Attribute(attr);\r\n                attrObj.$owner = this;\r\n                this.attributes.push(attrObj);\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(attrObj.toString()).width);\r\n                let listener = new GraphListener(attrObj);\r\n                attrObj.$data.addListener(listener);\r\n            }\r\n        }\r\n        if (json['stereotype']) {\r\n            this.stereoType = json['stereotype'];\r\n        }\r\n        if (json['methods']) {\r\n            for (let method of json['methods']) {\r\n\r\n                let methodObj = new Method(method);\r\n                methodObj.$owner = this;\r\n                this.methods.push(methodObj);\r\n\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(methodObj.toString()).width);\r\n            }\r\n            y += this.$attrHeight;\r\n        }\r\n        this.withSize(width, y);\r\n    }\r\n\r\n    public getAttributes(): Attribute[] {\r\n        return this.attributes;\r\n    }\r\n\r\n    public getMethods(): Method[] {\r\n        return this.methods;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        let icon = SymbolLibary.draw({type: 'Class', property: 'HTML', width: '50', height: '50', transform: 'translate(-26,-21)'});\r\n        return icon;\r\n        // let group = this.createShape(\r\n//    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n//    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos: Point = this.getPos();\r\n        const size: Point = this.getSize();\r\n\r\n        let group = this.createShape({ tag: 'g', id: this.id, class: 'SVGClazz', transform: 'translate(0 0)' });\r\n\r\n        if (this.stereoType) {\r\n            let type = new StereoType(this.stereoType, pos.x, pos.y);\r\n            group.appendChild(type.getSVG());\r\n        }\r\n\r\n        // Full Shape\r\n        let options = null;\r\n        let style;\r\n        let clazzName;\r\n        if (this.$owner['options']) {\r\n            let options = this.$owner['options'];\r\n            if (options) {\r\n                style = options.style;\r\n            }\r\n        }\r\n        // = = = Background = = =\r\n        if (style === 'modern') {\r\n            clazzName = 'ClazzHeader';\r\n        }\r\n        clazzName = 'ClazzHeader';\r\n        const nodeShape = this.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            height: size.y,\r\n            width: size.x,\r\n            rx: 5,\r\n            ry: 5,\r\n            fill: 'none',\r\n            stroke: 'black',\r\n            'stroke-width': 1\r\n        });\r\n        if (clazzName) {\r\n            nodeShape.setAttribute('className', clazzName);\r\n            let styleHeader = Util.getStyle('ClazzHeader');\r\n            // headerHeight = styleHeader.getNumber('height');\r\n        }\r\n\r\n        // = = = LABEL = = =\r\n        let label = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y + this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': this.$labelFontSize,\r\n            fill: 'black'\r\n        });\r\n        label.textContent = this.id;\r\n        this.$labelView = label;\r\n\r\n        group.appendChild(nodeShape);\r\n        group.appendChild(label);\r\n\r\n        // = = = ATTRIBUTES = = =\r\n        if (this.attributes.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorLabelAttr = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight,\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight,\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorLabelAttr);\r\n\r\n            let groupOfAttributes = this.createShape({ tag: 'g', id: (this.id + 'Attributes') });\r\n            groupOfAttributes.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzAttribute');\r\n            group.appendChild(groupOfAttributes);\r\n\r\n            let y = pos.y + this.$labelHeight + this.$attrHeight / 2;\r\n            for (let attr of this.attributes) {\r\n\r\n                let attrSvg = attr.getSVG();\r\n                attr.$owner = this;\r\n\r\n                attrSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                attrSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfAttributes.appendChild(attrSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        // = = = METHODS = = =\r\n        let height = this.attributes.length * this.$attrHeight;\r\n        let y = pos.y + this.$labelHeight + height + this.$attrHeight / 2;\r\n        if (this.methods.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorAttrMethods = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorAttrMethods);\r\n\r\n            let groupOfMethods = this.createShape({ tag: 'g', id: (this.id + 'Methods') });\r\n            groupOfMethods.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzMethod');\r\n            group.appendChild(groupOfMethods);\r\n\r\n            y += this.$attrHeight / 2;\r\n            for (let method of this.methods) {\r\n\r\n                let methodSvg = method.getSVG();\r\n                method.$owner = this;\r\n\r\n                methodSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                methodSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfMethods.appendChild(methodSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        this.$view = group;\r\n        return group;\r\n    }\r\n\r\n    public copy(): Class {\r\n        let copy: Class;\r\n        copy = <Class>super.copy();\r\n\r\n        // copy label\r\n        copy.id = this.id + 'Copy';\r\n\r\n        // copy attributes\r\n        this.attributes.forEach(attr => {\r\n            copy.attributes.push(new Attribute(attr.toString()));\r\n        });\r\n        // copy methods\r\n        this.methods.forEach(method => {\r\n            copy.methods.push(new Method(method.toString()));\r\n        });\r\n        copy.reCalcSize();\r\n\r\n        return copy;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTCLICK,\r\n                EventBus.ELEMENTDRAG, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES, EventBus.RELOADPROPERTIES];\r\n    }\r\n\r\n    public addProperty(value: string, type: string): any {\r\n        if (!this[type] || !value || value.length === 0) {\r\n            return;\r\n        }\r\n\r\n        let extractedValue;\r\n        if (type === 'attributes') {\r\n            extractedValue = new Attribute(value);\r\n        }\r\n        else if (type === 'methods') {\r\n            extractedValue = new Method(value);\r\n        }\r\n\r\n        for (let valueOfType of this[type]) {\r\n            if (valueOfType.toString() === extractedValue.toString()) {\r\n                alert(extractedValue.toString() + ' already exists.');\r\n                extractedValue = undefined;\r\n                return;\r\n            }\r\n        }\r\n\r\n        this[type].push(extractedValue);\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        return extractedValue;\r\n    }\r\n\r\n    public addAttribute(value: string): Attribute {\r\n        return this.addProperty(value, 'attributes');\r\n    }\r\n\r\n    public addAttributeObj(attr: Attribute): Attribute[] {\r\n        this.attributes.push(attr);\r\n        return this.getAttributes();\r\n    }\r\n\r\n    public addMethodObj(method: Method): Method[] {\r\n        this.methods.push(method);\r\n        return this.getMethods();\r\n    }\r\n\r\n    public addMethod(value: string): Method {\r\n        return this.addProperty(value, 'methods');\r\n    }\r\n\r\n    public removeAttribute(attr: Attribute): void {\r\n        let idx = this.attributes.indexOf(attr);\r\n        this.attributes.splice(idx, 1);\r\n    }\r\n\r\n    public removeMethod(method: Method): void {\r\n        let idx = this.methods.indexOf(method);\r\n        this.methods.splice(idx, 1);\r\n    }\r\n\r\n    public removeProperty(property: ClazzProperty): void {\r\n\r\n        if (property instanceof Attribute) {\r\n            this.removeAttribute(<Attribute>property);\r\n        }\r\n\r\n        if (property instanceof Method) {\r\n            this.removeMethod(<Method>property);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n        let hasSizeChanged: [boolean, Size] = this.hasSizeChanged();\r\n\r\n        if (drawOnlyIfSizeChanged) {\r\n            if (!hasSizeChanged[0]) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n\r\n        // redraw only this clazz\r\n        this.$owner.$view.removeChild(this.$view);\r\n        let newSvg = this.getSVG();\r\n        this.$owner.$view.appendChild(newSvg);\r\n        this.$view = newSvg;\r\n        EventBus.register(this, newSvg);\r\n\r\n        this.redrawEdges();\r\n    }\r\n\r\n    public hasSizeChanged(): [boolean, Size] {\r\n        let oldSize = { width: this.getSize().x, height: this.getSize().y };\r\n        let newSize = this.reCalcSize();\r\n\r\n        // size doenst changed, so nothing to redraw\r\n        if (oldSize.width === newSize.width && oldSize.height === newSize.height) {\r\n            return [false, newSize];\r\n        }\r\n\r\n        return [true, newSize];\r\n    }\r\n\r\n    public updateLabel(newLabel: string): void {\r\n        if (this.$labelView) {\r\n            this.$labelView.textContent = newLabel;\r\n        }\r\n\r\n        // update label in all edges\r\n        this.$edges.forEach(edge => {\r\n            if (this.id === edge.$sNode.id) {\r\n                edge.source = newLabel;\r\n            }\r\n            else if (this.id === edge.$tNode.id) {\r\n                edge.target = newLabel;\r\n            }\r\n        });\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        this.reDraw(true);\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.modifier = modifier;\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reCalcSize(): Size {\r\n        // label\r\n        let newWidth = 150;\r\n        newWidth = Math.max(newWidth, Util.sizeOf(this.id).width + 30);\r\n\r\n        // attributes\r\n        this.attributes.forEach(attrEl => {\r\n\r\n            let widthOfAttr;\r\n            if (attrEl.$view) {\r\n                widthOfAttr = attrEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfAttr = Util.sizeOf(attrEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfAttr + 15);\r\n        });\r\n\r\n        // methods\r\n        this.methods.forEach(methodEl => {\r\n            let widthOfMethod;\r\n            if (methodEl.$view) {\r\n                widthOfMethod = methodEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfMethod = Util.sizeOf(methodEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfMethod + 15);\r\n        });\r\n\r\n        // TODO: height has to be calculated by font-size\r\n        this.getSize().x = newWidth;\r\n        this.getSize().y = this.$labelHeight + ((this.attributes.length + this.methods.length) * this.$attrHeight)\r\n            + this.$attrHeight;\r\n\r\n        let newSize = { width: newWidth, height: this.getSize().y };\r\n\r\n        return newSize;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    private getModernStyle(): Element {\r\n        let width, height, id, size, z, item, rect, g, board, styleHeader, headerHeight, x, y;\r\n        board = this.getRoot()['board'];\r\n        styleHeader = Util.getStyle('ClazzHeader');\r\n        headerHeight = styleHeader.getNumber('height');\r\n        width = 0;\r\n        height = 10 + headerHeight;\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].getType().toLowerCase() === 'objectdiagram') {\r\n            id = this.id.charAt(0).toLowerCase() + this.id.slice(1);\r\n            item = 'Object';\r\n        } else {\r\n            id = this.id;\r\n            item = 'Class';\r\n            if (this['counter']) {\r\n                id += ' (' + this['counter'] + ')';\r\n            }\r\n        }\r\n        g = Util.create({tag: 'g', model: this});\r\n        size = Util.sizeOf(id, this);\r\n        width = Math.max(width, size.width);\r\n        if (this.attributes && this.attributes.length > 0) {\r\n            height = height + this.attributes.length * 25;\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.attributes[z], this).width);\r\n            }\r\n        } else {\r\n            height += 20;\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            height = height + this.methods.length * 25;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.methods[z], this).width);\r\n            }\r\n        }\r\n        width += 20;\r\n\r\n        let pos = this.getPos();\r\n        y = pos.y;\r\n        x = pos.x;\r\n\r\n        rect = {\r\n            tag: 'rect',\r\n            'width': width,\r\n            'height': height,\r\n            'x': x,\r\n            'y': y,\r\n            'class': item + ' draggable',\r\n            'fill': 'none'\r\n        };\r\n        g.appendChild(Util.create(rect));\r\n        g.appendChild(Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            'x': x,\r\n            'y': y,\r\n            height: headerHeight,\r\n            'width': width,\r\n            'class': 'ClazzHeader'\r\n        }));\r\n\r\n        item = Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'class': 'InfoText',\r\n            'text-anchor': 'right',\r\n            'x': x + width / 2 - size.width / 2,\r\n            'y': y + (headerHeight / 2) + (size.height / 2),\r\n            'width': size.width\r\n        });\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].type.toLowerCase() === 'objectdiagram') {\r\n            item.setAttribute('text-decoration', 'underline');\r\n        }\r\n        item.appendChild(document.createTextNode(id));\r\n\r\n        g.appendChild(item);\r\n        g.appendChild(Util.create({\r\n            tag: 'line',\r\n            x1: x,\r\n            y1: y + headerHeight,\r\n            x2: x + width,\r\n            y2: y + headerHeight,\r\n            stroke: '#000'\r\n        }));\r\n        y += headerHeight + 20;\r\n\r\n        if (this.attributes) {\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': (x + 10),\r\n                    'y': y,\r\n                    value: this.attributes[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n            if (this.attributes.length > 0) {\r\n                y -= 10;\r\n            }\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            g.appendChild(Util.create({tag: 'line', x1: x, y1: y, x2: x + width, y2: y, stroke: '#000'}));\r\n            y += 20;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': x + 10,\r\n                    'y': y,\r\n                    value: this.methods[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n        }\r\n        return g;\r\n    }\r\n}\r\n","import {Util} from '../../util';\r\nimport {DiagramElement} from '../BaseElements';\r\nimport Data from '../../Data';\r\n\r\nexport default class ClazzProperty extends DiagramElement {\r\n\r\n    // Public (+)\r\n    // Private (-)\r\n    // Protected (#)\r\n    // Package (~)\r\n\r\n    public $data = new Data();\r\n//    public modifier: string = '+';\r\n//    public name: string;\r\n//    public type: string;\r\n//    public value: string;\r\n\r\n    constructor(data: any | JSON) {\r\n        super();\r\n        this.$data.setValue('modifier', '+');\r\n        this.$data.setValue('name', null);\r\n        this.$data.setValue('type', null);\r\n        this.$data.setValue('value', null);\r\n        this.extractData(data);\r\n    }\r\n\r\n    public update(data: any | JSON): void {\r\n        this.extractData(data);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.$data.setValue('modifier', modifier);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateType(type: string): void {\r\n        this.$data.setValue('type', type);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateValue(value: string): void {\r\n        this.$data.setValue('value', value);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateName(name: string): void {\r\n        this.$data.setValue('name', name);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public getName(): string {\r\n        return this.$data.getValue('name');\r\n    }\r\n\r\n    public getModifier(): string {\r\n        return this.$data.getValue('modifier');\r\n    }\r\n\r\n    public getType(): string {\r\n        return this.$data.getValue('type');\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let attrText = {\r\n            tag: 'text',\r\n            'text-anchor': 'start',\r\n            'alignment-baseline': 'middle',\r\n        };\r\n\r\n        let attrSvg = Util.createShape(attrText);\r\n        attrSvg.textContent = this.toString();\r\n\r\n        this.$view = attrSvg;\r\n\r\n        return attrSvg;\r\n    }\r\n\r\n    public toString(): string {\r\n        let value = this.$data.getValue('value');\r\n        let result = this.$data.getValue('modifier') + ' ';\r\n        result += this.$data.getValue('name') + ' : ';\r\n        result += this.$data.getValue('type');\r\n        if (value && value.length > 0) {\r\n            result += ' = ' + this.$data.getValue('value');\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.$data.setValue('type', data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.$data.setValue('name', data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.$data.setValue('modifier', data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n\r\n            // e.g. name : string or name:string\r\n            let dataSplitted = data.split(':');\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                let name;\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.$data.setValue('modifier', firstChar);\r\n                    name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                }\r\n                else {\r\n                    name = modifierAndNameSplitted;\r\n                }\r\n                // delete whitespaces in name\r\n                name = name.replace(/ /g, '_');\r\n\r\n                this.$data.setValue('name', name);\r\n                let type = dataSplitted[1].trim() || 'String';\r\n\r\n                // if the type was entered with a small begin letter\r\n                if (type.toLowerCase() === 'string') {\r\n                    type = 'String';\r\n                }\r\n                // delete whitespaces in type\r\n                type = type.replace(/ /g, '_');\r\n                this.$data.setValue('type',  type);\r\n            } else {\r\n                dataSplitted = data.split('=');\r\n                if (dataSplitted && dataSplitted.length === 2) {\r\n                    // modifer (and or) name\r\n                    let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                    // first char is +, - or #\r\n                    let firstChar = modifierAndNameSplitted[0];\r\n                    let name;\r\n                    if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                        this.$data.setValue('modifier', firstChar);\r\n                        name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                    }\r\n                    else {\r\n                        name = modifierAndNameSplitted;\r\n                    }\r\n                    // delete whitespaces in name\r\n                    name = name.replace(/ /g, '_');\r\n\r\n                    this.$data.setValue('name', name);\r\n                    let value = dataSplitted[1].trim() || '\"\"';\r\n                    this.$data.setValue('value', value);\r\n                    this.$data.setValue('type', typeof value);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected updateTextOfView() {\r\n        if (this.$view) {\r\n            this.$view.textContent = this.toString();\r\n        }\r\n        if (this.$owner) {\r\n            Util.saveToLocalStorage(this.$owner.$owner);\r\n        }\r\n    }\r\n}\r\n","import {Node} from \"./Node\";\r\n/**\r\n * Created by Stefan on 29.03.2017.\r\n */\r\n\r\nexport class Dice extends Node {\r\n    private value: number;\r\n    private max: number = 6;\r\n    private $animation: SVGElement;\r\n    private $zoom: number = 0.6;\r\n    private $border: number = 0.2;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super(data);\r\n        this.withSize(100, 100);\r\n    }\r\n\r\n    public setNumber(number: number) {\r\n        this.value = number;\r\n        this.refresh();\r\n    }\r\n\r\n    public refresh() {\r\n        if (this.$view) {\r\n            this.reset();\r\n            let group = this.createPointValue();\r\n            if (group) {\r\n                this.$view.appendChild(group);\r\n            }\r\n        }\r\n    }\r\n\r\n    public reset() {\r\n        if (this.$view) {\r\n            while (this.$view.children.length > 1) {\r\n                if(this.$view.children.item(this.$view.children.length - 1).tagName!== \"animateTransform\") {\r\n                    console.log(this.$view.children.item(this.$view.children.length - 1));\r\n                    this.$view.removeChild(this.$view.children.item(this.$view.children.length - 1));\r\n                }else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let dice: SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x + size.x * this.$border,\r\n            y: pos.y + size.y * this.$border,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y * this.$zoom,\r\n            width: size.x * this.$zoom,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        dice.appendChild(this.createShape(attr));\r\n\r\n        let group = this.createPointValue();\r\n        if (group) {\r\n            dice.appendChild(group);\r\n        }\r\n\r\n        this.$view = dice;\r\n        return dice;\r\n    }\r\n\r\n    public animationTimeout(newValues: number[]) {\r\n        if(newValues.length>0) {\r\n            let newValue = newValues.shift();\r\n            this.setNumber(newValue);\r\n            let that=this;\r\n            setTimeout(function() {that.animationTimeout(newValues)}, 100);\r\n        }\r\n    }\r\n\r\n    public roll() {\r\n        this.startAnimation();\r\n        let values:number[]=[];\r\n        let i:number;\r\n        for(i=1;i<this.max;i++) {\r\n            values.push(i);\r\n        }\r\n        for(i=this.max;i>0;i--) {\r\n            values.push(i);\r\n        }\r\n        let that=this;\r\n        values.push( Math.floor(Math.random() * this.max)+1 );\r\n        setTimeout(function() {that.animationTimeout(values)}, 100);\r\n    }\r\n    public startAnimation() {\r\n        if(this.$animation) {\r\n            return;\r\n        }\r\n        let center = this.getPos().x+this.getSize().x /2;\r\n        const attr = {\r\n            tag: 'animateTransform',\r\n            attributeType: \"xml\",\r\n            attributeName:\"transform\",\r\n            type:\"rotate\",\r\n            dur: \"1s\",\r\n            repeatCount:\"1\",\r\n            from:\"0 \"+center+\" \"+center,\r\n            to:\"360 \"+center+\" \"+center\r\n        };\r\n        this.$animation = <SVGElement>this.createShape(attr);\r\n        this.$view.appendChild(this.$animation);\r\n    }\r\n\r\n    public stopAnimation() {\r\n        if(this.$animation) {\r\n            this.$view.removeChild(this.$animation);\r\n            this.$animation = null;\r\n        }\r\n    }\r\n\r\n    public createPointValue() :SVGElement {\r\n        if (this.value == 1) {\r\n           return this.getCircle(2, 2);\r\n        } else if (this.value == 2) {\r\n            return this.getCircle(1, 1, 3, 3);\r\n        } else if (this.value == 3) {\r\n            return this.getCircle(1, 1, 2, 2, 3, 3);\r\n        } else if (this.value == 4) {\r\n            return this.getCircle(1, 1, 1, 3, 3, 1, 3, 3);\r\n        } else if (this.value == 5) {\r\n            return this.getCircle(1, 1, 1, 3, 2, 2, 3, 1, 3, 3);\r\n        } else if (this.value == 6) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 7) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 2, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 8) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 9) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private getCircle(...values:number[]) : SVGElement {\r\n        if (values.length % 2 > 0) {\r\n            return null;\r\n        }\r\n        let size = this.getSize();\r\n        let pos = this.getPos();\r\n        //FIXME let group:SVGElement = <SVGElement>this.createShape({tag: 'g', transform: 'translate(0 0)', height: size.y, width: size.x});\r\n        let group:SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n\r\n\r\n        for (let i: number = 0; i < values.length; i += 2) {\r\n            group.appendChild(this.createCircle(values[i], values[i + 1]));\r\n        }\r\n        return group;\r\n    }\r\n    private createCircle(x:number, y:number) : SVGElement {\r\n        let size = this.getSize();\r\n        let radius = size.x / 10*this.$zoom;\r\n        let border = size.y*this.$border;\r\n        let zoom = size.y*this.$zoom;\r\n        const attr = {\r\n            tag: 'circle',\r\n            r : radius,\r\n            cx: (size.x*this.$zoom * x) / 4 + border,\r\n            cy: (size.y*this.$zoom * y) / 4 + border,\r\n            stroke:\"black\",\r\n            \"stroke-width\":\"3\",\r\n            fill:\"red\",\r\n            style: 'fill:black;stroke:black;stroke-width:2'\r\n        };\r\n        return <SVGElement>this.createShape(attr);\r\n    }\r\n}","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\n\r\nexport class Div extends Control {\r\n    private className: string;\r\n\r\n    public load(data:JSON|any): any {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = <string>data;\r\n        } else {\r\n            id = data.id;\r\n            this.className = data.class;\r\n            this.property = data.property;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let div: HTMLElement = document.getElementById(id);\r\n\r\n        if (!this.property) {\r\n            // if(inputField){\r\n            // TODO disuss how to decide, which property we should listen on...\r\n            // this.property = id;\r\n            this.property = div.getAttribute('Property');\r\n            // }\r\n        }\r\n\r\n        if (div instanceof HTMLDivElement) {\r\n            this.$view = div;\r\n        } else {\r\n            if (!div) {\r\n                this.$view = document.createElement('div');\r\n                this.$view.setAttribute('id', this.id);\r\n                this.$view.setAttribute('property', this.property);\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists+\r\n        if (data.hasOwnProperty('property')) {\r\n            this.setProperty(data['property']);\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        this.$model = entity;\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.className || entity.hasProperty(this.className)) {\r\n                if (entity.id === this.property.split('.')[0]) {\r\n                    entity.addListener(this, this.className);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        this.$view.innerHTML = <string>newValue;\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Form extends Control {\r\n    // private applyingChange: boolean = false;\r\n    private children: Object = {};\r\n    // private property: string = \"\";\r\n\r\n    /**\r\n     * Data should look like the following json:\r\n     *\r\n     * <pre>{\r\n     *      id: \"t1\",\r\n     *      control: \"form\",\r\n     *      elements: [\r\n     *          {id: \"inputField1\", property: \"talk\"},\r\n     *          {id: \"inputField2\", property: \"room\"}\r\n     *      ]\r\n     * }</pre>\r\n     * @param data\r\n     */\r\n    public load(data: any) {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let form: HTMLElement = document.getElementById(id);\r\n\r\n        if (form instanceof HTMLFormElement) {\r\n            this.$view = form;\r\n            if (this.$view.hasAttribute('property')) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            if (!form) {\r\n                this.$view = document.createElement('form');\r\n                this.$view.setAttribute('id', this.id);\r\n\r\n                if (data.hasOwnProperty('property')) {\r\n                    this.property = data['property'];\r\n                }\r\n\r\n                // add all the attributes to the form element\r\n                for (let attr in data) {\r\n                    if (data.hasOwnProperty(attr) === false) {\r\n                        continue;\r\n                    }\r\n                    if (attr === 'elements') {\r\n                        continue;\r\n                    }\r\n                    this.$view.setAttribute(attr, data[attr]);\r\n                }\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists\r\n        let objId = this.property;\r\n        let hasItem = this.$owner.hasItem(objId);\r\n        if (hasItem) {\r\n            let item = this.$owner.getItem(objId);\r\n            item.addListener(this);\r\n            this.$model = item;\r\n        }\r\n\r\n        // now create all the sub input controls\r\n        for (let field of data.elements) {\r\n            // this.createField(field);\r\n            if (field.hasOwnProperty('property')) {\r\n                let property = field['property'];\r\n                property = this.property + '.' + property;\r\n                field['property'] = property;\r\n            }\r\n            if (!field.hasOwnProperty('class')) {\r\n                field['class'] = 'input';\r\n            }\r\n\r\n            // let the Bridge load the subControl\r\n            let control: Control = this.$owner.load(field, this);\r\n\r\n            // add subControl to children\r\n            this.children[control.getId()] = control;\r\n        }\r\n\r\n    }\r\n\r\n    public setProperty(id: string): void {\r\n        this.property = id;\r\n        let keys: string[] = Object.keys(this.children);\r\n        for (let k = 0; k < keys.length; k++) {\r\n            let key = keys[k];\r\n            let childControl = this.children[key];\r\n            // only set Property, if there is a Property defined before\r\n            if (childControl.property) {\r\n                childControl.setProperty(this.property + '.' + childControl.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object,  oldValue?: Object): boolean {\r\n        if (this.$owner != null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    /**\r\n     * Here we create the form elements and put all the attributes to them in order for the Control only having to load\r\n     * the data were appending here. Alternative would be loading with the bridge and afterwards setting\r\n     * the owner to the form instead of the body..\r\n     * @param field\r\n     */\r\n    /*private createField(field: Object) {\r\n     let control = 'input';\r\n     if (field.hasOwnProperty('class')) {\r\n     control = field['class'];\r\n     }\r\n     let input = document.createElement(control);\r\n     input.setAttribute('class', control);\r\n     let id: string;\r\n     if (!field.hasOwnProperty('id')) {\r\n     // TODO: not the best solution for generating unique id's for forms...\r\n     id = this.$owner.getId();\r\n     field['id'] = id;\r\n     }\r\n     if (field.hasOwnProperty('property')) {\r\n     let property = field['property'];\r\n     property = this.id + '.' + property;\r\n     input.setAttribute('property', property);\r\n     }\r\n     for (let attr in field) {\r\n     if (attr === 'property' || attr === 'class' || !field.hasOwnProperty(attr)) {\r\n     continue;\r\n     }\r\n     input.setAttribute(attr, field[attr]);\r\n     }\r\n\r\n     this.$viewElement.appendChild(input);\r\n\r\n     let newcontrol: Control = this.$owner.load(field['id']);\r\n     this.children[newcontrol.getId()] = newcontrol;\r\n     }*/\r\n}\r\n","/**\r\n * Created by Stefan on 01.03.2017.\r\n */\r\nimport {Control} from '../../Control';\r\n\r\nexport class HTML extends Control {\r\n    constructor(data: JSON|Object|any) {\r\n        super();\r\n\r\n        let id: string;\r\n        let tag: string;\r\n\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            data = {};\r\n        } else if (data) {\r\n            id = data.id;\r\n        }\r\n        if (id) {\r\n            this.id = id;\r\n            this.$view = document.getElementById(id);\r\n        }\r\n        if (!this.$view) {\r\n            if (data) {\r\n                tag = data['tag'] || 'div';\r\n            } else {\r\n                tag = 'div';\r\n            }\r\n            this.$view = document.createElement(tag);\r\n            let parent = document.getElementsByTagName('body')[0];\r\n            parent.appendChild(this.$view);\r\n        }\r\n        if (!parent) {\r\n            return;\r\n        }\r\n        this.writeAttribute(data, this.$view);\r\n    }\r\n\r\n    private writeAttribute(properties: Object, entity?: any) {\r\n        let lowKey;\r\n        if (!entity) {\r\n            lowKey = properties['tag'] || 'div';\r\n            entity = document.createElement(lowKey);\r\n        }\r\n        for (let key in properties) {\r\n            if (!properties.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            lowKey = key.toLowerCase();\r\n            if (properties[key] === null) {\r\n                entity.setAttribute(key, '');\r\n                continue;\r\n            }\r\n\r\n            if (lowKey === 'tag' || lowKey.charAt(0) === '$' || lowKey === '$graphModel' || lowKey === 'class') {\r\n                continue;\r\n            }\r\n            if (lowKey === 'children') {\r\n                if (Array.isArray(properties[key])) {\r\n                    for (let item in properties[key]) {\r\n                        if (properties[key].hasOwnProperty(item) === false) {\r\n                            continue;\r\n                        }\r\n                        let child = this.writeAttribute(item);\r\n                        if (child) {\r\n                            entity.appendChild(child);\r\n                        }\r\n                    }\r\n                } else {\r\n                    let child = this.writeAttribute(properties[key]);\r\n                    if (child) {\r\n                        entity.appendChild(child);\r\n                    }\r\n                }\r\n                continue;\r\n            }\r\n            entity[key] = properties[key];\r\n        }\r\n        return entity;\r\n    }\r\n}\r\n","import { Point } from '../BaseElements';\r\nimport { Util } from '../../util';\r\nimport { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\n\r\nexport class InfoText extends Node {\r\n\r\n    public cardinality: string = '';\r\n    private $heightOfOneTextItem: number;\r\n    private $cardinalitySvg: Element;\r\n    private $propertySvg: Element;\r\n    private $rectBackground: Element;\r\n\r\n    constructor(info: any) {\r\n        super(info);\r\n        if (typeof (info) === 'string') {\r\n            this.id = info;\r\n        } else {\r\n            if (info.property) {\r\n                this.property = info.property;\r\n            }\r\n            if (info.cardinality) {\r\n                this.cardinality = info.cardinality;\r\n            }\r\n        }\r\n        this.$isDraggable = true;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n    }\r\n\r\n    public updateCardinality(cardinality: string): void {\r\n        this.cardinality = cardinality;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (this.$rectBackground) {\r\n            this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n            this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n        }\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((cardinality.length === 0 && this.property.length > 0) || !this.$cardinalitySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$cardinalitySvg) {\r\n            this.$cardinalitySvg.textContent = cardinality;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.property.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    public updateProperty(property: string): void {\r\n        this.property = property;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((property.length === 0 && this.cardinality.length > 0) || !this.$propertySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$propertySvg) {\r\n            this.$propertySvg.textContent = property;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.cardinality.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos: Point = this.getPos();\r\n        let group = Util.create({ tag: 'g', class: 'SVGEdgeInfo', transform: 'translate(0, 0)' });\r\n\r\n        // append rect as background for text items\r\n        this.$rectBackground = Util.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y - this.$heightOfOneTextItem + 3,\r\n            width: this.getSize().x,\r\n            height: this.getSize().y,\r\n            fill: '#DDD',\r\n            'stroke-width': 0,\r\n            rx: '5',\r\n            ry: '5'\r\n        });\r\n        group.appendChild(this.$rectBackground);\r\n\r\n        let y = pos.y;\r\n        if (this.property) {\r\n            // property\r\n            this.$propertySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$propertySvg.textContent = this.property;\r\n            group.appendChild(this.$propertySvg);\r\n\r\n            y += this.$heightOfOneTextItem;\r\n        }\r\n\r\n        // cardinality\r\n        if (this.cardinality) {\r\n            this.$cardinalitySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$cardinalitySvg.textContent = this.cardinality;\r\n            group.appendChild(this.$cardinalitySvg);\r\n        }\r\n\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        let cardinalityAvailable = this.cardinality && this.cardinality.length > 0;\r\n        let propertyAvailable = this.property && this.property.length > 0;\r\n\r\n        return !propertyAvailable && !cardinalityAvailable;\r\n    }\r\n\r\n    public redrawFromEdge(newPos: Point): void {\r\n\r\n        if (!newPos) {\r\n            return;\r\n        }\r\n\r\n        let oldPos = this.getPos();\r\n\r\n        // get difference between new and the old position\r\n        let diffPos = new Point();\r\n        diffPos.x = newPos.x - oldPos.x;\r\n        diffPos.y = newPos.y - oldPos.y;\r\n\r\n        // get translate information\r\n        let translation = this.$view.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        let sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        // set new traslation values\r\n        let newTransX = (sx + diffPos.x);\r\n        let newTransY = (sy + diffPos.y);\r\n        this.$view.setAttributeNS(null, 'transform', 'translate(' + newTransX + ' ' + newTransY + ')');\r\n\r\n        // set new position of svg\r\n        this.getPos().x = newPos.x;\r\n        this.getPos().y = newPos.y;\r\n    }\r\n\r\n    public getText(): string {\r\n        let infoTxt: string = '';\r\n\r\n        if (this.property) {\r\n            infoTxt = this.property;\r\n        }\r\n        if (this.cardinality) {\r\n            if (infoTxt.length > 0) {\r\n                infoTxt += '\\n';\r\n            }\r\n            infoTxt += this.cardinality;\r\n        }\r\n\r\n        return infoTxt;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    private calcSize(): Point {\r\n        let text: string = this.getText();\r\n        let items: Array<string> = text.split('\\n');\r\n\r\n        let maxSize = new Point(0, 0);\r\n        if (text.length === 0) {\r\n            return maxSize;\r\n        }\r\n\r\n        for (let i = 0; i < items.length; i += 1) {\r\n            // calculate size\r\n            let sizeOfText: ClientRect = Util.sizeOf(items[i]);\r\n            maxSize.x = Math.max(maxSize.x, sizeOfText.width);\r\n            maxSize.y += sizeOfText.height;\r\n\r\n            this.$heightOfOneTextItem = sizeOfText.height;\r\n        }\r\n\r\n        return maxSize;\r\n    }\r\n    private resetAllSvgElements() {\r\n        this.$cardinalitySvg = undefined;\r\n        this.$view = undefined;\r\n        this.$propertySvg = undefined;\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\nimport {PropertyBinder} from '../../PropertyBinder';\r\n\r\nexport class Input extends Control {\r\n    private type: string;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data = super.initViewDataProperties(oldData);\r\n        if ('checkbox' === this.type || 'radio' === this.type) {\r\n            data.addFrom('checked', oldData);\r\n        }\r\n        data.addFrom('value', oldData);\r\n        data.addFrom('type', oldData);\r\n        return data;\r\n    }\r\n\r\n    public load(data: any) {\r\n        let id: string;\r\n        let inputField: HTMLElement;\r\n        let useData: boolean;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            useData = true;\r\n        } else {\r\n            id = data.id;\r\n            if (data.type) {\r\n                this.setType(data['type']);\r\n            } else {\r\n                this.setType('text');\r\n            }\r\n            if (data.hasOwnProperty('property')) {\r\n                this.setProperty(data['property']);\r\n            }\r\n            useData = false;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n\r\n        inputField = document.getElementById(id);\r\n\r\n        if (useData) {\r\n            if (inputField) {\r\n                // TODO disuss how to decide, which property we should listen on...\r\n                // this.property = id;\r\n                if (inputField.hasAttribute('Property')) {\r\n                    this.setProperty(inputField.getAttribute('Property'));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (inputField instanceof HTMLInputElement) {\r\n            this.setView(inputField);\r\n            this.type = inputField.type;\r\n            // useData = false;\r\n        } else {\r\n            if (!inputField) {\r\n                this.setView(document.createElement('input'));\r\n                this.$viewData = this.initViewDataProperties(this.$viewData);\r\n                // append viewListener\r\n                // this.$view.addEventListener('change', this.$viewListener);\r\n                if (typeof(data) !== 'string') {\r\n                    for (let attr in data) {\r\n                        if (data.hasOwnProperty(attr) === false) {\r\n                            continue;\r\n                        }\r\n                        // this.$view[attr] = data[attr];\r\n                        this.$viewData.setValue(attr, data[attr]);\r\n                    }\r\n                } else {\r\n                    if (this.type) {\r\n                        this.$view.setAttribute('type', this.type);\r\n                    }\r\n                    if (data.hasOwnProperty('class')) {\r\n                        this.$view.setAttribute('class', data['class']);\r\n                    }\r\n                    this.$view.setAttribute('id', this.id);\r\n                    this.$view.setAttribute('property', this.property);\r\n                }\r\n\r\n                if (data.value) {\r\n                    // if theres a value at the control, we want to change the model to the new value\r\n                    if (this.$model) {\r\n                        this.$model.setValue(this.lastProperty, data.value);\r\n                    }\r\n                }\r\n                if (this.$model) {\r\n                    PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                }\r\n\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (this.property && entity) {\r\n            if (entity.id === this.property.split('.')[0]) {\r\n                this.$model = entity;\r\n                PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                // entity.addListener(this, this.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n    // TODO FIXME protected updateElement(property: string, value: string) {\r\n    //     if (this.$view instanceof HTMLInputElement) {\r\n    //         if (value != null) {\r\n    //             if(property == this.lastProperty) {\r\n    //                 (<HTMLInputElement>this.$view)[this.getStandardProperty()] = value;\r\n    //             } else {\r\n    //                 // this.getRoot().setValue(this, property, value, (<HTMLInputElement>this.$view)[property]);\r\n    //                 (<HTMLInputElement>this.$view)[property] = value;\r\n    //             }\r\n    //         } else {\r\n    //             delete (<HTMLInputElement>this.$view)[property];\r\n    //         }\r\n    //     }\r\n    // }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            super.controlChanged(ev);\r\n        }\r\n// <<<<<<< HEAD\r\n//             let newVal = element[this.getStandardProperty()];\r\n//             if (this.isKeyOnly()) {\r\n//                 // we expect, element[this.lastProperty] to be boolean:\r\n//                 if (!newVal) {\r\n//                     newVal = null;\r\n//                 }\r\n//             } else {\r\n//             }\r\n        // let $graphModel;\r\n        // let value;\r\n        /*if (this.$graphModel) {\r\n            $graphModel = this.$graphModel;\r\n            value = this.$graphModel.getValue(this.lastProperty);\r\n        } else {\r\n            $graphModel = this;\r\n            if (this.$view) {\r\n                value = this.$view[this.lastProperty];\r\n            }\r\n        }*/\r\n        // this.$model.setValue(this.lastProperty, newVal);\r\n        // this.propertyChange(this.$graphModel,this.lastProperty, this.$graphModel.getValue(this.lastProperty), newVal);\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n// =======\r\n        // let newVal = element[this.lastProperty];\r\n        // if (this.isKeyOnly()) {\r\n        //     // we expect, element[this.lastProperty] to be boolean:\r\n        //     if (!newVal) {\r\n        //         newVal = null;\r\n        //     }\r\n        // } else {\r\n        // }\r\n        // let $graphModel;\r\n        // let value;\r\n\r\n        // $graphModel = this.getViewData();\r\n        // if (this.$graphModel) {\r\n        //     $graphModel = this.$graphModel;\r\n        //     value = this.$graphModel.getValue(this.lastProperty);\r\n        // } else {\r\n        //     $graphModel = this;\r\n        //     if (this.$view) {\r\n        //         value = this.$view[this.lastProperty];\r\n        //     }\r\n        // }\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n//            this.saveViewInData();\r\n// >>>>>>> addOldFunctions\r\n//         } else {\r\n//             console.log('value does not match the pattern...');\r\n//         }\r\n    }\r\n\r\n    public setType(type: string): void {\r\n        let oldValue: string = this.type;\r\n        if (oldValue === type) {\r\n            return;\r\n        }\r\n        if (type === 'radio') {\r\n            this.$viewData.setValue('checked', null);\r\n        } else {\r\n            this.$viewData.removeKey('checked');\r\n        }\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\n\r\nexport class Label extends Control {\r\n    public load(data: JSON): any {\r\n        this.createControl(this.$owner, data);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('label');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr === 'textContent') {\r\n                this.$view.textContent = data['textContent'];\r\n            } else {\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Method extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.updateType(data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.updateType(data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.updateType(data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n            // e.g. setName() : string or name:string\r\n            let dataSplitted = data.split(':');\r\n\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }\r\n                else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType(dataSplitted[1].trim() || 'void');\r\n            }\r\n            // set default return type of void\r\n            else {\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = data.trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }  else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType('void');\r\n            }\r\n        }\r\n\r\n        if (Util.includes(this.$data.getValue('name'), '(') && !Util.includes(this.$data.getValue('name'), ')') === false) {\r\n            this.$data.setValue('name', this.$data.getValue('name') + '()');\r\n        }\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\nimport {Association} from '../edges';\r\nimport { GraphModel } from '..';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\n\r\nexport class Node extends DiagramElement {\r\n    public $edges: Association[] = [];\r\n    public $minWidth: number = 150;\r\n    public $minheight: number = 25;\r\n    public $defaulEdgeType: string;\r\n\r\n    constructor(data: JSON|string|Object|any) {\r\n        super();\r\n\r\n        // default size\r\n        this.withSize(this.$minWidth, this.$minheight);\r\n\r\n        if (data) {\r\n            if (data['x'] && data['y']) {\r\n                this.withPos(data['x'], data['y']);\r\n            }\r\n            if (data['width'] || data['height']) {\r\n                this.withSize(data['width'], data['height']);\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos = this.getPos();\r\n        const size = this.getSize();\r\n\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x - size.x / 2,\r\n            y: pos.y - size.y / 2,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y,\r\n            width: size.x,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        const shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'middle',\r\n            'font-family': 'Verdana',\r\n            'font-size': '14',\r\n            fill: 'black'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = this.id;\r\n\r\n        let group = this.createShape({tag: 'g', id: this.id});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public copy(): Node {\r\n        let copy: Node;\r\n        // create new id\r\n        let model = <GraphModel>this.$owner || <GraphModel>this.getRoot();\r\n        if (model) {\r\n            let type = this.property || Node.name;\r\n            let newId = model.getNewId(type);\r\n            copy = <Node>model.createElement(type, newId, null);\r\n            copy.withSize(this.getSize().x, this.getSize().y);\r\n            copy.$owner = model;\r\n        } else {\r\n            copy.id = this.id + '-copy';\r\n            copy.$owner = this.getRoot();\r\n        }\r\n        return copy;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n// EMPTY\r\n    }\r\n    public addAttribute(value: string): Attribute {\r\n        return null;\r\n    }\r\n    public getAttributes(): Attribute[] {\r\n        return null;\r\n    }\r\n    public addMethod(value: string): Method {\r\n        return null;\r\n    }\r\n    public updateLabel(newLabel: string): void {\r\n// EMPTY\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\n\r\nexport class SO extends DiagramElement {\r\n    public static create(element: Object) {\r\n        let result: SO = new SO();\r\n        for (let key in element) {\r\n            if (element.hasOwnProperty(key) === false) {\r\n                continue;\r\n            }\r\n            result.withKeyValue(key, element[key]);\r\n\r\n        }\r\n        return result;\r\n    }\r\n\r\n    public withKeyValue(key: string, value: any): SO {\r\n        if (key === 'typ') {\r\n            this.property = value;\r\n        } else if (key === 'x') {\r\n            this.withPos(value, null);\r\n        } else if (key === 'y') {\r\n            this.withPos(null, value);\r\n        } else if (key === 'width') {\r\n            this.withSize(value, null);\r\n        } else if (key === 'height') {\r\n            this.withSize(null, value);\r\n        } else {\r\n            this[key] = value;\r\n        }\r\n        return this;\r\n    }\r\n}\r\n","import {Point} from '../BaseElements';\r\nimport {Node} from './Node';\r\n\r\nexport class StereoType extends Node {\r\n\r\n    protected stereoType: string;\r\n\r\n    constructor (type: string, x: number, y: number) {\r\n        super('');\r\n        this.withPos(x, y);\r\n        this.setStereoType(type);\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        let pos: Point = this.getPos();\r\n        let size: Point = this.getSize();\r\n\r\n               // = = = STEREOTYPE = = =\r\n        let stereoType = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y - this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': 10,\r\n            'font-weight': 'bold',\r\n            fill: 'black'\r\n        });\r\n        stereoType.textContent = this.stereoType;\r\n\r\n        this.$view = stereoType;\r\n        return stereoType;\r\n    }\r\n\r\n    public setStereoType(value: string): void {\r\n        this.stereoType = '<<' + value + '>>';\r\n    }\r\n\r\n    public getStereoType(): string {\r\n        return this.stereoType;\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { SO } from './SO';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport { Util } from '../../util';\r\n\r\nexport class Symbol extends Node {\r\n    public $heightMax: number = 0;\r\n    public $heightMin: number = 0;\r\n\r\n    constructor(typ: string) {\r\n        super(typ);\r\n    }\r\n\r\n    public draw(typ?: string): SVGElement {\r\n        return SymbolLibary.draw(this);\r\n    }\r\n}\r\n\r\n// \t\t\t\t###################################################### SymbolLibary ####################################################################################\r\n// Example Items\r\n// {tag: 'path', d: ''}\r\n// {tag: 'rect', width:46, height:34}\r\n// {tag: 'ellipse', width:23, height:4}\r\n// {tag: 'line', x1:650, y1:-286, x2:650, y2:-252}\r\n// {tag: 'circle', r:5, x:12, y:0}\r\n// {tag: 'image', height: 30, width: 50, content$src: hallo}\r\n// {tag: 'text', 'text-anchor': 'left', x: '10'}\r\nexport class SymbolLibary {\r\n\r\n    public static drawSVG(node: any): SVGSVGElement {\r\n        // const lib = new SymbolLibary();\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            const parent = SO.create(node);\r\n            parent['property'] = 'SVG';\r\n            symbol = fn(parent);\r\n            // symbol = fn.apply(lib, parent);\r\n\r\n            return SymbolLibary.createGroup(parent, symbol);\r\n        }\r\n        return symbol;\r\n    }\r\n\r\n    public static draw(node: any, parent?: Object): SVGElement {\r\n        // Node is Symbol or simple Object\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            if (!(node instanceof DiagramElement)) {\r\n                node = SO.create(node);\r\n                if (!node.property) {\r\n                    node.property = 'SVG';\r\n                }\r\n            }\r\n            symbol = fn.apply(this, [node]);\r\n            if (!parent) {\r\n                return SymbolLibary.createGroup(node, symbol);\r\n            }\r\n            return SymbolLibary.createGroup(node, symbol);\r\n        } else if (node.property) {\r\n            symbol = new Symbol(node.property);\r\n            symbol.init(node);\r\n            let pos = node.getPos();\r\n            let size = node.getSize();\r\n            symbol.withPos(pos.x, pos.y);\r\n            symbol.withSize(size.x, size.y);\r\n            symbol['value'] = node['value'];\r\n            parent = node['$parent'];\r\n            return SymbolLibary.draw(symbol, parent);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public static upFirstChar(txt: string): string {\r\n        return txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase();\r\n    }\r\n\r\n    public static isSymbolName(typ: string): boolean {\r\n        let fn = SymbolLibary['draw' + SymbolLibary.upFirstChar(typ)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static isSymbol(node: Symbol) {\r\n        let fn = SymbolLibary[SymbolLibary.getName(node)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static getName(node: any): string {\r\n        if (node['type']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['type']);\r\n        }\r\n        if (node.property) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node.property);\r\n        }\r\n        if (node['src']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['src']);\r\n        }\r\n        return 'drawNode';\r\n    }\r\n\r\n    /*FIXME   public static createImage(node: Symbol, $graphModel:Node) {\r\n           let n, img: HTMLElement;\r\n           // node.$graphModel = node;\r\n           if (SymbolLibary.isSymbol(node)) {\r\n               return SymbolLibary.draw(null, node);\r\n           }\r\n           n = {tag: 'img', $graphModel: node, src: node['src']};\r\n           let size = node.getSize();\r\n           if (size.isEmpty() === false) {\r\n               n['width'] = size.x;\r\n               n['height'] = size.y;\r\n           } else {\r\n               n['xmlns'] = 'http://www.w3.org/1999/xhtml';\r\n           }\r\n           img = Util.create(n);\r\n           if (size.isEmpty()) {\r\n               $graphModel.appendImage(img);\r\n               return null;\r\n           }\r\n           return img;\r\n       }*/\r\n\r\n    public static createGroup(node: DiagramElement, group: any) {\r\n        let func, y: number, z: number, box, item: Element, transform, i, offsetX = 0, offsetY = 0;\r\n        let svg: any;\r\n        if (node.property.toUpperCase() === 'HTML') {\r\n            let so = {\r\n                tag: 'svg',\r\n                style: { left: (group.x | 0) + node.getPos().x, top: (group.y | 0) + node.getPos().y, position: 'absolute' }\r\n            };\r\n            if (node['transform']) {\r\n                so['transform'] = node['transform'];\r\n            }\r\n            svg = Util.create(so);\r\n        } else {\r\n            svg = Util.create({ tag: 'g' });\r\n            transform = 'translate(' + group.getPos().x + ' ' + group.getPos().y + ')';\r\n            if (group.scale) {\r\n                transform += ' scale(' + group.scale + ')';\r\n            }\r\n            if (group.rotate) {\r\n                transform += ' rotate(' + group.rotate + ')';\r\n            }\r\n            svg.setAttribute('transform', transform);\r\n            if (group['id']) {\r\n                svg.id = group['id'];\r\n            }\r\n        }\r\n\r\n        if (node['tooltip']) {\r\n            const tooltipTitleAttr = {\r\n                tag: 'title'\r\n            };\r\n            let tooltipTitle = Util.createShape(tooltipTitleAttr);\r\n            tooltipTitle.textContent = node['tooltip'];\r\n            svg.appendChild(tooltipTitle);\r\n        }\r\n\r\n        if (node['background']) {\r\n            const attrCircle = {\r\n                tag: 'circle',\r\n                cx: 20,\r\n                cy: 20,\r\n                r: 17,\r\n                stroke: '#888',\r\n                'stroke-width': 0,\r\n                fill: '#DDD'\r\n            };\r\n            svg.appendChild(Util.create(attrCircle));\r\n        }\r\n\r\n        for (i = 0; i < group.items.length; i += 1) {\r\n            svg.appendChild(Util.create(group.items[i]));\r\n        }\r\n        let elements = node['elements'];\r\n        Util.setSize(svg, group.width + node.getSize().x, group.height + node.getSize().y);\r\n        node['$heightMin'] = node.getSize().y;\r\n        if (elements) {\r\n            for (i = 0; i < elements.length; i += 1) {\r\n                if (!elements[i] && elements[i].length < 1) {\r\n                    elements.splice(i, 1);\r\n                    i -= 1;\r\n                }\r\n            }\r\n            box = Util.create({ tag: 'g' });\r\n            // Calculate new Height\r\n            let c: number;\r\n            z = 0;\r\n            for (c = 0; c < elements.length; c += 1) {\r\n                if (typeof elements[c] === 'string') {\r\n                    z += 1;\r\n                } else {\r\n                    z += elements[c].length;\r\n                }\r\n            }\r\n            z = z * 25 + 6;\r\n            box.appendChild(Util.create({\r\n                tag: 'rect',\r\n                rx: 0,\r\n                x: offsetX,\r\n                y: (offsetY + 28),\r\n                width: 70,\r\n                height: z,\r\n                stroke: '#000',\r\n                fill: '#fff',\r\n                opacity: '0.7'\r\n            }));\r\n            node['$heightMax'] = z + node['$heightMin'];\r\n\r\n            svg['elements'] = elements;\r\n            if (node['type'] === 'DropDown') {\r\n                svg['activ'] = Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': 60,\r\n                    'x': (10 + offsetX),\r\n                    'y': 20,\r\n                    value: node['activText']\r\n                });\r\n                svg.appendChild(svg.activ);\r\n            }\r\n\r\n            y = offsetY + 46;\r\n            // 46 -28 = 18\r\n\r\n            func = function (event: Event) {\r\n                if (svg.activ) {\r\n                    svg.activ.textContent = (<any>event.currentTarget).value;\r\n                }\r\n            };\r\n            let txt: string;\r\n            let textClass = 'SVGTEXT';\r\n            for (z = 0; z < elements.length; z += 1) {\r\n                if (typeof elements[z] === 'string') {\r\n                    txt = elements[z];\r\n                } else {\r\n                    item = this.addText(y, offsetX, box, elements[z][0], 'SVGTEXT');\r\n                    y += 26;\r\n                    for (c = 1; c < elements[z].length; c += 1) {\r\n                        item = this.addText(y, offsetX, box, '* ' + elements[z][c], 'SVGTEXTITEM');\r\n\r\n                        item['value'] = elements[z];\r\n                        if (node['action']) {\r\n                            item['onclick'] = node['action'];\r\n                        } else {\r\n                            item['onclick'] = func;\r\n                        }\r\n                        y += 26;\r\n                    }\r\n                    txt = elements[z];\r\n                    let subBox = Util.create({\r\n                        tag: 'rect',\r\n                        rx: 0,\r\n                        x: offsetX,\r\n                        y: (offsetY + 28),\r\n                        width: 60,\r\n                        height: z,\r\n                        stroke: '#000',\r\n                        fill: '#fff',\r\n                        opacity: '0.7'\r\n                    });\r\n                    continue;\r\n                }\r\n                // let txt = elements[z];\r\n                item = this.addText(y, offsetX, box, txt, textClass);\r\n\r\n                item['value'] = elements[z];\r\n                if (node['action']) {\r\n                    item['onclick'] = node['action'];\r\n                } else {\r\n                    item['onclick'] = func;\r\n                }\r\n                y += 26;\r\n            }\r\n            svg.choicebox = box;\r\n        }\r\n        svg.tool = node;\r\n        svg.onclick = function () {\r\n            if (svg.status === 'close') {\r\n                svg.open();\r\n            } else {\r\n                svg.close();\r\n            }\r\n        };\r\n        svg.close = function () {\r\n            if (svg.status === 'open' && svg.choicebox) {\r\n                this.removeChild(svg.choicebox);\r\n            }\r\n            svg.status = 'close';\r\n            svg.tool.$size.height = svg.tool.heightMin;\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x, g.tool.height + g.tool.y);\r\n            Util.setSize(svg, svg.tool.$size.x, svg.tool.$size.y);\r\n        };\r\n        svg.open = function () {\r\n            if (this.tagName === 'svg') {\r\n                return;\r\n            }\r\n            if (svg.status === 'close' && svg.choicebox) {\r\n                this.appendChild(svg.choicebox);\r\n            }\r\n            svg.status = 'open';\r\n            svg.tool.$size.height = svg.tool.heightMax;\r\n            Util.setSize(svg, svg.tool.width, svg.tool.height);\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x + 10, g.tool.height + g.tool.y + 10);\r\n        };\r\n        svg.close();\r\n        return svg;\r\n    }\r\n\r\n    public static addChild(parent: SVGElement, json: JSON | Element): void {\r\n        let item: Element;\r\n        if ((<any>json).offsetLeft) {\r\n            item = <Element>json;\r\n        } else {\r\n            item = Util.create(json);\r\n        }\r\n        item.setAttribute('class', 'draggable');\r\n        parent.appendChild(item);\r\n    }\r\n\r\n    public static all(node: any): void {\r\n        SymbolLibary.drawSmiley(node);\r\n        SymbolLibary.drawDatabase(node);\r\n        SymbolLibary.drawLetter(node);\r\n        SymbolLibary.drawMobilephone(node);\r\n        SymbolLibary.drawWall(node);\r\n        SymbolLibary.drawActor(node);\r\n        SymbolLibary.drawLamp(node);\r\n        SymbolLibary.drawArrow(node);\r\n        SymbolLibary.drawButton(node);\r\n        SymbolLibary.drawDropdown(node);\r\n        SymbolLibary.drawClassicon(node);\r\n        SymbolLibary.drawClassWithEdgeicon(node);\r\n    }\r\n\r\n    public static drawHamburger(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'circle', r: 10, fill: '#ccc', cx: 12, cy: 12, 'stroke-width': 1, stroke: 'black'},\r\n                { tag: 'path', d: 'M 8,7 H 16 M 8,12 H 16 M 8,17 H 16', stroke: 'black', fill: 'none' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawSmiley(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'path', d: 'm49.01774,25.64542a24.5001,24.5 0 1 1 -49.0001,0a24.5001,24.5 0 1 1 49.0001,0z', stroke: 'black', fill: 'none' }, { tag: 'path', d: 'm8,31.5c16,20 32,0.3 32,0.3' },\r\n                { tag: 'path', d: 'm19.15,20.32a1.74,2.52 0 1 1 -3.49,0a1.74,2.52 0 1 1 3.49,0z' },\r\n                { tag: 'path', d: 'm33,20.32a1.74,2.52 0 1 1 -3.48,0a1.74,2.52 0 1 1 3.48,0z' },\r\n                { tag: 'path', d: 'm5.57,31.65c3.39,0.91 4.03,-2.20 4.03,-2.20' },\r\n                { tag: 'path', d: 'm43,32c-3,0.91 -4,-2.20 -4.04,-2.20' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDatabase(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 40,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,-6.26 25.03,-6.26 25.03,0l0,25.82c0,6.26 -25.03,6.26 -25.03,0l0,-25.82z',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLetter(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 17,\r\n            items: [\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1,1l22,0l0,14l-22,0l0,-14z' },\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1.06,1.14l10.94,6.81l10.91,-6.91' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMobilephone(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 4.2 0.5 15.61 0c 2 0 3.7 1.65 3.7 3.7l 0 41.6c 0 2-1.65 3.7-3.7 3.7l-15.6 0c-2 0-3.7-1.6-3.7-3.7l 0-41.6c 0-2 1.6-3.7 3.7-3.7z',\r\n                    fill: 'none',\r\n                    stroke: 'black'\r\n                },\r\n                { tag: 'path', d: 'm 12.5 2.73a 0.5 0.5 0 1 1-1 0 0.5 0.5 0 1 1 1 0z' },\r\n                { tag: 'path', d: 'm 14 46a 2 2 0 1 1-4 0 2 2 0 1 1 4 0z' },\r\n                { tag: 'path', d: 'm 8 5 7 0' },\r\n                { tag: 'path', d: 'm 1.63 7.54 20.73 0 0 34-20.73 0z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawWall(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'path', d: 'm26,45.44l-5,3.56l-21,-9l0,-36.41l5,-3.56l20.96,9l-0,36.4z' },\r\n                {\r\n                    tag: 'path',\r\n                    stroke: 'white',\r\n                    d: 'm2.21,11l18.34,7.91m-14.46,-12.57l0,6.3m8.2,21.74l0,6.35m-8.6,-10l0,6.351m4.1,-10.67l0,6.3m4.8,-10.2l0,6.3m-8.87,-10.23l0,6.35m4.78,-10.22l0,6.35m-8,14.5l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m0,-13l0,34m-18.23,-41.84l18.3,8m0,0.11l5,-3.57'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawActor(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'line', stroke: '#000', x1: '12', y1: '10', x2: '12', y2: '30' },\r\n                { tag: 'circle', stroke: '#000', cy: '5', cx: '12', r: '5' },\r\n                { tag: 'line', stroke: '#000', y2: '18', x2: '25', y1: '18', x1: '0' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '5', y1: '30', x1: '12' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '20', y1: '30', x1: '12' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLamp(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 22.47 10.58c-6.57 0-11.89 5.17-11.89 11.54 0 2.35 0.74 4.54 2 6.36 2 4 4.36 5.63 4.42 10.4l 11.15 0c 0.12-4.9 2.5-6.8 4.43-10.4 1.39-1.5 1.8-4.5 1.8-6.4 0-6.4-5.3-11.5-11.9-11.5z',\r\n                    fill: 'white',\r\n                    stroke: 'black'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 40 8 0c 0.58 0 1 0.5 1 1 0 0.6-0.5 1-1 1l-8 0c-0.6 0-1-0.47-1-1 0-0.58 0.47-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 42.7 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 45.3 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                { tag: 'path', d: 'm 19.5 48c 0.37 0.8 1 1.3 1.9 1.7 0.6 0.3 1.5 0.3 2 0 0.8-0.3 1.4-0.8 1.9-1.8z' },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 6 37.5 4.2-4c 0.3-0.3 0.8-0.3 1 0 0.3 0.3 0.3 0.8 0 1.1l-4.2 4c-0.3 0.3-0.8 0.3-1.1 0-0.3-0.3-0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 39 37.56-4.15-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 38 23 5.8 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.8 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 1.3 23 6 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.9 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 34.75 11.2 4-4.1c 0.3-0.3 0.3-0.8 0-1-0.3-0.3-0.8-0.3-1 0l-4 4.1c-0.3 0.3-0.3 0.8 0 1 0.3 0.3 0.8 0.3 1 0z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 11.23 10-4-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 21.64 1.3 0 5.8c 0 0.4 0.3 0.8 0.8 0.8 0.4 0 0.8-0.3 0.8-0.8l 0-5.8c 0-0.4-0.3-0.8-0.8-0.8-0.4 0-0.8 0.3-0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 26.1 24.3c-0.5 0-1 0.2-1.3 0.4-1.1 0.6-2 3-2.27 3.5-0.26-0.69-1.14-2.9-2.2-3.5-0.7-0.4-2-0.7-2.5 0-0.6 0.8 0.2 2.2 0.9 2.9 1 0.9 3.9 0.9 3.9 0.9 0 0 0 0 0 0 0.54 0 2.8 0 3.7-0.9 0.7-0.7 1.5-2 0.9-2.9-0.2-0.3-0.7-0.4-1.2-0.4z'\r\n                },\r\n                { tag: 'path', d: 'm 22.5 28.57 0 10.7' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawStop(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 30,\r\n            height: 30,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: '#FFF',\r\n                    'stroke-width': '2',\r\n                    stroke: '#B00',\r\n                    d: 'm 6,6 a 14,14 0 1 0 0.06,-0.06 z m 0,0 20,21'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMin(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    d: 'm 0,0 19,0 0,19 -19,0 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 13,-0.04'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawArrow(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 10,\r\n            height: 9,\r\n            rotate: node['rotate'],\r\n            items: [\r\n                { tag: 'path', fill: '#000', stroke: '#000', d: 'M 0,0 10,4 0,9 z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMax(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    'stroke-dashoffset': 2,\r\n                    'stroke-dasharray': '4.8,4.8',\r\n                    d: 'm 0,0 4.91187,0 5.44643,0 9.11886,0 0,19.47716 -19.47716,0 0,-15.88809 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 6,0.006 0.02,5 0.01,-11 -0.03,6.02 c 2,-0.01 4,-0.002 6,0.01'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawButton(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight, btnValue;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        btnValue = node['value'] || '';\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: 60,\r\n            height: 28,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 8,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    filter: 'url(#drop-shadow)',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                { tag: 'text', $font: true, x: 10, y: 18, fill: 'black', value: btnValue, 'class': 'hand' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDropdown(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 0,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth - 20,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 2,\r\n                    x: btnWidth - 20,\r\n                    y: 0,\r\n                    width: 20,\r\n                    height: 28,\r\n                    stroke: '#000',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    style: 'fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1',\r\n                    d: 'm ' + (btnWidth - 15) + ',13 10,0 L ' + (btnWidth - 10) + ',20 z'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassicon(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.19999l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm25.68807,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.2l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                { tag: 'line', x1: 11, y1: 7, x2: 25, y2: 7, stroke: '#000' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassWithEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M2,10 20,10 20,35 2,35 Z M2,17 20,17 M20,10 28,5 28,9 M 28.5,4.7 24,4',\r\n                    style: 'fill:none;stroke:#000000;transform:scale(0.8);'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClass(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: '100%',\r\n            height: '100%',\r\n            items: [\r\n                { tag: 'rect', width: 50, height: 40, x: 0, y: 0, 'stroke-width': 2, stroke: 'black', fill: 'none'},\r\n                { tag: 'rect', width: 50, height: 12, x: 0, y: 18, 'stroke-width': 1, stroke: 'black', fill: 'none'},\r\n                { tag: 'text', x: 27, y: 14, 'text-anchor': 'middle', 'font-size': 11, value: 'Class'},\r\n                { tag: 'text', x: 5, y: 24, 'font-size': 5, value: '+ field: type'},\r\n                { tag: 'text', x: 5, y: 36, 'font-size': 5, value: '+ method(type)'}\r\n            ]\r\n        });\r\n    }\r\n/*\r\n<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n    <g>\r\n    <text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text>\r\n        <text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>\r\n*/\r\n\r\n    public static drawEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M10,30 30,10 M19,10 30,10 30,21',\r\n                    style: 'fill:none;stroke:#555;stroke-width:2;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawCopynode(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M5 5 L15 5 L15 20 L5 20 Z M5 10 L15 10',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M8 2 L18 2 L18 17 L8 17 Z M8 7 L18 7'\r\n                        + 'M11 4.5 L15 4.5 '\r\n                        + 'M10 10 L16 10 '\r\n                        + 'M10 13 L16 13 ',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawBasket(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M12 12 L18 12 L18 11 L22 11 L22 12 L28 12 L28 14 L27 14 L27 29 L13 29 L13 14 L12 14 Z M13 14 L27 14 M20 17 L20 26 M17 16 L17 27 M23 16 L23 27',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawPencil(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M6 20 L12 23 L33 23 L33 17 L12 17 Z M30 17 L30 23 M12 17 L12 23 M15 19 L28 19 M15 21 L28 21',\r\n                    stroke: '#000',\r\n                    'stroke-width': 1,\r\n                    fill: 'white'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    private static addText(y: number, offsetX: number, box: Element, text: string, textClass: string): Element {\r\n        let item: Element;\r\n        box.appendChild(Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'text-anchor': 'left',\r\n            width: 70,\r\n            x: 10,\r\n            y: y,\r\n            class: textClass,\r\n            value: text,\r\n            eventValue: text\r\n        }));\r\n        if (textClass === 'SVGTEXT') {\r\n            textClass = 'SVGChoiceText';\r\n        } else {\r\n            textClass = 'SVGChoice';\r\n        }\r\n\r\n        item = Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            x: offsetX,\r\n            y: y - 18,\r\n            width: 70,\r\n            height: 24,\r\n            stroke: 'none',\r\n            class: textClass,\r\n        });\r\n        item['eventValue'] = text;\r\n        box.appendChild(item);\r\n        return item;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n}\r\n","import {Control} from '../../Control';\r\nimport BridgeElement from '../../BridgeElement';\r\nimport Data from '../../Data';\r\nimport {Util} from '../../util';\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Table extends Control {\r\n    protected items: BridgeElement[] = [];\r\n    private columns: Column[] = [];\r\n    private cells: Object = {};\r\n    private $bodysection: HTMLTableSectionElement;\r\n    private $headersection: HTMLTableSectionElement;\r\n    private showedItems: Array<BridgeElement> = [];\r\n    // BridgeElements:\r\n    private itemsIds: Object = {};\r\n    private countElement: HTMLElement;\r\n    private countColumn: HTMLElement;\r\n    private countColumnPos: number;\r\n    private resultColumn: string;\r\n    private lastSearchText: string;\r\n    private searchColumns: Array<string> = [];\r\n    private searchText: Array<string> = [];\r\n    private sortColumn: Column;\r\n    private direction: number;\r\n    private moveElement: Column = null;\r\n    private isDrag: boolean = false;\r\n    private moveTimeStamp: number;\r\n    private moveX: number;\r\n    private movePos: number;\r\n    private dragColumn: Column;\r\n    private dragPos: number;\r\n    private tableOption: HTMLTableHeaderCellElement;\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    private static indexOfChild(item: BridgeElement) {\r\n        let i: number = 0;\r\n        let child: Node = item.gui;\r\n        while ((child = child.previousSibling) !== null) {\r\n            i++;\r\n        }\r\n        return i;\r\n    }\r\n\r\n    public load(data: any): void {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n            if (data.property) {\r\n                this.property = data.property;\r\n            }\r\n\r\n            if (data.searchColumns) {\r\n                let search: Array<string> = [];\r\n                if (typeof(data.searchColumns) === 'string') {\r\n                    search = data.searchColumns.split(' ');\r\n                } else {\r\n                    search = data.searchColumns;\r\n                }\r\n                for (let z: number = 0; z < search.length; z++) {\r\n                    let item = search[z].trim();\r\n                    if (item.length > 0) {\r\n                        if (this.searchColumns.indexOf(item) < 0) {\r\n                            this.searchColumns.push(item);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        if (this.$view) {\r\n            // Must be an Update\r\n            if (data['columns']) {\r\n                // It is a json must add all things and generate HTML\r\n                for (let i in data['columns']) {\r\n                    if (data['columns'].hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    let col = this.parseData(data['columns'][i]);\r\n                    this.addHeaderInfo(col);\r\n                    this.columns.push(col);\r\n                    this.tableOption.parentElement.insertBefore(col.$element, this.tableOption);\r\n                }\r\n                for (let i in this.showedItems) {\r\n                    let item: BridgeElement = this.showedItems[i];\r\n                    let cell;\r\n                    // Now Add some Children\r\n                    while (item.gui.children.length < this.columns.length) {\r\n                        cell = document.createElement('td');\r\n                        item.gui.appendChild(cell);\r\n                    }\r\n                    // Now Remove Some Children\r\n                    while (item.gui.children.length > this.columns.length) {\r\n                        item.gui.removeChild(item.gui.children[item.gui.children.length - 1]);\r\n                    }\r\n                    for (let c: number = 0; c < this.columns.length; c++) {\r\n                        let name = this.columns[c].attribute;\r\n                        // let count = this.columns.length;\r\n                        cell = item.gui.children[c];\r\n                        cell.innerHTML = item.model.getValue(name);\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n\r\n        this.$view = document.getElementById(id);\r\n        let headerrow: HTMLTableRowElement;\r\n        if (this.$view) {\r\n            if (!this.property) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('table');\r\n            this.$owner.appendChild(this);\r\n        }\r\n        if (!this.$bodysection) {\r\n            // add tbody element if missing\r\n            this.$bodysection = document.createElement('tbody');\r\n            this.$view.appendChild(this.$bodysection);\r\n        }\r\n        if (data['classname']) {\r\n            this.$view.className = data['classname'];\r\n        } else {\r\n            this.$view.className = 'mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp';\r\n        }\r\n\r\n        this.id = id;\r\n        this.$view.id = id;\r\n        this.$view.setAttribute('type', this.constructor['name'].toLowerCase());\r\n        let counter = 0;\r\n        for (let c = 0; c < this.$view.children.length; c++) {\r\n            let row: HTMLTableRowElement = <HTMLTableRowElement>this.$view.children[c];\r\n            if (row instanceof HTMLTableSectionElement) {\r\n                if (row.tagName === 'THEAD') {\r\n                    headerrow = row;\r\n                    // Its a thead\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingHeader(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                } else {\r\n                    // Its a tbody\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingData(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                }\r\n            } else {\r\n                // fallback, if there are no thead and tbody...\r\n                if (counter === 0) {\r\n                    headerrow = row;\r\n                    this.parsingHeader(row);\r\n                } else {\r\n                    this.parsingData(row);\r\n                }\r\n            }\r\n            counter++;\r\n        }\r\n        if (!headerrow || !this.$headersection) {\r\n            if (!this.$headersection) {\r\n                // find eventually existing thead\r\n                let header = this.$view.getElementsByTagName('thead');\r\n                if (header.length === 0) {\r\n                    this.$headersection = document.createElement('thead');\r\n                    this.$view.appendChild(this.$headersection);\r\n                } else {\r\n                    // take first thead element\r\n                    this.$headersection = <HTMLTableSectionElement>header.item(0);\r\n                }\r\n            }\r\n            if (!headerrow) {\r\n                headerrow = document.createElement('tr');\r\n                this.$headersection.appendChild(headerrow);\r\n            }\r\n        }\r\n\r\n        if (data['columns']) {\r\n            // It is a json must add all things and generate HTML\r\n            for (let i in data['columns']) {\r\n                if (data['columns'].hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                let col = this.parseData(data['columns'][i]);\r\n                this.addHeaderInfo(col);\r\n                this.columns.push(col);\r\n                headerrow.appendChild(col.$element);\r\n            }\r\n            this.tableOption = document.createElement('th');\r\n            this.tableOption.classList.add('tableOption');\r\n            headerrow.appendChild(this.tableOption);\r\n            let context: HTMLElement = this.addOptionItem(null, this.tableOption, true);\r\n            let contentChild: HTMLElement = this.addOptionItem('show', context, true);\r\n            // let simpleLink: HTMLElement = this.addOptionItem('show', contentChild, false);\r\n            this.addOptionItem('show', contentChild, false);\r\n        }\r\n        this.registerEvents(['mousemove', 'mousedown', 'mouseup', 'resize', 'dragstart', 'dragover', 'drop', 'dragend']);\r\n\r\n        // Check for SearchBar\r\n        // if(data[\"searchproperty\"]){\r\n        // Create Full Row\r\n        let searchBar = document.createElement('tr');\r\n        let cell = document.createElement('td');\r\n        cell.setAttribute('colspan', '' + (this.columns.length));\r\n        searchBar.appendChild(cell);\r\n\r\n        let search = document.createElement('input');\r\n        search.className = 'search';\r\n        let that = this;\r\n        search.addEventListener('keyup', function (evt) {\r\n            that.search(evt.target['value']);\r\n        });\r\n\r\n        cell.appendChild(search);\r\n        if (this.resultColumn) {\r\n            if (this.resultColumn.indexOf('#') !== 0) {\r\n                this.countElement = document.createElement('div');\r\n                searchBar.appendChild(this.countElement);\r\n            } else {\r\n                for (let z: number = 0; z < this.$headersection.children.length; z++) {\r\n                    if (this.$headersection.children[z].innerHTML === this.resultColumn) {\r\n                        this.countColumn = <HTMLElement> this.$headersection.children[z];\r\n                        this.countColumnPos = z;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        let first = this.$headersection.children.item(0);\r\n        this.$headersection.insertBefore(searchBar, first);\r\n\r\n        this.updateElement(this.property, null);\r\n\r\n        // now update those elements, that were not loaded currently\r\n    }\r\n\r\n    public tableEvent(type: string, e: Event) {\r\n        let button: number = 0;\r\n        let eventX: number = 0;\r\n        if (e instanceof MouseEvent) {\r\n            button = e.buttons;\r\n            eventX = e.pageX;\r\n        }\r\n        if (type === 'mouseup') {\r\n            this.moveElement = null;\r\n        } else if (type === 'mousedown' || type === 'resize') {\r\n            // End to Resize\r\n            this.moveElement = null;\r\n            if (button === 1) {\r\n                let c: number;\r\n                for (c = 0; c < this.columns.length; c++) {\r\n                    if (this.columns[c].$resize === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = false;\r\n                        break;\r\n                    } else if (this.columns[c].$element === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = true;\r\n                    }\r\n                }\r\n                this.moveTimeStamp = e.timeStamp;\r\n                this.moveX = eventX;\r\n            } else {\r\n                this.moveTimeStamp = 0;\r\n            }\r\n        } else if (type === 'mousemove') {\r\n            if (button === 1 && this.moveElement) {\r\n                if (this.moveTimeStamp && e.timeStamp - this.moveTimeStamp < 2000) {\r\n                    if (this.isDrag) {\r\n                        // FIXME\r\n                    } else {\r\n                        let x = eventX - this.moveX;\r\n                        let width = this.moveElement.$element.offsetWidth;\r\n                        this.moveElement.$element.width = '' + (width + x);\r\n                        e.stopPropagation();\r\n                    }\r\n                }\r\n                this.moveX = eventX;\r\n                this.moveTimeStamp = e.timeStamp;\r\n            }\r\n        } else if (this.isDrag) {\r\n            this.columnDragEvent(type, <DragEvent> e);\r\n        }\r\n    }\r\n\r\n    public parsingHeader(row: HTMLTableRowElement) {\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let column: HTMLTableHeaderCellElement = <HTMLTableHeaderCellElement>row.children[i];\r\n            let id = column.innerHTML.trim();\r\n            let col: Column = null;\r\n            for (let c in this.columns) {\r\n                if (this.columns.hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                if (this.columns[c].label === id) {\r\n                    col = this.columns[c];\r\n                    col.$element = column;\r\n                    break;\r\n                }\r\n            }\r\n            if (col === null) {\r\n                col = new Column();\r\n                col.label = id;\r\n                col.attribute = column.getAttribute('attribute');\r\n                col.$element = column;\r\n                this.columns.push(col);\r\n            }\r\n            this.addHeaderInfo(col);\r\n        }\r\n    }\r\n\r\n    public parsingData(row: HTMLTableRowElement) {\r\n        let id = row.getAttribute('id');\r\n        let item: Data = this.$owner.getItem(id);\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let cell: HTMLTableCellElement = <HTMLTableCellElement>row.children[i];\r\n            let colAttribute = this.columns[i].attribute;\r\n            if (colAttribute.indexOf('\\.') < 0) {\r\n                item[colAttribute] = cell.innerHTML.trim();\r\n            }\r\n        }\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: Object, newValue: Object) {\r\n        if (entity) {\r\n            // Check for Show\r\n            if (this.property && !entity.hasProperty(property)) {\r\n                return;\r\n            }\r\n        }\r\n        if (entity.id === undefined) {\r\n            return;\r\n        }\r\n        let item: BridgeElement = <BridgeElement>this.itemsIds[entity.id];\r\n        let row: HTMLTableRowElement;\r\n        if (!item) {\r\n            item = new BridgeElement(entity);\r\n            this.items.push(item);\r\n            this.itemsIds[entity.id] = item;\r\n        }\r\n        row = this.cells[entity.id];\r\n        if (row) {\r\n            item.gui = row;\r\n        }\r\n        if (this.searching(item) === false) {\r\n            return;\r\n        }\r\n        let cell;\r\n        let showItem = false;\r\n\r\n        if (!row) {\r\n            showItem = true;\r\n            row = document.createElement('tr');\r\n            let count = this.columns.length;\r\n            for (let i = 0; i < count; i++) {\r\n                cell = document.createElement('td');\r\n                row.appendChild(cell);\r\n            }\r\n            this.cells[entity.id] = row;\r\n            item.gui = row;\r\n        }\r\n        for (let c: number = 0; c < this.columns.length; c++) {\r\n            let name = this.columns[c].attribute;\r\n            if (name === property) {\r\n                cell = row.children[c];\r\n                cell.innerHTML = <string>newValue;\r\n            }\r\n        }\r\n        if (showItem) {\r\n            this.showItem(item, true);\r\n        }\r\n        // super.propertyChange(entity, property, newValue, oldValue);\r\n    }\r\n\r\n    public sort(column: Column) {\r\n        if (this.sortColumn === column) {\r\n            if (this.direction === 1) {\r\n                this.direction = -1;\r\n                column.$element.classList.remove('asc');\r\n                column.$element.classList.add('desc');\r\n            } else {\r\n                this.direction = 1;\r\n                column.$element.classList.remove('desc');\r\n                column.$element.classList.add('asc');\r\n            }\r\n        } else {\r\n            if (this.sortColumn !== null) {\r\n                this.sortColumn.$element.classList.remove('desc');\r\n                this.sortColumn.$element.classList.remove('asc');\r\n            }\r\n            this.sortColumn = column;\r\n            this.sortColumn.$element.classList.add('asc');\r\n            this.direction = 1;\r\n        }\r\n        let that = this;\r\n        let sort = function (a: BridgeElement, b: BridgeElement) {\r\n            return that.sorting(a, b);\r\n        };\r\n        this.showedItems.sort(sort);\r\n        let len: number = this.showedItems.length;\r\n        let body = this.$bodysection;\r\n        let i = 0;\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            if (i !== Table.indexOfChild(item)) {\r\n                break;\r\n            }\r\n            i = i + 1;\r\n        }\r\n        while (body.children.length > i) {\r\n            body.removeChild(body.children.item(body.children.length - 1));\r\n        }\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            body.appendChild(item.gui);\r\n            i = i + 1;\r\n        }\r\n\r\n        //      body.removeChild(item.gui);\r\n        //      body.remove\r\n    }\r\n\r\n    public sorting(a: BridgeElement, b: BridgeElement): number {\r\n        let path: string[] = this.sortColumn.attribute.split('.');\r\n        let itemA = a.model.prop;\r\n        let itemB = b.model.prop;\r\n        let check = this.sortColumn.attribute;\r\n        for (let p = 0; p < path.length; p++) {\r\n            check = path[p];\r\n            if (itemA[check]) {\r\n                itemA = itemA[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n            if (itemB[check]) {\r\n                itemB = itemB[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n        if (itemA !== itemB) {\r\n            if (this.direction === 1) {\r\n                return (itemA < itemB) ? -1 : 1;\r\n            }\r\n            return (itemA < itemB) ? 1 : -1;\r\n\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    // Searching\r\n    public search(origSearchText: string): void {\r\n        if (!origSearchText) {\r\n            origSearchText = '';\r\n        }\r\n        let searchText: string = origSearchText.trim().toLowerCase();\r\n        if (searchText === this.lastSearchText && searchText !== '') {\r\n            return; // <==== nothing to be done\r\n        }\r\n        let oldSearch: string = this.lastSearchText;\r\n        this.lastSearchText = searchText;\r\n\r\n        this.parseSearchArray();\r\n        if (searchText !== '' && oldSearch !== null && searchText.indexOf(oldSearch) >= 0 && searchText.indexOf('|') < 0) {\r\n            this.searchArray(this.showedItems);\r\n        } else {\r\n            this.searchSet(this.items);\r\n        }\r\n        this.refreshCounter();\r\n    }\r\n\r\n    public refreshCounter() {\r\n        if (this.countColumn) {\r\n            this.countColumn.innerHTML = this.columns[this.countColumnPos].label + ' (' + this.showedItems.length + ')';\r\n        }\r\n        // var countElement = document.getElementById('talkCount');\r\n        //  if (countElement) {\r\n        //     var txt = (this.showedItems.size() > 0 && searchText.length > 0 ) ? this.options.TEXT_SEARCHLIST : this.options.TEXT_SEARCHFULLLIST;\r\n        //     countElement.innerHTML = txt.replace(\"%LEN%\", this.root['children'].length).replace(\"%COUNT%\", this.showedItems.size()).replace(\"%SEARCH%\", origSearchText);\r\n        // }\r\n        // if (this.countColumn) {\r\n        //     this.countColu1mn.innerHTML = this.countColumn[\"label\"] + \" (\" + this.showedItems.size() + \")\";\r\n        // }\r\n    }\r\n\r\n    public parseSearchArray() {\r\n        let pos: number = 0;\r\n        let split: Array<string> = [];\r\n        let quote: boolean = false;\r\n        for (let i: number = 0; i < this.lastSearchText.length; i++) {\r\n            if ((this.lastSearchText.charAt(i) === ' ') && !quote) {\r\n                let txt = this.lastSearchText.substring(pos, i).trim();\r\n                if (txt.length > 0) {\r\n                    split.push(txt);\r\n                }\r\n                pos = i + 1;\r\n            } else if (this.lastSearchText.charAt(i) === '\\\"') {\r\n                if (quote) {\r\n                    let txt = this.lastSearchText.substring(pos, i).trim();\r\n                    if (txt.length > 0) {\r\n                        split.push(txt);\r\n                    }\r\n                    pos = i + 1;\r\n                } else {\r\n                    pos = i + 1;\r\n                }\r\n                quote = !quote;\r\n            }\r\n        }\r\n        if (pos < this.lastSearchText.length) {\r\n            split.push(this.lastSearchText.substring(pos, this.lastSearchText.length).trim());\r\n        }\r\n        this.searchText = split;\r\n        return split;\r\n    }\r\n\r\n    public searchArray(root: Array<BridgeElement>) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let i: number = 0; i < root.length; i++) {\r\n            let item: BridgeElement = root[i];\r\n            this.showItem(item, this.searching(item));\r\n        }\r\n    }\r\n\r\n    public searchSet(root: BridgeElement[]) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let item of root) {\r\n            let child: BridgeElement = <BridgeElement>item;\r\n            this.showItem(child, this.searching(child));\r\n        }\r\n    }\r\n\r\n    public showItem(item: BridgeElement, visible: boolean) {\r\n        if (visible) {\r\n            this.showedItems.push(item);\r\n            this.$bodysection.appendChild(item.gui);\r\n        } else if (item.gui && item.gui.parentElement) {\r\n            this.$bodysection.removeChild(item.gui);\r\n        }\r\n    }\r\n\r\n    public searching(item: BridgeElement): boolean {\r\n        let fullText: string = '';\r\n        for (let i: number = 0; i < this.searchColumns.length; i++) {\r\n            fullText = fullText + ' ' + item.model.getValue(this.searchColumns[i]);\r\n        }\r\n        fullText = fullText.trim().toLowerCase();\r\n        for (let z: number = 0; z < this.searchText.length; z++) {\r\n            if ('' !== this.searchText[z]) {\r\n                let orSplit: Array<string>;\r\n                if (this.searchText[z].indexOf('|') > 0) {\r\n                    orSplit = this.searchText[z].split('|');\r\n                } else {\r\n                    orSplit = [this.searchText[z]];\r\n                }\r\n                let o: number = 0;\r\n                for (; o < orSplit.length; o++) {\r\n                    let pos: number = orSplit[o].indexOf(':');\r\n                    if (orSplit[o].indexOf('#') === 0 && pos > 1) {\r\n                        // if (searchProperties.contains(propString)) {\r\n                        let value: string = orSplit[o].substring(pos + 1);\r\n                        let column: string = orSplit[o].substring(1, pos - 1);\r\n                        let dataValue: Object = item.model.getValue(column);\r\n                        if (dataValue) {\r\n                            if (dataValue.toString().toLowerCase().indexOf(value) >= 0) {\r\n                                // Search for simple Property\r\n                                break;\r\n                            }\r\n                        }\r\n                    } else if (orSplit[o].length > 1 && orSplit[o].indexOf('-') === 0) {\r\n                        if (fullText.indexOf(orSplit[o].substring(1)) < 0) {\r\n                            break;\r\n                        }\r\n                    } else if (fullText.indexOf(orSplit[o]) >= 0) {\r\n                        // his search word is found in full text\r\n                        break;\r\n                    }\r\n                }\r\n                if (o === orSplit.length) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public getColumn(): Column[] {\r\n        return this.columns;\r\n    }\r\n\r\n    public updateElement(property: string, value: string): void {\r\n        // first clear all elements inside the table:\r\n        for (let item of this.items) {\r\n            if (item instanceof BridgeElement) {\r\n                (<BridgeElement>item).model.removeListener(this);\r\n            }\r\n        }\r\n\r\n        this.items = [];\r\n        this.itemsIds = {};\r\n\r\n        // load all entitys that match the property\r\n        if (this.property !== undefined) {\r\n            let items = this.$owner.getItems();\r\n            for (let j in items) {\r\n                if (items.hasOwnProperty(j)) {\r\n                    let item = items[j];\r\n                    if (item instanceof Data) {\r\n                        if (property === j) {\r\n                            // if (property == item.property) {\r\n                            let i = new BridgeElement(<Data>item);\r\n                            this.items.push(i);\r\n                            this.itemsIds[item.id] = i;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            this.redrawAllElements();\r\n        }\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        if (this.$owner !== null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    protected redrawAllElements() {\r\n        let children: HTMLCollection = this.$bodysection.children;\r\n        // remove old children\r\n        for (let i = 0; i < children.length; i++) {\r\n            let child = children.item(i);\r\n            // remove child\r\n            this.$bodysection.removeChild(child);\r\n        }\r\n\r\n        // load new children\r\n        for (let obj of this.items) {\r\n            // register listeners\r\n            obj.model.addListener(this);\r\n            // create tr\r\n            let row = this.createRow(obj);\r\n            this.$bodysection.appendChild(row);\r\n            this.cells[obj.id] = row;\r\n        }\r\n    }\r\n\r\n    private parseData(column: any): Column {\r\n        let col = new Column();\r\n        col.label = column.label || column.id;\r\n        col.attribute = column.attribute || column.label || column.id;\r\n        col.$element = document.createElement('th');\r\n        col.$element.innerHTML = col.label;\r\n        col.$element.draggable = true;\r\n\r\n        // resize Header\r\n        col.$resize = document.createElement('div');\r\n        col.$resize.classList.add('resize');\r\n        col.$element.appendChild(col.$resize);\r\n\r\n        return col;\r\n    }\r\n\r\n    private createRow(data: BridgeElement): HTMLTableRowElement {\r\n        let tr: HTMLTableRowElement = document.createElement('tr');\r\n\r\n        for (let id of this.columns) {\r\n            let td: HTMLTableDataCellElement = document.createElement('td');\r\n            tr.appendChild(td);\r\n            td.innerHTML = data.model.getValue(id.attribute);\r\n        }\r\n        return tr;\r\n    }\r\n\r\n    private addHeaderInfo(col: Column) {\r\n        let element: HTMLTableCellElement = col.$element;\r\n        let that = this;\r\n        element.classList.add('sort');\r\n        element.addEventListener('click',\r\n            function () {\r\n                that.sort(col);\r\n            },\r\n            false);\r\n    }\r\n\r\n    private columnDragEvent(type: string, e: DragEvent) {\r\n        if (type === 'dragstart') {\r\n            // Target (this) element is the source node.\r\n            this.moveElement.$element.style.opacity = '0.4';\r\n            e.dataTransfer.effectAllowed = 'move';\r\n            e.dataTransfer.setData('text/json', JSON.stringify(Util.toJson(this.moveElement)));\r\n        } else if (type === 'dragenter') {\r\n            // TO Nothing\r\n        } else if (type === 'dragleave') {\r\n            this.moveElement.$element.classList.remove('over');\r\n        } else if (type === 'dragover') {\r\n            if (e.preventDefault) {\r\n                e.preventDefault(); // Necessary. Allows us to drop.\r\n            }\r\n            for (let c = 0; c < this.columns.length; c++) {\r\n                if (this.columns[c].$element === e.target) {\r\n                    this.dragColumn = this.columns[c];\r\n                    this.dragPos = c;\r\n                    this.columns[c].$element.classList.add('over');\r\n                } else {\r\n                    this.columns[c].$element.classList.remove('over');\r\n                }\r\n            }\r\n            if (e.target === this.tableOption) {\r\n                this.tableOption.classList.add('over');\r\n                this.dragPos = this.columns.length;\r\n            } else {\r\n                this.tableOption.classList.remove('over');\r\n            }\r\n            e.dataTransfer.dropEffect = 'move';  // See the section on the DataTransfer object.\r\n        } else if (type === 'drop') {\r\n            // this / e.target is current target element.\r\n            if (e.stopPropagation) {\r\n                e.stopPropagation(); // stops the browser from redirecting.\r\n            }\r\n            if (this.movePos === this.dragPos) {\r\n                return;\r\n            }\r\n            // movePos -> dragPos\r\n            // See the section on the DataTransfer object.\r\n            // DataModel\r\n            this.columns.splice(this.movePos, 1);\r\n            if (this.movePos >= this.dragPos) {\r\n                this.columns.splice(this.dragPos, 0, this.moveElement);\r\n            } else {\r\n                this.columns.splice(this.dragPos - 1, 0, this.moveElement);\r\n            }\r\n\r\n            // Header Line\r\n            let line: HTMLElement = this.moveElement.$element.parentElement;\r\n            line.removeChild(this.moveElement.$element);\r\n            if (this.dragPos < this.columns.length) {\r\n                line.insertBefore(this.moveElement.$element, this.dragColumn.$element);\r\n            } else {\r\n                line.insertBefore(this.moveElement.$element, this.tableOption);\r\n            }\r\n\r\n            let oldElement: Element;\r\n            let newElement: Element;\r\n\r\n            // Now all Childs\r\n            for (let i = 0; i < this.$bodysection.children.length; i++) {\r\n                // Each line\r\n                line = <HTMLElement>this.$bodysection.children.item(i);\r\n                oldElement = line.children.item(this.movePos);\r\n                newElement = line.children.item(this.dragPos);\r\n                line.removeChild(oldElement);\r\n                line.insertBefore(oldElement, newElement);\r\n            }\r\n        } else if (type === 'dragend') {\r\n            // this/e.target is the source node.\r\n            this.moveElement.$element.style.opacity = '1';\r\n            for (let i = 0; i < this.columns.length; i++) {\r\n                this.columns[i].$element.classList.remove('over');\r\n            }\r\n            this.tableOption.classList.remove('over');\r\n        }\r\n    }\r\n\r\n    private addOptionItem(label: string, parent: HTMLElement, sub: boolean): HTMLElement {\r\n        let labelControl;\r\n        if (label) {\r\n            labelControl = document.createElement('a');\r\n            labelControl.appendChild(document.createTextNode(label));\r\n            labelControl.href = 'javascript:void(0);';\r\n            parent.appendChild(labelControl);\r\n        }\r\n        if (sub) {\r\n            let context = document.createElement('div');\r\n            context.classList.add('dropdown-content');\r\n            context.style.setProperty('position', 'absolute');\r\n            parent.appendChild(context);\r\n\r\n            /* When the user clicks on the button,\r\n             toggle between hiding and showing the dropdown content */\r\n            parent.addEventListener(\r\n                'click',\r\n                function () {\r\n                    context.classList.toggle('show');\r\n                },\r\n                false);\r\n            return context;\r\n        }\r\n        return labelControl;\r\n    }\r\n\r\n    private registerEvents(events: string[]) {\r\n        let that = this;\r\n        for (let i = 0; i < events.length; i++) {\r\n            this.$view.addEventListener(events[i], function (evt) {\r\n                return that.tableEvent(events[i], evt);\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\nclass Column {\r\n    label: string;\r\n    attribute: string;\r\n    $element: HTMLTableHeaderCellElement;\r\n    $resize: HTMLDivElement;\r\n    visible: boolean;\r\n}\r\n","import { AutoComplete } from './AutoComplete';\r\nimport { BR } from './BR';\r\nimport { Div } from './Div';\r\nimport { Label } from './Label';\r\n\r\nexport * from './Node';\r\nexport * from './Class';\r\nexport * from './SO';\r\nexport * from './Symbol';\r\n\r\nexport * from './BR';\r\nexport * from './Button';\r\nexport * from './Div';\r\nexport * from './Form';\r\nexport * from './Input';\r\nexport * from './Label';\r\nexport * from './Table';\r\nexport * from './HTML';\r\nexport * from './Dice';\r\nexport * from './AutoComplete';\r\nexport * from './Attribute';\r\nexport * from './Method';\r\nexport * from './ClazzProperty';\r\n\r\nnew AutoComplete();\r\nnew BR();\r\nnew Div();\r\nnew Label();\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class AddNode implements EventHandler {\r\n\r\n    public MIN_SIZE_TO_ADD_NODE: number = 30;\r\n    public MIN_SIZE_TO_ADD_TEXT: number = 10;\r\n    private graph: Graph;\r\n    private svgRect: SVGSVGElement;\r\n    private svgGroupAddNode: SVGSVGElement;\r\n    private svgTextAddNode: SVGSVGElement;\r\n    private svgTextRectAddNode: SVGSVGElement;\r\n    private isRectDrawing: boolean;\r\n    private isDrawToLeft: boolean;\r\n    private isDrawToTop: boolean;\r\n    private isBigEnoughForAddNode: boolean;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(AddNode.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(AddNode.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!this.canHandle()) {\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element.id !== 'RootElement') {\r\n            return false;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element.id === 'RootElement') {\r\n                    this.start(event, element);\r\n\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mousemove':\r\n                this.drawRect(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.removeRect();\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.addNode();\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawRect(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isRectDrawing) {\r\n            return;\r\n        }\r\n\r\n        evt.stopPropagation();\r\n\r\n        let width = Util.getEventX(evt) - this.x;\r\n        let height = Util.getEventY(evt) - this.y;\r\n\r\n        // rectangle is in a negative area, drawn to upper case. not possibble with svg\r\n        if (width < 0) {\r\n            this.isDrawToLeft = true;\r\n            width *= -1;\r\n        } else {\r\n            this.isDrawToLeft = false;\r\n        }\r\n\r\n        if (height < 0) {\r\n            this.isDrawToTop = true;\r\n            height *= -1;\r\n        } else {\r\n            this.isDrawToTop = false;\r\n        }\r\n\r\n        if (width > this.MIN_SIZE_TO_ADD_NODE && height > this.MIN_SIZE_TO_ADD_NODE) {\r\n            this.isBigEnoughForAddNode = true;\r\n        } else {\r\n            this.isBigEnoughForAddNode = false;\r\n        }\r\n\r\n        this.graph.root.style.cursor = 'pointer';\r\n\r\n        // if line wasnt draw\r\n        if (!this.svgRect) {\r\n\r\n            let rectAddNode = Util.createShape({\r\n                tag: 'rect',\r\n                id: 'addNodeRect',\r\n                x: this.x,\r\n                y: this.y,\r\n                width: 1,\r\n                height: 1,\r\n                class: 'SVGAddNode'\r\n            });\r\n\r\n            let group = Util.createShape({ tag: 'g', id: 'groupAddNode' });\r\n            group.appendChild(rectAddNode);\r\n\r\n            this.graph.root.appendChild(group);\r\n            this.svgRect = rectAddNode;\r\n            this.svgGroupAddNode = group;\r\n        }\r\n        else {\r\n\r\n            let svgRectBBox = this.svgRect.getBBox();\r\n\r\n            // if rect is big enough, show text as helper\r\n            if ((svgRectBBox.width > this.MIN_SIZE_TO_ADD_TEXT\r\n                || svgRectBBox.height > this.MIN_SIZE_TO_ADD_TEXT) && !this.svgTextAddNode) {\r\n\r\n                let textAddNode = Util.createShape({\r\n                    tag: 'text',\r\n                    x: this.x,\r\n                    y: this.y - 5,\r\n                    'font-family': 'Verdana',\r\n                    'font-size': 12,\r\n                    fill: 'black'\r\n                });\r\n                textAddNode.textContent = 'Hold on and move to create a new class';\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n\r\n\r\n                // get correct size of text node\r\n                let sizeClientRect: ClientRect = textAddNode.getBoundingClientRect();\r\n\r\n                let rectBackgroundForText = Util.createShape({\r\n                    tag: 'rect',\r\n                    x: this.x,\r\n                    y: this.y - sizeClientRect.height,\r\n                    width: sizeClientRect.width,\r\n                    height: sizeClientRect.height,\r\n                    fill: '#DDD',\r\n                    'stroke-width': 0\r\n                });\r\n\r\n                this.svgTextRectAddNode = rectBackgroundForText;\r\n                this.svgTextAddNode = textAddNode;\r\n                this.svgGroupAddNode.appendChild(rectBackgroundForText);\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n            }\r\n\r\n            if (this.isDrawToLeft) {\r\n                this.svgRect.setAttributeNS(null, 'x', '' + Util.getEventX(evt));\r\n            }\r\n\r\n            if (this.isDrawToTop) {\r\n                this.svgRect.setAttributeNS(null, 'y', '' + Util.getEventY(evt));\r\n            }\r\n\r\n            // set width and height\r\n            this.svgRect.setAttributeNS(null, 'width', width.toString());\r\n            this.svgRect.setAttributeNS(null, 'height', height.toString());\r\n\r\n            // set color\r\n            if (this.isBigEnoughForAddNode) {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode-ready');\r\n\r\n                // draw text\r\n            }\r\n            else {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeRect(): void {\r\n        this.isRectDrawing = false;\r\n        this.isBigEnoughForAddNode = false;\r\n\r\n        this.graph.root.style.cursor = 'default';\r\n\r\n        if (this.svgGroupAddNode) {\r\n            this.graph.root.removeChild(this.svgGroupAddNode);\r\n            this.svgGroupAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgRect) {\r\n            this.svgRect = undefined;\r\n        }\r\n\r\n        if (this.svgTextAddNode) {\r\n            this.svgTextAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgTextRectAddNode) {\r\n            this.svgTextRectAddNode = undefined;\r\n        }\r\n    }\r\n\r\n    private addNode(): void {\r\n\r\n        if (!this.isBigEnoughForAddNode) {\r\n            this.removeRect();\r\n            return;\r\n        }\r\n\r\n        this.removeRect();\r\n        let node = this.graph.addElementWithValues('Class', { x: this.x, y: this.y });\r\n        this.graph.drawElement(node);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isRectDrawing) {\r\n            return;\r\n        }\r\n        this.isRectDrawing = true;\r\n\r\n        this.x = Util.getEventX(evt);\r\n        this.y = Util.getEventY(evt);\r\n    }\r\n\r\n}\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement, Point } from '../elements/BaseElements';\r\nimport { GraphModel } from '../elements/Model';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Control } from '../Control';\r\nimport { Util } from '../util';\r\n\r\nexport class Drag implements EventHandler {\r\n\r\n    private element: DiagramElement;\r\n    private svgElement: SVGSVGElement;\r\n    private dragging = false;\r\n    private reinsert = false;\r\n    private mouseOffset = new Point();\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        if (!this.canHandle()) {\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if ((!this.dragging) && (element.id !== 'RootElement')) {\r\n                    this.element = element;\r\n                    this.svgElement = <SVGSVGElement>element.$view;\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mouseup':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n\r\n                break;\r\n            case 'mousemove':\r\n                if (this.dragging) {\r\n                    this.drag(event, element);\r\n                }\r\n                break;\r\n            case 'mouseleave':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Drag.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Drag.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private reset() {\r\n        this.dragging = false;\r\n        this.svgElement.style.cursor = 'pointer';\r\n\r\n        /*  WORKAROUND\r\n            Chrome got problem with the Node.appendChild() method.\r\n            Sometimes it works, sometimes not.\r\n            So the background is, in the drag method will the current element be appended\r\n            to front of the svg root.\r\n            If this happend, the click event won't fire.\r\n            So it will be fired manually.\r\n            This problem occurs only in chrome.\r\n        */\r\n        if (Util.isChrome()) {\r\n            let clickEvt = Util.createCustomEvent('click');\r\n            this.svgElement.dispatchEvent(clickEvt);\r\n        }\r\n    }\r\n\r\n    private start(evt: Event | any, element: Control) {\r\n\r\n        this.dragging = true;\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n        this.reinsert = true;\r\n\r\n        this.svgElement.style.cursor = 'move';\r\n    }\r\n\r\n    private drag(evt: Event | any, element: DiagramElement) {\r\n\r\n        if (this.reinsert) {\r\n            if (this.element.id !== 'RootElement') {\r\n                // nesseccary to set the dragged object on top of svg children\r\n                this.graph.root.appendChild(this.svgElement);\r\n            }\r\n\r\n            let dragEvent = Util.createCustomEvent('drag');\r\n            element.$view.dispatchEvent(dragEvent);\r\n        }\r\n        this.reinsert = false;\r\n\r\n        evt.stopPropagation();\r\n\r\n        const translation = this.svgElement.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        const sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        const transX = sx + evt.clientX - this.mouseOffset.x;\r\n        const transY = sy + evt.clientY - this.mouseOffset.y;\r\n        this.svgElement.setAttributeNS(null, 'transform', 'translate(' + transX + ' ' + transY + ')');\r\n        this.element.getPos().addNum(transX - sx, transY - sy);\r\n\r\n        if (this.element instanceof Node) {\r\n            (<Node>this.element).redrawEdges();\r\n        }\r\n\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n\r\n\r\n        // resize svg root\r\n        let maxX = this.element.getPos().x + this.element.getSize().x;\r\n        let maxY = this.element.getPos().y + this.element.getSize().y;\r\n\r\n        let domRectRoot = this.graph.root.getBoundingClientRect();\r\n        if(!domRectRoot){\r\n            return;\r\n        }\r\n\r\n        if(maxX > domRectRoot.width){\r\n            this.graph.root.setAttributeNS(null, 'width', '' + maxX);\r\n        }\r\n        \r\n        if(maxY > domRectRoot.height){\r\n            this.graph.root.setAttributeNS(null, 'height', '' + maxY);\r\n        }\r\n    }\r\n}\r\n","import PropertyChangeSupport from '../PropertyChangeSupport';\r\nimport Data from '../Data';\r\nimport {Adapter} from '../Adapter';\r\nimport ClazzProperty from '../elements/nodes/ClazzProperty';\r\n\r\nexport class GraphListener implements PropertyChangeSupport {\r\n    private $owner: ClazzProperty;\r\n\r\n    constructor(owner: ClazzProperty) {\r\n        this.$owner = owner;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        let adapter = this.$owner.getRoot().getAdapter();\r\n        if (adapter) {\r\n            // messages.add(\"{\\\"class\\\":\\\"de.uniks.networkparser.test.model.House\\\",\\\"id\\\":\\\"H1\\\",\\\"rem\\\":{\\\"floor\\\":4},\\\"upd\\\":{\\\"floor\\\":42}}\");\r\n            let myId =  this.$owner.$owner.getId();\r\n            if (myId && myId.length > 0) {\r\n                let pos = myId.indexOf(':');\r\n                if (pos > 0) {\r\n                    myId = myId.substring(0, pos).trim();\r\n                }\r\n            }\r\n            let myName = this.$owner.getName();\r\n            let remJson = {};\r\n            remJson[myName] = oldValue;\r\n            let updJson = {};\r\n            updJson[myName] = newValue;\r\n            let json = {};\r\n            json['id'] = myId;\r\n            json['rem'] = remJson;\r\n            json['upd'] = updJson;\r\n            let message = JSON.stringify(json);\r\n            (<Adapter> adapter).update(message);\r\n        }\r\n    }\r\n}\r\n","import {Graph} from '../elements/';\r\nimport {EventHandler, EventBus} from '../EventBus';\r\nimport {DiagramElement} from '../elements/';\r\nimport {Util} from '../util';\r\n\r\nexport class ImportFile implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(ImportFile.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(ImportFile.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        let type: string = typeof event;\r\n        if (type !== 'DragEvent') {\r\n            return false;\r\n        }\r\n        let evt: DragEvent = <DragEvent>event;\r\n        if (evt.type === 'dragover') {\r\n            this.handleDragOver(evt);\r\n        } else if (evt.type === 'dragleave') {\r\n            if (this.graph.$view !== evt.target) {\r\n                return false;\r\n            }\r\n            this.setBoardStyle('dragleave');\r\n        } else if (evt.type === 'drop') {\r\n            this.handleLoadFile(evt);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public setBoardStyle(typ: string): boolean {\r\n        let b = this.graph.$view;\r\n        Util.removeClass(b, 'Error');\r\n        Util.removeClass(b, 'Ok');\r\n        Util.removeClass(b, 'Add');\r\n        if (typ === 'dragleave') {\r\n            if (b['errorText']) {\r\n                b.removeChild(b['errorText']);\r\n                b['errorText'] = null;\r\n            }\r\n            return true;\r\n        }\r\n        Util.addClass(b, typ);\r\n        if (typ === 'Error') {\r\n            if (!b['errorText']) {\r\n                b['errorText'] = Util.create({tag: 'div', style: 'margin-top: 30%', value: 'NO TEXTFILE'});\r\n                b.appendChild(b['errorText']);\r\n            }\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private handleLoadFile(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n\r\n        let files = evt.dataTransfer.files; // FileList object.\r\n\r\n        if (files.length > 1) {\r\n            evt.dataTransfer.dropEffect = 'none';\r\n            return;\r\n        }\r\n\r\n        // files is a FileList of File objects. List some properties.\r\n        let reader  = new FileReader();\r\n        let output = [];\r\n        let htmlResult = '';\r\n        let that = this;\r\n        for (let i = 0, f; f = files[i]; i++) {\r\n            reader.onload = function(event) {\r\n                htmlResult = event.target['result'];\r\n                console.log('fileContent: ' + htmlResult);\r\n\r\n                // CHANGE TO INTERNAL OBJECT\r\n                if (that.graph) {\r\n                    that.graph.import(htmlResult);\r\n                }\r\n            };\r\n            reader.readAsText(f);\r\n        }\r\n        this.setBoardStyle('dragleave');\r\n    }\r\n\r\n    private handleDragOver(evt: DragEvent): void {\r\n        let error: boolean = true, n: string, f;\r\n        let files = evt.dataTransfer.files;\r\n        // process all File objects\r\n        if (files && files.length > 0) {\r\n            for (let i: number = 0; i < files.length; i += 1) {\r\n                f = files[i];\r\n                if (f.type.indexOf('text') === 0) {\r\n                    error = false;\r\n                } else if (f.type === '') {\r\n                    n = f.name.toLowerCase();\r\n                    if (n.indexOf('json', n.length - 4) !== -1) {\r\n                        error = false;\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            let items = evt.dataTransfer.items;\r\n            if (items && items.length > 0) {\r\n                for (let z = 0; z < items.length; z ++) {\r\n                    if (items[z].type === '' || items[z].type === 'text/plain') {\r\n                        error = false;\r\n                    }\r\n                }\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.\r\n        if (error) {\r\n            this.dragStyler(evt, 'Error');\r\n        } else if (evt.ctrlKey) {\r\n            this.dragStyler(evt, 'Add');\r\n        } else {\r\n            this.dragStyler(evt, 'Ok');\r\n        }\r\n        /* //evt.target['className'] += ' diagramLoadFile';\r\n        '//console.log('handDragOver');*/\r\n    }\r\n\r\n    private dragStyler(event: Event, typ: string) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n        this.setBoardStyle(typ);\r\n    }\r\n\r\n    private handleDragLeave(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n        evt.dataTransfer.dropEffect = 'link'; // Explicitly show this is a copy.\r\n        evt.target['className'] = 'diagram';\r\n        console.log('handDragLeave');\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Class } from '../elements/nodes/Class';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Association } from '../elements/index';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class NewEdge implements EventHandler {\r\n    private graph: Graph;\r\n    private svgLine: SVGSVGElement;\r\n    private isEdgeDrawing: boolean;\r\n    private sourceNode: Node;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    private lastTargetNode: Node;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(NewEdge.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(NewEdge.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!((<KeyboardEvent>event).ctrlKey || EventBus.isHandlerActiveOrFree('NewEdge', true))) {\r\n            this.removeLine();\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element instanceof Node) {\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n\r\n            case 'mousemove':\r\n                this.drawEdge(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.setNewEdgeToNode(event);\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default: break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawEdge(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        let lineToX = Util.getEventX(evt);\r\n        let lineToy = Util.getEventY(evt);\r\n\r\n        let path = `M${this.x} ${this.y} L${lineToX} ${lineToy}`;\r\n        // if line wasnt draw\r\n        if (!this.svgLine) {\r\n\r\n            let attr = {\r\n                tag: 'path',\r\n                id: 'newEdgePath',\r\n                d: path,\r\n                class: 'SVGEdge'\r\n            };\r\n\r\n            let shape = Util.createShape(attr);\r\n            this.svgLine = shape;\r\n\r\n            this.graph.root.appendChild(shape);\r\n            this.graph.root.appendChild(this.sourceNode.$view);\r\n        }\r\n        else {\r\n\r\n            // set new L path\r\n            this.svgLine.setAttributeNS(null, 'd', path);\r\n\r\n            // get node from position\r\n            let targetNode = this.graph.$graphModel.getNodeByPosition(Util.getEventX(evt), Util.getEventY(evt));\r\n\r\n            // if some targetnode is available, so highlight the node\r\n            if (targetNode) {\r\n\r\n                // reset the last one\r\n                if (this.lastTargetNode && this.lastTargetNode.id !== targetNode.id) {\r\n                    this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n                }\r\n\r\n                this.lastTargetNode = targetNode;\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz-drawedge');\r\n            }\r\n            else if (this.lastTargetNode) {\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeLine(): void {\r\n        this.isEdgeDrawing = false;\r\n\r\n        if (this.svgLine) {\r\n            this.graph.root.removeChild(this.svgLine);\r\n            this.svgLine = null;\r\n        }\r\n\r\n        if (this.lastTargetNode) {\r\n            this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n        }\r\n    }\r\n\r\n    private setNewEdgeToNode(event: Event | any): void {\r\n        // get node from position\r\n        let targetNode = this.graph.$graphModel\r\n            .getNodeByPosition(Util.getEventX(event), Util.getEventY(event));\r\n\r\n        if (!targetNode) {\r\n            this.removeLine();\r\n\r\n            return;\r\n        }\r\n\r\n        this.removeLine();\r\n        let edgeType = this.sourceNode.$defaulEdgeType || 'Association';\r\n\r\n        let jsonData = {\r\n            type: edgeType,\r\n            source: this.sourceNode.id,\r\n            target: targetNode.id\r\n        };\r\n\r\n        let newEdge = this.graph.$graphModel.addEdge(<any>jsonData, true);\r\n        this.graph.drawElement(newEdge);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        this.isEdgeDrawing = true;\r\n        this.sourceNode = element as Class;\r\n\r\n        this.x = this.sourceNode.getPos().x + (this.sourceNode.getSize().x / 2);\r\n        this.y = this.sourceNode.getPos().y + (this.sourceNode.getSize().y / 2);\r\n\r\n        // TODO: get this into util or select\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Node } from '../elements/nodes';\r\nimport { Association } from '../elements/edges';\r\nimport { Util } from '../util';\r\nimport { SymbolLibary } from '../elements/nodes/Symbol';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\nimport Attribute from '../elements/nodes/Attribute';\r\n\r\nexport class Select implements EventHandler {\r\n\r\n    private deleteShape: SVGSVGElement;\r\n    private addEdgeShape: SVGSVGElement;\r\n    private copyNodeShape: SVGSVGElement;\r\n    private graph: Graph;\r\n    private padding = 5;\r\n\r\n    private lastSelectedNode: Element;\r\n    private lastSelectedEdge: Element;\r\n\r\n    private isDragged: boolean;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.deleteShape = SymbolLibary.drawSVG({ type: 'Basket', background: true, id: 'trashcan', tooltip: 'Delete class' });\r\n        this.copyNodeShape = SymbolLibary.drawSVG({ type: 'Copynode', background: true, id: 'copyNode', tooltip: 'Copy class' });\r\n        this.addEdgeShape = SymbolLibary.drawSVG({ type: 'Edgeicon', background: true, id: 'addEdge', tooltip: 'Click and drag to connect this class' });\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        let x = Util.getEventX(event);\r\n        let y = Util.getEventY(event);\r\n\r\n        event.stopPropagation();\r\n        if (event.type === 'drag') {\r\n            this.isDragged = true;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            if (element instanceof Node) {\r\n                this.lastSelectedNode = <Element>element.$view;\r\n            }\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n        }\r\n\r\n        if (event.target['id'] === 'background' || element === this.graph.$graphModel) {\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let e = <Node>element;\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.graph.root.appendChild(this.addEdgeShape);\r\n            this.graph.root.appendChild(this.copyNodeShape);\r\n            this.graph.root.appendChild(element.$view);\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'visible');\r\n\r\n            let x = (e.getPos().x + e.getSize().x) + 5;\r\n            let y = e.getPos().y;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y + this.padding})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.copyNodeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 40 + this.padding})`);\r\n            this.copyNodeShape.onclick = (evt) => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let copyClass = (element).copy();\r\n                copyClass.withPos(nextFreePosition.x, nextFreePosition.y);\r\n                this.graph.drawElement(copyClass);\r\n            };\r\n\r\n            this.addEdgeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 80 + this.padding})`);\r\n            this.addEdgeShape.onmousedown = function () {\r\n                EventBus.setActiveHandler('NewEdge');\r\n                element.$view.dispatchEvent(Util.createCustomEvent('mousedown'));\r\n            };\r\n        }\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let clazz = <Node>element;\r\n\r\n            if (Util.isChrome()) {\r\n                if (this.lastSelectedNode && element.id === this.lastSelectedNode.id && !this.isDragged) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            this.isDragged = false;\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            this.lastSelectedNode = <Element>element.$view;\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete class');\r\n\r\n            // draw textbox to edit clazz in one line\r\n            let divInlineEdit = document.createElement('div');\r\n            divInlineEdit.id = 'inlineEdit';\r\n            divInlineEdit.style.position = 'absolute';\r\n            divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n            divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n            divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n            divInlineEdit.style.zIndex = '42';\r\n\r\n            let inputText = document.createElement('input');\r\n            inputText.type = 'text';\r\n            inputText.style.width = '100%';\r\n            inputText.placeholder = 'Add properties, edit label';\r\n\r\n            divInlineEdit.appendChild(inputText);\r\n            document.body.appendChild(divInlineEdit);\r\n\r\n            inputText.addEventListener('focusout', (evt) => {\r\n\r\n                if (Util.isChrome()) {\r\n                    // only if input is empty, remove the inline edit function\r\n                    if ((!inputText.value || inputText.value.length === 0) && (!this.lastSelectedNode || element.id !== this.lastSelectedNode.id)) {\r\n                        this.removeLastInlineEdit();\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                // only if input is empty, remove the inline edit function\r\n                if ((!inputText.value || inputText.value.length === 0)) {\r\n                    this.removeLastInlineEdit();\r\n                }\r\n            });\r\n\r\n            let g = this.graph;\r\n            let propertyTypes: string[] = ['boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'short', 'String', 'void'];\r\n            inputText.addEventListener('keydown', function (evt) {\r\n\r\n                let keyCode = (<any>evt).which;\r\n                let inputValue = <any>inputText.value;\r\n\r\n                if (Util.endsWith(inputValue, ':') && !document.getElementById('selectPropertyType')) {\r\n                    let selectType = document.createElement('select');\r\n                    selectType.id = 'selectPropertyType';\r\n                    selectType.style.width = '100%';\r\n\r\n                    for (let type of propertyTypes) {\r\n                        let selectOption = document.createElement('option');\r\n                        selectOption.value = type;\r\n                        selectOption.innerHTML = type;\r\n                        selectType.appendChild(selectOption);\r\n                    }\r\n\r\n                    selectType.addEventListener('change', function (evt) {\r\n                        let inputValueSplitted = inputValue.split(':');\r\n                        let selectedPropertyType = selectType.options[selectType.selectedIndex].value;\r\n\r\n                        if (inputValueSplitted.length >= 1) {\r\n                            inputText.value = inputValueSplitted[0].trim() + ' : ' + selectedPropertyType;\r\n                            inputText.focus();\r\n                        }\r\n                    });\r\n\r\n                    divInlineEdit.appendChild(selectType);\r\n                }\r\n                else if (!Util.includes(inputValue, ':')) {\r\n                    let selectType = document.getElementById('selectPropertyType');\r\n\r\n                    if (selectType) {\r\n                        selectType.remove();\r\n                    }\r\n                }\r\n\r\n                if (keyCode !== 13) {\r\n                    return;\r\n                }\r\n\r\n                // attribute\r\n                if ((Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) === false) {\r\n                    if (Util.includes(inputValue, ':')) {\r\n                        clazz.addAttribute(inputValue.trim());\r\n                        clazz.reDraw();\r\n                    } else if (Util.includes(inputValue, '=') ) {\r\n                        let attr: Attribute = null;\r\n                        let name = inputValue.substring(0, inputValue.indexOf('=')).trim();\r\n                        for (let child of clazz.getAttributes() ) {\r\n                            if ( name === child.getName()) {\r\n                                attr = child;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (attr) {\r\n                            attr.updateValue(inputValue.substring(inputValue.indexOf('=') + 1).trim());\r\n                        }\r\n                        clazz.reDraw();\r\n                    }\r\n                }\r\n\r\n                // method\r\n                else if (Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) {\r\n                    clazz.addMethod(inputValue.trim());\r\n                    clazz.reDraw();\r\n                }\r\n                // label\r\n                else if (inputValue.trim().split(' ').length === 1 && inputValue.trim().length > 0) {\r\n                    clazz.updateLabel(inputValue.trim());\r\n                }\r\n\r\n                // reset size\r\n                divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n                divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n                divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n\r\n                inputText.value = '';\r\n\r\n                // remove combobox to select type of property\r\n                let selectType = document.getElementById('selectPropertyType');\r\n\r\n                if (selectType) {\r\n                    selectType.remove();\r\n                }\r\n\r\n                // TODO: reload propertiespanel. not working!\r\n                // event wont dispatch\r\n                // let customEvt = Util.createCustomEvent(EventBus.RELOADPROPERTIES);\r\n                // element.$view.dispatchEvent(customEvt);\r\n            });\r\n\r\n            (<any>divInlineEdit.children[0]).focus();\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Association) {\r\n            this.graph.root.appendChild(element.$view);\r\n            this.graph.root.appendChild(element.$sNode.$view);\r\n            this.graph.root.appendChild(element.$tNode.$view);\r\n\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete edge');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            let edge = <Association>element;\r\n            this.lastSelectedEdge = edge.$view;\r\n\r\n            Util.addClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Select.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Select.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private setTooltipOfShape(shape: SVGSVGElement, tooltip: string): void {\r\n        if (!shape || !shape.hasChildNodes()) {\r\n            return;\r\n        }\r\n\r\n        let titleElement = <SVGSVGElement>shape.childNodes[0];\r\n        if (!titleElement || titleElement.tagName !== 'title') {\r\n            return;\r\n        }\r\n\r\n        titleElement.textContent = tooltip;\r\n    }\r\n\r\n    private resetLastSelectedElements() {\r\n        // reset the last one\r\n        if (this.lastSelectedNode) {\r\n            Util.removeClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.lastSelectedNode = undefined;\r\n        }\r\n\r\n        if (this.lastSelectedEdge) {\r\n            Util.removeClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n            this.lastSelectedEdge = undefined;\r\n        }\r\n\r\n        this.removeLastInlineEdit();\r\n    }\r\n\r\n    private removeLastInlineEdit(): void {\r\n        // remove last inline edit of clazz\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n\r\n            // its not supported in internet explorer\r\n            // lastInlineEdit.remove();\r\n        }\r\n    }\r\n\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\n\r\nexport class Zoom implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n    }\r\n\r\n    public handle(e: any, element: DiagramElement): boolean {\r\n        let delta = e.deltaY || e.wheelDeltaY || -e.wheelDelta;\r\n        let d = 1 + (delta / 1000);\r\n\r\n        let values = this.graph.root.getAttribute('viewBox').split(' ');\r\n        const newViewBox = `${values[0]} ${values[1]} ${parseInt(values[2]) * d} ${parseInt(values[3]) * d}`;\r\n        this.graph.root.setAttribute('viewBox', newViewBox);\r\n\r\n        e.preventDefault();\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Zoom.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Zoom.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n}\r\n","export * from './Drag';\r\nexport * from './Select';\r\nexport * from './Zoom';\r\nexport * from './NewEdge';\r\nexport * from './ImportFile';\r\nexport * from './AddNode';\r\n","import { Association } from '../elements/edges';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport Layout from './Layout';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\n\r\nexport class DagreLayout implements Layout {\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        if (!window['dagre']) {\r\n            return;\r\n        }\r\n        let model = graph.$graphModel;\r\n        let g = new window['dagre'].graphlib.Graph();\r\n\r\n        g.setGraph({ marginx: 100, marginy: 20 }).setDefaultEdgeLabel(function () {\r\n            return {};\r\n        });\r\n\r\n        for (let node of model.nodes) {\r\n            g.setNode(node.id, { width: node.getSize().x, height: node.getSize().y });\r\n        }\r\n\r\n        for (let edge of model.edges) {\r\n            g.setEdge(edge.$sNode.id, edge.$tNode.id);\r\n        }\r\n\r\n        window['dagre'].layout(g);\r\n\r\n        g.nodes().forEach(function (nodeId: string) {\r\n            for (let node of model.nodes) {\r\n                if (node.id === nodeId) {\r\n                    node.withPos(g.node(nodeId).x - g.node(nodeId).width / 2, g.node(nodeId).y - g.node(nodeId).height / 2);\r\n                }\r\n            }\r\n        });\r\n        g.edges().forEach(function (e: any) {\r\n            for (let edge of model.edges) {\r\n                if (edge.$sNode.id === e.v && edge.$tNode.id === e.w) {\r\n                    let size = g.edge(e).points.length;\r\n                    edge.clearPoints();\r\n                    for (let i = 0; i < size; i++) {\r\n                        let point: SVGPoint = g.edge(e).points[i];\r\n                        edge.addPoint(point.x, point.y);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n}\r\n","import {DiagramElement} from '../elements/BaseElements';\r\nimport Layout from './Layout';\r\nimport {Graph} from '../elements/Graph';\r\nimport {Association} from '../elements/edges/Association';\r\nimport {Node} from '../elements/nodes/Node';\r\nimport {Control} from '../Control';\r\n\r\nexport class LayoutGraphMin {\r\n    public nodes: Object = {};\r\n    public edges: Array<Object> = [];\r\n    public outEdges: Object = {};\r\n    public inEdges: Object = {};\r\n    public dummyNodes: Array<LayoutGraphNode> = [];\r\n    public dummyEdges: Object = {};\r\n    public count: number = 0;\r\n    public minRank: number = Number.POSITIVE_INFINITY;\r\n    public maxRank: number = 0;\r\n    public maxHeight: number = 0;\r\n    public maxWidth: number = 0;\r\n    public ranksep: number = 0;\r\n    public edgesLabel: Array<Object> = [];\r\n\r\n    public nodeCount(): number {\r\n        return this.count;\r\n    }\r\n\r\n    public node(id: string) {\r\n        return this.nodes[id];\r\n    }\r\n\r\n    public setNode(id: string, n: LayoutGraphNode) {\r\n        if (n && !this.nodes[id]) {\r\n            this.nodes[id] = n;\r\n            this.count = this.count + 1;\r\n        } else if (!n && this.nodes[id]) {\r\n            delete this.nodes[id];\r\n        }\r\n    }\r\n}\r\n\r\nexport class LayoutGraphNode {\r\n    public id: string;\r\n    public width: number;\r\n    public height: number;\r\n    public x: number;\r\n    public y: number;\r\n    public edgeObj: LayoutGraphEdge;\r\n    public rank: number;\r\n\r\n    constructor(id: string, width: number, height: number, x: number, y: number) {\r\n        this.id = id;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n\r\nexport class LayoutGraphEdge {\r\n    public source: string;\r\n    public target: string;\r\n}\r\n\r\n// \t\t\t\t######################################################### DagreGraph #########################################################\r\nexport class DagreLayoutMin implements Layout {\r\n    public static EDGE_KEY_DELIM = '\\x01';\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        let g, layoutNode, nodes, newEdge, edges;\r\n        let i, n, x, y, sId, tId, split = DagreLayoutMin.EDGE_KEY_DELIM;\r\n        let e: Association;\r\n\r\n        nodes = node['nodes'];\r\n        edges = node['edges'];\r\n        g = new LayoutGraphMin();\r\n\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            g.setNode(n.id, new LayoutGraphNode(n.id, n.getSize().x, n.getSize().y, n.getPos().x, n.getPos().y));\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            sId = this.getNodeId(e.$sNode);\r\n            tId = this.getNodeId(e.$tNode);\r\n            if (sId > tId) {\r\n                let tmp = tId;\r\n                tId = sId;\r\n                sId = tmp;\r\n            }\r\n            let idAB = sId + split + tId + split;\r\n            let idBA = tId + split + sId + split;\r\n            if (sId !== tId && g.edgesLabel.indexOf(idAB) < 0 && g.edgesLabel.indexOf(idBA) < 0) {\r\n                newEdge = {source: sId, target: tId, minlen: 1, weight: 1};\r\n                g.edges.push(newEdge);\r\n                g.edgesLabel.push(idAB);\r\n                // In Edges\r\n                if (!g.inEdges[tId]) {\r\n                    g.inEdges[tId] = [];\r\n                }\r\n                g.inEdges[tId].push(newEdge);\r\n\r\n                // Out Edges\r\n                if (!g.outEdges[sId]) {\r\n                    g.outEdges[sId] = [];\r\n                }\r\n                g.outEdges[sId].push(newEdge);\r\n            }\r\n        }\r\n        this.layouting(g);\r\n        // Set the layouting back\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            layoutNode = g.node(n.id);\r\n            x = n.getPos().x;\r\n            y = n.getPos().y;\r\n            if (x < 1 && y < 1) {\r\n                n.withPos(Math.ceil(layoutNode.x), Math.ceil(layoutNode.y));\r\n            }\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            // OBSOLETE method:  e.calc(graph.canvas);\r\n        }\r\n        graph.draw();\r\n    }\r\n\r\n    public getNodeId(node: Control): string {\r\n        if (node.$owner) {\r\n            return this.getNodeId(node.$owner) || node.id;\r\n        }\r\n        return node.id;\r\n    }\r\n\r\n    public layouting(g: LayoutGraphMin) {\r\n        this.longestPath(g);\r\n        this.normalizeRanks(g);\r\n        this.normalizeEdge(g);\r\n        // this.setSimpleOrder(g);\r\n        this.order(g);\r\n        g.ranksep = 25;\r\n        // remove Dummy\r\n        this.removeDummy(g);\r\n        this.position(g);\r\n    }\r\n\r\n    public setSimpleOrder(g: LayoutGraphMin) {\r\n        let i, n;\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            n.order = n.rank;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Applies heuristics to minimize edge crossings in the graph and sets the best\r\n     * order solution as an order attribute on each node.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Graph must be DAG\r\n     *    2. Graph nodes must be objects with a \"rank\" attribute\r\n     *    3. Graph edges must have the \"weight\" attribute\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Graph nodes will have an \"order\" attribute based on the results of the\r\n     *       algorithm.\r\n     */\r\n    public order(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        let visited = {};\r\n        let node, n, order, i;\r\n        for (i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (n in g.nodes) {\r\n            if (visited[n]) {\r\n                continue;\r\n            }\r\n            visited[n] = true;\r\n            node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank].push(n);\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                g.nodes[layering[order][n]].order = parseInt(n);\r\n            }\r\n        }\r\n        // Fix resolve conflict\r\n        for (order in layering) {\r\n            if (layering[order].length > 1) {\r\n                for (n in layering[order]) {\r\n                    if (layering[order].hasOwnProperty(n) === false) {\r\n                        continue;\r\n                    }\r\n                    let name = layering[order][n];\r\n                    let sum = 0;\r\n                    let weight = 1;\r\n                    let edges = g.dummyEdges[name];\r\n                    if (edges) {\r\n                        for (i in edges) {\r\n                            if (edges.hasOwnProperty(i) === false) {\r\n                                continue;\r\n                            }\r\n                            let edge = edges[i];\r\n                            let nodeU = g.node(edge.target);\r\n                            sum = sum + (edge.weight * nodeU.order);\r\n                            weight = weight + edge.weight;\r\n                        }\r\n                    }\r\n                    g.node(name).barycenter = sum / weight;\r\n                    g.node(name).weight = weight;\r\n                }\r\n            } else if (layering[order].length > 0) {\r\n                for (n in layering[order]) {\r\n                    let name = layering[order][n];\r\n                    g.node(name).barycenter = 1;\r\n                    g.node(name).weight = 1;\r\n                }\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                let node = g.nodes[layering[order][n]];\r\n                node.order = parseInt(n) + node.barycenter * node.weight;\r\n                if (isNaN(node.order)) {\r\n                    console.log('ERROR');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public removeDummy(g: LayoutGraphMin) {\r\n        for (let z in g.dummyNodes) {\r\n            let node = g.dummyNodes[z];\r\n            g.setNode(node.id, null);\r\n        }\r\n        g.dummyNodes = [];\r\n        g.dummyEdges = {};\r\n    }\r\n\r\n    /*\r\n     * Breaks any long edges in the graph into short segments that span 1 layer\r\n     * each. This operation is undoable with the denormalize function.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. The input graph is a DAG.\r\n     *    2. Each node in the graph has a \"rank\" property.\r\n     *\r\n     * Post-condition:\r\n     *\r\n     *    1. All edges in the graph have a length of 1.\r\n     *    2. Dummy nodes are added where edges have been split into segments.\r\n     *    3. The graph is augmented with a \"dummyChains\" attribute which contains\r\n     *       the first dummy in each chain of dummy nodes produced.\r\n     */\r\n    public normalizeEdge(g: LayoutGraphMin): void {\r\n        let i: number = 1;\r\n        for (let id in g.edges) {\r\n            let e: LayoutGraphEdge = <LayoutGraphEdge>g.edges[id];\r\n            let v: string = e.source;\r\n            let vRank = g.node(v).rank;\r\n            const w: string = e.target;\r\n            const wRank: number = g.node(w).rank;\r\n            let name: string;\r\n\r\n            if (wRank === vRank + 1) {\r\n                continue;\r\n            }\r\n\r\n            let dummy;\r\n            for (vRank = vRank + 1; vRank < wRank; ++vRank) {\r\n                name = '_d' + e.source + e.target + (i++);\r\n                let newEdge = {source: v, target: name, minlen: 1, weight: 1};\r\n                dummy = new LayoutGraphNode(name, 0, 0, 0, 0);\r\n                dummy.edgeObj = e;\r\n                dummy.rank = vRank;\r\n                // Dummy Edges\r\n                if (!g.dummyEdges[v]) {\r\n                    g.dummyEdges[v] = [];\r\n                }\r\n                g.dummyEdges[v].push(newEdge);\r\n\r\n                g.dummyNodes.push(dummy);\r\n                g.setNode(dummy.id, dummy);\r\n                v = name;\r\n            }\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Initializes ranks for the input graph using the longest path algorithm. This\r\n     * algorithm scales well and is fast in practice, it yields rather poor\r\n     * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\r\n     * ranks wide and leaving edges longer than necessary. However, due to its\r\n     * speed, this algorithm is good for getting an initial ranking that can be fed\r\n     * into other algorithms.\r\n     *\r\n     * This algorithm does not normalize layers because it will be used by other\r\n     * algorithms in most cases. If using this algorithm directly, be sure to\r\n     * run normalize at the end.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Input graph is a DAG.\r\n     *    2. Input graph node labels can be assigned properties.\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Each node will be assign an (unnormalized) \"rank\" property.\r\n     */\r\n    public longestPath(g: LayoutGraphMin) {\r\n        let i, n, visited = [];\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            visited.push(i);\r\n            n.rank = this.findAllPaths(g, n, 0, visited);\r\n            g.minRank = Math.min(g.minRank, n.rank);\r\n        }\r\n    }\r\n\r\n    public findAllPaths(g: LayoutGraphMin, n: Node, currentCost: number, path: Array<String>) {\r\n        let min: number = 0;\r\n        let id: string;\r\n        let z: number;\r\n        let target;\r\n        if (g.outEdges[n.id]) {\r\n            for (z = 0; z < g.outEdges[n.id].length; z++) {\r\n                id = g.outEdges[n.id][z].target;\r\n                target = g.nodes[id];\r\n                if (path[id]) {\r\n                    min = Math.min(min, target.rank);\r\n                } else if (path.indexOf(id) < 0) {\r\n                    min = Math.min(min, this.findAllPaths(g, target, currentCost - 2, path));\r\n                } else {\r\n                    min = currentCost;\r\n                }\r\n            }\r\n            return min;\r\n        }\r\n        return currentCost;\r\n    }\r\n\r\n    /*\r\n     * Adjusts the ranks for all nodes in the graph such that all nodes v have\r\n     * rank(v) >= 0 and at least one node w has rank(w) = 0.\r\n     */\r\n    public normalizeRanks(g: LayoutGraphMin) {\r\n        let min = g.minRank;\r\n        let value;\r\n        g.maxRank = Number.NEGATIVE_INFINITY;\r\n        g.maxHeight = 0;\r\n        g.maxWidth = 0;\r\n        for (let i in g.nodes) {\r\n            let node = g.nodes[i];\r\n            if (node.rank !== undefined) {\r\n                node.rank -= min;\r\n                value = Math.abs(node.rank);\r\n                if (value > g.maxRank) {\r\n                    g.maxRank = value;\r\n                }\r\n                g.maxHeight = Math.max(g.maxHeight, node.height);\r\n                g.maxWidth = Math.max(g.maxWidth, node.width);\r\n            }\r\n        }\r\n    }\r\n\r\n    public position(g: LayoutGraphMin) {\r\n        this.positionY(g);\r\n        let list = this.positionX(g);\r\n        for (let i in list) {\r\n            for (let pos in list[i]) {\r\n                if (list[i].hasOwnProperty(pos) === false) {\r\n                    continue;\r\n                }\r\n                if (g.node(list[i][pos])) {\r\n                    g.node(list[i][pos]).x = parseInt(pos) * g.maxWidth;\r\n                }\r\n            }\r\n\r\n        }\r\n    }\r\n\r\n    public positionY(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        let rankSep = g.ranksep;\r\n        let prevY = 0;\r\n        for (let layer in layering) {\r\n            let maxHeight = g.maxHeight;\r\n            for (let v in layering[layer]) {\r\n                if (layering[layer].hasOwnProperty(v) === false) {\r\n                    continue;\r\n                }\r\n                let id = layering[layer][v];\r\n                g.nodes[id].y = prevY + maxHeight / 2;\r\n            }\r\n            prevY += maxHeight + rankSep;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\r\n     * function will produce a matrix with the ids of each node.\r\n     */\r\n    public buildLayerMatrix(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        for (let i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (let n in g.nodes) {\r\n            let node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank][node.order] = n;\r\n            }\r\n        }\r\n        return layering;\r\n    }\r\n\r\n    public positionX(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        return layering;\r\n    }\r\n}\r\n","import { Point } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport Layout from './Layout';\r\n\r\nexport class Random implements Layout {\r\n\r\n  public layout(graph: Graph) {\r\n\r\n    let model = graph.$graphModel;\r\n\r\n    if (model.nodes) {\r\n      for (let node of model.nodes) {\r\n        let pos: Point = node.getPos();\r\n        if (pos.x === 0 && pos.y === 0) {\r\n          let x = Util.getRandomInt(0, graph.canvasSize.width);\r\n          let y = Util.getRandomInt(0, graph.canvasSize.height);\r\n          node.withPos(x, y);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","export * from './DagreLayout';\r\nexport * from './Random';\r\nexport * from './DagreLayoutMin';\r\n\r\nimport {DagreLayout} from './DagreLayout';\r\nimport {DagreLayoutMin} from './DagreLayoutMin';\r\nimport {Random} from './Random';\r\nnew DagreLayout();\r\nnew DagreLayoutMin();\r\nnew Random();\r\n","import {VirtualKeyBoard} from './VirtualKeyBoard';\r\n\r\nexport {Point} from './elements/BaseElements';\r\nexport {Bridge, DelegateAdapter} from './Bridge';\r\nexport {Graph} from './elements/Graph';\r\nexport * from './elements/nodes';\r\nexport * from './elements/edges';\r\nexport * from './adapters';\r\nexport * from './UML';\r\nimport {Point} from './elements/BaseElements';\r\nimport {Graph} from './elements/Graph';\r\nimport {ClassEditor} from './elements/ClassEditor';\r\nimport {Bridge} from './Bridge';\r\nimport {Util} from './util';\r\nimport * as nodes  from './elements/nodes';\r\nimport * as edges from './elements/edges';\r\nimport {ScrumBoard} from './ScrumBoard';\r\n\r\nif (!window['Point']) {\r\n    window['Point'] = Point;\r\n    window['Graph'] = Graph;\r\n    window['bridge'] = new Bridge();\r\n    window['Util'] = Util;\r\n    window['Class'] = nodes.Class;\r\n    window['Association'] = edges.Association;\r\n    window['SymbolLibary'] = nodes.SymbolLibary;\r\n    window['ClassEditor'] = ClassEditor;\r\n    window['VirtualKeyBoard'] = VirtualKeyBoard;\r\n    window['ScrumBoard'] = ScrumBoard;\r\n}\r\n","'use strict';\r\nimport { CSS } from './CSS';\r\nimport { Node } from './elements/nodes/Node';\r\nimport { DiagramElement, Point } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport class Util {\r\n\r\n    public static isAutoSave: boolean;\r\n\r\n    static getRandomInt(min: number, max: number): number {\r\n        return Math.floor(Math.random() * (max - min + 1)) + min;\r\n    }\r\n\r\n    static createShape(attrs: any): SVGSVGElement {\r\n        let xmlns = attrs.xmlns || 'http://www.w3.org/2000/svg';\r\n        let shape = document.createElementNS(xmlns, attrs.tag);\r\n\r\n        for (let attr in attrs) {\r\n            if (!attrs.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr !== 'tag') {\r\n                shape.setAttribute(attr, attrs[attr]);\r\n\r\n            }\r\n        }\r\n        return <SVGSVGElement><any>shape;\r\n    }\r\n\r\n    static toPascalCase(value: string): string {\r\n        value = value.charAt(0).toUpperCase() + value.substring(1).toLowerCase();\r\n        return value;\r\n    }\r\n\r\n    static isSVG(tag: string): boolean {\r\n        let i,\r\n            list = ['svg', 'path', 'polygon', 'polyline', 'line', 'title', 'rect', 'filter', 'feGaussianBlur', 'feOffset', 'feBlend', 'linearGradient', 'stop', 'text', 'symbol', 'textPath', 'defs', 'fegaussianblur', 'feoffset', 'feblend', 'circle', 'ellipse', 'g'];\r\n        for (i = 0; i < list.length; i += 1) {\r\n            if (list[i] === tag) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    static createHTML(node: any): HTMLElement {\r\n        return <HTMLElement>this.create(node);\r\n    }\r\n    static create(node: any): Element {\r\n        let style, item, xmlns, key, tag, k;\r\n        if (document.createElementNS && (this.isSVG(node.tag) || node.xmlns)) {\r\n            if (node.xmlns) {\r\n                xmlns = node.xmlns;\r\n            } else {\r\n                xmlns = 'http://www.w3.org/2000/svg';\r\n            }\r\n            if (node.tag === 'img' && xmlns) {\r\n                item = document.createElementNS(xmlns, 'image');\r\n                item.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\r\n                item.setAttributeNS('http://www.w3.org/1999/xlink', 'href', node.src);\r\n            } else {\r\n                item = document.createElementNS(xmlns, node.tag);\r\n            }\r\n        } else {\r\n            item = document.createElement(node.tag);\r\n        }\r\n        tag = node.tag.toLowerCase();\r\n        for (key in node) {\r\n            if (!node.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            k = key.toLowerCase();\r\n            if (node[key] === null) {\r\n                continue;\r\n            }\r\n            if (k === 'tag' || k.charAt(0) === '$' || k === '$graphModel') {\r\n                continue;\r\n            }\r\n            if (k.charAt(0) === '#') {\r\n                item[k.substring(1)] = node[key];\r\n                continue;\r\n            }\r\n            if (k === 'rotate') {\r\n                item.setAttribute('transform', 'rotate(' + node[key] + ',' + node.$graphModel.x + ',' + node.$graphModel.y + ')');\r\n                continue;\r\n            }\r\n            if (k === 'value') {\r\n                if (!node[key]) {\r\n                    continue;\r\n                }\r\n                if (tag !== 'input') {\r\n                    if (tag === 'text') {// SVG\r\n                        item.appendChild(document.createTextNode(node[key]));\r\n                    } else {\r\n                        item.innerHTML = node[key];\r\n                    }\r\n                } else {\r\n                    item[key] = node[key];\r\n                }\r\n                continue;\r\n            }\r\n            if (k.indexOf('on') === 0) {\r\n                this.bind(item, k.substring(2), node[key]);\r\n                continue;\r\n            }\r\n            if (k.indexOf('-') >= 0) {\r\n                item.style[key] = node[key];\r\n            } else {\r\n                if (k === 'style' && typeof (node[key]) === 'object') {\r\n                    for (style in node[key]) {\r\n                        if (!node[key].hasOwnProperty(style)) {\r\n                            continue;\r\n                        }\r\n                        if (node[key][style]) {\r\n                            if ('transform' === style) {\r\n                                item.style.transform = node[key][style];\r\n                                item.style.msTransform = item.style.MozTransform = item.style.WebkitTransform = item.style.OTransform = node[key][style];\r\n                            } else {\r\n                                item.style[style] = node[key][style];\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    item.setAttribute(key, node[key]);\r\n                }\r\n            }\r\n        }\r\n        if (node.$parent) {\r\n            node.$parent.appendChild(item);\r\n        }\r\n        if (node.$graphModel) {\r\n            item.$graphModel = node.$graphModel;\r\n        }\r\n        return item;\r\n    }\r\n\r\n    static setSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttribute('width', value);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.setAttribute('height', value);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setAttributeSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttributeNS(null, 'width', value);\r\n        value = Util.getValue(height);\r\n        item.setAttributeNS(null, 'height', value);\r\n    }\r\n\r\n    static setStyleSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setPos(item: any, x: number, y: number): void {\r\n        if (item.x && item.x.baseVal) {\r\n            item.style.left = x + 'px';\r\n            item.style.top = y + 'px';\r\n        } else {\r\n            item.x = x;\r\n            item.y = y;\r\n        }\r\n    }\r\n\r\n    static getValue(value: string | number): number {\r\n        return parseInt(('0' + value).replace('px', ''), 10);\r\n    }\r\n\r\n    static isIE(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('.net') > -1;\r\n    }\r\n\r\n    static isEdge(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('edge') > -1;\r\n    }\r\n\r\n    static isFireFox(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n    }\r\n\r\n    static isSafari(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        return navigator.userAgent.toLowerCase().indexOf('safari') > -1 && !isEdge;\r\n    }\r\n\r\n    static isOpera(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('opera') > -1;\r\n    }\r\n\r\n    static isChrome(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        let isSafari = Util.isSafari();\r\n        return navigator.userAgent.toLowerCase().indexOf('chrome') > -1 && !isEdge && isSafari;\r\n    }\r\n\r\n    static getEventX(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetX'] : event.layerX;\r\n    }\r\n\r\n    static getEventY(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetY'] : event.layerY;\r\n    }\r\n\r\n    static getNumber(str: string): number {\r\n        return parseInt((str || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    static getStyle(styleProp: string): CSS {\r\n        let i, style, diff, current, ref, el = document.createElement('div'), css;\r\n        document.body.appendChild(el);\r\n        css = new CSS(styleProp);\r\n        ref = new CSS(styleProp, el).css;\r\n        style = window.getComputedStyle(el, null);\r\n        el.className = styleProp;\r\n        current = new CSS(styleProp, el).css;\r\n        diff = Util.getNumber(style.getPropertyValue('border-width'));\r\n        for (i in current) {\r\n            if (!current.hasOwnProperty(i)) {\r\n                continue;\r\n            }\r\n            if (i === 'width' || i === 'height') {\r\n                if (Util.getNumber(current[i]) !== 0 && Util.getNumber(current[i]) + diff * 2 !== Util.getNumber(ref[i])) {\r\n                    css.add(i, current[i]);\r\n                }\r\n            } else if (current[i] !== ref[i]) {\r\n                css.add(i, current[i]);\r\n            }\r\n        }\r\n        document.body.removeChild(el);\r\n        return css;\r\n    }\r\n\r\n    static sizeOf(item: string | any, node?: Node): ClientRect {\r\n        let board;\r\n        let rect: ClientRect;\r\n        let addBoard: boolean;\r\n        if (!item) {\r\n            return undefined;\r\n        }\r\n        if (node) {\r\n            board = node.$owner.$view;\r\n            addBoard = false;\r\n        }\r\n\r\n        if (!board) {\r\n            addBoard = true;\r\n            board = Util.createShape({ tag: 'svg', id: 'root', width: 200, height: 200 });\r\n            document.body.appendChild(board);\r\n        }\r\n        if (board.tagName === 'svg') {\r\n            if (typeof item === 'string') {\r\n                item = Util.create({ tag: 'text', $font: true, value: item });\r\n                item.setAttribute('width', '5px');\r\n            }\r\n        } else if (typeof item === 'string') {\r\n            item = document.createTextNode(item);\r\n        }\r\n        board.appendChild(item);\r\n        rect = item.getBoundingClientRect();\r\n        board.removeChild(item);\r\n\r\n        if (addBoard) {\r\n            document.body.removeChild(board);\r\n        }\r\n        return rect;\r\n    }\r\n\r\n    static getColor(style: string, defaultColor?: string) {\r\n        if (style) {\r\n            if (style.toLowerCase() === 'create') {\r\n                return '#008000';\r\n            }\r\n            if (style.toLowerCase() === 'nac') {\r\n                return '#FE3E3E';\r\n            }\r\n            if (style.indexOf('#') === 0) {\r\n                return style;\r\n            }\r\n        }\r\n        if (defaultColor) {\r\n            return defaultColor;\r\n        }\r\n        return '#000';\r\n    }\r\n\r\n    public static utf8$to$b64(str: string): string {\r\n        return window.btoa(encodeURIComponent(str));\r\n    }\r\n\r\n    public static showSVG(control: DiagramElement) {\r\n        let svg = Util.create({\r\n            tag: 'svg',\r\n            style: { left: control.getPos().x, top: control.getPos().y, position: 'absolute' }\r\n        });\r\n        let child = control.getSVG();\r\n        if (child) {\r\n            svg.appendChild(child);\r\n        }\r\n        Util.setSize(svg, control.getSize().x, control.getSize().y);\r\n        document.body.appendChild(svg);\r\n    }\r\n\r\n    public static toJson(ref: JSON | Object): Object {\r\n        let result = {};\r\n        return Util.copy(result, ref, false, false);\r\n    }\r\n\r\n    public static initControl(parent: Control, control: Control, type: string, id: string, json: JSON | Object) {\r\n        if (typeof control.init === 'function') {\r\n            control.init(parent, type, id);\r\n        }\r\n        if (typeof control.load === 'function') {\r\n            control.load(json);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * copy One Json into another\r\n     * @function\r\n     * @param ref reference Json\r\n     * @param src source Json\r\n     * @param full all attributes include privet $\r\n     * @param replace set the original reference or copy it\r\n     * @returns ref\r\n     * @name copy\r\n     */\r\n    public static copy(ref: JSON | Object, src: JSON | Object, full: boolean, replace: boolean) {\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (replace) {\r\n                        ref[i] = src[i];\r\n                        continue;\r\n                    }\r\n                    if (!ref[i]) {\r\n                        if (src[i] instanceof Array) {\r\n                            ref[i] = [];\r\n                        } else {\r\n                            ref[i] = {};\r\n                        }\r\n                    }\r\n                    Util.copy(ref[i], src[i], full, false);\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref[i] = src[i];\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    public static xmlstringify(text: string): string {\r\n        text = text.replace('<', '&lt;');\r\n        text = text.replace('>', '&gt;');\r\n        return text;\r\n    }\r\n\r\n    public static toXML(ref: JSON | Object | any, src: JSON | Object | any, full: boolean, doc: Document): any {\r\n        let name;\r\n        if (!ref) {\r\n            name = src.constructor.name;\r\n            doc = document.implementation.createDocument(null, name, null);\r\n            ref = doc.childNodes[0];\r\n        }\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (!ref.getAttribute(i)) {\r\n                        if (src[i] instanceof Array) {\r\n                            for (let c in src[i]) {\r\n                                if (!src[i].hasOwnProperty(c)) {\r\n                                    continue;\r\n                                }\r\n                                name = src[i][c].constructor.name;\r\n                                let child = doc.createElement(name);\r\n                                ref.appendChild(child);\r\n                                Util.toXML(child, src[i][c], full, doc);\r\n                            }\r\n                        } else {\r\n                            name = src[i].constructor.name;\r\n                            let child = doc.createElement(name);\r\n                            ref.appendChild(child);\r\n                            Util.toXML(child, src[i], full, doc);\r\n                        }\r\n                    } else {\r\n                        Util.toXML(ref.getAttribute(i), src[i], full, doc);\r\n                    }\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref.setAttribute(i, src[i]);\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    static Range(min: Point, max: Point, x: number, y: number) {\r\n        max.x = Math.max(max.x, x);\r\n        max.y = Math.max(max.y, y);\r\n        min.x = Math.min(min.x, x);\r\n        min.y = Math.min(min.y, y);\r\n    }\r\n\r\n    public static getPosition(m: number, n: number, entity: DiagramElement, refCenter: Point) {\r\n        let t, p = [], list, distance = [], min = 999999999, position, i, step = 15;\r\n        let pos: Point = entity.getPos();\r\n        let size: Point = entity.getSize();\r\n        list = [Point.LEFT, Point.RIGHT];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = this.getLRPosition(m, n, entity, list[i]);\r\n            if (t.y >= pos.y && t.y <= (pos.y + size.y + 1)) {\r\n                t.y += (entity['$' + list[i]] * step);\r\n                if (t.y > (pos.y + size.y)) {\r\n                    // Alternative\r\n                    t = Util.getUDPosition(m, n, entity, Point.DOWN, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        list = [Point.UP, Point.DOWN];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = Util.getUDPosition(m, n, entity, list[i]);\r\n            if (t.x >= pos.x && t.x <= (pos.x + size.x + 1)) {\r\n                t.x += (entity['$' + list[i]] * step);\r\n                if (t.x > (pos.x + size.x)) {\r\n                    // Alternative\r\n                    t = this.getLRPosition(m, n, entity, Point.RIGHT, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        for (i = 0; i < p.length; i += 1) {\r\n            if (distance[i] < min) {\r\n                min = distance[i];\r\n                position = p[i];\r\n            }\r\n        }\r\n        return position;\r\n    }\r\n\r\n    public static getUDPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let x, y: number = pos.y;\r\n        if (p === Point.DOWN) {\r\n            y += size.y;\r\n        }\r\n        x = (y - n) / m;\r\n        if (step) {\r\n            x += e['$' + p] * step;\r\n            if (x < pos.x) {\r\n                x = pos.x;\r\n            } else if (x > (pos.x + size.x)) {\r\n                x = pos.x + size.x;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static getLRPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let y: number, x: number = pos.x;\r\n        if (p === Point.RIGHT) {\r\n            x += size.x;\r\n        }\r\n        y = m * x + n;\r\n        if (step) {\r\n            y += e['$' + p] * step;\r\n            if (y < pos.y) {\r\n                y = pos.y;\r\n            } else if (y > (pos.y + size.y)) {\r\n                y = pos.y + size.y;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static hasClass(element: Element, cls: string) {\r\n        let className = element.getAttribute('class');\r\n        return className.indexOf(cls) > 0;\r\n    }\r\n    public static addClass(element: Element, cls: string) {\r\n        if (!Util.hasClass(element, cls)) {\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className + ' ' + cls);\r\n        }\r\n    }\r\n    public static removeClass(element: Element, cls: string) {\r\n        if (Util.hasClass(element, cls)) {\r\n            let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className.replace(reg, ' ').trim());\r\n        }\r\n    }\r\n\r\n    public static startsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.startsWith) {\r\n            return s.indexOf(searchS) === 0;\r\n        }\r\n\r\n        return s.startsWith(searchS);\r\n    }\r\n\r\n    public static endsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.endsWith) {\r\n            let lastIndex = s.lastIndexOf(searchS);\r\n            return lastIndex !== -1 && lastIndex === (s.length - 1);\r\n        }\r\n\r\n        return s.endsWith(searchS);\r\n    }\r\n\r\n    public static includes(s: string, searchS: string): boolean {\r\n        if (!String.prototype.includes) {\r\n            let idx = s.indexOf(searchS);\r\n            return idx > -1;\r\n        }\r\n        if (s === null) {\r\n            return false;\r\n        }\r\n\r\n        return s.includes(searchS);\r\n    }\r\n\r\n    public static isParentOfChild(parent: Element, child: Element): boolean {\r\n\r\n        if (!parent || !child) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isIE()) {\r\n            let children = parent.childNodes;\r\n            // let found = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                let childItem = children[i];\r\n                if (childItem === child) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        return parent.contains(child);\r\n    }\r\n\r\n    public static createCustomEvent(type: string, params?: any): CustomEvent {\r\n        let evt: CustomEvent;\r\n\r\n        if (typeof window['CustomEvent'] !== 'function') {\r\n            params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n            evt = document.createEvent('CustomEvent');\r\n            evt.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\r\n            return evt;\r\n        }\r\n\r\n        evt = new CustomEvent(type);\r\n\r\n        return evt;\r\n    }\r\n\r\n    public static saveToLocalStorage(model: any): boolean {\r\n        if (!this.isAutoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isLocalStorageSupported()) {\r\n            if (model) {\r\n                if (model.$isLoading) {\r\n                    return false;\r\n                }\r\n                let jsonObj = Util.toJson(model);\r\n                let data = JSON.stringify(jsonObj, null, '\\t');\r\n                localStorage.setItem('diagram', data);\r\n            } else {\r\n                localStorage.removeItem('diagram');\r\n            }\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static getDiagramFromLocalStorage(): string {\r\n        if (Util.isLocalStorageSupported()) {\r\n            return localStorage.getItem('diagram');\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    public static isLocalStorageSupported(): boolean {\r\n        if (this.isEdge()) {\r\n            return false;\r\n        }\r\n        return localStorage !== undefined;\r\n    }\r\n}\r\n"],"sourceRoot":""}
Severity: Minor
Found in doc/diagram.js.map by fixme

FIXME found
Open

{"version":3,"sources":["webpack://DiagramJS/webpack/bootstrap","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Adapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Bridge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/BridgeElement.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/CSS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Control.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Data.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventBus.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/JSEPS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Palette.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertiesPanel.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertyBinder.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/RGBColor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/SVGConverter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/ScrumBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Toolbar.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/UML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/VirtualKeyBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/JavaAdapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/BaseElements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/ClassEditor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Graph.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Model.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregate.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Association.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Composition.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Generalisation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Implements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Attribute.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/AutoComplete.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/BR.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Button.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Class.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/ClazzProperty.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Dice.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Div.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Form.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/HTML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/InfoText.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Input.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Label.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Method.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Node.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/SO.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/StereoType.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Symbol.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Table.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/AddNode.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Drag.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/GraphListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/ImportFile.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/NewEdge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Select.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Zoom.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayout.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayoutMin.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/Random.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/main.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/util.ts"],"names":[],"mappings":"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","file":"diagram.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./main.ts\");\n","export abstract class Adapter {\r\n    public id: string = null;\r\n\r\n    abstract update(evt: Object): boolean;\r\n}\r\n","'use strict';\r\n\r\nimport * as controls from './elements/nodes';\r\nimport * as adapters from './adapters';\r\nimport Data from './Data';\r\nimport {Control} from './Control';\r\nimport {Adapter} from './Adapter';\r\nimport {Graph} from './elements';\r\nimport {Util} from './util';\r\nimport {Point} from './elements';\r\n\r\nexport class Bridge extends Control {\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public static version: string = '0.42.01.1601007-1739';\r\n    private controlFactory: Object = {};\r\n    private adapterFactory: Object = {};\r\n    private controls: Object = {};\r\n    private adapters: Object = {};\r\n    private items: Object = {};\r\n    private controlNo: number = 1;\r\n    private online: boolean = true;\r\n    private language: string = navigator.language.toUpperCase();\r\n    private toolBar: HTMLElement;\r\n\r\n    constructor(viewRoot?: HTMLElement) {\r\n        super();\r\n        let i;\r\n\r\n        if (viewRoot) {\r\n            this.$view = viewRoot;\r\n        }\r\n\r\n        let keys: string[] = Object.keys(adapters);\r\n        for (i = 0; i < keys.length; i++) {\r\n            let child = adapters[keys[i]];\r\n            if (child && child.id) {\r\n                this.adapterFactory[child.id.toLowerCase()] = child;\r\n            }\r\n        }\r\n\r\n        keys = Object.keys(controls);\r\n        for (i = 0; i < keys.length; i++) {\r\n            this.addControl(controls[keys[i]]);\r\n        }\r\n        this.addControl(Graph);\r\n\r\n        let that = this;\r\n        window.addEventListener('load', function () {\r\n            let updateOnlineStatus = function updateOnlineStatus() {\r\n                that.setOnline(navigator.onLine);\r\n            };\r\n            window.addEventListener('online', updateOnlineStatus);\r\n            window.addEventListener('offline', updateOnlineStatus);\r\n        });\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public setOnline(value: boolean) {\r\n        this.online = value;\r\n        if (this.toolBar.children[0]) {\r\n            this.toolBar.children[0].className = value ? 'online' : 'offline';\r\n        }\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addToolbar(): boolean {\r\n        if (this.toolBar) {\r\n            return false;\r\n        }\r\n        this.toolBar = document.createElement('div');\r\n        this.toolBar.className = 'onlineStatus';\r\n        let child = document.createElement('div');\r\n        child.className = 'online';\r\n        this.toolBar.appendChild(child);\r\n        child = document.createElement('div');\r\n        child.className = 'lang';\r\n        child.innerHTML = this.language;\r\n        this.toolBar.appendChild(child);\r\n\r\n        let body: HTMLElement = document.getElementsByTagName('body')[0];\r\n        body.insertBefore(this.toolBar, body.firstChild);\r\n        // Refresh Online Status\r\n        this.setOnline(this.online);\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addListener = function (listener: any) {\r\n        this.listener.push(listener);\r\n    };\r\n\r\n    public addControl(control: any) {\r\n        if (control && control.name) {\r\n            this.controlFactory[control.name.toLowerCase()] = control;\r\n        }\r\n    }\r\n\r\n    public getId(): string {\r\n        return 'control' + (this.controlNo++);\r\n    }\r\n\r\n    public adapterUpdate(message: string) {\r\n        let keys: string[] = Object.keys(this.adapters);\r\n        if (keys.length > 0) {\r\n            let i;\r\n            for (i = 0; i < keys.length; i++) {\r\n                let adapterList = this.adapters[keys[i]];\r\n                if (adapterList instanceof Adapter) {\r\n                    adapterList.update(message);\r\n                } else {\r\n                    for (let adapter of adapterList) {\r\n                        adapter.update(message);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        let config = {}, className: string, id: string;\r\n        if (typeof(json) === 'string') {\r\n            // Only a String\r\n            config['id'] = '' + json;\r\n            let item = document.getElementById(config['id']);\r\n            let className: string;\r\n            if (item) {\r\n                className = item.getAttribute('class');\r\n                if (!className) {\r\n                    className = item.getAttribute('classname') || '';\r\n                }\r\n                // Found Element and now config Data element\r\n                if (item.getAttribute('property')) {\r\n                    if (this.hasItem(item.getAttribute('property'))) {\r\n                        let data = this.getItem(item.getAttribute('property'));\r\n                        for (let key in data.prop) {\r\n                            if (item.getAttribute(key)) {\r\n                                data.setValue(key, item.getAttribute(key));\r\n                            }\r\n                        }\r\n                        if (item.getAttribute('property')) {\r\n                            // TODO: FIXME!!!\r\n                            // data.property = item.getAttribute(\"property\");\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                className = '' + json;\r\n            }\r\n            className = className.toLowerCase();\r\n            config['className'] = className;\r\n        } else {\r\n            config = <JSON>json;\r\n        }\r\n        // Config validate\r\n        if (!config['id']) {\r\n            config['id'] = this.getId();\r\n        }\r\n        // Backup for Old Graph\r\n        if (!config['className'] && (config['type'] === 'clazzdiagram' || config['type'] === 'objectdiagram')) {\r\n            config['className'] = 'graph';\r\n        }\r\n\r\n        className = config['className'] || config['class'];\r\n        className = className.toLocaleLowerCase();\r\n        id = config['id'];\r\n\r\n        // Check For Control or Data\r\n        if ((config['prop'] || config['upd'] || config['rem']) && this.controls[id] === null) {\r\n            // Its Data\r\n            let newData = !this.hasItem(config['id']);\r\n            let item: Data = this.getItem(config['id']);\r\n            // TODO: FIXME!!!\r\n            // if (id && className && !item.property) {\r\n            //      item.property = className;\r\n            // }\r\n            if (newData) {\r\n                for (let i in this.controls) {\r\n                    if (this.controls.hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    this.controls[i].addItem(this, item);\r\n                }\r\n            }\r\n            // Add all Values to item\r\n            item.addProperties(config);\r\n            // Bridge.addProperties(config['prop'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return item;\r\n        }\r\n\r\n        let control;\r\n        if (this.controls[id]) {\r\n            control = this.controls[id];\r\n            control.initControl(json);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return control;\r\n        }\r\n\r\n        if (typeof(this.controlFactory[className]) === 'object' || typeof(this.controlFactory[className]) === 'function') {\r\n            let obj = this.controlFactory[className];\r\n            control = new obj(json);\r\n            Util.initControl(owner || this, control, config['property'], id, json);\r\n\r\n            if (control.id) {\r\n                this.controls[control.id] = control;\r\n            } else {\r\n                this.controls[id] = control;\r\n            }\r\n\r\n            // create DataObject and register this control as listener to it\r\n            // let obj = {id:id};\r\n            // let data: Data = this.load(obj);\r\n            // data.addListener(this);\r\n\r\n            // Try to Show\r\n            if (typeof control.getSVG === 'function' && typeof control.getSize === 'function') {\r\n                let size: Point = control.getSize();\r\n\r\n                let svg = Util.createShape({\r\n                    tag: 'svg',\r\n                    id: 'root',\r\n                    width: size.x,\r\n                    height: size.y\r\n                });\r\n\r\n                let view = control.getSVG();\r\n                svg.appendChild(view);\r\n                document.getElementsByTagName('body')[0].appendChild(svg);\r\n            }\r\n            return control;\r\n        }\r\n        return null;\r\n        // bridge.load('{class:table, columns:[{id:'firstname'}, {id:'lastname'}]}');\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n\r\n        if (this.items[id] !== undefined) {\r\n            return true;\r\n        }\r\n        id = id.split('.')[0];\r\n        return (this.items[id] !== undefined);\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return this.items;\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        let item = this.items[id];\r\n        if (!item) {\r\n            id = id.split('.')[0];\r\n            item = this.items[id];\r\n            if (!item) {\r\n                item = new Data();\r\n                item.id = id;\r\n                this.items[id] = item;\r\n            }\r\n        }\r\n        return item;\r\n    }\r\n\r\n    /**\r\n     * Method for executing user input -> Event\r\n     * @param object\r\n     * @param attribute\r\n     * @param oldValue\r\n     * @param newValue\r\n     * @returns {boolean}\r\n     */\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        alert('Bridge.setValue: oldVal:' + oldValue + ', newVal: ' +  + newValue + ', attribute: ' + attribute + ', object: ' + JSON.stringify(object));\r\n        let obj: Data;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n\r\n        } else if (object instanceof Data) {\r\n            obj = object;\r\n            id = object.id;\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = <Data>object;\r\n            id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return false;\r\n        }\r\n        if (obj) {\r\n            // Execute Update to Data\r\n            obj.setValue(attribute, newValue);\r\n            // Could be done here, but currently is done at this.execueChange..:\r\n            // obj[attribute] = value;\r\n        }\r\n\r\n        /*let tmp = {'id': id};\r\n        if (typeof(newValue) !== 'undefined' && newValue !== null) {\r\n            let upd = {};\r\n            upd[attribute] = newValue;\r\n            tmp['upd'] = upd;\r\n        }\r\n        if (typeof(oldValue) !== 'undefined' && oldValue !== null) {\r\n            let rem = {};\r\n            rem[attribute] = oldValue;\r\n            tmp['rem'] = rem;\r\n        }*/\r\n        // this.load(tmp);\r\n        return true;\r\n    }\r\n\r\n    public getValue(object: Object, attribute: string): any {\r\n        let obj: Object;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = object;\r\n            // id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return;\r\n        }\r\n        if (obj) {\r\n            if (obj.hasOwnProperty(attribute)) {\r\n                return obj[attribute];\r\n            } else if (obj instanceof Data) {\r\n                return (<Data>obj).getValue(attribute);\r\n            } else {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    public getNumber(object: Object, attribute: string, defaultValue: number = 0): number {\r\n        let res = <number>this.getValue(object, attribute);\r\n        if (typeof res === 'number') {\r\n            return res;\r\n        } else if (typeof res === 'string') {\r\n            // check whether res is a number\r\n            let value = Number(res);\r\n            if (value || value === 0) {\r\n                return value;\r\n            }\r\n        }\r\n        return defaultValue;\r\n    }\r\n\r\n    getControl(controlId: string) {\r\n        return this.controls[controlId];\r\n    }\r\n\r\n    public registerListener(eventType: string, control: Control, callBackfunction: string): Control {\r\n        if (typeof control === 'string') {\r\n            control = this.getControl(<string>control);\r\n        }\r\n        if (!control) {\r\n            return null;\r\n        }\r\n        if (eventType) {\r\n            eventType = eventType.toLowerCase();\r\n        }\r\n        control.registerListenerOnHTMLObject(eventType);\r\n        if (callBackfunction) {\r\n            let adapter: DelegateAdapter = new DelegateAdapter();\r\n            adapter.callBackfunction = callBackfunction;\r\n            adapter.id = control.getId();\r\n            this.addAdapter(adapter, eventType);\r\n        }\r\n        return control;\r\n    }\r\n\r\n    public addAdapter(adapter: Adapter | string, eventType: string): Adapter {\r\n        if (!eventType) {\r\n            eventType = '';\r\n        }\r\n        let result: Adapter;\r\n        if (adapter instanceof String) {\r\n            let obj = this.adapterFactory[adapter.toLowerCase()];\r\n            result = new obj();\r\n        } else {\r\n            result = <Adapter>adapter;\r\n        }\r\n        let handlers = this.adapters[eventType];\r\n\r\n        if (handlers === null || handlers === undefined) {\r\n            handlers = [];\r\n            this.adapters[eventType] = handlers;\r\n        }\r\n        handlers.push(result);\r\n        return result;\r\n    }\r\n\r\n    public fireEvent(evt: Event): void {\r\n        let handlers = this.adapters[''];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n        handlers = this.adapters[evt['eventType']];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport class DelegateAdapter extends Adapter {\r\n    adapter: Adapter;\r\n    callBackfunction: string;\r\n\r\n    update(evt: Event): boolean {\r\n        if (this.adapter) {\r\n            this.adapter.update(evt);\r\n            return true;\r\n        } else if (this.callBackfunction) {\r\n            return this.executeFunction(this.callBackfunction, evt);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public setAdapter(adapter: Adapter): boolean {\r\n        this.adapter = adapter;\r\n        return true;\r\n    }\r\n\r\n    private executeFunction(strValue: string, evt: Event): boolean {\r\n        let scope = window;\r\n        let scopeSplit = strValue.split('.');\r\n        for (let i = 0; i < scopeSplit.length - 1; i++) {\r\n            scope = scope[scopeSplit[i]];\r\n            if (scope === undefined) {\r\n                return false;\r\n            }\r\n        }\r\n        let fn: any = scope[scopeSplit[scopeSplit.length - 1]];\r\n        if (typeof fn === 'function') {\r\n            fn.call(scope);\r\n            return true;\r\n        } else {\r\n            window['callBack1'].update(evt);\r\n\r\n        }\r\n        return false;\r\n    }\r\n}\r\n","'use strict';\r\nimport Data from './Data';\r\n\r\nexport default class BridgeElement {\r\n    private static elementSet: BridgeElement[] = [];\r\n    public model: Data;\r\n    public id: string;\r\n    public gui: HTMLElement;\r\n\r\n    constructor(model: Data) {\r\n        this.model = model;\r\n        this.id = model.id;\r\n        BridgeElement.elementSet.push(this);\r\n    }\r\n}\r\n","import {Util} from './util';\r\n\r\n// \t\t\t\t######################################################### CSS #########################################################\r\nexport class CSS {\r\n    public css: Object;\r\n    private name: string;\r\n\r\n    constructor(name: string, item?: any) {\r\n        let i, value, border: string, prop, el;\r\n        this.name = name;\r\n        this.css = {};\r\n        if (!item) {\r\n            return;\r\n        }\r\n\r\n        el = window.getComputedStyle(item, null);\r\n        border = el.getPropertyValue('border');\r\n        for (i in el) {\r\n            prop = i;\r\n            value = el.getPropertyValue(prop);\r\n            if (value && value !== '') {\r\n                // optimize CSS\r\n                if (border) {\r\n                    if (prop === 'border-bottom' || prop === 'border-right' || prop === 'border-top' || prop === 'border-left') {\r\n                        if (value !== border) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-color' || prop === 'border-bottom-color' || prop === 'border-right-color' || prop === 'border-top-color' || prop === 'border-left-color') {\r\n                        if (border.substring(border.length - value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-width') {\r\n                        if (border.substring(0, value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else {\r\n                        this.css[prop] = value;\r\n                    }\r\n                } else {\r\n                    this.css[prop] = value;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public static getStdDef() {\r\n        let child, def = Util.create({tag: 'defs'});\r\n\r\n        child = Util.create({tag: 'filter', id: 'drop-shadow'});\r\n        child.appendChild(Util.create({tag: 'feGaussianBlur', 'in': 'SourceAlpha', result: 'blur-out', stdDeviation: 2}));\r\n        child.appendChild(Util.create({tag: 'feOffset', 'in': 'blur-out', dx: 2, dy: 2}));\r\n        child.appendChild(Util.create({tag: 'feBlend', 'in': 'SourceGraphic', mode: 'normal'}));\r\n        def.appendChild(child);\r\n        child = Util.create({tag: 'linearGradient', id: 'reflect', x1: 0, x2: 0, y1: '50%', y2: 0, spreadMethod: 'reflect'});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#aaa', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#eee', offset: '100%'}));\r\n        def.appendChild(child);\r\n\r\n        child = Util.create({tag: 'linearGradient', id: 'classelement', x1: 0, x2: '100%', y1: '100%', y2: 0});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#fff', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#d3d3d3', offset: 1}));\r\n        def.appendChild(child);\r\n\r\n        return def;\r\n    }\r\n\r\n    public static getSubstring(str: string, search: string, startChar: string, endChar: string, splitter: string): any {\r\n        let pos, end, count = 0, array = [];\r\n        pos = str.indexOf(search);\r\n        if (pos > 0) {\r\n            end = str.indexOf(startChar, pos);\r\n            pos = end + 1;\r\n            if (end > 0) {\r\n                while (end < str.length) {\r\n                    if (str.charAt(end) === startChar) {\r\n                        count += 1;\r\n                    }\r\n                    if (str.charAt(end) === endChar) {\r\n                        count -= 1;\r\n                        if (count === 0) {\r\n                            if (splitter && pos !== end) {\r\n                                array.push(str.substring(pos, end).trim());\r\n                            }\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (str.charAt(end) === splitter && count === 1) {\r\n                        array.push(str.substring(pos, end).trim());\r\n                        pos = end + 1;\r\n                    }\r\n\r\n                    end += 1;\r\n                }\r\n                if (splitter) {\r\n                    return array;\r\n                }\r\n                return str.substring(pos, end);\r\n            }\r\n            return str.substring(pos);\r\n        }\r\n        return '';\r\n    }\r\n\r\n    public static addStyle(board: SVGElement, styleName: any) {\r\n        let defs, style: any, css;\r\n        if (styleName.baseVal || styleName.baseVal === '') {\r\n            styleName = styleName.baseVal;\r\n        }\r\n        if (!styleName) {\r\n            return;\r\n        }\r\n        defs = CSS.getDefs(board);\r\n        if (defs.getElementsByTagName('style').length > 0) {\r\n            style = defs.getElementsByTagName('style')[0];\r\n        } else {\r\n            style = Util.create({tag: 'style'});\r\n            style.item = {};\r\n            defs.appendChild(style);\r\n        }\r\n        if (!style.item[styleName]) {\r\n            css = Util.getStyle(styleName);\r\n            style.item[styleName] = css;\r\n            style.innerHTML = style.innerHTML + '\\n.' + styleName + css.getSVGString(board);\r\n        }\r\n    }\r\n\r\n    public static addStyles(board: SVGElement, item: any) {\r\n        if (!item) {\r\n            return;\r\n        }\r\n        let items, i, className: any = item.className;\r\n\r\n        if (className) {\r\n            if (className.baseVal || className.baseVal === '') {\r\n                className = className.baseVal;\r\n            }\r\n        }\r\n        if (className) {\r\n            items = className.split(' ');\r\n            for (i = 0; i < items.length; i += 1) {\r\n                CSS.addStyle(board, items[i].trim());\r\n            }\r\n        }\r\n        for (i = 0; i < item.childNodes.length; i += 1) {\r\n            this.addStyles(board, item.childNodes[i]);\r\n        }\r\n    }\r\n\r\n    public static getDefs(board: SVGElement) {\r\n        let defs;\r\n        if (board.getElementsByTagName('defs').length < 1) {\r\n            defs = Util.create({tag: 'defs'});\r\n            board.insertBefore(defs, board.childNodes[0]);\r\n        } else {\r\n            defs = board.getElementsByTagName('defs')[0];\r\n        }\r\n        return defs;\r\n    }\r\n\r\n    public add(key: string, value: string) {\r\n        this.css[key] = value;\r\n    }\r\n\r\n    public get(key: string): any {\r\n        let i;\r\n        for (i in this.css) {\r\n            if (i === key) {\r\n                return this.css[key];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public getNumber(key: string) {\r\n        return parseInt((this.get(key) || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    public getSVGString(board: SVGElement) {\r\n        let str, pos, style, defs, value, filter, z;\r\n        str = '{';\r\n        for (style in this.css) {\r\n            if (!this.css.hasOwnProperty(style)) {\r\n                continue;\r\n            }\r\n            if (style === 'border') {\r\n                pos = this.css[style].indexOf(' ');\r\n                str = str + 'stroke-width: ' + this.css[style].substring(0, pos) + ';';\r\n                pos = this.css[style].indexOf(' ', pos + 1);\r\n                str = str + 'stroke:' + this.css[style].substring(pos) + ';';\r\n            } else if (style === 'background-color') {\r\n                str = str + 'fill: ' + this.css[style] + ';';\r\n            } else if (style === 'background') {\r\n                value = CSS.getSubstring(this.css[style], 'linear-gradient', '(', ')', ',');\r\n                if (value.length > 0) {\r\n                    defs = CSS.getDefs(board);\r\n                    if (value[0] === '45deg') {\r\n                        pos = 1;\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '100%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                    } else {\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '0%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                        pos = 0;\r\n                    }\r\n                    defs.appendChild(filter);\r\n                    while (pos < value.length) {\r\n                        value[pos] = value[pos].trim();\r\n                        z = value[pos].lastIndexOf(' ');\r\n                        filter.appendChild(Util.create({\r\n                            tag: 'stop',\r\n                            'offset': value[pos].substring(z + 1),\r\n                            style: {'stop-color': value[pos].substring(0, z)}\r\n                        }));\r\n                        pos += 1;\r\n                    }\r\n                    str = str + 'fill: url(#' + this.name + ');';\r\n                    continue;\r\n                }\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n                // box-shadow: inset 0 3px 4px #888;\r\n// \t\t\t\t<defs>\r\n// \t\t\t\t\t<filter id='drop-shadow'>\r\n// \t\t\t\t\t\t<feGaussianBlur in='SourceAlpha' result='blur-out' stdDeviation='2'></feGaussianBlur>\r\n// \t\t\t\t\t\t<feOffset in='blur-out' dx='2' dy='2'></feOffset>\r\n// \t\t\t\t\t\t<feBlend in='SourceGraphic' mode='normal'></feBlend>\r\n// \t\t\t\t\t</filter>\r\n// \t\t\t\t</defs>\r\n            } else {\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n            }\r\n        }\r\n        str = str + '}';\r\n        return str;\r\n    }\r\n}\r\n","import {Bridge} from './Bridge';\r\nimport Data from './Data';\r\nimport EventListener from './EventListener';\r\n\r\nexport abstract class Control {\r\n    public $owner: Control;\r\n    /**\r\n     *\r\n     */\r\n    public property: string;\r\n    public id: string;\r\n    public $view: Element;\r\n    public $viewData: Data = null;\r\n\r\n    protected $model: Data;\r\n    protected $viewListener: EventListenerOrEventListenerObject;\r\n\r\n    /**\r\n     * The properties, we want to listen to\r\n     */\r\n    // static defaultProperties: string[] = [];\r\n\r\n    // public getProperties(): string[] {\r\n    //     return this.properties;\r\n    // }\r\n\r\n    constructor() {\r\n        // e.g. this.properties.push(\"key\");\r\n        // this.properties.push(\"property\");\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data: Data = new Data();\r\n        if (oldData) {\r\n            oldData.removeListener(this);\r\n            const keys: string[] = oldData.getKeys();\r\n            for (let i = 0; i < keys.length; i++) {\r\n                let attr = keys[i];\r\n                if (this.$view) {\r\n                    if (this.$view[attr] === null) {\r\n                        continue;\r\n                    }\r\n                    data.setValue(attr, this.$view[attr]);\r\n                } else {\r\n                    data.setValue(attr, null);\r\n                }\r\n            }\r\n        }\r\n        data.addListener(this);\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     *  Set the new HTMLElement and attach listener to it.\r\n     *  Also remove Listeners from old one and return the old one, if present.\r\n     * @param element\r\n     * @returns The previous Element\r\n     */\r\n    public setView(element: Element): Element {\r\n        let oldElement: Element = null;\r\n        if (this.$view) {\r\n            oldElement = this.$view;\r\n            if (this.$viewListener) {\r\n                oldElement.removeEventListener('change', this.$viewListener);\r\n            }\r\n        }\r\n        this.$view = element;\r\n\r\n        if (this.$viewListener) {\r\n            element.addEventListener('change', this.$viewListener);\r\n        }\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n        return element;\r\n    }\r\n\r\n    public init(owner: Control, property ?: string, id ?: string): Control {\r\n        if (!this.$owner) {\r\n            this.$owner = owner;\r\n        }\r\n        if (!this.id) {\r\n            this.id = id;\r\n        }\r\n        if (!this.property) {\r\n            this.property = this.generateID(property, id);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public createEventListener(): EventListener {\r\n        return new EventListener();\r\n    }\r\n\r\n    public getRoot(): Control {\r\n        if (this.$owner) {\r\n            return this.$owner.getRoot();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return null;\r\n    }\r\n\r\n    public initControl(data: any): void {\r\n        if (this.$view === null || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (data.hasOwnProperty('prop')) {\r\n            for (let key in data.prop) {\r\n                let oldValue = this.$viewData.getValue(key);\r\n                if (this.$view) {\r\n                    this.updateElement(key, oldValue, data.prop[key]);\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        let hasRem = data.hasOwnProperty('rem');\r\n        let removed: any[] = [];\r\n        if (data.hasOwnProperty('upd')) {\r\n            for (let key in data.upd) {\r\n                let oldValue;\r\n                let newValue = data.upd[key];\r\n                let entity;\r\n                const temp = false;\r\n                if (temp) {\r\n//                if (newValue == this.getViewData().getValue(key)) {\r\n                    // new Value assertEquals old value, so we don't need to change anything..\r\n                    // delete data.rem[key];\r\n                    if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                        removed.push(data.rem[key]);\r\n                    }\r\n                    continue;\r\n                }\r\n                if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                    // if there's a rem, the oldValue from rem will be used and expected to be right..\r\n                    oldValue = data.rem[key];\r\n                    if (this.$model && this.$model.getValue(key) === oldValue) {\r\n                        entity = this.$model;\r\n//                    } else if (oldValue == this.getViewData().getValue(key)) {\r\n//                        $graphModel = this.getViewData();\r\n                    }\r\n                    delete data.rem[key];\r\n\r\n                    if (entity === null) {\r\n                        continue;\r\n                    }\r\n                }\r\n                if (entity) {\r\n                    if (!hasRem) {\r\n                        if (entity === this.$model) {\r\n                            oldValue = this.$model.getValue(key);\r\n                        } else {\r\n//                           oldValue = this.getViewData().getValue(key);\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (this.$model) {\r\n                        // try to get the oldValue directly from the $graphModel...\r\n                        oldValue = this.$model.getValue(key);\r\n                        entity = this.$model;\r\n                    }\r\n                    if (oldValue === null) {\r\n                        // if there was no data in the entity, we try to get oldValue from the $view\r\n//                        oldValue = this.getViewData().getValue(key);\r\n//                        entity = this.getViewData();\r\n                    }\r\n                }\r\n\r\n                //  || oldValue !== this.$viewData.getValue(key)\r\n                if (newValue === oldValue) {\r\n                    // no match, so update should be wrong...\r\n                    continue;\r\n                }\r\n                const viewDataOldValue = this.$viewData.getValue(key);\r\n                if (entity === this.$viewData) {\r\n\r\n                    // this.getViewData().setValue(key, newValue);\r\n                    if (this.$view) {\r\n                        this.updateElement(key, viewDataOldValue, newValue);\r\n                    }\r\n                } else {\r\n                    this.updateElement(key, viewDataOldValue, newValue);\r\n                }\r\n                this.getRoot().setValue(entity, key, newValue, oldValue);\r\n            }\r\n            // this.saveViewInData();\r\n        }\r\n        if (hasRem) {\r\n            for (let key in data.rem) {\r\n                if (removed.hasOwnProperty(key)) {\r\n                    continue;\r\n                }\r\n                let oldValue;\r\n//                    this.getViewData().getValue(key);\r\n//                if (oldValue != data.rem[key] || data.upd !== undefined && (data.upd[key] == oldValue || this.getViewData().getValue(key) == data.upd[key])) {\r\n                // if rem is invalid, or if the change is already applied, don't do anything..\r\n                //                  continue;\r\n                //            }\r\n                // delete this.$viewData.getValue(key);\r\n                // this.saveViewInData();\r\n                this.updateElement(key, null, null);\r\n                // this.$view.removeAttribute(key);\r\n                if (this.$model) {\r\n//                    this.getRoot().setValue(this.$graphModel, key, this.getViewData().getValue(key), oldValue);\r\n                }\r\n            }\r\n        }\r\n        if (this.property) {\r\n            // Add listener to Input field:\r\n            this.$view['onchange'] = ((ev: Event) => {\r\n                    this.controlChanged(ev);\r\n                }\r\n            );\r\n        }\r\n//        this.saveViewInData();\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        return null;\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n        return false;\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return new Object();\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue ?: Object): boolean {\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Is called when a object, that the Control is listening to, changes its value.\r\n     * @param entity\r\n     * @param property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        if (oldValue === newValue || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (oldValue === this.$viewData.getValue(property)) {\r\n            return;\r\n        }\r\n        // Set NewData to ViewData and Fire PC\r\n        this.$viewData.setValue(property, newValue);\r\n\r\n//\r\n//\r\n//         // if (entity == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.entity) {\r\n//                 alert(\"entity = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.entity.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.entity, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the entity is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"entity = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n// >>>>>>> addOldFunctions\r\n        if (this.$viewData) {\r\n            this.$viewData.setValue(property, newValue);\r\n        }\r\n        if (this.$model) {\r\n            this.$model.setValue(property, newValue);\r\n        }\r\n        this.updateElement(property, oldValue, newValue);\r\n    }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            // Do Nothing\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  Update GUI Element\r\n     * @param {string} property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        if (this.$view && this.$view.hasAttribute(property)) {\r\n            this.$view.setAttribute(property, newValue);\r\n        }\r\n    }\r\n\r\n//        if (oldValue == newValue) {\r\n//            return;\r\n//        }\r\n//        if (oldValue == this.$viewData.getValue(property)) {\r\n//            return;\r\n//        }\r\n//        // Set NewData to ViewData and Fire PC\r\n//        this.$viewData.setValue(property, newValue);\r\n//\r\n//\r\n//\r\n//         // if ($graphModel == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.$graphModel) {\r\n//                 alert(\"$graphModel = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.$graphModel.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.$graphModel, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the $graphModel is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"$graphModel = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n\r\n    public getId(): string {\r\n        return this.id;\r\n    }\r\n\r\n    public load(json: JSON | Object, owner ?: Control): any {\r\n        // Do Nothing\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.property || entity.hasProperty(this.property)) {\r\n                entity.addListener(this, this.property);\r\n                this.$model = entity;\r\n            }\r\n        }\r\n    }\r\n\r\n    public appendChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.appendChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].appendChild(child.$view);\r\n        }\r\n    }\r\n\r\n    public removeChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.removeChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].removeChild(child.$view);\r\n        }\r\n    }\r\n\r\n    /*\r\n     Property looks like: 't1.talk'\r\n     */\r\n    public setProperty(property: string): void {\r\n        if (!this.property) {\r\n            return;\r\n        }\r\n        let objId = property.split('.')[0];\r\n        let object = null;\r\n        if (this.$owner.hasItem(objId)) {\r\n            object = this.$owner.getItem(objId);\r\n        }\r\n\r\n        // remove listener on old object\r\n        if (this.$model) {\r\n            // this.$graphModel.removeListener(this);\r\n            this.$model.removeListener(this, this.lastProperty);\r\n        }\r\n        this.property = property;\r\n\r\n        // add listener to object..\r\n        if (object) {\r\n            object.addListener(this, this.lastProperty);\r\n            this.$model = object;\r\n            this.updateElement(this.lastProperty, this.$viewData.getValue(this.lastProperty), object.prop[this.lastProperty]);\r\n        }\r\n    }\r\n\r\n    public registerListenerOnHTMLObject(eventType: string): boolean {\r\n        return this.registerEventListener(eventType, <HTMLElement>this.$view);\r\n    }\r\n\r\n    // Normal Event HTML-Event\r\n    // Eventtype:string,\r\n    // id:string of Control\r\n    public fireEvent(evt: Event): void {\r\n        // Do Nothing\r\n    }\r\n\r\n    public isClosed(): boolean {\r\n        return this['closed'];\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        if (this.isClosed()) {\r\n            return this.$owner.getShowed();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * the id of the Data object, that contains the properties of the view\r\n     * @returns {string}\r\n     */\r\n    protected getControlDataID() {\r\n        return this.id + '_data';\r\n    }\r\n\r\n    protected generateID(property ?: string, id ?: string): string {\r\n        if (property) {\r\n            return property;\r\n        }\r\n        if (id) {\r\n            // will generate a data Object suitable for the Control..\r\n            // must be overridden, if the changeEvent shouldn't listen on value...\r\n//            return id + '.' + this.getStandardProperty();//+ \"_data\"\r\n            return id + '.' + '_data';\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected updateViewData() {\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n        const keys: string[] = this.$viewData.getKeys();\r\n        for (let i = 0; i < keys.length; i++) {\r\n            let attr = keys[i];\r\n            if (this.$view[attr] === null) {\r\n                continue;\r\n            }\r\n            this.$viewData.setValue(attr, this.$view[attr]);\r\n        }\r\n    }\r\n\r\n    protected registerEventListener(eventType: string, htmlElement: HTMLElement): boolean {\r\n        if (!htmlElement) {\r\n            return false;\r\n        }\r\n        if (htmlElement instanceof HTMLElement === false) {\r\n            return false;\r\n        }\r\n        let control = this;\r\n        let listener = (t: any) => {\r\n            t.eventType = eventType;\r\n            t.id = control.id;\r\n            control.$owner.fireEvent(t);\r\n        };\r\n        htmlElement.addEventListener(eventType, listener);\r\n        return true;\r\n    }\r\n\r\n    get lastProperty(): string {\r\n        if (!this.property) {\r\n            return '';\r\n        }\r\n        let arr: string[] = this.property.split('.');\r\n        return arr[arr.length - 1];\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\n\r\nexport default class Data {\r\n    public prop = {};\r\n    id: string;\r\n    // $listener: Control[] = [];\r\n    $listener: Object = {};\r\n\r\n    private static nullCheck(property: string): string {\r\n        if (property === undefined || property === null) {\r\n            property = '';\r\n        }\r\n        return property;\r\n    }\r\n    public getKeys(): string[] {\r\n        return Object.keys(this.prop);\r\n    }\r\n\r\n    public addProperties(values: Object) {\r\n        if (!values) {\r\n            return;\r\n        }\r\n        if (values['prop']) {\r\n            let prop = values['prop'];\r\n            for (let property in prop) {\r\n                if (prop.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (prop[property] !== null && '' !== prop[property]) {\r\n                    this.setValue(property, prop[property]);\r\n                }\r\n            }\r\n        } else {\r\n            let upd = values['upd'] || {};\r\n            let rem = values['rem'] || {};\r\n\r\n            for (let property in upd) {\r\n                if (upd.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (rem.hasOwnProperty(property) === false) {\r\n                    this.setValue(property, upd[property]);\r\n                } else {\r\n                    // if we have a rem, we wan't to check, if its a valid change (teh old value is the value in rem)\r\n                    if (this.getValue(property) === rem[property]) {\r\n                        this.setValue(property, upd[property]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getValue(attribute: string) {\r\n        return this.prop[attribute];\r\n    }\r\n\r\n    public setValue(attribute: string, newValue: any): void {\r\n        let oldValue = this.prop[attribute];\r\n        if (oldValue === newValue && newValue !== null) {\r\n            return;\r\n        }\r\n        this.prop[attribute] = newValue;\r\n        this.firePropertyChange(attribute, oldValue, newValue);\r\n    }\r\n\r\n    public addTo(attribute: string, newValue: any): boolean {\r\n        let add: boolean;\r\n        if (this.prop[attribute]) {\r\n            if (this.prop[attribute].contains(newValue) === false) {\r\n                add = true;\r\n            }\r\n        } else {\r\n            this.prop[attribute] = [];\r\n            add = true;\r\n        }\r\n        if (add) {\r\n            this.prop[attribute].push(newValue);\r\n            this.firePropertyChange(attribute, null, newValue);\r\n        }\r\n        return add;\r\n    }\r\n\r\n    public removeFrom(attribute: string, newValue: any): boolean {\r\n        if (!this.prop[attribute]) {\r\n            return true;\r\n        }\r\n        let pos: number = this.prop[attribute].indexOf(newValue);\r\n        if (pos < 0) {\r\n            return true;\r\n        }\r\n        this.prop[attribute].splice(pos, 1);\r\n        this.firePropertyChange(attribute, newValue, null);\r\n        return true;\r\n    }\r\n\r\n    public addListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(property);\r\n        if (!listeners) {\r\n            listeners = [];\r\n            this.$listener[Data.nullCheck(property)] = listeners;\r\n        }\r\n        listeners.push(control);\r\n    }\r\n\r\n    public removeListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners = this.getListeners(property);\r\n        if (listeners === null) {\r\n            return;\r\n        }\r\n        let pos = listeners.indexOf(control);\r\n        if (pos >= 0) {\r\n            listeners.splice(pos, 1);\r\n        }\r\n        if (listeners.length === 0 && Data.nullCheck(property) !== '') {\r\n            // only remove, if it's not the default listener list...\r\n            delete this.$listener[property];\r\n        }\r\n    }\r\n\r\n    public hasProperty(property: string): boolean {\r\n        return this.prop.hasOwnProperty(property);\r\n    }\r\n\r\n    public addFrom(attribute: string, oldData: Data): void {\r\n        if (oldData) {\r\n            this.setValue(attribute, oldData.getValue(attribute));\r\n        } else {\r\n            this.setValue(attribute, null);\r\n        }\r\n    }\r\n\r\n    public removeKey(key: string): any {\r\n        if (this.hasProperty(key)) {\r\n            const oldValue = this.prop[key];\r\n            delete this.prop[key];\r\n            return oldValue;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected getListeners(property: string): PropertyChangeSupport[] {\r\n        property = Data.nullCheck(property);\r\n        return this.$listener[property];\r\n    }\r\n\r\n    protected firePropertyChange(attribute: string, oldValue: Object, newValue: Object) {\r\n        attribute = Data.nullCheck(attribute);\r\n        // at first fire for the given property\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(attribute);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n        // now we need to fire the Listeners that wan't to listen to everything\r\n        listeners = this.getListeners(null);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport interface EventHandler {\r\n    canHandle(): boolean;\r\n    handle(event: Event, element: DiagramElement): boolean;\r\n    setActive(active: boolean): void;\r\n}\r\n\r\nexport class EventBus {\r\n    public static CREATE: string = 'Create';\r\n    public static EDITOR: string = 'Editor';\r\n    public static OPENPROPERTIES: string = 'openProperties';\r\n    public static RELOADPROPERTIES: string = 'reloadProperties';\r\n    public static ELEMENTMOUSEDOWN: string = 'ELEMENT:MOUSEDOWN';\r\n    public static ELEMENTMOUSEUP: string = 'ELEMENT:MOUSEUP';\r\n    public static ELEMENTMOUSELEAVE: string = 'ELEMENT:MOUSELEAVE';\r\n    public static ELEMENTMOUSEMOVE: string = 'ELEMENT:MOUSEMOVE';\r\n    public static ELEMENTMOUSEWHEEL: string = 'ELEMENT:MOUSEWHEEL';\r\n    public static ELEMENTCLICK: string = 'ELEMENT:CLICK';\r\n    public static ELEMENTDBLCLICK: string = 'ELEMENT:DBLCLICK';\r\n    public static ELEMENTDRAG: string = 'ELEMENT:DRAG';\r\n    public static ELEMENTDRAGOVER: string = 'ELEMENT:DRAGOVER';\r\n    public static ELEMENTDROP: string = 'ELEMENT:DROP';\r\n    public static ELEMENTDRAGLEAVE: string = 'ELEMENT:DRAGLEAVE';\r\n\r\n    public static EVENTS: string[] = [\r\n        EventBus.CREATE,\r\n        EventBus.EDITOR,\r\n        EventBus.OPENPROPERTIES,\r\n        EventBus.RELOADPROPERTIES,\r\n        EventBus.ELEMENTMOUSEDOWN,\r\n        EventBus.ELEMENTMOUSEUP,\r\n        EventBus.ELEMENTMOUSELEAVE,\r\n        EventBus.ELEMENTMOUSEMOVE,\r\n        EventBus.ELEMENTMOUSEWHEEL,\r\n        EventBus.ELEMENTCLICK,\r\n        EventBus.ELEMENTDRAG,\r\n        EventBus.ELEMENTDBLCLICK,\r\n        EventBus.ELEMENTDRAGOVER,\r\n        EventBus.ELEMENTDROP,\r\n        EventBus.ELEMENTDRAGLEAVE,\r\n    ];\r\n\r\n    private static handlers = {};\r\n\r\n    private static $activeHandler: string = '';\r\n\r\n    public static setActiveHandler(handler: string): void {\r\n        this.$activeHandler = handler;\r\n    }\r\n\r\n    public static isHandlerActiveOrFree(handler: string, notEmpty?: boolean): boolean {\r\n        if (notEmpty) {\r\n            return this.$activeHandler === handler;\r\n        }\r\n        return this.$activeHandler === handler || this.$activeHandler === '' || this.$activeHandler === undefined;\r\n    }\r\n\r\n    public static isAnyHandlerActive(): boolean {\r\n        return !(this.$activeHandler === '' || this.$activeHandler === undefined);\r\n    }\r\n\r\n    public static releaseActiveHandler(): void {\r\n        this.$activeHandler = '';\r\n    }\r\n\r\n    public static getActiveHandler(): string {\r\n        return this.$activeHandler;\r\n    }\r\n\r\n    static register(control: Control, view: Element) {\r\n        let events: string[];\r\n        if (typeof control['getEvents'] === 'function') {\r\n            events = control['getEvents']();\r\n        }\r\n\r\n        if (!events || !view) {\r\n            return;\r\n        }\r\n        for (let event of events) {\r\n            this.registerEvent(view, event, control);\r\n        }\r\n    }\r\n\r\n    static registerEvent(view: Element, event: string, control?: any) {\r\n        const pos: number = event.indexOf(':');\r\n        if (pos > 0) {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        } else {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        }\r\n    }\r\n\r\n    public static publish(element: DiagramElement, evt: Event) {\r\n        let handlers = EventBus.handlers[evt.type];\r\n        if (handlers) {\r\n            for (let handler of handlers) {\r\n                handler.handle(evt, element);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static subscribe(handler: EventHandler, ...eventTypes: string[]) {\r\n        for (let event of eventTypes) {\r\n            let handlers = EventBus.handlers[event];\r\n            if (handlers === null || handlers === undefined) {\r\n                handlers = [];\r\n                EventBus.handlers[event] = handlers;\r\n            }\r\n            handlers.push(handler);\r\n        }\r\n    }\r\n}\r\n","import SimpleEvent from './Event';\r\n\r\nexport default class EventListener {\r\n    private $onUpdate: Function;\r\n\r\n    get onUpdate(): Function {\r\n        return this.$onUpdate;\r\n    }\r\n\r\n    set onUpdate(value: Function) {\r\n        this.$onUpdate = value;\r\n    }\r\n\r\n    update(event: SimpleEvent) {\r\n        this.$onUpdate(event);\r\n    }\r\n}\r\n","// ################################## jsEPS ####################################################\r\nimport {SVGConverter} from './SVGConverter';\r\n\r\nexport class JSEPS {\r\n    private max: number;\r\n    private min: number;\r\n    private inverting: boolean;\r\n    private output: string[];\r\n    private font: number;\r\n\r\n    constructor(options: any) {\r\n        this.max = 0;\r\n        this.min = 999;\r\n        let hasInverting = typeof (options.inverting);\r\n        this.inverting = (options && hasInverting !== 'undefined' ? options.inverting : true);\r\n        this.output = ['%!PS-Adobe-3.0 EPSF-3.0', '1 setlinewidth'];\r\n        this.out('/FSD {findfont exch scalefont def} bind def % In the document prolog: define');\r\n        this.out('/SMS {setfont moveto show} bind def % some useful procedures');\r\n        this.out('/MS {moveto show} bind def');\r\n        this.out('/F1  10  /Helvetica  FSD % At the start of the script: set up');\r\n        this.font = 1;\r\n    }\r\n\r\n    public out(value: string) {this.output.push(value); }\r\n    public rect(x: number, y: number, width: number, height: number, style: string) {\r\n        y = y + (this.inverting ? height : 0);\r\n        if (style && style.indexOf('fill:url(#classelement);') >= 0) {\r\n            this.out('gsave 0.93 0.93 0.93 setrgbcolor newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectfill grestore');\r\n        } else {\r\n            this.out('newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectstroke');\r\n        }\r\n    }\r\n    public setFillColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public y(value: number) {this.max = Math.max(this.max, value); this.min = Math.min(this.min, value); return this.inverting ? '%y(' + value + ')' : value; }\r\n    public getType(): string {\r\n        return 'application/postscript';\r\n    }\r\n\r\n    public getData(): string {\r\n        let t, end, url, text, typ = 'application/postscript', a = document.createElement('a'), data = '', pos, i;\r\n        for (i = 0; i < this.output.length; i += 1) {\r\n            text = this.output[i];\r\n            if (this.inverting) {\r\n                while ((pos = text.indexOf('%y')) >= 0) {\r\n                    end = text.indexOf(')', pos);\r\n                    t = this.max - parseInt(text.substring(pos + 3, end), 10);\r\n                    text = text.substring(0, pos) + t + text.substring(end + 1);\r\n                }\r\n            }\r\n            data = data + text + '\\r\\n';\r\n        }\r\n        return data;\r\n    }\r\n\r\n    public setDrawColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public ellipse(cx: number, cy: number, rx: number, ry: number, colorMode: string) {/*FIXME*/}\r\n    public circle(cx: number, cy: number, r: number, colorMode: string) {/*FIXME*/}\r\n    public setTextColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public text(x: number, y: number, text: string) {this.out('(' + text.replace('&lt;', '<').replace('&gt;', '>') + ') ' + x + ' ' + this.y(y) + ' F1 SMS'); }\r\n    public lineto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' lineto'); this.out('stroke'); }\r\n    public moveto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' moveto'); }\r\n    public line(x1: number, y1: number, x2: number, y2: number) {this.out('newpath ' + x1 + ' ' + this.y(y1) + ' moveto ' + x2 + ' ' + this.y(y2) + ' lineto stroke'); }\r\n    public setLineWidth(value: string) {this.out(value + ' setlinewidth'); }\r\n    public setFont(value: string) {this.out('/F' + (this.font += 1) + ' 10 /' + value + ' FSD'); }\r\n}\r\n","import { Graph } from './elements/Graph';\r\n\r\n/*const buttons = {\r\n    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    clazz: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n};\r\n*/\r\nexport default class Palette {\r\n\r\n    private graph: Graph;\r\n    private palette: Element;\r\n    private root: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n        let div = document.createElement('div');\r\n        div.className = 'palette';\r\n        div.id = 'palette';\r\n        this.root = div;\r\n        this.palette = div;\r\n        for (let key in graph.nodeFactory) {\r\n            let element = graph.nodeFactory[key];\r\n            let control = new element();\r\n            let icon = control.getToolBarIcon();\r\n            if (icon) {\r\n                let button = <HTMLButtonElement>document.createElement('button');\r\n                button.className = 'add' + key + 'Btn';\r\n                button.innerHTML = icon.outerHTML;\r\n                button.onclick = e => {\r\n                    let nextFreePosition = this.graph.getNextFreePosition();\r\n                    // let node = this.graph.addElementWithValues(graph.nodeFactory[key], {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    let node = this.graph.addElementWithValues(key, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    this.graph.drawElement(node);\r\n                };\r\n                this.palette.appendChild(button);\r\n            }\r\n        }\r\n        // this.graph.nodeFactory\r\n//        this.addButtons();\r\n    }\r\n\r\n    public show() {\r\n        document.body.appendChild(this.root);\r\n    }\r\n\r\n    private addButtons() {\r\n        /*for (let btn in buttons) {\r\n            let button = <HTMLButtonElement>document.createElement('button');\r\n            button.className = 'add' + btn + 'Btn';\r\n            button.innerHTML = buttons[btn];\r\n            button.onclick = e => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let node = this.graph.addElementWithValues(btn, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                this.graph.drawElement(node);\r\n            };\r\n            this.palette.appendChild(button);\r\n        }*/\r\n    }\r\n}\r\n","import {Graph} from './elements/Graph';\r\nimport * as edges from './elements/edges';\r\nimport {EventBus, EventHandler} from './EventBus';\r\nimport {DiagramElement} from './elements/BaseElements';\r\nimport {Util} from './util';\r\n\r\nexport class PanelGroup implements EventHandler {\r\n    private graph: Graph;\r\n    private selectedElement: DiagramElement;\r\n    private clearPanel: Panel;\r\n    private generatePanel: Panel;\r\n    private propertiesMasterPanel: HTMLDivElement;\r\n    private propertiesContent: HTMLDivElement;\r\n    private propHeaderLabel: HTMLDivElement;\r\n    private propHeaderButton: HTMLButtonElement;\r\n    private selectedPanel: Panel;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.clearPanel = new ClearPanel(this);\r\n        this.generatePanel = new GeneratePanel(this);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        this.handleOpenProperties(event, element);\r\n\r\n        if (event.type === EventBus.RELOADPROPERTIES\r\n            && this.selectedElement && element.id === this.selectedElement.id) {\r\n            this.handleEvent(event, element);\r\n        }\r\n\r\n        // the same element was clicked. do nothing\r\n        if (this.selectedElement && this.selectedElement.id === element.id) {\r\n            return true;\r\n        }\r\n        if (element.id === 'RootElement') {\r\n            this.setActivePanel(this.clearPanel);\r\n        }\r\n        if (element.id === 'GenerateProp') {\r\n            this.setActivePanel(this.generatePanel);\r\n        }\r\n        this.selectedElement = element;\r\n\r\n        return true;\r\n    }\r\n\r\n    public getGraph(): Graph {\r\n        return this.graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(PanelGroup.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(PanelGroup.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n     public handleEvent(event: any, element: any) {\r\n        // DO NOTHING\r\n    }\r\n\r\n    public show() {\r\n        // main div to display any properties, class, edge, etc.\r\n        this.propertiesMasterPanel = document.createElement('div');\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n\r\n        this.propertiesContent = document.createElement('div');\r\n        this.propertiesContent.className = 'properties-hidden';\r\n\r\n        this.propHeaderLabel = document.createElement('div');\r\n        this.propHeaderLabel.style.display = 'inherit';\r\n        this.propHeaderLabel.style.cursor = 'pointer';\r\n        this.propHeaderLabel.onclick = e => this.toogleProperties(e);\r\n\r\n        // button to display and hide the properties of e.g. a class\r\n        this.propHeaderButton = document.createElement('button');\r\n        this.propHeaderButton.className = 'btnHideProp';\r\n        this.propHeaderButton.style.cssFloat = 'right';\r\n        this.propHeaderButton.onclick = e => this.toogleProperties(e);\r\n\r\n        let propertiesHeader = document.createElement('div');\r\n        propertiesHeader.style.display = 'inline';\r\n        propertiesHeader.appendChild(this.propHeaderLabel);\r\n        propertiesHeader.appendChild(this.propHeaderButton);\r\n\r\n        this.propertiesMasterPanel.appendChild(propertiesHeader);\r\n        this.propertiesMasterPanel.appendChild(this.propertiesContent);\r\n        document.body.appendChild(this.propertiesMasterPanel);\r\n\r\n        this.setActivePanel(this.clearPanel);\r\n    }\r\n\r\n    public setActivePanel(panel: Panel) {\r\n        this.selectedPanel = panel;\r\n        this.propHeaderLabel.innerHTML = panel.getHeaderText();\r\n        if (this.propertiesContent) {\r\n            while (this.propertiesContent.hasChildNodes()) {\r\n                this.propertiesContent.removeChild(this.propertiesContent.childNodes[0]);\r\n            }\r\n        }\r\n        panel.show();\r\n\r\n        panel.showFirstTab();\r\n        if (panel !== this.clearPanel) {\r\n            this.showProperties(null);\r\n        } else {\r\n            this.hideProperties(null);\r\n        }\r\n    }\r\n\r\n    public getProperiesContent(): HTMLDivElement {\r\n        return this.propertiesContent;\r\n    }\r\n\r\n    private handleOpenProperties(event: Event, element: DiagramElement) {\r\n        if (event.type === 'dblclick') {\r\n            this.showProperties(event);\r\n        }\r\n    }\r\n\r\n    private showProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Show\r\n        this.propHeaderButton.innerHTML = '&#8897;';\r\n        this.propHeaderButton.title = 'Hide properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel';\r\n        this.propertiesContent.className = 'properties';\r\n    }\r\n\r\n    private toogleProperties(evt: Event): void {\r\n        if (this.propHeaderButton.title === 'Show properties') {\r\n            this.showProperties(evt);\r\n        } else {\r\n            this.hideProperties(evt);\r\n        }\r\n    }\r\n\r\n    private hideProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Hide\r\n        this.propHeaderButton.innerHTML = '&#8896;';\r\n        this.propHeaderButton.title = 'Show properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n        this.propertiesContent.className = 'properties-hidden';\r\n    }\r\n}\r\n\r\nexport abstract class Panel {\r\n    protected divPropertiesPanel: HTMLDivElement;\r\n    protected divPropertiesTabbedPanel: HTMLDivElement;\r\n    protected element: any;\r\n    protected group: PanelGroup;\r\n    private panelItem: PanelItem[] = [];\r\n\r\n    constructor(group: PanelGroup, element: any) {\r\n        // get the properties content panel\r\n        this.divPropertiesPanel = document.createElement('div');\r\n        this.element = element;\r\n        this.group = group;\r\n\r\n        this.divPropertiesTabbedPanel = document.createElement('div');\r\n        this.divPropertiesTabbedPanel.className = 'tabbedpane';\r\n\r\n        // add tabbed panel\r\n        this.divPropertiesPanel.appendChild(this.divPropertiesTabbedPanel);\r\n    }\r\n\r\n    public show(): void {\r\n        let propertiesContent: HTMLDivElement = this.group.getProperiesContent();\r\n        if (this.panelItem.length > 1) {\r\n            propertiesContent.appendChild(this.getPropertiesTabbedPanel());\r\n        }\r\n\r\n        propertiesContent.appendChild(this.getPropertiesPanel());\r\n    }\r\n\r\n    public getPropertiesTabbedPanel(): HTMLDivElement {\r\n        return this.divPropertiesTabbedPanel;\r\n    }\r\n\r\n    public getPropertiesPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return '';\r\n    }\r\n\r\n    public showFirstTab(): void {\r\n        if (this.panelItem.length > 0) {\r\n            this.openTab(this.panelItem[0]);\r\n        }\r\n    }\r\n\r\n    protected createTabElement(tabText: string, tabValue: string, item: PanelItem): PanelItem {\r\n        let tabElementBtn = document.createElement('button');\r\n        tabElementBtn.className = 'tablinks';\r\n        tabElementBtn.innerText = tabText;\r\n        tabElementBtn.value = tabValue;\r\n\r\n        if (item === null) {\r\n            item = new PanelItem(this);\r\n        }\r\n        item.withButton(tabElementBtn);\r\n\r\n        tabElementBtn.onclick = () => this.openTab(item);\r\n        this.divPropertiesTabbedPanel.appendChild(tabElementBtn);\r\n        this.panelItem.push(item);\r\n        return item;\r\n    }\r\n\r\n    protected openTab(panelItem: PanelItem): void {\r\n        for (let key in this.panelItem) {\r\n            let child = this.panelItem[key];\r\n            if (child !== panelItem) {\r\n                 child.deactive();\r\n            }\r\n        }\r\n        panelItem.active();\r\n        // hide other tabcontent\r\n        if (this.divPropertiesPanel) {\r\n            while (this.divPropertiesPanel.hasChildNodes()) {\r\n                this.divPropertiesPanel.removeChild(this.divPropertiesPanel.childNodes[0]);\r\n            }\r\n        }\r\n\r\n        // ADD\r\n        if (panelItem.getContent()) {\r\n            this.divPropertiesPanel.appendChild(panelItem.getContent());\r\n        }\r\n    }\r\n}\r\n\r\nexport class GeneratePanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n\r\n        let item: PanelItem = this.createTabElement('General', 'General', null);\r\n\r\n        // Workspace and generate code stuff\r\n        let inputGenerateWorkspace: HTMLInputElement =  <HTMLInputElement> Util.createHTML({tag: 'input', id: 'workspace', type: 'text', placeholder: 'Type your Folder for generated code...', value: 'src/main/java', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Folder:', inputGenerateWorkspace);\r\n\r\n        let inputGeneratePackage: HTMLInputElement = <HTMLInputElement> Util.createHTML({tag: 'input', id: 'package', type: 'text', placeholder: 'Type your workspace for generated code...', value: '', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Package:', inputGeneratePackage);\r\n\r\n        let options = document.createElement('div');\r\n        options.style.textAlign = 'center';\r\n        options.style.margin = '3';\r\n        options.style.padding = '5';\r\n\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(options);\r\n\r\n        options.style.borderStyle = 'groove';\r\n        options.style.borderRadius = '10px';\r\n\r\n        let btnGenerate = document.createElement('button');\r\n        btnGenerate.textContent = 'Generate';\r\n        btnGenerate.title = 'Generate code into your workspace';\r\n        btnGenerate.className = 'OptionElement';\r\n\r\n        let that = this;\r\n        btnGenerate.onclick = () => {\r\n            let workspace = inputGeneratePackage.value;\r\n            if (workspace.length === 0) {\r\n                alert('No workspace set.\\nEnter first your workspace');\r\n                inputGeneratePackage.focus();\r\n                return;\r\n            }\r\n            that.group.getGraph().generate(workspace, inputGenerateWorkspace.value);\r\n        };\r\n        options.appendChild(btnGenerate);\r\n        options.appendChild(document.createElement('hr'));\r\n        options.appendChild(document.createElement('br'));\r\n\r\n        let btnAutoLayout = Util.createHTML({tag: 'button', className: 'OptionElement', value: 'Auto Layout', style: {marginRight: '10px'}, onclick: () => {\r\n                that.group.getGraph().layout();\r\n            }});\r\n\r\n        options.appendChild(btnAutoLayout);\r\n\r\n        // delete all nodes\r\n        let btnDeleteAll = document.createElement('button');\r\n        btnDeleteAll.className = 'OptionElement';\r\n        btnDeleteAll.textContent = 'Delete All';\r\n        btnDeleteAll.title = 'Delete all nodes from diagram';\r\n\r\n        btnDeleteAll.onclick = () => {\r\n            let confirmDelete = confirm('All classes will be deleted!');\r\n            if (!confirmDelete) {\r\n                return;\r\n            }\r\n            that.group.getGraph().$graphModel.removeAllElements();\r\n        };\r\n        btnDeleteAll.style.marginRight = '10px';\r\n        options.appendChild(btnDeleteAll);\r\n\r\n        // export stuff\r\n        let exportTypes: string[] = ['Export', 'HTML', 'JSON', 'PDF', 'PNG', 'SVG'];\r\n        let selectExport = document.createElement('select');\r\n\r\n        exportTypes.forEach(type => {\r\n            if (!(!window['jsPDF'] && type === 'PDF')) {\r\n                let option = document.createElement('option');\r\n                option.value = type;\r\n                option.textContent = type;\r\n                selectExport.appendChild(option);\r\n            }\r\n        });\r\n\r\n        selectExport.onchange = (evt) => {\r\n            let selectedExportType = selectExport.options[selectExport.selectedIndex].value;\r\n            selectExport.selectedIndex = 0;\r\n            that.group.getGraph().saveAs(selectedExportType);\r\n        };\r\n        selectExport.className = 'OptionElement';\r\n        options.appendChild(selectExport);\r\n        options.appendChild(document.createElement('br'));\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Properties';\r\n    }\r\n\r\n}\r\n\r\nexport class ClearPanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Select any element to see its properties';\r\n    }\r\n}\r\n\r\nexport class PanelItem {\r\n    protected panel: Panel;\r\n    protected label: string;\r\n    protected button: HTMLButtonElement;\r\n    protected content: HTMLDivElement = <HTMLDivElement>Util.create({tag: 'div', className: 'tabContent'});\r\n\r\n    constructor(panel: Panel, label?: string) {\r\n        this.panel = panel;\r\n        this.label = label;\r\n    }\r\n\r\n    public active(): void {\r\n        if (this.getButton()) {\r\n            this.getButton().className += ' active';\r\n        }\r\n    }\r\n\r\n    public deactive(): void {\r\n        if (this.getButton()) {\r\n            Util.removeClass(this.getButton(), 'active');\r\n        }\r\n    }\r\n\r\n    public withButton(button: HTMLButtonElement): PanelItem {\r\n        this.button = button;\r\n        return this;\r\n    }\r\n\r\n    public withContent(element: HTMLElement): PanelItem {\r\n        this.content.appendChild(element);\r\n        return this;\r\n    }\r\n\r\n    public withInput(labelText: string, element: HTMLElement): PanelItem {\r\n        let group: HTMLDivElement = <HTMLDivElement> Util.createHTML({tag: 'div'});\r\n        let label = Util.createHTML({tag: 'label', for: element.id, value: labelText});\r\n        group.appendChild(label);\r\n        group.appendChild(element);\r\n\r\n        this.content.appendChild(group);\r\n        return this;\r\n    }\r\n\r\n    public getButton(): HTMLButtonElement {\r\n        return this.button;\r\n    }\r\n\r\n    public getContent(): HTMLDivElement {\r\n        return this.content;\r\n    }\r\n\r\n   public getHeader(): string {\r\n        return this.label;\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\nimport Data from './Data';\r\n\r\nexport class PropertyBinder implements PropertyChangeSupport {\r\n    private propertyClass1: string;\r\n    private propertyClass2: string;\r\n    private data1: Data;\r\n    private data2: Data;\r\n    // works like a lock\r\n    private applyingChange: boolean = false;\r\n\r\n    constructor(data1: Data, data2: Data, propertyClass1: string, propertyClass2: string) {\r\n        this.data1 = data1;\r\n        this.data2 = data2;\r\n        this.propertyClass1 = propertyClass1;\r\n        this.propertyClass2 = propertyClass2;\r\n    }\r\n    static bind(data1: Data, data2: Data, property1: string, property2: string) {\r\n        if (!data1 || !data2 || !property1) {\r\n            console.error('NullValue!!');\r\n            return null;\r\n        }\r\n        const propertyBinder = new PropertyBinder(data1, data2, property1, property2);\r\n        propertyBinder.bind();\r\n        return propertyBinder;\r\n    }\r\n\r\n    propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        if (!this.applyingChange) {\r\n            this.applyingChange = true;\r\n            if (entity === this.data1) {\r\n                // fire to data2\r\n                this.data2.setValue(this.propertyClass2, newValue);\r\n            } else if (entity === this.data2) {\r\n                // fire to data1\r\n                this.data1.setValue(this.propertyClass1, newValue);\r\n            }\r\n            this.applyingChange = false;\r\n        }\r\n    }\r\n\r\n    protected bind() {\r\n        // public addListener(control: Control, property?: string)\r\n        // todo: set value immediately\r\n        this.data1.setValue(this.propertyClass1, this.data2.getValue(this.propertyClass2));\r\n\r\n        this.data1.addListener(this, this.propertyClass1);\r\n        this.data2.addListener(this, this.propertyClass2);\r\n    }\r\n\r\n    protected unbind() {\r\n        // public addListener(control: Control, property?: string)\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n    }\r\n}\r\n","// ################################## RGBColor ####################################################\r\nexport class RGBColor {\r\n    public  ok: boolean;\r\n    public r: number;\r\n    public g: number;\r\n    public b: number;\r\n\r\n    constructor(value: string) {\r\n        this.ok = false;\r\n        if (value === 'none') {\r\n            return;\r\n        }\r\n        let computedColor, div = document.createElement('div');\r\n        div.style.backgroundColor = value;\r\n        document.body.appendChild(div);\r\n        computedColor = window.getComputedStyle(div).backgroundColor;\r\n        // cleanup temporary div.\r\n        document.body.removeChild(div);\r\n        this.convert(computedColor);\r\n    }\r\n    public convert(value: any) {\r\n        let values, regex = /rgb *\\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\\)/;\r\n        values = regex.exec(value);\r\n        this.r = parseInt(values[1], 10);\r\n        this.g = parseInt(values[2], 10);\r\n        this.b = parseInt(values[3], 10);\r\n        this.ok = true;\r\n    }\r\n\r\n    public toRGB(): string {return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; }\r\n    public toHex(): string {\r\n        return '#' + (this.r + 0x10000).toString(16).substring(3).toUpperCase() + (this.g + 0x10000).toString(16).substring(3).toUpperCase() + (this.b + 0x10000).toString(16).substring(3).toUpperCase();\r\n    }\r\n}\r\n","/*\r\n NetworkParser\r\n Copyright (c) 2011 - 2014, Stefan Lindel\r\n All rights reserved.\r\n\r\n Licensed under the EUPL, Version 1.1 or (as soon they\r\n will be approved by the European Commission) subsequent\r\n versions of the EUPL (the \"Licence\");\r\n You may not use this work except in compliance with the Licence.\r\n You may obtain a copy of the Licence at:\r\n\r\n http://ec.europa.eu/idabc/eupl5\r\n\r\n Unless required by applicable law or agreed to in\r\n writing, software distributed under the Licence is\r\n distributed on an \"AS IS\" basis,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\r\n express or implied.\r\n See the Licence for the specific language governing\r\n permissions and limitations under the Licence.\r\n*/\r\nimport {RGBColor} from './RGBColor';\r\nimport {JSEPS} from \"./JSEPS\";\r\n\r\nconst epsSvgAttr = {\r\n    // allowed attributes. all others are removed from the preview.\r\n    g: ['stroke', 'fill', 'stroke-width'],\r\n    line: ['x1', 'y1', 'x2', 'y2', 'stroke', 'stroke-width'],\r\n    rect: ['x', 'y', 'width', 'height', 'stroke', 'fill', 'stroke-width'],\r\n    ellipse: ['cx', 'cy', 'rx', 'ry', 'stroke', 'fill', 'stroke-width'],\r\n    circle: ['cx', 'cy', 'r', 'stroke', 'fill', 'stroke-width'],\r\n    text: ['x', 'y', 'font-size', 'font-family', 'text-anchor', 'font-weight', 'font-style', 'fill'],\r\n    path: ['']\r\n};\r\nexport class SVGConverter {\r\n    private k: number;\r\n    private remove: boolean;\r\n    private target: any;\r\n\r\n    constructor(element: any, target: any, options: any) {\r\n        this.k = 1.0;\r\n        let hasScale = typeof (options.scale), hasRemoveInvalid = typeof (options.removeInvalid);\r\n        this.k = (options && hasScale !== 'undefined' ? options.scale : 1.0);\r\n        this.remove = (options && hasRemoveInvalid !== 'undefined' ? options.removeInvalid : false);\r\n        this.target = target;\r\n        this.parse(element);\r\n    }\r\n\r\n    public parse(element: any) {\r\n        let el, i, n, colorMode, hasFillColor, fillRGB, fillColor, strokeColor, strokeRGB, fontType, pdfFontSize, x, y,\r\n            box, xOffset;\r\n        if (!element) {\r\n            return;\r\n        }\r\n        if (typeof element === 'string') {\r\n            el = document.createElement('div');\r\n            el.innerHTML = element;\r\n            element = el.childNodes[0];\r\n        }\r\n        for (i = 0; i < element.children.length; i += 1) {\r\n            n = element.children[i];\r\n            colorMode = null;\r\n            hasFillColor = false;\r\n            if ('g,line,rect,ellipse,circle,text'.indexOf(n.tagName) >= 0) {\r\n                fillColor = n.getAttribute('fill');\r\n                if (fillColor) {\r\n                    fillRGB = new RGBColor(fillColor);\r\n                    if (fillRGB.ok) {\r\n                        hasFillColor = true;\r\n                        colorMode = 'F';\r\n                    }\r\n                }\r\n            }\r\n            if ('g,line,rect,ellipse,circle'.indexOf(n.tagName) >= 0) {\r\n                if (hasFillColor) {\r\n                    this.target.setFillColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                }\r\n                strokeColor = n.getAttribute('stroke');\r\n                if (n.hasAttribute('stroke-width')) {\r\n                    this.target.setLineWidth(this.attr(n, 'stroke-width'));\r\n                }\r\n                if (strokeColor) {\r\n                    strokeRGB = new RGBColor(strokeColor);\r\n                    if (strokeRGB.ok) {\r\n                        this.target.setDrawColor(strokeRGB.r, strokeRGB.g, strokeRGB.b);\r\n                        if (colorMode === 'F') {\r\n                            colorMode = 'FD';\r\n                        } else if (!hasFillColor) {\r\n                            colorMode = 'S';\r\n                        }\r\n                    } else {\r\n                        colorMode = null;\r\n                    }\r\n                }\r\n            }\r\n            // console.log(\"write \"+n.tagName);\r\n            switch (n.tagName.toLowerCase()) {\r\n                case 'svg':\r\n                case 'a':\r\n                case 'g':\r\n                    this.parse(n);\r\n                    break;\r\n                case 'line':\r\n                    this.target.line(this.attr(n, 'x1'), this.attr(n, 'y1'), this.attr(n, 'x2'), this.attr(n, 'y2'));\r\n                    break;\r\n                case 'rect':\r\n                    this.target.rect(this.attr(n, 'x'), this.attr(n, 'y'), this.attr(n, 'width'), this.attr(n, 'height'), n.getAttribute('style'));\r\n                    break;\r\n                case 'ellipse':\r\n                    this.target.ellipse(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'rx'), this.attr(n, 'ry'), colorMode);\r\n                    break;\r\n                case 'circle':\r\n                    this.target.circle(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'r'), colorMode);\r\n                    break;\r\n                case 'text':\r\n                    if (n.hasAttribute('font-family')) {\r\n                        switch (n.getAttribute('font-family').toLowerCase()) {\r\n                            case 'serif':\r\n                                this.target.setFont('times');\r\n                                break;\r\n                            case 'monospace':\r\n                                this.target.setFont('courier');\r\n                                break;\r\n                            default:\r\n                                n.getAttribute('font-family', 'sans-serif');\r\n                                this.target.setFont('Helvetica');\r\n                        }\r\n                    }\r\n                    if (hasFillColor) {\r\n                        this.target.setTextColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                    }\r\n                    if (this.target instanceof JSEPS) {\r\n                        this.target.text(this.attr(n, 'x'), this.attr(n, 'y'), n.innerHTML);\r\n                        break;\r\n                    }\r\n                    fontType = '';\r\n                    if (n.hasAttribute('font-weight')) {\r\n                        if (n.getAttribute('font-weight') === 'bold') {\r\n                            fontType = 'bold';\r\n                        }\r\n                    }\r\n                    if (n.hasAttribute('font-style')) {\r\n                        if (n.getAttribute('font-style') === 'italic') {\r\n                            fontType += 'italic';\r\n                        }\r\n                    }\r\n                    this.target.setFontType(fontType);\r\n                    pdfFontSize = 16;\r\n                    if (n.hasAttribute('font-size')) {\r\n                        pdfFontSize = parseInt(n.getAttribute('font-size'), 10);\r\n                    }\r\n                    box = n.getBBox();\r\n                    // FIXME: use more accurate positioning!!\r\n                    x = this.attr(n, 'x');\r\n                    y = this.attr(n, 'y');\r\n                    xOffset = 0;\r\n                    if (n.hasAttribute('text-anchor')) {\r\n                        switch (n.getAttribute('text-anchor')) {\r\n                            case 'end':\r\n                                xOffset = box.width;\r\n                                break;\r\n                            case 'middle':\r\n                                xOffset = box.width / 2;\r\n                                break;\r\n                            case 'start':\r\n                                break;\r\n                            case 'default':\r\n                                n.getAttribute('text-anchor', 'start');\r\n                                break;\r\n                        }\r\n                        x = x - (xOffset * this.k);\r\n                    }\r\n                    this.target.setFontSize(pdfFontSize).text(x, y, n.innerHTML);\r\n                    break;\r\n                default:\r\n                    if (this.remove) {\r\n                        console.log('cant translate to target:', n);\r\n                        element.removeChild(n);\r\n                        i -= 1;\r\n                    }\r\n            }\r\n        }\r\n    }\r\n\r\n    public attr(node: any, name: string) {\r\n        return this.k * parseInt(node.getAttribute(name), 10);\r\n    }\r\n}\r\n","import {Control} from './Control';\r\n\r\nexport class ScrumBoard extends Control {\r\n    public static cards = [0, 0.5, 1, 2, 3, 5, 8, 13, 20, 40, 100, '?', 'Coffee'];\r\n    private $selected: HTMLDivElement;\r\n    private $board: HTMLDivElement;\r\n\r\n    constructor() {\r\n        super();\r\n        this.redraw();\r\n    }\r\n\r\n    public redraw(): void {\r\n        if (this.$board) {\r\n            while (this.$board.children.length > 0 ) {\r\n                this.$board.removeChild(this.$board.children[0]);\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('div');\r\n            this.$selected = document.createElement('div');\r\n            this.$board = document.createElement('div');\r\n            this.$view.appendChild(this.$board);\r\n            this.$view.appendChild(this.$selected);\r\n        }\r\n        this.$view.className = 'ScrumBoard';\r\n        for ( let i = 0; i < ScrumBoard.cards.length; i++) {\r\n            let card = document.createElement('div');\r\n            card.className = 'ScrumCard';\r\n            card.innerHTML = <string>ScrumBoard.cards[i];\r\n            card['pokervalue'] = <string>ScrumBoard.cards[i];\r\n            card.onclick = e => {\r\n                this.onClick(<HTMLDivElement>e.target);\r\n            };\r\n            this.$board.appendChild(card);\r\n        }\r\n    }\r\n\r\n    public getSVG() {\r\n        this.redraw();\r\n        return this.$view;\r\n    }\r\n\r\n    public onClick(target: HTMLDivElement): void {\r\n        console.log(target['pokervalue']);\r\n\r\n        while (this.$selected.children.length > 0 ) {\r\n            this.$selected.removeChild(this.$selected.children[0]);\r\n        }\r\n        let card = document.createElement('div');\r\n        card.className = 'ScrumCard';\r\n        card['pokervalue'] = target['pokervalue'];\r\n        card.onclick = e => {\r\n            this.onShow(<HTMLDivElement>e.target);\r\n        };\r\n        this.$selected.appendChild(card);\r\n        this.$board['style']['display'] = 'none';\r\n    }\r\n\r\n    public onShow(target: HTMLDivElement): void {\r\n        target.innerHTML = target['pokervalue'];\r\n    }\r\n}\r\n","import {Graph} from './main';\r\nimport {SymbolLibary} from './elements/nodes/Symbol';\r\nimport {EventBus} from './EventBus';\r\n\r\nexport class Toolbar {\r\n\r\n    private graph: Graph;\r\n    private mainDiv: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public show(): void {\r\n        if (this.mainDiv) {\r\n            return;\r\n        }\r\n\r\n        this.mainDiv = document.createElement('div');\r\n        this.mainDiv.className = 'toolbar';\r\n\r\n        let h1Logo = document.createElement('h1');\r\n        h1Logo.className = 'logo';\r\n        h1Logo.textContent = 'DiagramJS';\r\n\r\n        let node = {type: 'Hamburger', property: 'HTML', width: 24, height: 24, id: 'GenerateProp'};\r\n        let hamburger = SymbolLibary.draw( node);\r\n        EventBus.registerEvent(hamburger, 'click', node);\r\n        this.mainDiv.appendChild(hamburger);\r\n\r\n        this.mainDiv.appendChild(h1Logo);\r\n        document.body.appendChild(this.mainDiv);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 06.03.2017.\r\n */\r\nimport Data from './Data';\r\n\r\n// export default class Data {\r\n//    public values = {};\r\n//    id: string;\r\n//    $listener: Control[] = [];\r\n//    property: string;\r\nexport namespace UML {\r\n    export class Clazz extends Data {\r\n        public static NAME: string = 'name';\r\n        public static ATTRIBUTES: string = 'attributes';\r\n        public static METHODS: string = 'methods';\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Clazz';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n\r\n        public getAttributes() {\r\n            return this.prop[Clazz.ATTRIBUTES];\r\n        }\r\n\r\n        public addToAttributes(newValue: string) {\r\n            this.addTo(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n\r\n        public removeFromAttributes(newValue: string) {\r\n            this.removeFrom(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n    }\r\n\r\n    export class Attribute extends Data {\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Attribute';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n    }\r\n\r\n    export class Methods extends Data {\r\n\r\n    }\r\n}\r\n\r\nwindow['UML'] = UML;\r\n","import {Control} from './Control';\r\n\r\nexport class VirtualKeyBoard extends Control {\r\n    constructor(data: any) {\r\n        super();\r\n        if (!data) {\r\n            data = this.getDefault();\r\n        }\r\n        let board = document.createElement('div');\r\n        this.$viewData = data;\r\n\r\n        for (let type in data) {\r\n            if (type === 'normal') {\r\n                for (let line in data[type]) {\r\n                    let lineBoard = document.createElement('div');\r\n                    lineBoard.className = 'vkLine';\r\n                    for (let key in data[type][line]) {\r\n                        let btn: HTMLButtonElement = document.createElement('button');\r\n                        let keyTag = data[type][line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                        btn.ontouchend = () => {this.action(btn); };\r\n                        btn.onclick = () => {this.action(btn); };\r\n                        lineBoard.appendChild(btn);\r\n                    }\r\n                    board.appendChild(lineBoard);\r\n                }\r\n            }\r\n        }\r\n        this.$view = board;\r\n    }\r\n\r\n    public action(btn: HTMLButtonElement) {\r\n        if (btn['key'] === '{Shift}') {\r\n            if ( btn.className === 'vkbuttonAction') {\r\n                let keys = this.$viewData['normal'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                    }\r\n                }\r\n            } else if ( btn.className === 'vkbutton') {\r\n                let keys = this.$viewData['shift'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbuttonAction');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        alert(btn);\r\n    }\r\n\r\n    public getDefault(): any {\r\n        let format = {\r\n            normal: [\r\n                ['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '?', '´', '{Bksp}'],\r\n                ['{Tab}', 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+'],\r\n                ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '#', '{enter}'],\r\n                ['{Shift}', '<', 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n// '{left}', '{up}', '{down}','{right}', '{Cancel}']\r\n            ],\r\n            shift: [\r\n                ['°', '!', '\"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '`', '{Bksp}'],\r\n                ['{Tab}', 'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', 'O', 'P', 'Ü', '*'],\r\n                ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', '\\'', '{enter}'],\r\n                ['{Shift}', '>', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n            ]\r\n        };\r\n        return format;\r\n    }\r\n\r\n    public getBoard() {\r\n        return this.$view;\r\n    }\r\n\r\n    private setButtonValue(keyTag: string, btn: HTMLButtonElement, shiftClass: string) {\r\n        btn.className = 'vkbutton';\r\n        btn['key'] = keyTag;\r\n        btn['type'] = 'normal';\r\n        if (keyTag.substring(0, 1) === '{') {\r\n            if (keyTag === '{Bksp}') {\r\n                btn.innerHTML = 'Bksp';\r\n            } else if (keyTag === '{Tab}') {\r\n                btn.innerHTML = '&#8677; Tab';\r\n            } else if (keyTag === '{enter}') {\r\n                btn.innerHTML = 'enter';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Shift}') {\r\n                btn.innerHTML = 'Shift';\r\n                btn.className = shiftClass;\r\n            } else if (keyTag === '{Accept}') {\r\n                btn.innerHTML = 'Accept';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Alt}') {\r\n                btn.innerHTML = 'Alt';\r\n            } else if (keyTag === '{Space}') {\r\n                btn.innerHTML = '&nbsp;';\r\n                btn.className = 'vkbuttonSpace';\r\n            } else if (keyTag === '{left}') {\r\n                btn.innerHTML = '&#8592';\r\n            } else if (keyTag === '{right}') {\r\n                btn.innerHTML = '&#8594;';\r\n            } else if (keyTag === '{up}') {\r\n                btn.innerHTML = '&#8593;';\r\n            } else if (keyTag === '{down}') {\r\n                btn.innerHTML = '&#8595;';\r\n            } else if (keyTag === '{Cancel}') {\r\n                btn.innerHTML = 'Cancel';\r\n                btn.className = 'vkbuttonAction';\r\n            }\r\n        } else {\r\n            btn.innerHTML = keyTag;\r\n        }\r\n    }\r\n}\r\n","import {Adapter} from '../Adapter';\r\n\r\nexport class JavaAdapter extends Adapter {\r\n    constructor() {\r\n        super();\r\n        this.id = 'JavaAdapter';\r\n    }\r\n    update(evt: Object): boolean {\r\n        if (this.isActive()) {\r\n            window['JavaBridge'].executeChange(evt);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public isActive(): boolean {\r\n        return window['JavaBridge'];\r\n    }\r\n}\r\n","export * from './JavaAdapter';\r\n","import { Util } from '../util';\r\nimport { Control } from '../Control';\r\n\r\nexport interface Size {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\ninterface GraphElement {\r\n    getSize(): Point;\r\n\r\n    getPos(): Point;\r\n\r\n    getCenter(): Point;\r\n\r\n    getSVG(): Element;\r\n\r\n    getCanvas(): Element;\r\n\r\n    getEvents(): string[];\r\n\r\n    withPos(x: number, y: number): GraphElement;\r\n\r\n    load(data: any): any;\r\n\r\n    getToolBarIcon(): Element;\r\n\r\n    loadProperties(properties: any): void;\r\n}\r\n\r\nexport abstract class DiagramElement extends Control implements GraphElement {\r\n\r\n    protected $isDraggable: boolean = true;\r\n    protected $labelHeight = 25;\r\n    protected $labelFontSize = 14;\r\n    private $pos: Point = new Point();\r\n    private $size: Point = new Point();\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getPos(): Point {\r\n        return this.$pos;\r\n    }\r\n\r\n    public getSize(): Point {\r\n        return this.$size;\r\n    }\r\n\r\n    public getCenter(): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        return new Point(pos.x + size.x / 2, pos.y + size.y / 2);\r\n    }\r\n\r\n    public getCenterPosition(p: string): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let offset = this['$' + p];\r\n        let center = this.getCenter();\r\n        if (p === Point.DOWN) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y + size.y, Point.DOWN);\r\n        }\r\n        if (p === Point.UP) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y, Point.UP);\r\n        }\r\n        if (p === Point.LEFT) {\r\n            return new Point(pos.x, Math.min(center.y + offset, pos.y + size.y), Point.LEFT);\r\n        }\r\n        if (p === Point.RIGHT) {\r\n            return new Point(pos.x + size.x, Math.min(center.y + offset, pos.y + size.y), Point.RIGHT);\r\n        }\r\n        return new Point();\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getCanvas(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return null;\r\n    }\r\n\r\n    public getAlreadyDisplayingSVG(): Element {\r\n        return document.getElementById(this.id) || this.getSVG();\r\n    }\r\n\r\n    public load(data: any) {\r\n        // Do Nothing\r\n    }\r\n\r\n    public withPos(x: number, y: number): GraphElement {\r\n        if (x && y) {\r\n            this.$pos = new Point(x, y);\r\n        } else {\r\n            if (typeof (x) !== 'undefined' && x !== null) {\r\n                this.$pos.x = x;\r\n            }\r\n            if (typeof (y) !== 'undefined' && y !== null) {\r\n                this.$pos.y = y;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public withSize(width: number, height: number): DiagramElement {\r\n        if (width && height) {\r\n            this.$size = new Point(width, height);\r\n        } else {\r\n            if (typeof (width) !== 'undefined' && width !== null) {\r\n                this.$size.x = width;\r\n            }\r\n            if (typeof (height) !== 'undefined' && height !== null) {\r\n                this.$size.y = height;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        // FIXME if (this.status === 'close') {\r\n        // if (!this.$owner.isClosed()) {\r\n        //        return this;\r\n        //    }\r\n        // }\r\n        return super.getShowed();\r\n    }\r\n\r\n    public loadProperties(properties: any) {\r\n        // DO Nothing\r\n    }\r\n\r\n    protected createShape(attrs: any): Element {\r\n        return Util.createShape(attrs);\r\n    }\r\n}\r\n\r\nexport class Point {\r\n    public static UP: string = 'UP';\r\n    public static LEFT: string = 'LEFT';\r\n    public static RIGHT: string = 'RIGHT';\r\n    public static DOWN: string = 'DOWN';\r\n    x: number = 0;\r\n    y: number = 0;\r\n\r\n    //    pos:string = '';\r\n\r\n    constructor(x?: number, y?: number, pos?: string) {\r\n        this.x = Math.ceil(x || 0);\r\n        this.y = Math.ceil(y || 0);\r\n        if (pos) {\r\n            this['pos'] = pos;\r\n        }\r\n    }\r\n\r\n    public add(pos: Point) {\r\n        this.x += pos.x;\r\n        this.y += pos.y;\r\n        return this;\r\n    }\r\n\r\n    public getPosition(): string {\r\n        if (!this['pos']) {\r\n            return '';\r\n        }\r\n        return this['pos'];\r\n    }\r\n\r\n    public addNum(x: number, y: number) {\r\n        this.x += x;\r\n        this.y += y;\r\n        return this;\r\n    }\r\n\r\n    public sum(pos: Point) {\r\n        let sum = new Point(this.x, this.y);\r\n        sum.add(pos);\r\n        return sum;\r\n    }\r\n\r\n    public center(posA: Point, posB: Point) {\r\n        let count = 0;\r\n        if (posA) {\r\n            this.x += posA.x;\r\n            this.y += posA.y;\r\n            count++;\r\n        }\r\n        if (posB) {\r\n            this.x += posB.x;\r\n            this.y += posB.y;\r\n            count++;\r\n        }\r\n        if (count > 0) {\r\n            this.x = (this.x / count);\r\n            this.y = (this.y / count);\r\n        }\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        return this.x < 1 && this.y < 1;\r\n    }\r\n\r\n    public size(posA: Point, posB: Point) {\r\n        let x1 = 0, x2 = 0, y1 = 0, y2 = 0;\r\n        if (posA) {\r\n            x1 = posA.x;\r\n            y1 = posA.y;\r\n        }\r\n        if (posB) {\r\n            x2 = posB.x;\r\n            y2 = posB.y;\r\n        }\r\n        if (x1 > x2) {\r\n            this.x = x1 - x2;\r\n        } else {\r\n            this.x = x2 - x1;\r\n        }\r\n        if (y1 > y2) {\r\n            this.y = y1 - y2;\r\n        } else {\r\n            this.y = y2 - y1;\r\n        }\r\n    }\r\n}\r\n\r\n// \t\t\t\t######################################################### Line #########################################################\r\nexport class Line extends DiagramElement {\r\n    public static FORMAT = { SOLID: 'SOLID', DOTTED: 'DOTTED', PATH: 'PATH' };\r\n    public source: Point;\r\n    public target: Point;\r\n    public color: string;\r\n    public lineType: string;\r\n    private path: string;\r\n    private angle: Number;\r\n\r\n    constructor(lineType: string) {\r\n        super();\r\n        this.lineType = lineType;\r\n    }\r\n\r\n    public getTyp(): string {\r\n        return 'SVG';\r\n    }\r\n\r\n    public getPos() {\r\n        let pos = new Point();\r\n        pos.center(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public getSize() {\r\n        let pos = new Point();\r\n        pos.size(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public withColor(color: string): Line {\r\n        this.color = color;\r\n        return this;\r\n    }\r\n\r\n    public withSize(x: number, y: number): DiagramElement {\r\n        return this;\r\n    }\r\n\r\n    public withPath(path: Array<Point>, close: boolean, angle?: any): Line {\r\n        let i: number, d: string = 'M' + path[0].x + ' ' + path[0].y;\r\n        this.lineType = Line.FORMAT.PATH; // It is a Path not a Line\r\n        for (i = 1; i < path.length; i += 1) {\r\n            d = d + 'L ' + path[i].x + ' ' + path[i].y;\r\n        }\r\n        if (close) {\r\n            d = d + ' Z';\r\n            this.target = path[0];\r\n        } else {\r\n            this.target = path[path.length - 1];\r\n        }\r\n        this.path = d;\r\n        if (angle instanceof Number) {\r\n            this.angle = angle;\r\n        } else if (angle) {\r\n            // var lineangle, start = path[0], end = path[path.length - 1];\r\n            // lineangle = Math.atan2(end.y - start.y, end.x - start.x);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): SVGGElement {\r\n        if (this.lineType === 'PATH') {\r\n            return <SVGGElement>Util.create({\r\n                tag: 'path',\r\n                'd': this.path,\r\n                'fill': this.color,\r\n                stroke: '#000',\r\n                'stroke-width': '1px'\r\n            });\r\n        }\r\n        let line: SVGGElement = <SVGGElement>Util.create({\r\n            tag: 'line',\r\n            'x1': this.source.x,\r\n            'y1': this.source.y,\r\n            'x2': this.target.x,\r\n            'y2': this.target.y,\r\n            'stroke': Util.getColor(this.color)\r\n        });\r\n        if (this.lineType && this.lineType.toLowerCase() === 'dotted') {\r\n            line.setAttribute('stroke-miterlimit', '4');\r\n            line.setAttribute('stroke-dasharray', '1,1');\r\n        }\r\n        return line;\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport Options from '../Options';\r\nimport {JavaAdapter} from '../adapters';\r\n\r\nexport class ClassEditor extends Graph {\r\n    private adapter: JavaAdapter;\r\n    constructor(json: any, options: Options) {\r\n        if (!options ) {\r\n            options = {};\r\n        }\r\n        options.canvas = options.canvas || 'canvas';\r\n        // options.origin = options.origin || new Point(150, 45);\r\n//            layout: \"DagreLayout\",\r\n        options.autoSave = options.autoSave || true;\r\n        if (!options.features) {\r\n            options.features = {\r\n                drag: true,\r\n                editor: true,\r\n                palette: true,\r\n                select: true,\r\n                zoom: true,\r\n                toolbar: true,\r\n                import: true,\r\n                properties: true,\r\n                addnode: true,\r\n                newedge: true\r\n            };\r\n        }\r\n        super(json, options);\r\n    }\r\n\r\n    public setBoardStyle(value: string) {\r\n        console.log(value);\r\n        this.importFile.setBoardStyle(value);\r\n    }\r\n\r\n    public registerListener(): void {\r\n        this.adapter = new JavaAdapter();\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return this.adapter;\r\n    }\r\n}\r\n","import * as edges from './edges';\r\nimport { Association } from './edges';\r\nimport * as nodes from './nodes';\r\nimport * as layouts from '../layouts';\r\nimport Layout from '../layouts/Layout';\r\nimport { GraphModel } from './Model';\r\nimport { Point, Size } from './BaseElements';\r\nimport { Util } from '../util';\r\nimport { Control } from '../Control';\r\nimport Data from '../Data';\r\nimport { EventBus } from '../EventBus';\r\nimport { AddNode, Drag, NewEdge, Select, Zoom } from '../handlers';\r\nimport Options from '../Options';\r\nimport { ImportFile } from '../handlers/ImportFile';\r\nimport { CSS } from '../CSS';\r\nimport { DiagramElement } from './index';\r\nimport { Toolbar } from '../Toolbar';\r\nimport {JSEPS} from '../JSEPS';\r\nimport {SVGConverter} from '../SVGConverter';\r\nimport Palette from '../Palette';\r\nimport {PanelGroup} from '../PropertiesPanel';\r\n\r\nexport class Graph extends Control {\r\n    // canvas: HTMLElement;\r\n    root: SVGElement;\r\n    $graphModel: GraphModel;\r\n    options: Options;\r\n    canvasSize: Size;\r\n    nodeFactory: Object;\r\n    edgeFactory: Object;\r\n    layoutFactory: Object;\r\n    protected importFile: ImportFile;\r\n    private currentlayout: Layout;\r\n    // private layerToolBar: SVGSVGElement;\r\n    // https://stackoverflow.com/questions/15181452/how-to-save-export-inline-svg-styled-with-css-from-browser-to-image-file\r\n    private containerElements = ['svg', 'g'];\r\n    private relevantStyles = {\r\n        'rect': ['fill', 'stroke', 'stroke-width'],\r\n        'path': ['fill', 'stroke', 'stroke-width', 'opacity'],\r\n        'circle': ['fill', 'stroke', 'stroke-width'],\r\n        'line': ['stroke', 'stroke-width'],\r\n        'text': ['fill', 'font-size', 'text-anchor', 'font-family'],\r\n        'polygon': ['stroke', 'fill']\r\n    };\r\n\r\n    constructor(json: any, options: Options) {\r\n        super();\r\n        json = json || {};\r\n        if (json['data']) {\r\n            options = json['options'];\r\n            json = json['data'];\r\n            this.id = json['id'];\r\n        }\r\n        this.options = options || {features: { drag: true}};\r\n        if (json['init']) {\r\n            return;\r\n        }\r\n        if (!this.options.origin) {\r\n            this.options.origin = new Point(150, 45);\r\n        }\r\n        if (!this.options.style) {\r\n            // Style can be classic or modern\r\n            this.options.style = 'classic';\r\n        }\r\n        if (this.options.autoSave) {\r\n            Util.isAutoSave = options.autoSave;\r\n        }\r\n\r\n        this.initFactories();\r\n        this.initCanvas();\r\n        this.initFeatures(this.options.features);\r\n\r\n        // load previous session, if user wants it\r\n        // otherwise load the json data\r\n        if (!this.lookupInLocalStorage()) {\r\n            this.load(json);\r\n        }\r\n\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    public lookupInLocalStorage(): boolean {\r\n        if (!this.options.autoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (!Util.isLocalStorageSupported()) {\r\n            return false;\r\n        }\r\n        let diagram = Util.getDiagramFromLocalStorage();\r\n        if (diagram && diagram.length > 0) {\r\n            if (confirm('Restore previous session?')) {\r\n                let jsonData: JSON = JSON.parse(diagram);\r\n                this.load(jsonData);\r\n                this.layout();\r\n                return true;\r\n            } else {\r\n                Util.saveToLocalStorage( null);\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public fitSizeOnNodes(): void {\r\n        let maxWidth: number = 0;\r\n        let maxHeight: number = 0;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            let nodePos = node.getPos();\r\n            let nodeSize = node.getSize();\r\n            let nodeWidestPosX = nodePos.x + nodeSize.x;\r\n            let nodeWidestPosY = nodePos.y + nodeSize.y;\r\n\r\n            if (nodeWidestPosX > maxWidth) {\r\n                maxWidth = nodeWidestPosX;\r\n            }\r\n\r\n            if (nodeWidestPosY > maxHeight) {\r\n                maxHeight = nodeWidestPosY;\r\n            }\r\n        }\r\n\r\n        this.root.setAttributeNS(null, 'width', '' + (maxWidth + 100));\r\n        this.root.setAttributeNS(null, 'height', '' + (maxHeight + 50));\r\n    }\r\n\r\n    public saveAs(typ: string) {\r\n        typ = typ.toLowerCase();\r\n\r\n        // shrink size of graph to minimum. only to show up nodes\r\n        const currentSize = this.getRootSize();\r\n        this.fitSizeOnNodes();\r\n\r\n        if (typ === 'svg') {\r\n            this.exportSvg();\r\n        } else if (typ === 'png') {\r\n            this.exportPng();\r\n        } else if (typ === 'html') {\r\n            this.exportHtml();\r\n\r\n        } else if (typ === 'pdf') {\r\n            this.exportPdf();\r\n            // } else if (typ === 'eps') {\r\n            // this.ExportEPS();\r\n        }\r\n        else if (typ === 'json') {\r\n            this.exportJson();\r\n        }\r\n\r\n        // set the size back to default\r\n        this.root.setAttributeNS(null, 'width', '' + currentSize.width);\r\n        this.root.setAttributeNS(null, 'height', '' + currentSize.height);\r\n    }\r\n\r\n    /**\r\n     * generates a blob file and makes it available for download.\r\n     * @param type type of file\r\n     * @param data raw data\r\n     * @param name name of download file\r\n     */\r\n    public save(type: string, data: any, name: string, context: string) {\r\n        if (window['java']) {\r\n            window['java'].export(type, data, name, context);\r\n            return;\r\n        }\r\n        let a = document.createElement('a');\r\n        a.href = window.URL.createObjectURL(new Blob([data], { type: context }));\r\n        a.download = name;\r\n        document.body.appendChild(a);\r\n        a.click();\r\n        document.body.removeChild(a);\r\n    }\r\n\r\n    /** Exports the diagram as svg. */\r\n    public exportSvg(): void {\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        this.save('svg', this.serializeXmlNode(wellFormatedSvgDom), 'class_diagram.svg', 'image/svg+xml');\r\n    }\r\n\r\n    /** Exports the diagram as html. */\r\n    public exportHtml(): void {\r\n        let htmlFacade = '<html><head><title>DiagramJS - Classdiagram</title></head><body>$content</body></html>';\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        let svgAsXml = this.serializeXmlNode(wellFormatedSvgDom);\r\n\r\n        let htmlResult = htmlFacade.replace('$content', svgAsXml);\r\n\r\n        this.save('html', htmlResult, 'class_diagram.htm', 'text/plain');\r\n    }\r\n\r\n    /** Exports the diagram as json. */\r\n    public exportJson(): void {\r\n        let type = 'text/plain';\r\n        let jsonObj = Util.toJson(this.$graphModel);\r\n        let data = JSON.stringify(jsonObj, null, '\\t');\r\n\r\n        this.save('json', data, 'class_diagram.json', type);\r\n    }\r\n\r\n    /** Exports the diagram as pdf. */\r\n    public exportPdf(): void {\r\n        if (!window['jsPDF']) {\r\n            console.log('jspdf n.a.');\r\n            return;\r\n        }\r\n        let type = 'image/svg+xml';\r\n        let converter, pdf = new window['jsPDF']('l', 'px', [this.$graphModel.getSize().x, this.$graphModel.getSize().y]);\r\n        converter = new SVGConverter(this.$view, pdf, {removeInvalid: false});\r\n        pdf.save('Download.pdf');\r\n/*        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let canvas, context, a, image = new Image();\r\n        let size = this.getRootSize();\r\n\r\n        // create the loaded img source into a canvas. to generate a picture. then place this picture in the pdf\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            let pdf = new window['jsPDF']();\r\n\r\n            pdf.addImage(canvas.toDataURL('image/jpeg'), 'jpeg', 15, 40, 180, 160);\r\n            pdf.save('class_diagram.pdf');\r\n\r\n        };\r\n\r\n        image.src = url;\r\n        */\r\n    }\r\n\r\n    public import(data: string): void {\r\n        let rootElement = this.$graphModel.$view;\r\n        while (rootElement.hasChildNodes()) {\r\n            rootElement.removeChild(rootElement.firstChild);\r\n        }\r\n\r\n        while (this.$view.hasChildNodes()) {\r\n            this.$view.removeChild(this.$view.firstChild);\r\n        }\r\n\r\n        this.clearModel();\r\n        let jsonData = JSON.parse(data);\r\n        this.load(jsonData);\r\n        this.layout();\r\n    }\r\n\r\n    public exportEPS(): void {\r\n          let converter, doc = new JSEPS({inverting: true});\r\n            converter = new SVGConverter(this.$view, doc, {removeInvalid: false});\r\n            this.save('eps', doc.getData(), 'diagram.eps', doc.getType());\r\n    }\r\n\r\n    /** Exports the diagram as png. */\r\n    public exportPng(): void {\r\n        let canvas, context, a, image = new Image();\r\n        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let typ = 'image/svg+xml';\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let size = this.getRootSize();\r\n\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            a = document.createElement('a');\r\n            a.download = 'class_diagram.png';\r\n            a.href = canvas.toDataURL('image/png');\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            document.body.removeChild(a);\r\n        };\r\n\r\n        image.src = url;\r\n\r\n    }\r\n\r\n    public getSvgWithStyleAttributes(): Node {\r\n        let oDOM = this.$graphModel.$view.cloneNode(true);\r\n        this.readElement(oDOM, this.$graphModel.$view);\r\n\r\n        return oDOM;\r\n    }\r\n\r\n    public serializeXmlNode(xmlNode: any) {\r\n        if (window['XMLSerializer'] !== undefined) {\r\n            return (new window['XMLSerializer']()).serializeToString(xmlNode);\r\n        }\r\n        if (xmlNode.xml !== undefined) {\r\n            return xmlNode.xml;\r\n        }\r\n        return xmlNode.outerHTML;\r\n    }\r\n\r\n    public getRootSize(): Size {\r\n        let width: number;\r\n        let height: number;\r\n        width = +this.root.getAttribute('width');\r\n        height = +this.root.getAttribute('height');\r\n\r\n        return { width: width, height: height };\r\n    }\r\n\r\n        // Graph.prototype.ExportEPS = function () {\r\n        //     var converter, doc = new svgConverter.jsEPS({inverting: true});\r\n        //     converter = new svgConverter(this.board, doc, {removeInvalid: false});\r\n        //     doc.save();\r\n        // };\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        this.$graphModel = new GraphModel();\r\n        this.$graphModel.init(this);\r\n        this.$graphModel.load(json);\r\n    }\r\n\r\n    public clearModel(): void {\r\n        this.$graphModel.removeAllElements();\r\n        this.clearSvgRoot();\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.layout();\r\n        return this;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        return;\r\n    }\r\n\r\n    public getNextFreePosition(): Point {\r\n\r\n        if (!this.$graphModel) {\r\n            return new Point(50, 50);\r\n        }\r\n\r\n        let point = new Point(0, 50);\r\n\r\n        let maxX = 0;\r\n        let minX = 9000;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            maxX = Math.max(maxX, node.getPos().x);\r\n            minX = Math.min(minX, node.getPos().x);\r\n        }\r\n\r\n        if (minX > 170) {\r\n            point.x = 10;\r\n        }\r\n        else {\r\n            point.x = maxX + 200;\r\n        }\r\n\r\n        return point;\r\n    }\r\n\r\n    public addElement(type: string, dontDraw?: boolean): boolean {\r\n        let success = this.$graphModel.addElement(type);\r\n        if (success === true) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return success;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues?: Object, layout?: boolean, dontDraw?: boolean): DiagramElement {\r\n        let element = this.$graphModel.addElementWithValues(type, optionalValues);\r\n        if (element && layout) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public layout(dontDraw?: boolean): Graph {\r\n        this.getLayout().layout(this, this.$graphModel);\r\n\r\n        if (dontDraw) {\r\n            return this;\r\n        }\r\n\r\n        this.draw();\r\n        return this;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTDRAGOVER, EventBus.ELEMENTDRAGLEAVE, EventBus.ELEMENTDROP];\r\n    }\r\n\r\n    public draw() {\r\n        this.clearSvgRoot();\r\n        let model = this.$graphModel;\r\n        let root = this.root;\r\n        let max: Point = new Point();\r\n        if (this.options) {\r\n            max.x = this.options.minWidth || 0;\r\n            max.y = this.options.minHeight || 0;\r\n        }\r\n\r\n        for (let node of model.nodes) {\r\n            let svg = node.getSVG();\r\n            EventBus.register(node, svg);\r\n            root.appendChild(svg);\r\n\r\n            let temp: number;\r\n            temp = node.getPos().x + node.getSize().x;\r\n            if (temp > max.x) {\r\n                max.x = temp;\r\n            }\r\n            temp = node.getPos().y + node.getSize().y;\r\n            if (temp > max.y) {\r\n                max.y = temp;\r\n            }\r\n\r\n        }\r\n        Util.setAttributeSize(this.root, max.x + 60, max.y + 40);\r\n\r\n        for (let edge of model.edges) {\r\n            let svg = edge.getSVG();\r\n            EventBus.register(edge, svg);\r\n            root.appendChild(svg);\r\n        }\r\n    }\r\n\r\n    public getNode(id: string) {\r\n        return this.$graphModel.getNodeById(id);\r\n    }\r\n\r\n    public drawElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let svg = element.getSVG();\r\n        this.root.appendChild(svg);\r\n\r\n        // actualize root width size, if neccessary\r\n        // get current width of root\r\n        let rootSize = this.getRootSize();\r\n        let newWidth = element.getPos().x + element.getSize().x + 40;\r\n        let newHeight = element.getPos().y + element.getSize().y;\r\n\r\n        if (rootSize.width < newWidth) {\r\n            this.root.setAttributeNS(null, 'width', '' + newWidth);\r\n        }\r\n\r\n        if (rootSize.height < newHeight) {\r\n            this.root.setAttributeNS(null, 'height', '' + newHeight);\r\n        }\r\n\r\n        // draw edge\r\n        if (element instanceof Association) {\r\n            let edge = <Association>element;\r\n            edge.redraw(edge.$sNode);\r\n            let srcSvg = element.$sNode.getAlreadyDisplayingSVG();\r\n            let targetSvg = element.$tNode.getAlreadyDisplayingSVG();\r\n\r\n            this.root.appendChild(srcSvg);\r\n            this.root.appendChild(targetSvg);\r\n        }\r\n\r\n        EventBus.register(element, svg);\r\n    }\r\n\r\n    public removeElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let alreadyDisplayingSvg = element.getAlreadyDisplayingSVG();\r\n        if (Util.isParentOfChild(this.root, alreadyDisplayingSvg)) {\r\n            this.root.removeChild(alreadyDisplayingSvg);\r\n        }\r\n    }\r\n\r\n    public generate(packageName: string, path?: string) {\r\n        this.$graphModel.package = packageName;\r\n        this.$graphModel.genPath = path;\r\n\r\n        let data, result = Util.toJson(this.$graphModel);\r\n        data = JSON.stringify(result, null, '\\t');\r\n        if (window['java'] && typeof window['java'].generate === 'function') {\r\n            window['java'].generate(data);\r\n        }\r\n    }\r\n// REFACTORING dd\r\n    private readElement(parent: any, origData: any): void {\r\n        let children = parent.childNodes;\r\n        let origChildDat = origData.childNodes;\r\n\r\n        for (let cd = 0; cd < children.length; cd++) {\r\n            let child = children[cd];\r\n\r\n            let tagName = child.tagName;\r\n            if (this.containerElements.indexOf(tagName) !== -1) {\r\n                this.readElement(child, origChildDat[cd]);\r\n            } else if (tagName in this.relevantStyles) {\r\n                let styleDef = window.getComputedStyle(origChildDat[cd]);\r\n\r\n                let styleString = '';\r\n                for (let st = 0; st < this.relevantStyles[tagName].length; st++) {\r\n                    styleString += this.relevantStyles[tagName][st] + ':' + styleDef.getPropertyValue(this.relevantStyles[tagName][st]) + '; ';\r\n                }\r\n\r\n                child.setAttribute('style', styleString);\r\n            }\r\n        }\r\n    }\r\n\r\n    private createPattern(): Element {\r\n        const defs = Util.createShape({ tag: 'defs' });\r\n        const pattern = Util.createShape({\r\n            tag: 'pattern',\r\n            id: 'raster',\r\n            patternUnits: 'userSpaceOnUse',\r\n            width: 40,\r\n            height: 40\r\n        });\r\n        const path = 'M0 4 L0 0 L4 0 M36 0 L40 0 L40 4 M40 36 L40 40 L36 40 M4 40 L0 40 L0 36';\r\n        const cross = Util.createShape({\r\n            tag: 'path',\r\n            d: path,\r\n            stroke: '#DDD',\r\n            'stroke-width': 1,\r\n            fill: 'none'\r\n        });\r\n\r\n        const rect = Util.createShape({\r\n            tag: 'rect',\r\n            x: 0,\r\n            y: 0,\r\n            width: 40,\r\n            height: 40,\r\n            fill: 'none'\r\n        });\r\n        pattern.appendChild(rect);\r\n        pattern.appendChild(cross);\r\n        defs.appendChild(pattern);\r\n        return defs;\r\n    }\r\n\r\n    private clearSvgRoot() {\r\n        const root = this.root;\r\n        this.$graphModel.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n        while (root.firstChild) {\r\n            root.removeChild(root.firstChild);\r\n        }\r\n\r\n        root.appendChild(this.createPattern());\r\n        let fillValue = 'none';\r\n        if (this.options.raster) {\r\n            fillValue = 'url(#raster)';\r\n        }\r\n        let background = Util.createShape({\r\n            tag: 'rect',\r\n            id: 'background',\r\n            width: 5000,\r\n            height: 5000,\r\n            x: 0,\r\n            y: 0,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: fillValue\r\n        });\r\n        root.appendChild(background);\r\n\r\n        // delete inline Edit, if exists\r\n        let inlineEdit = document.getElementById('inlineEdit');\r\n        if (inlineEdit && document.body.contains(inlineEdit)) {\r\n            document.body.removeChild(inlineEdit);\r\n        }\r\n    }\r\n\r\n    private getLayout(): Layout {\r\n        if (this.currentlayout) {\r\n            return this.currentlayout;\r\n        }\r\n\r\n        let layout = this.options.layout || '';\r\n        if (this.layoutFactory[layout]) {\r\n            this.currentlayout = new this.layoutFactory[layout]();\r\n        } else {\r\n            this.currentlayout = new layouts.DagreLayout();\r\n        }\r\n\r\n        return this.currentlayout;\r\n    }\r\n\r\n    private initFactories() {\r\n\r\n        let noder = nodes;\r\n        this.nodeFactory = {};\r\n        for (let id in noder) {\r\n            if (noder.hasOwnProperty(id) === true) {\r\n                this.nodeFactory[id] = noder[id];\r\n            }\r\n        }\r\n\r\n        let edger = edges;\r\n        this.edgeFactory = {};\r\n        for (let id in edger) {\r\n            if (edger.hasOwnProperty(id) === true) {\r\n                this.edgeFactory[id] = edger[id];\r\n            }\r\n        }\r\n\r\n        let layouter = layouts;\r\n        this.layoutFactory = {};\r\n        for (let id in layouter) {\r\n            if (layouter.hasOwnProperty(id) === true) {\r\n                this.layoutFactory[id] = layouter[id];\r\n            }\r\n        }\r\n    }\r\n\r\n    private initCanvas() {\r\n        if (this.options.canvas) {\r\n            this.$view = document.getElementById(this.options.canvas);\r\n        }\r\n        if (!this.$view) {\r\n            this.$view = document.createElement('div');\r\n            this.$view.setAttribute('class', 'diagram');\r\n            document.body.appendChild(this.$view);\r\n        }\r\n    }\r\n\r\n    private initFeatures(features: any) {\r\n\r\n        if (features) {\r\n            if (features.newedge) {\r\n                EventBus.subscribe(new NewEdge(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            this.importFile = new ImportFile(this);\r\n            if (features.import) {\r\n                EventBus.subscribe(this.importFile, 'dragover', 'dragleave', 'drop');\r\n            }\r\n            if (features.zoom) {\r\n                let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n                EventBus.subscribe(new Zoom(this), mousewheel);\r\n            }\r\n            if (features.drag) {\r\n                EventBus.subscribe(new Drag(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            if (features.select) {\r\n                EventBus.subscribe(new Select(this), 'click', 'drag');\r\n            }\r\n            if (features.palette) {\r\n                new Palette(this).show();\r\n            }\r\n            if (features.toolbar) {\r\n                new Toolbar(this).show();\r\n            }\r\n            if (features.properties) {\r\n                let propertyPanel = new PanelGroup(this);\r\n                // let dispatcher = new PropertiesDispatcher(this);\r\n                EventBus.subscribe(propertyPanel, 'dblclick', 'click', EventBus.RELOADPROPERTIES);\r\n                propertyPanel.show();\r\n            }\r\n            if (features.addnode) {\r\n                EventBus.subscribe(new AddNode(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n        }\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport {DiagramElement, Point} from './BaseElements';\r\nimport {Association} from './edges';\r\nimport {Node} from './nodes';\r\nimport {Control} from '../Control';\r\nimport {Util} from '../util';\r\nimport {EventBus} from '../EventBus';\r\n\r\nexport class GraphModel extends DiagramElement {\r\n    nodes: Node[] = [];\r\n    edges: Association[] = [];\r\n    package: string;\r\n    genPath: string;\r\n    $isLoading: boolean;\r\n\r\n    public load(data?: any) {\r\n\r\n        this.$isLoading = true;\r\n        data = data || {};\r\n        this.property = data.type || data.property || 'classdiagram';\r\n        this.id = 'RootElement';\r\n        if (data.nodes) {\r\n            for (let node of data.nodes) {\r\n                this.addNode(node);\r\n            }\r\n        }\r\n        if (data.edges) {\r\n            for (let edge of data.edges) {\r\n                this.addEdge(edge);\r\n            }\r\n        }\r\n\r\n        this.$isLoading = false;\r\n    }\r\n\r\n    public getNodeByPosition(x: number, y: number): Node {\r\n        for (let node of this.nodes) {\r\n            let posOfNode: Point = (<Node>node).getPos();\r\n            let sizeOfNode: Point = (<Node>node).getSize();\r\n\r\n            if ((posOfNode.x <= x && (posOfNode.x + sizeOfNode.x) >= x)\r\n                && (posOfNode.y <= y && (posOfNode.y + sizeOfNode.y) >= y)) {\r\n                return node;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.initCanvas();\r\n        return this;\r\n    }\r\n\r\n    public addElement(type: string): boolean {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n        if (element) {\r\n            Util.saveToLocalStorage(this);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues: Object): DiagramElement {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n\r\n        // position\r\n        if (optionalValues) {\r\n            if (optionalValues.hasOwnProperty('x') && optionalValues.hasOwnProperty('y')) {\r\n                let x = optionalValues['x'];\r\n                let y = optionalValues['y'];\r\n                element.withPos(x, y);\r\n            }\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return element;\r\n    }\r\n\r\n    public removeAllElements(): void {\r\n\r\n        let nodesLength = this.nodes.length;\r\n        for (let i = 0; i < nodesLength; i++) {\r\n            this.removeElement(this.nodes[0].id);\r\n        }\r\n\r\n        this.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n    }\r\n\r\n    public removeElement(id: string): boolean {\r\n\r\n        let element = this.getDiagramElementById(id);\r\n        if (!element) {\r\n            return false;\r\n        }\r\n\r\n        (<Graph>this.$owner).removeElement(element);\r\n\r\n        if (element instanceof Node) {\r\n\r\n            let idxOfNode = this.nodes.indexOf(element);\r\n            if (idxOfNode > -1) {\r\n                this.nodes.splice(idxOfNode, 1);\r\n            }\r\n\r\n            while (element.$edges.length > 0) {\r\n                this.removeElement(element.$edges[0].id);\r\n            }\r\n\r\n            element.$edges = [];\r\n        }\r\n        else if (element instanceof Association) {\r\n\r\n            let idxOfEdge = this.edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                this.edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from source\r\n            idxOfEdge = element.$sNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$sNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from target\r\n            idxOfEdge = element.$tNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$tNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return true;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        const size = 10;\r\n        const path = `M${-size} 0 L${+size} 0 M0 ${-size} L0 ${+size}`;\r\n\r\n        const attr = {\r\n            tag: 'path',\r\n            id: 'origin',\r\n            d: path,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: 'none'\r\n        };\r\n        let shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: 0 - size,\r\n            y: 0 - size / 1.5,\r\n            'text-anchor': 'end',\r\n            'font-family': 'Verdana',\r\n            'font-size': '9',\r\n            fill: '#999'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = '(0, 0)';\r\n\r\n        let group = this.createShape({tag: 'g'});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEUP, EventBus.ELEMENTMOUSELEAVE, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTMOUSEWHEEL, EventBus.ELEMENTCLICK, EventBus.ELEMENTDRAG];\r\n    }\r\n\r\n    public getNewId(prefix?: string): string {\r\n        let id = (prefix ? prefix.toLowerCase() + '-' : '') + Math.floor(Math.random() * 100000);\r\n        return id;\r\n    }\r\n\r\n    public getEdgeById(id: string): Association {\r\n        for (let edge of this.edges) {\r\n            if (edge.id === id) {\r\n                return edge;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    public getDiagramElementById(id: string): DiagramElement {\r\n\r\n        return this.getNodeById(id) || this.getEdgeById(id);\r\n    }\r\n\r\n    /**\r\n     * Add an edge with data in json file. Optional you can say, that the edge should have\r\n     * the points of source node and target node.\r\n     * @param edge information about edge in json\r\n     * @param withPosOfNodes optional. set points to line of source and target node\r\n     */\r\n    public addEdge(edge: any, withPosOfNodes?: boolean): Association {\r\n\r\n        // lookup in factoryedges and check if the edge type realy exists\r\n        if (edge && edge.type) {\r\n            const graph = (<Graph>this.$owner);\r\n            let typeExists = false;\r\n            for (let edgeType in graph.edgeFactory) {\r\n                if (edgeType === edge.type) {\r\n                    typeExists = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!typeExists) {\r\n                edge.type = 'Association';\r\n            }\r\n        }\r\n\r\n        let type = edge.type || 'Association';\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n\r\n        let newEdge = <Association>this.createElement(type, id, edge);\r\n        newEdge.type = type;\r\n\r\n        let source: Node;\r\n        let sourceAsString: string = edge.source.id || edge.source;\r\n        if (sourceAsString) {\r\n            source = this.getNodeById(sourceAsString);\r\n            if (!source) {\r\n                let nodeID = edge.source;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                source = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                source.init(this);\r\n            }\r\n        }\r\n\r\n        let target: Node;\r\n        let targetAsString: string = edge.target.id || edge.target;\r\n        if (targetAsString) {\r\n            target = this.getNodeById(targetAsString);\r\n            if (!target) {\r\n                let nodeID = edge.target;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                target = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                target.init(this);\r\n            }\r\n        }\r\n\r\n        newEdge.withItem(source, target);\r\n\r\n        if (withPosOfNodes) {\r\n            let srcX = source.getPos().x + (source.getSize().x / 2);\r\n            let srcY = source.getPos().y + (source.getSize().y / 2);\r\n\r\n            let targetX = target.getPos().x + (target.getSize().x / 2);\r\n            let targetY = target.getPos().y + (target.getSize().y / 2);\r\n\r\n            newEdge.addPoint(srcX, srcY);\r\n            newEdge.addPoint(targetX, targetY);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public createElement(type: string, id: string, data: Object): DiagramElement {\r\n        const graph = <Graph>this.$owner;\r\n        let element: DiagramElement;\r\n        if (graph.nodeFactory[type]) {\r\n            element = new graph.nodeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.nodes.push(<Node>element);\r\n        }\r\n        if (graph.edgeFactory[type]) {\r\n            element = new graph.edgeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.edges.push(<Association>element);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public getNodeById(id: string): Node {\r\n        for (let node of this.nodes) {\r\n            if (node.id === id) {\r\n                return node;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    private initCanvas() {\r\n        const graph = <Graph>this.$owner;\r\n        graph.canvasSize = {width: graph.$view.clientWidth, height: graph.$view.clientHeight};\r\n        graph.root = Util.createShape({\r\n            tag: 'svg',\r\n            id: 'root',\r\n            width: graph.canvasSize.width,\r\n            height: graph.canvasSize.height\r\n            // FIXME,viewBox: `${this.$graph.options.origin.x * -1} ${this.$graph.options.origin.y * -1} ${this.$graph.canvasSize.width} ${this.$graph.canvasSize.height}`\r\n        });\r\n        this.$view = graph.root;\r\n        graph.$view.appendChild(graph.root);\r\n\r\n        let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    private addNode(node: Node): Node {\r\n        let type = node['type'] || node.property || 'Node';\r\n        type = Util.toPascalCase(type);\r\n        let id = node['id'] || node['name'] || this.getNewId(type);\r\n\r\n        return <Node>this.createElement(type, id, node);\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction } from './index';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\n\r\nexport abstract class Aggregate extends Association {\r\n\r\n    protected $diamond: Element;\r\n\r\n    public getSVG(): Element {\r\n\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled diamond\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n        };\r\n\r\n        this.$diamond = this.createShape(attr);\r\n\r\n        group.appendChild(this.$diamond);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint: Point = this.$points[0];\r\n        let direction: Direction = Direction.Down;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if (this.$sNode.id === startNode.id || this.$points.length == 2) {\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$diamond.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint: Point, direction: Direction): string {\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                path = `M${startX} ${startY} L${startX + 6} ${startY + 10} L${startX} ${startY + 20} L${startX - 6} ${startY + 10} Z`;\r\n                startPoint.y = startPoint.y+20;\r\n                break;\r\n            case Direction.Right:\r\n                path = `M${startX} ${startY} L${startX - 10} ${startY + 6} L${startX - 20} ${startY} L${startX - 10} ${startY - 6} Z`;\r\n                startPoint.x = startPoint.x-20;\r\n                break;\r\n            case Direction.Left:\r\n                path = `M${startX} ${startY} L${startX + 10} ${startY - 6} L${startX + 20} ${startY} L${startX + 10} ${startY + 6} Z`;\r\n                startPoint.x = startPoint.x+20;\r\n                break;\r\n            case Direction.Down:\r\n                path = `M${startX} ${startY} L${startX - 6} ${startY - 10} L${startX} ${startY - 20} L${startX + 6} ${startY - 10} Z`;\r\n                startPoint.y = startPoint.y-20;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Aggregation extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'white');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { DiagramElement, Line, Point } from '../BaseElements';\r\nimport { Node } from '../nodes';\r\nimport { InfoText } from '../nodes/InfoText';\r\nimport { Util } from '../../util';\r\nimport { EventBus } from '../../EventBus';\r\nimport * as edges from '../edges';\r\nimport { Graph } from '../Graph';\r\n\r\nexport const enum Direction {\r\n    Up, Down, Left, Right\r\n}\r\n\r\nexport class Association extends DiagramElement {\r\n    public source: string;\r\n    public target: string;\r\n    public type: string;\r\n    public $sNode: Node;\r\n    public $tNode: Node;\r\n    public lineStyle: string;\r\n    public $points: Point[] = [];\r\n    public $pathSvg: Element;\r\n    public $pathWideSvg: Element;\r\n    public info: InfoText;\r\n    public sourceInfo: InfoText;\r\n    public targetInfo: InfoText;\r\n    $m: number;\r\n    $n: number;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super();\r\n\r\n        this.withData(data);\r\n    }\r\n\r\n    public withData(data: JSON | string | Object | any): Association {\r\n\r\n        if (!data) {\r\n            return this;\r\n        }\r\n        let srcInfo;\r\n        let trgInfo;\r\n\r\n        if (data.source && typeof data.source !== 'string') {\r\n            srcInfo = data.source;\r\n        }\r\n        else if (data.sourceInfo && typeof data.sourceInfo !== 'string') {\r\n            srcInfo = data.sourceInfo;\r\n        }\r\n\r\n        if (srcInfo) {\r\n            this.sourceInfo = new InfoText(srcInfo);\r\n            this.sourceInfo.$owner = this;\r\n        }\r\n\r\n        if (data.target && typeof data.target !== 'string') {\r\n            trgInfo = data.target;\r\n        }\r\n        else if (data.targetInfo && typeof data.targetInfo !== 'string') {\r\n            trgInfo = data.targetInfo;\r\n        }\r\n\r\n        if (trgInfo) {\r\n            this.targetInfo = new InfoText(trgInfo);\r\n            this.targetInfo.$owner = this;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    public updateSrcCardinality(cardinality: string): void {\r\n        this.sourceInfo = this.updateCardinality(this.$sNode, this.sourceInfo, cardinality);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetCardinality(cardinality: string): void {\r\n        this.targetInfo = this.updateCardinality(this.$tNode, this.targetInfo, cardinality);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateSrcProperty(property: string): void {\r\n        this.sourceInfo = this.updateProperty(this.$sNode, this.sourceInfo, property);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetProperty(property: string): void {\r\n        this.targetInfo = this.updateProperty(this.$tNode, this.targetInfo, property);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public withItem(source: Node, target: Node): Association {\r\n        source.$edges.push(this);\r\n        target.$edges.push(this);\r\n        this.$sNode = source;\r\n        this.$tNode = target;\r\n        this.source = source.id;\r\n        this.target = target.id;\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let group = Util.createShape({ tag: 'g', id: this.id, class: 'SVGEdge' });\r\n\r\n        let path: string = this.getPath();\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'none'\r\n        };\r\n        let pathLine = this.createShape(attr);\r\n\r\n        //attr['style'] = 'stroke-width:20;opacity:0;width:20;height:20';\r\n        let extendedPathLine = Util.createShape(attr);\r\n\r\n        group.appendChild(extendedPathLine);\r\n        group.appendChild(pathLine);\r\n\r\n        if (this.sourceInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.sourceInfo.getSVG());\r\n        }\r\n        if (this.targetInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.targetInfo.getSVG());\r\n        }\r\n\r\n        this.$pathWideSvg = extendedPathLine;\r\n        this.$pathSvg = pathLine;\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.EDITOR, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    public convertEdge(type: string, newId: string, redraw?: boolean): Association {\r\n        if (!edges[type]) {\r\n            return this;\r\n        }\r\n\r\n        let newEdge: Association = new edges[type]();\r\n        newEdge.withItem(this.$sNode, this.$tNode);\r\n        newEdge.id = newId;\r\n        newEdge.type = type;\r\n        newEdge.lineStyle = this.lineStyle;\r\n        newEdge.$owner = this.$owner;\r\n\r\n        if (this.sourceInfo) {\r\n            newEdge.sourceInfo = new InfoText({ property: this.sourceInfo.property, cardinality: this.sourceInfo.cardinality });\r\n            newEdge.sourceInfo.$owner = newEdge;\r\n        }\r\n\r\n        if (this.targetInfo) {\r\n            newEdge.targetInfo = new InfoText({ property: this.targetInfo.property, cardinality: this.targetInfo.cardinality });\r\n            newEdge.targetInfo.$owner = newEdge;\r\n        }\r\n\r\n        this.$points.forEach(point => {\r\n            newEdge.addPoint(point.x, point.y);\r\n        });\r\n\r\n        let graph = <Graph>this.getRoot();\r\n        if (!graph) {\r\n            return this;\r\n        }\r\n\r\n        // update model. insert the edge exact on the same index, like the old edge\r\n        let idx = graph.$graphModel.edges.indexOf(this);\r\n        graph.$graphModel.removeElement(this.id);\r\n        if (idx > -1) {\r\n            graph.$graphModel.edges.splice(idx, 0, newEdge);\r\n        }\r\n        else {\r\n            graph.$graphModel.edges.push(newEdge);\r\n        }\r\n\r\n        if (!redraw) {\r\n            return newEdge;\r\n        }\r\n\r\n        let svgRoot: Element;\r\n        if (graph) {\r\n            svgRoot = graph.root;\r\n        }\r\n        else {\r\n            svgRoot = document.getElementById('root');\r\n        }\r\n        let newEdgeSvg = newEdge.getSVG();\r\n\r\n        // update graph\r\n        graph.removeElement(this);\r\n        svgRoot.appendChild(newEdgeSvg);\r\n\r\n        // redraw the edge from both sides to get the correct display\r\n        // if the type is edge, so the path can be redraw.\r\n        // if not, so the inherited class redraw the path with his own logic\r\n\r\n        let dontDrawPath: boolean = (type !== 'Edge');\r\n        newEdge.redraw(newEdge.$sNode, dontDrawPath);\r\n        newEdge.redraw(newEdge.$tNode, dontDrawPath);\r\n\r\n        EventBus.register(newEdge, newEdgeSvg);\r\n\r\n        this.sourceInfo = undefined;\r\n        this.targetInfo = undefined;\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n        // redraw the first point\r\n        // check which point is the near to startnode\r\n        let endPoint: Point;\r\n        let recalcPoint: Point;\r\n        let endPointIdx: number;\r\n\r\n        if (this.$sNode.id === startNode.id) {\r\n            recalcPoint = this.$points[0];\r\n            endPointIdx = 1;\r\n        } else if (this.$tNode.id === startNode.id) {\r\n            recalcPoint = this.$points[this.$points.length - 1];\r\n            endPointIdx = this.$points.length - 2;\r\n        }\r\n\r\n        endPoint = this.$points[endPointIdx];\r\n\r\n        // calculate and set new position of point to redraw\r\n        this.calcIntersection(startNode, recalcPoint, endPoint);\r\n\r\n        // remove the 2nd point next to startnode, if the node was dragged upper the point\r\n        if (this.$points.length > 2 && this.$tNode.id === startNode.id && endPoint.y > (startNode.getPos().y + (startNode.getSize().y / 2))) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$tNode.id === startNode.id && this.$points.length === 2) {\r\n            this.calcIntersection(this.$sNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (this.$points.length > 2 && this.$sNode.id === startNode.id && (startNode.getPos().y + (startNode.getSize().y / 2) > endPoint.y)) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$sNode.id === startNode.id && this.$points.length === 2) {\r\n\r\n            this.calcIntersection(this.$tNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (!dontDrawPoints) {\r\n            this.redrawPointsAndInfo();\r\n        }\r\n    }\r\n\r\n    public getPath(): string {\r\n\r\n        if (this.$points.length === 0) {\r\n            return '';\r\n        }\r\n\r\n        let path: string = 'M';\r\n        for (let i = 0; i < this.$points.length; i++) {\r\n            let point: Point = this.$points[i];\r\n            if (i > 0) {\r\n                path += 'L';\r\n            }\r\n            path += Math.floor(point.x) + ' ' + Math.floor(point.y) + ' ';\r\n        }\r\n\r\n        return path;\r\n    }\r\n    public calcInfoPosNew(infoTxt: InfoText, node: Node): Point {\r\n\r\n        if (!infoTxt || !node) {\r\n            return null;\r\n        }\r\n\r\n        // 1. step: get direction\r\n        let startPoint: Point;\r\n        let nextToStartPoint: Point;\r\n        if (this.$sNode.id === node.id) {\r\n            startPoint = this.$points[0];\r\n            nextToStartPoint = this.$points[1];\r\n        }\r\n        else if (this.$tNode.id === node.id) {\r\n            startPoint = this.$points[this.$points.length - 1];\r\n            nextToStartPoint = this.$points[this.$points.length - 2];\r\n        }\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(node, startPoint);\r\n\r\n        let x: number;\r\n        let y: number;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                break;\r\n            case Direction.Right:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x - (infoTxt.getSize().x) - 5;\r\n                break;\r\n            case Direction.Left:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x + 5;\r\n                break;\r\n            case Direction.Down:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        // assign calculated position to infotext\r\n        return new Point(x, y);\r\n    }\r\n\r\n    public clearPoints(): any {\r\n        this.$points = [];\r\n        this.$points = [];\r\n    }\r\n\r\n    public addPoint(x: number, y: number): Point[] {\r\n        this.$points.push(new Point(x, y));\r\n\r\n        return this.$points;\r\n    }\r\n\r\n    protected redrawPointsAndInfo(): void {\r\n        // redraw the edge with the new position\r\n        let path: string = this.getPath();\r\n        this.$pathSvg.setAttributeNS(null, 'd', path);\r\n        this.$pathWideSvg.setAttributeNS(null, 'd', path);\r\n\r\n        this.redrawSourceInfo();\r\n        this.redrawTargetInfo();\r\n    }\r\n\r\n    protected redrawSourceInfo() {\r\n        if (this.sourceInfo) {\r\n            let newPosOfSrc = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.redrawFromEdge(newPosOfSrc);\r\n        }\r\n    }\r\n\r\n    protected redrawTargetInfo() {\r\n        if (this.targetInfo) {\r\n            let newPosOfTarget = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.redrawFromEdge(newPosOfTarget);\r\n        }\r\n    }\r\n\r\n    protected getDirectionOfPointToNode(node: Node, pointNearNode: Point): Direction {\r\n        /*\r\n            Example to calculate the direction of nearest point to Node\r\n\r\n            node\r\n         x1_ _ _ _\r\n          |       |\r\n          |       |. pointNearNode\r\n          |       |\r\n          |_ _ _ x2\r\n\r\n          the calculation would return Direction.Left\r\n        */\r\n\r\n        let x1: Point = node.getPos();\r\n        let x2: Point = new Point((x1.x + node.getSize().x), (x1.y + node.getSize().y));\r\n        let direction: Direction = Direction.Down;\r\n\r\n        if (x1.y >= pointNearNode.y) {\r\n            direction = Direction.Down;\r\n        }\r\n        if (x2.y <= pointNearNode.y) {\r\n            direction = Direction.Up;\r\n        }\r\n        if (x1.x >= pointNearNode.x) {\r\n            direction = Direction.Right;\r\n        }\r\n        if (x2.x <= pointNearNode.x) {\r\n            direction = Direction.Left;\r\n        }\r\n\r\n        return direction;\r\n    }\r\n\r\n    private updateCardinality(node: Node, infoText: InfoText, cardinality: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'cardinality': cardinality });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.cardinality = cardinality;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateCardinality(cardinality);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private updateProperty(node: Node, infoText: InfoText, property: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'property': property });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.property = property;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateProperty(property);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private calcIntersection(startNode: Node, recalcPoint: Point, endPoint: Point): Point {\r\n\r\n        // https://www.mathelounge.de/21534/schnittpunkt-einer-linie-mit-den-randern-eines-rechtecks\r\n        let h = startNode.getSize().y;\r\n        let w = startNode.getSize().x;\r\n\r\n        let x1: number = startNode.getPos().x + (w / 2);\r\n        let y1: number = startNode.getPos().y + (h / 2);\r\n\r\n        let x2: number = endPoint.x;\r\n        let y2: number = endPoint.y;\r\n\r\n        let newX: number = recalcPoint.x;\r\n        let newY: number = recalcPoint.y;\r\n\r\n        if (x2 > x1) {\r\n            newX = x1 + (w / 2);\r\n        }\r\n        else if (x2 < x1) {\r\n            newX = x1 - (w / 2);\r\n        }\r\n        else {\r\n            newX = x1;\r\n        }\r\n\r\n        if ((x2 - x1) !== 0) {\r\n            newY = ((y2 - y1) / (x2 - x1) * (newX - x1)) + y1;\r\n        }\r\n        else {\r\n            if (y1 > y2) {\r\n                newY = startNode.getPos().y;\r\n            }\r\n            else {\r\n                newY = startNode.getPos().y + h;\r\n            }\r\n        }\r\n\r\n        // if the statement is not true, so the intersection is at the horizontal line\r\n        if (!((y1 - (h / 2) <= newY) && newY <= y1 + (h / 2))) {\r\n\r\n            if (y2 > y1) {\r\n                newY = y1 + (h / 2);\r\n            }\r\n            else {\r\n                newY = y1 - (h / 2);\r\n            }\r\n\r\n            if ((x2 - x1) !== 0) {\r\n                let tmp = ((y2 - y1) / (x2 - x1));\r\n                newX = (newY + (tmp * x1) - y1) / tmp;\r\n            }\r\n            else {\r\n                newX = x1;\r\n            }\r\n        }\r\n\r\n        recalcPoint.x = Math.ceil(newX);\r\n        recalcPoint.y = Math.ceil(newY);\r\n\r\n        return null;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Composition extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'black');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { Association } from './Association';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\nimport { Direction } from '../index';\r\n\r\nexport class Generalisation extends Association {\r\n\r\n    public $TARGET_ELEMENT_HEIGHT : number = 12;\r\n    protected $targetElement: Element;\r\n\r\n    public getSVG(): Element {\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction : Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled arrow\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'white'\r\n          };\r\n\r\n        this.$targetElement = this.createShape(attr);\r\n\r\n        group.appendChild(this.$targetElement);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean) : void {\r\n\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint : Point = this.$points[0];\r\n        let direction : Direction = Direction.Up;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if(this.$sNode.id === startNode.id || this.$points.length == 2){\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$targetElement.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint : Point, direction : Direction) : string{\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch(direction){\r\n            case Direction.Up:\r\n            path = `M${startX} ${startY+3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y+12;\r\n            break;\r\n            case Direction.Right:\r\n            path = `M${startX-3} ${startY} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x-12;\r\n            break;\r\n            case Direction.Left:\r\n            path = `M${startX+3} ${startY} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x+12;\r\n            break;\r\n            case Direction.Down:\r\n            path = `M${startX} ${startY-3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y-12;\r\n            break;\r\n            default :\r\n            break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n\r\n}\r\n","import { Generalisation } from './Generalisation';\r\n\r\nexport class Implements extends Generalisation {\r\n\r\n    public getSVG(): Element {\r\n        let group = super.getSVG();\r\n\r\n        this.$pathSvg.setAttributeNS(null, 'stroke-dasharray', '3, 3');\r\n\r\n        return group;\r\n    }\r\n}\r\n","export * from './Association';\r\nexport * from './Aggregate';\r\nexport * from './Aggregation';\r\nexport * from './Composition';\r\nexport * from './Generalisation';\r\nexport * from './Implements';","export * from './edges';\r\nexport * from './nodes';\r\nexport * from './BaseElements';\r\nexport * from './Graph';\r\nexport * from './Model';\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Attribute extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 28.06.2017.\r\n */\r\nimport {Control} from \"../../Control\";\r\n\r\nexport class AutoComplete extends Control {\r\n    private $inputField:HTMLInputElement;\r\n    private $dataList:HTMLDataListElement;\r\n    private $selected:HTMLSelectElement;\r\n    private $items:HTMLDivElement;\r\n    private isMultiple:boolean;\r\n\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        let div:HTMLDivElement = document.createElement('div');\r\n        this.$view = div;\r\n        this.$inputField = document.createElement('input');\r\n        this.$dataList = document.createElement(\"datalist\");\r\n        this.$dataList.id = \"data_\"+this.id;\r\n        this.$inputField.setAttribute(\"list\", \"data_\"+this.id);\r\n        if(data[\"value\"]) {\r\n            let values = data[\"value\"];\r\n            this.isMultiple = data[\"multiple\"] != null;\r\n            let option:HTMLOptionElement;\r\n            if(this.isMultiple) {\r\n                this.$selected = document.createElement(\"select\");\r\n                this.$selected.className = \"hide\";\r\n                this.$selected.multiple = true;\r\n\r\n                this.$selected.id = this.id;\r\n                this.$items = document.createElement(\"div\");\r\n                this.$items.className = \"selectedList\";\r\n                div.appendChild(this.$items);\r\n                this.$inputField.className = \"selectedInput\";\r\n                div.appendChild(this.$selected);\r\n                this.$view[\"style\"].setProperty(\"float\", \"left\");\r\n                let that = this;\r\n                this.$inputField.oninput = function(){that.onChange();}\r\n            } else {\r\n                this.$inputField.id = this.id;\r\n            }\r\n            for (let attr in values) {\r\n                if (!values.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                option = document.createElement(\"option\");\r\n                option.value = values[attr];\r\n                this.$dataList.appendChild(option);\r\n                if(this.isMultiple) {\r\n                    option = document.createElement(\"option\");\r\n                    option.value = values[attr];\r\n                    option.innerHTML = values[attr];\r\n                    this.$selected.appendChild(option);\r\n                }\r\n        }\r\n\r\n            div.appendChild(this.$inputField);\r\n            div.appendChild(this.$dataList);\r\n        }\r\n\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n            if(this.isMultiple) {\r\n                div.appendChild(this.$selected);\r\n            }\r\n        }\r\n\r\n        parent.appendChild(this);\r\n    }\r\n\r\n    public onChange() : void {\r\n        let textValue:string = this.$inputField.value;\r\n        if(textValue.length<1) {\r\n            return;\r\n        }\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == textValue) {\r\n                if(item.selected == false) {\r\n                    item.selected = true;\r\n                    item.defaultSelected = true;\r\n                    let test = document.createElement(\"li\");\r\n                    let that = this;\r\n                    test.onclick = function() {that.onDelete(item.value, test);};\r\n                    test.className = \"selectedItem\";\r\n                    test.innerHTML = item.value;\r\n                    this.$items.appendChild(test);\r\n                    this.$inputField.value = \"\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n    public onDelete(value:string, selectedItem:HTMLLIElement) : void {\r\n        this.$items.removeChild(selectedItem);\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == value ) {\r\n                if(item.selected) {\r\n                    item.selected = false;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","import {Control} from '../../Control';\r\n\r\nexport class BR extends Control {\r\n    public load(json: JSON): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('br');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            this.$view.setAttribute(attr, data[attr]);\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\nexport class Button extends Control {\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        this.$view = document.createElement('button');\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\nimport { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\nimport { Size } from '../index';\r\nimport ClazzProperty from './ClazzProperty';\r\nimport {SymbolLibary} from './Symbol';\r\nimport {StereoType} from './StereoType';\r\nimport {GraphListener} from '../../handlers/GraphListener';\r\n\r\nexport class Class extends Node {\r\n    public attributes: Attribute[] = [];\r\n    public methods: Method[] = [];\r\n    public modifier: string;\r\n    public stereoType: string;\r\n\r\n    protected $attrHeight = 25;\r\n    protected $attrFontSize = 12;\r\n    protected $labelView: Element;\r\n\r\n    constructor(json: JSON | string | Object | any) {\r\n        super(json);\r\n        return this;\r\n    }\r\n\r\n    public load(json?: any) {\r\n        if (!json) {\r\n            json = {};\r\n        }\r\n        let y = this.$labelHeight;\r\n        let labelObj = json.name || json.id || ('New ' + this.property);\r\n\r\n        let width: number = 150;\r\n        width = Math.max(width, Util.sizeOf(labelObj).width + 60);\r\n\r\n        if (json['attributes']) {\r\n            for (let attr of json['attributes']) {\r\n\r\n                let attrObj = new Attribute(attr);\r\n                attrObj.$owner = this;\r\n                this.attributes.push(attrObj);\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(attrObj.toString()).width);\r\n                let listener = new GraphListener(attrObj);\r\n                attrObj.$data.addListener(listener);\r\n            }\r\n        }\r\n        if (json['stereotype']) {\r\n            this.stereoType = json['stereotype'];\r\n        }\r\n        if (json['methods']) {\r\n            for (let method of json['methods']) {\r\n\r\n                let methodObj = new Method(method);\r\n                methodObj.$owner = this;\r\n                this.methods.push(methodObj);\r\n\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(methodObj.toString()).width);\r\n            }\r\n            y += this.$attrHeight;\r\n        }\r\n        this.withSize(width, y);\r\n    }\r\n\r\n    public getAttributes(): Attribute[] {\r\n        return this.attributes;\r\n    }\r\n\r\n    public getMethods(): Method[] {\r\n        return this.methods;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        let icon = SymbolLibary.draw({type: 'Class', property: 'HTML', width: '50', height: '50', transform: 'translate(-26,-21)'});\r\n        return icon;\r\n        // let group = this.createShape(\r\n//    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n//    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos: Point = this.getPos();\r\n        const size: Point = this.getSize();\r\n\r\n        let group = this.createShape({ tag: 'g', id: this.id, class: 'SVGClazz', transform: 'translate(0 0)' });\r\n\r\n        if (this.stereoType) {\r\n            let type = new StereoType(this.stereoType, pos.x, pos.y);\r\n            group.appendChild(type.getSVG());\r\n        }\r\n\r\n        // Full Shape\r\n        let options = null;\r\n        let style;\r\n        let clazzName;\r\n        if (this.$owner['options']) {\r\n            let options = this.$owner['options'];\r\n            if (options) {\r\n                style = options.style;\r\n            }\r\n        }\r\n        // = = = Background = = =\r\n        if (style === 'modern') {\r\n            clazzName = 'ClazzHeader';\r\n        }\r\n        clazzName = 'ClazzHeader';\r\n        const nodeShape = this.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            height: size.y,\r\n            width: size.x,\r\n            rx: 5,\r\n            ry: 5,\r\n            fill: 'none',\r\n            stroke: 'black',\r\n            'stroke-width': 1\r\n        });\r\n        if (clazzName) {\r\n            nodeShape.setAttribute('className', clazzName);\r\n            let styleHeader = Util.getStyle('ClazzHeader');\r\n            // headerHeight = styleHeader.getNumber('height');\r\n        }\r\n\r\n        // = = = LABEL = = =\r\n        let label = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y + this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': this.$labelFontSize,\r\n            fill: 'black'\r\n        });\r\n        label.textContent = this.id;\r\n        this.$labelView = label;\r\n\r\n        group.appendChild(nodeShape);\r\n        group.appendChild(label);\r\n\r\n        // = = = ATTRIBUTES = = =\r\n        if (this.attributes.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorLabelAttr = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight,\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight,\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorLabelAttr);\r\n\r\n            let groupOfAttributes = this.createShape({ tag: 'g', id: (this.id + 'Attributes') });\r\n            groupOfAttributes.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzAttribute');\r\n            group.appendChild(groupOfAttributes);\r\n\r\n            let y = pos.y + this.$labelHeight + this.$attrHeight / 2;\r\n            for (let attr of this.attributes) {\r\n\r\n                let attrSvg = attr.getSVG();\r\n                attr.$owner = this;\r\n\r\n                attrSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                attrSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfAttributes.appendChild(attrSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        // = = = METHODS = = =\r\n        let height = this.attributes.length * this.$attrHeight;\r\n        let y = pos.y + this.$labelHeight + height + this.$attrHeight / 2;\r\n        if (this.methods.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorAttrMethods = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorAttrMethods);\r\n\r\n            let groupOfMethods = this.createShape({ tag: 'g', id: (this.id + 'Methods') });\r\n            groupOfMethods.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzMethod');\r\n            group.appendChild(groupOfMethods);\r\n\r\n            y += this.$attrHeight / 2;\r\n            for (let method of this.methods) {\r\n\r\n                let methodSvg = method.getSVG();\r\n                method.$owner = this;\r\n\r\n                methodSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                methodSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfMethods.appendChild(methodSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        this.$view = group;\r\n        return group;\r\n    }\r\n\r\n    public copy(): Class {\r\n        let copy: Class;\r\n        copy = <Class>super.copy();\r\n\r\n        // copy label\r\n        copy.id = this.id + 'Copy';\r\n\r\n        // copy attributes\r\n        this.attributes.forEach(attr => {\r\n            copy.attributes.push(new Attribute(attr.toString()));\r\n        });\r\n        // copy methods\r\n        this.methods.forEach(method => {\r\n            copy.methods.push(new Method(method.toString()));\r\n        });\r\n        copy.reCalcSize();\r\n\r\n        return copy;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTCLICK,\r\n                EventBus.ELEMENTDRAG, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES, EventBus.RELOADPROPERTIES];\r\n    }\r\n\r\n    public addProperty(value: string, type: string): any {\r\n        if (!this[type] || !value || value.length === 0) {\r\n            return;\r\n        }\r\n\r\n        let extractedValue;\r\n        if (type === 'attributes') {\r\n            extractedValue = new Attribute(value);\r\n        }\r\n        else if (type === 'methods') {\r\n            extractedValue = new Method(value);\r\n        }\r\n\r\n        for (let valueOfType of this[type]) {\r\n            if (valueOfType.toString() === extractedValue.toString()) {\r\n                alert(extractedValue.toString() + ' already exists.');\r\n                extractedValue = undefined;\r\n                return;\r\n            }\r\n        }\r\n\r\n        this[type].push(extractedValue);\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        return extractedValue;\r\n    }\r\n\r\n    public addAttribute(value: string): Attribute {\r\n        return this.addProperty(value, 'attributes');\r\n    }\r\n\r\n    public addAttributeObj(attr: Attribute): Attribute[] {\r\n        this.attributes.push(attr);\r\n        return this.getAttributes();\r\n    }\r\n\r\n    public addMethodObj(method: Method): Method[] {\r\n        this.methods.push(method);\r\n        return this.getMethods();\r\n    }\r\n\r\n    public addMethod(value: string): Method {\r\n        return this.addProperty(value, 'methods');\r\n    }\r\n\r\n    public removeAttribute(attr: Attribute): void {\r\n        let idx = this.attributes.indexOf(attr);\r\n        this.attributes.splice(idx, 1);\r\n    }\r\n\r\n    public removeMethod(method: Method): void {\r\n        let idx = this.methods.indexOf(method);\r\n        this.methods.splice(idx, 1);\r\n    }\r\n\r\n    public removeProperty(property: ClazzProperty): void {\r\n\r\n        if (property instanceof Attribute) {\r\n            this.removeAttribute(<Attribute>property);\r\n        }\r\n\r\n        if (property instanceof Method) {\r\n            this.removeMethod(<Method>property);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n        let hasSizeChanged: [boolean, Size] = this.hasSizeChanged();\r\n\r\n        if (drawOnlyIfSizeChanged) {\r\n            if (!hasSizeChanged[0]) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n\r\n        // redraw only this clazz\r\n        this.$owner.$view.removeChild(this.$view);\r\n        let newSvg = this.getSVG();\r\n        this.$owner.$view.appendChild(newSvg);\r\n        this.$view = newSvg;\r\n        EventBus.register(this, newSvg);\r\n\r\n        this.redrawEdges();\r\n    }\r\n\r\n    public hasSizeChanged(): [boolean, Size] {\r\n        let oldSize = { width: this.getSize().x, height: this.getSize().y };\r\n        let newSize = this.reCalcSize();\r\n\r\n        // size doenst changed, so nothing to redraw\r\n        if (oldSize.width === newSize.width && oldSize.height === newSize.height) {\r\n            return [false, newSize];\r\n        }\r\n\r\n        return [true, newSize];\r\n    }\r\n\r\n    public updateLabel(newLabel: string): void {\r\n        if (this.$labelView) {\r\n            this.$labelView.textContent = newLabel;\r\n        }\r\n\r\n        // update label in all edges\r\n        this.$edges.forEach(edge => {\r\n            if (this.id === edge.$sNode.id) {\r\n                edge.source = newLabel;\r\n            }\r\n            else if (this.id === edge.$tNode.id) {\r\n                edge.target = newLabel;\r\n            }\r\n        });\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        this.reDraw(true);\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.modifier = modifier;\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reCalcSize(): Size {\r\n        // label\r\n        let newWidth = 150;\r\n        newWidth = Math.max(newWidth, Util.sizeOf(this.id).width + 30);\r\n\r\n        // attributes\r\n        this.attributes.forEach(attrEl => {\r\n\r\n            let widthOfAttr;\r\n            if (attrEl.$view) {\r\n                widthOfAttr = attrEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfAttr = Util.sizeOf(attrEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfAttr + 15);\r\n        });\r\n\r\n        // methods\r\n        this.methods.forEach(methodEl => {\r\n            let widthOfMethod;\r\n            if (methodEl.$view) {\r\n                widthOfMethod = methodEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfMethod = Util.sizeOf(methodEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfMethod + 15);\r\n        });\r\n\r\n        // TODO: height has to be calculated by font-size\r\n        this.getSize().x = newWidth;\r\n        this.getSize().y = this.$labelHeight + ((this.attributes.length + this.methods.length) * this.$attrHeight)\r\n            + this.$attrHeight;\r\n\r\n        let newSize = { width: newWidth, height: this.getSize().y };\r\n\r\n        return newSize;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    private getModernStyle(): Element {\r\n        let width, height, id, size, z, item, rect, g, board, styleHeader, headerHeight, x, y;\r\n        board = this.getRoot()['board'];\r\n        styleHeader = Util.getStyle('ClazzHeader');\r\n        headerHeight = styleHeader.getNumber('height');\r\n        width = 0;\r\n        height = 10 + headerHeight;\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].getType().toLowerCase() === 'objectdiagram') {\r\n            id = this.id.charAt(0).toLowerCase() + this.id.slice(1);\r\n            item = 'Object';\r\n        } else {\r\n            id = this.id;\r\n            item = 'Class';\r\n            if (this['counter']) {\r\n                id += ' (' + this['counter'] + ')';\r\n            }\r\n        }\r\n        g = Util.create({tag: 'g', model: this});\r\n        size = Util.sizeOf(id, this);\r\n        width = Math.max(width, size.width);\r\n        if (this.attributes && this.attributes.length > 0) {\r\n            height = height + this.attributes.length * 25;\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.attributes[z], this).width);\r\n            }\r\n        } else {\r\n            height += 20;\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            height = height + this.methods.length * 25;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.methods[z], this).width);\r\n            }\r\n        }\r\n        width += 20;\r\n\r\n        let pos = this.getPos();\r\n        y = pos.y;\r\n        x = pos.x;\r\n\r\n        rect = {\r\n            tag: 'rect',\r\n            'width': width,\r\n            'height': height,\r\n            'x': x,\r\n            'y': y,\r\n            'class': item + ' draggable',\r\n            'fill': 'none'\r\n        };\r\n        g.appendChild(Util.create(rect));\r\n        g.appendChild(Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            'x': x,\r\n            'y': y,\r\n            height: headerHeight,\r\n            'width': width,\r\n            'class': 'ClazzHeader'\r\n        }));\r\n\r\n        item = Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'class': 'InfoText',\r\n            'text-anchor': 'right',\r\n            'x': x + width / 2 - size.width / 2,\r\n            'y': y + (headerHeight / 2) + (size.height / 2),\r\n            'width': size.width\r\n        });\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].type.toLowerCase() === 'objectdiagram') {\r\n            item.setAttribute('text-decoration', 'underline');\r\n        }\r\n        item.appendChild(document.createTextNode(id));\r\n\r\n        g.appendChild(item);\r\n        g.appendChild(Util.create({\r\n            tag: 'line',\r\n            x1: x,\r\n            y1: y + headerHeight,\r\n            x2: x + width,\r\n            y2: y + headerHeight,\r\n            stroke: '#000'\r\n        }));\r\n        y += headerHeight + 20;\r\n\r\n        if (this.attributes) {\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': (x + 10),\r\n                    'y': y,\r\n                    value: this.attributes[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n            if (this.attributes.length > 0) {\r\n                y -= 10;\r\n            }\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            g.appendChild(Util.create({tag: 'line', x1: x, y1: y, x2: x + width, y2: y, stroke: '#000'}));\r\n            y += 20;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': x + 10,\r\n                    'y': y,\r\n                    value: this.methods[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n        }\r\n        return g;\r\n    }\r\n}\r\n","import {Util} from '../../util';\r\nimport {DiagramElement} from '../BaseElements';\r\nimport Data from '../../Data';\r\n\r\nexport default class ClazzProperty extends DiagramElement {\r\n\r\n    // Public (+)\r\n    // Private (-)\r\n    // Protected (#)\r\n    // Package (~)\r\n\r\n    public $data = new Data();\r\n//    public modifier: string = '+';\r\n//    public name: string;\r\n//    public type: string;\r\n//    public value: string;\r\n\r\n    constructor(data: any | JSON) {\r\n        super();\r\n        this.$data.setValue('modifier', '+');\r\n        this.$data.setValue('name', null);\r\n        this.$data.setValue('type', null);\r\n        this.$data.setValue('value', null);\r\n        this.extractData(data);\r\n    }\r\n\r\n    public update(data: any | JSON): void {\r\n        this.extractData(data);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.$data.setValue('modifier', modifier);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateType(type: string): void {\r\n        this.$data.setValue('type', type);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateValue(value: string): void {\r\n        this.$data.setValue('value', value);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateName(name: string): void {\r\n        this.$data.setValue('name', name);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public getName(): string {\r\n        return this.$data.getValue('name');\r\n    }\r\n\r\n    public getModifier(): string {\r\n        return this.$data.getValue('modifier');\r\n    }\r\n\r\n    public getType(): string {\r\n        return this.$data.getValue('type');\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let attrText = {\r\n            tag: 'text',\r\n            'text-anchor': 'start',\r\n            'alignment-baseline': 'middle',\r\n        };\r\n\r\n        let attrSvg = Util.createShape(attrText);\r\n        attrSvg.textContent = this.toString();\r\n\r\n        this.$view = attrSvg;\r\n\r\n        return attrSvg;\r\n    }\r\n\r\n    public toString(): string {\r\n        let value = this.$data.getValue('value');\r\n        let result = this.$data.getValue('modifier') + ' ';\r\n        result += this.$data.getValue('name') + ' : ';\r\n        result += this.$data.getValue('type');\r\n        if (value && value.length > 0) {\r\n            result += ' = ' + this.$data.getValue('value');\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.$data.setValue('type', data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.$data.setValue('name', data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.$data.setValue('modifier', data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n\r\n            // e.g. name : string or name:string\r\n            let dataSplitted = data.split(':');\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                let name;\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.$data.setValue('modifier', firstChar);\r\n                    name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                }\r\n                else {\r\n                    name = modifierAndNameSplitted;\r\n                }\r\n                // delete whitespaces in name\r\n                name = name.replace(/ /g, '_');\r\n\r\n                this.$data.setValue('name', name);\r\n                let type = dataSplitted[1].trim() || 'String';\r\n\r\n                // if the type was entered with a small begin letter\r\n                if (type.toLowerCase() === 'string') {\r\n                    type = 'String';\r\n                }\r\n                // delete whitespaces in type\r\n                type = type.replace(/ /g, '_');\r\n                this.$data.setValue('type',  type);\r\n            } else {\r\n                dataSplitted = data.split('=');\r\n                if (dataSplitted && dataSplitted.length === 2) {\r\n                    // modifer (and or) name\r\n                    let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                    // first char is +, - or #\r\n                    let firstChar = modifierAndNameSplitted[0];\r\n                    let name;\r\n                    if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                        this.$data.setValue('modifier', firstChar);\r\n                        name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                    }\r\n                    else {\r\n                        name = modifierAndNameSplitted;\r\n                    }\r\n                    // delete whitespaces in name\r\n                    name = name.replace(/ /g, '_');\r\n\r\n                    this.$data.setValue('name', name);\r\n                    let value = dataSplitted[1].trim() || '\"\"';\r\n                    this.$data.setValue('value', value);\r\n                    this.$data.setValue('type', typeof value);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected updateTextOfView() {\r\n        if (this.$view) {\r\n            this.$view.textContent = this.toString();\r\n        }\r\n        if (this.$owner) {\r\n            Util.saveToLocalStorage(this.$owner.$owner);\r\n        }\r\n    }\r\n}\r\n","import {Node} from \"./Node\";\r\n/**\r\n * Created by Stefan on 29.03.2017.\r\n */\r\n\r\nexport class Dice extends Node {\r\n    private value: number;\r\n    private max: number = 6;\r\n    private $animation: SVGElement;\r\n    private $zoom: number = 0.6;\r\n    private $border: number = 0.2;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super(data);\r\n        this.withSize(100, 100);\r\n    }\r\n\r\n    public setNumber(number: number) {\r\n        this.value = number;\r\n        this.refresh();\r\n    }\r\n\r\n    public refresh() {\r\n        if (this.$view) {\r\n            this.reset();\r\n            let group = this.createPointValue();\r\n            if (group) {\r\n                this.$view.appendChild(group);\r\n            }\r\n        }\r\n    }\r\n\r\n    public reset() {\r\n        if (this.$view) {\r\n            while (this.$view.children.length > 1) {\r\n                if(this.$view.children.item(this.$view.children.length - 1).tagName!== \"animateTransform\") {\r\n                    console.log(this.$view.children.item(this.$view.children.length - 1));\r\n                    this.$view.removeChild(this.$view.children.item(this.$view.children.length - 1));\r\n                }else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let dice: SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x + size.x * this.$border,\r\n            y: pos.y + size.y * this.$border,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y * this.$zoom,\r\n            width: size.x * this.$zoom,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        dice.appendChild(this.createShape(attr));\r\n\r\n        let group = this.createPointValue();\r\n        if (group) {\r\n            dice.appendChild(group);\r\n        }\r\n\r\n        this.$view = dice;\r\n        return dice;\r\n    }\r\n\r\n    public animationTimeout(newValues: number[]) {\r\n        if(newValues.length>0) {\r\n            let newValue = newValues.shift();\r\n            this.setNumber(newValue);\r\n            let that=this;\r\n            setTimeout(function() {that.animationTimeout(newValues)}, 100);\r\n        }\r\n    }\r\n\r\n    public roll() {\r\n        this.startAnimation();\r\n        let values:number[]=[];\r\n        let i:number;\r\n        for(i=1;i<this.max;i++) {\r\n            values.push(i);\r\n        }\r\n        for(i=this.max;i>0;i--) {\r\n            values.push(i);\r\n        }\r\n        let that=this;\r\n        values.push( Math.floor(Math.random() * this.max)+1 );\r\n        setTimeout(function() {that.animationTimeout(values)}, 100);\r\n    }\r\n    public startAnimation() {\r\n        if(this.$animation) {\r\n            return;\r\n        }\r\n        let center = this.getPos().x+this.getSize().x /2;\r\n        const attr = {\r\n            tag: 'animateTransform',\r\n            attributeType: \"xml\",\r\n            attributeName:\"transform\",\r\n            type:\"rotate\",\r\n            dur: \"1s\",\r\n            repeatCount:\"1\",\r\n            from:\"0 \"+center+\" \"+center,\r\n            to:\"360 \"+center+\" \"+center\r\n        };\r\n        this.$animation = <SVGElement>this.createShape(attr);\r\n        this.$view.appendChild(this.$animation);\r\n    }\r\n\r\n    public stopAnimation() {\r\n        if(this.$animation) {\r\n            this.$view.removeChild(this.$animation);\r\n            this.$animation = null;\r\n        }\r\n    }\r\n\r\n    public createPointValue() :SVGElement {\r\n        if (this.value == 1) {\r\n           return this.getCircle(2, 2);\r\n        } else if (this.value == 2) {\r\n            return this.getCircle(1, 1, 3, 3);\r\n        } else if (this.value == 3) {\r\n            return this.getCircle(1, 1, 2, 2, 3, 3);\r\n        } else if (this.value == 4) {\r\n            return this.getCircle(1, 1, 1, 3, 3, 1, 3, 3);\r\n        } else if (this.value == 5) {\r\n            return this.getCircle(1, 1, 1, 3, 2, 2, 3, 1, 3, 3);\r\n        } else if (this.value == 6) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 7) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 2, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 8) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 9) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private getCircle(...values:number[]) : SVGElement {\r\n        if (values.length % 2 > 0) {\r\n            return null;\r\n        }\r\n        let size = this.getSize();\r\n        let pos = this.getPos();\r\n        //FIXME let group:SVGElement = <SVGElement>this.createShape({tag: 'g', transform: 'translate(0 0)', height: size.y, width: size.x});\r\n        let group:SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n\r\n\r\n        for (let i: number = 0; i < values.length; i += 2) {\r\n            group.appendChild(this.createCircle(values[i], values[i + 1]));\r\n        }\r\n        return group;\r\n    }\r\n    private createCircle(x:number, y:number) : SVGElement {\r\n        let size = this.getSize();\r\n        let radius = size.x / 10*this.$zoom;\r\n        let border = size.y*this.$border;\r\n        let zoom = size.y*this.$zoom;\r\n        const attr = {\r\n            tag: 'circle',\r\n            r : radius,\r\n            cx: (size.x*this.$zoom * x) / 4 + border,\r\n            cy: (size.y*this.$zoom * y) / 4 + border,\r\n            stroke:\"black\",\r\n            \"stroke-width\":\"3\",\r\n            fill:\"red\",\r\n            style: 'fill:black;stroke:black;stroke-width:2'\r\n        };\r\n        return <SVGElement>this.createShape(attr);\r\n    }\r\n}","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\n\r\nexport class Div extends Control {\r\n    private className: string;\r\n\r\n    public load(data:JSON|any): any {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = <string>data;\r\n        } else {\r\n            id = data.id;\r\n            this.className = data.class;\r\n            this.property = data.property;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let div: HTMLElement = document.getElementById(id);\r\n\r\n        if (!this.property) {\r\n            // if(inputField){\r\n            // TODO disuss how to decide, which property we should listen on...\r\n            // this.property = id;\r\n            this.property = div.getAttribute('Property');\r\n            // }\r\n        }\r\n\r\n        if (div instanceof HTMLDivElement) {\r\n            this.$view = div;\r\n        } else {\r\n            if (!div) {\r\n                this.$view = document.createElement('div');\r\n                this.$view.setAttribute('id', this.id);\r\n                this.$view.setAttribute('property', this.property);\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists+\r\n        if (data.hasOwnProperty('property')) {\r\n            this.setProperty(data['property']);\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        this.$model = entity;\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.className || entity.hasProperty(this.className)) {\r\n                if (entity.id === this.property.split('.')[0]) {\r\n                    entity.addListener(this, this.className);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        this.$view.innerHTML = <string>newValue;\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Form extends Control {\r\n    // private applyingChange: boolean = false;\r\n    private children: Object = {};\r\n    // private property: string = \"\";\r\n\r\n    /**\r\n     * Data should look like the following json:\r\n     *\r\n     * <pre>{\r\n     *      id: \"t1\",\r\n     *      control: \"form\",\r\n     *      elements: [\r\n     *          {id: \"inputField1\", property: \"talk\"},\r\n     *          {id: \"inputField2\", property: \"room\"}\r\n     *      ]\r\n     * }</pre>\r\n     * @param data\r\n     */\r\n    public load(data: any) {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let form: HTMLElement = document.getElementById(id);\r\n\r\n        if (form instanceof HTMLFormElement) {\r\n            this.$view = form;\r\n            if (this.$view.hasAttribute('property')) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            if (!form) {\r\n                this.$view = document.createElement('form');\r\n                this.$view.setAttribute('id', this.id);\r\n\r\n                if (data.hasOwnProperty('property')) {\r\n                    this.property = data['property'];\r\n                }\r\n\r\n                // add all the attributes to the form element\r\n                for (let attr in data) {\r\n                    if (data.hasOwnProperty(attr) === false) {\r\n                        continue;\r\n                    }\r\n                    if (attr === 'elements') {\r\n                        continue;\r\n                    }\r\n                    this.$view.setAttribute(attr, data[attr]);\r\n                }\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists\r\n        let objId = this.property;\r\n        let hasItem = this.$owner.hasItem(objId);\r\n        if (hasItem) {\r\n            let item = this.$owner.getItem(objId);\r\n            item.addListener(this);\r\n            this.$model = item;\r\n        }\r\n\r\n        // now create all the sub input controls\r\n        for (let field of data.elements) {\r\n            // this.createField(field);\r\n            if (field.hasOwnProperty('property')) {\r\n                let property = field['property'];\r\n                property = this.property + '.' + property;\r\n                field['property'] = property;\r\n            }\r\n            if (!field.hasOwnProperty('class')) {\r\n                field['class'] = 'input';\r\n            }\r\n\r\n            // let the Bridge load the subControl\r\n            let control: Control = this.$owner.load(field, this);\r\n\r\n            // add subControl to children\r\n            this.children[control.getId()] = control;\r\n        }\r\n\r\n    }\r\n\r\n    public setProperty(id: string): void {\r\n        this.property = id;\r\n        let keys: string[] = Object.keys(this.children);\r\n        for (let k = 0; k < keys.length; k++) {\r\n            let key = keys[k];\r\n            let childControl = this.children[key];\r\n            // only set Property, if there is a Property defined before\r\n            if (childControl.property) {\r\n                childControl.setProperty(this.property + '.' + childControl.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object,  oldValue?: Object): boolean {\r\n        if (this.$owner != null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    /**\r\n     * Here we create the form elements and put all the attributes to them in order for the Control only having to load\r\n     * the data were appending here. Alternative would be loading with the bridge and afterwards setting\r\n     * the owner to the form instead of the body..\r\n     * @param field\r\n     */\r\n    /*private createField(field: Object) {\r\n     let control = 'input';\r\n     if (field.hasOwnProperty('class')) {\r\n     control = field['class'];\r\n     }\r\n     let input = document.createElement(control);\r\n     input.setAttribute('class', control);\r\n     let id: string;\r\n     if (!field.hasOwnProperty('id')) {\r\n     // TODO: not the best solution for generating unique id's for forms...\r\n     id = this.$owner.getId();\r\n     field['id'] = id;\r\n     }\r\n     if (field.hasOwnProperty('property')) {\r\n     let property = field['property'];\r\n     property = this.id + '.' + property;\r\n     input.setAttribute('property', property);\r\n     }\r\n     for (let attr in field) {\r\n     if (attr === 'property' || attr === 'class' || !field.hasOwnProperty(attr)) {\r\n     continue;\r\n     }\r\n     input.setAttribute(attr, field[attr]);\r\n     }\r\n\r\n     this.$viewElement.appendChild(input);\r\n\r\n     let newcontrol: Control = this.$owner.load(field['id']);\r\n     this.children[newcontrol.getId()] = newcontrol;\r\n     }*/\r\n}\r\n","/**\r\n * Created by Stefan on 01.03.2017.\r\n */\r\nimport {Control} from '../../Control';\r\n\r\nexport class HTML extends Control {\r\n    constructor(data: JSON|Object|any) {\r\n        super();\r\n\r\n        let id: string;\r\n        let tag: string;\r\n\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            data = {};\r\n        } else if (data) {\r\n            id = data.id;\r\n        }\r\n        if (id) {\r\n            this.id = id;\r\n            this.$view = document.getElementById(id);\r\n        }\r\n        if (!this.$view) {\r\n            if (data) {\r\n                tag = data['tag'] || 'div';\r\n            } else {\r\n                tag = 'div';\r\n            }\r\n            this.$view = document.createElement(tag);\r\n            let parent = document.getElementsByTagName('body')[0];\r\n            parent.appendChild(this.$view);\r\n        }\r\n        if (!parent) {\r\n            return;\r\n        }\r\n        this.writeAttribute(data, this.$view);\r\n    }\r\n\r\n    private writeAttribute(properties: Object, entity?: any) {\r\n        let lowKey;\r\n        if (!entity) {\r\n            lowKey = properties['tag'] || 'div';\r\n            entity = document.createElement(lowKey);\r\n        }\r\n        for (let key in properties) {\r\n            if (!properties.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            lowKey = key.toLowerCase();\r\n            if (properties[key] === null) {\r\n                entity.setAttribute(key, '');\r\n                continue;\r\n            }\r\n\r\n            if (lowKey === 'tag' || lowKey.charAt(0) === '$' || lowKey === '$graphModel' || lowKey === 'class') {\r\n                continue;\r\n            }\r\n            if (lowKey === 'children') {\r\n                if (Array.isArray(properties[key])) {\r\n                    for (let item in properties[key]) {\r\n                        if (properties[key].hasOwnProperty(item) === false) {\r\n                            continue;\r\n                        }\r\n                        let child = this.writeAttribute(item);\r\n                        if (child) {\r\n                            entity.appendChild(child);\r\n                        }\r\n                    }\r\n                } else {\r\n                    let child = this.writeAttribute(properties[key]);\r\n                    if (child) {\r\n                        entity.appendChild(child);\r\n                    }\r\n                }\r\n                continue;\r\n            }\r\n            entity[key] = properties[key];\r\n        }\r\n        return entity;\r\n    }\r\n}\r\n","import { Point } from '../BaseElements';\r\nimport { Util } from '../../util';\r\nimport { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\n\r\nexport class InfoText extends Node {\r\n\r\n    public cardinality: string = '';\r\n    private $heightOfOneTextItem: number;\r\n    private $cardinalitySvg: Element;\r\n    private $propertySvg: Element;\r\n    private $rectBackground: Element;\r\n\r\n    constructor(info: any) {\r\n        super(info);\r\n        if (typeof (info) === 'string') {\r\n            this.id = info;\r\n        } else {\r\n            if (info.property) {\r\n                this.property = info.property;\r\n            }\r\n            if (info.cardinality) {\r\n                this.cardinality = info.cardinality;\r\n            }\r\n        }\r\n        this.$isDraggable = true;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n    }\r\n\r\n    public updateCardinality(cardinality: string): void {\r\n        this.cardinality = cardinality;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (this.$rectBackground) {\r\n            this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n            this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n        }\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((cardinality.length === 0 && this.property.length > 0) || !this.$cardinalitySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$cardinalitySvg) {\r\n            this.$cardinalitySvg.textContent = cardinality;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.property.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    public updateProperty(property: string): void {\r\n        this.property = property;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((property.length === 0 && this.cardinality.length > 0) || !this.$propertySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$propertySvg) {\r\n            this.$propertySvg.textContent = property;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.cardinality.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos: Point = this.getPos();\r\n        let group = Util.create({ tag: 'g', class: 'SVGEdgeInfo', transform: 'translate(0, 0)' });\r\n\r\n        // append rect as background for text items\r\n        this.$rectBackground = Util.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y - this.$heightOfOneTextItem + 3,\r\n            width: this.getSize().x,\r\n            height: this.getSize().y,\r\n            fill: '#DDD',\r\n            'stroke-width': 0,\r\n            rx: '5',\r\n            ry: '5'\r\n        });\r\n        group.appendChild(this.$rectBackground);\r\n\r\n        let y = pos.y;\r\n        if (this.property) {\r\n            // property\r\n            this.$propertySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$propertySvg.textContent = this.property;\r\n            group.appendChild(this.$propertySvg);\r\n\r\n            y += this.$heightOfOneTextItem;\r\n        }\r\n\r\n        // cardinality\r\n        if (this.cardinality) {\r\n            this.$cardinalitySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$cardinalitySvg.textContent = this.cardinality;\r\n            group.appendChild(this.$cardinalitySvg);\r\n        }\r\n\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        let cardinalityAvailable = this.cardinality && this.cardinality.length > 0;\r\n        let propertyAvailable = this.property && this.property.length > 0;\r\n\r\n        return !propertyAvailable && !cardinalityAvailable;\r\n    }\r\n\r\n    public redrawFromEdge(newPos: Point): void {\r\n\r\n        if (!newPos) {\r\n            return;\r\n        }\r\n\r\n        let oldPos = this.getPos();\r\n\r\n        // get difference between new and the old position\r\n        let diffPos = new Point();\r\n        diffPos.x = newPos.x - oldPos.x;\r\n        diffPos.y = newPos.y - oldPos.y;\r\n\r\n        // get translate information\r\n        let translation = this.$view.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        let sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        // set new traslation values\r\n        let newTransX = (sx + diffPos.x);\r\n        let newTransY = (sy + diffPos.y);\r\n        this.$view.setAttributeNS(null, 'transform', 'translate(' + newTransX + ' ' + newTransY + ')');\r\n\r\n        // set new position of svg\r\n        this.getPos().x = newPos.x;\r\n        this.getPos().y = newPos.y;\r\n    }\r\n\r\n    public getText(): string {\r\n        let infoTxt: string = '';\r\n\r\n        if (this.property) {\r\n            infoTxt = this.property;\r\n        }\r\n        if (this.cardinality) {\r\n            if (infoTxt.length > 0) {\r\n                infoTxt += '\\n';\r\n            }\r\n            infoTxt += this.cardinality;\r\n        }\r\n\r\n        return infoTxt;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    private calcSize(): Point {\r\n        let text: string = this.getText();\r\n        let items: Array<string> = text.split('\\n');\r\n\r\n        let maxSize = new Point(0, 0);\r\n        if (text.length === 0) {\r\n            return maxSize;\r\n        }\r\n\r\n        for (let i = 0; i < items.length; i += 1) {\r\n            // calculate size\r\n            let sizeOfText: ClientRect = Util.sizeOf(items[i]);\r\n            maxSize.x = Math.max(maxSize.x, sizeOfText.width);\r\n            maxSize.y += sizeOfText.height;\r\n\r\n            this.$heightOfOneTextItem = sizeOfText.height;\r\n        }\r\n\r\n        return maxSize;\r\n    }\r\n    private resetAllSvgElements() {\r\n        this.$cardinalitySvg = undefined;\r\n        this.$view = undefined;\r\n        this.$propertySvg = undefined;\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\nimport {PropertyBinder} from '../../PropertyBinder';\r\n\r\nexport class Input extends Control {\r\n    private type: string;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data = super.initViewDataProperties(oldData);\r\n        if ('checkbox' === this.type || 'radio' === this.type) {\r\n            data.addFrom('checked', oldData);\r\n        }\r\n        data.addFrom('value', oldData);\r\n        data.addFrom('type', oldData);\r\n        return data;\r\n    }\r\n\r\n    public load(data: any) {\r\n        let id: string;\r\n        let inputField: HTMLElement;\r\n        let useData: boolean;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            useData = true;\r\n        } else {\r\n            id = data.id;\r\n            if (data.type) {\r\n                this.setType(data['type']);\r\n            } else {\r\n                this.setType('text');\r\n            }\r\n            if (data.hasOwnProperty('property')) {\r\n                this.setProperty(data['property']);\r\n            }\r\n            useData = false;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n\r\n        inputField = document.getElementById(id);\r\n\r\n        if (useData) {\r\n            if (inputField) {\r\n                // TODO disuss how to decide, which property we should listen on...\r\n                // this.property = id;\r\n                if (inputField.hasAttribute('Property')) {\r\n                    this.setProperty(inputField.getAttribute('Property'));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (inputField instanceof HTMLInputElement) {\r\n            this.setView(inputField);\r\n            this.type = inputField.type;\r\n            // useData = false;\r\n        } else {\r\n            if (!inputField) {\r\n                this.setView(document.createElement('input'));\r\n                this.$viewData = this.initViewDataProperties(this.$viewData);\r\n                // append viewListener\r\n                // this.$view.addEventListener('change', this.$viewListener);\r\n                if (typeof(data) !== 'string') {\r\n                    for (let attr in data) {\r\n                        if (data.hasOwnProperty(attr) === false) {\r\n                            continue;\r\n                        }\r\n                        // this.$view[attr] = data[attr];\r\n                        this.$viewData.setValue(attr, data[attr]);\r\n                    }\r\n                } else {\r\n                    if (this.type) {\r\n                        this.$view.setAttribute('type', this.type);\r\n                    }\r\n                    if (data.hasOwnProperty('class')) {\r\n                        this.$view.setAttribute('class', data['class']);\r\n                    }\r\n                    this.$view.setAttribute('id', this.id);\r\n                    this.$view.setAttribute('property', this.property);\r\n                }\r\n\r\n                if (data.value) {\r\n                    // if theres a value at the control, we want to change the model to the new value\r\n                    if (this.$model) {\r\n                        this.$model.setValue(this.lastProperty, data.value);\r\n                    }\r\n                }\r\n                if (this.$model) {\r\n                    PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                }\r\n\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (this.property && entity) {\r\n            if (entity.id === this.property.split('.')[0]) {\r\n                this.$model = entity;\r\n                PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                // entity.addListener(this, this.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n    // TODO FIXME protected updateElement(property: string, value: string) {\r\n    //     if (this.$view instanceof HTMLInputElement) {\r\n    //         if (value != null) {\r\n    //             if(property == this.lastProperty) {\r\n    //                 (<HTMLInputElement>this.$view)[this.getStandardProperty()] = value;\r\n    //             } else {\r\n    //                 // this.getRoot().setValue(this, property, value, (<HTMLInputElement>this.$view)[property]);\r\n    //                 (<HTMLInputElement>this.$view)[property] = value;\r\n    //             }\r\n    //         } else {\r\n    //             delete (<HTMLInputElement>this.$view)[property];\r\n    //         }\r\n    //     }\r\n    // }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            super.controlChanged(ev);\r\n        }\r\n// <<<<<<< HEAD\r\n//             let newVal = element[this.getStandardProperty()];\r\n//             if (this.isKeyOnly()) {\r\n//                 // we expect, element[this.lastProperty] to be boolean:\r\n//                 if (!newVal) {\r\n//                     newVal = null;\r\n//                 }\r\n//             } else {\r\n//             }\r\n        // let $graphModel;\r\n        // let value;\r\n        /*if (this.$graphModel) {\r\n            $graphModel = this.$graphModel;\r\n            value = this.$graphModel.getValue(this.lastProperty);\r\n        } else {\r\n            $graphModel = this;\r\n            if (this.$view) {\r\n                value = this.$view[this.lastProperty];\r\n            }\r\n        }*/\r\n        // this.$model.setValue(this.lastProperty, newVal);\r\n        // this.propertyChange(this.$graphModel,this.lastProperty, this.$graphModel.getValue(this.lastProperty), newVal);\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n// =======\r\n        // let newVal = element[this.lastProperty];\r\n        // if (this.isKeyOnly()) {\r\n        //     // we expect, element[this.lastProperty] to be boolean:\r\n        //     if (!newVal) {\r\n        //         newVal = null;\r\n        //     }\r\n        // } else {\r\n        // }\r\n        // let $graphModel;\r\n        // let value;\r\n\r\n        // $graphModel = this.getViewData();\r\n        // if (this.$graphModel) {\r\n        //     $graphModel = this.$graphModel;\r\n        //     value = this.$graphModel.getValue(this.lastProperty);\r\n        // } else {\r\n        //     $graphModel = this;\r\n        //     if (this.$view) {\r\n        //         value = this.$view[this.lastProperty];\r\n        //     }\r\n        // }\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n//            this.saveViewInData();\r\n// >>>>>>> addOldFunctions\r\n//         } else {\r\n//             console.log('value does not match the pattern...');\r\n//         }\r\n    }\r\n\r\n    public setType(type: string): void {\r\n        let oldValue: string = this.type;\r\n        if (oldValue === type) {\r\n            return;\r\n        }\r\n        if (type === 'radio') {\r\n            this.$viewData.setValue('checked', null);\r\n        } else {\r\n            this.$viewData.removeKey('checked');\r\n        }\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\n\r\nexport class Label extends Control {\r\n    public load(data: JSON): any {\r\n        this.createControl(this.$owner, data);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('label');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr === 'textContent') {\r\n                this.$view.textContent = data['textContent'];\r\n            } else {\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Method extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.updateType(data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.updateType(data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.updateType(data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n            // e.g. setName() : string or name:string\r\n            let dataSplitted = data.split(':');\r\n\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }\r\n                else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType(dataSplitted[1].trim() || 'void');\r\n            }\r\n            // set default return type of void\r\n            else {\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = data.trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }  else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType('void');\r\n            }\r\n        }\r\n\r\n        if (Util.includes(this.$data.getValue('name'), '(') && !Util.includes(this.$data.getValue('name'), ')') === false) {\r\n            this.$data.setValue('name', this.$data.getValue('name') + '()');\r\n        }\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\nimport {Association} from '../edges';\r\nimport { GraphModel } from '..';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\n\r\nexport class Node extends DiagramElement {\r\n    public $edges: Association[] = [];\r\n    public $minWidth: number = 150;\r\n    public $minheight: number = 25;\r\n    public $defaulEdgeType: string;\r\n\r\n    constructor(data: JSON|string|Object|any) {\r\n        super();\r\n\r\n        // default size\r\n        this.withSize(this.$minWidth, this.$minheight);\r\n\r\n        if (data) {\r\n            if (data['x'] && data['y']) {\r\n                this.withPos(data['x'], data['y']);\r\n            }\r\n            if (data['width'] || data['height']) {\r\n                this.withSize(data['width'], data['height']);\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos = this.getPos();\r\n        const size = this.getSize();\r\n\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x - size.x / 2,\r\n            y: pos.y - size.y / 2,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y,\r\n            width: size.x,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        const shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'middle',\r\n            'font-family': 'Verdana',\r\n            'font-size': '14',\r\n            fill: 'black'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = this.id;\r\n\r\n        let group = this.createShape({tag: 'g', id: this.id});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public copy(): Node {\r\n        let copy: Node;\r\n        // create new id\r\n        let model = <GraphModel>this.$owner || <GraphModel>this.getRoot();\r\n        if (model) {\r\n            let type = this.property || Node.name;\r\n            let newId = model.getNewId(type);\r\n            copy = <Node>model.createElement(type, newId, null);\r\n            copy.withSize(this.getSize().x, this.getSize().y);\r\n            copy.$owner = model;\r\n        } else {\r\n            copy.id = this.id + '-copy';\r\n            copy.$owner = this.getRoot();\r\n        }\r\n        return copy;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n// EMPTY\r\n    }\r\n    public addAttribute(value: string): Attribute {\r\n        return null;\r\n    }\r\n    public getAttributes(): Attribute[] {\r\n        return null;\r\n    }\r\n    public addMethod(value: string): Method {\r\n        return null;\r\n    }\r\n    public updateLabel(newLabel: string): void {\r\n// EMPTY\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\n\r\nexport class SO extends DiagramElement {\r\n    public static create(element: Object) {\r\n        let result: SO = new SO();\r\n        for (let key in element) {\r\n            if (element.hasOwnProperty(key) === false) {\r\n                continue;\r\n            }\r\n            result.withKeyValue(key, element[key]);\r\n\r\n        }\r\n        return result;\r\n    }\r\n\r\n    public withKeyValue(key: string, value: any): SO {\r\n        if (key === 'typ') {\r\n            this.property = value;\r\n        } else if (key === 'x') {\r\n            this.withPos(value, null);\r\n        } else if (key === 'y') {\r\n            this.withPos(null, value);\r\n        } else if (key === 'width') {\r\n            this.withSize(value, null);\r\n        } else if (key === 'height') {\r\n            this.withSize(null, value);\r\n        } else {\r\n            this[key] = value;\r\n        }\r\n        return this;\r\n    }\r\n}\r\n","import {Point} from '../BaseElements';\r\nimport {Node} from './Node';\r\n\r\nexport class StereoType extends Node {\r\n\r\n    protected stereoType: string;\r\n\r\n    constructor (type: string, x: number, y: number) {\r\n        super('');\r\n        this.withPos(x, y);\r\n        this.setStereoType(type);\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        let pos: Point = this.getPos();\r\n        let size: Point = this.getSize();\r\n\r\n               // = = = STEREOTYPE = = =\r\n        let stereoType = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y - this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': 10,\r\n            'font-weight': 'bold',\r\n            fill: 'black'\r\n        });\r\n        stereoType.textContent = this.stereoType;\r\n\r\n        this.$view = stereoType;\r\n        return stereoType;\r\n    }\r\n\r\n    public setStereoType(value: string): void {\r\n        this.stereoType = '<<' + value + '>>';\r\n    }\r\n\r\n    public getStereoType(): string {\r\n        return this.stereoType;\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { SO } from './SO';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport { Util } from '../../util';\r\n\r\nexport class Symbol extends Node {\r\n    public $heightMax: number = 0;\r\n    public $heightMin: number = 0;\r\n\r\n    constructor(typ: string) {\r\n        super(typ);\r\n    }\r\n\r\n    public draw(typ?: string): SVGElement {\r\n        return SymbolLibary.draw(this);\r\n    }\r\n}\r\n\r\n// \t\t\t\t###################################################### SymbolLibary ####################################################################################\r\n// Example Items\r\n// {tag: 'path', d: ''}\r\n// {tag: 'rect', width:46, height:34}\r\n// {tag: 'ellipse', width:23, height:4}\r\n// {tag: 'line', x1:650, y1:-286, x2:650, y2:-252}\r\n// {tag: 'circle', r:5, x:12, y:0}\r\n// {tag: 'image', height: 30, width: 50, content$src: hallo}\r\n// {tag: 'text', 'text-anchor': 'left', x: '10'}\r\nexport class SymbolLibary {\r\n\r\n    public static drawSVG(node: any): SVGSVGElement {\r\n        // const lib = new SymbolLibary();\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            const parent = SO.create(node);\r\n            parent['property'] = 'SVG';\r\n            symbol = fn(parent);\r\n            // symbol = fn.apply(lib, parent);\r\n\r\n            return SymbolLibary.createGroup(parent, symbol);\r\n        }\r\n        return symbol;\r\n    }\r\n\r\n    public static draw(node: any, parent?: Object): SVGElement {\r\n        // Node is Symbol or simple Object\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            if (!(node instanceof DiagramElement)) {\r\n                node = SO.create(node);\r\n                if (!node.property) {\r\n                    node.property = 'SVG';\r\n                }\r\n            }\r\n            symbol = fn.apply(this, [node]);\r\n            if (!parent) {\r\n                return SymbolLibary.createGroup(node, symbol);\r\n            }\r\n            return SymbolLibary.createGroup(node, symbol);\r\n        } else if (node.property) {\r\n            symbol = new Symbol(node.property);\r\n            symbol.init(node);\r\n            let pos = node.getPos();\r\n            let size = node.getSize();\r\n            symbol.withPos(pos.x, pos.y);\r\n            symbol.withSize(size.x, size.y);\r\n            symbol['value'] = node['value'];\r\n            parent = node['$parent'];\r\n            return SymbolLibary.draw(symbol, parent);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public static upFirstChar(txt: string): string {\r\n        return txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase();\r\n    }\r\n\r\n    public static isSymbolName(typ: string): boolean {\r\n        let fn = SymbolLibary['draw' + SymbolLibary.upFirstChar(typ)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static isSymbol(node: Symbol) {\r\n        let fn = SymbolLibary[SymbolLibary.getName(node)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static getName(node: any): string {\r\n        if (node['type']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['type']);\r\n        }\r\n        if (node.property) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node.property);\r\n        }\r\n        if (node['src']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['src']);\r\n        }\r\n        return 'drawNode';\r\n    }\r\n\r\n    /*FIXME   public static createImage(node: Symbol, $graphModel:Node) {\r\n           let n, img: HTMLElement;\r\n           // node.$graphModel = node;\r\n           if (SymbolLibary.isSymbol(node)) {\r\n               return SymbolLibary.draw(null, node);\r\n           }\r\n           n = {tag: 'img', $graphModel: node, src: node['src']};\r\n           let size = node.getSize();\r\n           if (size.isEmpty() === false) {\r\n               n['width'] = size.x;\r\n               n['height'] = size.y;\r\n           } else {\r\n               n['xmlns'] = 'http://www.w3.org/1999/xhtml';\r\n           }\r\n           img = Util.create(n);\r\n           if (size.isEmpty()) {\r\n               $graphModel.appendImage(img);\r\n               return null;\r\n           }\r\n           return img;\r\n       }*/\r\n\r\n    public static createGroup(node: DiagramElement, group: any) {\r\n        let func, y: number, z: number, box, item: Element, transform, i, offsetX = 0, offsetY = 0;\r\n        let svg: any;\r\n        if (node.property.toUpperCase() === 'HTML') {\r\n            let so = {\r\n                tag: 'svg',\r\n                style: { left: (group.x | 0) + node.getPos().x, top: (group.y | 0) + node.getPos().y, position: 'absolute' }\r\n            };\r\n            if (node['transform']) {\r\n                so['transform'] = node['transform'];\r\n            }\r\n            svg = Util.create(so);\r\n        } else {\r\n            svg = Util.create({ tag: 'g' });\r\n            transform = 'translate(' + group.getPos().x + ' ' + group.getPos().y + ')';\r\n            if (group.scale) {\r\n                transform += ' scale(' + group.scale + ')';\r\n            }\r\n            if (group.rotate) {\r\n                transform += ' rotate(' + group.rotate + ')';\r\n            }\r\n            svg.setAttribute('transform', transform);\r\n            if (group['id']) {\r\n                svg.id = group['id'];\r\n            }\r\n        }\r\n\r\n        if (node['tooltip']) {\r\n            const tooltipTitleAttr = {\r\n                tag: 'title'\r\n            };\r\n            let tooltipTitle = Util.createShape(tooltipTitleAttr);\r\n            tooltipTitle.textContent = node['tooltip'];\r\n            svg.appendChild(tooltipTitle);\r\n        }\r\n\r\n        if (node['background']) {\r\n            const attrCircle = {\r\n                tag: 'circle',\r\n                cx: 20,\r\n                cy: 20,\r\n                r: 17,\r\n                stroke: '#888',\r\n                'stroke-width': 0,\r\n                fill: '#DDD'\r\n            };\r\n            svg.appendChild(Util.create(attrCircle));\r\n        }\r\n\r\n        for (i = 0; i < group.items.length; i += 1) {\r\n            svg.appendChild(Util.create(group.items[i]));\r\n        }\r\n        let elements = node['elements'];\r\n        Util.setSize(svg, group.width + node.getSize().x, group.height + node.getSize().y);\r\n        node['$heightMin'] = node.getSize().y;\r\n        if (elements) {\r\n            for (i = 0; i < elements.length; i += 1) {\r\n                if (!elements[i] && elements[i].length < 1) {\r\n                    elements.splice(i, 1);\r\n                    i -= 1;\r\n                }\r\n            }\r\n            box = Util.create({ tag: 'g' });\r\n            // Calculate new Height\r\n            let c: number;\r\n            z = 0;\r\n            for (c = 0; c < elements.length; c += 1) {\r\n                if (typeof elements[c] === 'string') {\r\n                    z += 1;\r\n                } else {\r\n                    z += elements[c].length;\r\n                }\r\n            }\r\n            z = z * 25 + 6;\r\n            box.appendChild(Util.create({\r\n                tag: 'rect',\r\n                rx: 0,\r\n                x: offsetX,\r\n                y: (offsetY + 28),\r\n                width: 70,\r\n                height: z,\r\n                stroke: '#000',\r\n                fill: '#fff',\r\n                opacity: '0.7'\r\n            }));\r\n            node['$heightMax'] = z + node['$heightMin'];\r\n\r\n            svg['elements'] = elements;\r\n            if (node['type'] === 'DropDown') {\r\n                svg['activ'] = Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': 60,\r\n                    'x': (10 + offsetX),\r\n                    'y': 20,\r\n                    value: node['activText']\r\n                });\r\n                svg.appendChild(svg.activ);\r\n            }\r\n\r\n            y = offsetY + 46;\r\n            // 46 -28 = 18\r\n\r\n            func = function (event: Event) {\r\n                if (svg.activ) {\r\n                    svg.activ.textContent = (<any>event.currentTarget).value;\r\n                }\r\n            };\r\n            let txt: string;\r\n            let textClass = 'SVGTEXT';\r\n            for (z = 0; z < elements.length; z += 1) {\r\n                if (typeof elements[z] === 'string') {\r\n                    txt = elements[z];\r\n                } else {\r\n                    item = this.addText(y, offsetX, box, elements[z][0], 'SVGTEXT');\r\n                    y += 26;\r\n                    for (c = 1; c < elements[z].length; c += 1) {\r\n                        item = this.addText(y, offsetX, box, '* ' + elements[z][c], 'SVGTEXTITEM');\r\n\r\n                        item['value'] = elements[z];\r\n                        if (node['action']) {\r\n                            item['onclick'] = node['action'];\r\n                        } else {\r\n                            item['onclick'] = func;\r\n                        }\r\n                        y += 26;\r\n                    }\r\n                    txt = elements[z];\r\n                    let subBox = Util.create({\r\n                        tag: 'rect',\r\n                        rx: 0,\r\n                        x: offsetX,\r\n                        y: (offsetY + 28),\r\n                        width: 60,\r\n                        height: z,\r\n                        stroke: '#000',\r\n                        fill: '#fff',\r\n                        opacity: '0.7'\r\n                    });\r\n                    continue;\r\n                }\r\n                // let txt = elements[z];\r\n                item = this.addText(y, offsetX, box, txt, textClass);\r\n\r\n                item['value'] = elements[z];\r\n                if (node['action']) {\r\n                    item['onclick'] = node['action'];\r\n                } else {\r\n                    item['onclick'] = func;\r\n                }\r\n                y += 26;\r\n            }\r\n            svg.choicebox = box;\r\n        }\r\n        svg.tool = node;\r\n        svg.onclick = function () {\r\n            if (svg.status === 'close') {\r\n                svg.open();\r\n            } else {\r\n                svg.close();\r\n            }\r\n        };\r\n        svg.close = function () {\r\n            if (svg.status === 'open' && svg.choicebox) {\r\n                this.removeChild(svg.choicebox);\r\n            }\r\n            svg.status = 'close';\r\n            svg.tool.$size.height = svg.tool.heightMin;\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x, g.tool.height + g.tool.y);\r\n            Util.setSize(svg, svg.tool.$size.x, svg.tool.$size.y);\r\n        };\r\n        svg.open = function () {\r\n            if (this.tagName === 'svg') {\r\n                return;\r\n            }\r\n            if (svg.status === 'close' && svg.choicebox) {\r\n                this.appendChild(svg.choicebox);\r\n            }\r\n            svg.status = 'open';\r\n            svg.tool.$size.height = svg.tool.heightMax;\r\n            Util.setSize(svg, svg.tool.width, svg.tool.height);\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x + 10, g.tool.height + g.tool.y + 10);\r\n        };\r\n        svg.close();\r\n        return svg;\r\n    }\r\n\r\n    public static addChild(parent: SVGElement, json: JSON | Element): void {\r\n        let item: Element;\r\n        if ((<any>json).offsetLeft) {\r\n            item = <Element>json;\r\n        } else {\r\n            item = Util.create(json);\r\n        }\r\n        item.setAttribute('class', 'draggable');\r\n        parent.appendChild(item);\r\n    }\r\n\r\n    public static all(node: any): void {\r\n        SymbolLibary.drawSmiley(node);\r\n        SymbolLibary.drawDatabase(node);\r\n        SymbolLibary.drawLetter(node);\r\n        SymbolLibary.drawMobilephone(node);\r\n        SymbolLibary.drawWall(node);\r\n        SymbolLibary.drawActor(node);\r\n        SymbolLibary.drawLamp(node);\r\n        SymbolLibary.drawArrow(node);\r\n        SymbolLibary.drawButton(node);\r\n        SymbolLibary.drawDropdown(node);\r\n        SymbolLibary.drawClassicon(node);\r\n        SymbolLibary.drawClassWithEdgeicon(node);\r\n    }\r\n\r\n    public static drawHamburger(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'circle', r: 10, fill: '#ccc', cx: 12, cy: 12, 'stroke-width': 1, stroke: 'black'},\r\n                { tag: 'path', d: 'M 8,7 H 16 M 8,12 H 16 M 8,17 H 16', stroke: 'black', fill: 'none' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawSmiley(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'path', d: 'm49.01774,25.64542a24.5001,24.5 0 1 1 -49.0001,0a24.5001,24.5 0 1 1 49.0001,0z', stroke: 'black', fill: 'none' }, { tag: 'path', d: 'm8,31.5c16,20 32,0.3 32,0.3' },\r\n                { tag: 'path', d: 'm19.15,20.32a1.74,2.52 0 1 1 -3.49,0a1.74,2.52 0 1 1 3.49,0z' },\r\n                { tag: 'path', d: 'm33,20.32a1.74,2.52 0 1 1 -3.48,0a1.74,2.52 0 1 1 3.48,0z' },\r\n                { tag: 'path', d: 'm5.57,31.65c3.39,0.91 4.03,-2.20 4.03,-2.20' },\r\n                { tag: 'path', d: 'm43,32c-3,0.91 -4,-2.20 -4.04,-2.20' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDatabase(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 40,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,-6.26 25.03,-6.26 25.03,0l0,25.82c0,6.26 -25.03,6.26 -25.03,0l0,-25.82z',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLetter(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 17,\r\n            items: [\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1,1l22,0l0,14l-22,0l0,-14z' },\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1.06,1.14l10.94,6.81l10.91,-6.91' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMobilephone(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 4.2 0.5 15.61 0c 2 0 3.7 1.65 3.7 3.7l 0 41.6c 0 2-1.65 3.7-3.7 3.7l-15.6 0c-2 0-3.7-1.6-3.7-3.7l 0-41.6c 0-2 1.6-3.7 3.7-3.7z',\r\n                    fill: 'none',\r\n                    stroke: 'black'\r\n                },\r\n                { tag: 'path', d: 'm 12.5 2.73a 0.5 0.5 0 1 1-1 0 0.5 0.5 0 1 1 1 0z' },\r\n                { tag: 'path', d: 'm 14 46a 2 2 0 1 1-4 0 2 2 0 1 1 4 0z' },\r\n                { tag: 'path', d: 'm 8 5 7 0' },\r\n                { tag: 'path', d: 'm 1.63 7.54 20.73 0 0 34-20.73 0z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawWall(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'path', d: 'm26,45.44l-5,3.56l-21,-9l0,-36.41l5,-3.56l20.96,9l-0,36.4z' },\r\n                {\r\n                    tag: 'path',\r\n                    stroke: 'white',\r\n                    d: 'm2.21,11l18.34,7.91m-14.46,-12.57l0,6.3m8.2,21.74l0,6.35m-8.6,-10l0,6.351m4.1,-10.67l0,6.3m4.8,-10.2l0,6.3m-8.87,-10.23l0,6.35m4.78,-10.22l0,6.35m-8,14.5l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m0,-13l0,34m-18.23,-41.84l18.3,8m0,0.11l5,-3.57'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawActor(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'line', stroke: '#000', x1: '12', y1: '10', x2: '12', y2: '30' },\r\n                { tag: 'circle', stroke: '#000', cy: '5', cx: '12', r: '5' },\r\n                { tag: 'line', stroke: '#000', y2: '18', x2: '25', y1: '18', x1: '0' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '5', y1: '30', x1: '12' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '20', y1: '30', x1: '12' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLamp(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 22.47 10.58c-6.57 0-11.89 5.17-11.89 11.54 0 2.35 0.74 4.54 2 6.36 2 4 4.36 5.63 4.42 10.4l 11.15 0c 0.12-4.9 2.5-6.8 4.43-10.4 1.39-1.5 1.8-4.5 1.8-6.4 0-6.4-5.3-11.5-11.9-11.5z',\r\n                    fill: 'white',\r\n                    stroke: 'black'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 40 8 0c 0.58 0 1 0.5 1 1 0 0.6-0.5 1-1 1l-8 0c-0.6 0-1-0.47-1-1 0-0.58 0.47-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 42.7 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 45.3 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                { tag: 'path', d: 'm 19.5 48c 0.37 0.8 1 1.3 1.9 1.7 0.6 0.3 1.5 0.3 2 0 0.8-0.3 1.4-0.8 1.9-1.8z' },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 6 37.5 4.2-4c 0.3-0.3 0.8-0.3 1 0 0.3 0.3 0.3 0.8 0 1.1l-4.2 4c-0.3 0.3-0.8 0.3-1.1 0-0.3-0.3-0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 39 37.56-4.15-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 38 23 5.8 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.8 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 1.3 23 6 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.9 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 34.75 11.2 4-4.1c 0.3-0.3 0.3-0.8 0-1-0.3-0.3-0.8-0.3-1 0l-4 4.1c-0.3 0.3-0.3 0.8 0 1 0.3 0.3 0.8 0.3 1 0z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 11.23 10-4-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 21.64 1.3 0 5.8c 0 0.4 0.3 0.8 0.8 0.8 0.4 0 0.8-0.3 0.8-0.8l 0-5.8c 0-0.4-0.3-0.8-0.8-0.8-0.4 0-0.8 0.3-0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 26.1 24.3c-0.5 0-1 0.2-1.3 0.4-1.1 0.6-2 3-2.27 3.5-0.26-0.69-1.14-2.9-2.2-3.5-0.7-0.4-2-0.7-2.5 0-0.6 0.8 0.2 2.2 0.9 2.9 1 0.9 3.9 0.9 3.9 0.9 0 0 0 0 0 0 0.54 0 2.8 0 3.7-0.9 0.7-0.7 1.5-2 0.9-2.9-0.2-0.3-0.7-0.4-1.2-0.4z'\r\n                },\r\n                { tag: 'path', d: 'm 22.5 28.57 0 10.7' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawStop(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 30,\r\n            height: 30,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: '#FFF',\r\n                    'stroke-width': '2',\r\n                    stroke: '#B00',\r\n                    d: 'm 6,6 a 14,14 0 1 0 0.06,-0.06 z m 0,0 20,21'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMin(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    d: 'm 0,0 19,0 0,19 -19,0 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 13,-0.04'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawArrow(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 10,\r\n            height: 9,\r\n            rotate: node['rotate'],\r\n            items: [\r\n                { tag: 'path', fill: '#000', stroke: '#000', d: 'M 0,0 10,4 0,9 z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMax(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    'stroke-dashoffset': 2,\r\n                    'stroke-dasharray': '4.8,4.8',\r\n                    d: 'm 0,0 4.91187,0 5.44643,0 9.11886,0 0,19.47716 -19.47716,0 0,-15.88809 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 6,0.006 0.02,5 0.01,-11 -0.03,6.02 c 2,-0.01 4,-0.002 6,0.01'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawButton(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight, btnValue;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        btnValue = node['value'] || '';\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: 60,\r\n            height: 28,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 8,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    filter: 'url(#drop-shadow)',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                { tag: 'text', $font: true, x: 10, y: 18, fill: 'black', value: btnValue, 'class': 'hand' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDropdown(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 0,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth - 20,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 2,\r\n                    x: btnWidth - 20,\r\n                    y: 0,\r\n                    width: 20,\r\n                    height: 28,\r\n                    stroke: '#000',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    style: 'fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1',\r\n                    d: 'm ' + (btnWidth - 15) + ',13 10,0 L ' + (btnWidth - 10) + ',20 z'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassicon(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.19999l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm25.68807,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.2l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                { tag: 'line', x1: 11, y1: 7, x2: 25, y2: 7, stroke: '#000' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassWithEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M2,10 20,10 20,35 2,35 Z M2,17 20,17 M20,10 28,5 28,9 M 28.5,4.7 24,4',\r\n                    style: 'fill:none;stroke:#000000;transform:scale(0.8);'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClass(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: '100%',\r\n            height: '100%',\r\n            items: [\r\n                { tag: 'rect', width: 50, height: 40, x: 0, y: 0, 'stroke-width': 2, stroke: 'black', fill: 'none'},\r\n                { tag: 'rect', width: 50, height: 12, x: 0, y: 18, 'stroke-width': 1, stroke: 'black', fill: 'none'},\r\n                { tag: 'text', x: 27, y: 14, 'text-anchor': 'middle', 'font-size': 11, value: 'Class'},\r\n                { tag: 'text', x: 5, y: 24, 'font-size': 5, value: '+ field: type'},\r\n                { tag: 'text', x: 5, y: 36, 'font-size': 5, value: '+ method(type)'}\r\n            ]\r\n        });\r\n    }\r\n/*\r\n<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n    <g>\r\n    <text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text>\r\n        <text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>\r\n*/\r\n\r\n    public static drawEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M10,30 30,10 M19,10 30,10 30,21',\r\n                    style: 'fill:none;stroke:#555;stroke-width:2;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawCopynode(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M5 5 L15 5 L15 20 L5 20 Z M5 10 L15 10',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M8 2 L18 2 L18 17 L8 17 Z M8 7 L18 7'\r\n                        + 'M11 4.5 L15 4.5 '\r\n                        + 'M10 10 L16 10 '\r\n                        + 'M10 13 L16 13 ',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawBasket(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M12 12 L18 12 L18 11 L22 11 L22 12 L28 12 L28 14 L27 14 L27 29 L13 29 L13 14 L12 14 Z M13 14 L27 14 M20 17 L20 26 M17 16 L17 27 M23 16 L23 27',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawPencil(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M6 20 L12 23 L33 23 L33 17 L12 17 Z M30 17 L30 23 M12 17 L12 23 M15 19 L28 19 M15 21 L28 21',\r\n                    stroke: '#000',\r\n                    'stroke-width': 1,\r\n                    fill: 'white'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    private static addText(y: number, offsetX: number, box: Element, text: string, textClass: string): Element {\r\n        let item: Element;\r\n        box.appendChild(Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'text-anchor': 'left',\r\n            width: 70,\r\n            x: 10,\r\n            y: y,\r\n            class: textClass,\r\n            value: text,\r\n            eventValue: text\r\n        }));\r\n        if (textClass === 'SVGTEXT') {\r\n            textClass = 'SVGChoiceText';\r\n        } else {\r\n            textClass = 'SVGChoice';\r\n        }\r\n\r\n        item = Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            x: offsetX,\r\n            y: y - 18,\r\n            width: 70,\r\n            height: 24,\r\n            stroke: 'none',\r\n            class: textClass,\r\n        });\r\n        item['eventValue'] = text;\r\n        box.appendChild(item);\r\n        return item;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n}\r\n","import {Control} from '../../Control';\r\nimport BridgeElement from '../../BridgeElement';\r\nimport Data from '../../Data';\r\nimport {Util} from '../../util';\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Table extends Control {\r\n    protected items: BridgeElement[] = [];\r\n    private columns: Column[] = [];\r\n    private cells: Object = {};\r\n    private $bodysection: HTMLTableSectionElement;\r\n    private $headersection: HTMLTableSectionElement;\r\n    private showedItems: Array<BridgeElement> = [];\r\n    // BridgeElements:\r\n    private itemsIds: Object = {};\r\n    private countElement: HTMLElement;\r\n    private countColumn: HTMLElement;\r\n    private countColumnPos: number;\r\n    private resultColumn: string;\r\n    private lastSearchText: string;\r\n    private searchColumns: Array<string> = [];\r\n    private searchText: Array<string> = [];\r\n    private sortColumn: Column;\r\n    private direction: number;\r\n    private moveElement: Column = null;\r\n    private isDrag: boolean = false;\r\n    private moveTimeStamp: number;\r\n    private moveX: number;\r\n    private movePos: number;\r\n    private dragColumn: Column;\r\n    private dragPos: number;\r\n    private tableOption: HTMLTableHeaderCellElement;\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    private static indexOfChild(item: BridgeElement) {\r\n        let i: number = 0;\r\n        let child: Node = item.gui;\r\n        while ((child = child.previousSibling) !== null) {\r\n            i++;\r\n        }\r\n        return i;\r\n    }\r\n\r\n    public load(data: any): void {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n            if (data.property) {\r\n                this.property = data.property;\r\n            }\r\n\r\n            if (data.searchColumns) {\r\n                let search: Array<string> = [];\r\n                if (typeof(data.searchColumns) === 'string') {\r\n                    search = data.searchColumns.split(' ');\r\n                } else {\r\n                    search = data.searchColumns;\r\n                }\r\n                for (let z: number = 0; z < search.length; z++) {\r\n                    let item = search[z].trim();\r\n                    if (item.length > 0) {\r\n                        if (this.searchColumns.indexOf(item) < 0) {\r\n                            this.searchColumns.push(item);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        if (this.$view) {\r\n            // Must be an Update\r\n            if (data['columns']) {\r\n                // It is a json must add all things and generate HTML\r\n                for (let i in data['columns']) {\r\n                    if (data['columns'].hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    let col = this.parseData(data['columns'][i]);\r\n                    this.addHeaderInfo(col);\r\n                    this.columns.push(col);\r\n                    this.tableOption.parentElement.insertBefore(col.$element, this.tableOption);\r\n                }\r\n                for (let i in this.showedItems) {\r\n                    let item: BridgeElement = this.showedItems[i];\r\n                    let cell;\r\n                    // Now Add some Children\r\n                    while (item.gui.children.length < this.columns.length) {\r\n                        cell = document.createElement('td');\r\n                        item.gui.appendChild(cell);\r\n                    }\r\n                    // Now Remove Some Children\r\n                    while (item.gui.children.length > this.columns.length) {\r\n                        item.gui.removeChild(item.gui.children[item.gui.children.length - 1]);\r\n                    }\r\n                    for (let c: number = 0; c < this.columns.length; c++) {\r\n                        let name = this.columns[c].attribute;\r\n                        // let count = this.columns.length;\r\n                        cell = item.gui.children[c];\r\n                        cell.innerHTML = item.model.getValue(name);\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n\r\n        this.$view = document.getElementById(id);\r\n        let headerrow: HTMLTableRowElement;\r\n        if (this.$view) {\r\n            if (!this.property) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('table');\r\n            this.$owner.appendChild(this);\r\n        }\r\n        if (!this.$bodysection) {\r\n            // add tbody element if missing\r\n            this.$bodysection = document.createElement('tbody');\r\n            this.$view.appendChild(this.$bodysection);\r\n        }\r\n        if (data['classname']) {\r\n            this.$view.className = data['classname'];\r\n        } else {\r\n            this.$view.className = 'mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp';\r\n        }\r\n\r\n        this.id = id;\r\n        this.$view.id = id;\r\n        this.$view.setAttribute('type', this.constructor['name'].toLowerCase());\r\n        let counter = 0;\r\n        for (let c = 0; c < this.$view.children.length; c++) {\r\n            let row: HTMLTableRowElement = <HTMLTableRowElement>this.$view.children[c];\r\n            if (row instanceof HTMLTableSectionElement) {\r\n                if (row.tagName === 'THEAD') {\r\n                    headerrow = row;\r\n                    // Its a thead\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingHeader(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                } else {\r\n                    // Its a tbody\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingData(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                }\r\n            } else {\r\n                // fallback, if there are no thead and tbody...\r\n                if (counter === 0) {\r\n                    headerrow = row;\r\n                    this.parsingHeader(row);\r\n                } else {\r\n                    this.parsingData(row);\r\n                }\r\n            }\r\n            counter++;\r\n        }\r\n        if (!headerrow || !this.$headersection) {\r\n            if (!this.$headersection) {\r\n                // find eventually existing thead\r\n                let header = this.$view.getElementsByTagName('thead');\r\n                if (header.length === 0) {\r\n                    this.$headersection = document.createElement('thead');\r\n                    this.$view.appendChild(this.$headersection);\r\n                } else {\r\n                    // take first thead element\r\n                    this.$headersection = <HTMLTableSectionElement>header.item(0);\r\n                }\r\n            }\r\n            if (!headerrow) {\r\n                headerrow = document.createElement('tr');\r\n                this.$headersection.appendChild(headerrow);\r\n            }\r\n        }\r\n\r\n        if (data['columns']) {\r\n            // It is a json must add all things and generate HTML\r\n            for (let i in data['columns']) {\r\n                if (data['columns'].hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                let col = this.parseData(data['columns'][i]);\r\n                this.addHeaderInfo(col);\r\n                this.columns.push(col);\r\n                headerrow.appendChild(col.$element);\r\n            }\r\n            this.tableOption = document.createElement('th');\r\n            this.tableOption.classList.add('tableOption');\r\n            headerrow.appendChild(this.tableOption);\r\n            let context: HTMLElement = this.addOptionItem(null, this.tableOption, true);\r\n            let contentChild: HTMLElement = this.addOptionItem('show', context, true);\r\n            // let simpleLink: HTMLElement = this.addOptionItem('show', contentChild, false);\r\n            this.addOptionItem('show', contentChild, false);\r\n        }\r\n        this.registerEvents(['mousemove', 'mousedown', 'mouseup', 'resize', 'dragstart', 'dragover', 'drop', 'dragend']);\r\n\r\n        // Check for SearchBar\r\n        // if(data[\"searchproperty\"]){\r\n        // Create Full Row\r\n        let searchBar = document.createElement('tr');\r\n        let cell = document.createElement('td');\r\n        cell.setAttribute('colspan', '' + (this.columns.length));\r\n        searchBar.appendChild(cell);\r\n\r\n        let search = document.createElement('input');\r\n        search.className = 'search';\r\n        let that = this;\r\n        search.addEventListener('keyup', function (evt) {\r\n            that.search(evt.target['value']);\r\n        });\r\n\r\n        cell.appendChild(search);\r\n        if (this.resultColumn) {\r\n            if (this.resultColumn.indexOf('#') !== 0) {\r\n                this.countElement = document.createElement('div');\r\n                searchBar.appendChild(this.countElement);\r\n            } else {\r\n                for (let z: number = 0; z < this.$headersection.children.length; z++) {\r\n                    if (this.$headersection.children[z].innerHTML === this.resultColumn) {\r\n                        this.countColumn = <HTMLElement> this.$headersection.children[z];\r\n                        this.countColumnPos = z;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        let first = this.$headersection.children.item(0);\r\n        this.$headersection.insertBefore(searchBar, first);\r\n\r\n        this.updateElement(this.property, null);\r\n\r\n        // now update those elements, that were not loaded currently\r\n    }\r\n\r\n    public tableEvent(type: string, e: Event) {\r\n        let button: number = 0;\r\n        let eventX: number = 0;\r\n        if (e instanceof MouseEvent) {\r\n            button = e.buttons;\r\n            eventX = e.pageX;\r\n        }\r\n        if (type === 'mouseup') {\r\n            this.moveElement = null;\r\n        } else if (type === 'mousedown' || type === 'resize') {\r\n            // End to Resize\r\n            this.moveElement = null;\r\n            if (button === 1) {\r\n                let c: number;\r\n                for (c = 0; c < this.columns.length; c++) {\r\n                    if (this.columns[c].$resize === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = false;\r\n                        break;\r\n                    } else if (this.columns[c].$element === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = true;\r\n                    }\r\n                }\r\n                this.moveTimeStamp = e.timeStamp;\r\n                this.moveX = eventX;\r\n            } else {\r\n                this.moveTimeStamp = 0;\r\n            }\r\n        } else if (type === 'mousemove') {\r\n            if (button === 1 && this.moveElement) {\r\n                if (this.moveTimeStamp && e.timeStamp - this.moveTimeStamp < 2000) {\r\n                    if (this.isDrag) {\r\n                        // FIXME\r\n                    } else {\r\n                        let x = eventX - this.moveX;\r\n                        let width = this.moveElement.$element.offsetWidth;\r\n                        this.moveElement.$element.width = '' + (width + x);\r\n                        e.stopPropagation();\r\n                    }\r\n                }\r\n                this.moveX = eventX;\r\n                this.moveTimeStamp = e.timeStamp;\r\n            }\r\n        } else if (this.isDrag) {\r\n            this.columnDragEvent(type, <DragEvent> e);\r\n        }\r\n    }\r\n\r\n    public parsingHeader(row: HTMLTableRowElement) {\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let column: HTMLTableHeaderCellElement = <HTMLTableHeaderCellElement>row.children[i];\r\n            let id = column.innerHTML.trim();\r\n            let col: Column = null;\r\n            for (let c in this.columns) {\r\n                if (this.columns.hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                if (this.columns[c].label === id) {\r\n                    col = this.columns[c];\r\n                    col.$element = column;\r\n                    break;\r\n                }\r\n            }\r\n            if (col === null) {\r\n                col = new Column();\r\n                col.label = id;\r\n                col.attribute = column.getAttribute('attribute');\r\n                col.$element = column;\r\n                this.columns.push(col);\r\n            }\r\n            this.addHeaderInfo(col);\r\n        }\r\n    }\r\n\r\n    public parsingData(row: HTMLTableRowElement) {\r\n        let id = row.getAttribute('id');\r\n        let item: Data = this.$owner.getItem(id);\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let cell: HTMLTableCellElement = <HTMLTableCellElement>row.children[i];\r\n            let colAttribute = this.columns[i].attribute;\r\n            if (colAttribute.indexOf('\\.') < 0) {\r\n                item[colAttribute] = cell.innerHTML.trim();\r\n            }\r\n        }\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: Object, newValue: Object) {\r\n        if (entity) {\r\n            // Check for Show\r\n            if (this.property && !entity.hasProperty(property)) {\r\n                return;\r\n            }\r\n        }\r\n        if (entity.id === undefined) {\r\n            return;\r\n        }\r\n        let item: BridgeElement = <BridgeElement>this.itemsIds[entity.id];\r\n        let row: HTMLTableRowElement;\r\n        if (!item) {\r\n            item = new BridgeElement(entity);\r\n            this.items.push(item);\r\n            this.itemsIds[entity.id] = item;\r\n        }\r\n        row = this.cells[entity.id];\r\n        if (row) {\r\n            item.gui = row;\r\n        }\r\n        if (this.searching(item) === false) {\r\n            return;\r\n        }\r\n        let cell;\r\n        let showItem = false;\r\n\r\n        if (!row) {\r\n            showItem = true;\r\n            row = document.createElement('tr');\r\n            let count = this.columns.length;\r\n            for (let i = 0; i < count; i++) {\r\n                cell = document.createElement('td');\r\n                row.appendChild(cell);\r\n            }\r\n            this.cells[entity.id] = row;\r\n            item.gui = row;\r\n        }\r\n        for (let c: number = 0; c < this.columns.length; c++) {\r\n            let name = this.columns[c].attribute;\r\n            if (name === property) {\r\n                cell = row.children[c];\r\n                cell.innerHTML = <string>newValue;\r\n            }\r\n        }\r\n        if (showItem) {\r\n            this.showItem(item, true);\r\n        }\r\n        // super.propertyChange(entity, property, newValue, oldValue);\r\n    }\r\n\r\n    public sort(column: Column) {\r\n        if (this.sortColumn === column) {\r\n            if (this.direction === 1) {\r\n                this.direction = -1;\r\n                column.$element.classList.remove('asc');\r\n                column.$element.classList.add('desc');\r\n            } else {\r\n                this.direction = 1;\r\n                column.$element.classList.remove('desc');\r\n                column.$element.classList.add('asc');\r\n            }\r\n        } else {\r\n            if (this.sortColumn !== null) {\r\n                this.sortColumn.$element.classList.remove('desc');\r\n                this.sortColumn.$element.classList.remove('asc');\r\n            }\r\n            this.sortColumn = column;\r\n            this.sortColumn.$element.classList.add('asc');\r\n            this.direction = 1;\r\n        }\r\n        let that = this;\r\n        let sort = function (a: BridgeElement, b: BridgeElement) {\r\n            return that.sorting(a, b);\r\n        };\r\n        this.showedItems.sort(sort);\r\n        let len: number = this.showedItems.length;\r\n        let body = this.$bodysection;\r\n        let i = 0;\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            if (i !== Table.indexOfChild(item)) {\r\n                break;\r\n            }\r\n            i = i + 1;\r\n        }\r\n        while (body.children.length > i) {\r\n            body.removeChild(body.children.item(body.children.length - 1));\r\n        }\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            body.appendChild(item.gui);\r\n            i = i + 1;\r\n        }\r\n\r\n        //      body.removeChild(item.gui);\r\n        //      body.remove\r\n    }\r\n\r\n    public sorting(a: BridgeElement, b: BridgeElement): number {\r\n        let path: string[] = this.sortColumn.attribute.split('.');\r\n        let itemA = a.model.prop;\r\n        let itemB = b.model.prop;\r\n        let check = this.sortColumn.attribute;\r\n        for (let p = 0; p < path.length; p++) {\r\n            check = path[p];\r\n            if (itemA[check]) {\r\n                itemA = itemA[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n            if (itemB[check]) {\r\n                itemB = itemB[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n        if (itemA !== itemB) {\r\n            if (this.direction === 1) {\r\n                return (itemA < itemB) ? -1 : 1;\r\n            }\r\n            return (itemA < itemB) ? 1 : -1;\r\n\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    // Searching\r\n    public search(origSearchText: string): void {\r\n        if (!origSearchText) {\r\n            origSearchText = '';\r\n        }\r\n        let searchText: string = origSearchText.trim().toLowerCase();\r\n        if (searchText === this.lastSearchText && searchText !== '') {\r\n            return; // <==== nothing to be done\r\n        }\r\n        let oldSearch: string = this.lastSearchText;\r\n        this.lastSearchText = searchText;\r\n\r\n        this.parseSearchArray();\r\n        if (searchText !== '' && oldSearch !== null && searchText.indexOf(oldSearch) >= 0 && searchText.indexOf('|') < 0) {\r\n            this.searchArray(this.showedItems);\r\n        } else {\r\n            this.searchSet(this.items);\r\n        }\r\n        this.refreshCounter();\r\n    }\r\n\r\n    public refreshCounter() {\r\n        if (this.countColumn) {\r\n            this.countColumn.innerHTML = this.columns[this.countColumnPos].label + ' (' + this.showedItems.length + ')';\r\n        }\r\n        // var countElement = document.getElementById('talkCount');\r\n        //  if (countElement) {\r\n        //     var txt = (this.showedItems.size() > 0 && searchText.length > 0 ) ? this.options.TEXT_SEARCHLIST : this.options.TEXT_SEARCHFULLLIST;\r\n        //     countElement.innerHTML = txt.replace(\"%LEN%\", this.root['children'].length).replace(\"%COUNT%\", this.showedItems.size()).replace(\"%SEARCH%\", origSearchText);\r\n        // }\r\n        // if (this.countColumn) {\r\n        //     this.countColu1mn.innerHTML = this.countColumn[\"label\"] + \" (\" + this.showedItems.size() + \")\";\r\n        // }\r\n    }\r\n\r\n    public parseSearchArray() {\r\n        let pos: number = 0;\r\n        let split: Array<string> = [];\r\n        let quote: boolean = false;\r\n        for (let i: number = 0; i < this.lastSearchText.length; i++) {\r\n            if ((this.lastSearchText.charAt(i) === ' ') && !quote) {\r\n                let txt = this.lastSearchText.substring(pos, i).trim();\r\n                if (txt.length > 0) {\r\n                    split.push(txt);\r\n                }\r\n                pos = i + 1;\r\n            } else if (this.lastSearchText.charAt(i) === '\\\"') {\r\n                if (quote) {\r\n                    let txt = this.lastSearchText.substring(pos, i).trim();\r\n                    if (txt.length > 0) {\r\n                        split.push(txt);\r\n                    }\r\n                    pos = i + 1;\r\n                } else {\r\n                    pos = i + 1;\r\n                }\r\n                quote = !quote;\r\n            }\r\n        }\r\n        if (pos < this.lastSearchText.length) {\r\n            split.push(this.lastSearchText.substring(pos, this.lastSearchText.length).trim());\r\n        }\r\n        this.searchText = split;\r\n        return split;\r\n    }\r\n\r\n    public searchArray(root: Array<BridgeElement>) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let i: number = 0; i < root.length; i++) {\r\n            let item: BridgeElement = root[i];\r\n            this.showItem(item, this.searching(item));\r\n        }\r\n    }\r\n\r\n    public searchSet(root: BridgeElement[]) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let item of root) {\r\n            let child: BridgeElement = <BridgeElement>item;\r\n            this.showItem(child, this.searching(child));\r\n        }\r\n    }\r\n\r\n    public showItem(item: BridgeElement, visible: boolean) {\r\n        if (visible) {\r\n            this.showedItems.push(item);\r\n            this.$bodysection.appendChild(item.gui);\r\n        } else if (item.gui && item.gui.parentElement) {\r\n            this.$bodysection.removeChild(item.gui);\r\n        }\r\n    }\r\n\r\n    public searching(item: BridgeElement): boolean {\r\n        let fullText: string = '';\r\n        for (let i: number = 0; i < this.searchColumns.length; i++) {\r\n            fullText = fullText + ' ' + item.model.getValue(this.searchColumns[i]);\r\n        }\r\n        fullText = fullText.trim().toLowerCase();\r\n        for (let z: number = 0; z < this.searchText.length; z++) {\r\n            if ('' !== this.searchText[z]) {\r\n                let orSplit: Array<string>;\r\n                if (this.searchText[z].indexOf('|') > 0) {\r\n                    orSplit = this.searchText[z].split('|');\r\n                } else {\r\n                    orSplit = [this.searchText[z]];\r\n                }\r\n                let o: number = 0;\r\n                for (; o < orSplit.length; o++) {\r\n                    let pos: number = orSplit[o].indexOf(':');\r\n                    if (orSplit[o].indexOf('#') === 0 && pos > 1) {\r\n                        // if (searchProperties.contains(propString)) {\r\n                        let value: string = orSplit[o].substring(pos + 1);\r\n                        let column: string = orSplit[o].substring(1, pos - 1);\r\n                        let dataValue: Object = item.model.getValue(column);\r\n                        if (dataValue) {\r\n                            if (dataValue.toString().toLowerCase().indexOf(value) >= 0) {\r\n                                // Search for simple Property\r\n                                break;\r\n                            }\r\n                        }\r\n                    } else if (orSplit[o].length > 1 && orSplit[o].indexOf('-') === 0) {\r\n                        if (fullText.indexOf(orSplit[o].substring(1)) < 0) {\r\n                            break;\r\n                        }\r\n                    } else if (fullText.indexOf(orSplit[o]) >= 0) {\r\n                        // his search word is found in full text\r\n                        break;\r\n                    }\r\n                }\r\n                if (o === orSplit.length) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public getColumn(): Column[] {\r\n        return this.columns;\r\n    }\r\n\r\n    public updateElement(property: string, value: string): void {\r\n        // first clear all elements inside the table:\r\n        for (let item of this.items) {\r\n            if (item instanceof BridgeElement) {\r\n                (<BridgeElement>item).model.removeListener(this);\r\n            }\r\n        }\r\n\r\n        this.items = [];\r\n        this.itemsIds = {};\r\n\r\n        // load all entitys that match the property\r\n        if (this.property !== undefined) {\r\n            let items = this.$owner.getItems();\r\n            for (let j in items) {\r\n                if (items.hasOwnProperty(j)) {\r\n                    let item = items[j];\r\n                    if (item instanceof Data) {\r\n                        if (property === j) {\r\n                            // if (property == item.property) {\r\n                            let i = new BridgeElement(<Data>item);\r\n                            this.items.push(i);\r\n                            this.itemsIds[item.id] = i;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            this.redrawAllElements();\r\n        }\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        if (this.$owner !== null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    protected redrawAllElements() {\r\n        let children: HTMLCollection = this.$bodysection.children;\r\n        // remove old children\r\n        for (let i = 0; i < children.length; i++) {\r\n            let child = children.item(i);\r\n            // remove child\r\n            this.$bodysection.removeChild(child);\r\n        }\r\n\r\n        // load new children\r\n        for (let obj of this.items) {\r\n            // register listeners\r\n            obj.model.addListener(this);\r\n            // create tr\r\n            let row = this.createRow(obj);\r\n            this.$bodysection.appendChild(row);\r\n            this.cells[obj.id] = row;\r\n        }\r\n    }\r\n\r\n    private parseData(column: any): Column {\r\n        let col = new Column();\r\n        col.label = column.label || column.id;\r\n        col.attribute = column.attribute || column.label || column.id;\r\n        col.$element = document.createElement('th');\r\n        col.$element.innerHTML = col.label;\r\n        col.$element.draggable = true;\r\n\r\n        // resize Header\r\n        col.$resize = document.createElement('div');\r\n        col.$resize.classList.add('resize');\r\n        col.$element.appendChild(col.$resize);\r\n\r\n        return col;\r\n    }\r\n\r\n    private createRow(data: BridgeElement): HTMLTableRowElement {\r\n        let tr: HTMLTableRowElement = document.createElement('tr');\r\n\r\n        for (let id of this.columns) {\r\n            let td: HTMLTableDataCellElement = document.createElement('td');\r\n            tr.appendChild(td);\r\n            td.innerHTML = data.model.getValue(id.attribute);\r\n        }\r\n        return tr;\r\n    }\r\n\r\n    private addHeaderInfo(col: Column) {\r\n        let element: HTMLTableCellElement = col.$element;\r\n        let that = this;\r\n        element.classList.add('sort');\r\n        element.addEventListener('click',\r\n            function () {\r\n                that.sort(col);\r\n            },\r\n            false);\r\n    }\r\n\r\n    private columnDragEvent(type: string, e: DragEvent) {\r\n        if (type === 'dragstart') {\r\n            // Target (this) element is the source node.\r\n            this.moveElement.$element.style.opacity = '0.4';\r\n            e.dataTransfer.effectAllowed = 'move';\r\n            e.dataTransfer.setData('text/json', JSON.stringify(Util.toJson(this.moveElement)));\r\n        } else if (type === 'dragenter') {\r\n            // TO Nothing\r\n        } else if (type === 'dragleave') {\r\n            this.moveElement.$element.classList.remove('over');\r\n        } else if (type === 'dragover') {\r\n            if (e.preventDefault) {\r\n                e.preventDefault(); // Necessary. Allows us to drop.\r\n            }\r\n            for (let c = 0; c < this.columns.length; c++) {\r\n                if (this.columns[c].$element === e.target) {\r\n                    this.dragColumn = this.columns[c];\r\n                    this.dragPos = c;\r\n                    this.columns[c].$element.classList.add('over');\r\n                } else {\r\n                    this.columns[c].$element.classList.remove('over');\r\n                }\r\n            }\r\n            if (e.target === this.tableOption) {\r\n                this.tableOption.classList.add('over');\r\n                this.dragPos = this.columns.length;\r\n            } else {\r\n                this.tableOption.classList.remove('over');\r\n            }\r\n            e.dataTransfer.dropEffect = 'move';  // See the section on the DataTransfer object.\r\n        } else if (type === 'drop') {\r\n            // this / e.target is current target element.\r\n            if (e.stopPropagation) {\r\n                e.stopPropagation(); // stops the browser from redirecting.\r\n            }\r\n            if (this.movePos === this.dragPos) {\r\n                return;\r\n            }\r\n            // movePos -> dragPos\r\n            // See the section on the DataTransfer object.\r\n            // DataModel\r\n            this.columns.splice(this.movePos, 1);\r\n            if (this.movePos >= this.dragPos) {\r\n                this.columns.splice(this.dragPos, 0, this.moveElement);\r\n            } else {\r\n                this.columns.splice(this.dragPos - 1, 0, this.moveElement);\r\n            }\r\n\r\n            // Header Line\r\n            let line: HTMLElement = this.moveElement.$element.parentElement;\r\n            line.removeChild(this.moveElement.$element);\r\n            if (this.dragPos < this.columns.length) {\r\n                line.insertBefore(this.moveElement.$element, this.dragColumn.$element);\r\n            } else {\r\n                line.insertBefore(this.moveElement.$element, this.tableOption);\r\n            }\r\n\r\n            let oldElement: Element;\r\n            let newElement: Element;\r\n\r\n            // Now all Childs\r\n            for (let i = 0; i < this.$bodysection.children.length; i++) {\r\n                // Each line\r\n                line = <HTMLElement>this.$bodysection.children.item(i);\r\n                oldElement = line.children.item(this.movePos);\r\n                newElement = line.children.item(this.dragPos);\r\n                line.removeChild(oldElement);\r\n                line.insertBefore(oldElement, newElement);\r\n            }\r\n        } else if (type === 'dragend') {\r\n            // this/e.target is the source node.\r\n            this.moveElement.$element.style.opacity = '1';\r\n            for (let i = 0; i < this.columns.length; i++) {\r\n                this.columns[i].$element.classList.remove('over');\r\n            }\r\n            this.tableOption.classList.remove('over');\r\n        }\r\n    }\r\n\r\n    private addOptionItem(label: string, parent: HTMLElement, sub: boolean): HTMLElement {\r\n        let labelControl;\r\n        if (label) {\r\n            labelControl = document.createElement('a');\r\n            labelControl.appendChild(document.createTextNode(label));\r\n            labelControl.href = 'javascript:void(0);';\r\n            parent.appendChild(labelControl);\r\n        }\r\n        if (sub) {\r\n            let context = document.createElement('div');\r\n            context.classList.add('dropdown-content');\r\n            context.style.setProperty('position', 'absolute');\r\n            parent.appendChild(context);\r\n\r\n            /* When the user clicks on the button,\r\n             toggle between hiding and showing the dropdown content */\r\n            parent.addEventListener(\r\n                'click',\r\n                function () {\r\n                    context.classList.toggle('show');\r\n                },\r\n                false);\r\n            return context;\r\n        }\r\n        return labelControl;\r\n    }\r\n\r\n    private registerEvents(events: string[]) {\r\n        let that = this;\r\n        for (let i = 0; i < events.length; i++) {\r\n            this.$view.addEventListener(events[i], function (evt) {\r\n                return that.tableEvent(events[i], evt);\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\nclass Column {\r\n    label: string;\r\n    attribute: string;\r\n    $element: HTMLTableHeaderCellElement;\r\n    $resize: HTMLDivElement;\r\n    visible: boolean;\r\n}\r\n","import { AutoComplete } from './AutoComplete';\r\nimport { BR } from './BR';\r\nimport { Div } from './Div';\r\nimport { Label } from './Label';\r\n\r\nexport * from './Node';\r\nexport * from './Class';\r\nexport * from './SO';\r\nexport * from './Symbol';\r\n\r\nexport * from './BR';\r\nexport * from './Button';\r\nexport * from './Div';\r\nexport * from './Form';\r\nexport * from './Input';\r\nexport * from './Label';\r\nexport * from './Table';\r\nexport * from './HTML';\r\nexport * from './Dice';\r\nexport * from './AutoComplete';\r\nexport * from './Attribute';\r\nexport * from './Method';\r\nexport * from './ClazzProperty';\r\n\r\nnew AutoComplete();\r\nnew BR();\r\nnew Div();\r\nnew Label();\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class AddNode implements EventHandler {\r\n\r\n    public MIN_SIZE_TO_ADD_NODE: number = 30;\r\n    public MIN_SIZE_TO_ADD_TEXT: number = 10;\r\n    private graph: Graph;\r\n    private svgRect: SVGSVGElement;\r\n    private svgGroupAddNode: SVGSVGElement;\r\n    private svgTextAddNode: SVGSVGElement;\r\n    private svgTextRectAddNode: SVGSVGElement;\r\n    private isRectDrawing: boolean;\r\n    private isDrawToLeft: boolean;\r\n    private isDrawToTop: boolean;\r\n    private isBigEnoughForAddNode: boolean;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(AddNode.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(AddNode.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!this.canHandle()) {\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element.id !== 'RootElement') {\r\n            return false;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element.id === 'RootElement') {\r\n                    this.start(event, element);\r\n\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mousemove':\r\n                this.drawRect(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.removeRect();\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.addNode();\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawRect(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isRectDrawing) {\r\n            return;\r\n        }\r\n\r\n        evt.stopPropagation();\r\n\r\n        let width = Util.getEventX(evt) - this.x;\r\n        let height = Util.getEventY(evt) - this.y;\r\n\r\n        // rectangle is in a negative area, drawn to upper case. not possibble with svg\r\n        if (width < 0) {\r\n            this.isDrawToLeft = true;\r\n            width *= -1;\r\n        } else {\r\n            this.isDrawToLeft = false;\r\n        }\r\n\r\n        if (height < 0) {\r\n            this.isDrawToTop = true;\r\n            height *= -1;\r\n        } else {\r\n            this.isDrawToTop = false;\r\n        }\r\n\r\n        if (width > this.MIN_SIZE_TO_ADD_NODE && height > this.MIN_SIZE_TO_ADD_NODE) {\r\n            this.isBigEnoughForAddNode = true;\r\n        } else {\r\n            this.isBigEnoughForAddNode = false;\r\n        }\r\n\r\n        this.graph.root.style.cursor = 'pointer';\r\n\r\n        // if line wasnt draw\r\n        if (!this.svgRect) {\r\n\r\n            let rectAddNode = Util.createShape({\r\n                tag: 'rect',\r\n                id: 'addNodeRect',\r\n                x: this.x,\r\n                y: this.y,\r\n                width: 1,\r\n                height: 1,\r\n                class: 'SVGAddNode'\r\n            });\r\n\r\n            let group = Util.createShape({ tag: 'g', id: 'groupAddNode' });\r\n            group.appendChild(rectAddNode);\r\n\r\n            this.graph.root.appendChild(group);\r\n            this.svgRect = rectAddNode;\r\n            this.svgGroupAddNode = group;\r\n        }\r\n        else {\r\n\r\n            let svgRectBBox = this.svgRect.getBBox();\r\n\r\n            // if rect is big enough, show text as helper\r\n            if ((svgRectBBox.width > this.MIN_SIZE_TO_ADD_TEXT\r\n                || svgRectBBox.height > this.MIN_SIZE_TO_ADD_TEXT) && !this.svgTextAddNode) {\r\n\r\n                let textAddNode = Util.createShape({\r\n                    tag: 'text',\r\n                    x: this.x,\r\n                    y: this.y - 5,\r\n                    'font-family': 'Verdana',\r\n                    'font-size': 12,\r\n                    fill: 'black'\r\n                });\r\n                textAddNode.textContent = 'Hold on and move to create a new class';\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n\r\n\r\n                // get correct size of text node\r\n                let sizeClientRect: ClientRect = textAddNode.getBoundingClientRect();\r\n\r\n                let rectBackgroundForText = Util.createShape({\r\n                    tag: 'rect',\r\n                    x: this.x,\r\n                    y: this.y - sizeClientRect.height,\r\n                    width: sizeClientRect.width,\r\n                    height: sizeClientRect.height,\r\n                    fill: '#DDD',\r\n                    'stroke-width': 0\r\n                });\r\n\r\n                this.svgTextRectAddNode = rectBackgroundForText;\r\n                this.svgTextAddNode = textAddNode;\r\n                this.svgGroupAddNode.appendChild(rectBackgroundForText);\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n            }\r\n\r\n            if (this.isDrawToLeft) {\r\n                this.svgRect.setAttributeNS(null, 'x', '' + Util.getEventX(evt));\r\n            }\r\n\r\n            if (this.isDrawToTop) {\r\n                this.svgRect.setAttributeNS(null, 'y', '' + Util.getEventY(evt));\r\n            }\r\n\r\n            // set width and height\r\n            this.svgRect.setAttributeNS(null, 'width', width.toString());\r\n            this.svgRect.setAttributeNS(null, 'height', height.toString());\r\n\r\n            // set color\r\n            if (this.isBigEnoughForAddNode) {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode-ready');\r\n\r\n                // draw text\r\n            }\r\n            else {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeRect(): void {\r\n        this.isRectDrawing = false;\r\n        this.isBigEnoughForAddNode = false;\r\n\r\n        this.graph.root.style.cursor = 'default';\r\n\r\n        if (this.svgGroupAddNode) {\r\n            this.graph.root.removeChild(this.svgGroupAddNode);\r\n            this.svgGroupAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgRect) {\r\n            this.svgRect = undefined;\r\n        }\r\n\r\n        if (this.svgTextAddNode) {\r\n            this.svgTextAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgTextRectAddNode) {\r\n            this.svgTextRectAddNode = undefined;\r\n        }\r\n    }\r\n\r\n    private addNode(): void {\r\n\r\n        if (!this.isBigEnoughForAddNode) {\r\n            this.removeRect();\r\n            return;\r\n        }\r\n\r\n        this.removeRect();\r\n        let node = this.graph.addElementWithValues('Class', { x: this.x, y: this.y });\r\n        this.graph.drawElement(node);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isRectDrawing) {\r\n            return;\r\n        }\r\n        this.isRectDrawing = true;\r\n\r\n        this.x = Util.getEventX(evt);\r\n        this.y = Util.getEventY(evt);\r\n    }\r\n\r\n}\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement, Point } from '../elements/BaseElements';\r\nimport { GraphModel } from '../elements/Model';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Control } from '../Control';\r\nimport { Util } from '../util';\r\n\r\nexport class Drag implements EventHandler {\r\n\r\n    private element: DiagramElement;\r\n    private svgElement: SVGSVGElement;\r\n    private dragging = false;\r\n    private reinsert = false;\r\n    private mouseOffset = new Point();\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        if (!this.canHandle()) {\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if ((!this.dragging) && (element.id !== 'RootElement')) {\r\n                    this.element = element;\r\n                    this.svgElement = <SVGSVGElement>element.$view;\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mouseup':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n\r\n                break;\r\n            case 'mousemove':\r\n                if (this.dragging) {\r\n                    this.drag(event, element);\r\n                }\r\n                break;\r\n            case 'mouseleave':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Drag.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Drag.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private reset() {\r\n        this.dragging = false;\r\n        this.svgElement.style.cursor = 'pointer';\r\n\r\n        /*  WORKAROUND\r\n            Chrome got problem with the Node.appendChild() method.\r\n            Sometimes it works, sometimes not.\r\n            So the background is, in the drag method will the current element be appended\r\n            to front of the svg root.\r\n            If this happend, the click event won't fire.\r\n            So it will be fired manually.\r\n            This problem occurs only in chrome.\r\n        */\r\n        if (Util.isChrome()) {\r\n            let clickEvt = Util.createCustomEvent('click');\r\n            this.svgElement.dispatchEvent(clickEvt);\r\n        }\r\n    }\r\n\r\n    private start(evt: Event | any, element: Control) {\r\n\r\n        this.dragging = true;\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n        this.reinsert = true;\r\n\r\n        this.svgElement.style.cursor = 'move';\r\n    }\r\n\r\n    private drag(evt: Event | any, element: DiagramElement) {\r\n\r\n        if (this.reinsert) {\r\n            if (this.element.id !== 'RootElement') {\r\n                // nesseccary to set the dragged object on top of svg children\r\n                this.graph.root.appendChild(this.svgElement);\r\n            }\r\n\r\n            let dragEvent = Util.createCustomEvent('drag');\r\n            element.$view.dispatchEvent(dragEvent);\r\n        }\r\n        this.reinsert = false;\r\n\r\n        evt.stopPropagation();\r\n\r\n        const translation = this.svgElement.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        const sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        const transX = sx + evt.clientX - this.mouseOffset.x;\r\n        const transY = sy + evt.clientY - this.mouseOffset.y;\r\n        this.svgElement.setAttributeNS(null, 'transform', 'translate(' + transX + ' ' + transY + ')');\r\n        this.element.getPos().addNum(transX - sx, transY - sy);\r\n\r\n        if (this.element instanceof Node) {\r\n            (<Node>this.element).redrawEdges();\r\n        }\r\n\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n\r\n\r\n        // resize svg root\r\n        let maxX = this.element.getPos().x + this.element.getSize().x;\r\n        let maxY = this.element.getPos().y + this.element.getSize().y;\r\n\r\n        let domRectRoot = this.graph.root.getBoundingClientRect();\r\n        if(!domRectRoot){\r\n            return;\r\n        }\r\n\r\n        if(maxX > domRectRoot.width){\r\n            this.graph.root.setAttributeNS(null, 'width', '' + maxX);\r\n        }\r\n        \r\n        if(maxY > domRectRoot.height){\r\n            this.graph.root.setAttributeNS(null, 'height', '' + maxY);\r\n        }\r\n    }\r\n}\r\n","import PropertyChangeSupport from '../PropertyChangeSupport';\r\nimport Data from '../Data';\r\nimport {Adapter} from '../Adapter';\r\nimport ClazzProperty from '../elements/nodes/ClazzProperty';\r\n\r\nexport class GraphListener implements PropertyChangeSupport {\r\n    private $owner: ClazzProperty;\r\n\r\n    constructor(owner: ClazzProperty) {\r\n        this.$owner = owner;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        let adapter = this.$owner.getRoot().getAdapter();\r\n        if (adapter) {\r\n            // messages.add(\"{\\\"class\\\":\\\"de.uniks.networkparser.test.model.House\\\",\\\"id\\\":\\\"H1\\\",\\\"rem\\\":{\\\"floor\\\":4},\\\"upd\\\":{\\\"floor\\\":42}}\");\r\n            let myId =  this.$owner.$owner.getId();\r\n            if (myId && myId.length > 0) {\r\n                let pos = myId.indexOf(':');\r\n                if (pos > 0) {\r\n                    myId = myId.substring(0, pos).trim();\r\n                }\r\n            }\r\n            let myName = this.$owner.getName();\r\n            let remJson = {};\r\n            remJson[myName] = oldValue;\r\n            let updJson = {};\r\n            updJson[myName] = newValue;\r\n            let json = {};\r\n            json['id'] = myId;\r\n            json['rem'] = remJson;\r\n            json['upd'] = updJson;\r\n            let message = JSON.stringify(json);\r\n            (<Adapter> adapter).update(message);\r\n        }\r\n    }\r\n}\r\n","import {Graph} from '../elements/';\r\nimport {EventHandler, EventBus} from '../EventBus';\r\nimport {DiagramElement} from '../elements/';\r\nimport {Util} from '../util';\r\n\r\nexport class ImportFile implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(ImportFile.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(ImportFile.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        let type: string = typeof event;\r\n        if (type !== 'DragEvent') {\r\n            return false;\r\n        }\r\n        let evt: DragEvent = <DragEvent>event;\r\n        if (evt.type === 'dragover') {\r\n            this.handleDragOver(evt);\r\n        } else if (evt.type === 'dragleave') {\r\n            if (this.graph.$view !== evt.target) {\r\n                return false;\r\n            }\r\n            this.setBoardStyle('dragleave');\r\n        } else if (evt.type === 'drop') {\r\n            this.handleLoadFile(evt);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public setBoardStyle(typ: string): boolean {\r\n        let b = this.graph.$view;\r\n        Util.removeClass(b, 'Error');\r\n        Util.removeClass(b, 'Ok');\r\n        Util.removeClass(b, 'Add');\r\n        if (typ === 'dragleave') {\r\n            if (b['errorText']) {\r\n                b.removeChild(b['errorText']);\r\n                b['errorText'] = null;\r\n            }\r\n            return true;\r\n        }\r\n        Util.addClass(b, typ);\r\n        if (typ === 'Error') {\r\n            if (!b['errorText']) {\r\n                b['errorText'] = Util.create({tag: 'div', style: 'margin-top: 30%', value: 'NO TEXTFILE'});\r\n                b.appendChild(b['errorText']);\r\n            }\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private handleLoadFile(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n\r\n        let files = evt.dataTransfer.files; // FileList object.\r\n\r\n        if (files.length > 1) {\r\n            evt.dataTransfer.dropEffect = 'none';\r\n            return;\r\n        }\r\n\r\n        // files is a FileList of File objects. List some properties.\r\n        let reader  = new FileReader();\r\n        let output = [];\r\n        let htmlResult = '';\r\n        let that = this;\r\n        for (let i = 0, f; f = files[i]; i++) {\r\n            reader.onload = function(event) {\r\n                htmlResult = event.target['result'];\r\n                console.log('fileContent: ' + htmlResult);\r\n\r\n                // CHANGE TO INTERNAL OBJECT\r\n                if (that.graph) {\r\n                    that.graph.import(htmlResult);\r\n                }\r\n            };\r\n            reader.readAsText(f);\r\n        }\r\n        this.setBoardStyle('dragleave');\r\n    }\r\n\r\n    private handleDragOver(evt: DragEvent): void {\r\n        let error: boolean = true, n: string, f;\r\n        let files = evt.dataTransfer.files;\r\n        // process all File objects\r\n        if (files && files.length > 0) {\r\n            for (let i: number = 0; i < files.length; i += 1) {\r\n                f = files[i];\r\n                if (f.type.indexOf('text') === 0) {\r\n                    error = false;\r\n                } else if (f.type === '') {\r\n                    n = f.name.toLowerCase();\r\n                    if (n.indexOf('json', n.length - 4) !== -1) {\r\n                        error = false;\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            let items = evt.dataTransfer.items;\r\n            if (items && items.length > 0) {\r\n                for (let z = 0; z < items.length; z ++) {\r\n                    if (items[z].type === '' || items[z].type === 'text/plain') {\r\n                        error = false;\r\n                    }\r\n                }\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.\r\n        if (error) {\r\n            this.dragStyler(evt, 'Error');\r\n        } else if (evt.ctrlKey) {\r\n            this.dragStyler(evt, 'Add');\r\n        } else {\r\n            this.dragStyler(evt, 'Ok');\r\n        }\r\n        /* //evt.target['className'] += ' diagramLoadFile';\r\n        '//console.log('handDragOver');*/\r\n    }\r\n\r\n    private dragStyler(event: Event, typ: string) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n        this.setBoardStyle(typ);\r\n    }\r\n\r\n    private handleDragLeave(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n        evt.dataTransfer.dropEffect = 'link'; // Explicitly show this is a copy.\r\n        evt.target['className'] = 'diagram';\r\n        console.log('handDragLeave');\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Class } from '../elements/nodes/Class';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Association } from '../elements/index';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class NewEdge implements EventHandler {\r\n    private graph: Graph;\r\n    private svgLine: SVGSVGElement;\r\n    private isEdgeDrawing: boolean;\r\n    private sourceNode: Node;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    private lastTargetNode: Node;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(NewEdge.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(NewEdge.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!((<KeyboardEvent>event).ctrlKey || EventBus.isHandlerActiveOrFree('NewEdge', true))) {\r\n            this.removeLine();\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element instanceof Node) {\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n\r\n            case 'mousemove':\r\n                this.drawEdge(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.setNewEdgeToNode(event);\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default: break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawEdge(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        let lineToX = Util.getEventX(evt);\r\n        let lineToy = Util.getEventY(evt);\r\n\r\n        let path = `M${this.x} ${this.y} L${lineToX} ${lineToy}`;\r\n        // if line wasnt draw\r\n        if (!this.svgLine) {\r\n\r\n            let attr = {\r\n                tag: 'path',\r\n                id: 'newEdgePath',\r\n                d: path,\r\n                class: 'SVGEdge'\r\n            };\r\n\r\n            let shape = Util.createShape(attr);\r\n            this.svgLine = shape;\r\n\r\n            this.graph.root.appendChild(shape);\r\n            this.graph.root.appendChild(this.sourceNode.$view);\r\n        }\r\n        else {\r\n\r\n            // set new L path\r\n            this.svgLine.setAttributeNS(null, 'd', path);\r\n\r\n            // get node from position\r\n            let targetNode = this.graph.$graphModel.getNodeByPosition(Util.getEventX(evt), Util.getEventY(evt));\r\n\r\n            // if some targetnode is available, so highlight the node\r\n            if (targetNode) {\r\n\r\n                // reset the last one\r\n                if (this.lastTargetNode && this.lastTargetNode.id !== targetNode.id) {\r\n                    this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n                }\r\n\r\n                this.lastTargetNode = targetNode;\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz-drawedge');\r\n            }\r\n            else if (this.lastTargetNode) {\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeLine(): void {\r\n        this.isEdgeDrawing = false;\r\n\r\n        if (this.svgLine) {\r\n            this.graph.root.removeChild(this.svgLine);\r\n            this.svgLine = null;\r\n        }\r\n\r\n        if (this.lastTargetNode) {\r\n            this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n        }\r\n    }\r\n\r\n    private setNewEdgeToNode(event: Event | any): void {\r\n        // get node from position\r\n        let targetNode = this.graph.$graphModel\r\n            .getNodeByPosition(Util.getEventX(event), Util.getEventY(event));\r\n\r\n        if (!targetNode) {\r\n            this.removeLine();\r\n\r\n            return;\r\n        }\r\n\r\n        this.removeLine();\r\n        let edgeType = this.sourceNode.$defaulEdgeType || 'Association';\r\n\r\n        let jsonData = {\r\n            type: edgeType,\r\n            source: this.sourceNode.id,\r\n            target: targetNode.id\r\n        };\r\n\r\n        let newEdge = this.graph.$graphModel.addEdge(<any>jsonData, true);\r\n        this.graph.drawElement(newEdge);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        this.isEdgeDrawing = true;\r\n        this.sourceNode = element as Class;\r\n\r\n        this.x = this.sourceNode.getPos().x + (this.sourceNode.getSize().x / 2);\r\n        this.y = this.sourceNode.getPos().y + (this.sourceNode.getSize().y / 2);\r\n\r\n        // TODO: get this into util or select\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Node } from '../elements/nodes';\r\nimport { Association } from '../elements/edges';\r\nimport { Util } from '../util';\r\nimport { SymbolLibary } from '../elements/nodes/Symbol';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\nimport Attribute from '../elements/nodes/Attribute';\r\n\r\nexport class Select implements EventHandler {\r\n\r\n    private deleteShape: SVGSVGElement;\r\n    private addEdgeShape: SVGSVGElement;\r\n    private copyNodeShape: SVGSVGElement;\r\n    private graph: Graph;\r\n    private padding = 5;\r\n\r\n    private lastSelectedNode: Element;\r\n    private lastSelectedEdge: Element;\r\n\r\n    private isDragged: boolean;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.deleteShape = SymbolLibary.drawSVG({ type: 'Basket', background: true, id: 'trashcan', tooltip: 'Delete class' });\r\n        this.copyNodeShape = SymbolLibary.drawSVG({ type: 'Copynode', background: true, id: 'copyNode', tooltip: 'Copy class' });\r\n        this.addEdgeShape = SymbolLibary.drawSVG({ type: 'Edgeicon', background: true, id: 'addEdge', tooltip: 'Click and drag to connect this class' });\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        let x = Util.getEventX(event);\r\n        let y = Util.getEventY(event);\r\n\r\n        event.stopPropagation();\r\n        if (event.type === 'drag') {\r\n            this.isDragged = true;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            if (element instanceof Node) {\r\n                this.lastSelectedNode = <Element>element.$view;\r\n            }\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n        }\r\n\r\n        if (event.target['id'] === 'background' || element === this.graph.$graphModel) {\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let e = <Node>element;\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.graph.root.appendChild(this.addEdgeShape);\r\n            this.graph.root.appendChild(this.copyNodeShape);\r\n            this.graph.root.appendChild(element.$view);\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'visible');\r\n\r\n            let x = (e.getPos().x + e.getSize().x) + 5;\r\n            let y = e.getPos().y;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y + this.padding})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.copyNodeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 40 + this.padding})`);\r\n            this.copyNodeShape.onclick = (evt) => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let copyClass = (element).copy();\r\n                copyClass.withPos(nextFreePosition.x, nextFreePosition.y);\r\n                this.graph.drawElement(copyClass);\r\n            };\r\n\r\n            this.addEdgeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 80 + this.padding})`);\r\n            this.addEdgeShape.onmousedown = function () {\r\n                EventBus.setActiveHandler('NewEdge');\r\n                element.$view.dispatchEvent(Util.createCustomEvent('mousedown'));\r\n            };\r\n        }\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let clazz = <Node>element;\r\n\r\n            if (Util.isChrome()) {\r\n                if (this.lastSelectedNode && element.id === this.lastSelectedNode.id && !this.isDragged) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            this.isDragged = false;\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            this.lastSelectedNode = <Element>element.$view;\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete class');\r\n\r\n            // draw textbox to edit clazz in one line\r\n            let divInlineEdit = document.createElement('div');\r\n            divInlineEdit.id = 'inlineEdit';\r\n            divInlineEdit.style.position = 'absolute';\r\n            divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n            divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n            divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n            divInlineEdit.style.zIndex = '42';\r\n\r\n            let inputText = document.createElement('input');\r\n            inputText.type = 'text';\r\n            inputText.style.width = '100%';\r\n            inputText.placeholder = 'Add properties, edit label';\r\n\r\n            divInlineEdit.appendChild(inputText);\r\n            document.body.appendChild(divInlineEdit);\r\n\r\n            inputText.addEventListener('focusout', (evt) => {\r\n\r\n                if (Util.isChrome()) {\r\n                    // only if input is empty, remove the inline edit function\r\n                    if ((!inputText.value || inputText.value.length === 0) && (!this.lastSelectedNode || element.id !== this.lastSelectedNode.id)) {\r\n                        this.removeLastInlineEdit();\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                // only if input is empty, remove the inline edit function\r\n                if ((!inputText.value || inputText.value.length === 0)) {\r\n                    this.removeLastInlineEdit();\r\n                }\r\n            });\r\n\r\n            let g = this.graph;\r\n            let propertyTypes: string[] = ['boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'short', 'String', 'void'];\r\n            inputText.addEventListener('keydown', function (evt) {\r\n\r\n                let keyCode = (<any>evt).which;\r\n                let inputValue = <any>inputText.value;\r\n\r\n                if (Util.endsWith(inputValue, ':') && !document.getElementById('selectPropertyType')) {\r\n                    let selectType = document.createElement('select');\r\n                    selectType.id = 'selectPropertyType';\r\n                    selectType.style.width = '100%';\r\n\r\n                    for (let type of propertyTypes) {\r\n                        let selectOption = document.createElement('option');\r\n                        selectOption.value = type;\r\n                        selectOption.innerHTML = type;\r\n                        selectType.appendChild(selectOption);\r\n                    }\r\n\r\n                    selectType.addEventListener('change', function (evt) {\r\n                        let inputValueSplitted = inputValue.split(':');\r\n                        let selectedPropertyType = selectType.options[selectType.selectedIndex].value;\r\n\r\n                        if (inputValueSplitted.length >= 1) {\r\n                            inputText.value = inputValueSplitted[0].trim() + ' : ' + selectedPropertyType;\r\n                            inputText.focus();\r\n                        }\r\n                    });\r\n\r\n                    divInlineEdit.appendChild(selectType);\r\n                }\r\n                else if (!Util.includes(inputValue, ':')) {\r\n                    let selectType = document.getElementById('selectPropertyType');\r\n\r\n                    if (selectType) {\r\n                        selectType.remove();\r\n                    }\r\n                }\r\n\r\n                if (keyCode !== 13) {\r\n                    return;\r\n                }\r\n\r\n                // attribute\r\n                if ((Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) === false) {\r\n                    if (Util.includes(inputValue, ':')) {\r\n                        clazz.addAttribute(inputValue.trim());\r\n                        clazz.reDraw();\r\n                    } else if (Util.includes(inputValue, '=') ) {\r\n                        let attr: Attribute = null;\r\n                        let name = inputValue.substring(0, inputValue.indexOf('=')).trim();\r\n                        for (let child of clazz.getAttributes() ) {\r\n                            if ( name === child.getName()) {\r\n                                attr = child;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (attr) {\r\n                            attr.updateValue(inputValue.substring(inputValue.indexOf('=') + 1).trim());\r\n                        }\r\n                        clazz.reDraw();\r\n                    }\r\n                }\r\n\r\n                // method\r\n                else if (Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) {\r\n                    clazz.addMethod(inputValue.trim());\r\n                    clazz.reDraw();\r\n                }\r\n                // label\r\n                else if (inputValue.trim().split(' ').length === 1 && inputValue.trim().length > 0) {\r\n                    clazz.updateLabel(inputValue.trim());\r\n                }\r\n\r\n                // reset size\r\n                divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n                divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n                divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n\r\n                inputText.value = '';\r\n\r\n                // remove combobox to select type of property\r\n                let selectType = document.getElementById('selectPropertyType');\r\n\r\n                if (selectType) {\r\n                    selectType.remove();\r\n                }\r\n\r\n                // TODO: reload propertiespanel. not working!\r\n                // event wont dispatch\r\n                // let customEvt = Util.createCustomEvent(EventBus.RELOADPROPERTIES);\r\n                // element.$view.dispatchEvent(customEvt);\r\n            });\r\n\r\n            (<any>divInlineEdit.children[0]).focus();\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Association) {\r\n            this.graph.root.appendChild(element.$view);\r\n            this.graph.root.appendChild(element.$sNode.$view);\r\n            this.graph.root.appendChild(element.$tNode.$view);\r\n\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete edge');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            let edge = <Association>element;\r\n            this.lastSelectedEdge = edge.$view;\r\n\r\n            Util.addClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Select.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Select.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private setTooltipOfShape(shape: SVGSVGElement, tooltip: string): void {\r\n        if (!shape || !shape.hasChildNodes()) {\r\n            return;\r\n        }\r\n\r\n        let titleElement = <SVGSVGElement>shape.childNodes[0];\r\n        if (!titleElement || titleElement.tagName !== 'title') {\r\n            return;\r\n        }\r\n\r\n        titleElement.textContent = tooltip;\r\n    }\r\n\r\n    private resetLastSelectedElements() {\r\n        // reset the last one\r\n        if (this.lastSelectedNode) {\r\n            Util.removeClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.lastSelectedNode = undefined;\r\n        }\r\n\r\n        if (this.lastSelectedEdge) {\r\n            Util.removeClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n            this.lastSelectedEdge = undefined;\r\n        }\r\n\r\n        this.removeLastInlineEdit();\r\n    }\r\n\r\n    private removeLastInlineEdit(): void {\r\n        // remove last inline edit of clazz\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n\r\n            // its not supported in internet explorer\r\n            // lastInlineEdit.remove();\r\n        }\r\n    }\r\n\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\n\r\nexport class Zoom implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n    }\r\n\r\n    public handle(e: any, element: DiagramElement): boolean {\r\n        let delta = e.deltaY || e.wheelDeltaY || -e.wheelDelta;\r\n        let d = 1 + (delta / 1000);\r\n\r\n        let values = this.graph.root.getAttribute('viewBox').split(' ');\r\n        const newViewBox = `${values[0]} ${values[1]} ${parseInt(values[2]) * d} ${parseInt(values[3]) * d}`;\r\n        this.graph.root.setAttribute('viewBox', newViewBox);\r\n\r\n        e.preventDefault();\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Zoom.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Zoom.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n}\r\n","export * from './Drag';\r\nexport * from './Select';\r\nexport * from './Zoom';\r\nexport * from './NewEdge';\r\nexport * from './ImportFile';\r\nexport * from './AddNode';\r\n","import { Association } from '../elements/edges';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport Layout from './Layout';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\n\r\nexport class DagreLayout implements Layout {\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        if (!window['dagre']) {\r\n            return;\r\n        }\r\n        let model = graph.$graphModel;\r\n        let g = new window['dagre'].graphlib.Graph();\r\n\r\n        g.setGraph({ marginx: 100, marginy: 20 }).setDefaultEdgeLabel(function () {\r\n            return {};\r\n        });\r\n\r\n        for (let node of model.nodes) {\r\n            g.setNode(node.id, { width: node.getSize().x, height: node.getSize().y });\r\n        }\r\n\r\n        for (let edge of model.edges) {\r\n            g.setEdge(edge.$sNode.id, edge.$tNode.id);\r\n        }\r\n\r\n        window['dagre'].layout(g);\r\n\r\n        g.nodes().forEach(function (nodeId: string) {\r\n            for (let node of model.nodes) {\r\n                if (node.id === nodeId) {\r\n                    node.withPos(g.node(nodeId).x - g.node(nodeId).width / 2, g.node(nodeId).y - g.node(nodeId).height / 2);\r\n                }\r\n            }\r\n        });\r\n        g.edges().forEach(function (e: any) {\r\n            for (let edge of model.edges) {\r\n                if (edge.$sNode.id === e.v && edge.$tNode.id === e.w) {\r\n                    let size = g.edge(e).points.length;\r\n                    edge.clearPoints();\r\n                    for (let i = 0; i < size; i++) {\r\n                        let point: SVGPoint = g.edge(e).points[i];\r\n                        edge.addPoint(point.x, point.y);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n}\r\n","import {DiagramElement} from '../elements/BaseElements';\r\nimport Layout from './Layout';\r\nimport {Graph} from '../elements/Graph';\r\nimport {Association} from '../elements/edges/Association';\r\nimport {Node} from '../elements/nodes/Node';\r\nimport {Control} from '../Control';\r\n\r\nexport class LayoutGraphMin {\r\n    public nodes: Object = {};\r\n    public edges: Array<Object> = [];\r\n    public outEdges: Object = {};\r\n    public inEdges: Object = {};\r\n    public dummyNodes: Array<LayoutGraphNode> = [];\r\n    public dummyEdges: Object = {};\r\n    public count: number = 0;\r\n    public minRank: number = Number.POSITIVE_INFINITY;\r\n    public maxRank: number = 0;\r\n    public maxHeight: number = 0;\r\n    public maxWidth: number = 0;\r\n    public ranksep: number = 0;\r\n    public edgesLabel: Array<Object> = [];\r\n\r\n    public nodeCount(): number {\r\n        return this.count;\r\n    }\r\n\r\n    public node(id: string) {\r\n        return this.nodes[id];\r\n    }\r\n\r\n    public setNode(id: string, n: LayoutGraphNode) {\r\n        if (n && !this.nodes[id]) {\r\n            this.nodes[id] = n;\r\n            this.count = this.count + 1;\r\n        } else if (!n && this.nodes[id]) {\r\n            delete this.nodes[id];\r\n        }\r\n    }\r\n}\r\n\r\nexport class LayoutGraphNode {\r\n    public id: string;\r\n    public width: number;\r\n    public height: number;\r\n    public x: number;\r\n    public y: number;\r\n    public edgeObj: LayoutGraphEdge;\r\n    public rank: number;\r\n\r\n    constructor(id: string, width: number, height: number, x: number, y: number) {\r\n        this.id = id;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n\r\nexport class LayoutGraphEdge {\r\n    public source: string;\r\n    public target: string;\r\n}\r\n\r\n// \t\t\t\t######################################################### DagreGraph #########################################################\r\nexport class DagreLayoutMin implements Layout {\r\n    public static EDGE_KEY_DELIM = '\\x01';\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        let g, layoutNode, nodes, newEdge, edges;\r\n        let i, n, x, y, sId, tId, split = DagreLayoutMin.EDGE_KEY_DELIM;\r\n        let e: Association;\r\n\r\n        nodes = node['nodes'];\r\n        edges = node['edges'];\r\n        g = new LayoutGraphMin();\r\n\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            g.setNode(n.id, new LayoutGraphNode(n.id, n.getSize().x, n.getSize().y, n.getPos().x, n.getPos().y));\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            sId = this.getNodeId(e.$sNode);\r\n            tId = this.getNodeId(e.$tNode);\r\n            if (sId > tId) {\r\n                let tmp = tId;\r\n                tId = sId;\r\n                sId = tmp;\r\n            }\r\n            let idAB = sId + split + tId + split;\r\n            let idBA = tId + split + sId + split;\r\n            if (sId !== tId && g.edgesLabel.indexOf(idAB) < 0 && g.edgesLabel.indexOf(idBA) < 0) {\r\n                newEdge = {source: sId, target: tId, minlen: 1, weight: 1};\r\n                g.edges.push(newEdge);\r\n                g.edgesLabel.push(idAB);\r\n                // In Edges\r\n                if (!g.inEdges[tId]) {\r\n                    g.inEdges[tId] = [];\r\n                }\r\n                g.inEdges[tId].push(newEdge);\r\n\r\n                // Out Edges\r\n                if (!g.outEdges[sId]) {\r\n                    g.outEdges[sId] = [];\r\n                }\r\n                g.outEdges[sId].push(newEdge);\r\n            }\r\n        }\r\n        this.layouting(g);\r\n        // Set the layouting back\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            layoutNode = g.node(n.id);\r\n            x = n.getPos().x;\r\n            y = n.getPos().y;\r\n            if (x < 1 && y < 1) {\r\n                n.withPos(Math.ceil(layoutNode.x), Math.ceil(layoutNode.y));\r\n            }\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            // OBSOLETE method:  e.calc(graph.canvas);\r\n        }\r\n        graph.draw();\r\n    }\r\n\r\n    public getNodeId(node: Control): string {\r\n        if (node.$owner) {\r\n            return this.getNodeId(node.$owner) || node.id;\r\n        }\r\n        return node.id;\r\n    }\r\n\r\n    public layouting(g: LayoutGraphMin) {\r\n        this.longestPath(g);\r\n        this.normalizeRanks(g);\r\n        this.normalizeEdge(g);\r\n        // this.setSimpleOrder(g);\r\n        this.order(g);\r\n        g.ranksep = 25;\r\n        // remove Dummy\r\n        this.removeDummy(g);\r\n        this.position(g);\r\n    }\r\n\r\n    public setSimpleOrder(g: LayoutGraphMin) {\r\n        let i, n;\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            n.order = n.rank;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Applies heuristics to minimize edge crossings in the graph and sets the best\r\n     * order solution as an order attribute on each node.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Graph must be DAG\r\n     *    2. Graph nodes must be objects with a \"rank\" attribute\r\n     *    3. Graph edges must have the \"weight\" attribute\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Graph nodes will have an \"order\" attribute based on the results of the\r\n     *       algorithm.\r\n     */\r\n    public order(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        let visited = {};\r\n        let node, n, order, i;\r\n        for (i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (n in g.nodes) {\r\n            if (visited[n]) {\r\n                continue;\r\n            }\r\n            visited[n] = true;\r\n            node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank].push(n);\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                g.nodes[layering[order][n]].order = parseInt(n);\r\n            }\r\n        }\r\n        // Fix resolve conflict\r\n        for (order in layering) {\r\n            if (layering[order].length > 1) {\r\n                for (n in layering[order]) {\r\n                    if (layering[order].hasOwnProperty(n) === false) {\r\n                        continue;\r\n                    }\r\n                    let name = layering[order][n];\r\n                    let sum = 0;\r\n                    let weight = 1;\r\n                    let edges = g.dummyEdges[name];\r\n                    if (edges) {\r\n                        for (i in edges) {\r\n                            if (edges.hasOwnProperty(i) === false) {\r\n                                continue;\r\n                            }\r\n                            let edge = edges[i];\r\n                            let nodeU = g.node(edge.target);\r\n                            sum = sum + (edge.weight * nodeU.order);\r\n                            weight = weight + edge.weight;\r\n                        }\r\n                    }\r\n                    g.node(name).barycenter = sum / weight;\r\n                    g.node(name).weight = weight;\r\n                }\r\n            } else if (layering[order].length > 0) {\r\n                for (n in layering[order]) {\r\n                    let name = layering[order][n];\r\n                    g.node(name).barycenter = 1;\r\n                    g.node(name).weight = 1;\r\n                }\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                let node = g.nodes[layering[order][n]];\r\n                node.order = parseInt(n) + node.barycenter * node.weight;\r\n                if (isNaN(node.order)) {\r\n                    console.log('ERROR');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public removeDummy(g: LayoutGraphMin) {\r\n        for (let z in g.dummyNodes) {\r\n            let node = g.dummyNodes[z];\r\n            g.setNode(node.id, null);\r\n        }\r\n        g.dummyNodes = [];\r\n        g.dummyEdges = {};\r\n    }\r\n\r\n    /*\r\n     * Breaks any long edges in the graph into short segments that span 1 layer\r\n     * each. This operation is undoable with the denormalize function.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. The input graph is a DAG.\r\n     *    2. Each node in the graph has a \"rank\" property.\r\n     *\r\n     * Post-condition:\r\n     *\r\n     *    1. All edges in the graph have a length of 1.\r\n     *    2. Dummy nodes are added where edges have been split into segments.\r\n     *    3. The graph is augmented with a \"dummyChains\" attribute which contains\r\n     *       the first dummy in each chain of dummy nodes produced.\r\n     */\r\n    public normalizeEdge(g: LayoutGraphMin): void {\r\n        let i: number = 1;\r\n        for (let id in g.edges) {\r\n            let e: LayoutGraphEdge = <LayoutGraphEdge>g.edges[id];\r\n            let v: string = e.source;\r\n            let vRank = g.node(v).rank;\r\n            const w: string = e.target;\r\n            const wRank: number = g.node(w).rank;\r\n            let name: string;\r\n\r\n            if (wRank === vRank + 1) {\r\n                continue;\r\n            }\r\n\r\n            let dummy;\r\n            for (vRank = vRank + 1; vRank < wRank; ++vRank) {\r\n                name = '_d' + e.source + e.target + (i++);\r\n                let newEdge = {source: v, target: name, minlen: 1, weight: 1};\r\n                dummy = new LayoutGraphNode(name, 0, 0, 0, 0);\r\n                dummy.edgeObj = e;\r\n                dummy.rank = vRank;\r\n                // Dummy Edges\r\n                if (!g.dummyEdges[v]) {\r\n                    g.dummyEdges[v] = [];\r\n                }\r\n                g.dummyEdges[v].push(newEdge);\r\n\r\n                g.dummyNodes.push(dummy);\r\n                g.setNode(dummy.id, dummy);\r\n                v = name;\r\n            }\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Initializes ranks for the input graph using the longest path algorithm. This\r\n     * algorithm scales well and is fast in practice, it yields rather poor\r\n     * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\r\n     * ranks wide and leaving edges longer than necessary. However, due to its\r\n     * speed, this algorithm is good for getting an initial ranking that can be fed\r\n     * into other algorithms.\r\n     *\r\n     * This algorithm does not normalize layers because it will be used by other\r\n     * algorithms in most cases. If using this algorithm directly, be sure to\r\n     * run normalize at the end.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Input graph is a DAG.\r\n     *    2. Input graph node labels can be assigned properties.\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Each node will be assign an (unnormalized) \"rank\" property.\r\n     */\r\n    public longestPath(g: LayoutGraphMin) {\r\n        let i, n, visited = [];\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            visited.push(i);\r\n            n.rank = this.findAllPaths(g, n, 0, visited);\r\n            g.minRank = Math.min(g.minRank, n.rank);\r\n        }\r\n    }\r\n\r\n    public findAllPaths(g: LayoutGraphMin, n: Node, currentCost: number, path: Array<String>) {\r\n        let min: number = 0;\r\n        let id: string;\r\n        let z: number;\r\n        let target;\r\n        if (g.outEdges[n.id]) {\r\n            for (z = 0; z < g.outEdges[n.id].length; z++) {\r\n                id = g.outEdges[n.id][z].target;\r\n                target = g.nodes[id];\r\n                if (path[id]) {\r\n                    min = Math.min(min, target.rank);\r\n                } else if (path.indexOf(id) < 0) {\r\n                    min = Math.min(min, this.findAllPaths(g, target, currentCost - 2, path));\r\n                } else {\r\n                    min = currentCost;\r\n                }\r\n            }\r\n            return min;\r\n        }\r\n        return currentCost;\r\n    }\r\n\r\n    /*\r\n     * Adjusts the ranks for all nodes in the graph such that all nodes v have\r\n     * rank(v) >= 0 and at least one node w has rank(w) = 0.\r\n     */\r\n    public normalizeRanks(g: LayoutGraphMin) {\r\n        let min = g.minRank;\r\n        let value;\r\n        g.maxRank = Number.NEGATIVE_INFINITY;\r\n        g.maxHeight = 0;\r\n        g.maxWidth = 0;\r\n        for (let i in g.nodes) {\r\n            let node = g.nodes[i];\r\n            if (node.rank !== undefined) {\r\n                node.rank -= min;\r\n                value = Math.abs(node.rank);\r\n                if (value > g.maxRank) {\r\n                    g.maxRank = value;\r\n                }\r\n                g.maxHeight = Math.max(g.maxHeight, node.height);\r\n                g.maxWidth = Math.max(g.maxWidth, node.width);\r\n            }\r\n        }\r\n    }\r\n\r\n    public position(g: LayoutGraphMin) {\r\n        this.positionY(g);\r\n        let list = this.positionX(g);\r\n        for (let i in list) {\r\n            for (let pos in list[i]) {\r\n                if (list[i].hasOwnProperty(pos) === false) {\r\n                    continue;\r\n                }\r\n                if (g.node(list[i][pos])) {\r\n                    g.node(list[i][pos]).x = parseInt(pos) * g.maxWidth;\r\n                }\r\n            }\r\n\r\n        }\r\n    }\r\n\r\n    public positionY(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        let rankSep = g.ranksep;\r\n        let prevY = 0;\r\n        for (let layer in layering) {\r\n            let maxHeight = g.maxHeight;\r\n            for (let v in layering[layer]) {\r\n                if (layering[layer].hasOwnProperty(v) === false) {\r\n                    continue;\r\n                }\r\n                let id = layering[layer][v];\r\n                g.nodes[id].y = prevY + maxHeight / 2;\r\n            }\r\n            prevY += maxHeight + rankSep;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\r\n     * function will produce a matrix with the ids of each node.\r\n     */\r\n    public buildLayerMatrix(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        for (let i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (let n in g.nodes) {\r\n            let node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank][node.order] = n;\r\n            }\r\n        }\r\n        return layering;\r\n    }\r\n\r\n    public positionX(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        return layering;\r\n    }\r\n}\r\n","import { Point } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport Layout from './Layout';\r\n\r\nexport class Random implements Layout {\r\n\r\n  public layout(graph: Graph) {\r\n\r\n    let model = graph.$graphModel;\r\n\r\n    if (model.nodes) {\r\n      for (let node of model.nodes) {\r\n        let pos: Point = node.getPos();\r\n        if (pos.x === 0 && pos.y === 0) {\r\n          let x = Util.getRandomInt(0, graph.canvasSize.width);\r\n          let y = Util.getRandomInt(0, graph.canvasSize.height);\r\n          node.withPos(x, y);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","export * from './DagreLayout';\r\nexport * from './Random';\r\nexport * from './DagreLayoutMin';\r\n\r\nimport {DagreLayout} from './DagreLayout';\r\nimport {DagreLayoutMin} from './DagreLayoutMin';\r\nimport {Random} from './Random';\r\nnew DagreLayout();\r\nnew DagreLayoutMin();\r\nnew Random();\r\n","import {VirtualKeyBoard} from './VirtualKeyBoard';\r\n\r\nexport {Point} from './elements/BaseElements';\r\nexport {Bridge, DelegateAdapter} from './Bridge';\r\nexport {Graph} from './elements/Graph';\r\nexport * from './elements/nodes';\r\nexport * from './elements/edges';\r\nexport * from './adapters';\r\nexport * from './UML';\r\nimport {Point} from './elements/BaseElements';\r\nimport {Graph} from './elements/Graph';\r\nimport {ClassEditor} from './elements/ClassEditor';\r\nimport {Bridge} from './Bridge';\r\nimport {Util} from './util';\r\nimport * as nodes  from './elements/nodes';\r\nimport * as edges from './elements/edges';\r\nimport {ScrumBoard} from './ScrumBoard';\r\n\r\nif (!window['Point']) {\r\n    window['Point'] = Point;\r\n    window['Graph'] = Graph;\r\n    window['bridge'] = new Bridge();\r\n    window['Util'] = Util;\r\n    window['Class'] = nodes.Class;\r\n    window['Association'] = edges.Association;\r\n    window['SymbolLibary'] = nodes.SymbolLibary;\r\n    window['ClassEditor'] = ClassEditor;\r\n    window['VirtualKeyBoard'] = VirtualKeyBoard;\r\n    window['ScrumBoard'] = ScrumBoard;\r\n}\r\n","'use strict';\r\nimport { CSS } from './CSS';\r\nimport { Node } from './elements/nodes/Node';\r\nimport { DiagramElement, Point } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport class Util {\r\n\r\n    public static isAutoSave: boolean;\r\n\r\n    static getRandomInt(min: number, max: number): number {\r\n        return Math.floor(Math.random() * (max - min + 1)) + min;\r\n    }\r\n\r\n    static createShape(attrs: any): SVGSVGElement {\r\n        let xmlns = attrs.xmlns || 'http://www.w3.org/2000/svg';\r\n        let shape = document.createElementNS(xmlns, attrs.tag);\r\n\r\n        for (let attr in attrs) {\r\n            if (!attrs.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr !== 'tag') {\r\n                shape.setAttribute(attr, attrs[attr]);\r\n\r\n            }\r\n        }\r\n        return <SVGSVGElement><any>shape;\r\n    }\r\n\r\n    static toPascalCase(value: string): string {\r\n        value = value.charAt(0).toUpperCase() + value.substring(1).toLowerCase();\r\n        return value;\r\n    }\r\n\r\n    static isSVG(tag: string): boolean {\r\n        let i,\r\n            list = ['svg', 'path', 'polygon', 'polyline', 'line', 'title', 'rect', 'filter', 'feGaussianBlur', 'feOffset', 'feBlend', 'linearGradient', 'stop', 'text', 'symbol', 'textPath', 'defs', 'fegaussianblur', 'feoffset', 'feblend', 'circle', 'ellipse', 'g'];\r\n        for (i = 0; i < list.length; i += 1) {\r\n            if (list[i] === tag) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    static createHTML(node: any): HTMLElement {\r\n        return <HTMLElement>this.create(node);\r\n    }\r\n    static create(node: any): Element {\r\n        let style, item, xmlns, key, tag, k;\r\n        if (document.createElementNS && (this.isSVG(node.tag) || node.xmlns)) {\r\n            if (node.xmlns) {\r\n                xmlns = node.xmlns;\r\n            } else {\r\n                xmlns = 'http://www.w3.org/2000/svg';\r\n            }\r\n            if (node.tag === 'img' && xmlns) {\r\n                item = document.createElementNS(xmlns, 'image');\r\n                item.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\r\n                item.setAttributeNS('http://www.w3.org/1999/xlink', 'href', node.src);\r\n            } else {\r\n                item = document.createElementNS(xmlns, node.tag);\r\n            }\r\n        } else {\r\n            item = document.createElement(node.tag);\r\n        }\r\n        tag = node.tag.toLowerCase();\r\n        for (key in node) {\r\n            if (!node.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            k = key.toLowerCase();\r\n            if (node[key] === null) {\r\n                continue;\r\n            }\r\n            if (k === 'tag' || k.charAt(0) === '$' || k === '$graphModel') {\r\n                continue;\r\n            }\r\n            if (k.charAt(0) === '#') {\r\n                item[k.substring(1)] = node[key];\r\n                continue;\r\n            }\r\n            if (k === 'rotate') {\r\n                item.setAttribute('transform', 'rotate(' + node[key] + ',' + node.$graphModel.x + ',' + node.$graphModel.y + ')');\r\n                continue;\r\n            }\r\n            if (k === 'value') {\r\n                if (!node[key]) {\r\n                    continue;\r\n                }\r\n                if (tag !== 'input') {\r\n                    if (tag === 'text') {// SVG\r\n                        item.appendChild(document.createTextNode(node[key]));\r\n                    } else {\r\n                        item.innerHTML = node[key];\r\n                    }\r\n                } else {\r\n                    item[key] = node[key];\r\n                }\r\n                continue;\r\n            }\r\n            if (k.indexOf('on') === 0) {\r\n                this.bind(item, k.substring(2), node[key]);\r\n                continue;\r\n            }\r\n            if (k.indexOf('-') >= 0) {\r\n                item.style[key] = node[key];\r\n            } else {\r\n                if (k === 'style' && typeof (node[key]) === 'object') {\r\n                    for (style in node[key]) {\r\n                        if (!node[key].hasOwnProperty(style)) {\r\n                            continue;\r\n                        }\r\n                        if (node[key][style]) {\r\n                            if ('transform' === style) {\r\n                                item.style.transform = node[key][style];\r\n                                item.style.msTransform = item.style.MozTransform = item.style.WebkitTransform = item.style.OTransform = node[key][style];\r\n                            } else {\r\n                                item.style[style] = node[key][style];\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    item.setAttribute(key, node[key]);\r\n                }\r\n            }\r\n        }\r\n        if (node.$parent) {\r\n            node.$parent.appendChild(item);\r\n        }\r\n        if (node.$graphModel) {\r\n            item.$graphModel = node.$graphModel;\r\n        }\r\n        return item;\r\n    }\r\n\r\n    static setSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttribute('width', value);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.setAttribute('height', value);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setAttributeSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttributeNS(null, 'width', value);\r\n        value = Util.getValue(height);\r\n        item.setAttributeNS(null, 'height', value);\r\n    }\r\n\r\n    static setStyleSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setPos(item: any, x: number, y: number): void {\r\n        if (item.x && item.x.baseVal) {\r\n            item.style.left = x + 'px';\r\n            item.style.top = y + 'px';\r\n        } else {\r\n            item.x = x;\r\n            item.y = y;\r\n        }\r\n    }\r\n\r\n    static getValue(value: string | number): number {\r\n        return parseInt(('0' + value).replace('px', ''), 10);\r\n    }\r\n\r\n    static isIE(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('.net') > -1;\r\n    }\r\n\r\n    static isEdge(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('edge') > -1;\r\n    }\r\n\r\n    static isFireFox(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n    }\r\n\r\n    static isSafari(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        return navigator.userAgent.toLowerCase().indexOf('safari') > -1 && !isEdge;\r\n    }\r\n\r\n    static isOpera(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('opera') > -1;\r\n    }\r\n\r\n    static isChrome(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        let isSafari = Util.isSafari();\r\n        return navigator.userAgent.toLowerCase().indexOf('chrome') > -1 && !isEdge && isSafari;\r\n    }\r\n\r\n    static getEventX(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetX'] : event.layerX;\r\n    }\r\n\r\n    static getEventY(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetY'] : event.layerY;\r\n    }\r\n\r\n    static getNumber(str: string): number {\r\n        return parseInt((str || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    static getStyle(styleProp: string): CSS {\r\n        let i, style, diff, current, ref, el = document.createElement('div'), css;\r\n        document.body.appendChild(el);\r\n        css = new CSS(styleProp);\r\n        ref = new CSS(styleProp, el).css;\r\n        style = window.getComputedStyle(el, null);\r\n        el.className = styleProp;\r\n        current = new CSS(styleProp, el).css;\r\n        diff = Util.getNumber(style.getPropertyValue('border-width'));\r\n        for (i in current) {\r\n            if (!current.hasOwnProperty(i)) {\r\n                continue;\r\n            }\r\n            if (i === 'width' || i === 'height') {\r\n                if (Util.getNumber(current[i]) !== 0 && Util.getNumber(current[i]) + diff * 2 !== Util.getNumber(ref[i])) {\r\n                    css.add(i, current[i]);\r\n                }\r\n            } else if (current[i] !== ref[i]) {\r\n                css.add(i, current[i]);\r\n            }\r\n        }\r\n        document.body.removeChild(el);\r\n        return css;\r\n    }\r\n\r\n    static sizeOf(item: string | any, node?: Node): ClientRect {\r\n        let board;\r\n        let rect: ClientRect;\r\n        let addBoard: boolean;\r\n        if (!item) {\r\n            return undefined;\r\n        }\r\n        if (node) {\r\n            board = node.$owner.$view;\r\n            addBoard = false;\r\n        }\r\n\r\n        if (!board) {\r\n            addBoard = true;\r\n            board = Util.createShape({ tag: 'svg', id: 'root', width: 200, height: 200 });\r\n            document.body.appendChild(board);\r\n        }\r\n        if (board.tagName === 'svg') {\r\n            if (typeof item === 'string') {\r\n                item = Util.create({ tag: 'text', $font: true, value: item });\r\n                item.setAttribute('width', '5px');\r\n            }\r\n        } else if (typeof item === 'string') {\r\n            item = document.createTextNode(item);\r\n        }\r\n        board.appendChild(item);\r\n        rect = item.getBoundingClientRect();\r\n        board.removeChild(item);\r\n\r\n        if (addBoard) {\r\n            document.body.removeChild(board);\r\n        }\r\n        return rect;\r\n    }\r\n\r\n    static getColor(style: string, defaultColor?: string) {\r\n        if (style) {\r\n            if (style.toLowerCase() === 'create') {\r\n                return '#008000';\r\n            }\r\n            if (style.toLowerCase() === 'nac') {\r\n                return '#FE3E3E';\r\n            }\r\n            if (style.indexOf('#') === 0) {\r\n                return style;\r\n            }\r\n        }\r\n        if (defaultColor) {\r\n            return defaultColor;\r\n        }\r\n        return '#000';\r\n    }\r\n\r\n    public static utf8$to$b64(str: string): string {\r\n        return window.btoa(encodeURIComponent(str));\r\n    }\r\n\r\n    public static showSVG(control: DiagramElement) {\r\n        let svg = Util.create({\r\n            tag: 'svg',\r\n            style: { left: control.getPos().x, top: control.getPos().y, position: 'absolute' }\r\n        });\r\n        let child = control.getSVG();\r\n        if (child) {\r\n            svg.appendChild(child);\r\n        }\r\n        Util.setSize(svg, control.getSize().x, control.getSize().y);\r\n        document.body.appendChild(svg);\r\n    }\r\n\r\n    public static toJson(ref: JSON | Object): Object {\r\n        let result = {};\r\n        return Util.copy(result, ref, false, false);\r\n    }\r\n\r\n    public static initControl(parent: Control, control: Control, type: string, id: string, json: JSON | Object) {\r\n        if (typeof control.init === 'function') {\r\n            control.init(parent, type, id);\r\n        }\r\n        if (typeof control.load === 'function') {\r\n            control.load(json);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * copy One Json into another\r\n     * @function\r\n     * @param ref reference Json\r\n     * @param src source Json\r\n     * @param full all attributes include privet $\r\n     * @param replace set the original reference or copy it\r\n     * @returns ref\r\n     * @name copy\r\n     */\r\n    public static copy(ref: JSON | Object, src: JSON | Object, full: boolean, replace: boolean) {\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (replace) {\r\n                        ref[i] = src[i];\r\n                        continue;\r\n                    }\r\n                    if (!ref[i]) {\r\n                        if (src[i] instanceof Array) {\r\n                            ref[i] = [];\r\n                        } else {\r\n                            ref[i] = {};\r\n                        }\r\n                    }\r\n                    Util.copy(ref[i], src[i], full, false);\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref[i] = src[i];\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    public static xmlstringify(text: string): string {\r\n        text = text.replace('<', '&lt;');\r\n        text = text.replace('>', '&gt;');\r\n        return text;\r\n    }\r\n\r\n    public static toXML(ref: JSON | Object | any, src: JSON | Object | any, full: boolean, doc: Document): any {\r\n        let name;\r\n        if (!ref) {\r\n            name = src.constructor.name;\r\n            doc = document.implementation.createDocument(null, name, null);\r\n            ref = doc.childNodes[0];\r\n        }\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (!ref.getAttribute(i)) {\r\n                        if (src[i] instanceof Array) {\r\n                            for (let c in src[i]) {\r\n                                if (!src[i].hasOwnProperty(c)) {\r\n                                    continue;\r\n                                }\r\n                                name = src[i][c].constructor.name;\r\n                                let child = doc.createElement(name);\r\n                                ref.appendChild(child);\r\n                                Util.toXML(child, src[i][c], full, doc);\r\n                            }\r\n                        } else {\r\n                            name = src[i].constructor.name;\r\n                            let child = doc.createElement(name);\r\n                            ref.appendChild(child);\r\n                            Util.toXML(child, src[i], full, doc);\r\n                        }\r\n                    } else {\r\n                        Util.toXML(ref.getAttribute(i), src[i], full, doc);\r\n                    }\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref.setAttribute(i, src[i]);\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    static Range(min: Point, max: Point, x: number, y: number) {\r\n        max.x = Math.max(max.x, x);\r\n        max.y = Math.max(max.y, y);\r\n        min.x = Math.min(min.x, x);\r\n        min.y = Math.min(min.y, y);\r\n    }\r\n\r\n    public static getPosition(m: number, n: number, entity: DiagramElement, refCenter: Point) {\r\n        let t, p = [], list, distance = [], min = 999999999, position, i, step = 15;\r\n        let pos: Point = entity.getPos();\r\n        let size: Point = entity.getSize();\r\n        list = [Point.LEFT, Point.RIGHT];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = this.getLRPosition(m, n, entity, list[i]);\r\n            if (t.y >= pos.y && t.y <= (pos.y + size.y + 1)) {\r\n                t.y += (entity['$' + list[i]] * step);\r\n                if (t.y > (pos.y + size.y)) {\r\n                    // Alternative\r\n                    t = Util.getUDPosition(m, n, entity, Point.DOWN, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        list = [Point.UP, Point.DOWN];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = Util.getUDPosition(m, n, entity, list[i]);\r\n            if (t.x >= pos.x && t.x <= (pos.x + size.x + 1)) {\r\n                t.x += (entity['$' + list[i]] * step);\r\n                if (t.x > (pos.x + size.x)) {\r\n                    // Alternative\r\n                    t = this.getLRPosition(m, n, entity, Point.RIGHT, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        for (i = 0; i < p.length; i += 1) {\r\n            if (distance[i] < min) {\r\n                min = distance[i];\r\n                position = p[i];\r\n            }\r\n        }\r\n        return position;\r\n    }\r\n\r\n    public static getUDPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let x, y: number = pos.y;\r\n        if (p === Point.DOWN) {\r\n            y += size.y;\r\n        }\r\n        x = (y - n) / m;\r\n        if (step) {\r\n            x += e['$' + p] * step;\r\n            if (x < pos.x) {\r\n                x = pos.x;\r\n            } else if (x > (pos.x + size.x)) {\r\n                x = pos.x + size.x;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static getLRPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let y: number, x: number = pos.x;\r\n        if (p === Point.RIGHT) {\r\n            x += size.x;\r\n        }\r\n        y = m * x + n;\r\n        if (step) {\r\n            y += e['$' + p] * step;\r\n            if (y < pos.y) {\r\n                y = pos.y;\r\n            } else if (y > (pos.y + size.y)) {\r\n                y = pos.y + size.y;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static hasClass(element: Element, cls: string) {\r\n        let className = element.getAttribute('class');\r\n        return className.indexOf(cls) > 0;\r\n    }\r\n    public static addClass(element: Element, cls: string) {\r\n        if (!Util.hasClass(element, cls)) {\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className + ' ' + cls);\r\n        }\r\n    }\r\n    public static removeClass(element: Element, cls: string) {\r\n        if (Util.hasClass(element, cls)) {\r\n            let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className.replace(reg, ' ').trim());\r\n        }\r\n    }\r\n\r\n    public static startsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.startsWith) {\r\n            return s.indexOf(searchS) === 0;\r\n        }\r\n\r\n        return s.startsWith(searchS);\r\n    }\r\n\r\n    public static endsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.endsWith) {\r\n            let lastIndex = s.lastIndexOf(searchS);\r\n            return lastIndex !== -1 && lastIndex === (s.length - 1);\r\n        }\r\n\r\n        return s.endsWith(searchS);\r\n    }\r\n\r\n    public static includes(s: string, searchS: string): boolean {\r\n        if (!String.prototype.includes) {\r\n            let idx = s.indexOf(searchS);\r\n            return idx > -1;\r\n        }\r\n        if (s === null) {\r\n            return false;\r\n        }\r\n\r\n        return s.includes(searchS);\r\n    }\r\n\r\n    public static isParentOfChild(parent: Element, child: Element): boolean {\r\n\r\n        if (!parent || !child) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isIE()) {\r\n            let children = parent.childNodes;\r\n            // let found = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                let childItem = children[i];\r\n                if (childItem === child) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        return parent.contains(child);\r\n    }\r\n\r\n    public static createCustomEvent(type: string, params?: any): CustomEvent {\r\n        let evt: CustomEvent;\r\n\r\n        if (typeof window['CustomEvent'] !== 'function') {\r\n            params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n            evt = document.createEvent('CustomEvent');\r\n            evt.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\r\n            return evt;\r\n        }\r\n\r\n        evt = new CustomEvent(type);\r\n\r\n        return evt;\r\n    }\r\n\r\n    public static saveToLocalStorage(model: any): boolean {\r\n        if (!this.isAutoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isLocalStorageSupported()) {\r\n            if (model) {\r\n                if (model.$isLoading) {\r\n                    return false;\r\n                }\r\n                let jsonObj = Util.toJson(model);\r\n                let data = JSON.stringify(jsonObj, null, '\\t');\r\n                localStorage.setItem('diagram', data);\r\n            } else {\r\n                localStorage.removeItem('diagram');\r\n            }\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static getDiagramFromLocalStorage(): string {\r\n        if (Util.isLocalStorageSupported()) {\r\n            return localStorage.getItem('diagram');\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    public static isLocalStorageSupported(): boolean {\r\n        if (this.isEdge()) {\r\n            return false;\r\n        }\r\n        return localStorage !== undefined;\r\n    }\r\n}\r\n"],"sourceRoot":""}
Severity: Minor
Found in doc/diagram.js.map by fixme

TODO found
Open

{"version":3,"sources":["webpack://DiagramJS/webpack/bootstrap","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Adapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Bridge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/BridgeElement.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/CSS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Control.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Data.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventBus.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/JSEPS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Palette.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertiesPanel.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertyBinder.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/RGBColor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/SVGConverter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/ScrumBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Toolbar.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/UML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/VirtualKeyBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/JavaAdapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/BaseElements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/ClassEditor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Graph.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Model.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregate.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Association.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Composition.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Generalisation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Implements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Attribute.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/AutoComplete.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/BR.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Button.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Class.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/ClazzProperty.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Dice.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Div.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Form.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/HTML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/InfoText.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Input.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Label.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Method.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Node.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/SO.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/StereoType.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Symbol.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Table.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/AddNode.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Drag.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/GraphListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/ImportFile.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/NewEdge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Select.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Zoom.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayout.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayoutMin.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/Random.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/main.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/util.ts"],"names":[],"mappings":"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","file":"diagram.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./main.ts\");\n","export abstract class Adapter {\r\n    public id: string = null;\r\n\r\n    abstract update(evt: Object): boolean;\r\n}\r\n","'use strict';\r\n\r\nimport * as controls from './elements/nodes';\r\nimport * as adapters from './adapters';\r\nimport Data from './Data';\r\nimport {Control} from './Control';\r\nimport {Adapter} from './Adapter';\r\nimport {Graph} from './elements';\r\nimport {Util} from './util';\r\nimport {Point} from './elements';\r\n\r\nexport class Bridge extends Control {\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public static version: string = '0.42.01.1601007-1739';\r\n    private controlFactory: Object = {};\r\n    private adapterFactory: Object = {};\r\n    private controls: Object = {};\r\n    private adapters: Object = {};\r\n    private items: Object = {};\r\n    private controlNo: number = 1;\r\n    private online: boolean = true;\r\n    private language: string = navigator.language.toUpperCase();\r\n    private toolBar: HTMLElement;\r\n\r\n    constructor(viewRoot?: HTMLElement) {\r\n        super();\r\n        let i;\r\n\r\n        if (viewRoot) {\r\n            this.$view = viewRoot;\r\n        }\r\n\r\n        let keys: string[] = Object.keys(adapters);\r\n        for (i = 0; i < keys.length; i++) {\r\n            let child = adapters[keys[i]];\r\n            if (child && child.id) {\r\n                this.adapterFactory[child.id.toLowerCase()] = child;\r\n            }\r\n        }\r\n\r\n        keys = Object.keys(controls);\r\n        for (i = 0; i < keys.length; i++) {\r\n            this.addControl(controls[keys[i]]);\r\n        }\r\n        this.addControl(Graph);\r\n\r\n        let that = this;\r\n        window.addEventListener('load', function () {\r\n            let updateOnlineStatus = function updateOnlineStatus() {\r\n                that.setOnline(navigator.onLine);\r\n            };\r\n            window.addEventListener('online', updateOnlineStatus);\r\n            window.addEventListener('offline', updateOnlineStatus);\r\n        });\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public setOnline(value: boolean) {\r\n        this.online = value;\r\n        if (this.toolBar.children[0]) {\r\n            this.toolBar.children[0].className = value ? 'online' : 'offline';\r\n        }\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addToolbar(): boolean {\r\n        if (this.toolBar) {\r\n            return false;\r\n        }\r\n        this.toolBar = document.createElement('div');\r\n        this.toolBar.className = 'onlineStatus';\r\n        let child = document.createElement('div');\r\n        child.className = 'online';\r\n        this.toolBar.appendChild(child);\r\n        child = document.createElement('div');\r\n        child.className = 'lang';\r\n        child.innerHTML = this.language;\r\n        this.toolBar.appendChild(child);\r\n\r\n        let body: HTMLElement = document.getElementsByTagName('body')[0];\r\n        body.insertBefore(this.toolBar, body.firstChild);\r\n        // Refresh Online Status\r\n        this.setOnline(this.online);\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addListener = function (listener: any) {\r\n        this.listener.push(listener);\r\n    };\r\n\r\n    public addControl(control: any) {\r\n        if (control && control.name) {\r\n            this.controlFactory[control.name.toLowerCase()] = control;\r\n        }\r\n    }\r\n\r\n    public getId(): string {\r\n        return 'control' + (this.controlNo++);\r\n    }\r\n\r\n    public adapterUpdate(message: string) {\r\n        let keys: string[] = Object.keys(this.adapters);\r\n        if (keys.length > 0) {\r\n            let i;\r\n            for (i = 0; i < keys.length; i++) {\r\n                let adapterList = this.adapters[keys[i]];\r\n                if (adapterList instanceof Adapter) {\r\n                    adapterList.update(message);\r\n                } else {\r\n                    for (let adapter of adapterList) {\r\n                        adapter.update(message);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        let config = {}, className: string, id: string;\r\n        if (typeof(json) === 'string') {\r\n            // Only a String\r\n            config['id'] = '' + json;\r\n            let item = document.getElementById(config['id']);\r\n            let className: string;\r\n            if (item) {\r\n                className = item.getAttribute('class');\r\n                if (!className) {\r\n                    className = item.getAttribute('classname') || '';\r\n                }\r\n                // Found Element and now config Data element\r\n                if (item.getAttribute('property')) {\r\n                    if (this.hasItem(item.getAttribute('property'))) {\r\n                        let data = this.getItem(item.getAttribute('property'));\r\n                        for (let key in data.prop) {\r\n                            if (item.getAttribute(key)) {\r\n                                data.setValue(key, item.getAttribute(key));\r\n                            }\r\n                        }\r\n                        if (item.getAttribute('property')) {\r\n                            // TODO: FIXME!!!\r\n                            // data.property = item.getAttribute(\"property\");\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                className = '' + json;\r\n            }\r\n            className = className.toLowerCase();\r\n            config['className'] = className;\r\n        } else {\r\n            config = <JSON>json;\r\n        }\r\n        // Config validate\r\n        if (!config['id']) {\r\n            config['id'] = this.getId();\r\n        }\r\n        // Backup for Old Graph\r\n        if (!config['className'] && (config['type'] === 'clazzdiagram' || config['type'] === 'objectdiagram')) {\r\n            config['className'] = 'graph';\r\n        }\r\n\r\n        className = config['className'] || config['class'];\r\n        className = className.toLocaleLowerCase();\r\n        id = config['id'];\r\n\r\n        // Check For Control or Data\r\n        if ((config['prop'] || config['upd'] || config['rem']) && this.controls[id] === null) {\r\n            // Its Data\r\n            let newData = !this.hasItem(config['id']);\r\n            let item: Data = this.getItem(config['id']);\r\n            // TODO: FIXME!!!\r\n            // if (id && className && !item.property) {\r\n            //      item.property = className;\r\n            // }\r\n            if (newData) {\r\n                for (let i in this.controls) {\r\n                    if (this.controls.hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    this.controls[i].addItem(this, item);\r\n                }\r\n            }\r\n            // Add all Values to item\r\n            item.addProperties(config);\r\n            // Bridge.addProperties(config['prop'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return item;\r\n        }\r\n\r\n        let control;\r\n        if (this.controls[id]) {\r\n            control = this.controls[id];\r\n            control.initControl(json);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return control;\r\n        }\r\n\r\n        if (typeof(this.controlFactory[className]) === 'object' || typeof(this.controlFactory[className]) === 'function') {\r\n            let obj = this.controlFactory[className];\r\n            control = new obj(json);\r\n            Util.initControl(owner || this, control, config['property'], id, json);\r\n\r\n            if (control.id) {\r\n                this.controls[control.id] = control;\r\n            } else {\r\n                this.controls[id] = control;\r\n            }\r\n\r\n            // create DataObject and register this control as listener to it\r\n            // let obj = {id:id};\r\n            // let data: Data = this.load(obj);\r\n            // data.addListener(this);\r\n\r\n            // Try to Show\r\n            if (typeof control.getSVG === 'function' && typeof control.getSize === 'function') {\r\n                let size: Point = control.getSize();\r\n\r\n                let svg = Util.createShape({\r\n                    tag: 'svg',\r\n                    id: 'root',\r\n                    width: size.x,\r\n                    height: size.y\r\n                });\r\n\r\n                let view = control.getSVG();\r\n                svg.appendChild(view);\r\n                document.getElementsByTagName('body')[0].appendChild(svg);\r\n            }\r\n            return control;\r\n        }\r\n        return null;\r\n        // bridge.load('{class:table, columns:[{id:'firstname'}, {id:'lastname'}]}');\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n\r\n        if (this.items[id] !== undefined) {\r\n            return true;\r\n        }\r\n        id = id.split('.')[0];\r\n        return (this.items[id] !== undefined);\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return this.items;\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        let item = this.items[id];\r\n        if (!item) {\r\n            id = id.split('.')[0];\r\n            item = this.items[id];\r\n            if (!item) {\r\n                item = new Data();\r\n                item.id = id;\r\n                this.items[id] = item;\r\n            }\r\n        }\r\n        return item;\r\n    }\r\n\r\n    /**\r\n     * Method for executing user input -> Event\r\n     * @param object\r\n     * @param attribute\r\n     * @param oldValue\r\n     * @param newValue\r\n     * @returns {boolean}\r\n     */\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        alert('Bridge.setValue: oldVal:' + oldValue + ', newVal: ' +  + newValue + ', attribute: ' + attribute + ', object: ' + JSON.stringify(object));\r\n        let obj: Data;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n\r\n        } else if (object instanceof Data) {\r\n            obj = object;\r\n            id = object.id;\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = <Data>object;\r\n            id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return false;\r\n        }\r\n        if (obj) {\r\n            // Execute Update to Data\r\n            obj.setValue(attribute, newValue);\r\n            // Could be done here, but currently is done at this.execueChange..:\r\n            // obj[attribute] = value;\r\n        }\r\n\r\n        /*let tmp = {'id': id};\r\n        if (typeof(newValue) !== 'undefined' && newValue !== null) {\r\n            let upd = {};\r\n            upd[attribute] = newValue;\r\n            tmp['upd'] = upd;\r\n        }\r\n        if (typeof(oldValue) !== 'undefined' && oldValue !== null) {\r\n            let rem = {};\r\n            rem[attribute] = oldValue;\r\n            tmp['rem'] = rem;\r\n        }*/\r\n        // this.load(tmp);\r\n        return true;\r\n    }\r\n\r\n    public getValue(object: Object, attribute: string): any {\r\n        let obj: Object;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = object;\r\n            // id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return;\r\n        }\r\n        if (obj) {\r\n            if (obj.hasOwnProperty(attribute)) {\r\n                return obj[attribute];\r\n            } else if (obj instanceof Data) {\r\n                return (<Data>obj).getValue(attribute);\r\n            } else {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    public getNumber(object: Object, attribute: string, defaultValue: number = 0): number {\r\n        let res = <number>this.getValue(object, attribute);\r\n        if (typeof res === 'number') {\r\n            return res;\r\n        } else if (typeof res === 'string') {\r\n            // check whether res is a number\r\n            let value = Number(res);\r\n            if (value || value === 0) {\r\n                return value;\r\n            }\r\n        }\r\n        return defaultValue;\r\n    }\r\n\r\n    getControl(controlId: string) {\r\n        return this.controls[controlId];\r\n    }\r\n\r\n    public registerListener(eventType: string, control: Control, callBackfunction: string): Control {\r\n        if (typeof control === 'string') {\r\n            control = this.getControl(<string>control);\r\n        }\r\n        if (!control) {\r\n            return null;\r\n        }\r\n        if (eventType) {\r\n            eventType = eventType.toLowerCase();\r\n        }\r\n        control.registerListenerOnHTMLObject(eventType);\r\n        if (callBackfunction) {\r\n            let adapter: DelegateAdapter = new DelegateAdapter();\r\n            adapter.callBackfunction = callBackfunction;\r\n            adapter.id = control.getId();\r\n            this.addAdapter(adapter, eventType);\r\n        }\r\n        return control;\r\n    }\r\n\r\n    public addAdapter(adapter: Adapter | string, eventType: string): Adapter {\r\n        if (!eventType) {\r\n            eventType = '';\r\n        }\r\n        let result: Adapter;\r\n        if (adapter instanceof String) {\r\n            let obj = this.adapterFactory[adapter.toLowerCase()];\r\n            result = new obj();\r\n        } else {\r\n            result = <Adapter>adapter;\r\n        }\r\n        let handlers = this.adapters[eventType];\r\n\r\n        if (handlers === null || handlers === undefined) {\r\n            handlers = [];\r\n            this.adapters[eventType] = handlers;\r\n        }\r\n        handlers.push(result);\r\n        return result;\r\n    }\r\n\r\n    public fireEvent(evt: Event): void {\r\n        let handlers = this.adapters[''];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n        handlers = this.adapters[evt['eventType']];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport class DelegateAdapter extends Adapter {\r\n    adapter: Adapter;\r\n    callBackfunction: string;\r\n\r\n    update(evt: Event): boolean {\r\n        if (this.adapter) {\r\n            this.adapter.update(evt);\r\n            return true;\r\n        } else if (this.callBackfunction) {\r\n            return this.executeFunction(this.callBackfunction, evt);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public setAdapter(adapter: Adapter): boolean {\r\n        this.adapter = adapter;\r\n        return true;\r\n    }\r\n\r\n    private executeFunction(strValue: string, evt: Event): boolean {\r\n        let scope = window;\r\n        let scopeSplit = strValue.split('.');\r\n        for (let i = 0; i < scopeSplit.length - 1; i++) {\r\n            scope = scope[scopeSplit[i]];\r\n            if (scope === undefined) {\r\n                return false;\r\n            }\r\n        }\r\n        let fn: any = scope[scopeSplit[scopeSplit.length - 1]];\r\n        if (typeof fn === 'function') {\r\n            fn.call(scope);\r\n            return true;\r\n        } else {\r\n            window['callBack1'].update(evt);\r\n\r\n        }\r\n        return false;\r\n    }\r\n}\r\n","'use strict';\r\nimport Data from './Data';\r\n\r\nexport default class BridgeElement {\r\n    private static elementSet: BridgeElement[] = [];\r\n    public model: Data;\r\n    public id: string;\r\n    public gui: HTMLElement;\r\n\r\n    constructor(model: Data) {\r\n        this.model = model;\r\n        this.id = model.id;\r\n        BridgeElement.elementSet.push(this);\r\n    }\r\n}\r\n","import {Util} from './util';\r\n\r\n// \t\t\t\t######################################################### CSS #########################################################\r\nexport class CSS {\r\n    public css: Object;\r\n    private name: string;\r\n\r\n    constructor(name: string, item?: any) {\r\n        let i, value, border: string, prop, el;\r\n        this.name = name;\r\n        this.css = {};\r\n        if (!item) {\r\n            return;\r\n        }\r\n\r\n        el = window.getComputedStyle(item, null);\r\n        border = el.getPropertyValue('border');\r\n        for (i in el) {\r\n            prop = i;\r\n            value = el.getPropertyValue(prop);\r\n            if (value && value !== '') {\r\n                // optimize CSS\r\n                if (border) {\r\n                    if (prop === 'border-bottom' || prop === 'border-right' || prop === 'border-top' || prop === 'border-left') {\r\n                        if (value !== border) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-color' || prop === 'border-bottom-color' || prop === 'border-right-color' || prop === 'border-top-color' || prop === 'border-left-color') {\r\n                        if (border.substring(border.length - value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-width') {\r\n                        if (border.substring(0, value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else {\r\n                        this.css[prop] = value;\r\n                    }\r\n                } else {\r\n                    this.css[prop] = value;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public static getStdDef() {\r\n        let child, def = Util.create({tag: 'defs'});\r\n\r\n        child = Util.create({tag: 'filter', id: 'drop-shadow'});\r\n        child.appendChild(Util.create({tag: 'feGaussianBlur', 'in': 'SourceAlpha', result: 'blur-out', stdDeviation: 2}));\r\n        child.appendChild(Util.create({tag: 'feOffset', 'in': 'blur-out', dx: 2, dy: 2}));\r\n        child.appendChild(Util.create({tag: 'feBlend', 'in': 'SourceGraphic', mode: 'normal'}));\r\n        def.appendChild(child);\r\n        child = Util.create({tag: 'linearGradient', id: 'reflect', x1: 0, x2: 0, y1: '50%', y2: 0, spreadMethod: 'reflect'});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#aaa', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#eee', offset: '100%'}));\r\n        def.appendChild(child);\r\n\r\n        child = Util.create({tag: 'linearGradient', id: 'classelement', x1: 0, x2: '100%', y1: '100%', y2: 0});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#fff', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#d3d3d3', offset: 1}));\r\n        def.appendChild(child);\r\n\r\n        return def;\r\n    }\r\n\r\n    public static getSubstring(str: string, search: string, startChar: string, endChar: string, splitter: string): any {\r\n        let pos, end, count = 0, array = [];\r\n        pos = str.indexOf(search);\r\n        if (pos > 0) {\r\n            end = str.indexOf(startChar, pos);\r\n            pos = end + 1;\r\n            if (end > 0) {\r\n                while (end < str.length) {\r\n                    if (str.charAt(end) === startChar) {\r\n                        count += 1;\r\n                    }\r\n                    if (str.charAt(end) === endChar) {\r\n                        count -= 1;\r\n                        if (count === 0) {\r\n                            if (splitter && pos !== end) {\r\n                                array.push(str.substring(pos, end).trim());\r\n                            }\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (str.charAt(end) === splitter && count === 1) {\r\n                        array.push(str.substring(pos, end).trim());\r\n                        pos = end + 1;\r\n                    }\r\n\r\n                    end += 1;\r\n                }\r\n                if (splitter) {\r\n                    return array;\r\n                }\r\n                return str.substring(pos, end);\r\n            }\r\n            return str.substring(pos);\r\n        }\r\n        return '';\r\n    }\r\n\r\n    public static addStyle(board: SVGElement, styleName: any) {\r\n        let defs, style: any, css;\r\n        if (styleName.baseVal || styleName.baseVal === '') {\r\n            styleName = styleName.baseVal;\r\n        }\r\n        if (!styleName) {\r\n            return;\r\n        }\r\n        defs = CSS.getDefs(board);\r\n        if (defs.getElementsByTagName('style').length > 0) {\r\n            style = defs.getElementsByTagName('style')[0];\r\n        } else {\r\n            style = Util.create({tag: 'style'});\r\n            style.item = {};\r\n            defs.appendChild(style);\r\n        }\r\n        if (!style.item[styleName]) {\r\n            css = Util.getStyle(styleName);\r\n            style.item[styleName] = css;\r\n            style.innerHTML = style.innerHTML + '\\n.' + styleName + css.getSVGString(board);\r\n        }\r\n    }\r\n\r\n    public static addStyles(board: SVGElement, item: any) {\r\n        if (!item) {\r\n            return;\r\n        }\r\n        let items, i, className: any = item.className;\r\n\r\n        if (className) {\r\n            if (className.baseVal || className.baseVal === '') {\r\n                className = className.baseVal;\r\n            }\r\n        }\r\n        if (className) {\r\n            items = className.split(' ');\r\n            for (i = 0; i < items.length; i += 1) {\r\n                CSS.addStyle(board, items[i].trim());\r\n            }\r\n        }\r\n        for (i = 0; i < item.childNodes.length; i += 1) {\r\n            this.addStyles(board, item.childNodes[i]);\r\n        }\r\n    }\r\n\r\n    public static getDefs(board: SVGElement) {\r\n        let defs;\r\n        if (board.getElementsByTagName('defs').length < 1) {\r\n            defs = Util.create({tag: 'defs'});\r\n            board.insertBefore(defs, board.childNodes[0]);\r\n        } else {\r\n            defs = board.getElementsByTagName('defs')[0];\r\n        }\r\n        return defs;\r\n    }\r\n\r\n    public add(key: string, value: string) {\r\n        this.css[key] = value;\r\n    }\r\n\r\n    public get(key: string): any {\r\n        let i;\r\n        for (i in this.css) {\r\n            if (i === key) {\r\n                return this.css[key];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public getNumber(key: string) {\r\n        return parseInt((this.get(key) || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    public getSVGString(board: SVGElement) {\r\n        let str, pos, style, defs, value, filter, z;\r\n        str = '{';\r\n        for (style in this.css) {\r\n            if (!this.css.hasOwnProperty(style)) {\r\n                continue;\r\n            }\r\n            if (style === 'border') {\r\n                pos = this.css[style].indexOf(' ');\r\n                str = str + 'stroke-width: ' + this.css[style].substring(0, pos) + ';';\r\n                pos = this.css[style].indexOf(' ', pos + 1);\r\n                str = str + 'stroke:' + this.css[style].substring(pos) + ';';\r\n            } else if (style === 'background-color') {\r\n                str = str + 'fill: ' + this.css[style] + ';';\r\n            } else if (style === 'background') {\r\n                value = CSS.getSubstring(this.css[style], 'linear-gradient', '(', ')', ',');\r\n                if (value.length > 0) {\r\n                    defs = CSS.getDefs(board);\r\n                    if (value[0] === '45deg') {\r\n                        pos = 1;\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '100%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                    } else {\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '0%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                        pos = 0;\r\n                    }\r\n                    defs.appendChild(filter);\r\n                    while (pos < value.length) {\r\n                        value[pos] = value[pos].trim();\r\n                        z = value[pos].lastIndexOf(' ');\r\n                        filter.appendChild(Util.create({\r\n                            tag: 'stop',\r\n                            'offset': value[pos].substring(z + 1),\r\n                            style: {'stop-color': value[pos].substring(0, z)}\r\n                        }));\r\n                        pos += 1;\r\n                    }\r\n                    str = str + 'fill: url(#' + this.name + ');';\r\n                    continue;\r\n                }\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n                // box-shadow: inset 0 3px 4px #888;\r\n// \t\t\t\t<defs>\r\n// \t\t\t\t\t<filter id='drop-shadow'>\r\n// \t\t\t\t\t\t<feGaussianBlur in='SourceAlpha' result='blur-out' stdDeviation='2'></feGaussianBlur>\r\n// \t\t\t\t\t\t<feOffset in='blur-out' dx='2' dy='2'></feOffset>\r\n// \t\t\t\t\t\t<feBlend in='SourceGraphic' mode='normal'></feBlend>\r\n// \t\t\t\t\t</filter>\r\n// \t\t\t\t</defs>\r\n            } else {\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n            }\r\n        }\r\n        str = str + '}';\r\n        return str;\r\n    }\r\n}\r\n","import {Bridge} from './Bridge';\r\nimport Data from './Data';\r\nimport EventListener from './EventListener';\r\n\r\nexport abstract class Control {\r\n    public $owner: Control;\r\n    /**\r\n     *\r\n     */\r\n    public property: string;\r\n    public id: string;\r\n    public $view: Element;\r\n    public $viewData: Data = null;\r\n\r\n    protected $model: Data;\r\n    protected $viewListener: EventListenerOrEventListenerObject;\r\n\r\n    /**\r\n     * The properties, we want to listen to\r\n     */\r\n    // static defaultProperties: string[] = [];\r\n\r\n    // public getProperties(): string[] {\r\n    //     return this.properties;\r\n    // }\r\n\r\n    constructor() {\r\n        // e.g. this.properties.push(\"key\");\r\n        // this.properties.push(\"property\");\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data: Data = new Data();\r\n        if (oldData) {\r\n            oldData.removeListener(this);\r\n            const keys: string[] = oldData.getKeys();\r\n            for (let i = 0; i < keys.length; i++) {\r\n                let attr = keys[i];\r\n                if (this.$view) {\r\n                    if (this.$view[attr] === null) {\r\n                        continue;\r\n                    }\r\n                    data.setValue(attr, this.$view[attr]);\r\n                } else {\r\n                    data.setValue(attr, null);\r\n                }\r\n            }\r\n        }\r\n        data.addListener(this);\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     *  Set the new HTMLElement and attach listener to it.\r\n     *  Also remove Listeners from old one and return the old one, if present.\r\n     * @param element\r\n     * @returns The previous Element\r\n     */\r\n    public setView(element: Element): Element {\r\n        let oldElement: Element = null;\r\n        if (this.$view) {\r\n            oldElement = this.$view;\r\n            if (this.$viewListener) {\r\n                oldElement.removeEventListener('change', this.$viewListener);\r\n            }\r\n        }\r\n        this.$view = element;\r\n\r\n        if (this.$viewListener) {\r\n            element.addEventListener('change', this.$viewListener);\r\n        }\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n        return element;\r\n    }\r\n\r\n    public init(owner: Control, property ?: string, id ?: string): Control {\r\n        if (!this.$owner) {\r\n            this.$owner = owner;\r\n        }\r\n        if (!this.id) {\r\n            this.id = id;\r\n        }\r\n        if (!this.property) {\r\n            this.property = this.generateID(property, id);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public createEventListener(): EventListener {\r\n        return new EventListener();\r\n    }\r\n\r\n    public getRoot(): Control {\r\n        if (this.$owner) {\r\n            return this.$owner.getRoot();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return null;\r\n    }\r\n\r\n    public initControl(data: any): void {\r\n        if (this.$view === null || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (data.hasOwnProperty('prop')) {\r\n            for (let key in data.prop) {\r\n                let oldValue = this.$viewData.getValue(key);\r\n                if (this.$view) {\r\n                    this.updateElement(key, oldValue, data.prop[key]);\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        let hasRem = data.hasOwnProperty('rem');\r\n        let removed: any[] = [];\r\n        if (data.hasOwnProperty('upd')) {\r\n            for (let key in data.upd) {\r\n                let oldValue;\r\n                let newValue = data.upd[key];\r\n                let entity;\r\n                const temp = false;\r\n                if (temp) {\r\n//                if (newValue == this.getViewData().getValue(key)) {\r\n                    // new Value assertEquals old value, so we don't need to change anything..\r\n                    // delete data.rem[key];\r\n                    if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                        removed.push(data.rem[key]);\r\n                    }\r\n                    continue;\r\n                }\r\n                if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                    // if there's a rem, the oldValue from rem will be used and expected to be right..\r\n                    oldValue = data.rem[key];\r\n                    if (this.$model && this.$model.getValue(key) === oldValue) {\r\n                        entity = this.$model;\r\n//                    } else if (oldValue == this.getViewData().getValue(key)) {\r\n//                        $graphModel = this.getViewData();\r\n                    }\r\n                    delete data.rem[key];\r\n\r\n                    if (entity === null) {\r\n                        continue;\r\n                    }\r\n                }\r\n                if (entity) {\r\n                    if (!hasRem) {\r\n                        if (entity === this.$model) {\r\n                            oldValue = this.$model.getValue(key);\r\n                        } else {\r\n//                           oldValue = this.getViewData().getValue(key);\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (this.$model) {\r\n                        // try to get the oldValue directly from the $graphModel...\r\n                        oldValue = this.$model.getValue(key);\r\n                        entity = this.$model;\r\n                    }\r\n                    if (oldValue === null) {\r\n                        // if there was no data in the entity, we try to get oldValue from the $view\r\n//                        oldValue = this.getViewData().getValue(key);\r\n//                        entity = this.getViewData();\r\n                    }\r\n                }\r\n\r\n                //  || oldValue !== this.$viewData.getValue(key)\r\n                if (newValue === oldValue) {\r\n                    // no match, so update should be wrong...\r\n                    continue;\r\n                }\r\n                const viewDataOldValue = this.$viewData.getValue(key);\r\n                if (entity === this.$viewData) {\r\n\r\n                    // this.getViewData().setValue(key, newValue);\r\n                    if (this.$view) {\r\n                        this.updateElement(key, viewDataOldValue, newValue);\r\n                    }\r\n                } else {\r\n                    this.updateElement(key, viewDataOldValue, newValue);\r\n                }\r\n                this.getRoot().setValue(entity, key, newValue, oldValue);\r\n            }\r\n            // this.saveViewInData();\r\n        }\r\n        if (hasRem) {\r\n            for (let key in data.rem) {\r\n                if (removed.hasOwnProperty(key)) {\r\n                    continue;\r\n                }\r\n                let oldValue;\r\n//                    this.getViewData().getValue(key);\r\n//                if (oldValue != data.rem[key] || data.upd !== undefined && (data.upd[key] == oldValue || this.getViewData().getValue(key) == data.upd[key])) {\r\n                // if rem is invalid, or if the change is already applied, don't do anything..\r\n                //                  continue;\r\n                //            }\r\n                // delete this.$viewData.getValue(key);\r\n                // this.saveViewInData();\r\n                this.updateElement(key, null, null);\r\n                // this.$view.removeAttribute(key);\r\n                if (this.$model) {\r\n//                    this.getRoot().setValue(this.$graphModel, key, this.getViewData().getValue(key), oldValue);\r\n                }\r\n            }\r\n        }\r\n        if (this.property) {\r\n            // Add listener to Input field:\r\n            this.$view['onchange'] = ((ev: Event) => {\r\n                    this.controlChanged(ev);\r\n                }\r\n            );\r\n        }\r\n//        this.saveViewInData();\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        return null;\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n        return false;\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return new Object();\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue ?: Object): boolean {\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Is called when a object, that the Control is listening to, changes its value.\r\n     * @param entity\r\n     * @param property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        if (oldValue === newValue || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (oldValue === this.$viewData.getValue(property)) {\r\n            return;\r\n        }\r\n        // Set NewData to ViewData and Fire PC\r\n        this.$viewData.setValue(property, newValue);\r\n\r\n//\r\n//\r\n//         // if (entity == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.entity) {\r\n//                 alert(\"entity = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.entity.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.entity, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the entity is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"entity = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n// >>>>>>> addOldFunctions\r\n        if (this.$viewData) {\r\n            this.$viewData.setValue(property, newValue);\r\n        }\r\n        if (this.$model) {\r\n            this.$model.setValue(property, newValue);\r\n        }\r\n        this.updateElement(property, oldValue, newValue);\r\n    }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            // Do Nothing\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  Update GUI Element\r\n     * @param {string} property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        if (this.$view && this.$view.hasAttribute(property)) {\r\n            this.$view.setAttribute(property, newValue);\r\n        }\r\n    }\r\n\r\n//        if (oldValue == newValue) {\r\n//            return;\r\n//        }\r\n//        if (oldValue == this.$viewData.getValue(property)) {\r\n//            return;\r\n//        }\r\n//        // Set NewData to ViewData and Fire PC\r\n//        this.$viewData.setValue(property, newValue);\r\n//\r\n//\r\n//\r\n//         // if ($graphModel == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.$graphModel) {\r\n//                 alert(\"$graphModel = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.$graphModel.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.$graphModel, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the $graphModel is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"$graphModel = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n\r\n    public getId(): string {\r\n        return this.id;\r\n    }\r\n\r\n    public load(json: JSON | Object, owner ?: Control): any {\r\n        // Do Nothing\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.property || entity.hasProperty(this.property)) {\r\n                entity.addListener(this, this.property);\r\n                this.$model = entity;\r\n            }\r\n        }\r\n    }\r\n\r\n    public appendChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.appendChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].appendChild(child.$view);\r\n        }\r\n    }\r\n\r\n    public removeChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.removeChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].removeChild(child.$view);\r\n        }\r\n    }\r\n\r\n    /*\r\n     Property looks like: 't1.talk'\r\n     */\r\n    public setProperty(property: string): void {\r\n        if (!this.property) {\r\n            return;\r\n        }\r\n        let objId = property.split('.')[0];\r\n        let object = null;\r\n        if (this.$owner.hasItem(objId)) {\r\n            object = this.$owner.getItem(objId);\r\n        }\r\n\r\n        // remove listener on old object\r\n        if (this.$model) {\r\n            // this.$graphModel.removeListener(this);\r\n            this.$model.removeListener(this, this.lastProperty);\r\n        }\r\n        this.property = property;\r\n\r\n        // add listener to object..\r\n        if (object) {\r\n            object.addListener(this, this.lastProperty);\r\n            this.$model = object;\r\n            this.updateElement(this.lastProperty, this.$viewData.getValue(this.lastProperty), object.prop[this.lastProperty]);\r\n        }\r\n    }\r\n\r\n    public registerListenerOnHTMLObject(eventType: string): boolean {\r\n        return this.registerEventListener(eventType, <HTMLElement>this.$view);\r\n    }\r\n\r\n    // Normal Event HTML-Event\r\n    // Eventtype:string,\r\n    // id:string of Control\r\n    public fireEvent(evt: Event): void {\r\n        // Do Nothing\r\n    }\r\n\r\n    public isClosed(): boolean {\r\n        return this['closed'];\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        if (this.isClosed()) {\r\n            return this.$owner.getShowed();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * the id of the Data object, that contains the properties of the view\r\n     * @returns {string}\r\n     */\r\n    protected getControlDataID() {\r\n        return this.id + '_data';\r\n    }\r\n\r\n    protected generateID(property ?: string, id ?: string): string {\r\n        if (property) {\r\n            return property;\r\n        }\r\n        if (id) {\r\n            // will generate a data Object suitable for the Control..\r\n            // must be overridden, if the changeEvent shouldn't listen on value...\r\n//            return id + '.' + this.getStandardProperty();//+ \"_data\"\r\n            return id + '.' + '_data';\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected updateViewData() {\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n        const keys: string[] = this.$viewData.getKeys();\r\n        for (let i = 0; i < keys.length; i++) {\r\n            let attr = keys[i];\r\n            if (this.$view[attr] === null) {\r\n                continue;\r\n            }\r\n            this.$viewData.setValue(attr, this.$view[attr]);\r\n        }\r\n    }\r\n\r\n    protected registerEventListener(eventType: string, htmlElement: HTMLElement): boolean {\r\n        if (!htmlElement) {\r\n            return false;\r\n        }\r\n        if (htmlElement instanceof HTMLElement === false) {\r\n            return false;\r\n        }\r\n        let control = this;\r\n        let listener = (t: any) => {\r\n            t.eventType = eventType;\r\n            t.id = control.id;\r\n            control.$owner.fireEvent(t);\r\n        };\r\n        htmlElement.addEventListener(eventType, listener);\r\n        return true;\r\n    }\r\n\r\n    get lastProperty(): string {\r\n        if (!this.property) {\r\n            return '';\r\n        }\r\n        let arr: string[] = this.property.split('.');\r\n        return arr[arr.length - 1];\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\n\r\nexport default class Data {\r\n    public prop = {};\r\n    id: string;\r\n    // $listener: Control[] = [];\r\n    $listener: Object = {};\r\n\r\n    private static nullCheck(property: string): string {\r\n        if (property === undefined || property === null) {\r\n            property = '';\r\n        }\r\n        return property;\r\n    }\r\n    public getKeys(): string[] {\r\n        return Object.keys(this.prop);\r\n    }\r\n\r\n    public addProperties(values: Object) {\r\n        if (!values) {\r\n            return;\r\n        }\r\n        if (values['prop']) {\r\n            let prop = values['prop'];\r\n            for (let property in prop) {\r\n                if (prop.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (prop[property] !== null && '' !== prop[property]) {\r\n                    this.setValue(property, prop[property]);\r\n                }\r\n            }\r\n        } else {\r\n            let upd = values['upd'] || {};\r\n            let rem = values['rem'] || {};\r\n\r\n            for (let property in upd) {\r\n                if (upd.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (rem.hasOwnProperty(property) === false) {\r\n                    this.setValue(property, upd[property]);\r\n                } else {\r\n                    // if we have a rem, we wan't to check, if its a valid change (teh old value is the value in rem)\r\n                    if (this.getValue(property) === rem[property]) {\r\n                        this.setValue(property, upd[property]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getValue(attribute: string) {\r\n        return this.prop[attribute];\r\n    }\r\n\r\n    public setValue(attribute: string, newValue: any): void {\r\n        let oldValue = this.prop[attribute];\r\n        if (oldValue === newValue && newValue !== null) {\r\n            return;\r\n        }\r\n        this.prop[attribute] = newValue;\r\n        this.firePropertyChange(attribute, oldValue, newValue);\r\n    }\r\n\r\n    public addTo(attribute: string, newValue: any): boolean {\r\n        let add: boolean;\r\n        if (this.prop[attribute]) {\r\n            if (this.prop[attribute].contains(newValue) === false) {\r\n                add = true;\r\n            }\r\n        } else {\r\n            this.prop[attribute] = [];\r\n            add = true;\r\n        }\r\n        if (add) {\r\n            this.prop[attribute].push(newValue);\r\n            this.firePropertyChange(attribute, null, newValue);\r\n        }\r\n        return add;\r\n    }\r\n\r\n    public removeFrom(attribute: string, newValue: any): boolean {\r\n        if (!this.prop[attribute]) {\r\n            return true;\r\n        }\r\n        let pos: number = this.prop[attribute].indexOf(newValue);\r\n        if (pos < 0) {\r\n            return true;\r\n        }\r\n        this.prop[attribute].splice(pos, 1);\r\n        this.firePropertyChange(attribute, newValue, null);\r\n        return true;\r\n    }\r\n\r\n    public addListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(property);\r\n        if (!listeners) {\r\n            listeners = [];\r\n            this.$listener[Data.nullCheck(property)] = listeners;\r\n        }\r\n        listeners.push(control);\r\n    }\r\n\r\n    public removeListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners = this.getListeners(property);\r\n        if (listeners === null) {\r\n            return;\r\n        }\r\n        let pos = listeners.indexOf(control);\r\n        if (pos >= 0) {\r\n            listeners.splice(pos, 1);\r\n        }\r\n        if (listeners.length === 0 && Data.nullCheck(property) !== '') {\r\n            // only remove, if it's not the default listener list...\r\n            delete this.$listener[property];\r\n        }\r\n    }\r\n\r\n    public hasProperty(property: string): boolean {\r\n        return this.prop.hasOwnProperty(property);\r\n    }\r\n\r\n    public addFrom(attribute: string, oldData: Data): void {\r\n        if (oldData) {\r\n            this.setValue(attribute, oldData.getValue(attribute));\r\n        } else {\r\n            this.setValue(attribute, null);\r\n        }\r\n    }\r\n\r\n    public removeKey(key: string): any {\r\n        if (this.hasProperty(key)) {\r\n            const oldValue = this.prop[key];\r\n            delete this.prop[key];\r\n            return oldValue;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected getListeners(property: string): PropertyChangeSupport[] {\r\n        property = Data.nullCheck(property);\r\n        return this.$listener[property];\r\n    }\r\n\r\n    protected firePropertyChange(attribute: string, oldValue: Object, newValue: Object) {\r\n        attribute = Data.nullCheck(attribute);\r\n        // at first fire for the given property\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(attribute);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n        // now we need to fire the Listeners that wan't to listen to everything\r\n        listeners = this.getListeners(null);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport interface EventHandler {\r\n    canHandle(): boolean;\r\n    handle(event: Event, element: DiagramElement): boolean;\r\n    setActive(active: boolean): void;\r\n}\r\n\r\nexport class EventBus {\r\n    public static CREATE: string = 'Create';\r\n    public static EDITOR: string = 'Editor';\r\n    public static OPENPROPERTIES: string = 'openProperties';\r\n    public static RELOADPROPERTIES: string = 'reloadProperties';\r\n    public static ELEMENTMOUSEDOWN: string = 'ELEMENT:MOUSEDOWN';\r\n    public static ELEMENTMOUSEUP: string = 'ELEMENT:MOUSEUP';\r\n    public static ELEMENTMOUSELEAVE: string = 'ELEMENT:MOUSELEAVE';\r\n    public static ELEMENTMOUSEMOVE: string = 'ELEMENT:MOUSEMOVE';\r\n    public static ELEMENTMOUSEWHEEL: string = 'ELEMENT:MOUSEWHEEL';\r\n    public static ELEMENTCLICK: string = 'ELEMENT:CLICK';\r\n    public static ELEMENTDBLCLICK: string = 'ELEMENT:DBLCLICK';\r\n    public static ELEMENTDRAG: string = 'ELEMENT:DRAG';\r\n    public static ELEMENTDRAGOVER: string = 'ELEMENT:DRAGOVER';\r\n    public static ELEMENTDROP: string = 'ELEMENT:DROP';\r\n    public static ELEMENTDRAGLEAVE: string = 'ELEMENT:DRAGLEAVE';\r\n\r\n    public static EVENTS: string[] = [\r\n        EventBus.CREATE,\r\n        EventBus.EDITOR,\r\n        EventBus.OPENPROPERTIES,\r\n        EventBus.RELOADPROPERTIES,\r\n        EventBus.ELEMENTMOUSEDOWN,\r\n        EventBus.ELEMENTMOUSEUP,\r\n        EventBus.ELEMENTMOUSELEAVE,\r\n        EventBus.ELEMENTMOUSEMOVE,\r\n        EventBus.ELEMENTMOUSEWHEEL,\r\n        EventBus.ELEMENTCLICK,\r\n        EventBus.ELEMENTDRAG,\r\n        EventBus.ELEMENTDBLCLICK,\r\n        EventBus.ELEMENTDRAGOVER,\r\n        EventBus.ELEMENTDROP,\r\n        EventBus.ELEMENTDRAGLEAVE,\r\n    ];\r\n\r\n    private static handlers = {};\r\n\r\n    private static $activeHandler: string = '';\r\n\r\n    public static setActiveHandler(handler: string): void {\r\n        this.$activeHandler = handler;\r\n    }\r\n\r\n    public static isHandlerActiveOrFree(handler: string, notEmpty?: boolean): boolean {\r\n        if (notEmpty) {\r\n            return this.$activeHandler === handler;\r\n        }\r\n        return this.$activeHandler === handler || this.$activeHandler === '' || this.$activeHandler === undefined;\r\n    }\r\n\r\n    public static isAnyHandlerActive(): boolean {\r\n        return !(this.$activeHandler === '' || this.$activeHandler === undefined);\r\n    }\r\n\r\n    public static releaseActiveHandler(): void {\r\n        this.$activeHandler = '';\r\n    }\r\n\r\n    public static getActiveHandler(): string {\r\n        return this.$activeHandler;\r\n    }\r\n\r\n    static register(control: Control, view: Element) {\r\n        let events: string[];\r\n        if (typeof control['getEvents'] === 'function') {\r\n            events = control['getEvents']();\r\n        }\r\n\r\n        if (!events || !view) {\r\n            return;\r\n        }\r\n        for (let event of events) {\r\n            this.registerEvent(view, event, control);\r\n        }\r\n    }\r\n\r\n    static registerEvent(view: Element, event: string, control?: any) {\r\n        const pos: number = event.indexOf(':');\r\n        if (pos > 0) {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        } else {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        }\r\n    }\r\n\r\n    public static publish(element: DiagramElement, evt: Event) {\r\n        let handlers = EventBus.handlers[evt.type];\r\n        if (handlers) {\r\n            for (let handler of handlers) {\r\n                handler.handle(evt, element);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static subscribe(handler: EventHandler, ...eventTypes: string[]) {\r\n        for (let event of eventTypes) {\r\n            let handlers = EventBus.handlers[event];\r\n            if (handlers === null || handlers === undefined) {\r\n                handlers = [];\r\n                EventBus.handlers[event] = handlers;\r\n            }\r\n            handlers.push(handler);\r\n        }\r\n    }\r\n}\r\n","import SimpleEvent from './Event';\r\n\r\nexport default class EventListener {\r\n    private $onUpdate: Function;\r\n\r\n    get onUpdate(): Function {\r\n        return this.$onUpdate;\r\n    }\r\n\r\n    set onUpdate(value: Function) {\r\n        this.$onUpdate = value;\r\n    }\r\n\r\n    update(event: SimpleEvent) {\r\n        this.$onUpdate(event);\r\n    }\r\n}\r\n","// ################################## jsEPS ####################################################\r\nimport {SVGConverter} from './SVGConverter';\r\n\r\nexport class JSEPS {\r\n    private max: number;\r\n    private min: number;\r\n    private inverting: boolean;\r\n    private output: string[];\r\n    private font: number;\r\n\r\n    constructor(options: any) {\r\n        this.max = 0;\r\n        this.min = 999;\r\n        let hasInverting = typeof (options.inverting);\r\n        this.inverting = (options && hasInverting !== 'undefined' ? options.inverting : true);\r\n        this.output = ['%!PS-Adobe-3.0 EPSF-3.0', '1 setlinewidth'];\r\n        this.out('/FSD {findfont exch scalefont def} bind def % In the document prolog: define');\r\n        this.out('/SMS {setfont moveto show} bind def % some useful procedures');\r\n        this.out('/MS {moveto show} bind def');\r\n        this.out('/F1  10  /Helvetica  FSD % At the start of the script: set up');\r\n        this.font = 1;\r\n    }\r\n\r\n    public out(value: string) {this.output.push(value); }\r\n    public rect(x: number, y: number, width: number, height: number, style: string) {\r\n        y = y + (this.inverting ? height : 0);\r\n        if (style && style.indexOf('fill:url(#classelement);') >= 0) {\r\n            this.out('gsave 0.93 0.93 0.93 setrgbcolor newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectfill grestore');\r\n        } else {\r\n            this.out('newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectstroke');\r\n        }\r\n    }\r\n    public setFillColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public y(value: number) {this.max = Math.max(this.max, value); this.min = Math.min(this.min, value); return this.inverting ? '%y(' + value + ')' : value; }\r\n    public getType(): string {\r\n        return 'application/postscript';\r\n    }\r\n\r\n    public getData(): string {\r\n        let t, end, url, text, typ = 'application/postscript', a = document.createElement('a'), data = '', pos, i;\r\n        for (i = 0; i < this.output.length; i += 1) {\r\n            text = this.output[i];\r\n            if (this.inverting) {\r\n                while ((pos = text.indexOf('%y')) >= 0) {\r\n                    end = text.indexOf(')', pos);\r\n                    t = this.max - parseInt(text.substring(pos + 3, end), 10);\r\n                    text = text.substring(0, pos) + t + text.substring(end + 1);\r\n                }\r\n            }\r\n            data = data + text + '\\r\\n';\r\n        }\r\n        return data;\r\n    }\r\n\r\n    public setDrawColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public ellipse(cx: number, cy: number, rx: number, ry: number, colorMode: string) {/*FIXME*/}\r\n    public circle(cx: number, cy: number, r: number, colorMode: string) {/*FIXME*/}\r\n    public setTextColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public text(x: number, y: number, text: string) {this.out('(' + text.replace('&lt;', '<').replace('&gt;', '>') + ') ' + x + ' ' + this.y(y) + ' F1 SMS'); }\r\n    public lineto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' lineto'); this.out('stroke'); }\r\n    public moveto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' moveto'); }\r\n    public line(x1: number, y1: number, x2: number, y2: number) {this.out('newpath ' + x1 + ' ' + this.y(y1) + ' moveto ' + x2 + ' ' + this.y(y2) + ' lineto stroke'); }\r\n    public setLineWidth(value: string) {this.out(value + ' setlinewidth'); }\r\n    public setFont(value: string) {this.out('/F' + (this.font += 1) + ' 10 /' + value + ' FSD'); }\r\n}\r\n","import { Graph } from './elements/Graph';\r\n\r\n/*const buttons = {\r\n    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    clazz: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n};\r\n*/\r\nexport default class Palette {\r\n\r\n    private graph: Graph;\r\n    private palette: Element;\r\n    private root: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n        let div = document.createElement('div');\r\n        div.className = 'palette';\r\n        div.id = 'palette';\r\n        this.root = div;\r\n        this.palette = div;\r\n        for (let key in graph.nodeFactory) {\r\n            let element = graph.nodeFactory[key];\r\n            let control = new element();\r\n            let icon = control.getToolBarIcon();\r\n            if (icon) {\r\n                let button = <HTMLButtonElement>document.createElement('button');\r\n                button.className = 'add' + key + 'Btn';\r\n                button.innerHTML = icon.outerHTML;\r\n                button.onclick = e => {\r\n                    let nextFreePosition = this.graph.getNextFreePosition();\r\n                    // let node = this.graph.addElementWithValues(graph.nodeFactory[key], {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    let node = this.graph.addElementWithValues(key, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    this.graph.drawElement(node);\r\n                };\r\n                this.palette.appendChild(button);\r\n            }\r\n        }\r\n        // this.graph.nodeFactory\r\n//        this.addButtons();\r\n    }\r\n\r\n    public show() {\r\n        document.body.appendChild(this.root);\r\n    }\r\n\r\n    private addButtons() {\r\n        /*for (let btn in buttons) {\r\n            let button = <HTMLButtonElement>document.createElement('button');\r\n            button.className = 'add' + btn + 'Btn';\r\n            button.innerHTML = buttons[btn];\r\n            button.onclick = e => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let node = this.graph.addElementWithValues(btn, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                this.graph.drawElement(node);\r\n            };\r\n            this.palette.appendChild(button);\r\n        }*/\r\n    }\r\n}\r\n","import {Graph} from './elements/Graph';\r\nimport * as edges from './elements/edges';\r\nimport {EventBus, EventHandler} from './EventBus';\r\nimport {DiagramElement} from './elements/BaseElements';\r\nimport {Util} from './util';\r\n\r\nexport class PanelGroup implements EventHandler {\r\n    private graph: Graph;\r\n    private selectedElement: DiagramElement;\r\n    private clearPanel: Panel;\r\n    private generatePanel: Panel;\r\n    private propertiesMasterPanel: HTMLDivElement;\r\n    private propertiesContent: HTMLDivElement;\r\n    private propHeaderLabel: HTMLDivElement;\r\n    private propHeaderButton: HTMLButtonElement;\r\n    private selectedPanel: Panel;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.clearPanel = new ClearPanel(this);\r\n        this.generatePanel = new GeneratePanel(this);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        this.handleOpenProperties(event, element);\r\n\r\n        if (event.type === EventBus.RELOADPROPERTIES\r\n            && this.selectedElement && element.id === this.selectedElement.id) {\r\n            this.handleEvent(event, element);\r\n        }\r\n\r\n        // the same element was clicked. do nothing\r\n        if (this.selectedElement && this.selectedElement.id === element.id) {\r\n            return true;\r\n        }\r\n        if (element.id === 'RootElement') {\r\n            this.setActivePanel(this.clearPanel);\r\n        }\r\n        if (element.id === 'GenerateProp') {\r\n            this.setActivePanel(this.generatePanel);\r\n        }\r\n        this.selectedElement = element;\r\n\r\n        return true;\r\n    }\r\n\r\n    public getGraph(): Graph {\r\n        return this.graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(PanelGroup.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(PanelGroup.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n     public handleEvent(event: any, element: any) {\r\n        // DO NOTHING\r\n    }\r\n\r\n    public show() {\r\n        // main div to display any properties, class, edge, etc.\r\n        this.propertiesMasterPanel = document.createElement('div');\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n\r\n        this.propertiesContent = document.createElement('div');\r\n        this.propertiesContent.className = 'properties-hidden';\r\n\r\n        this.propHeaderLabel = document.createElement('div');\r\n        this.propHeaderLabel.style.display = 'inherit';\r\n        this.propHeaderLabel.style.cursor = 'pointer';\r\n        this.propHeaderLabel.onclick = e => this.toogleProperties(e);\r\n\r\n        // button to display and hide the properties of e.g. a class\r\n        this.propHeaderButton = document.createElement('button');\r\n        this.propHeaderButton.className = 'btnHideProp';\r\n        this.propHeaderButton.style.cssFloat = 'right';\r\n        this.propHeaderButton.onclick = e => this.toogleProperties(e);\r\n\r\n        let propertiesHeader = document.createElement('div');\r\n        propertiesHeader.style.display = 'inline';\r\n        propertiesHeader.appendChild(this.propHeaderLabel);\r\n        propertiesHeader.appendChild(this.propHeaderButton);\r\n\r\n        this.propertiesMasterPanel.appendChild(propertiesHeader);\r\n        this.propertiesMasterPanel.appendChild(this.propertiesContent);\r\n        document.body.appendChild(this.propertiesMasterPanel);\r\n\r\n        this.setActivePanel(this.clearPanel);\r\n    }\r\n\r\n    public setActivePanel(panel: Panel) {\r\n        this.selectedPanel = panel;\r\n        this.propHeaderLabel.innerHTML = panel.getHeaderText();\r\n        if (this.propertiesContent) {\r\n            while (this.propertiesContent.hasChildNodes()) {\r\n                this.propertiesContent.removeChild(this.propertiesContent.childNodes[0]);\r\n            }\r\n        }\r\n        panel.show();\r\n\r\n        panel.showFirstTab();\r\n        if (panel !== this.clearPanel) {\r\n            this.showProperties(null);\r\n        } else {\r\n            this.hideProperties(null);\r\n        }\r\n    }\r\n\r\n    public getProperiesContent(): HTMLDivElement {\r\n        return this.propertiesContent;\r\n    }\r\n\r\n    private handleOpenProperties(event: Event, element: DiagramElement) {\r\n        if (event.type === 'dblclick') {\r\n            this.showProperties(event);\r\n        }\r\n    }\r\n\r\n    private showProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Show\r\n        this.propHeaderButton.innerHTML = '&#8897;';\r\n        this.propHeaderButton.title = 'Hide properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel';\r\n        this.propertiesContent.className = 'properties';\r\n    }\r\n\r\n    private toogleProperties(evt: Event): void {\r\n        if (this.propHeaderButton.title === 'Show properties') {\r\n            this.showProperties(evt);\r\n        } else {\r\n            this.hideProperties(evt);\r\n        }\r\n    }\r\n\r\n    private hideProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Hide\r\n        this.propHeaderButton.innerHTML = '&#8896;';\r\n        this.propHeaderButton.title = 'Show properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n        this.propertiesContent.className = 'properties-hidden';\r\n    }\r\n}\r\n\r\nexport abstract class Panel {\r\n    protected divPropertiesPanel: HTMLDivElement;\r\n    protected divPropertiesTabbedPanel: HTMLDivElement;\r\n    protected element: any;\r\n    protected group: PanelGroup;\r\n    private panelItem: PanelItem[] = [];\r\n\r\n    constructor(group: PanelGroup, element: any) {\r\n        // get the properties content panel\r\n        this.divPropertiesPanel = document.createElement('div');\r\n        this.element = element;\r\n        this.group = group;\r\n\r\n        this.divPropertiesTabbedPanel = document.createElement('div');\r\n        this.divPropertiesTabbedPanel.className = 'tabbedpane';\r\n\r\n        // add tabbed panel\r\n        this.divPropertiesPanel.appendChild(this.divPropertiesTabbedPanel);\r\n    }\r\n\r\n    public show(): void {\r\n        let propertiesContent: HTMLDivElement = this.group.getProperiesContent();\r\n        if (this.panelItem.length > 1) {\r\n            propertiesContent.appendChild(this.getPropertiesTabbedPanel());\r\n        }\r\n\r\n        propertiesContent.appendChild(this.getPropertiesPanel());\r\n    }\r\n\r\n    public getPropertiesTabbedPanel(): HTMLDivElement {\r\n        return this.divPropertiesTabbedPanel;\r\n    }\r\n\r\n    public getPropertiesPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return '';\r\n    }\r\n\r\n    public showFirstTab(): void {\r\n        if (this.panelItem.length > 0) {\r\n            this.openTab(this.panelItem[0]);\r\n        }\r\n    }\r\n\r\n    protected createTabElement(tabText: string, tabValue: string, item: PanelItem): PanelItem {\r\n        let tabElementBtn = document.createElement('button');\r\n        tabElementBtn.className = 'tablinks';\r\n        tabElementBtn.innerText = tabText;\r\n        tabElementBtn.value = tabValue;\r\n\r\n        if (item === null) {\r\n            item = new PanelItem(this);\r\n        }\r\n        item.withButton(tabElementBtn);\r\n\r\n        tabElementBtn.onclick = () => this.openTab(item);\r\n        this.divPropertiesTabbedPanel.appendChild(tabElementBtn);\r\n        this.panelItem.push(item);\r\n        return item;\r\n    }\r\n\r\n    protected openTab(panelItem: PanelItem): void {\r\n        for (let key in this.panelItem) {\r\n            let child = this.panelItem[key];\r\n            if (child !== panelItem) {\r\n                 child.deactive();\r\n            }\r\n        }\r\n        panelItem.active();\r\n        // hide other tabcontent\r\n        if (this.divPropertiesPanel) {\r\n            while (this.divPropertiesPanel.hasChildNodes()) {\r\n                this.divPropertiesPanel.removeChild(this.divPropertiesPanel.childNodes[0]);\r\n            }\r\n        }\r\n\r\n        // ADD\r\n        if (panelItem.getContent()) {\r\n            this.divPropertiesPanel.appendChild(panelItem.getContent());\r\n        }\r\n    }\r\n}\r\n\r\nexport class GeneratePanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n\r\n        let item: PanelItem = this.createTabElement('General', 'General', null);\r\n\r\n        // Workspace and generate code stuff\r\n        let inputGenerateWorkspace: HTMLInputElement =  <HTMLInputElement> Util.createHTML({tag: 'input', id: 'workspace', type: 'text', placeholder: 'Type your Folder for generated code...', value: 'src/main/java', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Folder:', inputGenerateWorkspace);\r\n\r\n        let inputGeneratePackage: HTMLInputElement = <HTMLInputElement> Util.createHTML({tag: 'input', id: 'package', type: 'text', placeholder: 'Type your workspace for generated code...', value: '', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Package:', inputGeneratePackage);\r\n\r\n        let options = document.createElement('div');\r\n        options.style.textAlign = 'center';\r\n        options.style.margin = '3';\r\n        options.style.padding = '5';\r\n\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(options);\r\n\r\n        options.style.borderStyle = 'groove';\r\n        options.style.borderRadius = '10px';\r\n\r\n        let btnGenerate = document.createElement('button');\r\n        btnGenerate.textContent = 'Generate';\r\n        btnGenerate.title = 'Generate code into your workspace';\r\n        btnGenerate.className = 'OptionElement';\r\n\r\n        let that = this;\r\n        btnGenerate.onclick = () => {\r\n            let workspace = inputGeneratePackage.value;\r\n            if (workspace.length === 0) {\r\n                alert('No workspace set.\\nEnter first your workspace');\r\n                inputGeneratePackage.focus();\r\n                return;\r\n            }\r\n            that.group.getGraph().generate(workspace, inputGenerateWorkspace.value);\r\n        };\r\n        options.appendChild(btnGenerate);\r\n        options.appendChild(document.createElement('hr'));\r\n        options.appendChild(document.createElement('br'));\r\n\r\n        let btnAutoLayout = Util.createHTML({tag: 'button', className: 'OptionElement', value: 'Auto Layout', style: {marginRight: '10px'}, onclick: () => {\r\n                that.group.getGraph().layout();\r\n            }});\r\n\r\n        options.appendChild(btnAutoLayout);\r\n\r\n        // delete all nodes\r\n        let btnDeleteAll = document.createElement('button');\r\n        btnDeleteAll.className = 'OptionElement';\r\n        btnDeleteAll.textContent = 'Delete All';\r\n        btnDeleteAll.title = 'Delete all nodes from diagram';\r\n\r\n        btnDeleteAll.onclick = () => {\r\n            let confirmDelete = confirm('All classes will be deleted!');\r\n            if (!confirmDelete) {\r\n                return;\r\n            }\r\n            that.group.getGraph().$graphModel.removeAllElements();\r\n        };\r\n        btnDeleteAll.style.marginRight = '10px';\r\n        options.appendChild(btnDeleteAll);\r\n\r\n        // export stuff\r\n        let exportTypes: string[] = ['Export', 'HTML', 'JSON', 'PDF', 'PNG', 'SVG'];\r\n        let selectExport = document.createElement('select');\r\n\r\n        exportTypes.forEach(type => {\r\n            if (!(!window['jsPDF'] && type === 'PDF')) {\r\n                let option = document.createElement('option');\r\n                option.value = type;\r\n                option.textContent = type;\r\n                selectExport.appendChild(option);\r\n            }\r\n        });\r\n\r\n        selectExport.onchange = (evt) => {\r\n            let selectedExportType = selectExport.options[selectExport.selectedIndex].value;\r\n            selectExport.selectedIndex = 0;\r\n            that.group.getGraph().saveAs(selectedExportType);\r\n        };\r\n        selectExport.className = 'OptionElement';\r\n        options.appendChild(selectExport);\r\n        options.appendChild(document.createElement('br'));\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Properties';\r\n    }\r\n\r\n}\r\n\r\nexport class ClearPanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Select any element to see its properties';\r\n    }\r\n}\r\n\r\nexport class PanelItem {\r\n    protected panel: Panel;\r\n    protected label: string;\r\n    protected button: HTMLButtonElement;\r\n    protected content: HTMLDivElement = <HTMLDivElement>Util.create({tag: 'div', className: 'tabContent'});\r\n\r\n    constructor(panel: Panel, label?: string) {\r\n        this.panel = panel;\r\n        this.label = label;\r\n    }\r\n\r\n    public active(): void {\r\n        if (this.getButton()) {\r\n            this.getButton().className += ' active';\r\n        }\r\n    }\r\n\r\n    public deactive(): void {\r\n        if (this.getButton()) {\r\n            Util.removeClass(this.getButton(), 'active');\r\n        }\r\n    }\r\n\r\n    public withButton(button: HTMLButtonElement): PanelItem {\r\n        this.button = button;\r\n        return this;\r\n    }\r\n\r\n    public withContent(element: HTMLElement): PanelItem {\r\n        this.content.appendChild(element);\r\n        return this;\r\n    }\r\n\r\n    public withInput(labelText: string, element: HTMLElement): PanelItem {\r\n        let group: HTMLDivElement = <HTMLDivElement> Util.createHTML({tag: 'div'});\r\n        let label = Util.createHTML({tag: 'label', for: element.id, value: labelText});\r\n        group.appendChild(label);\r\n        group.appendChild(element);\r\n\r\n        this.content.appendChild(group);\r\n        return this;\r\n    }\r\n\r\n    public getButton(): HTMLButtonElement {\r\n        return this.button;\r\n    }\r\n\r\n    public getContent(): HTMLDivElement {\r\n        return this.content;\r\n    }\r\n\r\n   public getHeader(): string {\r\n        return this.label;\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\nimport Data from './Data';\r\n\r\nexport class PropertyBinder implements PropertyChangeSupport {\r\n    private propertyClass1: string;\r\n    private propertyClass2: string;\r\n    private data1: Data;\r\n    private data2: Data;\r\n    // works like a lock\r\n    private applyingChange: boolean = false;\r\n\r\n    constructor(data1: Data, data2: Data, propertyClass1: string, propertyClass2: string) {\r\n        this.data1 = data1;\r\n        this.data2 = data2;\r\n        this.propertyClass1 = propertyClass1;\r\n        this.propertyClass2 = propertyClass2;\r\n    }\r\n    static bind(data1: Data, data2: Data, property1: string, property2: string) {\r\n        if (!data1 || !data2 || !property1) {\r\n            console.error('NullValue!!');\r\n            return null;\r\n        }\r\n        const propertyBinder = new PropertyBinder(data1, data2, property1, property2);\r\n        propertyBinder.bind();\r\n        return propertyBinder;\r\n    }\r\n\r\n    propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        if (!this.applyingChange) {\r\n            this.applyingChange = true;\r\n            if (entity === this.data1) {\r\n                // fire to data2\r\n                this.data2.setValue(this.propertyClass2, newValue);\r\n            } else if (entity === this.data2) {\r\n                // fire to data1\r\n                this.data1.setValue(this.propertyClass1, newValue);\r\n            }\r\n            this.applyingChange = false;\r\n        }\r\n    }\r\n\r\n    protected bind() {\r\n        // public addListener(control: Control, property?: string)\r\n        // todo: set value immediately\r\n        this.data1.setValue(this.propertyClass1, this.data2.getValue(this.propertyClass2));\r\n\r\n        this.data1.addListener(this, this.propertyClass1);\r\n        this.data2.addListener(this, this.propertyClass2);\r\n    }\r\n\r\n    protected unbind() {\r\n        // public addListener(control: Control, property?: string)\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n    }\r\n}\r\n","// ################################## RGBColor ####################################################\r\nexport class RGBColor {\r\n    public  ok: boolean;\r\n    public r: number;\r\n    public g: number;\r\n    public b: number;\r\n\r\n    constructor(value: string) {\r\n        this.ok = false;\r\n        if (value === 'none') {\r\n            return;\r\n        }\r\n        let computedColor, div = document.createElement('div');\r\n        div.style.backgroundColor = value;\r\n        document.body.appendChild(div);\r\n        computedColor = window.getComputedStyle(div).backgroundColor;\r\n        // cleanup temporary div.\r\n        document.body.removeChild(div);\r\n        this.convert(computedColor);\r\n    }\r\n    public convert(value: any) {\r\n        let values, regex = /rgb *\\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\\)/;\r\n        values = regex.exec(value);\r\n        this.r = parseInt(values[1], 10);\r\n        this.g = parseInt(values[2], 10);\r\n        this.b = parseInt(values[3], 10);\r\n        this.ok = true;\r\n    }\r\n\r\n    public toRGB(): string {return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; }\r\n    public toHex(): string {\r\n        return '#' + (this.r + 0x10000).toString(16).substring(3).toUpperCase() + (this.g + 0x10000).toString(16).substring(3).toUpperCase() + (this.b + 0x10000).toString(16).substring(3).toUpperCase();\r\n    }\r\n}\r\n","/*\r\n NetworkParser\r\n Copyright (c) 2011 - 2014, Stefan Lindel\r\n All rights reserved.\r\n\r\n Licensed under the EUPL, Version 1.1 or (as soon they\r\n will be approved by the European Commission) subsequent\r\n versions of the EUPL (the \"Licence\");\r\n You may not use this work except in compliance with the Licence.\r\n You may obtain a copy of the Licence at:\r\n\r\n http://ec.europa.eu/idabc/eupl5\r\n\r\n Unless required by applicable law or agreed to in\r\n writing, software distributed under the Licence is\r\n distributed on an \"AS IS\" basis,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\r\n express or implied.\r\n See the Licence for the specific language governing\r\n permissions and limitations under the Licence.\r\n*/\r\nimport {RGBColor} from './RGBColor';\r\nimport {JSEPS} from \"./JSEPS\";\r\n\r\nconst epsSvgAttr = {\r\n    // allowed attributes. all others are removed from the preview.\r\n    g: ['stroke', 'fill', 'stroke-width'],\r\n    line: ['x1', 'y1', 'x2', 'y2', 'stroke', 'stroke-width'],\r\n    rect: ['x', 'y', 'width', 'height', 'stroke', 'fill', 'stroke-width'],\r\n    ellipse: ['cx', 'cy', 'rx', 'ry', 'stroke', 'fill', 'stroke-width'],\r\n    circle: ['cx', 'cy', 'r', 'stroke', 'fill', 'stroke-width'],\r\n    text: ['x', 'y', 'font-size', 'font-family', 'text-anchor', 'font-weight', 'font-style', 'fill'],\r\n    path: ['']\r\n};\r\nexport class SVGConverter {\r\n    private k: number;\r\n    private remove: boolean;\r\n    private target: any;\r\n\r\n    constructor(element: any, target: any, options: any) {\r\n        this.k = 1.0;\r\n        let hasScale = typeof (options.scale), hasRemoveInvalid = typeof (options.removeInvalid);\r\n        this.k = (options && hasScale !== 'undefined' ? options.scale : 1.0);\r\n        this.remove = (options && hasRemoveInvalid !== 'undefined' ? options.removeInvalid : false);\r\n        this.target = target;\r\n        this.parse(element);\r\n    }\r\n\r\n    public parse(element: any) {\r\n        let el, i, n, colorMode, hasFillColor, fillRGB, fillColor, strokeColor, strokeRGB, fontType, pdfFontSize, x, y,\r\n            box, xOffset;\r\n        if (!element) {\r\n            return;\r\n        }\r\n        if (typeof element === 'string') {\r\n            el = document.createElement('div');\r\n            el.innerHTML = element;\r\n            element = el.childNodes[0];\r\n        }\r\n        for (i = 0; i < element.children.length; i += 1) {\r\n            n = element.children[i];\r\n            colorMode = null;\r\n            hasFillColor = false;\r\n            if ('g,line,rect,ellipse,circle,text'.indexOf(n.tagName) >= 0) {\r\n                fillColor = n.getAttribute('fill');\r\n                if (fillColor) {\r\n                    fillRGB = new RGBColor(fillColor);\r\n                    if (fillRGB.ok) {\r\n                        hasFillColor = true;\r\n                        colorMode = 'F';\r\n                    }\r\n                }\r\n            }\r\n            if ('g,line,rect,ellipse,circle'.indexOf(n.tagName) >= 0) {\r\n                if (hasFillColor) {\r\n                    this.target.setFillColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                }\r\n                strokeColor = n.getAttribute('stroke');\r\n                if (n.hasAttribute('stroke-width')) {\r\n                    this.target.setLineWidth(this.attr(n, 'stroke-width'));\r\n                }\r\n                if (strokeColor) {\r\n                    strokeRGB = new RGBColor(strokeColor);\r\n                    if (strokeRGB.ok) {\r\n                        this.target.setDrawColor(strokeRGB.r, strokeRGB.g, strokeRGB.b);\r\n                        if (colorMode === 'F') {\r\n                            colorMode = 'FD';\r\n                        } else if (!hasFillColor) {\r\n                            colorMode = 'S';\r\n                        }\r\n                    } else {\r\n                        colorMode = null;\r\n                    }\r\n                }\r\n            }\r\n            // console.log(\"write \"+n.tagName);\r\n            switch (n.tagName.toLowerCase()) {\r\n                case 'svg':\r\n                case 'a':\r\n                case 'g':\r\n                    this.parse(n);\r\n                    break;\r\n                case 'line':\r\n                    this.target.line(this.attr(n, 'x1'), this.attr(n, 'y1'), this.attr(n, 'x2'), this.attr(n, 'y2'));\r\n                    break;\r\n                case 'rect':\r\n                    this.target.rect(this.attr(n, 'x'), this.attr(n, 'y'), this.attr(n, 'width'), this.attr(n, 'height'), n.getAttribute('style'));\r\n                    break;\r\n                case 'ellipse':\r\n                    this.target.ellipse(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'rx'), this.attr(n, 'ry'), colorMode);\r\n                    break;\r\n                case 'circle':\r\n                    this.target.circle(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'r'), colorMode);\r\n                    break;\r\n                case 'text':\r\n                    if (n.hasAttribute('font-family')) {\r\n                        switch (n.getAttribute('font-family').toLowerCase()) {\r\n                            case 'serif':\r\n                                this.target.setFont('times');\r\n                                break;\r\n                            case 'monospace':\r\n                                this.target.setFont('courier');\r\n                                break;\r\n                            default:\r\n                                n.getAttribute('font-family', 'sans-serif');\r\n                                this.target.setFont('Helvetica');\r\n                        }\r\n                    }\r\n                    if (hasFillColor) {\r\n                        this.target.setTextColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                    }\r\n                    if (this.target instanceof JSEPS) {\r\n                        this.target.text(this.attr(n, 'x'), this.attr(n, 'y'), n.innerHTML);\r\n                        break;\r\n                    }\r\n                    fontType = '';\r\n                    if (n.hasAttribute('font-weight')) {\r\n                        if (n.getAttribute('font-weight') === 'bold') {\r\n                            fontType = 'bold';\r\n                        }\r\n                    }\r\n                    if (n.hasAttribute('font-style')) {\r\n                        if (n.getAttribute('font-style') === 'italic') {\r\n                            fontType += 'italic';\r\n                        }\r\n                    }\r\n                    this.target.setFontType(fontType);\r\n                    pdfFontSize = 16;\r\n                    if (n.hasAttribute('font-size')) {\r\n                        pdfFontSize = parseInt(n.getAttribute('font-size'), 10);\r\n                    }\r\n                    box = n.getBBox();\r\n                    // FIXME: use more accurate positioning!!\r\n                    x = this.attr(n, 'x');\r\n                    y = this.attr(n, 'y');\r\n                    xOffset = 0;\r\n                    if (n.hasAttribute('text-anchor')) {\r\n                        switch (n.getAttribute('text-anchor')) {\r\n                            case 'end':\r\n                                xOffset = box.width;\r\n                                break;\r\n                            case 'middle':\r\n                                xOffset = box.width / 2;\r\n                                break;\r\n                            case 'start':\r\n                                break;\r\n                            case 'default':\r\n                                n.getAttribute('text-anchor', 'start');\r\n                                break;\r\n                        }\r\n                        x = x - (xOffset * this.k);\r\n                    }\r\n                    this.target.setFontSize(pdfFontSize).text(x, y, n.innerHTML);\r\n                    break;\r\n                default:\r\n                    if (this.remove) {\r\n                        console.log('cant translate to target:', n);\r\n                        element.removeChild(n);\r\n                        i -= 1;\r\n                    }\r\n            }\r\n        }\r\n    }\r\n\r\n    public attr(node: any, name: string) {\r\n        return this.k * parseInt(node.getAttribute(name), 10);\r\n    }\r\n}\r\n","import {Control} from './Control';\r\n\r\nexport class ScrumBoard extends Control {\r\n    public static cards = [0, 0.5, 1, 2, 3, 5, 8, 13, 20, 40, 100, '?', 'Coffee'];\r\n    private $selected: HTMLDivElement;\r\n    private $board: HTMLDivElement;\r\n\r\n    constructor() {\r\n        super();\r\n        this.redraw();\r\n    }\r\n\r\n    public redraw(): void {\r\n        if (this.$board) {\r\n            while (this.$board.children.length > 0 ) {\r\n                this.$board.removeChild(this.$board.children[0]);\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('div');\r\n            this.$selected = document.createElement('div');\r\n            this.$board = document.createElement('div');\r\n            this.$view.appendChild(this.$board);\r\n            this.$view.appendChild(this.$selected);\r\n        }\r\n        this.$view.className = 'ScrumBoard';\r\n        for ( let i = 0; i < ScrumBoard.cards.length; i++) {\r\n            let card = document.createElement('div');\r\n            card.className = 'ScrumCard';\r\n            card.innerHTML = <string>ScrumBoard.cards[i];\r\n            card['pokervalue'] = <string>ScrumBoard.cards[i];\r\n            card.onclick = e => {\r\n                this.onClick(<HTMLDivElement>e.target);\r\n            };\r\n            this.$board.appendChild(card);\r\n        }\r\n    }\r\n\r\n    public getSVG() {\r\n        this.redraw();\r\n        return this.$view;\r\n    }\r\n\r\n    public onClick(target: HTMLDivElement): void {\r\n        console.log(target['pokervalue']);\r\n\r\n        while (this.$selected.children.length > 0 ) {\r\n            this.$selected.removeChild(this.$selected.children[0]);\r\n        }\r\n        let card = document.createElement('div');\r\n        card.className = 'ScrumCard';\r\n        card['pokervalue'] = target['pokervalue'];\r\n        card.onclick = e => {\r\n            this.onShow(<HTMLDivElement>e.target);\r\n        };\r\n        this.$selected.appendChild(card);\r\n        this.$board['style']['display'] = 'none';\r\n    }\r\n\r\n    public onShow(target: HTMLDivElement): void {\r\n        target.innerHTML = target['pokervalue'];\r\n    }\r\n}\r\n","import {Graph} from './main';\r\nimport {SymbolLibary} from './elements/nodes/Symbol';\r\nimport {EventBus} from './EventBus';\r\n\r\nexport class Toolbar {\r\n\r\n    private graph: Graph;\r\n    private mainDiv: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public show(): void {\r\n        if (this.mainDiv) {\r\n            return;\r\n        }\r\n\r\n        this.mainDiv = document.createElement('div');\r\n        this.mainDiv.className = 'toolbar';\r\n\r\n        let h1Logo = document.createElement('h1');\r\n        h1Logo.className = 'logo';\r\n        h1Logo.textContent = 'DiagramJS';\r\n\r\n        let node = {type: 'Hamburger', property: 'HTML', width: 24, height: 24, id: 'GenerateProp'};\r\n        let hamburger = SymbolLibary.draw( node);\r\n        EventBus.registerEvent(hamburger, 'click', node);\r\n        this.mainDiv.appendChild(hamburger);\r\n\r\n        this.mainDiv.appendChild(h1Logo);\r\n        document.body.appendChild(this.mainDiv);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 06.03.2017.\r\n */\r\nimport Data from './Data';\r\n\r\n// export default class Data {\r\n//    public values = {};\r\n//    id: string;\r\n//    $listener: Control[] = [];\r\n//    property: string;\r\nexport namespace UML {\r\n    export class Clazz extends Data {\r\n        public static NAME: string = 'name';\r\n        public static ATTRIBUTES: string = 'attributes';\r\n        public static METHODS: string = 'methods';\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Clazz';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n\r\n        public getAttributes() {\r\n            return this.prop[Clazz.ATTRIBUTES];\r\n        }\r\n\r\n        public addToAttributes(newValue: string) {\r\n            this.addTo(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n\r\n        public removeFromAttributes(newValue: string) {\r\n            this.removeFrom(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n    }\r\n\r\n    export class Attribute extends Data {\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Attribute';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n    }\r\n\r\n    export class Methods extends Data {\r\n\r\n    }\r\n}\r\n\r\nwindow['UML'] = UML;\r\n","import {Control} from './Control';\r\n\r\nexport class VirtualKeyBoard extends Control {\r\n    constructor(data: any) {\r\n        super();\r\n        if (!data) {\r\n            data = this.getDefault();\r\n        }\r\n        let board = document.createElement('div');\r\n        this.$viewData = data;\r\n\r\n        for (let type in data) {\r\n            if (type === 'normal') {\r\n                for (let line in data[type]) {\r\n                    let lineBoard = document.createElement('div');\r\n                    lineBoard.className = 'vkLine';\r\n                    for (let key in data[type][line]) {\r\n                        let btn: HTMLButtonElement = document.createElement('button');\r\n                        let keyTag = data[type][line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                        btn.ontouchend = () => {this.action(btn); };\r\n                        btn.onclick = () => {this.action(btn); };\r\n                        lineBoard.appendChild(btn);\r\n                    }\r\n                    board.appendChild(lineBoard);\r\n                }\r\n            }\r\n        }\r\n        this.$view = board;\r\n    }\r\n\r\n    public action(btn: HTMLButtonElement) {\r\n        if (btn['key'] === '{Shift}') {\r\n            if ( btn.className === 'vkbuttonAction') {\r\n                let keys = this.$viewData['normal'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                    }\r\n                }\r\n            } else if ( btn.className === 'vkbutton') {\r\n                let keys = this.$viewData['shift'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbuttonAction');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        alert(btn);\r\n    }\r\n\r\n    public getDefault(): any {\r\n        let format = {\r\n            normal: [\r\n                ['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '?', '´', '{Bksp}'],\r\n                ['{Tab}', 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+'],\r\n                ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '#', '{enter}'],\r\n                ['{Shift}', '<', 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n// '{left}', '{up}', '{down}','{right}', '{Cancel}']\r\n            ],\r\n            shift: [\r\n                ['°', '!', '\"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '`', '{Bksp}'],\r\n                ['{Tab}', 'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', 'O', 'P', 'Ü', '*'],\r\n                ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', '\\'', '{enter}'],\r\n                ['{Shift}', '>', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n            ]\r\n        };\r\n        return format;\r\n    }\r\n\r\n    public getBoard() {\r\n        return this.$view;\r\n    }\r\n\r\n    private setButtonValue(keyTag: string, btn: HTMLButtonElement, shiftClass: string) {\r\n        btn.className = 'vkbutton';\r\n        btn['key'] = keyTag;\r\n        btn['type'] = 'normal';\r\n        if (keyTag.substring(0, 1) === '{') {\r\n            if (keyTag === '{Bksp}') {\r\n                btn.innerHTML = 'Bksp';\r\n            } else if (keyTag === '{Tab}') {\r\n                btn.innerHTML = '&#8677; Tab';\r\n            } else if (keyTag === '{enter}') {\r\n                btn.innerHTML = 'enter';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Shift}') {\r\n                btn.innerHTML = 'Shift';\r\n                btn.className = shiftClass;\r\n            } else if (keyTag === '{Accept}') {\r\n                btn.innerHTML = 'Accept';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Alt}') {\r\n                btn.innerHTML = 'Alt';\r\n            } else if (keyTag === '{Space}') {\r\n                btn.innerHTML = '&nbsp;';\r\n                btn.className = 'vkbuttonSpace';\r\n            } else if (keyTag === '{left}') {\r\n                btn.innerHTML = '&#8592';\r\n            } else if (keyTag === '{right}') {\r\n                btn.innerHTML = '&#8594;';\r\n            } else if (keyTag === '{up}') {\r\n                btn.innerHTML = '&#8593;';\r\n            } else if (keyTag === '{down}') {\r\n                btn.innerHTML = '&#8595;';\r\n            } else if (keyTag === '{Cancel}') {\r\n                btn.innerHTML = 'Cancel';\r\n                btn.className = 'vkbuttonAction';\r\n            }\r\n        } else {\r\n            btn.innerHTML = keyTag;\r\n        }\r\n    }\r\n}\r\n","import {Adapter} from '../Adapter';\r\n\r\nexport class JavaAdapter extends Adapter {\r\n    constructor() {\r\n        super();\r\n        this.id = 'JavaAdapter';\r\n    }\r\n    update(evt: Object): boolean {\r\n        if (this.isActive()) {\r\n            window['JavaBridge'].executeChange(evt);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public isActive(): boolean {\r\n        return window['JavaBridge'];\r\n    }\r\n}\r\n","export * from './JavaAdapter';\r\n","import { Util } from '../util';\r\nimport { Control } from '../Control';\r\n\r\nexport interface Size {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\ninterface GraphElement {\r\n    getSize(): Point;\r\n\r\n    getPos(): Point;\r\n\r\n    getCenter(): Point;\r\n\r\n    getSVG(): Element;\r\n\r\n    getCanvas(): Element;\r\n\r\n    getEvents(): string[];\r\n\r\n    withPos(x: number, y: number): GraphElement;\r\n\r\n    load(data: any): any;\r\n\r\n    getToolBarIcon(): Element;\r\n\r\n    loadProperties(properties: any): void;\r\n}\r\n\r\nexport abstract class DiagramElement extends Control implements GraphElement {\r\n\r\n    protected $isDraggable: boolean = true;\r\n    protected $labelHeight = 25;\r\n    protected $labelFontSize = 14;\r\n    private $pos: Point = new Point();\r\n    private $size: Point = new Point();\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getPos(): Point {\r\n        return this.$pos;\r\n    }\r\n\r\n    public getSize(): Point {\r\n        return this.$size;\r\n    }\r\n\r\n    public getCenter(): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        return new Point(pos.x + size.x / 2, pos.y + size.y / 2);\r\n    }\r\n\r\n    public getCenterPosition(p: string): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let offset = this['$' + p];\r\n        let center = this.getCenter();\r\n        if (p === Point.DOWN) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y + size.y, Point.DOWN);\r\n        }\r\n        if (p === Point.UP) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y, Point.UP);\r\n        }\r\n        if (p === Point.LEFT) {\r\n            return new Point(pos.x, Math.min(center.y + offset, pos.y + size.y), Point.LEFT);\r\n        }\r\n        if (p === Point.RIGHT) {\r\n            return new Point(pos.x + size.x, Math.min(center.y + offset, pos.y + size.y), Point.RIGHT);\r\n        }\r\n        return new Point();\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getCanvas(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return null;\r\n    }\r\n\r\n    public getAlreadyDisplayingSVG(): Element {\r\n        return document.getElementById(this.id) || this.getSVG();\r\n    }\r\n\r\n    public load(data: any) {\r\n        // Do Nothing\r\n    }\r\n\r\n    public withPos(x: number, y: number): GraphElement {\r\n        if (x && y) {\r\n            this.$pos = new Point(x, y);\r\n        } else {\r\n            if (typeof (x) !== 'undefined' && x !== null) {\r\n                this.$pos.x = x;\r\n            }\r\n            if (typeof (y) !== 'undefined' && y !== null) {\r\n                this.$pos.y = y;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public withSize(width: number, height: number): DiagramElement {\r\n        if (width && height) {\r\n            this.$size = new Point(width, height);\r\n        } else {\r\n            if (typeof (width) !== 'undefined' && width !== null) {\r\n                this.$size.x = width;\r\n            }\r\n            if (typeof (height) !== 'undefined' && height !== null) {\r\n                this.$size.y = height;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        // FIXME if (this.status === 'close') {\r\n        // if (!this.$owner.isClosed()) {\r\n        //        return this;\r\n        //    }\r\n        // }\r\n        return super.getShowed();\r\n    }\r\n\r\n    public loadProperties(properties: any) {\r\n        // DO Nothing\r\n    }\r\n\r\n    protected createShape(attrs: any): Element {\r\n        return Util.createShape(attrs);\r\n    }\r\n}\r\n\r\nexport class Point {\r\n    public static UP: string = 'UP';\r\n    public static LEFT: string = 'LEFT';\r\n    public static RIGHT: string = 'RIGHT';\r\n    public static DOWN: string = 'DOWN';\r\n    x: number = 0;\r\n    y: number = 0;\r\n\r\n    //    pos:string = '';\r\n\r\n    constructor(x?: number, y?: number, pos?: string) {\r\n        this.x = Math.ceil(x || 0);\r\n        this.y = Math.ceil(y || 0);\r\n        if (pos) {\r\n            this['pos'] = pos;\r\n        }\r\n    }\r\n\r\n    public add(pos: Point) {\r\n        this.x += pos.x;\r\n        this.y += pos.y;\r\n        return this;\r\n    }\r\n\r\n    public getPosition(): string {\r\n        if (!this['pos']) {\r\n            return '';\r\n        }\r\n        return this['pos'];\r\n    }\r\n\r\n    public addNum(x: number, y: number) {\r\n        this.x += x;\r\n        this.y += y;\r\n        return this;\r\n    }\r\n\r\n    public sum(pos: Point) {\r\n        let sum = new Point(this.x, this.y);\r\n        sum.add(pos);\r\n        return sum;\r\n    }\r\n\r\n    public center(posA: Point, posB: Point) {\r\n        let count = 0;\r\n        if (posA) {\r\n            this.x += posA.x;\r\n            this.y += posA.y;\r\n            count++;\r\n        }\r\n        if (posB) {\r\n            this.x += posB.x;\r\n            this.y += posB.y;\r\n            count++;\r\n        }\r\n        if (count > 0) {\r\n            this.x = (this.x / count);\r\n            this.y = (this.y / count);\r\n        }\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        return this.x < 1 && this.y < 1;\r\n    }\r\n\r\n    public size(posA: Point, posB: Point) {\r\n        let x1 = 0, x2 = 0, y1 = 0, y2 = 0;\r\n        if (posA) {\r\n            x1 = posA.x;\r\n            y1 = posA.y;\r\n        }\r\n        if (posB) {\r\n            x2 = posB.x;\r\n            y2 = posB.y;\r\n        }\r\n        if (x1 > x2) {\r\n            this.x = x1 - x2;\r\n        } else {\r\n            this.x = x2 - x1;\r\n        }\r\n        if (y1 > y2) {\r\n            this.y = y1 - y2;\r\n        } else {\r\n            this.y = y2 - y1;\r\n        }\r\n    }\r\n}\r\n\r\n// \t\t\t\t######################################################### Line #########################################################\r\nexport class Line extends DiagramElement {\r\n    public static FORMAT = { SOLID: 'SOLID', DOTTED: 'DOTTED', PATH: 'PATH' };\r\n    public source: Point;\r\n    public target: Point;\r\n    public color: string;\r\n    public lineType: string;\r\n    private path: string;\r\n    private angle: Number;\r\n\r\n    constructor(lineType: string) {\r\n        super();\r\n        this.lineType = lineType;\r\n    }\r\n\r\n    public getTyp(): string {\r\n        return 'SVG';\r\n    }\r\n\r\n    public getPos() {\r\n        let pos = new Point();\r\n        pos.center(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public getSize() {\r\n        let pos = new Point();\r\n        pos.size(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public withColor(color: string): Line {\r\n        this.color = color;\r\n        return this;\r\n    }\r\n\r\n    public withSize(x: number, y: number): DiagramElement {\r\n        return this;\r\n    }\r\n\r\n    public withPath(path: Array<Point>, close: boolean, angle?: any): Line {\r\n        let i: number, d: string = 'M' + path[0].x + ' ' + path[0].y;\r\n        this.lineType = Line.FORMAT.PATH; // It is a Path not a Line\r\n        for (i = 1; i < path.length; i += 1) {\r\n            d = d + 'L ' + path[i].x + ' ' + path[i].y;\r\n        }\r\n        if (close) {\r\n            d = d + ' Z';\r\n            this.target = path[0];\r\n        } else {\r\n            this.target = path[path.length - 1];\r\n        }\r\n        this.path = d;\r\n        if (angle instanceof Number) {\r\n            this.angle = angle;\r\n        } else if (angle) {\r\n            // var lineangle, start = path[0], end = path[path.length - 1];\r\n            // lineangle = Math.atan2(end.y - start.y, end.x - start.x);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): SVGGElement {\r\n        if (this.lineType === 'PATH') {\r\n            return <SVGGElement>Util.create({\r\n                tag: 'path',\r\n                'd': this.path,\r\n                'fill': this.color,\r\n                stroke: '#000',\r\n                'stroke-width': '1px'\r\n            });\r\n        }\r\n        let line: SVGGElement = <SVGGElement>Util.create({\r\n            tag: 'line',\r\n            'x1': this.source.x,\r\n            'y1': this.source.y,\r\n            'x2': this.target.x,\r\n            'y2': this.target.y,\r\n            'stroke': Util.getColor(this.color)\r\n        });\r\n        if (this.lineType && this.lineType.toLowerCase() === 'dotted') {\r\n            line.setAttribute('stroke-miterlimit', '4');\r\n            line.setAttribute('stroke-dasharray', '1,1');\r\n        }\r\n        return line;\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport Options from '../Options';\r\nimport {JavaAdapter} from '../adapters';\r\n\r\nexport class ClassEditor extends Graph {\r\n    private adapter: JavaAdapter;\r\n    constructor(json: any, options: Options) {\r\n        if (!options ) {\r\n            options = {};\r\n        }\r\n        options.canvas = options.canvas || 'canvas';\r\n        // options.origin = options.origin || new Point(150, 45);\r\n//            layout: \"DagreLayout\",\r\n        options.autoSave = options.autoSave || true;\r\n        if (!options.features) {\r\n            options.features = {\r\n                drag: true,\r\n                editor: true,\r\n                palette: true,\r\n                select: true,\r\n                zoom: true,\r\n                toolbar: true,\r\n                import: true,\r\n                properties: true,\r\n                addnode: true,\r\n                newedge: true\r\n            };\r\n        }\r\n        super(json, options);\r\n    }\r\n\r\n    public setBoardStyle(value: string) {\r\n        console.log(value);\r\n        this.importFile.setBoardStyle(value);\r\n    }\r\n\r\n    public registerListener(): void {\r\n        this.adapter = new JavaAdapter();\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return this.adapter;\r\n    }\r\n}\r\n","import * as edges from './edges';\r\nimport { Association } from './edges';\r\nimport * as nodes from './nodes';\r\nimport * as layouts from '../layouts';\r\nimport Layout from '../layouts/Layout';\r\nimport { GraphModel } from './Model';\r\nimport { Point, Size } from './BaseElements';\r\nimport { Util } from '../util';\r\nimport { Control } from '../Control';\r\nimport Data from '../Data';\r\nimport { EventBus } from '../EventBus';\r\nimport { AddNode, Drag, NewEdge, Select, Zoom } from '../handlers';\r\nimport Options from '../Options';\r\nimport { ImportFile } from '../handlers/ImportFile';\r\nimport { CSS } from '../CSS';\r\nimport { DiagramElement } from './index';\r\nimport { Toolbar } from '../Toolbar';\r\nimport {JSEPS} from '../JSEPS';\r\nimport {SVGConverter} from '../SVGConverter';\r\nimport Palette from '../Palette';\r\nimport {PanelGroup} from '../PropertiesPanel';\r\n\r\nexport class Graph extends Control {\r\n    // canvas: HTMLElement;\r\n    root: SVGElement;\r\n    $graphModel: GraphModel;\r\n    options: Options;\r\n    canvasSize: Size;\r\n    nodeFactory: Object;\r\n    edgeFactory: Object;\r\n    layoutFactory: Object;\r\n    protected importFile: ImportFile;\r\n    private currentlayout: Layout;\r\n    // private layerToolBar: SVGSVGElement;\r\n    // https://stackoverflow.com/questions/15181452/how-to-save-export-inline-svg-styled-with-css-from-browser-to-image-file\r\n    private containerElements = ['svg', 'g'];\r\n    private relevantStyles = {\r\n        'rect': ['fill', 'stroke', 'stroke-width'],\r\n        'path': ['fill', 'stroke', 'stroke-width', 'opacity'],\r\n        'circle': ['fill', 'stroke', 'stroke-width'],\r\n        'line': ['stroke', 'stroke-width'],\r\n        'text': ['fill', 'font-size', 'text-anchor', 'font-family'],\r\n        'polygon': ['stroke', 'fill']\r\n    };\r\n\r\n    constructor(json: any, options: Options) {\r\n        super();\r\n        json = json || {};\r\n        if (json['data']) {\r\n            options = json['options'];\r\n            json = json['data'];\r\n            this.id = json['id'];\r\n        }\r\n        this.options = options || {features: { drag: true}};\r\n        if (json['init']) {\r\n            return;\r\n        }\r\n        if (!this.options.origin) {\r\n            this.options.origin = new Point(150, 45);\r\n        }\r\n        if (!this.options.style) {\r\n            // Style can be classic or modern\r\n            this.options.style = 'classic';\r\n        }\r\n        if (this.options.autoSave) {\r\n            Util.isAutoSave = options.autoSave;\r\n        }\r\n\r\n        this.initFactories();\r\n        this.initCanvas();\r\n        this.initFeatures(this.options.features);\r\n\r\n        // load previous session, if user wants it\r\n        // otherwise load the json data\r\n        if (!this.lookupInLocalStorage()) {\r\n            this.load(json);\r\n        }\r\n\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    public lookupInLocalStorage(): boolean {\r\n        if (!this.options.autoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (!Util.isLocalStorageSupported()) {\r\n            return false;\r\n        }\r\n        let diagram = Util.getDiagramFromLocalStorage();\r\n        if (diagram && diagram.length > 0) {\r\n            if (confirm('Restore previous session?')) {\r\n                let jsonData: JSON = JSON.parse(diagram);\r\n                this.load(jsonData);\r\n                this.layout();\r\n                return true;\r\n            } else {\r\n                Util.saveToLocalStorage( null);\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public fitSizeOnNodes(): void {\r\n        let maxWidth: number = 0;\r\n        let maxHeight: number = 0;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            let nodePos = node.getPos();\r\n            let nodeSize = node.getSize();\r\n            let nodeWidestPosX = nodePos.x + nodeSize.x;\r\n            let nodeWidestPosY = nodePos.y + nodeSize.y;\r\n\r\n            if (nodeWidestPosX > maxWidth) {\r\n                maxWidth = nodeWidestPosX;\r\n            }\r\n\r\n            if (nodeWidestPosY > maxHeight) {\r\n                maxHeight = nodeWidestPosY;\r\n            }\r\n        }\r\n\r\n        this.root.setAttributeNS(null, 'width', '' + (maxWidth + 100));\r\n        this.root.setAttributeNS(null, 'height', '' + (maxHeight + 50));\r\n    }\r\n\r\n    public saveAs(typ: string) {\r\n        typ = typ.toLowerCase();\r\n\r\n        // shrink size of graph to minimum. only to show up nodes\r\n        const currentSize = this.getRootSize();\r\n        this.fitSizeOnNodes();\r\n\r\n        if (typ === 'svg') {\r\n            this.exportSvg();\r\n        } else if (typ === 'png') {\r\n            this.exportPng();\r\n        } else if (typ === 'html') {\r\n            this.exportHtml();\r\n\r\n        } else if (typ === 'pdf') {\r\n            this.exportPdf();\r\n            // } else if (typ === 'eps') {\r\n            // this.ExportEPS();\r\n        }\r\n        else if (typ === 'json') {\r\n            this.exportJson();\r\n        }\r\n\r\n        // set the size back to default\r\n        this.root.setAttributeNS(null, 'width', '' + currentSize.width);\r\n        this.root.setAttributeNS(null, 'height', '' + currentSize.height);\r\n    }\r\n\r\n    /**\r\n     * generates a blob file and makes it available for download.\r\n     * @param type type of file\r\n     * @param data raw data\r\n     * @param name name of download file\r\n     */\r\n    public save(type: string, data: any, name: string, context: string) {\r\n        if (window['java']) {\r\n            window['java'].export(type, data, name, context);\r\n            return;\r\n        }\r\n        let a = document.createElement('a');\r\n        a.href = window.URL.createObjectURL(new Blob([data], { type: context }));\r\n        a.download = name;\r\n        document.body.appendChild(a);\r\n        a.click();\r\n        document.body.removeChild(a);\r\n    }\r\n\r\n    /** Exports the diagram as svg. */\r\n    public exportSvg(): void {\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        this.save('svg', this.serializeXmlNode(wellFormatedSvgDom), 'class_diagram.svg', 'image/svg+xml');\r\n    }\r\n\r\n    /** Exports the diagram as html. */\r\n    public exportHtml(): void {\r\n        let htmlFacade = '<html><head><title>DiagramJS - Classdiagram</title></head><body>$content</body></html>';\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        let svgAsXml = this.serializeXmlNode(wellFormatedSvgDom);\r\n\r\n        let htmlResult = htmlFacade.replace('$content', svgAsXml);\r\n\r\n        this.save('html', htmlResult, 'class_diagram.htm', 'text/plain');\r\n    }\r\n\r\n    /** Exports the diagram as json. */\r\n    public exportJson(): void {\r\n        let type = 'text/plain';\r\n        let jsonObj = Util.toJson(this.$graphModel);\r\n        let data = JSON.stringify(jsonObj, null, '\\t');\r\n\r\n        this.save('json', data, 'class_diagram.json', type);\r\n    }\r\n\r\n    /** Exports the diagram as pdf. */\r\n    public exportPdf(): void {\r\n        if (!window['jsPDF']) {\r\n            console.log('jspdf n.a.');\r\n            return;\r\n        }\r\n        let type = 'image/svg+xml';\r\n        let converter, pdf = new window['jsPDF']('l', 'px', [this.$graphModel.getSize().x, this.$graphModel.getSize().y]);\r\n        converter = new SVGConverter(this.$view, pdf, {removeInvalid: false});\r\n        pdf.save('Download.pdf');\r\n/*        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let canvas, context, a, image = new Image();\r\n        let size = this.getRootSize();\r\n\r\n        // create the loaded img source into a canvas. to generate a picture. then place this picture in the pdf\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            let pdf = new window['jsPDF']();\r\n\r\n            pdf.addImage(canvas.toDataURL('image/jpeg'), 'jpeg', 15, 40, 180, 160);\r\n            pdf.save('class_diagram.pdf');\r\n\r\n        };\r\n\r\n        image.src = url;\r\n        */\r\n    }\r\n\r\n    public import(data: string): void {\r\n        let rootElement = this.$graphModel.$view;\r\n        while (rootElement.hasChildNodes()) {\r\n            rootElement.removeChild(rootElement.firstChild);\r\n        }\r\n\r\n        while (this.$view.hasChildNodes()) {\r\n            this.$view.removeChild(this.$view.firstChild);\r\n        }\r\n\r\n        this.clearModel();\r\n        let jsonData = JSON.parse(data);\r\n        this.load(jsonData);\r\n        this.layout();\r\n    }\r\n\r\n    public exportEPS(): void {\r\n          let converter, doc = new JSEPS({inverting: true});\r\n            converter = new SVGConverter(this.$view, doc, {removeInvalid: false});\r\n            this.save('eps', doc.getData(), 'diagram.eps', doc.getType());\r\n    }\r\n\r\n    /** Exports the diagram as png. */\r\n    public exportPng(): void {\r\n        let canvas, context, a, image = new Image();\r\n        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let typ = 'image/svg+xml';\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let size = this.getRootSize();\r\n\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            a = document.createElement('a');\r\n            a.download = 'class_diagram.png';\r\n            a.href = canvas.toDataURL('image/png');\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            document.body.removeChild(a);\r\n        };\r\n\r\n        image.src = url;\r\n\r\n    }\r\n\r\n    public getSvgWithStyleAttributes(): Node {\r\n        let oDOM = this.$graphModel.$view.cloneNode(true);\r\n        this.readElement(oDOM, this.$graphModel.$view);\r\n\r\n        return oDOM;\r\n    }\r\n\r\n    public serializeXmlNode(xmlNode: any) {\r\n        if (window['XMLSerializer'] !== undefined) {\r\n            return (new window['XMLSerializer']()).serializeToString(xmlNode);\r\n        }\r\n        if (xmlNode.xml !== undefined) {\r\n            return xmlNode.xml;\r\n        }\r\n        return xmlNode.outerHTML;\r\n    }\r\n\r\n    public getRootSize(): Size {\r\n        let width: number;\r\n        let height: number;\r\n        width = +this.root.getAttribute('width');\r\n        height = +this.root.getAttribute('height');\r\n\r\n        return { width: width, height: height };\r\n    }\r\n\r\n        // Graph.prototype.ExportEPS = function () {\r\n        //     var converter, doc = new svgConverter.jsEPS({inverting: true});\r\n        //     converter = new svgConverter(this.board, doc, {removeInvalid: false});\r\n        //     doc.save();\r\n        // };\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        this.$graphModel = new GraphModel();\r\n        this.$graphModel.init(this);\r\n        this.$graphModel.load(json);\r\n    }\r\n\r\n    public clearModel(): void {\r\n        this.$graphModel.removeAllElements();\r\n        this.clearSvgRoot();\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.layout();\r\n        return this;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        return;\r\n    }\r\n\r\n    public getNextFreePosition(): Point {\r\n\r\n        if (!this.$graphModel) {\r\n            return new Point(50, 50);\r\n        }\r\n\r\n        let point = new Point(0, 50);\r\n\r\n        let maxX = 0;\r\n        let minX = 9000;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            maxX = Math.max(maxX, node.getPos().x);\r\n            minX = Math.min(minX, node.getPos().x);\r\n        }\r\n\r\n        if (minX > 170) {\r\n            point.x = 10;\r\n        }\r\n        else {\r\n            point.x = maxX + 200;\r\n        }\r\n\r\n        return point;\r\n    }\r\n\r\n    public addElement(type: string, dontDraw?: boolean): boolean {\r\n        let success = this.$graphModel.addElement(type);\r\n        if (success === true) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return success;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues?: Object, layout?: boolean, dontDraw?: boolean): DiagramElement {\r\n        let element = this.$graphModel.addElementWithValues(type, optionalValues);\r\n        if (element && layout) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public layout(dontDraw?: boolean): Graph {\r\n        this.getLayout().layout(this, this.$graphModel);\r\n\r\n        if (dontDraw) {\r\n            return this;\r\n        }\r\n\r\n        this.draw();\r\n        return this;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTDRAGOVER, EventBus.ELEMENTDRAGLEAVE, EventBus.ELEMENTDROP];\r\n    }\r\n\r\n    public draw() {\r\n        this.clearSvgRoot();\r\n        let model = this.$graphModel;\r\n        let root = this.root;\r\n        let max: Point = new Point();\r\n        if (this.options) {\r\n            max.x = this.options.minWidth || 0;\r\n            max.y = this.options.minHeight || 0;\r\n        }\r\n\r\n        for (let node of model.nodes) {\r\n            let svg = node.getSVG();\r\n            EventBus.register(node, svg);\r\n            root.appendChild(svg);\r\n\r\n            let temp: number;\r\n            temp = node.getPos().x + node.getSize().x;\r\n            if (temp > max.x) {\r\n                max.x = temp;\r\n            }\r\n            temp = node.getPos().y + node.getSize().y;\r\n            if (temp > max.y) {\r\n                max.y = temp;\r\n            }\r\n\r\n        }\r\n        Util.setAttributeSize(this.root, max.x + 60, max.y + 40);\r\n\r\n        for (let edge of model.edges) {\r\n            let svg = edge.getSVG();\r\n            EventBus.register(edge, svg);\r\n            root.appendChild(svg);\r\n        }\r\n    }\r\n\r\n    public getNode(id: string) {\r\n        return this.$graphModel.getNodeById(id);\r\n    }\r\n\r\n    public drawElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let svg = element.getSVG();\r\n        this.root.appendChild(svg);\r\n\r\n        // actualize root width size, if neccessary\r\n        // get current width of root\r\n        let rootSize = this.getRootSize();\r\n        let newWidth = element.getPos().x + element.getSize().x + 40;\r\n        let newHeight = element.getPos().y + element.getSize().y;\r\n\r\n        if (rootSize.width < newWidth) {\r\n            this.root.setAttributeNS(null, 'width', '' + newWidth);\r\n        }\r\n\r\n        if (rootSize.height < newHeight) {\r\n            this.root.setAttributeNS(null, 'height', '' + newHeight);\r\n        }\r\n\r\n        // draw edge\r\n        if (element instanceof Association) {\r\n            let edge = <Association>element;\r\n            edge.redraw(edge.$sNode);\r\n            let srcSvg = element.$sNode.getAlreadyDisplayingSVG();\r\n            let targetSvg = element.$tNode.getAlreadyDisplayingSVG();\r\n\r\n            this.root.appendChild(srcSvg);\r\n            this.root.appendChild(targetSvg);\r\n        }\r\n\r\n        EventBus.register(element, svg);\r\n    }\r\n\r\n    public removeElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let alreadyDisplayingSvg = element.getAlreadyDisplayingSVG();\r\n        if (Util.isParentOfChild(this.root, alreadyDisplayingSvg)) {\r\n            this.root.removeChild(alreadyDisplayingSvg);\r\n        }\r\n    }\r\n\r\n    public generate(packageName: string, path?: string) {\r\n        this.$graphModel.package = packageName;\r\n        this.$graphModel.genPath = path;\r\n\r\n        let data, result = Util.toJson(this.$graphModel);\r\n        data = JSON.stringify(result, null, '\\t');\r\n        if (window['java'] && typeof window['java'].generate === 'function') {\r\n            window['java'].generate(data);\r\n        }\r\n    }\r\n// REFACTORING dd\r\n    private readElement(parent: any, origData: any): void {\r\n        let children = parent.childNodes;\r\n        let origChildDat = origData.childNodes;\r\n\r\n        for (let cd = 0; cd < children.length; cd++) {\r\n            let child = children[cd];\r\n\r\n            let tagName = child.tagName;\r\n            if (this.containerElements.indexOf(tagName) !== -1) {\r\n                this.readElement(child, origChildDat[cd]);\r\n            } else if (tagName in this.relevantStyles) {\r\n                let styleDef = window.getComputedStyle(origChildDat[cd]);\r\n\r\n                let styleString = '';\r\n                for (let st = 0; st < this.relevantStyles[tagName].length; st++) {\r\n                    styleString += this.relevantStyles[tagName][st] + ':' + styleDef.getPropertyValue(this.relevantStyles[tagName][st]) + '; ';\r\n                }\r\n\r\n                child.setAttribute('style', styleString);\r\n            }\r\n        }\r\n    }\r\n\r\n    private createPattern(): Element {\r\n        const defs = Util.createShape({ tag: 'defs' });\r\n        const pattern = Util.createShape({\r\n            tag: 'pattern',\r\n            id: 'raster',\r\n            patternUnits: 'userSpaceOnUse',\r\n            width: 40,\r\n            height: 40\r\n        });\r\n        const path = 'M0 4 L0 0 L4 0 M36 0 L40 0 L40 4 M40 36 L40 40 L36 40 M4 40 L0 40 L0 36';\r\n        const cross = Util.createShape({\r\n            tag: 'path',\r\n            d: path,\r\n            stroke: '#DDD',\r\n            'stroke-width': 1,\r\n            fill: 'none'\r\n        });\r\n\r\n        const rect = Util.createShape({\r\n            tag: 'rect',\r\n            x: 0,\r\n            y: 0,\r\n            width: 40,\r\n            height: 40,\r\n            fill: 'none'\r\n        });\r\n        pattern.appendChild(rect);\r\n        pattern.appendChild(cross);\r\n        defs.appendChild(pattern);\r\n        return defs;\r\n    }\r\n\r\n    private clearSvgRoot() {\r\n        const root = this.root;\r\n        this.$graphModel.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n        while (root.firstChild) {\r\n            root.removeChild(root.firstChild);\r\n        }\r\n\r\n        root.appendChild(this.createPattern());\r\n        let fillValue = 'none';\r\n        if (this.options.raster) {\r\n            fillValue = 'url(#raster)';\r\n        }\r\n        let background = Util.createShape({\r\n            tag: 'rect',\r\n            id: 'background',\r\n            width: 5000,\r\n            height: 5000,\r\n            x: 0,\r\n            y: 0,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: fillValue\r\n        });\r\n        root.appendChild(background);\r\n\r\n        // delete inline Edit, if exists\r\n        let inlineEdit = document.getElementById('inlineEdit');\r\n        if (inlineEdit && document.body.contains(inlineEdit)) {\r\n            document.body.removeChild(inlineEdit);\r\n        }\r\n    }\r\n\r\n    private getLayout(): Layout {\r\n        if (this.currentlayout) {\r\n            return this.currentlayout;\r\n        }\r\n\r\n        let layout = this.options.layout || '';\r\n        if (this.layoutFactory[layout]) {\r\n            this.currentlayout = new this.layoutFactory[layout]();\r\n        } else {\r\n            this.currentlayout = new layouts.DagreLayout();\r\n        }\r\n\r\n        return this.currentlayout;\r\n    }\r\n\r\n    private initFactories() {\r\n\r\n        let noder = nodes;\r\n        this.nodeFactory = {};\r\n        for (let id in noder) {\r\n            if (noder.hasOwnProperty(id) === true) {\r\n                this.nodeFactory[id] = noder[id];\r\n            }\r\n        }\r\n\r\n        let edger = edges;\r\n        this.edgeFactory = {};\r\n        for (let id in edger) {\r\n            if (edger.hasOwnProperty(id) === true) {\r\n                this.edgeFactory[id] = edger[id];\r\n            }\r\n        }\r\n\r\n        let layouter = layouts;\r\n        this.layoutFactory = {};\r\n        for (let id in layouter) {\r\n            if (layouter.hasOwnProperty(id) === true) {\r\n                this.layoutFactory[id] = layouter[id];\r\n            }\r\n        }\r\n    }\r\n\r\n    private initCanvas() {\r\n        if (this.options.canvas) {\r\n            this.$view = document.getElementById(this.options.canvas);\r\n        }\r\n        if (!this.$view) {\r\n            this.$view = document.createElement('div');\r\n            this.$view.setAttribute('class', 'diagram');\r\n            document.body.appendChild(this.$view);\r\n        }\r\n    }\r\n\r\n    private initFeatures(features: any) {\r\n\r\n        if (features) {\r\n            if (features.newedge) {\r\n                EventBus.subscribe(new NewEdge(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            this.importFile = new ImportFile(this);\r\n            if (features.import) {\r\n                EventBus.subscribe(this.importFile, 'dragover', 'dragleave', 'drop');\r\n            }\r\n            if (features.zoom) {\r\n                let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n                EventBus.subscribe(new Zoom(this), mousewheel);\r\n            }\r\n            if (features.drag) {\r\n                EventBus.subscribe(new Drag(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            if (features.select) {\r\n                EventBus.subscribe(new Select(this), 'click', 'drag');\r\n            }\r\n            if (features.palette) {\r\n                new Palette(this).show();\r\n            }\r\n            if (features.toolbar) {\r\n                new Toolbar(this).show();\r\n            }\r\n            if (features.properties) {\r\n                let propertyPanel = new PanelGroup(this);\r\n                // let dispatcher = new PropertiesDispatcher(this);\r\n                EventBus.subscribe(propertyPanel, 'dblclick', 'click', EventBus.RELOADPROPERTIES);\r\n                propertyPanel.show();\r\n            }\r\n            if (features.addnode) {\r\n                EventBus.subscribe(new AddNode(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n        }\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport {DiagramElement, Point} from './BaseElements';\r\nimport {Association} from './edges';\r\nimport {Node} from './nodes';\r\nimport {Control} from '../Control';\r\nimport {Util} from '../util';\r\nimport {EventBus} from '../EventBus';\r\n\r\nexport class GraphModel extends DiagramElement {\r\n    nodes: Node[] = [];\r\n    edges: Association[] = [];\r\n    package: string;\r\n    genPath: string;\r\n    $isLoading: boolean;\r\n\r\n    public load(data?: any) {\r\n\r\n        this.$isLoading = true;\r\n        data = data || {};\r\n        this.property = data.type || data.property || 'classdiagram';\r\n        this.id = 'RootElement';\r\n        if (data.nodes) {\r\n            for (let node of data.nodes) {\r\n                this.addNode(node);\r\n            }\r\n        }\r\n        if (data.edges) {\r\n            for (let edge of data.edges) {\r\n                this.addEdge(edge);\r\n            }\r\n        }\r\n\r\n        this.$isLoading = false;\r\n    }\r\n\r\n    public getNodeByPosition(x: number, y: number): Node {\r\n        for (let node of this.nodes) {\r\n            let posOfNode: Point = (<Node>node).getPos();\r\n            let sizeOfNode: Point = (<Node>node).getSize();\r\n\r\n            if ((posOfNode.x <= x && (posOfNode.x + sizeOfNode.x) >= x)\r\n                && (posOfNode.y <= y && (posOfNode.y + sizeOfNode.y) >= y)) {\r\n                return node;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.initCanvas();\r\n        return this;\r\n    }\r\n\r\n    public addElement(type: string): boolean {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n        if (element) {\r\n            Util.saveToLocalStorage(this);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues: Object): DiagramElement {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n\r\n        // position\r\n        if (optionalValues) {\r\n            if (optionalValues.hasOwnProperty('x') && optionalValues.hasOwnProperty('y')) {\r\n                let x = optionalValues['x'];\r\n                let y = optionalValues['y'];\r\n                element.withPos(x, y);\r\n            }\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return element;\r\n    }\r\n\r\n    public removeAllElements(): void {\r\n\r\n        let nodesLength = this.nodes.length;\r\n        for (let i = 0; i < nodesLength; i++) {\r\n            this.removeElement(this.nodes[0].id);\r\n        }\r\n\r\n        this.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n    }\r\n\r\n    public removeElement(id: string): boolean {\r\n\r\n        let element = this.getDiagramElementById(id);\r\n        if (!element) {\r\n            return false;\r\n        }\r\n\r\n        (<Graph>this.$owner).removeElement(element);\r\n\r\n        if (element instanceof Node) {\r\n\r\n            let idxOfNode = this.nodes.indexOf(element);\r\n            if (idxOfNode > -1) {\r\n                this.nodes.splice(idxOfNode, 1);\r\n            }\r\n\r\n            while (element.$edges.length > 0) {\r\n                this.removeElement(element.$edges[0].id);\r\n            }\r\n\r\n            element.$edges = [];\r\n        }\r\n        else if (element instanceof Association) {\r\n\r\n            let idxOfEdge = this.edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                this.edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from source\r\n            idxOfEdge = element.$sNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$sNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from target\r\n            idxOfEdge = element.$tNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$tNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return true;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        const size = 10;\r\n        const path = `M${-size} 0 L${+size} 0 M0 ${-size} L0 ${+size}`;\r\n\r\n        const attr = {\r\n            tag: 'path',\r\n            id: 'origin',\r\n            d: path,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: 'none'\r\n        };\r\n        let shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: 0 - size,\r\n            y: 0 - size / 1.5,\r\n            'text-anchor': 'end',\r\n            'font-family': 'Verdana',\r\n            'font-size': '9',\r\n            fill: '#999'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = '(0, 0)';\r\n\r\n        let group = this.createShape({tag: 'g'});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEUP, EventBus.ELEMENTMOUSELEAVE, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTMOUSEWHEEL, EventBus.ELEMENTCLICK, EventBus.ELEMENTDRAG];\r\n    }\r\n\r\n    public getNewId(prefix?: string): string {\r\n        let id = (prefix ? prefix.toLowerCase() + '-' : '') + Math.floor(Math.random() * 100000);\r\n        return id;\r\n    }\r\n\r\n    public getEdgeById(id: string): Association {\r\n        for (let edge of this.edges) {\r\n            if (edge.id === id) {\r\n                return edge;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    public getDiagramElementById(id: string): DiagramElement {\r\n\r\n        return this.getNodeById(id) || this.getEdgeById(id);\r\n    }\r\n\r\n    /**\r\n     * Add an edge with data in json file. Optional you can say, that the edge should have\r\n     * the points of source node and target node.\r\n     * @param edge information about edge in json\r\n     * @param withPosOfNodes optional. set points to line of source and target node\r\n     */\r\n    public addEdge(edge: any, withPosOfNodes?: boolean): Association {\r\n\r\n        // lookup in factoryedges and check if the edge type realy exists\r\n        if (edge && edge.type) {\r\n            const graph = (<Graph>this.$owner);\r\n            let typeExists = false;\r\n            for (let edgeType in graph.edgeFactory) {\r\n                if (edgeType === edge.type) {\r\n                    typeExists = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!typeExists) {\r\n                edge.type = 'Association';\r\n            }\r\n        }\r\n\r\n        let type = edge.type || 'Association';\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n\r\n        let newEdge = <Association>this.createElement(type, id, edge);\r\n        newEdge.type = type;\r\n\r\n        let source: Node;\r\n        let sourceAsString: string = edge.source.id || edge.source;\r\n        if (sourceAsString) {\r\n            source = this.getNodeById(sourceAsString);\r\n            if (!source) {\r\n                let nodeID = edge.source;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                source = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                source.init(this);\r\n            }\r\n        }\r\n\r\n        let target: Node;\r\n        let targetAsString: string = edge.target.id || edge.target;\r\n        if (targetAsString) {\r\n            target = this.getNodeById(targetAsString);\r\n            if (!target) {\r\n                let nodeID = edge.target;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                target = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                target.init(this);\r\n            }\r\n        }\r\n\r\n        newEdge.withItem(source, target);\r\n\r\n        if (withPosOfNodes) {\r\n            let srcX = source.getPos().x + (source.getSize().x / 2);\r\n            let srcY = source.getPos().y + (source.getSize().y / 2);\r\n\r\n            let targetX = target.getPos().x + (target.getSize().x / 2);\r\n            let targetY = target.getPos().y + (target.getSize().y / 2);\r\n\r\n            newEdge.addPoint(srcX, srcY);\r\n            newEdge.addPoint(targetX, targetY);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public createElement(type: string, id: string, data: Object): DiagramElement {\r\n        const graph = <Graph>this.$owner;\r\n        let element: DiagramElement;\r\n        if (graph.nodeFactory[type]) {\r\n            element = new graph.nodeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.nodes.push(<Node>element);\r\n        }\r\n        if (graph.edgeFactory[type]) {\r\n            element = new graph.edgeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.edges.push(<Association>element);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public getNodeById(id: string): Node {\r\n        for (let node of this.nodes) {\r\n            if (node.id === id) {\r\n                return node;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    private initCanvas() {\r\n        const graph = <Graph>this.$owner;\r\n        graph.canvasSize = {width: graph.$view.clientWidth, height: graph.$view.clientHeight};\r\n        graph.root = Util.createShape({\r\n            tag: 'svg',\r\n            id: 'root',\r\n            width: graph.canvasSize.width,\r\n            height: graph.canvasSize.height\r\n            // FIXME,viewBox: `${this.$graph.options.origin.x * -1} ${this.$graph.options.origin.y * -1} ${this.$graph.canvasSize.width} ${this.$graph.canvasSize.height}`\r\n        });\r\n        this.$view = graph.root;\r\n        graph.$view.appendChild(graph.root);\r\n\r\n        let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    private addNode(node: Node): Node {\r\n        let type = node['type'] || node.property || 'Node';\r\n        type = Util.toPascalCase(type);\r\n        let id = node['id'] || node['name'] || this.getNewId(type);\r\n\r\n        return <Node>this.createElement(type, id, node);\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction } from './index';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\n\r\nexport abstract class Aggregate extends Association {\r\n\r\n    protected $diamond: Element;\r\n\r\n    public getSVG(): Element {\r\n\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled diamond\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n        };\r\n\r\n        this.$diamond = this.createShape(attr);\r\n\r\n        group.appendChild(this.$diamond);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint: Point = this.$points[0];\r\n        let direction: Direction = Direction.Down;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if (this.$sNode.id === startNode.id || this.$points.length == 2) {\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$diamond.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint: Point, direction: Direction): string {\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                path = `M${startX} ${startY} L${startX + 6} ${startY + 10} L${startX} ${startY + 20} L${startX - 6} ${startY + 10} Z`;\r\n                startPoint.y = startPoint.y+20;\r\n                break;\r\n            case Direction.Right:\r\n                path = `M${startX} ${startY} L${startX - 10} ${startY + 6} L${startX - 20} ${startY} L${startX - 10} ${startY - 6} Z`;\r\n                startPoint.x = startPoint.x-20;\r\n                break;\r\n            case Direction.Left:\r\n                path = `M${startX} ${startY} L${startX + 10} ${startY - 6} L${startX + 20} ${startY} L${startX + 10} ${startY + 6} Z`;\r\n                startPoint.x = startPoint.x+20;\r\n                break;\r\n            case Direction.Down:\r\n                path = `M${startX} ${startY} L${startX - 6} ${startY - 10} L${startX} ${startY - 20} L${startX + 6} ${startY - 10} Z`;\r\n                startPoint.y = startPoint.y-20;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Aggregation extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'white');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { DiagramElement, Line, Point } from '../BaseElements';\r\nimport { Node } from '../nodes';\r\nimport { InfoText } from '../nodes/InfoText';\r\nimport { Util } from '../../util';\r\nimport { EventBus } from '../../EventBus';\r\nimport * as edges from '../edges';\r\nimport { Graph } from '../Graph';\r\n\r\nexport const enum Direction {\r\n    Up, Down, Left, Right\r\n}\r\n\r\nexport class Association extends DiagramElement {\r\n    public source: string;\r\n    public target: string;\r\n    public type: string;\r\n    public $sNode: Node;\r\n    public $tNode: Node;\r\n    public lineStyle: string;\r\n    public $points: Point[] = [];\r\n    public $pathSvg: Element;\r\n    public $pathWideSvg: Element;\r\n    public info: InfoText;\r\n    public sourceInfo: InfoText;\r\n    public targetInfo: InfoText;\r\n    $m: number;\r\n    $n: number;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super();\r\n\r\n        this.withData(data);\r\n    }\r\n\r\n    public withData(data: JSON | string | Object | any): Association {\r\n\r\n        if (!data) {\r\n            return this;\r\n        }\r\n        let srcInfo;\r\n        let trgInfo;\r\n\r\n        if (data.source && typeof data.source !== 'string') {\r\n            srcInfo = data.source;\r\n        }\r\n        else if (data.sourceInfo && typeof data.sourceInfo !== 'string') {\r\n            srcInfo = data.sourceInfo;\r\n        }\r\n\r\n        if (srcInfo) {\r\n            this.sourceInfo = new InfoText(srcInfo);\r\n            this.sourceInfo.$owner = this;\r\n        }\r\n\r\n        if (data.target && typeof data.target !== 'string') {\r\n            trgInfo = data.target;\r\n        }\r\n        else if (data.targetInfo && typeof data.targetInfo !== 'string') {\r\n            trgInfo = data.targetInfo;\r\n        }\r\n\r\n        if (trgInfo) {\r\n            this.targetInfo = new InfoText(trgInfo);\r\n            this.targetInfo.$owner = this;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    public updateSrcCardinality(cardinality: string): void {\r\n        this.sourceInfo = this.updateCardinality(this.$sNode, this.sourceInfo, cardinality);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetCardinality(cardinality: string): void {\r\n        this.targetInfo = this.updateCardinality(this.$tNode, this.targetInfo, cardinality);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateSrcProperty(property: string): void {\r\n        this.sourceInfo = this.updateProperty(this.$sNode, this.sourceInfo, property);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetProperty(property: string): void {\r\n        this.targetInfo = this.updateProperty(this.$tNode, this.targetInfo, property);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public withItem(source: Node, target: Node): Association {\r\n        source.$edges.push(this);\r\n        target.$edges.push(this);\r\n        this.$sNode = source;\r\n        this.$tNode = target;\r\n        this.source = source.id;\r\n        this.target = target.id;\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let group = Util.createShape({ tag: 'g', id: this.id, class: 'SVGEdge' });\r\n\r\n        let path: string = this.getPath();\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'none'\r\n        };\r\n        let pathLine = this.createShape(attr);\r\n\r\n        //attr['style'] = 'stroke-width:20;opacity:0;width:20;height:20';\r\n        let extendedPathLine = Util.createShape(attr);\r\n\r\n        group.appendChild(extendedPathLine);\r\n        group.appendChild(pathLine);\r\n\r\n        if (this.sourceInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.sourceInfo.getSVG());\r\n        }\r\n        if (this.targetInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.targetInfo.getSVG());\r\n        }\r\n\r\n        this.$pathWideSvg = extendedPathLine;\r\n        this.$pathSvg = pathLine;\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.EDITOR, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    public convertEdge(type: string, newId: string, redraw?: boolean): Association {\r\n        if (!edges[type]) {\r\n            return this;\r\n        }\r\n\r\n        let newEdge: Association = new edges[type]();\r\n        newEdge.withItem(this.$sNode, this.$tNode);\r\n        newEdge.id = newId;\r\n        newEdge.type = type;\r\n        newEdge.lineStyle = this.lineStyle;\r\n        newEdge.$owner = this.$owner;\r\n\r\n        if (this.sourceInfo) {\r\n            newEdge.sourceInfo = new InfoText({ property: this.sourceInfo.property, cardinality: this.sourceInfo.cardinality });\r\n            newEdge.sourceInfo.$owner = newEdge;\r\n        }\r\n\r\n        if (this.targetInfo) {\r\n            newEdge.targetInfo = new InfoText({ property: this.targetInfo.property, cardinality: this.targetInfo.cardinality });\r\n            newEdge.targetInfo.$owner = newEdge;\r\n        }\r\n\r\n        this.$points.forEach(point => {\r\n            newEdge.addPoint(point.x, point.y);\r\n        });\r\n\r\n        let graph = <Graph>this.getRoot();\r\n        if (!graph) {\r\n            return this;\r\n        }\r\n\r\n        // update model. insert the edge exact on the same index, like the old edge\r\n        let idx = graph.$graphModel.edges.indexOf(this);\r\n        graph.$graphModel.removeElement(this.id);\r\n        if (idx > -1) {\r\n            graph.$graphModel.edges.splice(idx, 0, newEdge);\r\n        }\r\n        else {\r\n            graph.$graphModel.edges.push(newEdge);\r\n        }\r\n\r\n        if (!redraw) {\r\n            return newEdge;\r\n        }\r\n\r\n        let svgRoot: Element;\r\n        if (graph) {\r\n            svgRoot = graph.root;\r\n        }\r\n        else {\r\n            svgRoot = document.getElementById('root');\r\n        }\r\n        let newEdgeSvg = newEdge.getSVG();\r\n\r\n        // update graph\r\n        graph.removeElement(this);\r\n        svgRoot.appendChild(newEdgeSvg);\r\n\r\n        // redraw the edge from both sides to get the correct display\r\n        // if the type is edge, so the path can be redraw.\r\n        // if not, so the inherited class redraw the path with his own logic\r\n\r\n        let dontDrawPath: boolean = (type !== 'Edge');\r\n        newEdge.redraw(newEdge.$sNode, dontDrawPath);\r\n        newEdge.redraw(newEdge.$tNode, dontDrawPath);\r\n\r\n        EventBus.register(newEdge, newEdgeSvg);\r\n\r\n        this.sourceInfo = undefined;\r\n        this.targetInfo = undefined;\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n        // redraw the first point\r\n        // check which point is the near to startnode\r\n        let endPoint: Point;\r\n        let recalcPoint: Point;\r\n        let endPointIdx: number;\r\n\r\n        if (this.$sNode.id === startNode.id) {\r\n            recalcPoint = this.$points[0];\r\n            endPointIdx = 1;\r\n        } else if (this.$tNode.id === startNode.id) {\r\n            recalcPoint = this.$points[this.$points.length - 1];\r\n            endPointIdx = this.$points.length - 2;\r\n        }\r\n\r\n        endPoint = this.$points[endPointIdx];\r\n\r\n        // calculate and set new position of point to redraw\r\n        this.calcIntersection(startNode, recalcPoint, endPoint);\r\n\r\n        // remove the 2nd point next to startnode, if the node was dragged upper the point\r\n        if (this.$points.length > 2 && this.$tNode.id === startNode.id && endPoint.y > (startNode.getPos().y + (startNode.getSize().y / 2))) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$tNode.id === startNode.id && this.$points.length === 2) {\r\n            this.calcIntersection(this.$sNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (this.$points.length > 2 && this.$sNode.id === startNode.id && (startNode.getPos().y + (startNode.getSize().y / 2) > endPoint.y)) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$sNode.id === startNode.id && this.$points.length === 2) {\r\n\r\n            this.calcIntersection(this.$tNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (!dontDrawPoints) {\r\n            this.redrawPointsAndInfo();\r\n        }\r\n    }\r\n\r\n    public getPath(): string {\r\n\r\n        if (this.$points.length === 0) {\r\n            return '';\r\n        }\r\n\r\n        let path: string = 'M';\r\n        for (let i = 0; i < this.$points.length; i++) {\r\n            let point: Point = this.$points[i];\r\n            if (i > 0) {\r\n                path += 'L';\r\n            }\r\n            path += Math.floor(point.x) + ' ' + Math.floor(point.y) + ' ';\r\n        }\r\n\r\n        return path;\r\n    }\r\n    public calcInfoPosNew(infoTxt: InfoText, node: Node): Point {\r\n\r\n        if (!infoTxt || !node) {\r\n            return null;\r\n        }\r\n\r\n        // 1. step: get direction\r\n        let startPoint: Point;\r\n        let nextToStartPoint: Point;\r\n        if (this.$sNode.id === node.id) {\r\n            startPoint = this.$points[0];\r\n            nextToStartPoint = this.$points[1];\r\n        }\r\n        else if (this.$tNode.id === node.id) {\r\n            startPoint = this.$points[this.$points.length - 1];\r\n            nextToStartPoint = this.$points[this.$points.length - 2];\r\n        }\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(node, startPoint);\r\n\r\n        let x: number;\r\n        let y: number;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                break;\r\n            case Direction.Right:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x - (infoTxt.getSize().x) - 5;\r\n                break;\r\n            case Direction.Left:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x + 5;\r\n                break;\r\n            case Direction.Down:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        // assign calculated position to infotext\r\n        return new Point(x, y);\r\n    }\r\n\r\n    public clearPoints(): any {\r\n        this.$points = [];\r\n        this.$points = [];\r\n    }\r\n\r\n    public addPoint(x: number, y: number): Point[] {\r\n        this.$points.push(new Point(x, y));\r\n\r\n        return this.$points;\r\n    }\r\n\r\n    protected redrawPointsAndInfo(): void {\r\n        // redraw the edge with the new position\r\n        let path: string = this.getPath();\r\n        this.$pathSvg.setAttributeNS(null, 'd', path);\r\n        this.$pathWideSvg.setAttributeNS(null, 'd', path);\r\n\r\n        this.redrawSourceInfo();\r\n        this.redrawTargetInfo();\r\n    }\r\n\r\n    protected redrawSourceInfo() {\r\n        if (this.sourceInfo) {\r\n            let newPosOfSrc = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.redrawFromEdge(newPosOfSrc);\r\n        }\r\n    }\r\n\r\n    protected redrawTargetInfo() {\r\n        if (this.targetInfo) {\r\n            let newPosOfTarget = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.redrawFromEdge(newPosOfTarget);\r\n        }\r\n    }\r\n\r\n    protected getDirectionOfPointToNode(node: Node, pointNearNode: Point): Direction {\r\n        /*\r\n            Example to calculate the direction of nearest point to Node\r\n\r\n            node\r\n         x1_ _ _ _\r\n          |       |\r\n          |       |. pointNearNode\r\n          |       |\r\n          |_ _ _ x2\r\n\r\n          the calculation would return Direction.Left\r\n        */\r\n\r\n        let x1: Point = node.getPos();\r\n        let x2: Point = new Point((x1.x + node.getSize().x), (x1.y + node.getSize().y));\r\n        let direction: Direction = Direction.Down;\r\n\r\n        if (x1.y >= pointNearNode.y) {\r\n            direction = Direction.Down;\r\n        }\r\n        if (x2.y <= pointNearNode.y) {\r\n            direction = Direction.Up;\r\n        }\r\n        if (x1.x >= pointNearNode.x) {\r\n            direction = Direction.Right;\r\n        }\r\n        if (x2.x <= pointNearNode.x) {\r\n            direction = Direction.Left;\r\n        }\r\n\r\n        return direction;\r\n    }\r\n\r\n    private updateCardinality(node: Node, infoText: InfoText, cardinality: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'cardinality': cardinality });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.cardinality = cardinality;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateCardinality(cardinality);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private updateProperty(node: Node, infoText: InfoText, property: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'property': property });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.property = property;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateProperty(property);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private calcIntersection(startNode: Node, recalcPoint: Point, endPoint: Point): Point {\r\n\r\n        // https://www.mathelounge.de/21534/schnittpunkt-einer-linie-mit-den-randern-eines-rechtecks\r\n        let h = startNode.getSize().y;\r\n        let w = startNode.getSize().x;\r\n\r\n        let x1: number = startNode.getPos().x + (w / 2);\r\n        let y1: number = startNode.getPos().y + (h / 2);\r\n\r\n        let x2: number = endPoint.x;\r\n        let y2: number = endPoint.y;\r\n\r\n        let newX: number = recalcPoint.x;\r\n        let newY: number = recalcPoint.y;\r\n\r\n        if (x2 > x1) {\r\n            newX = x1 + (w / 2);\r\n        }\r\n        else if (x2 < x1) {\r\n            newX = x1 - (w / 2);\r\n        }\r\n        else {\r\n            newX = x1;\r\n        }\r\n\r\n        if ((x2 - x1) !== 0) {\r\n            newY = ((y2 - y1) / (x2 - x1) * (newX - x1)) + y1;\r\n        }\r\n        else {\r\n            if (y1 > y2) {\r\n                newY = startNode.getPos().y;\r\n            }\r\n            else {\r\n                newY = startNode.getPos().y + h;\r\n            }\r\n        }\r\n\r\n        // if the statement is not true, so the intersection is at the horizontal line\r\n        if (!((y1 - (h / 2) <= newY) && newY <= y1 + (h / 2))) {\r\n\r\n            if (y2 > y1) {\r\n                newY = y1 + (h / 2);\r\n            }\r\n            else {\r\n                newY = y1 - (h / 2);\r\n            }\r\n\r\n            if ((x2 - x1) !== 0) {\r\n                let tmp = ((y2 - y1) / (x2 - x1));\r\n                newX = (newY + (tmp * x1) - y1) / tmp;\r\n            }\r\n            else {\r\n                newX = x1;\r\n            }\r\n        }\r\n\r\n        recalcPoint.x = Math.ceil(newX);\r\n        recalcPoint.y = Math.ceil(newY);\r\n\r\n        return null;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Composition extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'black');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { Association } from './Association';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\nimport { Direction } from '../index';\r\n\r\nexport class Generalisation extends Association {\r\n\r\n    public $TARGET_ELEMENT_HEIGHT : number = 12;\r\n    protected $targetElement: Element;\r\n\r\n    public getSVG(): Element {\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction : Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled arrow\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'white'\r\n          };\r\n\r\n        this.$targetElement = this.createShape(attr);\r\n\r\n        group.appendChild(this.$targetElement);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean) : void {\r\n\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint : Point = this.$points[0];\r\n        let direction : Direction = Direction.Up;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if(this.$sNode.id === startNode.id || this.$points.length == 2){\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$targetElement.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint : Point, direction : Direction) : string{\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch(direction){\r\n            case Direction.Up:\r\n            path = `M${startX} ${startY+3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y+12;\r\n            break;\r\n            case Direction.Right:\r\n            path = `M${startX-3} ${startY} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x-12;\r\n            break;\r\n            case Direction.Left:\r\n            path = `M${startX+3} ${startY} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x+12;\r\n            break;\r\n            case Direction.Down:\r\n            path = `M${startX} ${startY-3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y-12;\r\n            break;\r\n            default :\r\n            break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n\r\n}\r\n","import { Generalisation } from './Generalisation';\r\n\r\nexport class Implements extends Generalisation {\r\n\r\n    public getSVG(): Element {\r\n        let group = super.getSVG();\r\n\r\n        this.$pathSvg.setAttributeNS(null, 'stroke-dasharray', '3, 3');\r\n\r\n        return group;\r\n    }\r\n}\r\n","export * from './Association';\r\nexport * from './Aggregate';\r\nexport * from './Aggregation';\r\nexport * from './Composition';\r\nexport * from './Generalisation';\r\nexport * from './Implements';","export * from './edges';\r\nexport * from './nodes';\r\nexport * from './BaseElements';\r\nexport * from './Graph';\r\nexport * from './Model';\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Attribute extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 28.06.2017.\r\n */\r\nimport {Control} from \"../../Control\";\r\n\r\nexport class AutoComplete extends Control {\r\n    private $inputField:HTMLInputElement;\r\n    private $dataList:HTMLDataListElement;\r\n    private $selected:HTMLSelectElement;\r\n    private $items:HTMLDivElement;\r\n    private isMultiple:boolean;\r\n\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        let div:HTMLDivElement = document.createElement('div');\r\n        this.$view = div;\r\n        this.$inputField = document.createElement('input');\r\n        this.$dataList = document.createElement(\"datalist\");\r\n        this.$dataList.id = \"data_\"+this.id;\r\n        this.$inputField.setAttribute(\"list\", \"data_\"+this.id);\r\n        if(data[\"value\"]) {\r\n            let values = data[\"value\"];\r\n            this.isMultiple = data[\"multiple\"] != null;\r\n            let option:HTMLOptionElement;\r\n            if(this.isMultiple) {\r\n                this.$selected = document.createElement(\"select\");\r\n                this.$selected.className = \"hide\";\r\n                this.$selected.multiple = true;\r\n\r\n                this.$selected.id = this.id;\r\n                this.$items = document.createElement(\"div\");\r\n                this.$items.className = \"selectedList\";\r\n                div.appendChild(this.$items);\r\n                this.$inputField.className = \"selectedInput\";\r\n                div.appendChild(this.$selected);\r\n                this.$view[\"style\"].setProperty(\"float\", \"left\");\r\n                let that = this;\r\n                this.$inputField.oninput = function(){that.onChange();}\r\n            } else {\r\n                this.$inputField.id = this.id;\r\n            }\r\n            for (let attr in values) {\r\n                if (!values.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                option = document.createElement(\"option\");\r\n                option.value = values[attr];\r\n                this.$dataList.appendChild(option);\r\n                if(this.isMultiple) {\r\n                    option = document.createElement(\"option\");\r\n                    option.value = values[attr];\r\n                    option.innerHTML = values[attr];\r\n                    this.$selected.appendChild(option);\r\n                }\r\n        }\r\n\r\n            div.appendChild(this.$inputField);\r\n            div.appendChild(this.$dataList);\r\n        }\r\n\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n            if(this.isMultiple) {\r\n                div.appendChild(this.$selected);\r\n            }\r\n        }\r\n\r\n        parent.appendChild(this);\r\n    }\r\n\r\n    public onChange() : void {\r\n        let textValue:string = this.$inputField.value;\r\n        if(textValue.length<1) {\r\n            return;\r\n        }\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == textValue) {\r\n                if(item.selected == false) {\r\n                    item.selected = true;\r\n                    item.defaultSelected = true;\r\n                    let test = document.createElement(\"li\");\r\n                    let that = this;\r\n                    test.onclick = function() {that.onDelete(item.value, test);};\r\n                    test.className = \"selectedItem\";\r\n                    test.innerHTML = item.value;\r\n                    this.$items.appendChild(test);\r\n                    this.$inputField.value = \"\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n    public onDelete(value:string, selectedItem:HTMLLIElement) : void {\r\n        this.$items.removeChild(selectedItem);\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == value ) {\r\n                if(item.selected) {\r\n                    item.selected = false;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","import {Control} from '../../Control';\r\n\r\nexport class BR extends Control {\r\n    public load(json: JSON): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('br');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            this.$view.setAttribute(attr, data[attr]);\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\nexport class Button extends Control {\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        this.$view = document.createElement('button');\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\nimport { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\nimport { Size } from '../index';\r\nimport ClazzProperty from './ClazzProperty';\r\nimport {SymbolLibary} from './Symbol';\r\nimport {StereoType} from './StereoType';\r\nimport {GraphListener} from '../../handlers/GraphListener';\r\n\r\nexport class Class extends Node {\r\n    public attributes: Attribute[] = [];\r\n    public methods: Method[] = [];\r\n    public modifier: string;\r\n    public stereoType: string;\r\n\r\n    protected $attrHeight = 25;\r\n    protected $attrFontSize = 12;\r\n    protected $labelView: Element;\r\n\r\n    constructor(json: JSON | string | Object | any) {\r\n        super(json);\r\n        return this;\r\n    }\r\n\r\n    public load(json?: any) {\r\n        if (!json) {\r\n            json = {};\r\n        }\r\n        let y = this.$labelHeight;\r\n        let labelObj = json.name || json.id || ('New ' + this.property);\r\n\r\n        let width: number = 150;\r\n        width = Math.max(width, Util.sizeOf(labelObj).width + 60);\r\n\r\n        if (json['attributes']) {\r\n            for (let attr of json['attributes']) {\r\n\r\n                let attrObj = new Attribute(attr);\r\n                attrObj.$owner = this;\r\n                this.attributes.push(attrObj);\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(attrObj.toString()).width);\r\n                let listener = new GraphListener(attrObj);\r\n                attrObj.$data.addListener(listener);\r\n            }\r\n        }\r\n        if (json['stereotype']) {\r\n            this.stereoType = json['stereotype'];\r\n        }\r\n        if (json['methods']) {\r\n            for (let method of json['methods']) {\r\n\r\n                let methodObj = new Method(method);\r\n                methodObj.$owner = this;\r\n                this.methods.push(methodObj);\r\n\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(methodObj.toString()).width);\r\n            }\r\n            y += this.$attrHeight;\r\n        }\r\n        this.withSize(width, y);\r\n    }\r\n\r\n    public getAttributes(): Attribute[] {\r\n        return this.attributes;\r\n    }\r\n\r\n    public getMethods(): Method[] {\r\n        return this.methods;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        let icon = SymbolLibary.draw({type: 'Class', property: 'HTML', width: '50', height: '50', transform: 'translate(-26,-21)'});\r\n        return icon;\r\n        // let group = this.createShape(\r\n//    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n//    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos: Point = this.getPos();\r\n        const size: Point = this.getSize();\r\n\r\n        let group = this.createShape({ tag: 'g', id: this.id, class: 'SVGClazz', transform: 'translate(0 0)' });\r\n\r\n        if (this.stereoType) {\r\n            let type = new StereoType(this.stereoType, pos.x, pos.y);\r\n            group.appendChild(type.getSVG());\r\n        }\r\n\r\n        // Full Shape\r\n        let options = null;\r\n        let style;\r\n        let clazzName;\r\n        if (this.$owner['options']) {\r\n            let options = this.$owner['options'];\r\n            if (options) {\r\n                style = options.style;\r\n            }\r\n        }\r\n        // = = = Background = = =\r\n        if (style === 'modern') {\r\n            clazzName = 'ClazzHeader';\r\n        }\r\n        clazzName = 'ClazzHeader';\r\n        const nodeShape = this.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            height: size.y,\r\n            width: size.x,\r\n            rx: 5,\r\n            ry: 5,\r\n            fill: 'none',\r\n            stroke: 'black',\r\n            'stroke-width': 1\r\n        });\r\n        if (clazzName) {\r\n            nodeShape.setAttribute('className', clazzName);\r\n            let styleHeader = Util.getStyle('ClazzHeader');\r\n            // headerHeight = styleHeader.getNumber('height');\r\n        }\r\n\r\n        // = = = LABEL = = =\r\n        let label = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y + this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': this.$labelFontSize,\r\n            fill: 'black'\r\n        });\r\n        label.textContent = this.id;\r\n        this.$labelView = label;\r\n\r\n        group.appendChild(nodeShape);\r\n        group.appendChild(label);\r\n\r\n        // = = = ATTRIBUTES = = =\r\n        if (this.attributes.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorLabelAttr = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight,\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight,\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorLabelAttr);\r\n\r\n            let groupOfAttributes = this.createShape({ tag: 'g', id: (this.id + 'Attributes') });\r\n            groupOfAttributes.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzAttribute');\r\n            group.appendChild(groupOfAttributes);\r\n\r\n            let y = pos.y + this.$labelHeight + this.$attrHeight / 2;\r\n            for (let attr of this.attributes) {\r\n\r\n                let attrSvg = attr.getSVG();\r\n                attr.$owner = this;\r\n\r\n                attrSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                attrSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfAttributes.appendChild(attrSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        // = = = METHODS = = =\r\n        let height = this.attributes.length * this.$attrHeight;\r\n        let y = pos.y + this.$labelHeight + height + this.$attrHeight / 2;\r\n        if (this.methods.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorAttrMethods = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorAttrMethods);\r\n\r\n            let groupOfMethods = this.createShape({ tag: 'g', id: (this.id + 'Methods') });\r\n            groupOfMethods.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzMethod');\r\n            group.appendChild(groupOfMethods);\r\n\r\n            y += this.$attrHeight / 2;\r\n            for (let method of this.methods) {\r\n\r\n                let methodSvg = method.getSVG();\r\n                method.$owner = this;\r\n\r\n                methodSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                methodSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfMethods.appendChild(methodSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        this.$view = group;\r\n        return group;\r\n    }\r\n\r\n    public copy(): Class {\r\n        let copy: Class;\r\n        copy = <Class>super.copy();\r\n\r\n        // copy label\r\n        copy.id = this.id + 'Copy';\r\n\r\n        // copy attributes\r\n        this.attributes.forEach(attr => {\r\n            copy.attributes.push(new Attribute(attr.toString()));\r\n        });\r\n        // copy methods\r\n        this.methods.forEach(method => {\r\n            copy.methods.push(new Method(method.toString()));\r\n        });\r\n        copy.reCalcSize();\r\n\r\n        return copy;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTCLICK,\r\n                EventBus.ELEMENTDRAG, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES, EventBus.RELOADPROPERTIES];\r\n    }\r\n\r\n    public addProperty(value: string, type: string): any {\r\n        if (!this[type] || !value || value.length === 0) {\r\n            return;\r\n        }\r\n\r\n        let extractedValue;\r\n        if (type === 'attributes') {\r\n            extractedValue = new Attribute(value);\r\n        }\r\n        else if (type === 'methods') {\r\n            extractedValue = new Method(value);\r\n        }\r\n\r\n        for (let valueOfType of this[type]) {\r\n            if (valueOfType.toString() === extractedValue.toString()) {\r\n                alert(extractedValue.toString() + ' already exists.');\r\n                extractedValue = undefined;\r\n                return;\r\n            }\r\n        }\r\n\r\n        this[type].push(extractedValue);\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        return extractedValue;\r\n    }\r\n\r\n    public addAttribute(value: string): Attribute {\r\n        return this.addProperty(value, 'attributes');\r\n    }\r\n\r\n    public addAttributeObj(attr: Attribute): Attribute[] {\r\n        this.attributes.push(attr);\r\n        return this.getAttributes();\r\n    }\r\n\r\n    public addMethodObj(method: Method): Method[] {\r\n        this.methods.push(method);\r\n        return this.getMethods();\r\n    }\r\n\r\n    public addMethod(value: string): Method {\r\n        return this.addProperty(value, 'methods');\r\n    }\r\n\r\n    public removeAttribute(attr: Attribute): void {\r\n        let idx = this.attributes.indexOf(attr);\r\n        this.attributes.splice(idx, 1);\r\n    }\r\n\r\n    public removeMethod(method: Method): void {\r\n        let idx = this.methods.indexOf(method);\r\n        this.methods.splice(idx, 1);\r\n    }\r\n\r\n    public removeProperty(property: ClazzProperty): void {\r\n\r\n        if (property instanceof Attribute) {\r\n            this.removeAttribute(<Attribute>property);\r\n        }\r\n\r\n        if (property instanceof Method) {\r\n            this.removeMethod(<Method>property);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n        let hasSizeChanged: [boolean, Size] = this.hasSizeChanged();\r\n\r\n        if (drawOnlyIfSizeChanged) {\r\n            if (!hasSizeChanged[0]) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n\r\n        // redraw only this clazz\r\n        this.$owner.$view.removeChild(this.$view);\r\n        let newSvg = this.getSVG();\r\n        this.$owner.$view.appendChild(newSvg);\r\n        this.$view = newSvg;\r\n        EventBus.register(this, newSvg);\r\n\r\n        this.redrawEdges();\r\n    }\r\n\r\n    public hasSizeChanged(): [boolean, Size] {\r\n        let oldSize = { width: this.getSize().x, height: this.getSize().y };\r\n        let newSize = this.reCalcSize();\r\n\r\n        // size doenst changed, so nothing to redraw\r\n        if (oldSize.width === newSize.width && oldSize.height === newSize.height) {\r\n            return [false, newSize];\r\n        }\r\n\r\n        return [true, newSize];\r\n    }\r\n\r\n    public updateLabel(newLabel: string): void {\r\n        if (this.$labelView) {\r\n            this.$labelView.textContent = newLabel;\r\n        }\r\n\r\n        // update label in all edges\r\n        this.$edges.forEach(edge => {\r\n            if (this.id === edge.$sNode.id) {\r\n                edge.source = newLabel;\r\n            }\r\n            else if (this.id === edge.$tNode.id) {\r\n                edge.target = newLabel;\r\n            }\r\n        });\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        this.reDraw(true);\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.modifier = modifier;\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reCalcSize(): Size {\r\n        // label\r\n        let newWidth = 150;\r\n        newWidth = Math.max(newWidth, Util.sizeOf(this.id).width + 30);\r\n\r\n        // attributes\r\n        this.attributes.forEach(attrEl => {\r\n\r\n            let widthOfAttr;\r\n            if (attrEl.$view) {\r\n                widthOfAttr = attrEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfAttr = Util.sizeOf(attrEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfAttr + 15);\r\n        });\r\n\r\n        // methods\r\n        this.methods.forEach(methodEl => {\r\n            let widthOfMethod;\r\n            if (methodEl.$view) {\r\n                widthOfMethod = methodEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfMethod = Util.sizeOf(methodEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfMethod + 15);\r\n        });\r\n\r\n        // TODO: height has to be calculated by font-size\r\n        this.getSize().x = newWidth;\r\n        this.getSize().y = this.$labelHeight + ((this.attributes.length + this.methods.length) * this.$attrHeight)\r\n            + this.$attrHeight;\r\n\r\n        let newSize = { width: newWidth, height: this.getSize().y };\r\n\r\n        return newSize;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    private getModernStyle(): Element {\r\n        let width, height, id, size, z, item, rect, g, board, styleHeader, headerHeight, x, y;\r\n        board = this.getRoot()['board'];\r\n        styleHeader = Util.getStyle('ClazzHeader');\r\n        headerHeight = styleHeader.getNumber('height');\r\n        width = 0;\r\n        height = 10 + headerHeight;\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].getType().toLowerCase() === 'objectdiagram') {\r\n            id = this.id.charAt(0).toLowerCase() + this.id.slice(1);\r\n            item = 'Object';\r\n        } else {\r\n            id = this.id;\r\n            item = 'Class';\r\n            if (this['counter']) {\r\n                id += ' (' + this['counter'] + ')';\r\n            }\r\n        }\r\n        g = Util.create({tag: 'g', model: this});\r\n        size = Util.sizeOf(id, this);\r\n        width = Math.max(width, size.width);\r\n        if (this.attributes && this.attributes.length > 0) {\r\n            height = height + this.attributes.length * 25;\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.attributes[z], this).width);\r\n            }\r\n        } else {\r\n            height += 20;\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            height = height + this.methods.length * 25;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.methods[z], this).width);\r\n            }\r\n        }\r\n        width += 20;\r\n\r\n        let pos = this.getPos();\r\n        y = pos.y;\r\n        x = pos.x;\r\n\r\n        rect = {\r\n            tag: 'rect',\r\n            'width': width,\r\n            'height': height,\r\n            'x': x,\r\n            'y': y,\r\n            'class': item + ' draggable',\r\n            'fill': 'none'\r\n        };\r\n        g.appendChild(Util.create(rect));\r\n        g.appendChild(Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            'x': x,\r\n            'y': y,\r\n            height: headerHeight,\r\n            'width': width,\r\n            'class': 'ClazzHeader'\r\n        }));\r\n\r\n        item = Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'class': 'InfoText',\r\n            'text-anchor': 'right',\r\n            'x': x + width / 2 - size.width / 2,\r\n            'y': y + (headerHeight / 2) + (size.height / 2),\r\n            'width': size.width\r\n        });\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].type.toLowerCase() === 'objectdiagram') {\r\n            item.setAttribute('text-decoration', 'underline');\r\n        }\r\n        item.appendChild(document.createTextNode(id));\r\n\r\n        g.appendChild(item);\r\n        g.appendChild(Util.create({\r\n            tag: 'line',\r\n            x1: x,\r\n            y1: y + headerHeight,\r\n            x2: x + width,\r\n            y2: y + headerHeight,\r\n            stroke: '#000'\r\n        }));\r\n        y += headerHeight + 20;\r\n\r\n        if (this.attributes) {\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': (x + 10),\r\n                    'y': y,\r\n                    value: this.attributes[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n            if (this.attributes.length > 0) {\r\n                y -= 10;\r\n            }\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            g.appendChild(Util.create({tag: 'line', x1: x, y1: y, x2: x + width, y2: y, stroke: '#000'}));\r\n            y += 20;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': x + 10,\r\n                    'y': y,\r\n                    value: this.methods[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n        }\r\n        return g;\r\n    }\r\n}\r\n","import {Util} from '../../util';\r\nimport {DiagramElement} from '../BaseElements';\r\nimport Data from '../../Data';\r\n\r\nexport default class ClazzProperty extends DiagramElement {\r\n\r\n    // Public (+)\r\n    // Private (-)\r\n    // Protected (#)\r\n    // Package (~)\r\n\r\n    public $data = new Data();\r\n//    public modifier: string = '+';\r\n//    public name: string;\r\n//    public type: string;\r\n//    public value: string;\r\n\r\n    constructor(data: any | JSON) {\r\n        super();\r\n        this.$data.setValue('modifier', '+');\r\n        this.$data.setValue('name', null);\r\n        this.$data.setValue('type', null);\r\n        this.$data.setValue('value', null);\r\n        this.extractData(data);\r\n    }\r\n\r\n    public update(data: any | JSON): void {\r\n        this.extractData(data);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.$data.setValue('modifier', modifier);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateType(type: string): void {\r\n        this.$data.setValue('type', type);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateValue(value: string): void {\r\n        this.$data.setValue('value', value);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateName(name: string): void {\r\n        this.$data.setValue('name', name);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public getName(): string {\r\n        return this.$data.getValue('name');\r\n    }\r\n\r\n    public getModifier(): string {\r\n        return this.$data.getValue('modifier');\r\n    }\r\n\r\n    public getType(): string {\r\n        return this.$data.getValue('type');\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let attrText = {\r\n            tag: 'text',\r\n            'text-anchor': 'start',\r\n            'alignment-baseline': 'middle',\r\n        };\r\n\r\n        let attrSvg = Util.createShape(attrText);\r\n        attrSvg.textContent = this.toString();\r\n\r\n        this.$view = attrSvg;\r\n\r\n        return attrSvg;\r\n    }\r\n\r\n    public toString(): string {\r\n        let value = this.$data.getValue('value');\r\n        let result = this.$data.getValue('modifier') + ' ';\r\n        result += this.$data.getValue('name') + ' : ';\r\n        result += this.$data.getValue('type');\r\n        if (value && value.length > 0) {\r\n            result += ' = ' + this.$data.getValue('value');\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.$data.setValue('type', data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.$data.setValue('name', data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.$data.setValue('modifier', data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n\r\n            // e.g. name : string or name:string\r\n            let dataSplitted = data.split(':');\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                let name;\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.$data.setValue('modifier', firstChar);\r\n                    name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                }\r\n                else {\r\n                    name = modifierAndNameSplitted;\r\n                }\r\n                // delete whitespaces in name\r\n                name = name.replace(/ /g, '_');\r\n\r\n                this.$data.setValue('name', name);\r\n                let type = dataSplitted[1].trim() || 'String';\r\n\r\n                // if the type was entered with a small begin letter\r\n                if (type.toLowerCase() === 'string') {\r\n                    type = 'String';\r\n                }\r\n                // delete whitespaces in type\r\n                type = type.replace(/ /g, '_');\r\n                this.$data.setValue('type',  type);\r\n            } else {\r\n                dataSplitted = data.split('=');\r\n                if (dataSplitted && dataSplitted.length === 2) {\r\n                    // modifer (and or) name\r\n                    let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                    // first char is +, - or #\r\n                    let firstChar = modifierAndNameSplitted[0];\r\n                    let name;\r\n                    if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                        this.$data.setValue('modifier', firstChar);\r\n                        name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                    }\r\n                    else {\r\n                        name = modifierAndNameSplitted;\r\n                    }\r\n                    // delete whitespaces in name\r\n                    name = name.replace(/ /g, '_');\r\n\r\n                    this.$data.setValue('name', name);\r\n                    let value = dataSplitted[1].trim() || '\"\"';\r\n                    this.$data.setValue('value', value);\r\n                    this.$data.setValue('type', typeof value);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected updateTextOfView() {\r\n        if (this.$view) {\r\n            this.$view.textContent = this.toString();\r\n        }\r\n        if (this.$owner) {\r\n            Util.saveToLocalStorage(this.$owner.$owner);\r\n        }\r\n    }\r\n}\r\n","import {Node} from \"./Node\";\r\n/**\r\n * Created by Stefan on 29.03.2017.\r\n */\r\n\r\nexport class Dice extends Node {\r\n    private value: number;\r\n    private max: number = 6;\r\n    private $animation: SVGElement;\r\n    private $zoom: number = 0.6;\r\n    private $border: number = 0.2;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super(data);\r\n        this.withSize(100, 100);\r\n    }\r\n\r\n    public setNumber(number: number) {\r\n        this.value = number;\r\n        this.refresh();\r\n    }\r\n\r\n    public refresh() {\r\n        if (this.$view) {\r\n            this.reset();\r\n            let group = this.createPointValue();\r\n            if (group) {\r\n                this.$view.appendChild(group);\r\n            }\r\n        }\r\n    }\r\n\r\n    public reset() {\r\n        if (this.$view) {\r\n            while (this.$view.children.length > 1) {\r\n                if(this.$view.children.item(this.$view.children.length - 1).tagName!== \"animateTransform\") {\r\n                    console.log(this.$view.children.item(this.$view.children.length - 1));\r\n                    this.$view.removeChild(this.$view.children.item(this.$view.children.length - 1));\r\n                }else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let dice: SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x + size.x * this.$border,\r\n            y: pos.y + size.y * this.$border,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y * this.$zoom,\r\n            width: size.x * this.$zoom,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        dice.appendChild(this.createShape(attr));\r\n\r\n        let group = this.createPointValue();\r\n        if (group) {\r\n            dice.appendChild(group);\r\n        }\r\n\r\n        this.$view = dice;\r\n        return dice;\r\n    }\r\n\r\n    public animationTimeout(newValues: number[]) {\r\n        if(newValues.length>0) {\r\n            let newValue = newValues.shift();\r\n            this.setNumber(newValue);\r\n            let that=this;\r\n            setTimeout(function() {that.animationTimeout(newValues)}, 100);\r\n        }\r\n    }\r\n\r\n    public roll() {\r\n        this.startAnimation();\r\n        let values:number[]=[];\r\n        let i:number;\r\n        for(i=1;i<this.max;i++) {\r\n            values.push(i);\r\n        }\r\n        for(i=this.max;i>0;i--) {\r\n            values.push(i);\r\n        }\r\n        let that=this;\r\n        values.push( Math.floor(Math.random() * this.max)+1 );\r\n        setTimeout(function() {that.animationTimeout(values)}, 100);\r\n    }\r\n    public startAnimation() {\r\n        if(this.$animation) {\r\n            return;\r\n        }\r\n        let center = this.getPos().x+this.getSize().x /2;\r\n        const attr = {\r\n            tag: 'animateTransform',\r\n            attributeType: \"xml\",\r\n            attributeName:\"transform\",\r\n            type:\"rotate\",\r\n            dur: \"1s\",\r\n            repeatCount:\"1\",\r\n            from:\"0 \"+center+\" \"+center,\r\n            to:\"360 \"+center+\" \"+center\r\n        };\r\n        this.$animation = <SVGElement>this.createShape(attr);\r\n        this.$view.appendChild(this.$animation);\r\n    }\r\n\r\n    public stopAnimation() {\r\n        if(this.$animation) {\r\n            this.$view.removeChild(this.$animation);\r\n            this.$animation = null;\r\n        }\r\n    }\r\n\r\n    public createPointValue() :SVGElement {\r\n        if (this.value == 1) {\r\n           return this.getCircle(2, 2);\r\n        } else if (this.value == 2) {\r\n            return this.getCircle(1, 1, 3, 3);\r\n        } else if (this.value == 3) {\r\n            return this.getCircle(1, 1, 2, 2, 3, 3);\r\n        } else if (this.value == 4) {\r\n            return this.getCircle(1, 1, 1, 3, 3, 1, 3, 3);\r\n        } else if (this.value == 5) {\r\n            return this.getCircle(1, 1, 1, 3, 2, 2, 3, 1, 3, 3);\r\n        } else if (this.value == 6) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 7) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 2, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 8) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 9) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private getCircle(...values:number[]) : SVGElement {\r\n        if (values.length % 2 > 0) {\r\n            return null;\r\n        }\r\n        let size = this.getSize();\r\n        let pos = this.getPos();\r\n        //FIXME let group:SVGElement = <SVGElement>this.createShape({tag: 'g', transform: 'translate(0 0)', height: size.y, width: size.x});\r\n        let group:SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n\r\n\r\n        for (let i: number = 0; i < values.length; i += 2) {\r\n            group.appendChild(this.createCircle(values[i], values[i + 1]));\r\n        }\r\n        return group;\r\n    }\r\n    private createCircle(x:number, y:number) : SVGElement {\r\n        let size = this.getSize();\r\n        let radius = size.x / 10*this.$zoom;\r\n        let border = size.y*this.$border;\r\n        let zoom = size.y*this.$zoom;\r\n        const attr = {\r\n            tag: 'circle',\r\n            r : radius,\r\n            cx: (size.x*this.$zoom * x) / 4 + border,\r\n            cy: (size.y*this.$zoom * y) / 4 + border,\r\n            stroke:\"black\",\r\n            \"stroke-width\":\"3\",\r\n            fill:\"red\",\r\n            style: 'fill:black;stroke:black;stroke-width:2'\r\n        };\r\n        return <SVGElement>this.createShape(attr);\r\n    }\r\n}","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\n\r\nexport class Div extends Control {\r\n    private className: string;\r\n\r\n    public load(data:JSON|any): any {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = <string>data;\r\n        } else {\r\n            id = data.id;\r\n            this.className = data.class;\r\n            this.property = data.property;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let div: HTMLElement = document.getElementById(id);\r\n\r\n        if (!this.property) {\r\n            // if(inputField){\r\n            // TODO disuss how to decide, which property we should listen on...\r\n            // this.property = id;\r\n            this.property = div.getAttribute('Property');\r\n            // }\r\n        }\r\n\r\n        if (div instanceof HTMLDivElement) {\r\n            this.$view = div;\r\n        } else {\r\n            if (!div) {\r\n                this.$view = document.createElement('div');\r\n                this.$view.setAttribute('id', this.id);\r\n                this.$view.setAttribute('property', this.property);\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists+\r\n        if (data.hasOwnProperty('property')) {\r\n            this.setProperty(data['property']);\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        this.$model = entity;\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.className || entity.hasProperty(this.className)) {\r\n                if (entity.id === this.property.split('.')[0]) {\r\n                    entity.addListener(this, this.className);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        this.$view.innerHTML = <string>newValue;\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Form extends Control {\r\n    // private applyingChange: boolean = false;\r\n    private children: Object = {};\r\n    // private property: string = \"\";\r\n\r\n    /**\r\n     * Data should look like the following json:\r\n     *\r\n     * <pre>{\r\n     *      id: \"t1\",\r\n     *      control: \"form\",\r\n     *      elements: [\r\n     *          {id: \"inputField1\", property: \"talk\"},\r\n     *          {id: \"inputField2\", property: \"room\"}\r\n     *      ]\r\n     * }</pre>\r\n     * @param data\r\n     */\r\n    public load(data: any) {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let form: HTMLElement = document.getElementById(id);\r\n\r\n        if (form instanceof HTMLFormElement) {\r\n            this.$view = form;\r\n            if (this.$view.hasAttribute('property')) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            if (!form) {\r\n                this.$view = document.createElement('form');\r\n                this.$view.setAttribute('id', this.id);\r\n\r\n                if (data.hasOwnProperty('property')) {\r\n                    this.property = data['property'];\r\n                }\r\n\r\n                // add all the attributes to the form element\r\n                for (let attr in data) {\r\n                    if (data.hasOwnProperty(attr) === false) {\r\n                        continue;\r\n                    }\r\n                    if (attr === 'elements') {\r\n                        continue;\r\n                    }\r\n                    this.$view.setAttribute(attr, data[attr]);\r\n                }\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists\r\n        let objId = this.property;\r\n        let hasItem = this.$owner.hasItem(objId);\r\n        if (hasItem) {\r\n            let item = this.$owner.getItem(objId);\r\n            item.addListener(this);\r\n            this.$model = item;\r\n        }\r\n\r\n        // now create all the sub input controls\r\n        for (let field of data.elements) {\r\n            // this.createField(field);\r\n            if (field.hasOwnProperty('property')) {\r\n                let property = field['property'];\r\n                property = this.property + '.' + property;\r\n                field['property'] = property;\r\n            }\r\n            if (!field.hasOwnProperty('class')) {\r\n                field['class'] = 'input';\r\n            }\r\n\r\n            // let the Bridge load the subControl\r\n            let control: Control = this.$owner.load(field, this);\r\n\r\n            // add subControl to children\r\n            this.children[control.getId()] = control;\r\n        }\r\n\r\n    }\r\n\r\n    public setProperty(id: string): void {\r\n        this.property = id;\r\n        let keys: string[] = Object.keys(this.children);\r\n        for (let k = 0; k < keys.length; k++) {\r\n            let key = keys[k];\r\n            let childControl = this.children[key];\r\n            // only set Property, if there is a Property defined before\r\n            if (childControl.property) {\r\n                childControl.setProperty(this.property + '.' + childControl.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object,  oldValue?: Object): boolean {\r\n        if (this.$owner != null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    /**\r\n     * Here we create the form elements and put all the attributes to them in order for the Control only having to load\r\n     * the data were appending here. Alternative would be loading with the bridge and afterwards setting\r\n     * the owner to the form instead of the body..\r\n     * @param field\r\n     */\r\n    /*private createField(field: Object) {\r\n     let control = 'input';\r\n     if (field.hasOwnProperty('class')) {\r\n     control = field['class'];\r\n     }\r\n     let input = document.createElement(control);\r\n     input.setAttribute('class', control);\r\n     let id: string;\r\n     if (!field.hasOwnProperty('id')) {\r\n     // TODO: not the best solution for generating unique id's for forms...\r\n     id = this.$owner.getId();\r\n     field['id'] = id;\r\n     }\r\n     if (field.hasOwnProperty('property')) {\r\n     let property = field['property'];\r\n     property = this.id + '.' + property;\r\n     input.setAttribute('property', property);\r\n     }\r\n     for (let attr in field) {\r\n     if (attr === 'property' || attr === 'class' || !field.hasOwnProperty(attr)) {\r\n     continue;\r\n     }\r\n     input.setAttribute(attr, field[attr]);\r\n     }\r\n\r\n     this.$viewElement.appendChild(input);\r\n\r\n     let newcontrol: Control = this.$owner.load(field['id']);\r\n     this.children[newcontrol.getId()] = newcontrol;\r\n     }*/\r\n}\r\n","/**\r\n * Created by Stefan on 01.03.2017.\r\n */\r\nimport {Control} from '../../Control';\r\n\r\nexport class HTML extends Control {\r\n    constructor(data: JSON|Object|any) {\r\n        super();\r\n\r\n        let id: string;\r\n        let tag: string;\r\n\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            data = {};\r\n        } else if (data) {\r\n            id = data.id;\r\n        }\r\n        if (id) {\r\n            this.id = id;\r\n            this.$view = document.getElementById(id);\r\n        }\r\n        if (!this.$view) {\r\n            if (data) {\r\n                tag = data['tag'] || 'div';\r\n            } else {\r\n                tag = 'div';\r\n            }\r\n            this.$view = document.createElement(tag);\r\n            let parent = document.getElementsByTagName('body')[0];\r\n            parent.appendChild(this.$view);\r\n        }\r\n        if (!parent) {\r\n            return;\r\n        }\r\n        this.writeAttribute(data, this.$view);\r\n    }\r\n\r\n    private writeAttribute(properties: Object, entity?: any) {\r\n        let lowKey;\r\n        if (!entity) {\r\n            lowKey = properties['tag'] || 'div';\r\n            entity = document.createElement(lowKey);\r\n        }\r\n        for (let key in properties) {\r\n            if (!properties.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            lowKey = key.toLowerCase();\r\n            if (properties[key] === null) {\r\n                entity.setAttribute(key, '');\r\n                continue;\r\n            }\r\n\r\n            if (lowKey === 'tag' || lowKey.charAt(0) === '$' || lowKey === '$graphModel' || lowKey === 'class') {\r\n                continue;\r\n            }\r\n            if (lowKey === 'children') {\r\n                if (Array.isArray(properties[key])) {\r\n                    for (let item in properties[key]) {\r\n                        if (properties[key].hasOwnProperty(item) === false) {\r\n                            continue;\r\n                        }\r\n                        let child = this.writeAttribute(item);\r\n                        if (child) {\r\n                            entity.appendChild(child);\r\n                        }\r\n                    }\r\n                } else {\r\n                    let child = this.writeAttribute(properties[key]);\r\n                    if (child) {\r\n                        entity.appendChild(child);\r\n                    }\r\n                }\r\n                continue;\r\n            }\r\n            entity[key] = properties[key];\r\n        }\r\n        return entity;\r\n    }\r\n}\r\n","import { Point } from '../BaseElements';\r\nimport { Util } from '../../util';\r\nimport { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\n\r\nexport class InfoText extends Node {\r\n\r\n    public cardinality: string = '';\r\n    private $heightOfOneTextItem: number;\r\n    private $cardinalitySvg: Element;\r\n    private $propertySvg: Element;\r\n    private $rectBackground: Element;\r\n\r\n    constructor(info: any) {\r\n        super(info);\r\n        if (typeof (info) === 'string') {\r\n            this.id = info;\r\n        } else {\r\n            if (info.property) {\r\n                this.property = info.property;\r\n            }\r\n            if (info.cardinality) {\r\n                this.cardinality = info.cardinality;\r\n            }\r\n        }\r\n        this.$isDraggable = true;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n    }\r\n\r\n    public updateCardinality(cardinality: string): void {\r\n        this.cardinality = cardinality;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (this.$rectBackground) {\r\n            this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n            this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n        }\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((cardinality.length === 0 && this.property.length > 0) || !this.$cardinalitySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$cardinalitySvg) {\r\n            this.$cardinalitySvg.textContent = cardinality;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.property.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    public updateProperty(property: string): void {\r\n        this.property = property;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((property.length === 0 && this.cardinality.length > 0) || !this.$propertySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$propertySvg) {\r\n            this.$propertySvg.textContent = property;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.cardinality.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos: Point = this.getPos();\r\n        let group = Util.create({ tag: 'g', class: 'SVGEdgeInfo', transform: 'translate(0, 0)' });\r\n\r\n        // append rect as background for text items\r\n        this.$rectBackground = Util.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y - this.$heightOfOneTextItem + 3,\r\n            width: this.getSize().x,\r\n            height: this.getSize().y,\r\n            fill: '#DDD',\r\n            'stroke-width': 0,\r\n            rx: '5',\r\n            ry: '5'\r\n        });\r\n        group.appendChild(this.$rectBackground);\r\n\r\n        let y = pos.y;\r\n        if (this.property) {\r\n            // property\r\n            this.$propertySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$propertySvg.textContent = this.property;\r\n            group.appendChild(this.$propertySvg);\r\n\r\n            y += this.$heightOfOneTextItem;\r\n        }\r\n\r\n        // cardinality\r\n        if (this.cardinality) {\r\n            this.$cardinalitySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$cardinalitySvg.textContent = this.cardinality;\r\n            group.appendChild(this.$cardinalitySvg);\r\n        }\r\n\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        let cardinalityAvailable = this.cardinality && this.cardinality.length > 0;\r\n        let propertyAvailable = this.property && this.property.length > 0;\r\n\r\n        return !propertyAvailable && !cardinalityAvailable;\r\n    }\r\n\r\n    public redrawFromEdge(newPos: Point): void {\r\n\r\n        if (!newPos) {\r\n            return;\r\n        }\r\n\r\n        let oldPos = this.getPos();\r\n\r\n        // get difference between new and the old position\r\n        let diffPos = new Point();\r\n        diffPos.x = newPos.x - oldPos.x;\r\n        diffPos.y = newPos.y - oldPos.y;\r\n\r\n        // get translate information\r\n        let translation = this.$view.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        let sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        // set new traslation values\r\n        let newTransX = (sx + diffPos.x);\r\n        let newTransY = (sy + diffPos.y);\r\n        this.$view.setAttributeNS(null, 'transform', 'translate(' + newTransX + ' ' + newTransY + ')');\r\n\r\n        // set new position of svg\r\n        this.getPos().x = newPos.x;\r\n        this.getPos().y = newPos.y;\r\n    }\r\n\r\n    public getText(): string {\r\n        let infoTxt: string = '';\r\n\r\n        if (this.property) {\r\n            infoTxt = this.property;\r\n        }\r\n        if (this.cardinality) {\r\n            if (infoTxt.length > 0) {\r\n                infoTxt += '\\n';\r\n            }\r\n            infoTxt += this.cardinality;\r\n        }\r\n\r\n        return infoTxt;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    private calcSize(): Point {\r\n        let text: string = this.getText();\r\n        let items: Array<string> = text.split('\\n');\r\n\r\n        let maxSize = new Point(0, 0);\r\n        if (text.length === 0) {\r\n            return maxSize;\r\n        }\r\n\r\n        for (let i = 0; i < items.length; i += 1) {\r\n            // calculate size\r\n            let sizeOfText: ClientRect = Util.sizeOf(items[i]);\r\n            maxSize.x = Math.max(maxSize.x, sizeOfText.width);\r\n            maxSize.y += sizeOfText.height;\r\n\r\n            this.$heightOfOneTextItem = sizeOfText.height;\r\n        }\r\n\r\n        return maxSize;\r\n    }\r\n    private resetAllSvgElements() {\r\n        this.$cardinalitySvg = undefined;\r\n        this.$view = undefined;\r\n        this.$propertySvg = undefined;\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\nimport {PropertyBinder} from '../../PropertyBinder';\r\n\r\nexport class Input extends Control {\r\n    private type: string;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data = super.initViewDataProperties(oldData);\r\n        if ('checkbox' === this.type || 'radio' === this.type) {\r\n            data.addFrom('checked', oldData);\r\n        }\r\n        data.addFrom('value', oldData);\r\n        data.addFrom('type', oldData);\r\n        return data;\r\n    }\r\n\r\n    public load(data: any) {\r\n        let id: string;\r\n        let inputField: HTMLElement;\r\n        let useData: boolean;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            useData = true;\r\n        } else {\r\n            id = data.id;\r\n            if (data.type) {\r\n                this.setType(data['type']);\r\n            } else {\r\n                this.setType('text');\r\n            }\r\n            if (data.hasOwnProperty('property')) {\r\n                this.setProperty(data['property']);\r\n            }\r\n            useData = false;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n\r\n        inputField = document.getElementById(id);\r\n\r\n        if (useData) {\r\n            if (inputField) {\r\n                // TODO disuss how to decide, which property we should listen on...\r\n                // this.property = id;\r\n                if (inputField.hasAttribute('Property')) {\r\n                    this.setProperty(inputField.getAttribute('Property'));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (inputField instanceof HTMLInputElement) {\r\n            this.setView(inputField);\r\n            this.type = inputField.type;\r\n            // useData = false;\r\n        } else {\r\n            if (!inputField) {\r\n                this.setView(document.createElement('input'));\r\n                this.$viewData = this.initViewDataProperties(this.$viewData);\r\n                // append viewListener\r\n                // this.$view.addEventListener('change', this.$viewListener);\r\n                if (typeof(data) !== 'string') {\r\n                    for (let attr in data) {\r\n                        if (data.hasOwnProperty(attr) === false) {\r\n                            continue;\r\n                        }\r\n                        // this.$view[attr] = data[attr];\r\n                        this.$viewData.setValue(attr, data[attr]);\r\n                    }\r\n                } else {\r\n                    if (this.type) {\r\n                        this.$view.setAttribute('type', this.type);\r\n                    }\r\n                    if (data.hasOwnProperty('class')) {\r\n                        this.$view.setAttribute('class', data['class']);\r\n                    }\r\n                    this.$view.setAttribute('id', this.id);\r\n                    this.$view.setAttribute('property', this.property);\r\n                }\r\n\r\n                if (data.value) {\r\n                    // if theres a value at the control, we want to change the model to the new value\r\n                    if (this.$model) {\r\n                        this.$model.setValue(this.lastProperty, data.value);\r\n                    }\r\n                }\r\n                if (this.$model) {\r\n                    PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                }\r\n\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (this.property && entity) {\r\n            if (entity.id === this.property.split('.')[0]) {\r\n                this.$model = entity;\r\n                PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                // entity.addListener(this, this.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n    // TODO FIXME protected updateElement(property: string, value: string) {\r\n    //     if (this.$view instanceof HTMLInputElement) {\r\n    //         if (value != null) {\r\n    //             if(property == this.lastProperty) {\r\n    //                 (<HTMLInputElement>this.$view)[this.getStandardProperty()] = value;\r\n    //             } else {\r\n    //                 // this.getRoot().setValue(this, property, value, (<HTMLInputElement>this.$view)[property]);\r\n    //                 (<HTMLInputElement>this.$view)[property] = value;\r\n    //             }\r\n    //         } else {\r\n    //             delete (<HTMLInputElement>this.$view)[property];\r\n    //         }\r\n    //     }\r\n    // }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            super.controlChanged(ev);\r\n        }\r\n// <<<<<<< HEAD\r\n//             let newVal = element[this.getStandardProperty()];\r\n//             if (this.isKeyOnly()) {\r\n//                 // we expect, element[this.lastProperty] to be boolean:\r\n//                 if (!newVal) {\r\n//                     newVal = null;\r\n//                 }\r\n//             } else {\r\n//             }\r\n        // let $graphModel;\r\n        // let value;\r\n        /*if (this.$graphModel) {\r\n            $graphModel = this.$graphModel;\r\n            value = this.$graphModel.getValue(this.lastProperty);\r\n        } else {\r\n            $graphModel = this;\r\n            if (this.$view) {\r\n                value = this.$view[this.lastProperty];\r\n            }\r\n        }*/\r\n        // this.$model.setValue(this.lastProperty, newVal);\r\n        // this.propertyChange(this.$graphModel,this.lastProperty, this.$graphModel.getValue(this.lastProperty), newVal);\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n// =======\r\n        // let newVal = element[this.lastProperty];\r\n        // if (this.isKeyOnly()) {\r\n        //     // we expect, element[this.lastProperty] to be boolean:\r\n        //     if (!newVal) {\r\n        //         newVal = null;\r\n        //     }\r\n        // } else {\r\n        // }\r\n        // let $graphModel;\r\n        // let value;\r\n\r\n        // $graphModel = this.getViewData();\r\n        // if (this.$graphModel) {\r\n        //     $graphModel = this.$graphModel;\r\n        //     value = this.$graphModel.getValue(this.lastProperty);\r\n        // } else {\r\n        //     $graphModel = this;\r\n        //     if (this.$view) {\r\n        //         value = this.$view[this.lastProperty];\r\n        //     }\r\n        // }\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n//            this.saveViewInData();\r\n// >>>>>>> addOldFunctions\r\n//         } else {\r\n//             console.log('value does not match the pattern...');\r\n//         }\r\n    }\r\n\r\n    public setType(type: string): void {\r\n        let oldValue: string = this.type;\r\n        if (oldValue === type) {\r\n            return;\r\n        }\r\n        if (type === 'radio') {\r\n            this.$viewData.setValue('checked', null);\r\n        } else {\r\n            this.$viewData.removeKey('checked');\r\n        }\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\n\r\nexport class Label extends Control {\r\n    public load(data: JSON): any {\r\n        this.createControl(this.$owner, data);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('label');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr === 'textContent') {\r\n                this.$view.textContent = data['textContent'];\r\n            } else {\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Method extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.updateType(data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.updateType(data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.updateType(data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n            // e.g. setName() : string or name:string\r\n            let dataSplitted = data.split(':');\r\n\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }\r\n                else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType(dataSplitted[1].trim() || 'void');\r\n            }\r\n            // set default return type of void\r\n            else {\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = data.trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }  else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType('void');\r\n            }\r\n        }\r\n\r\n        if (Util.includes(this.$data.getValue('name'), '(') && !Util.includes(this.$data.getValue('name'), ')') === false) {\r\n            this.$data.setValue('name', this.$data.getValue('name') + '()');\r\n        }\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\nimport {Association} from '../edges';\r\nimport { GraphModel } from '..';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\n\r\nexport class Node extends DiagramElement {\r\n    public $edges: Association[] = [];\r\n    public $minWidth: number = 150;\r\n    public $minheight: number = 25;\r\n    public $defaulEdgeType: string;\r\n\r\n    constructor(data: JSON|string|Object|any) {\r\n        super();\r\n\r\n        // default size\r\n        this.withSize(this.$minWidth, this.$minheight);\r\n\r\n        if (data) {\r\n            if (data['x'] && data['y']) {\r\n                this.withPos(data['x'], data['y']);\r\n            }\r\n            if (data['width'] || data['height']) {\r\n                this.withSize(data['width'], data['height']);\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos = this.getPos();\r\n        const size = this.getSize();\r\n\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x - size.x / 2,\r\n            y: pos.y - size.y / 2,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y,\r\n            width: size.x,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        const shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'middle',\r\n            'font-family': 'Verdana',\r\n            'font-size': '14',\r\n            fill: 'black'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = this.id;\r\n\r\n        let group = this.createShape({tag: 'g', id: this.id});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public copy(): Node {\r\n        let copy: Node;\r\n        // create new id\r\n        let model = <GraphModel>this.$owner || <GraphModel>this.getRoot();\r\n        if (model) {\r\n            let type = this.property || Node.name;\r\n            let newId = model.getNewId(type);\r\n            copy = <Node>model.createElement(type, newId, null);\r\n            copy.withSize(this.getSize().x, this.getSize().y);\r\n            copy.$owner = model;\r\n        } else {\r\n            copy.id = this.id + '-copy';\r\n            copy.$owner = this.getRoot();\r\n        }\r\n        return copy;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n// EMPTY\r\n    }\r\n    public addAttribute(value: string): Attribute {\r\n        return null;\r\n    }\r\n    public getAttributes(): Attribute[] {\r\n        return null;\r\n    }\r\n    public addMethod(value: string): Method {\r\n        return null;\r\n    }\r\n    public updateLabel(newLabel: string): void {\r\n// EMPTY\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\n\r\nexport class SO extends DiagramElement {\r\n    public static create(element: Object) {\r\n        let result: SO = new SO();\r\n        for (let key in element) {\r\n            if (element.hasOwnProperty(key) === false) {\r\n                continue;\r\n            }\r\n            result.withKeyValue(key, element[key]);\r\n\r\n        }\r\n        return result;\r\n    }\r\n\r\n    public withKeyValue(key: string, value: any): SO {\r\n        if (key === 'typ') {\r\n            this.property = value;\r\n        } else if (key === 'x') {\r\n            this.withPos(value, null);\r\n        } else if (key === 'y') {\r\n            this.withPos(null, value);\r\n        } else if (key === 'width') {\r\n            this.withSize(value, null);\r\n        } else if (key === 'height') {\r\n            this.withSize(null, value);\r\n        } else {\r\n            this[key] = value;\r\n        }\r\n        return this;\r\n    }\r\n}\r\n","import {Point} from '../BaseElements';\r\nimport {Node} from './Node';\r\n\r\nexport class StereoType extends Node {\r\n\r\n    protected stereoType: string;\r\n\r\n    constructor (type: string, x: number, y: number) {\r\n        super('');\r\n        this.withPos(x, y);\r\n        this.setStereoType(type);\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        let pos: Point = this.getPos();\r\n        let size: Point = this.getSize();\r\n\r\n               // = = = STEREOTYPE = = =\r\n        let stereoType = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y - this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': 10,\r\n            'font-weight': 'bold',\r\n            fill: 'black'\r\n        });\r\n        stereoType.textContent = this.stereoType;\r\n\r\n        this.$view = stereoType;\r\n        return stereoType;\r\n    }\r\n\r\n    public setStereoType(value: string): void {\r\n        this.stereoType = '<<' + value + '>>';\r\n    }\r\n\r\n    public getStereoType(): string {\r\n        return this.stereoType;\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { SO } from './SO';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport { Util } from '../../util';\r\n\r\nexport class Symbol extends Node {\r\n    public $heightMax: number = 0;\r\n    public $heightMin: number = 0;\r\n\r\n    constructor(typ: string) {\r\n        super(typ);\r\n    }\r\n\r\n    public draw(typ?: string): SVGElement {\r\n        return SymbolLibary.draw(this);\r\n    }\r\n}\r\n\r\n// \t\t\t\t###################################################### SymbolLibary ####################################################################################\r\n// Example Items\r\n// {tag: 'path', d: ''}\r\n// {tag: 'rect', width:46, height:34}\r\n// {tag: 'ellipse', width:23, height:4}\r\n// {tag: 'line', x1:650, y1:-286, x2:650, y2:-252}\r\n// {tag: 'circle', r:5, x:12, y:0}\r\n// {tag: 'image', height: 30, width: 50, content$src: hallo}\r\n// {tag: 'text', 'text-anchor': 'left', x: '10'}\r\nexport class SymbolLibary {\r\n\r\n    public static drawSVG(node: any): SVGSVGElement {\r\n        // const lib = new SymbolLibary();\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            const parent = SO.create(node);\r\n            parent['property'] = 'SVG';\r\n            symbol = fn(parent);\r\n            // symbol = fn.apply(lib, parent);\r\n\r\n            return SymbolLibary.createGroup(parent, symbol);\r\n        }\r\n        return symbol;\r\n    }\r\n\r\n    public static draw(node: any, parent?: Object): SVGElement {\r\n        // Node is Symbol or simple Object\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            if (!(node instanceof DiagramElement)) {\r\n                node = SO.create(node);\r\n                if (!node.property) {\r\n                    node.property = 'SVG';\r\n                }\r\n            }\r\n            symbol = fn.apply(this, [node]);\r\n            if (!parent) {\r\n                return SymbolLibary.createGroup(node, symbol);\r\n            }\r\n            return SymbolLibary.createGroup(node, symbol);\r\n        } else if (node.property) {\r\n            symbol = new Symbol(node.property);\r\n            symbol.init(node);\r\n            let pos = node.getPos();\r\n            let size = node.getSize();\r\n            symbol.withPos(pos.x, pos.y);\r\n            symbol.withSize(size.x, size.y);\r\n            symbol['value'] = node['value'];\r\n            parent = node['$parent'];\r\n            return SymbolLibary.draw(symbol, parent);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public static upFirstChar(txt: string): string {\r\n        return txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase();\r\n    }\r\n\r\n    public static isSymbolName(typ: string): boolean {\r\n        let fn = SymbolLibary['draw' + SymbolLibary.upFirstChar(typ)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static isSymbol(node: Symbol) {\r\n        let fn = SymbolLibary[SymbolLibary.getName(node)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static getName(node: any): string {\r\n        if (node['type']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['type']);\r\n        }\r\n        if (node.property) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node.property);\r\n        }\r\n        if (node['src']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['src']);\r\n        }\r\n        return 'drawNode';\r\n    }\r\n\r\n    /*FIXME   public static createImage(node: Symbol, $graphModel:Node) {\r\n           let n, img: HTMLElement;\r\n           // node.$graphModel = node;\r\n           if (SymbolLibary.isSymbol(node)) {\r\n               return SymbolLibary.draw(null, node);\r\n           }\r\n           n = {tag: 'img', $graphModel: node, src: node['src']};\r\n           let size = node.getSize();\r\n           if (size.isEmpty() === false) {\r\n               n['width'] = size.x;\r\n               n['height'] = size.y;\r\n           } else {\r\n               n['xmlns'] = 'http://www.w3.org/1999/xhtml';\r\n           }\r\n           img = Util.create(n);\r\n           if (size.isEmpty()) {\r\n               $graphModel.appendImage(img);\r\n               return null;\r\n           }\r\n           return img;\r\n       }*/\r\n\r\n    public static createGroup(node: DiagramElement, group: any) {\r\n        let func, y: number, z: number, box, item: Element, transform, i, offsetX = 0, offsetY = 0;\r\n        let svg: any;\r\n        if (node.property.toUpperCase() === 'HTML') {\r\n            let so = {\r\n                tag: 'svg',\r\n                style: { left: (group.x | 0) + node.getPos().x, top: (group.y | 0) + node.getPos().y, position: 'absolute' }\r\n            };\r\n            if (node['transform']) {\r\n                so['transform'] = node['transform'];\r\n            }\r\n            svg = Util.create(so);\r\n        } else {\r\n            svg = Util.create({ tag: 'g' });\r\n            transform = 'translate(' + group.getPos().x + ' ' + group.getPos().y + ')';\r\n            if (group.scale) {\r\n                transform += ' scale(' + group.scale + ')';\r\n            }\r\n            if (group.rotate) {\r\n                transform += ' rotate(' + group.rotate + ')';\r\n            }\r\n            svg.setAttribute('transform', transform);\r\n            if (group['id']) {\r\n                svg.id = group['id'];\r\n            }\r\n        }\r\n\r\n        if (node['tooltip']) {\r\n            const tooltipTitleAttr = {\r\n                tag: 'title'\r\n            };\r\n            let tooltipTitle = Util.createShape(tooltipTitleAttr);\r\n            tooltipTitle.textContent = node['tooltip'];\r\n            svg.appendChild(tooltipTitle);\r\n        }\r\n\r\n        if (node['background']) {\r\n            const attrCircle = {\r\n                tag: 'circle',\r\n                cx: 20,\r\n                cy: 20,\r\n                r: 17,\r\n                stroke: '#888',\r\n                'stroke-width': 0,\r\n                fill: '#DDD'\r\n            };\r\n            svg.appendChild(Util.create(attrCircle));\r\n        }\r\n\r\n        for (i = 0; i < group.items.length; i += 1) {\r\n            svg.appendChild(Util.create(group.items[i]));\r\n        }\r\n        let elements = node['elements'];\r\n        Util.setSize(svg, group.width + node.getSize().x, group.height + node.getSize().y);\r\n        node['$heightMin'] = node.getSize().y;\r\n        if (elements) {\r\n            for (i = 0; i < elements.length; i += 1) {\r\n                if (!elements[i] && elements[i].length < 1) {\r\n                    elements.splice(i, 1);\r\n                    i -= 1;\r\n                }\r\n            }\r\n            box = Util.create({ tag: 'g' });\r\n            // Calculate new Height\r\n            let c: number;\r\n            z = 0;\r\n            for (c = 0; c < elements.length; c += 1) {\r\n                if (typeof elements[c] === 'string') {\r\n                    z += 1;\r\n                } else {\r\n                    z += elements[c].length;\r\n                }\r\n            }\r\n            z = z * 25 + 6;\r\n            box.appendChild(Util.create({\r\n                tag: 'rect',\r\n                rx: 0,\r\n                x: offsetX,\r\n                y: (offsetY + 28),\r\n                width: 70,\r\n                height: z,\r\n                stroke: '#000',\r\n                fill: '#fff',\r\n                opacity: '0.7'\r\n            }));\r\n            node['$heightMax'] = z + node['$heightMin'];\r\n\r\n            svg['elements'] = elements;\r\n            if (node['type'] === 'DropDown') {\r\n                svg['activ'] = Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': 60,\r\n                    'x': (10 + offsetX),\r\n                    'y': 20,\r\n                    value: node['activText']\r\n                });\r\n                svg.appendChild(svg.activ);\r\n            }\r\n\r\n            y = offsetY + 46;\r\n            // 46 -28 = 18\r\n\r\n            func = function (event: Event) {\r\n                if (svg.activ) {\r\n                    svg.activ.textContent = (<any>event.currentTarget).value;\r\n                }\r\n            };\r\n            let txt: string;\r\n            let textClass = 'SVGTEXT';\r\n            for (z = 0; z < elements.length; z += 1) {\r\n                if (typeof elements[z] === 'string') {\r\n                    txt = elements[z];\r\n                } else {\r\n                    item = this.addText(y, offsetX, box, elements[z][0], 'SVGTEXT');\r\n                    y += 26;\r\n                    for (c = 1; c < elements[z].length; c += 1) {\r\n                        item = this.addText(y, offsetX, box, '* ' + elements[z][c], 'SVGTEXTITEM');\r\n\r\n                        item['value'] = elements[z];\r\n                        if (node['action']) {\r\n                            item['onclick'] = node['action'];\r\n                        } else {\r\n                            item['onclick'] = func;\r\n                        }\r\n                        y += 26;\r\n                    }\r\n                    txt = elements[z];\r\n                    let subBox = Util.create({\r\n                        tag: 'rect',\r\n                        rx: 0,\r\n                        x: offsetX,\r\n                        y: (offsetY + 28),\r\n                        width: 60,\r\n                        height: z,\r\n                        stroke: '#000',\r\n                        fill: '#fff',\r\n                        opacity: '0.7'\r\n                    });\r\n                    continue;\r\n                }\r\n                // let txt = elements[z];\r\n                item = this.addText(y, offsetX, box, txt, textClass);\r\n\r\n                item['value'] = elements[z];\r\n                if (node['action']) {\r\n                    item['onclick'] = node['action'];\r\n                } else {\r\n                    item['onclick'] = func;\r\n                }\r\n                y += 26;\r\n            }\r\n            svg.choicebox = box;\r\n        }\r\n        svg.tool = node;\r\n        svg.onclick = function () {\r\n            if (svg.status === 'close') {\r\n                svg.open();\r\n            } else {\r\n                svg.close();\r\n            }\r\n        };\r\n        svg.close = function () {\r\n            if (svg.status === 'open' && svg.choicebox) {\r\n                this.removeChild(svg.choicebox);\r\n            }\r\n            svg.status = 'close';\r\n            svg.tool.$size.height = svg.tool.heightMin;\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x, g.tool.height + g.tool.y);\r\n            Util.setSize(svg, svg.tool.$size.x, svg.tool.$size.y);\r\n        };\r\n        svg.open = function () {\r\n            if (this.tagName === 'svg') {\r\n                return;\r\n            }\r\n            if (svg.status === 'close' && svg.choicebox) {\r\n                this.appendChild(svg.choicebox);\r\n            }\r\n            svg.status = 'open';\r\n            svg.tool.$size.height = svg.tool.heightMax;\r\n            Util.setSize(svg, svg.tool.width, svg.tool.height);\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x + 10, g.tool.height + g.tool.y + 10);\r\n        };\r\n        svg.close();\r\n        return svg;\r\n    }\r\n\r\n    public static addChild(parent: SVGElement, json: JSON | Element): void {\r\n        let item: Element;\r\n        if ((<any>json).offsetLeft) {\r\n            item = <Element>json;\r\n        } else {\r\n            item = Util.create(json);\r\n        }\r\n        item.setAttribute('class', 'draggable');\r\n        parent.appendChild(item);\r\n    }\r\n\r\n    public static all(node: any): void {\r\n        SymbolLibary.drawSmiley(node);\r\n        SymbolLibary.drawDatabase(node);\r\n        SymbolLibary.drawLetter(node);\r\n        SymbolLibary.drawMobilephone(node);\r\n        SymbolLibary.drawWall(node);\r\n        SymbolLibary.drawActor(node);\r\n        SymbolLibary.drawLamp(node);\r\n        SymbolLibary.drawArrow(node);\r\n        SymbolLibary.drawButton(node);\r\n        SymbolLibary.drawDropdown(node);\r\n        SymbolLibary.drawClassicon(node);\r\n        SymbolLibary.drawClassWithEdgeicon(node);\r\n    }\r\n\r\n    public static drawHamburger(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'circle', r: 10, fill: '#ccc', cx: 12, cy: 12, 'stroke-width': 1, stroke: 'black'},\r\n                { tag: 'path', d: 'M 8,7 H 16 M 8,12 H 16 M 8,17 H 16', stroke: 'black', fill: 'none' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawSmiley(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'path', d: 'm49.01774,25.64542a24.5001,24.5 0 1 1 -49.0001,0a24.5001,24.5 0 1 1 49.0001,0z', stroke: 'black', fill: 'none' }, { tag: 'path', d: 'm8,31.5c16,20 32,0.3 32,0.3' },\r\n                { tag: 'path', d: 'm19.15,20.32a1.74,2.52 0 1 1 -3.49,0a1.74,2.52 0 1 1 3.49,0z' },\r\n                { tag: 'path', d: 'm33,20.32a1.74,2.52 0 1 1 -3.48,0a1.74,2.52 0 1 1 3.48,0z' },\r\n                { tag: 'path', d: 'm5.57,31.65c3.39,0.91 4.03,-2.20 4.03,-2.20' },\r\n                { tag: 'path', d: 'm43,32c-3,0.91 -4,-2.20 -4.04,-2.20' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDatabase(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 40,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,-6.26 25.03,-6.26 25.03,0l0,25.82c0,6.26 -25.03,6.26 -25.03,0l0,-25.82z',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLetter(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 17,\r\n            items: [\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1,1l22,0l0,14l-22,0l0,-14z' },\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1.06,1.14l10.94,6.81l10.91,-6.91' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMobilephone(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 4.2 0.5 15.61 0c 2 0 3.7 1.65 3.7 3.7l 0 41.6c 0 2-1.65 3.7-3.7 3.7l-15.6 0c-2 0-3.7-1.6-3.7-3.7l 0-41.6c 0-2 1.6-3.7 3.7-3.7z',\r\n                    fill: 'none',\r\n                    stroke: 'black'\r\n                },\r\n                { tag: 'path', d: 'm 12.5 2.73a 0.5 0.5 0 1 1-1 0 0.5 0.5 0 1 1 1 0z' },\r\n                { tag: 'path', d: 'm 14 46a 2 2 0 1 1-4 0 2 2 0 1 1 4 0z' },\r\n                { tag: 'path', d: 'm 8 5 7 0' },\r\n                { tag: 'path', d: 'm 1.63 7.54 20.73 0 0 34-20.73 0z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawWall(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'path', d: 'm26,45.44l-5,3.56l-21,-9l0,-36.41l5,-3.56l20.96,9l-0,36.4z' },\r\n                {\r\n                    tag: 'path',\r\n                    stroke: 'white',\r\n                    d: 'm2.21,11l18.34,7.91m-14.46,-12.57l0,6.3m8.2,21.74l0,6.35m-8.6,-10l0,6.351m4.1,-10.67l0,6.3m4.8,-10.2l0,6.3m-8.87,-10.23l0,6.35m4.78,-10.22l0,6.35m-8,14.5l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m0,-13l0,34m-18.23,-41.84l18.3,8m0,0.11l5,-3.57'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawActor(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'line', stroke: '#000', x1: '12', y1: '10', x2: '12', y2: '30' },\r\n                { tag: 'circle', stroke: '#000', cy: '5', cx: '12', r: '5' },\r\n                { tag: 'line', stroke: '#000', y2: '18', x2: '25', y1: '18', x1: '0' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '5', y1: '30', x1: '12' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '20', y1: '30', x1: '12' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLamp(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 22.47 10.58c-6.57 0-11.89 5.17-11.89 11.54 0 2.35 0.74 4.54 2 6.36 2 4 4.36 5.63 4.42 10.4l 11.15 0c 0.12-4.9 2.5-6.8 4.43-10.4 1.39-1.5 1.8-4.5 1.8-6.4 0-6.4-5.3-11.5-11.9-11.5z',\r\n                    fill: 'white',\r\n                    stroke: 'black'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 40 8 0c 0.58 0 1 0.5 1 1 0 0.6-0.5 1-1 1l-8 0c-0.6 0-1-0.47-1-1 0-0.58 0.47-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 42.7 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 45.3 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                { tag: 'path', d: 'm 19.5 48c 0.37 0.8 1 1.3 1.9 1.7 0.6 0.3 1.5 0.3 2 0 0.8-0.3 1.4-0.8 1.9-1.8z' },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 6 37.5 4.2-4c 0.3-0.3 0.8-0.3 1 0 0.3 0.3 0.3 0.8 0 1.1l-4.2 4c-0.3 0.3-0.8 0.3-1.1 0-0.3-0.3-0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 39 37.56-4.15-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 38 23 5.8 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.8 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 1.3 23 6 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.9 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 34.75 11.2 4-4.1c 0.3-0.3 0.3-0.8 0-1-0.3-0.3-0.8-0.3-1 0l-4 4.1c-0.3 0.3-0.3 0.8 0 1 0.3 0.3 0.8 0.3 1 0z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 11.23 10-4-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 21.64 1.3 0 5.8c 0 0.4 0.3 0.8 0.8 0.8 0.4 0 0.8-0.3 0.8-0.8l 0-5.8c 0-0.4-0.3-0.8-0.8-0.8-0.4 0-0.8 0.3-0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 26.1 24.3c-0.5 0-1 0.2-1.3 0.4-1.1 0.6-2 3-2.27 3.5-0.26-0.69-1.14-2.9-2.2-3.5-0.7-0.4-2-0.7-2.5 0-0.6 0.8 0.2 2.2 0.9 2.9 1 0.9 3.9 0.9 3.9 0.9 0 0 0 0 0 0 0.54 0 2.8 0 3.7-0.9 0.7-0.7 1.5-2 0.9-2.9-0.2-0.3-0.7-0.4-1.2-0.4z'\r\n                },\r\n                { tag: 'path', d: 'm 22.5 28.57 0 10.7' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawStop(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 30,\r\n            height: 30,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: '#FFF',\r\n                    'stroke-width': '2',\r\n                    stroke: '#B00',\r\n                    d: 'm 6,6 a 14,14 0 1 0 0.06,-0.06 z m 0,0 20,21'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMin(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    d: 'm 0,0 19,0 0,19 -19,0 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 13,-0.04'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawArrow(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 10,\r\n            height: 9,\r\n            rotate: node['rotate'],\r\n            items: [\r\n                { tag: 'path', fill: '#000', stroke: '#000', d: 'M 0,0 10,4 0,9 z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMax(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    'stroke-dashoffset': 2,\r\n                    'stroke-dasharray': '4.8,4.8',\r\n                    d: 'm 0,0 4.91187,0 5.44643,0 9.11886,0 0,19.47716 -19.47716,0 0,-15.88809 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 6,0.006 0.02,5 0.01,-11 -0.03,6.02 c 2,-0.01 4,-0.002 6,0.01'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawButton(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight, btnValue;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        btnValue = node['value'] || '';\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: 60,\r\n            height: 28,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 8,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    filter: 'url(#drop-shadow)',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                { tag: 'text', $font: true, x: 10, y: 18, fill: 'black', value: btnValue, 'class': 'hand' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDropdown(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 0,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth - 20,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 2,\r\n                    x: btnWidth - 20,\r\n                    y: 0,\r\n                    width: 20,\r\n                    height: 28,\r\n                    stroke: '#000',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    style: 'fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1',\r\n                    d: 'm ' + (btnWidth - 15) + ',13 10,0 L ' + (btnWidth - 10) + ',20 z'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassicon(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.19999l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm25.68807,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.2l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                { tag: 'line', x1: 11, y1: 7, x2: 25, y2: 7, stroke: '#000' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassWithEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M2,10 20,10 20,35 2,35 Z M2,17 20,17 M20,10 28,5 28,9 M 28.5,4.7 24,4',\r\n                    style: 'fill:none;stroke:#000000;transform:scale(0.8);'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClass(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: '100%',\r\n            height: '100%',\r\n            items: [\r\n                { tag: 'rect', width: 50, height: 40, x: 0, y: 0, 'stroke-width': 2, stroke: 'black', fill: 'none'},\r\n                { tag: 'rect', width: 50, height: 12, x: 0, y: 18, 'stroke-width': 1, stroke: 'black', fill: 'none'},\r\n                { tag: 'text', x: 27, y: 14, 'text-anchor': 'middle', 'font-size': 11, value: 'Class'},\r\n                { tag: 'text', x: 5, y: 24, 'font-size': 5, value: '+ field: type'},\r\n                { tag: 'text', x: 5, y: 36, 'font-size': 5, value: '+ method(type)'}\r\n            ]\r\n        });\r\n    }\r\n/*\r\n<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n    <g>\r\n    <text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text>\r\n        <text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>\r\n*/\r\n\r\n    public static drawEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M10,30 30,10 M19,10 30,10 30,21',\r\n                    style: 'fill:none;stroke:#555;stroke-width:2;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawCopynode(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M5 5 L15 5 L15 20 L5 20 Z M5 10 L15 10',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M8 2 L18 2 L18 17 L8 17 Z M8 7 L18 7'\r\n                        + 'M11 4.5 L15 4.5 '\r\n                        + 'M10 10 L16 10 '\r\n                        + 'M10 13 L16 13 ',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawBasket(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M12 12 L18 12 L18 11 L22 11 L22 12 L28 12 L28 14 L27 14 L27 29 L13 29 L13 14 L12 14 Z M13 14 L27 14 M20 17 L20 26 M17 16 L17 27 M23 16 L23 27',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawPencil(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M6 20 L12 23 L33 23 L33 17 L12 17 Z M30 17 L30 23 M12 17 L12 23 M15 19 L28 19 M15 21 L28 21',\r\n                    stroke: '#000',\r\n                    'stroke-width': 1,\r\n                    fill: 'white'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    private static addText(y: number, offsetX: number, box: Element, text: string, textClass: string): Element {\r\n        let item: Element;\r\n        box.appendChild(Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'text-anchor': 'left',\r\n            width: 70,\r\n            x: 10,\r\n            y: y,\r\n            class: textClass,\r\n            value: text,\r\n            eventValue: text\r\n        }));\r\n        if (textClass === 'SVGTEXT') {\r\n            textClass = 'SVGChoiceText';\r\n        } else {\r\n            textClass = 'SVGChoice';\r\n        }\r\n\r\n        item = Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            x: offsetX,\r\n            y: y - 18,\r\n            width: 70,\r\n            height: 24,\r\n            stroke: 'none',\r\n            class: textClass,\r\n        });\r\n        item['eventValue'] = text;\r\n        box.appendChild(item);\r\n        return item;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n}\r\n","import {Control} from '../../Control';\r\nimport BridgeElement from '../../BridgeElement';\r\nimport Data from '../../Data';\r\nimport {Util} from '../../util';\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Table extends Control {\r\n    protected items: BridgeElement[] = [];\r\n    private columns: Column[] = [];\r\n    private cells: Object = {};\r\n    private $bodysection: HTMLTableSectionElement;\r\n    private $headersection: HTMLTableSectionElement;\r\n    private showedItems: Array<BridgeElement> = [];\r\n    // BridgeElements:\r\n    private itemsIds: Object = {};\r\n    private countElement: HTMLElement;\r\n    private countColumn: HTMLElement;\r\n    private countColumnPos: number;\r\n    private resultColumn: string;\r\n    private lastSearchText: string;\r\n    private searchColumns: Array<string> = [];\r\n    private searchText: Array<string> = [];\r\n    private sortColumn: Column;\r\n    private direction: number;\r\n    private moveElement: Column = null;\r\n    private isDrag: boolean = false;\r\n    private moveTimeStamp: number;\r\n    private moveX: number;\r\n    private movePos: number;\r\n    private dragColumn: Column;\r\n    private dragPos: number;\r\n    private tableOption: HTMLTableHeaderCellElement;\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    private static indexOfChild(item: BridgeElement) {\r\n        let i: number = 0;\r\n        let child: Node = item.gui;\r\n        while ((child = child.previousSibling) !== null) {\r\n            i++;\r\n        }\r\n        return i;\r\n    }\r\n\r\n    public load(data: any): void {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n            if (data.property) {\r\n                this.property = data.property;\r\n            }\r\n\r\n            if (data.searchColumns) {\r\n                let search: Array<string> = [];\r\n                if (typeof(data.searchColumns) === 'string') {\r\n                    search = data.searchColumns.split(' ');\r\n                } else {\r\n                    search = data.searchColumns;\r\n                }\r\n                for (let z: number = 0; z < search.length; z++) {\r\n                    let item = search[z].trim();\r\n                    if (item.length > 0) {\r\n                        if (this.searchColumns.indexOf(item) < 0) {\r\n                            this.searchColumns.push(item);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        if (this.$view) {\r\n            // Must be an Update\r\n            if (data['columns']) {\r\n                // It is a json must add all things and generate HTML\r\n                for (let i in data['columns']) {\r\n                    if (data['columns'].hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    let col = this.parseData(data['columns'][i]);\r\n                    this.addHeaderInfo(col);\r\n                    this.columns.push(col);\r\n                    this.tableOption.parentElement.insertBefore(col.$element, this.tableOption);\r\n                }\r\n                for (let i in this.showedItems) {\r\n                    let item: BridgeElement = this.showedItems[i];\r\n                    let cell;\r\n                    // Now Add some Children\r\n                    while (item.gui.children.length < this.columns.length) {\r\n                        cell = document.createElement('td');\r\n                        item.gui.appendChild(cell);\r\n                    }\r\n                    // Now Remove Some Children\r\n                    while (item.gui.children.length > this.columns.length) {\r\n                        item.gui.removeChild(item.gui.children[item.gui.children.length - 1]);\r\n                    }\r\n                    for (let c: number = 0; c < this.columns.length; c++) {\r\n                        let name = this.columns[c].attribute;\r\n                        // let count = this.columns.length;\r\n                        cell = item.gui.children[c];\r\n                        cell.innerHTML = item.model.getValue(name);\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n\r\n        this.$view = document.getElementById(id);\r\n        let headerrow: HTMLTableRowElement;\r\n        if (this.$view) {\r\n            if (!this.property) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('table');\r\n            this.$owner.appendChild(this);\r\n        }\r\n        if (!this.$bodysection) {\r\n            // add tbody element if missing\r\n            this.$bodysection = document.createElement('tbody');\r\n            this.$view.appendChild(this.$bodysection);\r\n        }\r\n        if (data['classname']) {\r\n            this.$view.className = data['classname'];\r\n        } else {\r\n            this.$view.className = 'mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp';\r\n        }\r\n\r\n        this.id = id;\r\n        this.$view.id = id;\r\n        this.$view.setAttribute('type', this.constructor['name'].toLowerCase());\r\n        let counter = 0;\r\n        for (let c = 0; c < this.$view.children.length; c++) {\r\n            let row: HTMLTableRowElement = <HTMLTableRowElement>this.$view.children[c];\r\n            if (row instanceof HTMLTableSectionElement) {\r\n                if (row.tagName === 'THEAD') {\r\n                    headerrow = row;\r\n                    // Its a thead\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingHeader(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                } else {\r\n                    // Its a tbody\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingData(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                }\r\n            } else {\r\n                // fallback, if there are no thead and tbody...\r\n                if (counter === 0) {\r\n                    headerrow = row;\r\n                    this.parsingHeader(row);\r\n                } else {\r\n                    this.parsingData(row);\r\n                }\r\n            }\r\n            counter++;\r\n        }\r\n        if (!headerrow || !this.$headersection) {\r\n            if (!this.$headersection) {\r\n                // find eventually existing thead\r\n                let header = this.$view.getElementsByTagName('thead');\r\n                if (header.length === 0) {\r\n                    this.$headersection = document.createElement('thead');\r\n                    this.$view.appendChild(this.$headersection);\r\n                } else {\r\n                    // take first thead element\r\n                    this.$headersection = <HTMLTableSectionElement>header.item(0);\r\n                }\r\n            }\r\n            if (!headerrow) {\r\n                headerrow = document.createElement('tr');\r\n                this.$headersection.appendChild(headerrow);\r\n            }\r\n        }\r\n\r\n        if (data['columns']) {\r\n            // It is a json must add all things and generate HTML\r\n            for (let i in data['columns']) {\r\n                if (data['columns'].hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                let col = this.parseData(data['columns'][i]);\r\n                this.addHeaderInfo(col);\r\n                this.columns.push(col);\r\n                headerrow.appendChild(col.$element);\r\n            }\r\n            this.tableOption = document.createElement('th');\r\n            this.tableOption.classList.add('tableOption');\r\n            headerrow.appendChild(this.tableOption);\r\n            let context: HTMLElement = this.addOptionItem(null, this.tableOption, true);\r\n            let contentChild: HTMLElement = this.addOptionItem('show', context, true);\r\n            // let simpleLink: HTMLElement = this.addOptionItem('show', contentChild, false);\r\n            this.addOptionItem('show', contentChild, false);\r\n        }\r\n        this.registerEvents(['mousemove', 'mousedown', 'mouseup', 'resize', 'dragstart', 'dragover', 'drop', 'dragend']);\r\n\r\n        // Check for SearchBar\r\n        // if(data[\"searchproperty\"]){\r\n        // Create Full Row\r\n        let searchBar = document.createElement('tr');\r\n        let cell = document.createElement('td');\r\n        cell.setAttribute('colspan', '' + (this.columns.length));\r\n        searchBar.appendChild(cell);\r\n\r\n        let search = document.createElement('input');\r\n        search.className = 'search';\r\n        let that = this;\r\n        search.addEventListener('keyup', function (evt) {\r\n            that.search(evt.target['value']);\r\n        });\r\n\r\n        cell.appendChild(search);\r\n        if (this.resultColumn) {\r\n            if (this.resultColumn.indexOf('#') !== 0) {\r\n                this.countElement = document.createElement('div');\r\n                searchBar.appendChild(this.countElement);\r\n            } else {\r\n                for (let z: number = 0; z < this.$headersection.children.length; z++) {\r\n                    if (this.$headersection.children[z].innerHTML === this.resultColumn) {\r\n                        this.countColumn = <HTMLElement> this.$headersection.children[z];\r\n                        this.countColumnPos = z;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        let first = this.$headersection.children.item(0);\r\n        this.$headersection.insertBefore(searchBar, first);\r\n\r\n        this.updateElement(this.property, null);\r\n\r\n        // now update those elements, that were not loaded currently\r\n    }\r\n\r\n    public tableEvent(type: string, e: Event) {\r\n        let button: number = 0;\r\n        let eventX: number = 0;\r\n        if (e instanceof MouseEvent) {\r\n            button = e.buttons;\r\n            eventX = e.pageX;\r\n        }\r\n        if (type === 'mouseup') {\r\n            this.moveElement = null;\r\n        } else if (type === 'mousedown' || type === 'resize') {\r\n            // End to Resize\r\n            this.moveElement = null;\r\n            if (button === 1) {\r\n                let c: number;\r\n                for (c = 0; c < this.columns.length; c++) {\r\n                    if (this.columns[c].$resize === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = false;\r\n                        break;\r\n                    } else if (this.columns[c].$element === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = true;\r\n                    }\r\n                }\r\n                this.moveTimeStamp = e.timeStamp;\r\n                this.moveX = eventX;\r\n            } else {\r\n                this.moveTimeStamp = 0;\r\n            }\r\n        } else if (type === 'mousemove') {\r\n            if (button === 1 && this.moveElement) {\r\n                if (this.moveTimeStamp && e.timeStamp - this.moveTimeStamp < 2000) {\r\n                    if (this.isDrag) {\r\n                        // FIXME\r\n                    } else {\r\n                        let x = eventX - this.moveX;\r\n                        let width = this.moveElement.$element.offsetWidth;\r\n                        this.moveElement.$element.width = '' + (width + x);\r\n                        e.stopPropagation();\r\n                    }\r\n                }\r\n                this.moveX = eventX;\r\n                this.moveTimeStamp = e.timeStamp;\r\n            }\r\n        } else if (this.isDrag) {\r\n            this.columnDragEvent(type, <DragEvent> e);\r\n        }\r\n    }\r\n\r\n    public parsingHeader(row: HTMLTableRowElement) {\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let column: HTMLTableHeaderCellElement = <HTMLTableHeaderCellElement>row.children[i];\r\n            let id = column.innerHTML.trim();\r\n            let col: Column = null;\r\n            for (let c in this.columns) {\r\n                if (this.columns.hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                if (this.columns[c].label === id) {\r\n                    col = this.columns[c];\r\n                    col.$element = column;\r\n                    break;\r\n                }\r\n            }\r\n            if (col === null) {\r\n                col = new Column();\r\n                col.label = id;\r\n                col.attribute = column.getAttribute('attribute');\r\n                col.$element = column;\r\n                this.columns.push(col);\r\n            }\r\n            this.addHeaderInfo(col);\r\n        }\r\n    }\r\n\r\n    public parsingData(row: HTMLTableRowElement) {\r\n        let id = row.getAttribute('id');\r\n        let item: Data = this.$owner.getItem(id);\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let cell: HTMLTableCellElement = <HTMLTableCellElement>row.children[i];\r\n            let colAttribute = this.columns[i].attribute;\r\n            if (colAttribute.indexOf('\\.') < 0) {\r\n                item[colAttribute] = cell.innerHTML.trim();\r\n            }\r\n        }\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: Object, newValue: Object) {\r\n        if (entity) {\r\n            // Check for Show\r\n            if (this.property && !entity.hasProperty(property)) {\r\n                return;\r\n            }\r\n        }\r\n        if (entity.id === undefined) {\r\n            return;\r\n        }\r\n        let item: BridgeElement = <BridgeElement>this.itemsIds[entity.id];\r\n        let row: HTMLTableRowElement;\r\n        if (!item) {\r\n            item = new BridgeElement(entity);\r\n            this.items.push(item);\r\n            this.itemsIds[entity.id] = item;\r\n        }\r\n        row = this.cells[entity.id];\r\n        if (row) {\r\n            item.gui = row;\r\n        }\r\n        if (this.searching(item) === false) {\r\n            return;\r\n        }\r\n        let cell;\r\n        let showItem = false;\r\n\r\n        if (!row) {\r\n            showItem = true;\r\n            row = document.createElement('tr');\r\n            let count = this.columns.length;\r\n            for (let i = 0; i < count; i++) {\r\n                cell = document.createElement('td');\r\n                row.appendChild(cell);\r\n            }\r\n            this.cells[entity.id] = row;\r\n            item.gui = row;\r\n        }\r\n        for (let c: number = 0; c < this.columns.length; c++) {\r\n            let name = this.columns[c].attribute;\r\n            if (name === property) {\r\n                cell = row.children[c];\r\n                cell.innerHTML = <string>newValue;\r\n            }\r\n        }\r\n        if (showItem) {\r\n            this.showItem(item, true);\r\n        }\r\n        // super.propertyChange(entity, property, newValue, oldValue);\r\n    }\r\n\r\n    public sort(column: Column) {\r\n        if (this.sortColumn === column) {\r\n            if (this.direction === 1) {\r\n                this.direction = -1;\r\n                column.$element.classList.remove('asc');\r\n                column.$element.classList.add('desc');\r\n            } else {\r\n                this.direction = 1;\r\n                column.$element.classList.remove('desc');\r\n                column.$element.classList.add('asc');\r\n            }\r\n        } else {\r\n            if (this.sortColumn !== null) {\r\n                this.sortColumn.$element.classList.remove('desc');\r\n                this.sortColumn.$element.classList.remove('asc');\r\n            }\r\n            this.sortColumn = column;\r\n            this.sortColumn.$element.classList.add('asc');\r\n            this.direction = 1;\r\n        }\r\n        let that = this;\r\n        let sort = function (a: BridgeElement, b: BridgeElement) {\r\n            return that.sorting(a, b);\r\n        };\r\n        this.showedItems.sort(sort);\r\n        let len: number = this.showedItems.length;\r\n        let body = this.$bodysection;\r\n        let i = 0;\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            if (i !== Table.indexOfChild(item)) {\r\n                break;\r\n            }\r\n            i = i + 1;\r\n        }\r\n        while (body.children.length > i) {\r\n            body.removeChild(body.children.item(body.children.length - 1));\r\n        }\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            body.appendChild(item.gui);\r\n            i = i + 1;\r\n        }\r\n\r\n        //      body.removeChild(item.gui);\r\n        //      body.remove\r\n    }\r\n\r\n    public sorting(a: BridgeElement, b: BridgeElement): number {\r\n        let path: string[] = this.sortColumn.attribute.split('.');\r\n        let itemA = a.model.prop;\r\n        let itemB = b.model.prop;\r\n        let check = this.sortColumn.attribute;\r\n        for (let p = 0; p < path.length; p++) {\r\n            check = path[p];\r\n            if (itemA[check]) {\r\n                itemA = itemA[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n            if (itemB[check]) {\r\n                itemB = itemB[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n        if (itemA !== itemB) {\r\n            if (this.direction === 1) {\r\n                return (itemA < itemB) ? -1 : 1;\r\n            }\r\n            return (itemA < itemB) ? 1 : -1;\r\n\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    // Searching\r\n    public search(origSearchText: string): void {\r\n        if (!origSearchText) {\r\n            origSearchText = '';\r\n        }\r\n        let searchText: string = origSearchText.trim().toLowerCase();\r\n        if (searchText === this.lastSearchText && searchText !== '') {\r\n            return; // <==== nothing to be done\r\n        }\r\n        let oldSearch: string = this.lastSearchText;\r\n        this.lastSearchText = searchText;\r\n\r\n        this.parseSearchArray();\r\n        if (searchText !== '' && oldSearch !== null && searchText.indexOf(oldSearch) >= 0 && searchText.indexOf('|') < 0) {\r\n            this.searchArray(this.showedItems);\r\n        } else {\r\n            this.searchSet(this.items);\r\n        }\r\n        this.refreshCounter();\r\n    }\r\n\r\n    public refreshCounter() {\r\n        if (this.countColumn) {\r\n            this.countColumn.innerHTML = this.columns[this.countColumnPos].label + ' (' + this.showedItems.length + ')';\r\n        }\r\n        // var countElement = document.getElementById('talkCount');\r\n        //  if (countElement) {\r\n        //     var txt = (this.showedItems.size() > 0 && searchText.length > 0 ) ? this.options.TEXT_SEARCHLIST : this.options.TEXT_SEARCHFULLLIST;\r\n        //     countElement.innerHTML = txt.replace(\"%LEN%\", this.root['children'].length).replace(\"%COUNT%\", this.showedItems.size()).replace(\"%SEARCH%\", origSearchText);\r\n        // }\r\n        // if (this.countColumn) {\r\n        //     this.countColu1mn.innerHTML = this.countColumn[\"label\"] + \" (\" + this.showedItems.size() + \")\";\r\n        // }\r\n    }\r\n\r\n    public parseSearchArray() {\r\n        let pos: number = 0;\r\n        let split: Array<string> = [];\r\n        let quote: boolean = false;\r\n        for (let i: number = 0; i < this.lastSearchText.length; i++) {\r\n            if ((this.lastSearchText.charAt(i) === ' ') && !quote) {\r\n                let txt = this.lastSearchText.substring(pos, i).trim();\r\n                if (txt.length > 0) {\r\n                    split.push(txt);\r\n                }\r\n                pos = i + 1;\r\n            } else if (this.lastSearchText.charAt(i) === '\\\"') {\r\n                if (quote) {\r\n                    let txt = this.lastSearchText.substring(pos, i).trim();\r\n                    if (txt.length > 0) {\r\n                        split.push(txt);\r\n                    }\r\n                    pos = i + 1;\r\n                } else {\r\n                    pos = i + 1;\r\n                }\r\n                quote = !quote;\r\n            }\r\n        }\r\n        if (pos < this.lastSearchText.length) {\r\n            split.push(this.lastSearchText.substring(pos, this.lastSearchText.length).trim());\r\n        }\r\n        this.searchText = split;\r\n        return split;\r\n    }\r\n\r\n    public searchArray(root: Array<BridgeElement>) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let i: number = 0; i < root.length; i++) {\r\n            let item: BridgeElement = root[i];\r\n            this.showItem(item, this.searching(item));\r\n        }\r\n    }\r\n\r\n    public searchSet(root: BridgeElement[]) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let item of root) {\r\n            let child: BridgeElement = <BridgeElement>item;\r\n            this.showItem(child, this.searching(child));\r\n        }\r\n    }\r\n\r\n    public showItem(item: BridgeElement, visible: boolean) {\r\n        if (visible) {\r\n            this.showedItems.push(item);\r\n            this.$bodysection.appendChild(item.gui);\r\n        } else if (item.gui && item.gui.parentElement) {\r\n            this.$bodysection.removeChild(item.gui);\r\n        }\r\n    }\r\n\r\n    public searching(item: BridgeElement): boolean {\r\n        let fullText: string = '';\r\n        for (let i: number = 0; i < this.searchColumns.length; i++) {\r\n            fullText = fullText + ' ' + item.model.getValue(this.searchColumns[i]);\r\n        }\r\n        fullText = fullText.trim().toLowerCase();\r\n        for (let z: number = 0; z < this.searchText.length; z++) {\r\n            if ('' !== this.searchText[z]) {\r\n                let orSplit: Array<string>;\r\n                if (this.searchText[z].indexOf('|') > 0) {\r\n                    orSplit = this.searchText[z].split('|');\r\n                } else {\r\n                    orSplit = [this.searchText[z]];\r\n                }\r\n                let o: number = 0;\r\n                for (; o < orSplit.length; o++) {\r\n                    let pos: number = orSplit[o].indexOf(':');\r\n                    if (orSplit[o].indexOf('#') === 0 && pos > 1) {\r\n                        // if (searchProperties.contains(propString)) {\r\n                        let value: string = orSplit[o].substring(pos + 1);\r\n                        let column: string = orSplit[o].substring(1, pos - 1);\r\n                        let dataValue: Object = item.model.getValue(column);\r\n                        if (dataValue) {\r\n                            if (dataValue.toString().toLowerCase().indexOf(value) >= 0) {\r\n                                // Search for simple Property\r\n                                break;\r\n                            }\r\n                        }\r\n                    } else if (orSplit[o].length > 1 && orSplit[o].indexOf('-') === 0) {\r\n                        if (fullText.indexOf(orSplit[o].substring(1)) < 0) {\r\n                            break;\r\n                        }\r\n                    } else if (fullText.indexOf(orSplit[o]) >= 0) {\r\n                        // his search word is found in full text\r\n                        break;\r\n                    }\r\n                }\r\n                if (o === orSplit.length) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public getColumn(): Column[] {\r\n        return this.columns;\r\n    }\r\n\r\n    public updateElement(property: string, value: string): void {\r\n        // first clear all elements inside the table:\r\n        for (let item of this.items) {\r\n            if (item instanceof BridgeElement) {\r\n                (<BridgeElement>item).model.removeListener(this);\r\n            }\r\n        }\r\n\r\n        this.items = [];\r\n        this.itemsIds = {};\r\n\r\n        // load all entitys that match the property\r\n        if (this.property !== undefined) {\r\n            let items = this.$owner.getItems();\r\n            for (let j in items) {\r\n                if (items.hasOwnProperty(j)) {\r\n                    let item = items[j];\r\n                    if (item instanceof Data) {\r\n                        if (property === j) {\r\n                            // if (property == item.property) {\r\n                            let i = new BridgeElement(<Data>item);\r\n                            this.items.push(i);\r\n                            this.itemsIds[item.id] = i;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            this.redrawAllElements();\r\n        }\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        if (this.$owner !== null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    protected redrawAllElements() {\r\n        let children: HTMLCollection = this.$bodysection.children;\r\n        // remove old children\r\n        for (let i = 0; i < children.length; i++) {\r\n            let child = children.item(i);\r\n            // remove child\r\n            this.$bodysection.removeChild(child);\r\n        }\r\n\r\n        // load new children\r\n        for (let obj of this.items) {\r\n            // register listeners\r\n            obj.model.addListener(this);\r\n            // create tr\r\n            let row = this.createRow(obj);\r\n            this.$bodysection.appendChild(row);\r\n            this.cells[obj.id] = row;\r\n        }\r\n    }\r\n\r\n    private parseData(column: any): Column {\r\n        let col = new Column();\r\n        col.label = column.label || column.id;\r\n        col.attribute = column.attribute || column.label || column.id;\r\n        col.$element = document.createElement('th');\r\n        col.$element.innerHTML = col.label;\r\n        col.$element.draggable = true;\r\n\r\n        // resize Header\r\n        col.$resize = document.createElement('div');\r\n        col.$resize.classList.add('resize');\r\n        col.$element.appendChild(col.$resize);\r\n\r\n        return col;\r\n    }\r\n\r\n    private createRow(data: BridgeElement): HTMLTableRowElement {\r\n        let tr: HTMLTableRowElement = document.createElement('tr');\r\n\r\n        for (let id of this.columns) {\r\n            let td: HTMLTableDataCellElement = document.createElement('td');\r\n            tr.appendChild(td);\r\n            td.innerHTML = data.model.getValue(id.attribute);\r\n        }\r\n        return tr;\r\n    }\r\n\r\n    private addHeaderInfo(col: Column) {\r\n        let element: HTMLTableCellElement = col.$element;\r\n        let that = this;\r\n        element.classList.add('sort');\r\n        element.addEventListener('click',\r\n            function () {\r\n                that.sort(col);\r\n            },\r\n            false);\r\n    }\r\n\r\n    private columnDragEvent(type: string, e: DragEvent) {\r\n        if (type === 'dragstart') {\r\n            // Target (this) element is the source node.\r\n            this.moveElement.$element.style.opacity = '0.4';\r\n            e.dataTransfer.effectAllowed = 'move';\r\n            e.dataTransfer.setData('text/json', JSON.stringify(Util.toJson(this.moveElement)));\r\n        } else if (type === 'dragenter') {\r\n            // TO Nothing\r\n        } else if (type === 'dragleave') {\r\n            this.moveElement.$element.classList.remove('over');\r\n        } else if (type === 'dragover') {\r\n            if (e.preventDefault) {\r\n                e.preventDefault(); // Necessary. Allows us to drop.\r\n            }\r\n            for (let c = 0; c < this.columns.length; c++) {\r\n                if (this.columns[c].$element === e.target) {\r\n                    this.dragColumn = this.columns[c];\r\n                    this.dragPos = c;\r\n                    this.columns[c].$element.classList.add('over');\r\n                } else {\r\n                    this.columns[c].$element.classList.remove('over');\r\n                }\r\n            }\r\n            if (e.target === this.tableOption) {\r\n                this.tableOption.classList.add('over');\r\n                this.dragPos = this.columns.length;\r\n            } else {\r\n                this.tableOption.classList.remove('over');\r\n            }\r\n            e.dataTransfer.dropEffect = 'move';  // See the section on the DataTransfer object.\r\n        } else if (type === 'drop') {\r\n            // this / e.target is current target element.\r\n            if (e.stopPropagation) {\r\n                e.stopPropagation(); // stops the browser from redirecting.\r\n            }\r\n            if (this.movePos === this.dragPos) {\r\n                return;\r\n            }\r\n            // movePos -> dragPos\r\n            // See the section on the DataTransfer object.\r\n            // DataModel\r\n            this.columns.splice(this.movePos, 1);\r\n            if (this.movePos >= this.dragPos) {\r\n                this.columns.splice(this.dragPos, 0, this.moveElement);\r\n            } else {\r\n                this.columns.splice(this.dragPos - 1, 0, this.moveElement);\r\n            }\r\n\r\n            // Header Line\r\n            let line: HTMLElement = this.moveElement.$element.parentElement;\r\n            line.removeChild(this.moveElement.$element);\r\n            if (this.dragPos < this.columns.length) {\r\n                line.insertBefore(this.moveElement.$element, this.dragColumn.$element);\r\n            } else {\r\n                line.insertBefore(this.moveElement.$element, this.tableOption);\r\n            }\r\n\r\n            let oldElement: Element;\r\n            let newElement: Element;\r\n\r\n            // Now all Childs\r\n            for (let i = 0; i < this.$bodysection.children.length; i++) {\r\n                // Each line\r\n                line = <HTMLElement>this.$bodysection.children.item(i);\r\n                oldElement = line.children.item(this.movePos);\r\n                newElement = line.children.item(this.dragPos);\r\n                line.removeChild(oldElement);\r\n                line.insertBefore(oldElement, newElement);\r\n            }\r\n        } else if (type === 'dragend') {\r\n            // this/e.target is the source node.\r\n            this.moveElement.$element.style.opacity = '1';\r\n            for (let i = 0; i < this.columns.length; i++) {\r\n                this.columns[i].$element.classList.remove('over');\r\n            }\r\n            this.tableOption.classList.remove('over');\r\n        }\r\n    }\r\n\r\n    private addOptionItem(label: string, parent: HTMLElement, sub: boolean): HTMLElement {\r\n        let labelControl;\r\n        if (label) {\r\n            labelControl = document.createElement('a');\r\n            labelControl.appendChild(document.createTextNode(label));\r\n            labelControl.href = 'javascript:void(0);';\r\n            parent.appendChild(labelControl);\r\n        }\r\n        if (sub) {\r\n            let context = document.createElement('div');\r\n            context.classList.add('dropdown-content');\r\n            context.style.setProperty('position', 'absolute');\r\n            parent.appendChild(context);\r\n\r\n            /* When the user clicks on the button,\r\n             toggle between hiding and showing the dropdown content */\r\n            parent.addEventListener(\r\n                'click',\r\n                function () {\r\n                    context.classList.toggle('show');\r\n                },\r\n                false);\r\n            return context;\r\n        }\r\n        return labelControl;\r\n    }\r\n\r\n    private registerEvents(events: string[]) {\r\n        let that = this;\r\n        for (let i = 0; i < events.length; i++) {\r\n            this.$view.addEventListener(events[i], function (evt) {\r\n                return that.tableEvent(events[i], evt);\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\nclass Column {\r\n    label: string;\r\n    attribute: string;\r\n    $element: HTMLTableHeaderCellElement;\r\n    $resize: HTMLDivElement;\r\n    visible: boolean;\r\n}\r\n","import { AutoComplete } from './AutoComplete';\r\nimport { BR } from './BR';\r\nimport { Div } from './Div';\r\nimport { Label } from './Label';\r\n\r\nexport * from './Node';\r\nexport * from './Class';\r\nexport * from './SO';\r\nexport * from './Symbol';\r\n\r\nexport * from './BR';\r\nexport * from './Button';\r\nexport * from './Div';\r\nexport * from './Form';\r\nexport * from './Input';\r\nexport * from './Label';\r\nexport * from './Table';\r\nexport * from './HTML';\r\nexport * from './Dice';\r\nexport * from './AutoComplete';\r\nexport * from './Attribute';\r\nexport * from './Method';\r\nexport * from './ClazzProperty';\r\n\r\nnew AutoComplete();\r\nnew BR();\r\nnew Div();\r\nnew Label();\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class AddNode implements EventHandler {\r\n\r\n    public MIN_SIZE_TO_ADD_NODE: number = 30;\r\n    public MIN_SIZE_TO_ADD_TEXT: number = 10;\r\n    private graph: Graph;\r\n    private svgRect: SVGSVGElement;\r\n    private svgGroupAddNode: SVGSVGElement;\r\n    private svgTextAddNode: SVGSVGElement;\r\n    private svgTextRectAddNode: SVGSVGElement;\r\n    private isRectDrawing: boolean;\r\n    private isDrawToLeft: boolean;\r\n    private isDrawToTop: boolean;\r\n    private isBigEnoughForAddNode: boolean;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(AddNode.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(AddNode.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!this.canHandle()) {\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element.id !== 'RootElement') {\r\n            return false;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element.id === 'RootElement') {\r\n                    this.start(event, element);\r\n\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mousemove':\r\n                this.drawRect(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.removeRect();\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.addNode();\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawRect(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isRectDrawing) {\r\n            return;\r\n        }\r\n\r\n        evt.stopPropagation();\r\n\r\n        let width = Util.getEventX(evt) - this.x;\r\n        let height = Util.getEventY(evt) - this.y;\r\n\r\n        // rectangle is in a negative area, drawn to upper case. not possibble with svg\r\n        if (width < 0) {\r\n            this.isDrawToLeft = true;\r\n            width *= -1;\r\n        } else {\r\n            this.isDrawToLeft = false;\r\n        }\r\n\r\n        if (height < 0) {\r\n            this.isDrawToTop = true;\r\n            height *= -1;\r\n        } else {\r\n            this.isDrawToTop = false;\r\n        }\r\n\r\n        if (width > this.MIN_SIZE_TO_ADD_NODE && height > this.MIN_SIZE_TO_ADD_NODE) {\r\n            this.isBigEnoughForAddNode = true;\r\n        } else {\r\n            this.isBigEnoughForAddNode = false;\r\n        }\r\n\r\n        this.graph.root.style.cursor = 'pointer';\r\n\r\n        // if line wasnt draw\r\n        if (!this.svgRect) {\r\n\r\n            let rectAddNode = Util.createShape({\r\n                tag: 'rect',\r\n                id: 'addNodeRect',\r\n                x: this.x,\r\n                y: this.y,\r\n                width: 1,\r\n                height: 1,\r\n                class: 'SVGAddNode'\r\n            });\r\n\r\n            let group = Util.createShape({ tag: 'g', id: 'groupAddNode' });\r\n            group.appendChild(rectAddNode);\r\n\r\n            this.graph.root.appendChild(group);\r\n            this.svgRect = rectAddNode;\r\n            this.svgGroupAddNode = group;\r\n        }\r\n        else {\r\n\r\n            let svgRectBBox = this.svgRect.getBBox();\r\n\r\n            // if rect is big enough, show text as helper\r\n            if ((svgRectBBox.width > this.MIN_SIZE_TO_ADD_TEXT\r\n                || svgRectBBox.height > this.MIN_SIZE_TO_ADD_TEXT) && !this.svgTextAddNode) {\r\n\r\n                let textAddNode = Util.createShape({\r\n                    tag: 'text',\r\n                    x: this.x,\r\n                    y: this.y - 5,\r\n                    'font-family': 'Verdana',\r\n                    'font-size': 12,\r\n                    fill: 'black'\r\n                });\r\n                textAddNode.textContent = 'Hold on and move to create a new class';\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n\r\n\r\n                // get correct size of text node\r\n                let sizeClientRect: ClientRect = textAddNode.getBoundingClientRect();\r\n\r\n                let rectBackgroundForText = Util.createShape({\r\n                    tag: 'rect',\r\n                    x: this.x,\r\n                    y: this.y - sizeClientRect.height,\r\n                    width: sizeClientRect.width,\r\n                    height: sizeClientRect.height,\r\n                    fill: '#DDD',\r\n                    'stroke-width': 0\r\n                });\r\n\r\n                this.svgTextRectAddNode = rectBackgroundForText;\r\n                this.svgTextAddNode = textAddNode;\r\n                this.svgGroupAddNode.appendChild(rectBackgroundForText);\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n            }\r\n\r\n            if (this.isDrawToLeft) {\r\n                this.svgRect.setAttributeNS(null, 'x', '' + Util.getEventX(evt));\r\n            }\r\n\r\n            if (this.isDrawToTop) {\r\n                this.svgRect.setAttributeNS(null, 'y', '' + Util.getEventY(evt));\r\n            }\r\n\r\n            // set width and height\r\n            this.svgRect.setAttributeNS(null, 'width', width.toString());\r\n            this.svgRect.setAttributeNS(null, 'height', height.toString());\r\n\r\n            // set color\r\n            if (this.isBigEnoughForAddNode) {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode-ready');\r\n\r\n                // draw text\r\n            }\r\n            else {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeRect(): void {\r\n        this.isRectDrawing = false;\r\n        this.isBigEnoughForAddNode = false;\r\n\r\n        this.graph.root.style.cursor = 'default';\r\n\r\n        if (this.svgGroupAddNode) {\r\n            this.graph.root.removeChild(this.svgGroupAddNode);\r\n            this.svgGroupAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgRect) {\r\n            this.svgRect = undefined;\r\n        }\r\n\r\n        if (this.svgTextAddNode) {\r\n            this.svgTextAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgTextRectAddNode) {\r\n            this.svgTextRectAddNode = undefined;\r\n        }\r\n    }\r\n\r\n    private addNode(): void {\r\n\r\n        if (!this.isBigEnoughForAddNode) {\r\n            this.removeRect();\r\n            return;\r\n        }\r\n\r\n        this.removeRect();\r\n        let node = this.graph.addElementWithValues('Class', { x: this.x, y: this.y });\r\n        this.graph.drawElement(node);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isRectDrawing) {\r\n            return;\r\n        }\r\n        this.isRectDrawing = true;\r\n\r\n        this.x = Util.getEventX(evt);\r\n        this.y = Util.getEventY(evt);\r\n    }\r\n\r\n}\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement, Point } from '../elements/BaseElements';\r\nimport { GraphModel } from '../elements/Model';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Control } from '../Control';\r\nimport { Util } from '../util';\r\n\r\nexport class Drag implements EventHandler {\r\n\r\n    private element: DiagramElement;\r\n    private svgElement: SVGSVGElement;\r\n    private dragging = false;\r\n    private reinsert = false;\r\n    private mouseOffset = new Point();\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        if (!this.canHandle()) {\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if ((!this.dragging) && (element.id !== 'RootElement')) {\r\n                    this.element = element;\r\n                    this.svgElement = <SVGSVGElement>element.$view;\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mouseup':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n\r\n                break;\r\n            case 'mousemove':\r\n                if (this.dragging) {\r\n                    this.drag(event, element);\r\n                }\r\n                break;\r\n            case 'mouseleave':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Drag.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Drag.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private reset() {\r\n        this.dragging = false;\r\n        this.svgElement.style.cursor = 'pointer';\r\n\r\n        /*  WORKAROUND\r\n            Chrome got problem with the Node.appendChild() method.\r\n            Sometimes it works, sometimes not.\r\n            So the background is, in the drag method will the current element be appended\r\n            to front of the svg root.\r\n            If this happend, the click event won't fire.\r\n            So it will be fired manually.\r\n            This problem occurs only in chrome.\r\n        */\r\n        if (Util.isChrome()) {\r\n            let clickEvt = Util.createCustomEvent('click');\r\n            this.svgElement.dispatchEvent(clickEvt);\r\n        }\r\n    }\r\n\r\n    private start(evt: Event | any, element: Control) {\r\n\r\n        this.dragging = true;\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n        this.reinsert = true;\r\n\r\n        this.svgElement.style.cursor = 'move';\r\n    }\r\n\r\n    private drag(evt: Event | any, element: DiagramElement) {\r\n\r\n        if (this.reinsert) {\r\n            if (this.element.id !== 'RootElement') {\r\n                // nesseccary to set the dragged object on top of svg children\r\n                this.graph.root.appendChild(this.svgElement);\r\n            }\r\n\r\n            let dragEvent = Util.createCustomEvent('drag');\r\n            element.$view.dispatchEvent(dragEvent);\r\n        }\r\n        this.reinsert = false;\r\n\r\n        evt.stopPropagation();\r\n\r\n        const translation = this.svgElement.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        const sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        const transX = sx + evt.clientX - this.mouseOffset.x;\r\n        const transY = sy + evt.clientY - this.mouseOffset.y;\r\n        this.svgElement.setAttributeNS(null, 'transform', 'translate(' + transX + ' ' + transY + ')');\r\n        this.element.getPos().addNum(transX - sx, transY - sy);\r\n\r\n        if (this.element instanceof Node) {\r\n            (<Node>this.element).redrawEdges();\r\n        }\r\n\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n\r\n\r\n        // resize svg root\r\n        let maxX = this.element.getPos().x + this.element.getSize().x;\r\n        let maxY = this.element.getPos().y + this.element.getSize().y;\r\n\r\n        let domRectRoot = this.graph.root.getBoundingClientRect();\r\n        if(!domRectRoot){\r\n            return;\r\n        }\r\n\r\n        if(maxX > domRectRoot.width){\r\n            this.graph.root.setAttributeNS(null, 'width', '' + maxX);\r\n        }\r\n        \r\n        if(maxY > domRectRoot.height){\r\n            this.graph.root.setAttributeNS(null, 'height', '' + maxY);\r\n        }\r\n    }\r\n}\r\n","import PropertyChangeSupport from '../PropertyChangeSupport';\r\nimport Data from '../Data';\r\nimport {Adapter} from '../Adapter';\r\nimport ClazzProperty from '../elements/nodes/ClazzProperty';\r\n\r\nexport class GraphListener implements PropertyChangeSupport {\r\n    private $owner: ClazzProperty;\r\n\r\n    constructor(owner: ClazzProperty) {\r\n        this.$owner = owner;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        let adapter = this.$owner.getRoot().getAdapter();\r\n        if (adapter) {\r\n            // messages.add(\"{\\\"class\\\":\\\"de.uniks.networkparser.test.model.House\\\",\\\"id\\\":\\\"H1\\\",\\\"rem\\\":{\\\"floor\\\":4},\\\"upd\\\":{\\\"floor\\\":42}}\");\r\n            let myId =  this.$owner.$owner.getId();\r\n            if (myId && myId.length > 0) {\r\n                let pos = myId.indexOf(':');\r\n                if (pos > 0) {\r\n                    myId = myId.substring(0, pos).trim();\r\n                }\r\n            }\r\n            let myName = this.$owner.getName();\r\n            let remJson = {};\r\n            remJson[myName] = oldValue;\r\n            let updJson = {};\r\n            updJson[myName] = newValue;\r\n            let json = {};\r\n            json['id'] = myId;\r\n            json['rem'] = remJson;\r\n            json['upd'] = updJson;\r\n            let message = JSON.stringify(json);\r\n            (<Adapter> adapter).update(message);\r\n        }\r\n    }\r\n}\r\n","import {Graph} from '../elements/';\r\nimport {EventHandler, EventBus} from '../EventBus';\r\nimport {DiagramElement} from '../elements/';\r\nimport {Util} from '../util';\r\n\r\nexport class ImportFile implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(ImportFile.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(ImportFile.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        let type: string = typeof event;\r\n        if (type !== 'DragEvent') {\r\n            return false;\r\n        }\r\n        let evt: DragEvent = <DragEvent>event;\r\n        if (evt.type === 'dragover') {\r\n            this.handleDragOver(evt);\r\n        } else if (evt.type === 'dragleave') {\r\n            if (this.graph.$view !== evt.target) {\r\n                return false;\r\n            }\r\n            this.setBoardStyle('dragleave');\r\n        } else if (evt.type === 'drop') {\r\n            this.handleLoadFile(evt);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public setBoardStyle(typ: string): boolean {\r\n        let b = this.graph.$view;\r\n        Util.removeClass(b, 'Error');\r\n        Util.removeClass(b, 'Ok');\r\n        Util.removeClass(b, 'Add');\r\n        if (typ === 'dragleave') {\r\n            if (b['errorText']) {\r\n                b.removeChild(b['errorText']);\r\n                b['errorText'] = null;\r\n            }\r\n            return true;\r\n        }\r\n        Util.addClass(b, typ);\r\n        if (typ === 'Error') {\r\n            if (!b['errorText']) {\r\n                b['errorText'] = Util.create({tag: 'div', style: 'margin-top: 30%', value: 'NO TEXTFILE'});\r\n                b.appendChild(b['errorText']);\r\n            }\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private handleLoadFile(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n\r\n        let files = evt.dataTransfer.files; // FileList object.\r\n\r\n        if (files.length > 1) {\r\n            evt.dataTransfer.dropEffect = 'none';\r\n            return;\r\n        }\r\n\r\n        // files is a FileList of File objects. List some properties.\r\n        let reader  = new FileReader();\r\n        let output = [];\r\n        let htmlResult = '';\r\n        let that = this;\r\n        for (let i = 0, f; f = files[i]; i++) {\r\n            reader.onload = function(event) {\r\n                htmlResult = event.target['result'];\r\n                console.log('fileContent: ' + htmlResult);\r\n\r\n                // CHANGE TO INTERNAL OBJECT\r\n                if (that.graph) {\r\n                    that.graph.import(htmlResult);\r\n                }\r\n            };\r\n            reader.readAsText(f);\r\n        }\r\n        this.setBoardStyle('dragleave');\r\n    }\r\n\r\n    private handleDragOver(evt: DragEvent): void {\r\n        let error: boolean = true, n: string, f;\r\n        let files = evt.dataTransfer.files;\r\n        // process all File objects\r\n        if (files && files.length > 0) {\r\n            for (let i: number = 0; i < files.length; i += 1) {\r\n                f = files[i];\r\n                if (f.type.indexOf('text') === 0) {\r\n                    error = false;\r\n                } else if (f.type === '') {\r\n                    n = f.name.toLowerCase();\r\n                    if (n.indexOf('json', n.length - 4) !== -1) {\r\n                        error = false;\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            let items = evt.dataTransfer.items;\r\n            if (items && items.length > 0) {\r\n                for (let z = 0; z < items.length; z ++) {\r\n                    if (items[z].type === '' || items[z].type === 'text/plain') {\r\n                        error = false;\r\n                    }\r\n                }\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.\r\n        if (error) {\r\n            this.dragStyler(evt, 'Error');\r\n        } else if (evt.ctrlKey) {\r\n            this.dragStyler(evt, 'Add');\r\n        } else {\r\n            this.dragStyler(evt, 'Ok');\r\n        }\r\n        /* //evt.target['className'] += ' diagramLoadFile';\r\n        '//console.log('handDragOver');*/\r\n    }\r\n\r\n    private dragStyler(event: Event, typ: string) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n        this.setBoardStyle(typ);\r\n    }\r\n\r\n    private handleDragLeave(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n        evt.dataTransfer.dropEffect = 'link'; // Explicitly show this is a copy.\r\n        evt.target['className'] = 'diagram';\r\n        console.log('handDragLeave');\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Class } from '../elements/nodes/Class';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Association } from '../elements/index';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class NewEdge implements EventHandler {\r\n    private graph: Graph;\r\n    private svgLine: SVGSVGElement;\r\n    private isEdgeDrawing: boolean;\r\n    private sourceNode: Node;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    private lastTargetNode: Node;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(NewEdge.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(NewEdge.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!((<KeyboardEvent>event).ctrlKey || EventBus.isHandlerActiveOrFree('NewEdge', true))) {\r\n            this.removeLine();\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element instanceof Node) {\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n\r\n            case 'mousemove':\r\n                this.drawEdge(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.setNewEdgeToNode(event);\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default: break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawEdge(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        let lineToX = Util.getEventX(evt);\r\n        let lineToy = Util.getEventY(evt);\r\n\r\n        let path = `M${this.x} ${this.y} L${lineToX} ${lineToy}`;\r\n        // if line wasnt draw\r\n        if (!this.svgLine) {\r\n\r\n            let attr = {\r\n                tag: 'path',\r\n                id: 'newEdgePath',\r\n                d: path,\r\n                class: 'SVGEdge'\r\n            };\r\n\r\n            let shape = Util.createShape(attr);\r\n            this.svgLine = shape;\r\n\r\n            this.graph.root.appendChild(shape);\r\n            this.graph.root.appendChild(this.sourceNode.$view);\r\n        }\r\n        else {\r\n\r\n            // set new L path\r\n            this.svgLine.setAttributeNS(null, 'd', path);\r\n\r\n            // get node from position\r\n            let targetNode = this.graph.$graphModel.getNodeByPosition(Util.getEventX(evt), Util.getEventY(evt));\r\n\r\n            // if some targetnode is available, so highlight the node\r\n            if (targetNode) {\r\n\r\n                // reset the last one\r\n                if (this.lastTargetNode && this.lastTargetNode.id !== targetNode.id) {\r\n                    this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n                }\r\n\r\n                this.lastTargetNode = targetNode;\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz-drawedge');\r\n            }\r\n            else if (this.lastTargetNode) {\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeLine(): void {\r\n        this.isEdgeDrawing = false;\r\n\r\n        if (this.svgLine) {\r\n            this.graph.root.removeChild(this.svgLine);\r\n            this.svgLine = null;\r\n        }\r\n\r\n        if (this.lastTargetNode) {\r\n            this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n        }\r\n    }\r\n\r\n    private setNewEdgeToNode(event: Event | any): void {\r\n        // get node from position\r\n        let targetNode = this.graph.$graphModel\r\n            .getNodeByPosition(Util.getEventX(event), Util.getEventY(event));\r\n\r\n        if (!targetNode) {\r\n            this.removeLine();\r\n\r\n            return;\r\n        }\r\n\r\n        this.removeLine();\r\n        let edgeType = this.sourceNode.$defaulEdgeType || 'Association';\r\n\r\n        let jsonData = {\r\n            type: edgeType,\r\n            source: this.sourceNode.id,\r\n            target: targetNode.id\r\n        };\r\n\r\n        let newEdge = this.graph.$graphModel.addEdge(<any>jsonData, true);\r\n        this.graph.drawElement(newEdge);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        this.isEdgeDrawing = true;\r\n        this.sourceNode = element as Class;\r\n\r\n        this.x = this.sourceNode.getPos().x + (this.sourceNode.getSize().x / 2);\r\n        this.y = this.sourceNode.getPos().y + (this.sourceNode.getSize().y / 2);\r\n\r\n        // TODO: get this into util or select\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Node } from '../elements/nodes';\r\nimport { Association } from '../elements/edges';\r\nimport { Util } from '../util';\r\nimport { SymbolLibary } from '../elements/nodes/Symbol';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\nimport Attribute from '../elements/nodes/Attribute';\r\n\r\nexport class Select implements EventHandler {\r\n\r\n    private deleteShape: SVGSVGElement;\r\n    private addEdgeShape: SVGSVGElement;\r\n    private copyNodeShape: SVGSVGElement;\r\n    private graph: Graph;\r\n    private padding = 5;\r\n\r\n    private lastSelectedNode: Element;\r\n    private lastSelectedEdge: Element;\r\n\r\n    private isDragged: boolean;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.deleteShape = SymbolLibary.drawSVG({ type: 'Basket', background: true, id: 'trashcan', tooltip: 'Delete class' });\r\n        this.copyNodeShape = SymbolLibary.drawSVG({ type: 'Copynode', background: true, id: 'copyNode', tooltip: 'Copy class' });\r\n        this.addEdgeShape = SymbolLibary.drawSVG({ type: 'Edgeicon', background: true, id: 'addEdge', tooltip: 'Click and drag to connect this class' });\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        let x = Util.getEventX(event);\r\n        let y = Util.getEventY(event);\r\n\r\n        event.stopPropagation();\r\n        if (event.type === 'drag') {\r\n            this.isDragged = true;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            if (element instanceof Node) {\r\n                this.lastSelectedNode = <Element>element.$view;\r\n            }\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n        }\r\n\r\n        if (event.target['id'] === 'background' || element === this.graph.$graphModel) {\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let e = <Node>element;\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.graph.root.appendChild(this.addEdgeShape);\r\n            this.graph.root.appendChild(this.copyNodeShape);\r\n            this.graph.root.appendChild(element.$view);\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'visible');\r\n\r\n            let x = (e.getPos().x + e.getSize().x) + 5;\r\n            let y = e.getPos().y;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y + this.padding})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.copyNodeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 40 + this.padding})`);\r\n            this.copyNodeShape.onclick = (evt) => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let copyClass = (element).copy();\r\n                copyClass.withPos(nextFreePosition.x, nextFreePosition.y);\r\n                this.graph.drawElement(copyClass);\r\n            };\r\n\r\n            this.addEdgeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 80 + this.padding})`);\r\n            this.addEdgeShape.onmousedown = function () {\r\n                EventBus.setActiveHandler('NewEdge');\r\n                element.$view.dispatchEvent(Util.createCustomEvent('mousedown'));\r\n            };\r\n        }\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let clazz = <Node>element;\r\n\r\n            if (Util.isChrome()) {\r\n                if (this.lastSelectedNode && element.id === this.lastSelectedNode.id && !this.isDragged) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            this.isDragged = false;\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            this.lastSelectedNode = <Element>element.$view;\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete class');\r\n\r\n            // draw textbox to edit clazz in one line\r\n            let divInlineEdit = document.createElement('div');\r\n            divInlineEdit.id = 'inlineEdit';\r\n            divInlineEdit.style.position = 'absolute';\r\n            divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n            divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n            divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n            divInlineEdit.style.zIndex = '42';\r\n\r\n            let inputText = document.createElement('input');\r\n            inputText.type = 'text';\r\n            inputText.style.width = '100%';\r\n            inputText.placeholder = 'Add properties, edit label';\r\n\r\n            divInlineEdit.appendChild(inputText);\r\n            document.body.appendChild(divInlineEdit);\r\n\r\n            inputText.addEventListener('focusout', (evt) => {\r\n\r\n                if (Util.isChrome()) {\r\n                    // only if input is empty, remove the inline edit function\r\n                    if ((!inputText.value || inputText.value.length === 0) && (!this.lastSelectedNode || element.id !== this.lastSelectedNode.id)) {\r\n                        this.removeLastInlineEdit();\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                // only if input is empty, remove the inline edit function\r\n                if ((!inputText.value || inputText.value.length === 0)) {\r\n                    this.removeLastInlineEdit();\r\n                }\r\n            });\r\n\r\n            let g = this.graph;\r\n            let propertyTypes: string[] = ['boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'short', 'String', 'void'];\r\n            inputText.addEventListener('keydown', function (evt) {\r\n\r\n                let keyCode = (<any>evt).which;\r\n                let inputValue = <any>inputText.value;\r\n\r\n                if (Util.endsWith(inputValue, ':') && !document.getElementById('selectPropertyType')) {\r\n                    let selectType = document.createElement('select');\r\n                    selectType.id = 'selectPropertyType';\r\n                    selectType.style.width = '100%';\r\n\r\n                    for (let type of propertyTypes) {\r\n                        let selectOption = document.createElement('option');\r\n                        selectOption.value = type;\r\n                        selectOption.innerHTML = type;\r\n                        selectType.appendChild(selectOption);\r\n                    }\r\n\r\n                    selectType.addEventListener('change', function (evt) {\r\n                        let inputValueSplitted = inputValue.split(':');\r\n                        let selectedPropertyType = selectType.options[selectType.selectedIndex].value;\r\n\r\n                        if (inputValueSplitted.length >= 1) {\r\n                            inputText.value = inputValueSplitted[0].trim() + ' : ' + selectedPropertyType;\r\n                            inputText.focus();\r\n                        }\r\n                    });\r\n\r\n                    divInlineEdit.appendChild(selectType);\r\n                }\r\n                else if (!Util.includes(inputValue, ':')) {\r\n                    let selectType = document.getElementById('selectPropertyType');\r\n\r\n                    if (selectType) {\r\n                        selectType.remove();\r\n                    }\r\n                }\r\n\r\n                if (keyCode !== 13) {\r\n                    return;\r\n                }\r\n\r\n                // attribute\r\n                if ((Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) === false) {\r\n                    if (Util.includes(inputValue, ':')) {\r\n                        clazz.addAttribute(inputValue.trim());\r\n                        clazz.reDraw();\r\n                    } else if (Util.includes(inputValue, '=') ) {\r\n                        let attr: Attribute = null;\r\n                        let name = inputValue.substring(0, inputValue.indexOf('=')).trim();\r\n                        for (let child of clazz.getAttributes() ) {\r\n                            if ( name === child.getName()) {\r\n                                attr = child;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (attr) {\r\n                            attr.updateValue(inputValue.substring(inputValue.indexOf('=') + 1).trim());\r\n                        }\r\n                        clazz.reDraw();\r\n                    }\r\n                }\r\n\r\n                // method\r\n                else if (Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) {\r\n                    clazz.addMethod(inputValue.trim());\r\n                    clazz.reDraw();\r\n                }\r\n                // label\r\n                else if (inputValue.trim().split(' ').length === 1 && inputValue.trim().length > 0) {\r\n                    clazz.updateLabel(inputValue.trim());\r\n                }\r\n\r\n                // reset size\r\n                divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n                divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n                divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n\r\n                inputText.value = '';\r\n\r\n                // remove combobox to select type of property\r\n                let selectType = document.getElementById('selectPropertyType');\r\n\r\n                if (selectType) {\r\n                    selectType.remove();\r\n                }\r\n\r\n                // TODO: reload propertiespanel. not working!\r\n                // event wont dispatch\r\n                // let customEvt = Util.createCustomEvent(EventBus.RELOADPROPERTIES);\r\n                // element.$view.dispatchEvent(customEvt);\r\n            });\r\n\r\n            (<any>divInlineEdit.children[0]).focus();\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Association) {\r\n            this.graph.root.appendChild(element.$view);\r\n            this.graph.root.appendChild(element.$sNode.$view);\r\n            this.graph.root.appendChild(element.$tNode.$view);\r\n\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete edge');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            let edge = <Association>element;\r\n            this.lastSelectedEdge = edge.$view;\r\n\r\n            Util.addClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Select.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Select.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private setTooltipOfShape(shape: SVGSVGElement, tooltip: string): void {\r\n        if (!shape || !shape.hasChildNodes()) {\r\n            return;\r\n        }\r\n\r\n        let titleElement = <SVGSVGElement>shape.childNodes[0];\r\n        if (!titleElement || titleElement.tagName !== 'title') {\r\n            return;\r\n        }\r\n\r\n        titleElement.textContent = tooltip;\r\n    }\r\n\r\n    private resetLastSelectedElements() {\r\n        // reset the last one\r\n        if (this.lastSelectedNode) {\r\n            Util.removeClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.lastSelectedNode = undefined;\r\n        }\r\n\r\n        if (this.lastSelectedEdge) {\r\n            Util.removeClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n            this.lastSelectedEdge = undefined;\r\n        }\r\n\r\n        this.removeLastInlineEdit();\r\n    }\r\n\r\n    private removeLastInlineEdit(): void {\r\n        // remove last inline edit of clazz\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n\r\n            // its not supported in internet explorer\r\n            // lastInlineEdit.remove();\r\n        }\r\n    }\r\n\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\n\r\nexport class Zoom implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n    }\r\n\r\n    public handle(e: any, element: DiagramElement): boolean {\r\n        let delta = e.deltaY || e.wheelDeltaY || -e.wheelDelta;\r\n        let d = 1 + (delta / 1000);\r\n\r\n        let values = this.graph.root.getAttribute('viewBox').split(' ');\r\n        const newViewBox = `${values[0]} ${values[1]} ${parseInt(values[2]) * d} ${parseInt(values[3]) * d}`;\r\n        this.graph.root.setAttribute('viewBox', newViewBox);\r\n\r\n        e.preventDefault();\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Zoom.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Zoom.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n}\r\n","export * from './Drag';\r\nexport * from './Select';\r\nexport * from './Zoom';\r\nexport * from './NewEdge';\r\nexport * from './ImportFile';\r\nexport * from './AddNode';\r\n","import { Association } from '../elements/edges';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport Layout from './Layout';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\n\r\nexport class DagreLayout implements Layout {\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        if (!window['dagre']) {\r\n            return;\r\n        }\r\n        let model = graph.$graphModel;\r\n        let g = new window['dagre'].graphlib.Graph();\r\n\r\n        g.setGraph({ marginx: 100, marginy: 20 }).setDefaultEdgeLabel(function () {\r\n            return {};\r\n        });\r\n\r\n        for (let node of model.nodes) {\r\n            g.setNode(node.id, { width: node.getSize().x, height: node.getSize().y });\r\n        }\r\n\r\n        for (let edge of model.edges) {\r\n            g.setEdge(edge.$sNode.id, edge.$tNode.id);\r\n        }\r\n\r\n        window['dagre'].layout(g);\r\n\r\n        g.nodes().forEach(function (nodeId: string) {\r\n            for (let node of model.nodes) {\r\n                if (node.id === nodeId) {\r\n                    node.withPos(g.node(nodeId).x - g.node(nodeId).width / 2, g.node(nodeId).y - g.node(nodeId).height / 2);\r\n                }\r\n            }\r\n        });\r\n        g.edges().forEach(function (e: any) {\r\n            for (let edge of model.edges) {\r\n                if (edge.$sNode.id === e.v && edge.$tNode.id === e.w) {\r\n                    let size = g.edge(e).points.length;\r\n                    edge.clearPoints();\r\n                    for (let i = 0; i < size; i++) {\r\n                        let point: SVGPoint = g.edge(e).points[i];\r\n                        edge.addPoint(point.x, point.y);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n}\r\n","import {DiagramElement} from '../elements/BaseElements';\r\nimport Layout from './Layout';\r\nimport {Graph} from '../elements/Graph';\r\nimport {Association} from '../elements/edges/Association';\r\nimport {Node} from '../elements/nodes/Node';\r\nimport {Control} from '../Control';\r\n\r\nexport class LayoutGraphMin {\r\n    public nodes: Object = {};\r\n    public edges: Array<Object> = [];\r\n    public outEdges: Object = {};\r\n    public inEdges: Object = {};\r\n    public dummyNodes: Array<LayoutGraphNode> = [];\r\n    public dummyEdges: Object = {};\r\n    public count: number = 0;\r\n    public minRank: number = Number.POSITIVE_INFINITY;\r\n    public maxRank: number = 0;\r\n    public maxHeight: number = 0;\r\n    public maxWidth: number = 0;\r\n    public ranksep: number = 0;\r\n    public edgesLabel: Array<Object> = [];\r\n\r\n    public nodeCount(): number {\r\n        return this.count;\r\n    }\r\n\r\n    public node(id: string) {\r\n        return this.nodes[id];\r\n    }\r\n\r\n    public setNode(id: string, n: LayoutGraphNode) {\r\n        if (n && !this.nodes[id]) {\r\n            this.nodes[id] = n;\r\n            this.count = this.count + 1;\r\n        } else if (!n && this.nodes[id]) {\r\n            delete this.nodes[id];\r\n        }\r\n    }\r\n}\r\n\r\nexport class LayoutGraphNode {\r\n    public id: string;\r\n    public width: number;\r\n    public height: number;\r\n    public x: number;\r\n    public y: number;\r\n    public edgeObj: LayoutGraphEdge;\r\n    public rank: number;\r\n\r\n    constructor(id: string, width: number, height: number, x: number, y: number) {\r\n        this.id = id;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n\r\nexport class LayoutGraphEdge {\r\n    public source: string;\r\n    public target: string;\r\n}\r\n\r\n// \t\t\t\t######################################################### DagreGraph #########################################################\r\nexport class DagreLayoutMin implements Layout {\r\n    public static EDGE_KEY_DELIM = '\\x01';\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        let g, layoutNode, nodes, newEdge, edges;\r\n        let i, n, x, y, sId, tId, split = DagreLayoutMin.EDGE_KEY_DELIM;\r\n        let e: Association;\r\n\r\n        nodes = node['nodes'];\r\n        edges = node['edges'];\r\n        g = new LayoutGraphMin();\r\n\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            g.setNode(n.id, new LayoutGraphNode(n.id, n.getSize().x, n.getSize().y, n.getPos().x, n.getPos().y));\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            sId = this.getNodeId(e.$sNode);\r\n            tId = this.getNodeId(e.$tNode);\r\n            if (sId > tId) {\r\n                let tmp = tId;\r\n                tId = sId;\r\n                sId = tmp;\r\n            }\r\n            let idAB = sId + split + tId + split;\r\n            let idBA = tId + split + sId + split;\r\n            if (sId !== tId && g.edgesLabel.indexOf(idAB) < 0 && g.edgesLabel.indexOf(idBA) < 0) {\r\n                newEdge = {source: sId, target: tId, minlen: 1, weight: 1};\r\n                g.edges.push(newEdge);\r\n                g.edgesLabel.push(idAB);\r\n                // In Edges\r\n                if (!g.inEdges[tId]) {\r\n                    g.inEdges[tId] = [];\r\n                }\r\n                g.inEdges[tId].push(newEdge);\r\n\r\n                // Out Edges\r\n                if (!g.outEdges[sId]) {\r\n                    g.outEdges[sId] = [];\r\n                }\r\n                g.outEdges[sId].push(newEdge);\r\n            }\r\n        }\r\n        this.layouting(g);\r\n        // Set the layouting back\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            layoutNode = g.node(n.id);\r\n            x = n.getPos().x;\r\n            y = n.getPos().y;\r\n            if (x < 1 && y < 1) {\r\n                n.withPos(Math.ceil(layoutNode.x), Math.ceil(layoutNode.y));\r\n            }\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            // OBSOLETE method:  e.calc(graph.canvas);\r\n        }\r\n        graph.draw();\r\n    }\r\n\r\n    public getNodeId(node: Control): string {\r\n        if (node.$owner) {\r\n            return this.getNodeId(node.$owner) || node.id;\r\n        }\r\n        return node.id;\r\n    }\r\n\r\n    public layouting(g: LayoutGraphMin) {\r\n        this.longestPath(g);\r\n        this.normalizeRanks(g);\r\n        this.normalizeEdge(g);\r\n        // this.setSimpleOrder(g);\r\n        this.order(g);\r\n        g.ranksep = 25;\r\n        // remove Dummy\r\n        this.removeDummy(g);\r\n        this.position(g);\r\n    }\r\n\r\n    public setSimpleOrder(g: LayoutGraphMin) {\r\n        let i, n;\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            n.order = n.rank;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Applies heuristics to minimize edge crossings in the graph and sets the best\r\n     * order solution as an order attribute on each node.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Graph must be DAG\r\n     *    2. Graph nodes must be objects with a \"rank\" attribute\r\n     *    3. Graph edges must have the \"weight\" attribute\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Graph nodes will have an \"order\" attribute based on the results of the\r\n     *       algorithm.\r\n     */\r\n    public order(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        let visited = {};\r\n        let node, n, order, i;\r\n        for (i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (n in g.nodes) {\r\n            if (visited[n]) {\r\n                continue;\r\n            }\r\n            visited[n] = true;\r\n            node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank].push(n);\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                g.nodes[layering[order][n]].order = parseInt(n);\r\n            }\r\n        }\r\n        // Fix resolve conflict\r\n        for (order in layering) {\r\n            if (layering[order].length > 1) {\r\n                for (n in layering[order]) {\r\n                    if (layering[order].hasOwnProperty(n) === false) {\r\n                        continue;\r\n                    }\r\n                    let name = layering[order][n];\r\n                    let sum = 0;\r\n                    let weight = 1;\r\n                    let edges = g.dummyEdges[name];\r\n                    if (edges) {\r\n                        for (i in edges) {\r\n                            if (edges.hasOwnProperty(i) === false) {\r\n                                continue;\r\n                            }\r\n                            let edge = edges[i];\r\n                            let nodeU = g.node(edge.target);\r\n                            sum = sum + (edge.weight * nodeU.order);\r\n                            weight = weight + edge.weight;\r\n                        }\r\n                    }\r\n                    g.node(name).barycenter = sum / weight;\r\n                    g.node(name).weight = weight;\r\n                }\r\n            } else if (layering[order].length > 0) {\r\n                for (n in layering[order]) {\r\n                    let name = layering[order][n];\r\n                    g.node(name).barycenter = 1;\r\n                    g.node(name).weight = 1;\r\n                }\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                let node = g.nodes[layering[order][n]];\r\n                node.order = parseInt(n) + node.barycenter * node.weight;\r\n                if (isNaN(node.order)) {\r\n                    console.log('ERROR');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public removeDummy(g: LayoutGraphMin) {\r\n        for (let z in g.dummyNodes) {\r\n            let node = g.dummyNodes[z];\r\n            g.setNode(node.id, null);\r\n        }\r\n        g.dummyNodes = [];\r\n        g.dummyEdges = {};\r\n    }\r\n\r\n    /*\r\n     * Breaks any long edges in the graph into short segments that span 1 layer\r\n     * each. This operation is undoable with the denormalize function.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. The input graph is a DAG.\r\n     *    2. Each node in the graph has a \"rank\" property.\r\n     *\r\n     * Post-condition:\r\n     *\r\n     *    1. All edges in the graph have a length of 1.\r\n     *    2. Dummy nodes are added where edges have been split into segments.\r\n     *    3. The graph is augmented with a \"dummyChains\" attribute which contains\r\n     *       the first dummy in each chain of dummy nodes produced.\r\n     */\r\n    public normalizeEdge(g: LayoutGraphMin): void {\r\n        let i: number = 1;\r\n        for (let id in g.edges) {\r\n            let e: LayoutGraphEdge = <LayoutGraphEdge>g.edges[id];\r\n            let v: string = e.source;\r\n            let vRank = g.node(v).rank;\r\n            const w: string = e.target;\r\n            const wRank: number = g.node(w).rank;\r\n            let name: string;\r\n\r\n            if (wRank === vRank + 1) {\r\n                continue;\r\n            }\r\n\r\n            let dummy;\r\n            for (vRank = vRank + 1; vRank < wRank; ++vRank) {\r\n                name = '_d' + e.source + e.target + (i++);\r\n                let newEdge = {source: v, target: name, minlen: 1, weight: 1};\r\n                dummy = new LayoutGraphNode(name, 0, 0, 0, 0);\r\n                dummy.edgeObj = e;\r\n                dummy.rank = vRank;\r\n                // Dummy Edges\r\n                if (!g.dummyEdges[v]) {\r\n                    g.dummyEdges[v] = [];\r\n                }\r\n                g.dummyEdges[v].push(newEdge);\r\n\r\n                g.dummyNodes.push(dummy);\r\n                g.setNode(dummy.id, dummy);\r\n                v = name;\r\n            }\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Initializes ranks for the input graph using the longest path algorithm. This\r\n     * algorithm scales well and is fast in practice, it yields rather poor\r\n     * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\r\n     * ranks wide and leaving edges longer than necessary. However, due to its\r\n     * speed, this algorithm is good for getting an initial ranking that can be fed\r\n     * into other algorithms.\r\n     *\r\n     * This algorithm does not normalize layers because it will be used by other\r\n     * algorithms in most cases. If using this algorithm directly, be sure to\r\n     * run normalize at the end.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Input graph is a DAG.\r\n     *    2. Input graph node labels can be assigned properties.\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Each node will be assign an (unnormalized) \"rank\" property.\r\n     */\r\n    public longestPath(g: LayoutGraphMin) {\r\n        let i, n, visited = [];\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            visited.push(i);\r\n            n.rank = this.findAllPaths(g, n, 0, visited);\r\n            g.minRank = Math.min(g.minRank, n.rank);\r\n        }\r\n    }\r\n\r\n    public findAllPaths(g: LayoutGraphMin, n: Node, currentCost: number, path: Array<String>) {\r\n        let min: number = 0;\r\n        let id: string;\r\n        let z: number;\r\n        let target;\r\n        if (g.outEdges[n.id]) {\r\n            for (z = 0; z < g.outEdges[n.id].length; z++) {\r\n                id = g.outEdges[n.id][z].target;\r\n                target = g.nodes[id];\r\n                if (path[id]) {\r\n                    min = Math.min(min, target.rank);\r\n                } else if (path.indexOf(id) < 0) {\r\n                    min = Math.min(min, this.findAllPaths(g, target, currentCost - 2, path));\r\n                } else {\r\n                    min = currentCost;\r\n                }\r\n            }\r\n            return min;\r\n        }\r\n        return currentCost;\r\n    }\r\n\r\n    /*\r\n     * Adjusts the ranks for all nodes in the graph such that all nodes v have\r\n     * rank(v) >= 0 and at least one node w has rank(w) = 0.\r\n     */\r\n    public normalizeRanks(g: LayoutGraphMin) {\r\n        let min = g.minRank;\r\n        let value;\r\n        g.maxRank = Number.NEGATIVE_INFINITY;\r\n        g.maxHeight = 0;\r\n        g.maxWidth = 0;\r\n        for (let i in g.nodes) {\r\n            let node = g.nodes[i];\r\n            if (node.rank !== undefined) {\r\n                node.rank -= min;\r\n                value = Math.abs(node.rank);\r\n                if (value > g.maxRank) {\r\n                    g.maxRank = value;\r\n                }\r\n                g.maxHeight = Math.max(g.maxHeight, node.height);\r\n                g.maxWidth = Math.max(g.maxWidth, node.width);\r\n            }\r\n        }\r\n    }\r\n\r\n    public position(g: LayoutGraphMin) {\r\n        this.positionY(g);\r\n        let list = this.positionX(g);\r\n        for (let i in list) {\r\n            for (let pos in list[i]) {\r\n                if (list[i].hasOwnProperty(pos) === false) {\r\n                    continue;\r\n                }\r\n                if (g.node(list[i][pos])) {\r\n                    g.node(list[i][pos]).x = parseInt(pos) * g.maxWidth;\r\n                }\r\n            }\r\n\r\n        }\r\n    }\r\n\r\n    public positionY(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        let rankSep = g.ranksep;\r\n        let prevY = 0;\r\n        for (let layer in layering) {\r\n            let maxHeight = g.maxHeight;\r\n            for (let v in layering[layer]) {\r\n                if (layering[layer].hasOwnProperty(v) === false) {\r\n                    continue;\r\n                }\r\n                let id = layering[layer][v];\r\n                g.nodes[id].y = prevY + maxHeight / 2;\r\n            }\r\n            prevY += maxHeight + rankSep;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\r\n     * function will produce a matrix with the ids of each node.\r\n     */\r\n    public buildLayerMatrix(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        for (let i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (let n in g.nodes) {\r\n            let node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank][node.order] = n;\r\n            }\r\n        }\r\n        return layering;\r\n    }\r\n\r\n    public positionX(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        return layering;\r\n    }\r\n}\r\n","import { Point } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport Layout from './Layout';\r\n\r\nexport class Random implements Layout {\r\n\r\n  public layout(graph: Graph) {\r\n\r\n    let model = graph.$graphModel;\r\n\r\n    if (model.nodes) {\r\n      for (let node of model.nodes) {\r\n        let pos: Point = node.getPos();\r\n        if (pos.x === 0 && pos.y === 0) {\r\n          let x = Util.getRandomInt(0, graph.canvasSize.width);\r\n          let y = Util.getRandomInt(0, graph.canvasSize.height);\r\n          node.withPos(x, y);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","export * from './DagreLayout';\r\nexport * from './Random';\r\nexport * from './DagreLayoutMin';\r\n\r\nimport {DagreLayout} from './DagreLayout';\r\nimport {DagreLayoutMin} from './DagreLayoutMin';\r\nimport {Random} from './Random';\r\nnew DagreLayout();\r\nnew DagreLayoutMin();\r\nnew Random();\r\n","import {VirtualKeyBoard} from './VirtualKeyBoard';\r\n\r\nexport {Point} from './elements/BaseElements';\r\nexport {Bridge, DelegateAdapter} from './Bridge';\r\nexport {Graph} from './elements/Graph';\r\nexport * from './elements/nodes';\r\nexport * from './elements/edges';\r\nexport * from './adapters';\r\nexport * from './UML';\r\nimport {Point} from './elements/BaseElements';\r\nimport {Graph} from './elements/Graph';\r\nimport {ClassEditor} from './elements/ClassEditor';\r\nimport {Bridge} from './Bridge';\r\nimport {Util} from './util';\r\nimport * as nodes  from './elements/nodes';\r\nimport * as edges from './elements/edges';\r\nimport {ScrumBoard} from './ScrumBoard';\r\n\r\nif (!window['Point']) {\r\n    window['Point'] = Point;\r\n    window['Graph'] = Graph;\r\n    window['bridge'] = new Bridge();\r\n    window['Util'] = Util;\r\n    window['Class'] = nodes.Class;\r\n    window['Association'] = edges.Association;\r\n    window['SymbolLibary'] = nodes.SymbolLibary;\r\n    window['ClassEditor'] = ClassEditor;\r\n    window['VirtualKeyBoard'] = VirtualKeyBoard;\r\n    window['ScrumBoard'] = ScrumBoard;\r\n}\r\n","'use strict';\r\nimport { CSS } from './CSS';\r\nimport { Node } from './elements/nodes/Node';\r\nimport { DiagramElement, Point } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport class Util {\r\n\r\n    public static isAutoSave: boolean;\r\n\r\n    static getRandomInt(min: number, max: number): number {\r\n        return Math.floor(Math.random() * (max - min + 1)) + min;\r\n    }\r\n\r\n    static createShape(attrs: any): SVGSVGElement {\r\n        let xmlns = attrs.xmlns || 'http://www.w3.org/2000/svg';\r\n        let shape = document.createElementNS(xmlns, attrs.tag);\r\n\r\n        for (let attr in attrs) {\r\n            if (!attrs.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr !== 'tag') {\r\n                shape.setAttribute(attr, attrs[attr]);\r\n\r\n            }\r\n        }\r\n        return <SVGSVGElement><any>shape;\r\n    }\r\n\r\n    static toPascalCase(value: string): string {\r\n        value = value.charAt(0).toUpperCase() + value.substring(1).toLowerCase();\r\n        return value;\r\n    }\r\n\r\n    static isSVG(tag: string): boolean {\r\n        let i,\r\n            list = ['svg', 'path', 'polygon', 'polyline', 'line', 'title', 'rect', 'filter', 'feGaussianBlur', 'feOffset', 'feBlend', 'linearGradient', 'stop', 'text', 'symbol', 'textPath', 'defs', 'fegaussianblur', 'feoffset', 'feblend', 'circle', 'ellipse', 'g'];\r\n        for (i = 0; i < list.length; i += 1) {\r\n            if (list[i] === tag) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    static createHTML(node: any): HTMLElement {\r\n        return <HTMLElement>this.create(node);\r\n    }\r\n    static create(node: any): Element {\r\n        let style, item, xmlns, key, tag, k;\r\n        if (document.createElementNS && (this.isSVG(node.tag) || node.xmlns)) {\r\n            if (node.xmlns) {\r\n                xmlns = node.xmlns;\r\n            } else {\r\n                xmlns = 'http://www.w3.org/2000/svg';\r\n            }\r\n            if (node.tag === 'img' && xmlns) {\r\n                item = document.createElementNS(xmlns, 'image');\r\n                item.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\r\n                item.setAttributeNS('http://www.w3.org/1999/xlink', 'href', node.src);\r\n            } else {\r\n                item = document.createElementNS(xmlns, node.tag);\r\n            }\r\n        } else {\r\n            item = document.createElement(node.tag);\r\n        }\r\n        tag = node.tag.toLowerCase();\r\n        for (key in node) {\r\n            if (!node.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            k = key.toLowerCase();\r\n            if (node[key] === null) {\r\n                continue;\r\n            }\r\n            if (k === 'tag' || k.charAt(0) === '$' || k === '$graphModel') {\r\n                continue;\r\n            }\r\n            if (k.charAt(0) === '#') {\r\n                item[k.substring(1)] = node[key];\r\n                continue;\r\n            }\r\n            if (k === 'rotate') {\r\n                item.setAttribute('transform', 'rotate(' + node[key] + ',' + node.$graphModel.x + ',' + node.$graphModel.y + ')');\r\n                continue;\r\n            }\r\n            if (k === 'value') {\r\n                if (!node[key]) {\r\n                    continue;\r\n                }\r\n                if (tag !== 'input') {\r\n                    if (tag === 'text') {// SVG\r\n                        item.appendChild(document.createTextNode(node[key]));\r\n                    } else {\r\n                        item.innerHTML = node[key];\r\n                    }\r\n                } else {\r\n                    item[key] = node[key];\r\n                }\r\n                continue;\r\n            }\r\n            if (k.indexOf('on') === 0) {\r\n                this.bind(item, k.substring(2), node[key]);\r\n                continue;\r\n            }\r\n            if (k.indexOf('-') >= 0) {\r\n                item.style[key] = node[key];\r\n            } else {\r\n                if (k === 'style' && typeof (node[key]) === 'object') {\r\n                    for (style in node[key]) {\r\n                        if (!node[key].hasOwnProperty(style)) {\r\n                            continue;\r\n                        }\r\n                        if (node[key][style]) {\r\n                            if ('transform' === style) {\r\n                                item.style.transform = node[key][style];\r\n                                item.style.msTransform = item.style.MozTransform = item.style.WebkitTransform = item.style.OTransform = node[key][style];\r\n                            } else {\r\n                                item.style[style] = node[key][style];\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    item.setAttribute(key, node[key]);\r\n                }\r\n            }\r\n        }\r\n        if (node.$parent) {\r\n            node.$parent.appendChild(item);\r\n        }\r\n        if (node.$graphModel) {\r\n            item.$graphModel = node.$graphModel;\r\n        }\r\n        return item;\r\n    }\r\n\r\n    static setSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttribute('width', value);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.setAttribute('height', value);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setAttributeSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttributeNS(null, 'width', value);\r\n        value = Util.getValue(height);\r\n        item.setAttributeNS(null, 'height', value);\r\n    }\r\n\r\n    static setStyleSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setPos(item: any, x: number, y: number): void {\r\n        if (item.x && item.x.baseVal) {\r\n            item.style.left = x + 'px';\r\n            item.style.top = y + 'px';\r\n        } else {\r\n            item.x = x;\r\n            item.y = y;\r\n        }\r\n    }\r\n\r\n    static getValue(value: string | number): number {\r\n        return parseInt(('0' + value).replace('px', ''), 10);\r\n    }\r\n\r\n    static isIE(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('.net') > -1;\r\n    }\r\n\r\n    static isEdge(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('edge') > -1;\r\n    }\r\n\r\n    static isFireFox(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n    }\r\n\r\n    static isSafari(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        return navigator.userAgent.toLowerCase().indexOf('safari') > -1 && !isEdge;\r\n    }\r\n\r\n    static isOpera(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('opera') > -1;\r\n    }\r\n\r\n    static isChrome(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        let isSafari = Util.isSafari();\r\n        return navigator.userAgent.toLowerCase().indexOf('chrome') > -1 && !isEdge && isSafari;\r\n    }\r\n\r\n    static getEventX(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetX'] : event.layerX;\r\n    }\r\n\r\n    static getEventY(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetY'] : event.layerY;\r\n    }\r\n\r\n    static getNumber(str: string): number {\r\n        return parseInt((str || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    static getStyle(styleProp: string): CSS {\r\n        let i, style, diff, current, ref, el = document.createElement('div'), css;\r\n        document.body.appendChild(el);\r\n        css = new CSS(styleProp);\r\n        ref = new CSS(styleProp, el).css;\r\n        style = window.getComputedStyle(el, null);\r\n        el.className = styleProp;\r\n        current = new CSS(styleProp, el).css;\r\n        diff = Util.getNumber(style.getPropertyValue('border-width'));\r\n        for (i in current) {\r\n            if (!current.hasOwnProperty(i)) {\r\n                continue;\r\n            }\r\n            if (i === 'width' || i === 'height') {\r\n                if (Util.getNumber(current[i]) !== 0 && Util.getNumber(current[i]) + diff * 2 !== Util.getNumber(ref[i])) {\r\n                    css.add(i, current[i]);\r\n                }\r\n            } else if (current[i] !== ref[i]) {\r\n                css.add(i, current[i]);\r\n            }\r\n        }\r\n        document.body.removeChild(el);\r\n        return css;\r\n    }\r\n\r\n    static sizeOf(item: string | any, node?: Node): ClientRect {\r\n        let board;\r\n        let rect: ClientRect;\r\n        let addBoard: boolean;\r\n        if (!item) {\r\n            return undefined;\r\n        }\r\n        if (node) {\r\n            board = node.$owner.$view;\r\n            addBoard = false;\r\n        }\r\n\r\n        if (!board) {\r\n            addBoard = true;\r\n            board = Util.createShape({ tag: 'svg', id: 'root', width: 200, height: 200 });\r\n            document.body.appendChild(board);\r\n        }\r\n        if (board.tagName === 'svg') {\r\n            if (typeof item === 'string') {\r\n                item = Util.create({ tag: 'text', $font: true, value: item });\r\n                item.setAttribute('width', '5px');\r\n            }\r\n        } else if (typeof item === 'string') {\r\n            item = document.createTextNode(item);\r\n        }\r\n        board.appendChild(item);\r\n        rect = item.getBoundingClientRect();\r\n        board.removeChild(item);\r\n\r\n        if (addBoard) {\r\n            document.body.removeChild(board);\r\n        }\r\n        return rect;\r\n    }\r\n\r\n    static getColor(style: string, defaultColor?: string) {\r\n        if (style) {\r\n            if (style.toLowerCase() === 'create') {\r\n                return '#008000';\r\n            }\r\n            if (style.toLowerCase() === 'nac') {\r\n                return '#FE3E3E';\r\n            }\r\n            if (style.indexOf('#') === 0) {\r\n                return style;\r\n            }\r\n        }\r\n        if (defaultColor) {\r\n            return defaultColor;\r\n        }\r\n        return '#000';\r\n    }\r\n\r\n    public static utf8$to$b64(str: string): string {\r\n        return window.btoa(encodeURIComponent(str));\r\n    }\r\n\r\n    public static showSVG(control: DiagramElement) {\r\n        let svg = Util.create({\r\n            tag: 'svg',\r\n            style: { left: control.getPos().x, top: control.getPos().y, position: 'absolute' }\r\n        });\r\n        let child = control.getSVG();\r\n        if (child) {\r\n            svg.appendChild(child);\r\n        }\r\n        Util.setSize(svg, control.getSize().x, control.getSize().y);\r\n        document.body.appendChild(svg);\r\n    }\r\n\r\n    public static toJson(ref: JSON | Object): Object {\r\n        let result = {};\r\n        return Util.copy(result, ref, false, false);\r\n    }\r\n\r\n    public static initControl(parent: Control, control: Control, type: string, id: string, json: JSON | Object) {\r\n        if (typeof control.init === 'function') {\r\n            control.init(parent, type, id);\r\n        }\r\n        if (typeof control.load === 'function') {\r\n            control.load(json);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * copy One Json into another\r\n     * @function\r\n     * @param ref reference Json\r\n     * @param src source Json\r\n     * @param full all attributes include privet $\r\n     * @param replace set the original reference or copy it\r\n     * @returns ref\r\n     * @name copy\r\n     */\r\n    public static copy(ref: JSON | Object, src: JSON | Object, full: boolean, replace: boolean) {\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (replace) {\r\n                        ref[i] = src[i];\r\n                        continue;\r\n                    }\r\n                    if (!ref[i]) {\r\n                        if (src[i] instanceof Array) {\r\n                            ref[i] = [];\r\n                        } else {\r\n                            ref[i] = {};\r\n                        }\r\n                    }\r\n                    Util.copy(ref[i], src[i], full, false);\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref[i] = src[i];\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    public static xmlstringify(text: string): string {\r\n        text = text.replace('<', '&lt;');\r\n        text = text.replace('>', '&gt;');\r\n        return text;\r\n    }\r\n\r\n    public static toXML(ref: JSON | Object | any, src: JSON | Object | any, full: boolean, doc: Document): any {\r\n        let name;\r\n        if (!ref) {\r\n            name = src.constructor.name;\r\n            doc = document.implementation.createDocument(null, name, null);\r\n            ref = doc.childNodes[0];\r\n        }\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (!ref.getAttribute(i)) {\r\n                        if (src[i] instanceof Array) {\r\n                            for (let c in src[i]) {\r\n                                if (!src[i].hasOwnProperty(c)) {\r\n                                    continue;\r\n                                }\r\n                                name = src[i][c].constructor.name;\r\n                                let child = doc.createElement(name);\r\n                                ref.appendChild(child);\r\n                                Util.toXML(child, src[i][c], full, doc);\r\n                            }\r\n                        } else {\r\n                            name = src[i].constructor.name;\r\n                            let child = doc.createElement(name);\r\n                            ref.appendChild(child);\r\n                            Util.toXML(child, src[i], full, doc);\r\n                        }\r\n                    } else {\r\n                        Util.toXML(ref.getAttribute(i), src[i], full, doc);\r\n                    }\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref.setAttribute(i, src[i]);\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    static Range(min: Point, max: Point, x: number, y: number) {\r\n        max.x = Math.max(max.x, x);\r\n        max.y = Math.max(max.y, y);\r\n        min.x = Math.min(min.x, x);\r\n        min.y = Math.min(min.y, y);\r\n    }\r\n\r\n    public static getPosition(m: number, n: number, entity: DiagramElement, refCenter: Point) {\r\n        let t, p = [], list, distance = [], min = 999999999, position, i, step = 15;\r\n        let pos: Point = entity.getPos();\r\n        let size: Point = entity.getSize();\r\n        list = [Point.LEFT, Point.RIGHT];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = this.getLRPosition(m, n, entity, list[i]);\r\n            if (t.y >= pos.y && t.y <= (pos.y + size.y + 1)) {\r\n                t.y += (entity['$' + list[i]] * step);\r\n                if (t.y > (pos.y + size.y)) {\r\n                    // Alternative\r\n                    t = Util.getUDPosition(m, n, entity, Point.DOWN, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        list = [Point.UP, Point.DOWN];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = Util.getUDPosition(m, n, entity, list[i]);\r\n            if (t.x >= pos.x && t.x <= (pos.x + size.x + 1)) {\r\n                t.x += (entity['$' + list[i]] * step);\r\n                if (t.x > (pos.x + size.x)) {\r\n                    // Alternative\r\n                    t = this.getLRPosition(m, n, entity, Point.RIGHT, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        for (i = 0; i < p.length; i += 1) {\r\n            if (distance[i] < min) {\r\n                min = distance[i];\r\n                position = p[i];\r\n            }\r\n        }\r\n        return position;\r\n    }\r\n\r\n    public static getUDPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let x, y: number = pos.y;\r\n        if (p === Point.DOWN) {\r\n            y += size.y;\r\n        }\r\n        x = (y - n) / m;\r\n        if (step) {\r\n            x += e['$' + p] * step;\r\n            if (x < pos.x) {\r\n                x = pos.x;\r\n            } else if (x > (pos.x + size.x)) {\r\n                x = pos.x + size.x;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static getLRPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let y: number, x: number = pos.x;\r\n        if (p === Point.RIGHT) {\r\n            x += size.x;\r\n        }\r\n        y = m * x + n;\r\n        if (step) {\r\n            y += e['$' + p] * step;\r\n            if (y < pos.y) {\r\n                y = pos.y;\r\n            } else if (y > (pos.y + size.y)) {\r\n                y = pos.y + size.y;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static hasClass(element: Element, cls: string) {\r\n        let className = element.getAttribute('class');\r\n        return className.indexOf(cls) > 0;\r\n    }\r\n    public static addClass(element: Element, cls: string) {\r\n        if (!Util.hasClass(element, cls)) {\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className + ' ' + cls);\r\n        }\r\n    }\r\n    public static removeClass(element: Element, cls: string) {\r\n        if (Util.hasClass(element, cls)) {\r\n            let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className.replace(reg, ' ').trim());\r\n        }\r\n    }\r\n\r\n    public static startsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.startsWith) {\r\n            return s.indexOf(searchS) === 0;\r\n        }\r\n\r\n        return s.startsWith(searchS);\r\n    }\r\n\r\n    public static endsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.endsWith) {\r\n            let lastIndex = s.lastIndexOf(searchS);\r\n            return lastIndex !== -1 && lastIndex === (s.length - 1);\r\n        }\r\n\r\n        return s.endsWith(searchS);\r\n    }\r\n\r\n    public static includes(s: string, searchS: string): boolean {\r\n        if (!String.prototype.includes) {\r\n            let idx = s.indexOf(searchS);\r\n            return idx > -1;\r\n        }\r\n        if (s === null) {\r\n            return false;\r\n        }\r\n\r\n        return s.includes(searchS);\r\n    }\r\n\r\n    public static isParentOfChild(parent: Element, child: Element): boolean {\r\n\r\n        if (!parent || !child) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isIE()) {\r\n            let children = parent.childNodes;\r\n            // let found = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                let childItem = children[i];\r\n                if (childItem === child) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        return parent.contains(child);\r\n    }\r\n\r\n    public static createCustomEvent(type: string, params?: any): CustomEvent {\r\n        let evt: CustomEvent;\r\n\r\n        if (typeof window['CustomEvent'] !== 'function') {\r\n            params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n            evt = document.createEvent('CustomEvent');\r\n            evt.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\r\n            return evt;\r\n        }\r\n\r\n        evt = new CustomEvent(type);\r\n\r\n        return evt;\r\n    }\r\n\r\n    public static saveToLocalStorage(model: any): boolean {\r\n        if (!this.isAutoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isLocalStorageSupported()) {\r\n            if (model) {\r\n                if (model.$isLoading) {\r\n                    return false;\r\n                }\r\n                let jsonObj = Util.toJson(model);\r\n                let data = JSON.stringify(jsonObj, null, '\\t');\r\n                localStorage.setItem('diagram', data);\r\n            } else {\r\n                localStorage.removeItem('diagram');\r\n            }\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static getDiagramFromLocalStorage(): string {\r\n        if (Util.isLocalStorageSupported()) {\r\n            return localStorage.getItem('diagram');\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    public static isLocalStorageSupported(): boolean {\r\n        if (this.isEdge()) {\r\n            return false;\r\n        }\r\n        return localStorage !== undefined;\r\n    }\r\n}\r\n"],"sourceRoot":""}
Severity: Minor
Found in doc/diagram.js.map by fixme

TODO found
Open

{"version":3,"sources":["webpack://DiagramJS/webpack/bootstrap","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Adapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Bridge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/BridgeElement.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/CSS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Control.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Data.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventBus.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/JSEPS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Palette.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertiesPanel.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertyBinder.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/RGBColor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/SVGConverter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/ScrumBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Toolbar.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/UML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/VirtualKeyBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/JavaAdapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/BaseElements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/ClassEditor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Graph.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Model.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregate.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Association.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Composition.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Generalisation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Implements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Attribute.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/AutoComplete.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/BR.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Button.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Class.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/ClazzProperty.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Dice.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Div.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Form.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/HTML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/InfoText.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Input.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Label.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Method.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Node.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/SO.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/StereoType.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Symbol.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Table.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/AddNode.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Drag.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/GraphListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/ImportFile.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/NewEdge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Select.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Zoom.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayout.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayoutMin.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/Random.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/main.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/util.ts"],"names":[],"mappings":"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","file":"diagram.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./main.ts\");\n","export abstract class Adapter {\r\n    public id: string = null;\r\n\r\n    abstract update(evt: Object): boolean;\r\n}\r\n","'use strict';\r\n\r\nimport * as controls from './elements/nodes';\r\nimport * as adapters from './adapters';\r\nimport Data from './Data';\r\nimport {Control} from './Control';\r\nimport {Adapter} from './Adapter';\r\nimport {Graph} from './elements';\r\nimport {Util} from './util';\r\nimport {Point} from './elements';\r\n\r\nexport class Bridge extends Control {\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public static version: string = '0.42.01.1601007-1739';\r\n    private controlFactory: Object = {};\r\n    private adapterFactory: Object = {};\r\n    private controls: Object = {};\r\n    private adapters: Object = {};\r\n    private items: Object = {};\r\n    private controlNo: number = 1;\r\n    private online: boolean = true;\r\n    private language: string = navigator.language.toUpperCase();\r\n    private toolBar: HTMLElement;\r\n\r\n    constructor(viewRoot?: HTMLElement) {\r\n        super();\r\n        let i;\r\n\r\n        if (viewRoot) {\r\n            this.$view = viewRoot;\r\n        }\r\n\r\n        let keys: string[] = Object.keys(adapters);\r\n        for (i = 0; i < keys.length; i++) {\r\n            let child = adapters[keys[i]];\r\n            if (child && child.id) {\r\n                this.adapterFactory[child.id.toLowerCase()] = child;\r\n            }\r\n        }\r\n\r\n        keys = Object.keys(controls);\r\n        for (i = 0; i < keys.length; i++) {\r\n            this.addControl(controls[keys[i]]);\r\n        }\r\n        this.addControl(Graph);\r\n\r\n        let that = this;\r\n        window.addEventListener('load', function () {\r\n            let updateOnlineStatus = function updateOnlineStatus() {\r\n                that.setOnline(navigator.onLine);\r\n            };\r\n            window.addEventListener('online', updateOnlineStatus);\r\n            window.addEventListener('offline', updateOnlineStatus);\r\n        });\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public setOnline(value: boolean) {\r\n        this.online = value;\r\n        if (this.toolBar.children[0]) {\r\n            this.toolBar.children[0].className = value ? 'online' : 'offline';\r\n        }\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addToolbar(): boolean {\r\n        if (this.toolBar) {\r\n            return false;\r\n        }\r\n        this.toolBar = document.createElement('div');\r\n        this.toolBar.className = 'onlineStatus';\r\n        let child = document.createElement('div');\r\n        child.className = 'online';\r\n        this.toolBar.appendChild(child);\r\n        child = document.createElement('div');\r\n        child.className = 'lang';\r\n        child.innerHTML = this.language;\r\n        this.toolBar.appendChild(child);\r\n\r\n        let body: HTMLElement = document.getElementsByTagName('body')[0];\r\n        body.insertBefore(this.toolBar, body.firstChild);\r\n        // Refresh Online Status\r\n        this.setOnline(this.online);\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addListener = function (listener: any) {\r\n        this.listener.push(listener);\r\n    };\r\n\r\n    public addControl(control: any) {\r\n        if (control && control.name) {\r\n            this.controlFactory[control.name.toLowerCase()] = control;\r\n        }\r\n    }\r\n\r\n    public getId(): string {\r\n        return 'control' + (this.controlNo++);\r\n    }\r\n\r\n    public adapterUpdate(message: string) {\r\n        let keys: string[] = Object.keys(this.adapters);\r\n        if (keys.length > 0) {\r\n            let i;\r\n            for (i = 0; i < keys.length; i++) {\r\n                let adapterList = this.adapters[keys[i]];\r\n                if (adapterList instanceof Adapter) {\r\n                    adapterList.update(message);\r\n                } else {\r\n                    for (let adapter of adapterList) {\r\n                        adapter.update(message);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        let config = {}, className: string, id: string;\r\n        if (typeof(json) === 'string') {\r\n            // Only a String\r\n            config['id'] = '' + json;\r\n            let item = document.getElementById(config['id']);\r\n            let className: string;\r\n            if (item) {\r\n                className = item.getAttribute('class');\r\n                if (!className) {\r\n                    className = item.getAttribute('classname') || '';\r\n                }\r\n                // Found Element and now config Data element\r\n                if (item.getAttribute('property')) {\r\n                    if (this.hasItem(item.getAttribute('property'))) {\r\n                        let data = this.getItem(item.getAttribute('property'));\r\n                        for (let key in data.prop) {\r\n                            if (item.getAttribute(key)) {\r\n                                data.setValue(key, item.getAttribute(key));\r\n                            }\r\n                        }\r\n                        if (item.getAttribute('property')) {\r\n                            // TODO: FIXME!!!\r\n                            // data.property = item.getAttribute(\"property\");\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                className = '' + json;\r\n            }\r\n            className = className.toLowerCase();\r\n            config['className'] = className;\r\n        } else {\r\n            config = <JSON>json;\r\n        }\r\n        // Config validate\r\n        if (!config['id']) {\r\n            config['id'] = this.getId();\r\n        }\r\n        // Backup for Old Graph\r\n        if (!config['className'] && (config['type'] === 'clazzdiagram' || config['type'] === 'objectdiagram')) {\r\n            config['className'] = 'graph';\r\n        }\r\n\r\n        className = config['className'] || config['class'];\r\n        className = className.toLocaleLowerCase();\r\n        id = config['id'];\r\n\r\n        // Check For Control or Data\r\n        if ((config['prop'] || config['upd'] || config['rem']) && this.controls[id] === null) {\r\n            // Its Data\r\n            let newData = !this.hasItem(config['id']);\r\n            let item: Data = this.getItem(config['id']);\r\n            // TODO: FIXME!!!\r\n            // if (id && className && !item.property) {\r\n            //      item.property = className;\r\n            // }\r\n            if (newData) {\r\n                for (let i in this.controls) {\r\n                    if (this.controls.hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    this.controls[i].addItem(this, item);\r\n                }\r\n            }\r\n            // Add all Values to item\r\n            item.addProperties(config);\r\n            // Bridge.addProperties(config['prop'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return item;\r\n        }\r\n\r\n        let control;\r\n        if (this.controls[id]) {\r\n            control = this.controls[id];\r\n            control.initControl(json);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return control;\r\n        }\r\n\r\n        if (typeof(this.controlFactory[className]) === 'object' || typeof(this.controlFactory[className]) === 'function') {\r\n            let obj = this.controlFactory[className];\r\n            control = new obj(json);\r\n            Util.initControl(owner || this, control, config['property'], id, json);\r\n\r\n            if (control.id) {\r\n                this.controls[control.id] = control;\r\n            } else {\r\n                this.controls[id] = control;\r\n            }\r\n\r\n            // create DataObject and register this control as listener to it\r\n            // let obj = {id:id};\r\n            // let data: Data = this.load(obj);\r\n            // data.addListener(this);\r\n\r\n            // Try to Show\r\n            if (typeof control.getSVG === 'function' && typeof control.getSize === 'function') {\r\n                let size: Point = control.getSize();\r\n\r\n                let svg = Util.createShape({\r\n                    tag: 'svg',\r\n                    id: 'root',\r\n                    width: size.x,\r\n                    height: size.y\r\n                });\r\n\r\n                let view = control.getSVG();\r\n                svg.appendChild(view);\r\n                document.getElementsByTagName('body')[0].appendChild(svg);\r\n            }\r\n            return control;\r\n        }\r\n        return null;\r\n        // bridge.load('{class:table, columns:[{id:'firstname'}, {id:'lastname'}]}');\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n\r\n        if (this.items[id] !== undefined) {\r\n            return true;\r\n        }\r\n        id = id.split('.')[0];\r\n        return (this.items[id] !== undefined);\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return this.items;\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        let item = this.items[id];\r\n        if (!item) {\r\n            id = id.split('.')[0];\r\n            item = this.items[id];\r\n            if (!item) {\r\n                item = new Data();\r\n                item.id = id;\r\n                this.items[id] = item;\r\n            }\r\n        }\r\n        return item;\r\n    }\r\n\r\n    /**\r\n     * Method for executing user input -> Event\r\n     * @param object\r\n     * @param attribute\r\n     * @param oldValue\r\n     * @param newValue\r\n     * @returns {boolean}\r\n     */\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        alert('Bridge.setValue: oldVal:' + oldValue + ', newVal: ' +  + newValue + ', attribute: ' + attribute + ', object: ' + JSON.stringify(object));\r\n        let obj: Data;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n\r\n        } else if (object instanceof Data) {\r\n            obj = object;\r\n            id = object.id;\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = <Data>object;\r\n            id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return false;\r\n        }\r\n        if (obj) {\r\n            // Execute Update to Data\r\n            obj.setValue(attribute, newValue);\r\n            // Could be done here, but currently is done at this.execueChange..:\r\n            // obj[attribute] = value;\r\n        }\r\n\r\n        /*let tmp = {'id': id};\r\n        if (typeof(newValue) !== 'undefined' && newValue !== null) {\r\n            let upd = {};\r\n            upd[attribute] = newValue;\r\n            tmp['upd'] = upd;\r\n        }\r\n        if (typeof(oldValue) !== 'undefined' && oldValue !== null) {\r\n            let rem = {};\r\n            rem[attribute] = oldValue;\r\n            tmp['rem'] = rem;\r\n        }*/\r\n        // this.load(tmp);\r\n        return true;\r\n    }\r\n\r\n    public getValue(object: Object, attribute: string): any {\r\n        let obj: Object;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = object;\r\n            // id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return;\r\n        }\r\n        if (obj) {\r\n            if (obj.hasOwnProperty(attribute)) {\r\n                return obj[attribute];\r\n            } else if (obj instanceof Data) {\r\n                return (<Data>obj).getValue(attribute);\r\n            } else {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    public getNumber(object: Object, attribute: string, defaultValue: number = 0): number {\r\n        let res = <number>this.getValue(object, attribute);\r\n        if (typeof res === 'number') {\r\n            return res;\r\n        } else if (typeof res === 'string') {\r\n            // check whether res is a number\r\n            let value = Number(res);\r\n            if (value || value === 0) {\r\n                return value;\r\n            }\r\n        }\r\n        return defaultValue;\r\n    }\r\n\r\n    getControl(controlId: string) {\r\n        return this.controls[controlId];\r\n    }\r\n\r\n    public registerListener(eventType: string, control: Control, callBackfunction: string): Control {\r\n        if (typeof control === 'string') {\r\n            control = this.getControl(<string>control);\r\n        }\r\n        if (!control) {\r\n            return null;\r\n        }\r\n        if (eventType) {\r\n            eventType = eventType.toLowerCase();\r\n        }\r\n        control.registerListenerOnHTMLObject(eventType);\r\n        if (callBackfunction) {\r\n            let adapter: DelegateAdapter = new DelegateAdapter();\r\n            adapter.callBackfunction = callBackfunction;\r\n            adapter.id = control.getId();\r\n            this.addAdapter(adapter, eventType);\r\n        }\r\n        return control;\r\n    }\r\n\r\n    public addAdapter(adapter: Adapter | string, eventType: string): Adapter {\r\n        if (!eventType) {\r\n            eventType = '';\r\n        }\r\n        let result: Adapter;\r\n        if (adapter instanceof String) {\r\n            let obj = this.adapterFactory[adapter.toLowerCase()];\r\n            result = new obj();\r\n        } else {\r\n            result = <Adapter>adapter;\r\n        }\r\n        let handlers = this.adapters[eventType];\r\n\r\n        if (handlers === null || handlers === undefined) {\r\n            handlers = [];\r\n            this.adapters[eventType] = handlers;\r\n        }\r\n        handlers.push(result);\r\n        return result;\r\n    }\r\n\r\n    public fireEvent(evt: Event): void {\r\n        let handlers = this.adapters[''];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n        handlers = this.adapters[evt['eventType']];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport class DelegateAdapter extends Adapter {\r\n    adapter: Adapter;\r\n    callBackfunction: string;\r\n\r\n    update(evt: Event): boolean {\r\n        if (this.adapter) {\r\n            this.adapter.update(evt);\r\n            return true;\r\n        } else if (this.callBackfunction) {\r\n            return this.executeFunction(this.callBackfunction, evt);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public setAdapter(adapter: Adapter): boolean {\r\n        this.adapter = adapter;\r\n        return true;\r\n    }\r\n\r\n    private executeFunction(strValue: string, evt: Event): boolean {\r\n        let scope = window;\r\n        let scopeSplit = strValue.split('.');\r\n        for (let i = 0; i < scopeSplit.length - 1; i++) {\r\n            scope = scope[scopeSplit[i]];\r\n            if (scope === undefined) {\r\n                return false;\r\n            }\r\n        }\r\n        let fn: any = scope[scopeSplit[scopeSplit.length - 1]];\r\n        if (typeof fn === 'function') {\r\n            fn.call(scope);\r\n            return true;\r\n        } else {\r\n            window['callBack1'].update(evt);\r\n\r\n        }\r\n        return false;\r\n    }\r\n}\r\n","'use strict';\r\nimport Data from './Data';\r\n\r\nexport default class BridgeElement {\r\n    private static elementSet: BridgeElement[] = [];\r\n    public model: Data;\r\n    public id: string;\r\n    public gui: HTMLElement;\r\n\r\n    constructor(model: Data) {\r\n        this.model = model;\r\n        this.id = model.id;\r\n        BridgeElement.elementSet.push(this);\r\n    }\r\n}\r\n","import {Util} from './util';\r\n\r\n// \t\t\t\t######################################################### CSS #########################################################\r\nexport class CSS {\r\n    public css: Object;\r\n    private name: string;\r\n\r\n    constructor(name: string, item?: any) {\r\n        let i, value, border: string, prop, el;\r\n        this.name = name;\r\n        this.css = {};\r\n        if (!item) {\r\n            return;\r\n        }\r\n\r\n        el = window.getComputedStyle(item, null);\r\n        border = el.getPropertyValue('border');\r\n        for (i in el) {\r\n            prop = i;\r\n            value = el.getPropertyValue(prop);\r\n            if (value && value !== '') {\r\n                // optimize CSS\r\n                if (border) {\r\n                    if (prop === 'border-bottom' || prop === 'border-right' || prop === 'border-top' || prop === 'border-left') {\r\n                        if (value !== border) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-color' || prop === 'border-bottom-color' || prop === 'border-right-color' || prop === 'border-top-color' || prop === 'border-left-color') {\r\n                        if (border.substring(border.length - value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-width') {\r\n                        if (border.substring(0, value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else {\r\n                        this.css[prop] = value;\r\n                    }\r\n                } else {\r\n                    this.css[prop] = value;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public static getStdDef() {\r\n        let child, def = Util.create({tag: 'defs'});\r\n\r\n        child = Util.create({tag: 'filter', id: 'drop-shadow'});\r\n        child.appendChild(Util.create({tag: 'feGaussianBlur', 'in': 'SourceAlpha', result: 'blur-out', stdDeviation: 2}));\r\n        child.appendChild(Util.create({tag: 'feOffset', 'in': 'blur-out', dx: 2, dy: 2}));\r\n        child.appendChild(Util.create({tag: 'feBlend', 'in': 'SourceGraphic', mode: 'normal'}));\r\n        def.appendChild(child);\r\n        child = Util.create({tag: 'linearGradient', id: 'reflect', x1: 0, x2: 0, y1: '50%', y2: 0, spreadMethod: 'reflect'});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#aaa', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#eee', offset: '100%'}));\r\n        def.appendChild(child);\r\n\r\n        child = Util.create({tag: 'linearGradient', id: 'classelement', x1: 0, x2: '100%', y1: '100%', y2: 0});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#fff', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#d3d3d3', offset: 1}));\r\n        def.appendChild(child);\r\n\r\n        return def;\r\n    }\r\n\r\n    public static getSubstring(str: string, search: string, startChar: string, endChar: string, splitter: string): any {\r\n        let pos, end, count = 0, array = [];\r\n        pos = str.indexOf(search);\r\n        if (pos > 0) {\r\n            end = str.indexOf(startChar, pos);\r\n            pos = end + 1;\r\n            if (end > 0) {\r\n                while (end < str.length) {\r\n                    if (str.charAt(end) === startChar) {\r\n                        count += 1;\r\n                    }\r\n                    if (str.charAt(end) === endChar) {\r\n                        count -= 1;\r\n                        if (count === 0) {\r\n                            if (splitter && pos !== end) {\r\n                                array.push(str.substring(pos, end).trim());\r\n                            }\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (str.charAt(end) === splitter && count === 1) {\r\n                        array.push(str.substring(pos, end).trim());\r\n                        pos = end + 1;\r\n                    }\r\n\r\n                    end += 1;\r\n                }\r\n                if (splitter) {\r\n                    return array;\r\n                }\r\n                return str.substring(pos, end);\r\n            }\r\n            return str.substring(pos);\r\n        }\r\n        return '';\r\n    }\r\n\r\n    public static addStyle(board: SVGElement, styleName: any) {\r\n        let defs, style: any, css;\r\n        if (styleName.baseVal || styleName.baseVal === '') {\r\n            styleName = styleName.baseVal;\r\n        }\r\n        if (!styleName) {\r\n            return;\r\n        }\r\n        defs = CSS.getDefs(board);\r\n        if (defs.getElementsByTagName('style').length > 0) {\r\n            style = defs.getElementsByTagName('style')[0];\r\n        } else {\r\n            style = Util.create({tag: 'style'});\r\n            style.item = {};\r\n            defs.appendChild(style);\r\n        }\r\n        if (!style.item[styleName]) {\r\n            css = Util.getStyle(styleName);\r\n            style.item[styleName] = css;\r\n            style.innerHTML = style.innerHTML + '\\n.' + styleName + css.getSVGString(board);\r\n        }\r\n    }\r\n\r\n    public static addStyles(board: SVGElement, item: any) {\r\n        if (!item) {\r\n            return;\r\n        }\r\n        let items, i, className: any = item.className;\r\n\r\n        if (className) {\r\n            if (className.baseVal || className.baseVal === '') {\r\n                className = className.baseVal;\r\n            }\r\n        }\r\n        if (className) {\r\n            items = className.split(' ');\r\n            for (i = 0; i < items.length; i += 1) {\r\n                CSS.addStyle(board, items[i].trim());\r\n            }\r\n        }\r\n        for (i = 0; i < item.childNodes.length; i += 1) {\r\n            this.addStyles(board, item.childNodes[i]);\r\n        }\r\n    }\r\n\r\n    public static getDefs(board: SVGElement) {\r\n        let defs;\r\n        if (board.getElementsByTagName('defs').length < 1) {\r\n            defs = Util.create({tag: 'defs'});\r\n            board.insertBefore(defs, board.childNodes[0]);\r\n        } else {\r\n            defs = board.getElementsByTagName('defs')[0];\r\n        }\r\n        return defs;\r\n    }\r\n\r\n    public add(key: string, value: string) {\r\n        this.css[key] = value;\r\n    }\r\n\r\n    public get(key: string): any {\r\n        let i;\r\n        for (i in this.css) {\r\n            if (i === key) {\r\n                return this.css[key];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public getNumber(key: string) {\r\n        return parseInt((this.get(key) || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    public getSVGString(board: SVGElement) {\r\n        let str, pos, style, defs, value, filter, z;\r\n        str = '{';\r\n        for (style in this.css) {\r\n            if (!this.css.hasOwnProperty(style)) {\r\n                continue;\r\n            }\r\n            if (style === 'border') {\r\n                pos = this.css[style].indexOf(' ');\r\n                str = str + 'stroke-width: ' + this.css[style].substring(0, pos) + ';';\r\n                pos = this.css[style].indexOf(' ', pos + 1);\r\n                str = str + 'stroke:' + this.css[style].substring(pos) + ';';\r\n            } else if (style === 'background-color') {\r\n                str = str + 'fill: ' + this.css[style] + ';';\r\n            } else if (style === 'background') {\r\n                value = CSS.getSubstring(this.css[style], 'linear-gradient', '(', ')', ',');\r\n                if (value.length > 0) {\r\n                    defs = CSS.getDefs(board);\r\n                    if (value[0] === '45deg') {\r\n                        pos = 1;\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '100%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                    } else {\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '0%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                        pos = 0;\r\n                    }\r\n                    defs.appendChild(filter);\r\n                    while (pos < value.length) {\r\n                        value[pos] = value[pos].trim();\r\n                        z = value[pos].lastIndexOf(' ');\r\n                        filter.appendChild(Util.create({\r\n                            tag: 'stop',\r\n                            'offset': value[pos].substring(z + 1),\r\n                            style: {'stop-color': value[pos].substring(0, z)}\r\n                        }));\r\n                        pos += 1;\r\n                    }\r\n                    str = str + 'fill: url(#' + this.name + ');';\r\n                    continue;\r\n                }\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n                // box-shadow: inset 0 3px 4px #888;\r\n// \t\t\t\t<defs>\r\n// \t\t\t\t\t<filter id='drop-shadow'>\r\n// \t\t\t\t\t\t<feGaussianBlur in='SourceAlpha' result='blur-out' stdDeviation='2'></feGaussianBlur>\r\n// \t\t\t\t\t\t<feOffset in='blur-out' dx='2' dy='2'></feOffset>\r\n// \t\t\t\t\t\t<feBlend in='SourceGraphic' mode='normal'></feBlend>\r\n// \t\t\t\t\t</filter>\r\n// \t\t\t\t</defs>\r\n            } else {\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n            }\r\n        }\r\n        str = str + '}';\r\n        return str;\r\n    }\r\n}\r\n","import {Bridge} from './Bridge';\r\nimport Data from './Data';\r\nimport EventListener from './EventListener';\r\n\r\nexport abstract class Control {\r\n    public $owner: Control;\r\n    /**\r\n     *\r\n     */\r\n    public property: string;\r\n    public id: string;\r\n    public $view: Element;\r\n    public $viewData: Data = null;\r\n\r\n    protected $model: Data;\r\n    protected $viewListener: EventListenerOrEventListenerObject;\r\n\r\n    /**\r\n     * The properties, we want to listen to\r\n     */\r\n    // static defaultProperties: string[] = [];\r\n\r\n    // public getProperties(): string[] {\r\n    //     return this.properties;\r\n    // }\r\n\r\n    constructor() {\r\n        // e.g. this.properties.push(\"key\");\r\n        // this.properties.push(\"property\");\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data: Data = new Data();\r\n        if (oldData) {\r\n            oldData.removeListener(this);\r\n            const keys: string[] = oldData.getKeys();\r\n            for (let i = 0; i < keys.length; i++) {\r\n                let attr = keys[i];\r\n                if (this.$view) {\r\n                    if (this.$view[attr] === null) {\r\n                        continue;\r\n                    }\r\n                    data.setValue(attr, this.$view[attr]);\r\n                } else {\r\n                    data.setValue(attr, null);\r\n                }\r\n            }\r\n        }\r\n        data.addListener(this);\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     *  Set the new HTMLElement and attach listener to it.\r\n     *  Also remove Listeners from old one and return the old one, if present.\r\n     * @param element\r\n     * @returns The previous Element\r\n     */\r\n    public setView(element: Element): Element {\r\n        let oldElement: Element = null;\r\n        if (this.$view) {\r\n            oldElement = this.$view;\r\n            if (this.$viewListener) {\r\n                oldElement.removeEventListener('change', this.$viewListener);\r\n            }\r\n        }\r\n        this.$view = element;\r\n\r\n        if (this.$viewListener) {\r\n            element.addEventListener('change', this.$viewListener);\r\n        }\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n        return element;\r\n    }\r\n\r\n    public init(owner: Control, property ?: string, id ?: string): Control {\r\n        if (!this.$owner) {\r\n            this.$owner = owner;\r\n        }\r\n        if (!this.id) {\r\n            this.id = id;\r\n        }\r\n        if (!this.property) {\r\n            this.property = this.generateID(property, id);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public createEventListener(): EventListener {\r\n        return new EventListener();\r\n    }\r\n\r\n    public getRoot(): Control {\r\n        if (this.$owner) {\r\n            return this.$owner.getRoot();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return null;\r\n    }\r\n\r\n    public initControl(data: any): void {\r\n        if (this.$view === null || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (data.hasOwnProperty('prop')) {\r\n            for (let key in data.prop) {\r\n                let oldValue = this.$viewData.getValue(key);\r\n                if (this.$view) {\r\n                    this.updateElement(key, oldValue, data.prop[key]);\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        let hasRem = data.hasOwnProperty('rem');\r\n        let removed: any[] = [];\r\n        if (data.hasOwnProperty('upd')) {\r\n            for (let key in data.upd) {\r\n                let oldValue;\r\n                let newValue = data.upd[key];\r\n                let entity;\r\n                const temp = false;\r\n                if (temp) {\r\n//                if (newValue == this.getViewData().getValue(key)) {\r\n                    // new Value assertEquals old value, so we don't need to change anything..\r\n                    // delete data.rem[key];\r\n                    if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                        removed.push(data.rem[key]);\r\n                    }\r\n                    continue;\r\n                }\r\n                if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                    // if there's a rem, the oldValue from rem will be used and expected to be right..\r\n                    oldValue = data.rem[key];\r\n                    if (this.$model && this.$model.getValue(key) === oldValue) {\r\n                        entity = this.$model;\r\n//                    } else if (oldValue == this.getViewData().getValue(key)) {\r\n//                        $graphModel = this.getViewData();\r\n                    }\r\n                    delete data.rem[key];\r\n\r\n                    if (entity === null) {\r\n                        continue;\r\n                    }\r\n                }\r\n                if (entity) {\r\n                    if (!hasRem) {\r\n                        if (entity === this.$model) {\r\n                            oldValue = this.$model.getValue(key);\r\n                        } else {\r\n//                           oldValue = this.getViewData().getValue(key);\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (this.$model) {\r\n                        // try to get the oldValue directly from the $graphModel...\r\n                        oldValue = this.$model.getValue(key);\r\n                        entity = this.$model;\r\n                    }\r\n                    if (oldValue === null) {\r\n                        // if there was no data in the entity, we try to get oldValue from the $view\r\n//                        oldValue = this.getViewData().getValue(key);\r\n//                        entity = this.getViewData();\r\n                    }\r\n                }\r\n\r\n                //  || oldValue !== this.$viewData.getValue(key)\r\n                if (newValue === oldValue) {\r\n                    // no match, so update should be wrong...\r\n                    continue;\r\n                }\r\n                const viewDataOldValue = this.$viewData.getValue(key);\r\n                if (entity === this.$viewData) {\r\n\r\n                    // this.getViewData().setValue(key, newValue);\r\n                    if (this.$view) {\r\n                        this.updateElement(key, viewDataOldValue, newValue);\r\n                    }\r\n                } else {\r\n                    this.updateElement(key, viewDataOldValue, newValue);\r\n                }\r\n                this.getRoot().setValue(entity, key, newValue, oldValue);\r\n            }\r\n            // this.saveViewInData();\r\n        }\r\n        if (hasRem) {\r\n            for (let key in data.rem) {\r\n                if (removed.hasOwnProperty(key)) {\r\n                    continue;\r\n                }\r\n                let oldValue;\r\n//                    this.getViewData().getValue(key);\r\n//                if (oldValue != data.rem[key] || data.upd !== undefined && (data.upd[key] == oldValue || this.getViewData().getValue(key) == data.upd[key])) {\r\n                // if rem is invalid, or if the change is already applied, don't do anything..\r\n                //                  continue;\r\n                //            }\r\n                // delete this.$viewData.getValue(key);\r\n                // this.saveViewInData();\r\n                this.updateElement(key, null, null);\r\n                // this.$view.removeAttribute(key);\r\n                if (this.$model) {\r\n//                    this.getRoot().setValue(this.$graphModel, key, this.getViewData().getValue(key), oldValue);\r\n                }\r\n            }\r\n        }\r\n        if (this.property) {\r\n            // Add listener to Input field:\r\n            this.$view['onchange'] = ((ev: Event) => {\r\n                    this.controlChanged(ev);\r\n                }\r\n            );\r\n        }\r\n//        this.saveViewInData();\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        return null;\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n        return false;\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return new Object();\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue ?: Object): boolean {\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Is called when a object, that the Control is listening to, changes its value.\r\n     * @param entity\r\n     * @param property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        if (oldValue === newValue || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (oldValue === this.$viewData.getValue(property)) {\r\n            return;\r\n        }\r\n        // Set NewData to ViewData and Fire PC\r\n        this.$viewData.setValue(property, newValue);\r\n\r\n//\r\n//\r\n//         // if (entity == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.entity) {\r\n//                 alert(\"entity = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.entity.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.entity, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the entity is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"entity = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n// >>>>>>> addOldFunctions\r\n        if (this.$viewData) {\r\n            this.$viewData.setValue(property, newValue);\r\n        }\r\n        if (this.$model) {\r\n            this.$model.setValue(property, newValue);\r\n        }\r\n        this.updateElement(property, oldValue, newValue);\r\n    }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            // Do Nothing\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  Update GUI Element\r\n     * @param {string} property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        if (this.$view && this.$view.hasAttribute(property)) {\r\n            this.$view.setAttribute(property, newValue);\r\n        }\r\n    }\r\n\r\n//        if (oldValue == newValue) {\r\n//            return;\r\n//        }\r\n//        if (oldValue == this.$viewData.getValue(property)) {\r\n//            return;\r\n//        }\r\n//        // Set NewData to ViewData and Fire PC\r\n//        this.$viewData.setValue(property, newValue);\r\n//\r\n//\r\n//\r\n//         // if ($graphModel == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.$graphModel) {\r\n//                 alert(\"$graphModel = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.$graphModel.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.$graphModel, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the $graphModel is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"$graphModel = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n\r\n    public getId(): string {\r\n        return this.id;\r\n    }\r\n\r\n    public load(json: JSON | Object, owner ?: Control): any {\r\n        // Do Nothing\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.property || entity.hasProperty(this.property)) {\r\n                entity.addListener(this, this.property);\r\n                this.$model = entity;\r\n            }\r\n        }\r\n    }\r\n\r\n    public appendChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.appendChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].appendChild(child.$view);\r\n        }\r\n    }\r\n\r\n    public removeChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.removeChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].removeChild(child.$view);\r\n        }\r\n    }\r\n\r\n    /*\r\n     Property looks like: 't1.talk'\r\n     */\r\n    public setProperty(property: string): void {\r\n        if (!this.property) {\r\n            return;\r\n        }\r\n        let objId = property.split('.')[0];\r\n        let object = null;\r\n        if (this.$owner.hasItem(objId)) {\r\n            object = this.$owner.getItem(objId);\r\n        }\r\n\r\n        // remove listener on old object\r\n        if (this.$model) {\r\n            // this.$graphModel.removeListener(this);\r\n            this.$model.removeListener(this, this.lastProperty);\r\n        }\r\n        this.property = property;\r\n\r\n        // add listener to object..\r\n        if (object) {\r\n            object.addListener(this, this.lastProperty);\r\n            this.$model = object;\r\n            this.updateElement(this.lastProperty, this.$viewData.getValue(this.lastProperty), object.prop[this.lastProperty]);\r\n        }\r\n    }\r\n\r\n    public registerListenerOnHTMLObject(eventType: string): boolean {\r\n        return this.registerEventListener(eventType, <HTMLElement>this.$view);\r\n    }\r\n\r\n    // Normal Event HTML-Event\r\n    // Eventtype:string,\r\n    // id:string of Control\r\n    public fireEvent(evt: Event): void {\r\n        // Do Nothing\r\n    }\r\n\r\n    public isClosed(): boolean {\r\n        return this['closed'];\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        if (this.isClosed()) {\r\n            return this.$owner.getShowed();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * the id of the Data object, that contains the properties of the view\r\n     * @returns {string}\r\n     */\r\n    protected getControlDataID() {\r\n        return this.id + '_data';\r\n    }\r\n\r\n    protected generateID(property ?: string, id ?: string): string {\r\n        if (property) {\r\n            return property;\r\n        }\r\n        if (id) {\r\n            // will generate a data Object suitable for the Control..\r\n            // must be overridden, if the changeEvent shouldn't listen on value...\r\n//            return id + '.' + this.getStandardProperty();//+ \"_data\"\r\n            return id + '.' + '_data';\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected updateViewData() {\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n        const keys: string[] = this.$viewData.getKeys();\r\n        for (let i = 0; i < keys.length; i++) {\r\n            let attr = keys[i];\r\n            if (this.$view[attr] === null) {\r\n                continue;\r\n            }\r\n            this.$viewData.setValue(attr, this.$view[attr]);\r\n        }\r\n    }\r\n\r\n    protected registerEventListener(eventType: string, htmlElement: HTMLElement): boolean {\r\n        if (!htmlElement) {\r\n            return false;\r\n        }\r\n        if (htmlElement instanceof HTMLElement === false) {\r\n            return false;\r\n        }\r\n        let control = this;\r\n        let listener = (t: any) => {\r\n            t.eventType = eventType;\r\n            t.id = control.id;\r\n            control.$owner.fireEvent(t);\r\n        };\r\n        htmlElement.addEventListener(eventType, listener);\r\n        return true;\r\n    }\r\n\r\n    get lastProperty(): string {\r\n        if (!this.property) {\r\n            return '';\r\n        }\r\n        let arr: string[] = this.property.split('.');\r\n        return arr[arr.length - 1];\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\n\r\nexport default class Data {\r\n    public prop = {};\r\n    id: string;\r\n    // $listener: Control[] = [];\r\n    $listener: Object = {};\r\n\r\n    private static nullCheck(property: string): string {\r\n        if (property === undefined || property === null) {\r\n            property = '';\r\n        }\r\n        return property;\r\n    }\r\n    public getKeys(): string[] {\r\n        return Object.keys(this.prop);\r\n    }\r\n\r\n    public addProperties(values: Object) {\r\n        if (!values) {\r\n            return;\r\n        }\r\n        if (values['prop']) {\r\n            let prop = values['prop'];\r\n            for (let property in prop) {\r\n                if (prop.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (prop[property] !== null && '' !== prop[property]) {\r\n                    this.setValue(property, prop[property]);\r\n                }\r\n            }\r\n        } else {\r\n            let upd = values['upd'] || {};\r\n            let rem = values['rem'] || {};\r\n\r\n            for (let property in upd) {\r\n                if (upd.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (rem.hasOwnProperty(property) === false) {\r\n                    this.setValue(property, upd[property]);\r\n                } else {\r\n                    // if we have a rem, we wan't to check, if its a valid change (teh old value is the value in rem)\r\n                    if (this.getValue(property) === rem[property]) {\r\n                        this.setValue(property, upd[property]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getValue(attribute: string) {\r\n        return this.prop[attribute];\r\n    }\r\n\r\n    public setValue(attribute: string, newValue: any): void {\r\n        let oldValue = this.prop[attribute];\r\n        if (oldValue === newValue && newValue !== null) {\r\n            return;\r\n        }\r\n        this.prop[attribute] = newValue;\r\n        this.firePropertyChange(attribute, oldValue, newValue);\r\n    }\r\n\r\n    public addTo(attribute: string, newValue: any): boolean {\r\n        let add: boolean;\r\n        if (this.prop[attribute]) {\r\n            if (this.prop[attribute].contains(newValue) === false) {\r\n                add = true;\r\n            }\r\n        } else {\r\n            this.prop[attribute] = [];\r\n            add = true;\r\n        }\r\n        if (add) {\r\n            this.prop[attribute].push(newValue);\r\n            this.firePropertyChange(attribute, null, newValue);\r\n        }\r\n        return add;\r\n    }\r\n\r\n    public removeFrom(attribute: string, newValue: any): boolean {\r\n        if (!this.prop[attribute]) {\r\n            return true;\r\n        }\r\n        let pos: number = this.prop[attribute].indexOf(newValue);\r\n        if (pos < 0) {\r\n            return true;\r\n        }\r\n        this.prop[attribute].splice(pos, 1);\r\n        this.firePropertyChange(attribute, newValue, null);\r\n        return true;\r\n    }\r\n\r\n    public addListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(property);\r\n        if (!listeners) {\r\n            listeners = [];\r\n            this.$listener[Data.nullCheck(property)] = listeners;\r\n        }\r\n        listeners.push(control);\r\n    }\r\n\r\n    public removeListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners = this.getListeners(property);\r\n        if (listeners === null) {\r\n            return;\r\n        }\r\n        let pos = listeners.indexOf(control);\r\n        if (pos >= 0) {\r\n            listeners.splice(pos, 1);\r\n        }\r\n        if (listeners.length === 0 && Data.nullCheck(property) !== '') {\r\n            // only remove, if it's not the default listener list...\r\n            delete this.$listener[property];\r\n        }\r\n    }\r\n\r\n    public hasProperty(property: string): boolean {\r\n        return this.prop.hasOwnProperty(property);\r\n    }\r\n\r\n    public addFrom(attribute: string, oldData: Data): void {\r\n        if (oldData) {\r\n            this.setValue(attribute, oldData.getValue(attribute));\r\n        } else {\r\n            this.setValue(attribute, null);\r\n        }\r\n    }\r\n\r\n    public removeKey(key: string): any {\r\n        if (this.hasProperty(key)) {\r\n            const oldValue = this.prop[key];\r\n            delete this.prop[key];\r\n            return oldValue;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected getListeners(property: string): PropertyChangeSupport[] {\r\n        property = Data.nullCheck(property);\r\n        return this.$listener[property];\r\n    }\r\n\r\n    protected firePropertyChange(attribute: string, oldValue: Object, newValue: Object) {\r\n        attribute = Data.nullCheck(attribute);\r\n        // at first fire for the given property\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(attribute);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n        // now we need to fire the Listeners that wan't to listen to everything\r\n        listeners = this.getListeners(null);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport interface EventHandler {\r\n    canHandle(): boolean;\r\n    handle(event: Event, element: DiagramElement): boolean;\r\n    setActive(active: boolean): void;\r\n}\r\n\r\nexport class EventBus {\r\n    public static CREATE: string = 'Create';\r\n    public static EDITOR: string = 'Editor';\r\n    public static OPENPROPERTIES: string = 'openProperties';\r\n    public static RELOADPROPERTIES: string = 'reloadProperties';\r\n    public static ELEMENTMOUSEDOWN: string = 'ELEMENT:MOUSEDOWN';\r\n    public static ELEMENTMOUSEUP: string = 'ELEMENT:MOUSEUP';\r\n    public static ELEMENTMOUSELEAVE: string = 'ELEMENT:MOUSELEAVE';\r\n    public static ELEMENTMOUSEMOVE: string = 'ELEMENT:MOUSEMOVE';\r\n    public static ELEMENTMOUSEWHEEL: string = 'ELEMENT:MOUSEWHEEL';\r\n    public static ELEMENTCLICK: string = 'ELEMENT:CLICK';\r\n    public static ELEMENTDBLCLICK: string = 'ELEMENT:DBLCLICK';\r\n    public static ELEMENTDRAG: string = 'ELEMENT:DRAG';\r\n    public static ELEMENTDRAGOVER: string = 'ELEMENT:DRAGOVER';\r\n    public static ELEMENTDROP: string = 'ELEMENT:DROP';\r\n    public static ELEMENTDRAGLEAVE: string = 'ELEMENT:DRAGLEAVE';\r\n\r\n    public static EVENTS: string[] = [\r\n        EventBus.CREATE,\r\n        EventBus.EDITOR,\r\n        EventBus.OPENPROPERTIES,\r\n        EventBus.RELOADPROPERTIES,\r\n        EventBus.ELEMENTMOUSEDOWN,\r\n        EventBus.ELEMENTMOUSEUP,\r\n        EventBus.ELEMENTMOUSELEAVE,\r\n        EventBus.ELEMENTMOUSEMOVE,\r\n        EventBus.ELEMENTMOUSEWHEEL,\r\n        EventBus.ELEMENTCLICK,\r\n        EventBus.ELEMENTDRAG,\r\n        EventBus.ELEMENTDBLCLICK,\r\n        EventBus.ELEMENTDRAGOVER,\r\n        EventBus.ELEMENTDROP,\r\n        EventBus.ELEMENTDRAGLEAVE,\r\n    ];\r\n\r\n    private static handlers = {};\r\n\r\n    private static $activeHandler: string = '';\r\n\r\n    public static setActiveHandler(handler: string): void {\r\n        this.$activeHandler = handler;\r\n    }\r\n\r\n    public static isHandlerActiveOrFree(handler: string, notEmpty?: boolean): boolean {\r\n        if (notEmpty) {\r\n            return this.$activeHandler === handler;\r\n        }\r\n        return this.$activeHandler === handler || this.$activeHandler === '' || this.$activeHandler === undefined;\r\n    }\r\n\r\n    public static isAnyHandlerActive(): boolean {\r\n        return !(this.$activeHandler === '' || this.$activeHandler === undefined);\r\n    }\r\n\r\n    public static releaseActiveHandler(): void {\r\n        this.$activeHandler = '';\r\n    }\r\n\r\n    public static getActiveHandler(): string {\r\n        return this.$activeHandler;\r\n    }\r\n\r\n    static register(control: Control, view: Element) {\r\n        let events: string[];\r\n        if (typeof control['getEvents'] === 'function') {\r\n            events = control['getEvents']();\r\n        }\r\n\r\n        if (!events || !view) {\r\n            return;\r\n        }\r\n        for (let event of events) {\r\n            this.registerEvent(view, event, control);\r\n        }\r\n    }\r\n\r\n    static registerEvent(view: Element, event: string, control?: any) {\r\n        const pos: number = event.indexOf(':');\r\n        if (pos > 0) {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        } else {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        }\r\n    }\r\n\r\n    public static publish(element: DiagramElement, evt: Event) {\r\n        let handlers = EventBus.handlers[evt.type];\r\n        if (handlers) {\r\n            for (let handler of handlers) {\r\n                handler.handle(evt, element);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static subscribe(handler: EventHandler, ...eventTypes: string[]) {\r\n        for (let event of eventTypes) {\r\n            let handlers = EventBus.handlers[event];\r\n            if (handlers === null || handlers === undefined) {\r\n                handlers = [];\r\n                EventBus.handlers[event] = handlers;\r\n            }\r\n            handlers.push(handler);\r\n        }\r\n    }\r\n}\r\n","import SimpleEvent from './Event';\r\n\r\nexport default class EventListener {\r\n    private $onUpdate: Function;\r\n\r\n    get onUpdate(): Function {\r\n        return this.$onUpdate;\r\n    }\r\n\r\n    set onUpdate(value: Function) {\r\n        this.$onUpdate = value;\r\n    }\r\n\r\n    update(event: SimpleEvent) {\r\n        this.$onUpdate(event);\r\n    }\r\n}\r\n","// ################################## jsEPS ####################################################\r\nimport {SVGConverter} from './SVGConverter';\r\n\r\nexport class JSEPS {\r\n    private max: number;\r\n    private min: number;\r\n    private inverting: boolean;\r\n    private output: string[];\r\n    private font: number;\r\n\r\n    constructor(options: any) {\r\n        this.max = 0;\r\n        this.min = 999;\r\n        let hasInverting = typeof (options.inverting);\r\n        this.inverting = (options && hasInverting !== 'undefined' ? options.inverting : true);\r\n        this.output = ['%!PS-Adobe-3.0 EPSF-3.0', '1 setlinewidth'];\r\n        this.out('/FSD {findfont exch scalefont def} bind def % In the document prolog: define');\r\n        this.out('/SMS {setfont moveto show} bind def % some useful procedures');\r\n        this.out('/MS {moveto show} bind def');\r\n        this.out('/F1  10  /Helvetica  FSD % At the start of the script: set up');\r\n        this.font = 1;\r\n    }\r\n\r\n    public out(value: string) {this.output.push(value); }\r\n    public rect(x: number, y: number, width: number, height: number, style: string) {\r\n        y = y + (this.inverting ? height : 0);\r\n        if (style && style.indexOf('fill:url(#classelement);') >= 0) {\r\n            this.out('gsave 0.93 0.93 0.93 setrgbcolor newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectfill grestore');\r\n        } else {\r\n            this.out('newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectstroke');\r\n        }\r\n    }\r\n    public setFillColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public y(value: number) {this.max = Math.max(this.max, value); this.min = Math.min(this.min, value); return this.inverting ? '%y(' + value + ')' : value; }\r\n    public getType(): string {\r\n        return 'application/postscript';\r\n    }\r\n\r\n    public getData(): string {\r\n        let t, end, url, text, typ = 'application/postscript', a = document.createElement('a'), data = '', pos, i;\r\n        for (i = 0; i < this.output.length; i += 1) {\r\n            text = this.output[i];\r\n            if (this.inverting) {\r\n                while ((pos = text.indexOf('%y')) >= 0) {\r\n                    end = text.indexOf(')', pos);\r\n                    t = this.max - parseInt(text.substring(pos + 3, end), 10);\r\n                    text = text.substring(0, pos) + t + text.substring(end + 1);\r\n                }\r\n            }\r\n            data = data + text + '\\r\\n';\r\n        }\r\n        return data;\r\n    }\r\n\r\n    public setDrawColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public ellipse(cx: number, cy: number, rx: number, ry: number, colorMode: string) {/*FIXME*/}\r\n    public circle(cx: number, cy: number, r: number, colorMode: string) {/*FIXME*/}\r\n    public setTextColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public text(x: number, y: number, text: string) {this.out('(' + text.replace('&lt;', '<').replace('&gt;', '>') + ') ' + x + ' ' + this.y(y) + ' F1 SMS'); }\r\n    public lineto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' lineto'); this.out('stroke'); }\r\n    public moveto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' moveto'); }\r\n    public line(x1: number, y1: number, x2: number, y2: number) {this.out('newpath ' + x1 + ' ' + this.y(y1) + ' moveto ' + x2 + ' ' + this.y(y2) + ' lineto stroke'); }\r\n    public setLineWidth(value: string) {this.out(value + ' setlinewidth'); }\r\n    public setFont(value: string) {this.out('/F' + (this.font += 1) + ' 10 /' + value + ' FSD'); }\r\n}\r\n","import { Graph } from './elements/Graph';\r\n\r\n/*const buttons = {\r\n    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    clazz: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n};\r\n*/\r\nexport default class Palette {\r\n\r\n    private graph: Graph;\r\n    private palette: Element;\r\n    private root: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n        let div = document.createElement('div');\r\n        div.className = 'palette';\r\n        div.id = 'palette';\r\n        this.root = div;\r\n        this.palette = div;\r\n        for (let key in graph.nodeFactory) {\r\n            let element = graph.nodeFactory[key];\r\n            let control = new element();\r\n            let icon = control.getToolBarIcon();\r\n            if (icon) {\r\n                let button = <HTMLButtonElement>document.createElement('button');\r\n                button.className = 'add' + key + 'Btn';\r\n                button.innerHTML = icon.outerHTML;\r\n                button.onclick = e => {\r\n                    let nextFreePosition = this.graph.getNextFreePosition();\r\n                    // let node = this.graph.addElementWithValues(graph.nodeFactory[key], {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    let node = this.graph.addElementWithValues(key, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    this.graph.drawElement(node);\r\n                };\r\n                this.palette.appendChild(button);\r\n            }\r\n        }\r\n        // this.graph.nodeFactory\r\n//        this.addButtons();\r\n    }\r\n\r\n    public show() {\r\n        document.body.appendChild(this.root);\r\n    }\r\n\r\n    private addButtons() {\r\n        /*for (let btn in buttons) {\r\n            let button = <HTMLButtonElement>document.createElement('button');\r\n            button.className = 'add' + btn + 'Btn';\r\n            button.innerHTML = buttons[btn];\r\n            button.onclick = e => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let node = this.graph.addElementWithValues(btn, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                this.graph.drawElement(node);\r\n            };\r\n            this.palette.appendChild(button);\r\n        }*/\r\n    }\r\n}\r\n","import {Graph} from './elements/Graph';\r\nimport * as edges from './elements/edges';\r\nimport {EventBus, EventHandler} from './EventBus';\r\nimport {DiagramElement} from './elements/BaseElements';\r\nimport {Util} from './util';\r\n\r\nexport class PanelGroup implements EventHandler {\r\n    private graph: Graph;\r\n    private selectedElement: DiagramElement;\r\n    private clearPanel: Panel;\r\n    private generatePanel: Panel;\r\n    private propertiesMasterPanel: HTMLDivElement;\r\n    private propertiesContent: HTMLDivElement;\r\n    private propHeaderLabel: HTMLDivElement;\r\n    private propHeaderButton: HTMLButtonElement;\r\n    private selectedPanel: Panel;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.clearPanel = new ClearPanel(this);\r\n        this.generatePanel = new GeneratePanel(this);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        this.handleOpenProperties(event, element);\r\n\r\n        if (event.type === EventBus.RELOADPROPERTIES\r\n            && this.selectedElement && element.id === this.selectedElement.id) {\r\n            this.handleEvent(event, element);\r\n        }\r\n\r\n        // the same element was clicked. do nothing\r\n        if (this.selectedElement && this.selectedElement.id === element.id) {\r\n            return true;\r\n        }\r\n        if (element.id === 'RootElement') {\r\n            this.setActivePanel(this.clearPanel);\r\n        }\r\n        if (element.id === 'GenerateProp') {\r\n            this.setActivePanel(this.generatePanel);\r\n        }\r\n        this.selectedElement = element;\r\n\r\n        return true;\r\n    }\r\n\r\n    public getGraph(): Graph {\r\n        return this.graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(PanelGroup.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(PanelGroup.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n     public handleEvent(event: any, element: any) {\r\n        // DO NOTHING\r\n    }\r\n\r\n    public show() {\r\n        // main div to display any properties, class, edge, etc.\r\n        this.propertiesMasterPanel = document.createElement('div');\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n\r\n        this.propertiesContent = document.createElement('div');\r\n        this.propertiesContent.className = 'properties-hidden';\r\n\r\n        this.propHeaderLabel = document.createElement('div');\r\n        this.propHeaderLabel.style.display = 'inherit';\r\n        this.propHeaderLabel.style.cursor = 'pointer';\r\n        this.propHeaderLabel.onclick = e => this.toogleProperties(e);\r\n\r\n        // button to display and hide the properties of e.g. a class\r\n        this.propHeaderButton = document.createElement('button');\r\n        this.propHeaderButton.className = 'btnHideProp';\r\n        this.propHeaderButton.style.cssFloat = 'right';\r\n        this.propHeaderButton.onclick = e => this.toogleProperties(e);\r\n\r\n        let propertiesHeader = document.createElement('div');\r\n        propertiesHeader.style.display = 'inline';\r\n        propertiesHeader.appendChild(this.propHeaderLabel);\r\n        propertiesHeader.appendChild(this.propHeaderButton);\r\n\r\n        this.propertiesMasterPanel.appendChild(propertiesHeader);\r\n        this.propertiesMasterPanel.appendChild(this.propertiesContent);\r\n        document.body.appendChild(this.propertiesMasterPanel);\r\n\r\n        this.setActivePanel(this.clearPanel);\r\n    }\r\n\r\n    public setActivePanel(panel: Panel) {\r\n        this.selectedPanel = panel;\r\n        this.propHeaderLabel.innerHTML = panel.getHeaderText();\r\n        if (this.propertiesContent) {\r\n            while (this.propertiesContent.hasChildNodes()) {\r\n                this.propertiesContent.removeChild(this.propertiesContent.childNodes[0]);\r\n            }\r\n        }\r\n        panel.show();\r\n\r\n        panel.showFirstTab();\r\n        if (panel !== this.clearPanel) {\r\n            this.showProperties(null);\r\n        } else {\r\n            this.hideProperties(null);\r\n        }\r\n    }\r\n\r\n    public getProperiesContent(): HTMLDivElement {\r\n        return this.propertiesContent;\r\n    }\r\n\r\n    private handleOpenProperties(event: Event, element: DiagramElement) {\r\n        if (event.type === 'dblclick') {\r\n            this.showProperties(event);\r\n        }\r\n    }\r\n\r\n    private showProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Show\r\n        this.propHeaderButton.innerHTML = '&#8897;';\r\n        this.propHeaderButton.title = 'Hide properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel';\r\n        this.propertiesContent.className = 'properties';\r\n    }\r\n\r\n    private toogleProperties(evt: Event): void {\r\n        if (this.propHeaderButton.title === 'Show properties') {\r\n            this.showProperties(evt);\r\n        } else {\r\n            this.hideProperties(evt);\r\n        }\r\n    }\r\n\r\n    private hideProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Hide\r\n        this.propHeaderButton.innerHTML = '&#8896;';\r\n        this.propHeaderButton.title = 'Show properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n        this.propertiesContent.className = 'properties-hidden';\r\n    }\r\n}\r\n\r\nexport abstract class Panel {\r\n    protected divPropertiesPanel: HTMLDivElement;\r\n    protected divPropertiesTabbedPanel: HTMLDivElement;\r\n    protected element: any;\r\n    protected group: PanelGroup;\r\n    private panelItem: PanelItem[] = [];\r\n\r\n    constructor(group: PanelGroup, element: any) {\r\n        // get the properties content panel\r\n        this.divPropertiesPanel = document.createElement('div');\r\n        this.element = element;\r\n        this.group = group;\r\n\r\n        this.divPropertiesTabbedPanel = document.createElement('div');\r\n        this.divPropertiesTabbedPanel.className = 'tabbedpane';\r\n\r\n        // add tabbed panel\r\n        this.divPropertiesPanel.appendChild(this.divPropertiesTabbedPanel);\r\n    }\r\n\r\n    public show(): void {\r\n        let propertiesContent: HTMLDivElement = this.group.getProperiesContent();\r\n        if (this.panelItem.length > 1) {\r\n            propertiesContent.appendChild(this.getPropertiesTabbedPanel());\r\n        }\r\n\r\n        propertiesContent.appendChild(this.getPropertiesPanel());\r\n    }\r\n\r\n    public getPropertiesTabbedPanel(): HTMLDivElement {\r\n        return this.divPropertiesTabbedPanel;\r\n    }\r\n\r\n    public getPropertiesPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return '';\r\n    }\r\n\r\n    public showFirstTab(): void {\r\n        if (this.panelItem.length > 0) {\r\n            this.openTab(this.panelItem[0]);\r\n        }\r\n    }\r\n\r\n    protected createTabElement(tabText: string, tabValue: string, item: PanelItem): PanelItem {\r\n        let tabElementBtn = document.createElement('button');\r\n        tabElementBtn.className = 'tablinks';\r\n        tabElementBtn.innerText = tabText;\r\n        tabElementBtn.value = tabValue;\r\n\r\n        if (item === null) {\r\n            item = new PanelItem(this);\r\n        }\r\n        item.withButton(tabElementBtn);\r\n\r\n        tabElementBtn.onclick = () => this.openTab(item);\r\n        this.divPropertiesTabbedPanel.appendChild(tabElementBtn);\r\n        this.panelItem.push(item);\r\n        return item;\r\n    }\r\n\r\n    protected openTab(panelItem: PanelItem): void {\r\n        for (let key in this.panelItem) {\r\n            let child = this.panelItem[key];\r\n            if (child !== panelItem) {\r\n                 child.deactive();\r\n            }\r\n        }\r\n        panelItem.active();\r\n        // hide other tabcontent\r\n        if (this.divPropertiesPanel) {\r\n            while (this.divPropertiesPanel.hasChildNodes()) {\r\n                this.divPropertiesPanel.removeChild(this.divPropertiesPanel.childNodes[0]);\r\n            }\r\n        }\r\n\r\n        // ADD\r\n        if (panelItem.getContent()) {\r\n            this.divPropertiesPanel.appendChild(panelItem.getContent());\r\n        }\r\n    }\r\n}\r\n\r\nexport class GeneratePanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n\r\n        let item: PanelItem = this.createTabElement('General', 'General', null);\r\n\r\n        // Workspace and generate code stuff\r\n        let inputGenerateWorkspace: HTMLInputElement =  <HTMLInputElement> Util.createHTML({tag: 'input', id: 'workspace', type: 'text', placeholder: 'Type your Folder for generated code...', value: 'src/main/java', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Folder:', inputGenerateWorkspace);\r\n\r\n        let inputGeneratePackage: HTMLInputElement = <HTMLInputElement> Util.createHTML({tag: 'input', id: 'package', type: 'text', placeholder: 'Type your workspace for generated code...', value: '', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Package:', inputGeneratePackage);\r\n\r\n        let options = document.createElement('div');\r\n        options.style.textAlign = 'center';\r\n        options.style.margin = '3';\r\n        options.style.padding = '5';\r\n\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(options);\r\n\r\n        options.style.borderStyle = 'groove';\r\n        options.style.borderRadius = '10px';\r\n\r\n        let btnGenerate = document.createElement('button');\r\n        btnGenerate.textContent = 'Generate';\r\n        btnGenerate.title = 'Generate code into your workspace';\r\n        btnGenerate.className = 'OptionElement';\r\n\r\n        let that = this;\r\n        btnGenerate.onclick = () => {\r\n            let workspace = inputGeneratePackage.value;\r\n            if (workspace.length === 0) {\r\n                alert('No workspace set.\\nEnter first your workspace');\r\n                inputGeneratePackage.focus();\r\n                return;\r\n            }\r\n            that.group.getGraph().generate(workspace, inputGenerateWorkspace.value);\r\n        };\r\n        options.appendChild(btnGenerate);\r\n        options.appendChild(document.createElement('hr'));\r\n        options.appendChild(document.createElement('br'));\r\n\r\n        let btnAutoLayout = Util.createHTML({tag: 'button', className: 'OptionElement', value: 'Auto Layout', style: {marginRight: '10px'}, onclick: () => {\r\n                that.group.getGraph().layout();\r\n            }});\r\n\r\n        options.appendChild(btnAutoLayout);\r\n\r\n        // delete all nodes\r\n        let btnDeleteAll = document.createElement('button');\r\n        btnDeleteAll.className = 'OptionElement';\r\n        btnDeleteAll.textContent = 'Delete All';\r\n        btnDeleteAll.title = 'Delete all nodes from diagram';\r\n\r\n        btnDeleteAll.onclick = () => {\r\n            let confirmDelete = confirm('All classes will be deleted!');\r\n            if (!confirmDelete) {\r\n                return;\r\n            }\r\n            that.group.getGraph().$graphModel.removeAllElements();\r\n        };\r\n        btnDeleteAll.style.marginRight = '10px';\r\n        options.appendChild(btnDeleteAll);\r\n\r\n        // export stuff\r\n        let exportTypes: string[] = ['Export', 'HTML', 'JSON', 'PDF', 'PNG', 'SVG'];\r\n        let selectExport = document.createElement('select');\r\n\r\n        exportTypes.forEach(type => {\r\n            if (!(!window['jsPDF'] && type === 'PDF')) {\r\n                let option = document.createElement('option');\r\n                option.value = type;\r\n                option.textContent = type;\r\n                selectExport.appendChild(option);\r\n            }\r\n        });\r\n\r\n        selectExport.onchange = (evt) => {\r\n            let selectedExportType = selectExport.options[selectExport.selectedIndex].value;\r\n            selectExport.selectedIndex = 0;\r\n            that.group.getGraph().saveAs(selectedExportType);\r\n        };\r\n        selectExport.className = 'OptionElement';\r\n        options.appendChild(selectExport);\r\n        options.appendChild(document.createElement('br'));\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Properties';\r\n    }\r\n\r\n}\r\n\r\nexport class ClearPanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Select any element to see its properties';\r\n    }\r\n}\r\n\r\nexport class PanelItem {\r\n    protected panel: Panel;\r\n    protected label: string;\r\n    protected button: HTMLButtonElement;\r\n    protected content: HTMLDivElement = <HTMLDivElement>Util.create({tag: 'div', className: 'tabContent'});\r\n\r\n    constructor(panel: Panel, label?: string) {\r\n        this.panel = panel;\r\n        this.label = label;\r\n    }\r\n\r\n    public active(): void {\r\n        if (this.getButton()) {\r\n            this.getButton().className += ' active';\r\n        }\r\n    }\r\n\r\n    public deactive(): void {\r\n        if (this.getButton()) {\r\n            Util.removeClass(this.getButton(), 'active');\r\n        }\r\n    }\r\n\r\n    public withButton(button: HTMLButtonElement): PanelItem {\r\n        this.button = button;\r\n        return this;\r\n    }\r\n\r\n    public withContent(element: HTMLElement): PanelItem {\r\n        this.content.appendChild(element);\r\n        return this;\r\n    }\r\n\r\n    public withInput(labelText: string, element: HTMLElement): PanelItem {\r\n        let group: HTMLDivElement = <HTMLDivElement> Util.createHTML({tag: 'div'});\r\n        let label = Util.createHTML({tag: 'label', for: element.id, value: labelText});\r\n        group.appendChild(label);\r\n        group.appendChild(element);\r\n\r\n        this.content.appendChild(group);\r\n        return this;\r\n    }\r\n\r\n    public getButton(): HTMLButtonElement {\r\n        return this.button;\r\n    }\r\n\r\n    public getContent(): HTMLDivElement {\r\n        return this.content;\r\n    }\r\n\r\n   public getHeader(): string {\r\n        return this.label;\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\nimport Data from './Data';\r\n\r\nexport class PropertyBinder implements PropertyChangeSupport {\r\n    private propertyClass1: string;\r\n    private propertyClass2: string;\r\n    private data1: Data;\r\n    private data2: Data;\r\n    // works like a lock\r\n    private applyingChange: boolean = false;\r\n\r\n    constructor(data1: Data, data2: Data, propertyClass1: string, propertyClass2: string) {\r\n        this.data1 = data1;\r\n        this.data2 = data2;\r\n        this.propertyClass1 = propertyClass1;\r\n        this.propertyClass2 = propertyClass2;\r\n    }\r\n    static bind(data1: Data, data2: Data, property1: string, property2: string) {\r\n        if (!data1 || !data2 || !property1) {\r\n            console.error('NullValue!!');\r\n            return null;\r\n        }\r\n        const propertyBinder = new PropertyBinder(data1, data2, property1, property2);\r\n        propertyBinder.bind();\r\n        return propertyBinder;\r\n    }\r\n\r\n    propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        if (!this.applyingChange) {\r\n            this.applyingChange = true;\r\n            if (entity === this.data1) {\r\n                // fire to data2\r\n                this.data2.setValue(this.propertyClass2, newValue);\r\n            } else if (entity === this.data2) {\r\n                // fire to data1\r\n                this.data1.setValue(this.propertyClass1, newValue);\r\n            }\r\n            this.applyingChange = false;\r\n        }\r\n    }\r\n\r\n    protected bind() {\r\n        // public addListener(control: Control, property?: string)\r\n        // todo: set value immediately\r\n        this.data1.setValue(this.propertyClass1, this.data2.getValue(this.propertyClass2));\r\n\r\n        this.data1.addListener(this, this.propertyClass1);\r\n        this.data2.addListener(this, this.propertyClass2);\r\n    }\r\n\r\n    protected unbind() {\r\n        // public addListener(control: Control, property?: string)\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n    }\r\n}\r\n","// ################################## RGBColor ####################################################\r\nexport class RGBColor {\r\n    public  ok: boolean;\r\n    public r: number;\r\n    public g: number;\r\n    public b: number;\r\n\r\n    constructor(value: string) {\r\n        this.ok = false;\r\n        if (value === 'none') {\r\n            return;\r\n        }\r\n        let computedColor, div = document.createElement('div');\r\n        div.style.backgroundColor = value;\r\n        document.body.appendChild(div);\r\n        computedColor = window.getComputedStyle(div).backgroundColor;\r\n        // cleanup temporary div.\r\n        document.body.removeChild(div);\r\n        this.convert(computedColor);\r\n    }\r\n    public convert(value: any) {\r\n        let values, regex = /rgb *\\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\\)/;\r\n        values = regex.exec(value);\r\n        this.r = parseInt(values[1], 10);\r\n        this.g = parseInt(values[2], 10);\r\n        this.b = parseInt(values[3], 10);\r\n        this.ok = true;\r\n    }\r\n\r\n    public toRGB(): string {return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; }\r\n    public toHex(): string {\r\n        return '#' + (this.r + 0x10000).toString(16).substring(3).toUpperCase() + (this.g + 0x10000).toString(16).substring(3).toUpperCase() + (this.b + 0x10000).toString(16).substring(3).toUpperCase();\r\n    }\r\n}\r\n","/*\r\n NetworkParser\r\n Copyright (c) 2011 - 2014, Stefan Lindel\r\n All rights reserved.\r\n\r\n Licensed under the EUPL, Version 1.1 or (as soon they\r\n will be approved by the European Commission) subsequent\r\n versions of the EUPL (the \"Licence\");\r\n You may not use this work except in compliance with the Licence.\r\n You may obtain a copy of the Licence at:\r\n\r\n http://ec.europa.eu/idabc/eupl5\r\n\r\n Unless required by applicable law or agreed to in\r\n writing, software distributed under the Licence is\r\n distributed on an \"AS IS\" basis,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\r\n express or implied.\r\n See the Licence for the specific language governing\r\n permissions and limitations under the Licence.\r\n*/\r\nimport {RGBColor} from './RGBColor';\r\nimport {JSEPS} from \"./JSEPS\";\r\n\r\nconst epsSvgAttr = {\r\n    // allowed attributes. all others are removed from the preview.\r\n    g: ['stroke', 'fill', 'stroke-width'],\r\n    line: ['x1', 'y1', 'x2', 'y2', 'stroke', 'stroke-width'],\r\n    rect: ['x', 'y', 'width', 'height', 'stroke', 'fill', 'stroke-width'],\r\n    ellipse: ['cx', 'cy', 'rx', 'ry', 'stroke', 'fill', 'stroke-width'],\r\n    circle: ['cx', 'cy', 'r', 'stroke', 'fill', 'stroke-width'],\r\n    text: ['x', 'y', 'font-size', 'font-family', 'text-anchor', 'font-weight', 'font-style', 'fill'],\r\n    path: ['']\r\n};\r\nexport class SVGConverter {\r\n    private k: number;\r\n    private remove: boolean;\r\n    private target: any;\r\n\r\n    constructor(element: any, target: any, options: any) {\r\n        this.k = 1.0;\r\n        let hasScale = typeof (options.scale), hasRemoveInvalid = typeof (options.removeInvalid);\r\n        this.k = (options && hasScale !== 'undefined' ? options.scale : 1.0);\r\n        this.remove = (options && hasRemoveInvalid !== 'undefined' ? options.removeInvalid : false);\r\n        this.target = target;\r\n        this.parse(element);\r\n    }\r\n\r\n    public parse(element: any) {\r\n        let el, i, n, colorMode, hasFillColor, fillRGB, fillColor, strokeColor, strokeRGB, fontType, pdfFontSize, x, y,\r\n            box, xOffset;\r\n        if (!element) {\r\n            return;\r\n        }\r\n        if (typeof element === 'string') {\r\n            el = document.createElement('div');\r\n            el.innerHTML = element;\r\n            element = el.childNodes[0];\r\n        }\r\n        for (i = 0; i < element.children.length; i += 1) {\r\n            n = element.children[i];\r\n            colorMode = null;\r\n            hasFillColor = false;\r\n            if ('g,line,rect,ellipse,circle,text'.indexOf(n.tagName) >= 0) {\r\n                fillColor = n.getAttribute('fill');\r\n                if (fillColor) {\r\n                    fillRGB = new RGBColor(fillColor);\r\n                    if (fillRGB.ok) {\r\n                        hasFillColor = true;\r\n                        colorMode = 'F';\r\n                    }\r\n                }\r\n            }\r\n            if ('g,line,rect,ellipse,circle'.indexOf(n.tagName) >= 0) {\r\n                if (hasFillColor) {\r\n                    this.target.setFillColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                }\r\n                strokeColor = n.getAttribute('stroke');\r\n                if (n.hasAttribute('stroke-width')) {\r\n                    this.target.setLineWidth(this.attr(n, 'stroke-width'));\r\n                }\r\n                if (strokeColor) {\r\n                    strokeRGB = new RGBColor(strokeColor);\r\n                    if (strokeRGB.ok) {\r\n                        this.target.setDrawColor(strokeRGB.r, strokeRGB.g, strokeRGB.b);\r\n                        if (colorMode === 'F') {\r\n                            colorMode = 'FD';\r\n                        } else if (!hasFillColor) {\r\n                            colorMode = 'S';\r\n                        }\r\n                    } else {\r\n                        colorMode = null;\r\n                    }\r\n                }\r\n            }\r\n            // console.log(\"write \"+n.tagName);\r\n            switch (n.tagName.toLowerCase()) {\r\n                case 'svg':\r\n                case 'a':\r\n                case 'g':\r\n                    this.parse(n);\r\n                    break;\r\n                case 'line':\r\n                    this.target.line(this.attr(n, 'x1'), this.attr(n, 'y1'), this.attr(n, 'x2'), this.attr(n, 'y2'));\r\n                    break;\r\n                case 'rect':\r\n                    this.target.rect(this.attr(n, 'x'), this.attr(n, 'y'), this.attr(n, 'width'), this.attr(n, 'height'), n.getAttribute('style'));\r\n                    break;\r\n                case 'ellipse':\r\n                    this.target.ellipse(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'rx'), this.attr(n, 'ry'), colorMode);\r\n                    break;\r\n                case 'circle':\r\n                    this.target.circle(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'r'), colorMode);\r\n                    break;\r\n                case 'text':\r\n                    if (n.hasAttribute('font-family')) {\r\n                        switch (n.getAttribute('font-family').toLowerCase()) {\r\n                            case 'serif':\r\n                                this.target.setFont('times');\r\n                                break;\r\n                            case 'monospace':\r\n                                this.target.setFont('courier');\r\n                                break;\r\n                            default:\r\n                                n.getAttribute('font-family', 'sans-serif');\r\n                                this.target.setFont('Helvetica');\r\n                        }\r\n                    }\r\n                    if (hasFillColor) {\r\n                        this.target.setTextColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                    }\r\n                    if (this.target instanceof JSEPS) {\r\n                        this.target.text(this.attr(n, 'x'), this.attr(n, 'y'), n.innerHTML);\r\n                        break;\r\n                    }\r\n                    fontType = '';\r\n                    if (n.hasAttribute('font-weight')) {\r\n                        if (n.getAttribute('font-weight') === 'bold') {\r\n                            fontType = 'bold';\r\n                        }\r\n                    }\r\n                    if (n.hasAttribute('font-style')) {\r\n                        if (n.getAttribute('font-style') === 'italic') {\r\n                            fontType += 'italic';\r\n                        }\r\n                    }\r\n                    this.target.setFontType(fontType);\r\n                    pdfFontSize = 16;\r\n                    if (n.hasAttribute('font-size')) {\r\n                        pdfFontSize = parseInt(n.getAttribute('font-size'), 10);\r\n                    }\r\n                    box = n.getBBox();\r\n                    // FIXME: use more accurate positioning!!\r\n                    x = this.attr(n, 'x');\r\n                    y = this.attr(n, 'y');\r\n                    xOffset = 0;\r\n                    if (n.hasAttribute('text-anchor')) {\r\n                        switch (n.getAttribute('text-anchor')) {\r\n                            case 'end':\r\n                                xOffset = box.width;\r\n                                break;\r\n                            case 'middle':\r\n                                xOffset = box.width / 2;\r\n                                break;\r\n                            case 'start':\r\n                                break;\r\n                            case 'default':\r\n                                n.getAttribute('text-anchor', 'start');\r\n                                break;\r\n                        }\r\n                        x = x - (xOffset * this.k);\r\n                    }\r\n                    this.target.setFontSize(pdfFontSize).text(x, y, n.innerHTML);\r\n                    break;\r\n                default:\r\n                    if (this.remove) {\r\n                        console.log('cant translate to target:', n);\r\n                        element.removeChild(n);\r\n                        i -= 1;\r\n                    }\r\n            }\r\n        }\r\n    }\r\n\r\n    public attr(node: any, name: string) {\r\n        return this.k * parseInt(node.getAttribute(name), 10);\r\n    }\r\n}\r\n","import {Control} from './Control';\r\n\r\nexport class ScrumBoard extends Control {\r\n    public static cards = [0, 0.5, 1, 2, 3, 5, 8, 13, 20, 40, 100, '?', 'Coffee'];\r\n    private $selected: HTMLDivElement;\r\n    private $board: HTMLDivElement;\r\n\r\n    constructor() {\r\n        super();\r\n        this.redraw();\r\n    }\r\n\r\n    public redraw(): void {\r\n        if (this.$board) {\r\n            while (this.$board.children.length > 0 ) {\r\n                this.$board.removeChild(this.$board.children[0]);\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('div');\r\n            this.$selected = document.createElement('div');\r\n            this.$board = document.createElement('div');\r\n            this.$view.appendChild(this.$board);\r\n            this.$view.appendChild(this.$selected);\r\n        }\r\n        this.$view.className = 'ScrumBoard';\r\n        for ( let i = 0; i < ScrumBoard.cards.length; i++) {\r\n            let card = document.createElement('div');\r\n            card.className = 'ScrumCard';\r\n            card.innerHTML = <string>ScrumBoard.cards[i];\r\n            card['pokervalue'] = <string>ScrumBoard.cards[i];\r\n            card.onclick = e => {\r\n                this.onClick(<HTMLDivElement>e.target);\r\n            };\r\n            this.$board.appendChild(card);\r\n        }\r\n    }\r\n\r\n    public getSVG() {\r\n        this.redraw();\r\n        return this.$view;\r\n    }\r\n\r\n    public onClick(target: HTMLDivElement): void {\r\n        console.log(target['pokervalue']);\r\n\r\n        while (this.$selected.children.length > 0 ) {\r\n            this.$selected.removeChild(this.$selected.children[0]);\r\n        }\r\n        let card = document.createElement('div');\r\n        card.className = 'ScrumCard';\r\n        card['pokervalue'] = target['pokervalue'];\r\n        card.onclick = e => {\r\n            this.onShow(<HTMLDivElement>e.target);\r\n        };\r\n        this.$selected.appendChild(card);\r\n        this.$board['style']['display'] = 'none';\r\n    }\r\n\r\n    public onShow(target: HTMLDivElement): void {\r\n        target.innerHTML = target['pokervalue'];\r\n    }\r\n}\r\n","import {Graph} from './main';\r\nimport {SymbolLibary} from './elements/nodes/Symbol';\r\nimport {EventBus} from './EventBus';\r\n\r\nexport class Toolbar {\r\n\r\n    private graph: Graph;\r\n    private mainDiv: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public show(): void {\r\n        if (this.mainDiv) {\r\n            return;\r\n        }\r\n\r\n        this.mainDiv = document.createElement('div');\r\n        this.mainDiv.className = 'toolbar';\r\n\r\n        let h1Logo = document.createElement('h1');\r\n        h1Logo.className = 'logo';\r\n        h1Logo.textContent = 'DiagramJS';\r\n\r\n        let node = {type: 'Hamburger', property: 'HTML', width: 24, height: 24, id: 'GenerateProp'};\r\n        let hamburger = SymbolLibary.draw( node);\r\n        EventBus.registerEvent(hamburger, 'click', node);\r\n        this.mainDiv.appendChild(hamburger);\r\n\r\n        this.mainDiv.appendChild(h1Logo);\r\n        document.body.appendChild(this.mainDiv);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 06.03.2017.\r\n */\r\nimport Data from './Data';\r\n\r\n// export default class Data {\r\n//    public values = {};\r\n//    id: string;\r\n//    $listener: Control[] = [];\r\n//    property: string;\r\nexport namespace UML {\r\n    export class Clazz extends Data {\r\n        public static NAME: string = 'name';\r\n        public static ATTRIBUTES: string = 'attributes';\r\n        public static METHODS: string = 'methods';\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Clazz';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n\r\n        public getAttributes() {\r\n            return this.prop[Clazz.ATTRIBUTES];\r\n        }\r\n\r\n        public addToAttributes(newValue: string) {\r\n            this.addTo(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n\r\n        public removeFromAttributes(newValue: string) {\r\n            this.removeFrom(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n    }\r\n\r\n    export class Attribute extends Data {\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Attribute';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n    }\r\n\r\n    export class Methods extends Data {\r\n\r\n    }\r\n}\r\n\r\nwindow['UML'] = UML;\r\n","import {Control} from './Control';\r\n\r\nexport class VirtualKeyBoard extends Control {\r\n    constructor(data: any) {\r\n        super();\r\n        if (!data) {\r\n            data = this.getDefault();\r\n        }\r\n        let board = document.createElement('div');\r\n        this.$viewData = data;\r\n\r\n        for (let type in data) {\r\n            if (type === 'normal') {\r\n                for (let line in data[type]) {\r\n                    let lineBoard = document.createElement('div');\r\n                    lineBoard.className = 'vkLine';\r\n                    for (let key in data[type][line]) {\r\n                        let btn: HTMLButtonElement = document.createElement('button');\r\n                        let keyTag = data[type][line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                        btn.ontouchend = () => {this.action(btn); };\r\n                        btn.onclick = () => {this.action(btn); };\r\n                        lineBoard.appendChild(btn);\r\n                    }\r\n                    board.appendChild(lineBoard);\r\n                }\r\n            }\r\n        }\r\n        this.$view = board;\r\n    }\r\n\r\n    public action(btn: HTMLButtonElement) {\r\n        if (btn['key'] === '{Shift}') {\r\n            if ( btn.className === 'vkbuttonAction') {\r\n                let keys = this.$viewData['normal'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                    }\r\n                }\r\n            } else if ( btn.className === 'vkbutton') {\r\n                let keys = this.$viewData['shift'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbuttonAction');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        alert(btn);\r\n    }\r\n\r\n    public getDefault(): any {\r\n        let format = {\r\n            normal: [\r\n                ['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '?', '´', '{Bksp}'],\r\n                ['{Tab}', 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+'],\r\n                ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '#', '{enter}'],\r\n                ['{Shift}', '<', 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n// '{left}', '{up}', '{down}','{right}', '{Cancel}']\r\n            ],\r\n            shift: [\r\n                ['°', '!', '\"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '`', '{Bksp}'],\r\n                ['{Tab}', 'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', 'O', 'P', 'Ü', '*'],\r\n                ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', '\\'', '{enter}'],\r\n                ['{Shift}', '>', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n            ]\r\n        };\r\n        return format;\r\n    }\r\n\r\n    public getBoard() {\r\n        return this.$view;\r\n    }\r\n\r\n    private setButtonValue(keyTag: string, btn: HTMLButtonElement, shiftClass: string) {\r\n        btn.className = 'vkbutton';\r\n        btn['key'] = keyTag;\r\n        btn['type'] = 'normal';\r\n        if (keyTag.substring(0, 1) === '{') {\r\n            if (keyTag === '{Bksp}') {\r\n                btn.innerHTML = 'Bksp';\r\n            } else if (keyTag === '{Tab}') {\r\n                btn.innerHTML = '&#8677; Tab';\r\n            } else if (keyTag === '{enter}') {\r\n                btn.innerHTML = 'enter';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Shift}') {\r\n                btn.innerHTML = 'Shift';\r\n                btn.className = shiftClass;\r\n            } else if (keyTag === '{Accept}') {\r\n                btn.innerHTML = 'Accept';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Alt}') {\r\n                btn.innerHTML = 'Alt';\r\n            } else if (keyTag === '{Space}') {\r\n                btn.innerHTML = '&nbsp;';\r\n                btn.className = 'vkbuttonSpace';\r\n            } else if (keyTag === '{left}') {\r\n                btn.innerHTML = '&#8592';\r\n            } else if (keyTag === '{right}') {\r\n                btn.innerHTML = '&#8594;';\r\n            } else if (keyTag === '{up}') {\r\n                btn.innerHTML = '&#8593;';\r\n            } else if (keyTag === '{down}') {\r\n                btn.innerHTML = '&#8595;';\r\n            } else if (keyTag === '{Cancel}') {\r\n                btn.innerHTML = 'Cancel';\r\n                btn.className = 'vkbuttonAction';\r\n            }\r\n        } else {\r\n            btn.innerHTML = keyTag;\r\n        }\r\n    }\r\n}\r\n","import {Adapter} from '../Adapter';\r\n\r\nexport class JavaAdapter extends Adapter {\r\n    constructor() {\r\n        super();\r\n        this.id = 'JavaAdapter';\r\n    }\r\n    update(evt: Object): boolean {\r\n        if (this.isActive()) {\r\n            window['JavaBridge'].executeChange(evt);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public isActive(): boolean {\r\n        return window['JavaBridge'];\r\n    }\r\n}\r\n","export * from './JavaAdapter';\r\n","import { Util } from '../util';\r\nimport { Control } from '../Control';\r\n\r\nexport interface Size {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\ninterface GraphElement {\r\n    getSize(): Point;\r\n\r\n    getPos(): Point;\r\n\r\n    getCenter(): Point;\r\n\r\n    getSVG(): Element;\r\n\r\n    getCanvas(): Element;\r\n\r\n    getEvents(): string[];\r\n\r\n    withPos(x: number, y: number): GraphElement;\r\n\r\n    load(data: any): any;\r\n\r\n    getToolBarIcon(): Element;\r\n\r\n    loadProperties(properties: any): void;\r\n}\r\n\r\nexport abstract class DiagramElement extends Control implements GraphElement {\r\n\r\n    protected $isDraggable: boolean = true;\r\n    protected $labelHeight = 25;\r\n    protected $labelFontSize = 14;\r\n    private $pos: Point = new Point();\r\n    private $size: Point = new Point();\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getPos(): Point {\r\n        return this.$pos;\r\n    }\r\n\r\n    public getSize(): Point {\r\n        return this.$size;\r\n    }\r\n\r\n    public getCenter(): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        return new Point(pos.x + size.x / 2, pos.y + size.y / 2);\r\n    }\r\n\r\n    public getCenterPosition(p: string): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let offset = this['$' + p];\r\n        let center = this.getCenter();\r\n        if (p === Point.DOWN) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y + size.y, Point.DOWN);\r\n        }\r\n        if (p === Point.UP) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y, Point.UP);\r\n        }\r\n        if (p === Point.LEFT) {\r\n            return new Point(pos.x, Math.min(center.y + offset, pos.y + size.y), Point.LEFT);\r\n        }\r\n        if (p === Point.RIGHT) {\r\n            return new Point(pos.x + size.x, Math.min(center.y + offset, pos.y + size.y), Point.RIGHT);\r\n        }\r\n        return new Point();\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getCanvas(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return null;\r\n    }\r\n\r\n    public getAlreadyDisplayingSVG(): Element {\r\n        return document.getElementById(this.id) || this.getSVG();\r\n    }\r\n\r\n    public load(data: any) {\r\n        // Do Nothing\r\n    }\r\n\r\n    public withPos(x: number, y: number): GraphElement {\r\n        if (x && y) {\r\n            this.$pos = new Point(x, y);\r\n        } else {\r\n            if (typeof (x) !== 'undefined' && x !== null) {\r\n                this.$pos.x = x;\r\n            }\r\n            if (typeof (y) !== 'undefined' && y !== null) {\r\n                this.$pos.y = y;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public withSize(width: number, height: number): DiagramElement {\r\n        if (width && height) {\r\n            this.$size = new Point(width, height);\r\n        } else {\r\n            if (typeof (width) !== 'undefined' && width !== null) {\r\n                this.$size.x = width;\r\n            }\r\n            if (typeof (height) !== 'undefined' && height !== null) {\r\n                this.$size.y = height;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        // FIXME if (this.status === 'close') {\r\n        // if (!this.$owner.isClosed()) {\r\n        //        return this;\r\n        //    }\r\n        // }\r\n        return super.getShowed();\r\n    }\r\n\r\n    public loadProperties(properties: any) {\r\n        // DO Nothing\r\n    }\r\n\r\n    protected createShape(attrs: any): Element {\r\n        return Util.createShape(attrs);\r\n    }\r\n}\r\n\r\nexport class Point {\r\n    public static UP: string = 'UP';\r\n    public static LEFT: string = 'LEFT';\r\n    public static RIGHT: string = 'RIGHT';\r\n    public static DOWN: string = 'DOWN';\r\n    x: number = 0;\r\n    y: number = 0;\r\n\r\n    //    pos:string = '';\r\n\r\n    constructor(x?: number, y?: number, pos?: string) {\r\n        this.x = Math.ceil(x || 0);\r\n        this.y = Math.ceil(y || 0);\r\n        if (pos) {\r\n            this['pos'] = pos;\r\n        }\r\n    }\r\n\r\n    public add(pos: Point) {\r\n        this.x += pos.x;\r\n        this.y += pos.y;\r\n        return this;\r\n    }\r\n\r\n    public getPosition(): string {\r\n        if (!this['pos']) {\r\n            return '';\r\n        }\r\n        return this['pos'];\r\n    }\r\n\r\n    public addNum(x: number, y: number) {\r\n        this.x += x;\r\n        this.y += y;\r\n        return this;\r\n    }\r\n\r\n    public sum(pos: Point) {\r\n        let sum = new Point(this.x, this.y);\r\n        sum.add(pos);\r\n        return sum;\r\n    }\r\n\r\n    public center(posA: Point, posB: Point) {\r\n        let count = 0;\r\n        if (posA) {\r\n            this.x += posA.x;\r\n            this.y += posA.y;\r\n            count++;\r\n        }\r\n        if (posB) {\r\n            this.x += posB.x;\r\n            this.y += posB.y;\r\n            count++;\r\n        }\r\n        if (count > 0) {\r\n            this.x = (this.x / count);\r\n            this.y = (this.y / count);\r\n        }\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        return this.x < 1 && this.y < 1;\r\n    }\r\n\r\n    public size(posA: Point, posB: Point) {\r\n        let x1 = 0, x2 = 0, y1 = 0, y2 = 0;\r\n        if (posA) {\r\n            x1 = posA.x;\r\n            y1 = posA.y;\r\n        }\r\n        if (posB) {\r\n            x2 = posB.x;\r\n            y2 = posB.y;\r\n        }\r\n        if (x1 > x2) {\r\n            this.x = x1 - x2;\r\n        } else {\r\n            this.x = x2 - x1;\r\n        }\r\n        if (y1 > y2) {\r\n            this.y = y1 - y2;\r\n        } else {\r\n            this.y = y2 - y1;\r\n        }\r\n    }\r\n}\r\n\r\n// \t\t\t\t######################################################### Line #########################################################\r\nexport class Line extends DiagramElement {\r\n    public static FORMAT = { SOLID: 'SOLID', DOTTED: 'DOTTED', PATH: 'PATH' };\r\n    public source: Point;\r\n    public target: Point;\r\n    public color: string;\r\n    public lineType: string;\r\n    private path: string;\r\n    private angle: Number;\r\n\r\n    constructor(lineType: string) {\r\n        super();\r\n        this.lineType = lineType;\r\n    }\r\n\r\n    public getTyp(): string {\r\n        return 'SVG';\r\n    }\r\n\r\n    public getPos() {\r\n        let pos = new Point();\r\n        pos.center(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public getSize() {\r\n        let pos = new Point();\r\n        pos.size(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public withColor(color: string): Line {\r\n        this.color = color;\r\n        return this;\r\n    }\r\n\r\n    public withSize(x: number, y: number): DiagramElement {\r\n        return this;\r\n    }\r\n\r\n    public withPath(path: Array<Point>, close: boolean, angle?: any): Line {\r\n        let i: number, d: string = 'M' + path[0].x + ' ' + path[0].y;\r\n        this.lineType = Line.FORMAT.PATH; // It is a Path not a Line\r\n        for (i = 1; i < path.length; i += 1) {\r\n            d = d + 'L ' + path[i].x + ' ' + path[i].y;\r\n        }\r\n        if (close) {\r\n            d = d + ' Z';\r\n            this.target = path[0];\r\n        } else {\r\n            this.target = path[path.length - 1];\r\n        }\r\n        this.path = d;\r\n        if (angle instanceof Number) {\r\n            this.angle = angle;\r\n        } else if (angle) {\r\n            // var lineangle, start = path[0], end = path[path.length - 1];\r\n            // lineangle = Math.atan2(end.y - start.y, end.x - start.x);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): SVGGElement {\r\n        if (this.lineType === 'PATH') {\r\n            return <SVGGElement>Util.create({\r\n                tag: 'path',\r\n                'd': this.path,\r\n                'fill': this.color,\r\n                stroke: '#000',\r\n                'stroke-width': '1px'\r\n            });\r\n        }\r\n        let line: SVGGElement = <SVGGElement>Util.create({\r\n            tag: 'line',\r\n            'x1': this.source.x,\r\n            'y1': this.source.y,\r\n            'x2': this.target.x,\r\n            'y2': this.target.y,\r\n            'stroke': Util.getColor(this.color)\r\n        });\r\n        if (this.lineType && this.lineType.toLowerCase() === 'dotted') {\r\n            line.setAttribute('stroke-miterlimit', '4');\r\n            line.setAttribute('stroke-dasharray', '1,1');\r\n        }\r\n        return line;\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport Options from '../Options';\r\nimport {JavaAdapter} from '../adapters';\r\n\r\nexport class ClassEditor extends Graph {\r\n    private adapter: JavaAdapter;\r\n    constructor(json: any, options: Options) {\r\n        if (!options ) {\r\n            options = {};\r\n        }\r\n        options.canvas = options.canvas || 'canvas';\r\n        // options.origin = options.origin || new Point(150, 45);\r\n//            layout: \"DagreLayout\",\r\n        options.autoSave = options.autoSave || true;\r\n        if (!options.features) {\r\n            options.features = {\r\n                drag: true,\r\n                editor: true,\r\n                palette: true,\r\n                select: true,\r\n                zoom: true,\r\n                toolbar: true,\r\n                import: true,\r\n                properties: true,\r\n                addnode: true,\r\n                newedge: true\r\n            };\r\n        }\r\n        super(json, options);\r\n    }\r\n\r\n    public setBoardStyle(value: string) {\r\n        console.log(value);\r\n        this.importFile.setBoardStyle(value);\r\n    }\r\n\r\n    public registerListener(): void {\r\n        this.adapter = new JavaAdapter();\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return this.adapter;\r\n    }\r\n}\r\n","import * as edges from './edges';\r\nimport { Association } from './edges';\r\nimport * as nodes from './nodes';\r\nimport * as layouts from '../layouts';\r\nimport Layout from '../layouts/Layout';\r\nimport { GraphModel } from './Model';\r\nimport { Point, Size } from './BaseElements';\r\nimport { Util } from '../util';\r\nimport { Control } from '../Control';\r\nimport Data from '../Data';\r\nimport { EventBus } from '../EventBus';\r\nimport { AddNode, Drag, NewEdge, Select, Zoom } from '../handlers';\r\nimport Options from '../Options';\r\nimport { ImportFile } from '../handlers/ImportFile';\r\nimport { CSS } from '../CSS';\r\nimport { DiagramElement } from './index';\r\nimport { Toolbar } from '../Toolbar';\r\nimport {JSEPS} from '../JSEPS';\r\nimport {SVGConverter} from '../SVGConverter';\r\nimport Palette from '../Palette';\r\nimport {PanelGroup} from '../PropertiesPanel';\r\n\r\nexport class Graph extends Control {\r\n    // canvas: HTMLElement;\r\n    root: SVGElement;\r\n    $graphModel: GraphModel;\r\n    options: Options;\r\n    canvasSize: Size;\r\n    nodeFactory: Object;\r\n    edgeFactory: Object;\r\n    layoutFactory: Object;\r\n    protected importFile: ImportFile;\r\n    private currentlayout: Layout;\r\n    // private layerToolBar: SVGSVGElement;\r\n    // https://stackoverflow.com/questions/15181452/how-to-save-export-inline-svg-styled-with-css-from-browser-to-image-file\r\n    private containerElements = ['svg', 'g'];\r\n    private relevantStyles = {\r\n        'rect': ['fill', 'stroke', 'stroke-width'],\r\n        'path': ['fill', 'stroke', 'stroke-width', 'opacity'],\r\n        'circle': ['fill', 'stroke', 'stroke-width'],\r\n        'line': ['stroke', 'stroke-width'],\r\n        'text': ['fill', 'font-size', 'text-anchor', 'font-family'],\r\n        'polygon': ['stroke', 'fill']\r\n    };\r\n\r\n    constructor(json: any, options: Options) {\r\n        super();\r\n        json = json || {};\r\n        if (json['data']) {\r\n            options = json['options'];\r\n            json = json['data'];\r\n            this.id = json['id'];\r\n        }\r\n        this.options = options || {features: { drag: true}};\r\n        if (json['init']) {\r\n            return;\r\n        }\r\n        if (!this.options.origin) {\r\n            this.options.origin = new Point(150, 45);\r\n        }\r\n        if (!this.options.style) {\r\n            // Style can be classic or modern\r\n            this.options.style = 'classic';\r\n        }\r\n        if (this.options.autoSave) {\r\n            Util.isAutoSave = options.autoSave;\r\n        }\r\n\r\n        this.initFactories();\r\n        this.initCanvas();\r\n        this.initFeatures(this.options.features);\r\n\r\n        // load previous session, if user wants it\r\n        // otherwise load the json data\r\n        if (!this.lookupInLocalStorage()) {\r\n            this.load(json);\r\n        }\r\n\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    public lookupInLocalStorage(): boolean {\r\n        if (!this.options.autoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (!Util.isLocalStorageSupported()) {\r\n            return false;\r\n        }\r\n        let diagram = Util.getDiagramFromLocalStorage();\r\n        if (diagram && diagram.length > 0) {\r\n            if (confirm('Restore previous session?')) {\r\n                let jsonData: JSON = JSON.parse(diagram);\r\n                this.load(jsonData);\r\n                this.layout();\r\n                return true;\r\n            } else {\r\n                Util.saveToLocalStorage( null);\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public fitSizeOnNodes(): void {\r\n        let maxWidth: number = 0;\r\n        let maxHeight: number = 0;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            let nodePos = node.getPos();\r\n            let nodeSize = node.getSize();\r\n            let nodeWidestPosX = nodePos.x + nodeSize.x;\r\n            let nodeWidestPosY = nodePos.y + nodeSize.y;\r\n\r\n            if (nodeWidestPosX > maxWidth) {\r\n                maxWidth = nodeWidestPosX;\r\n            }\r\n\r\n            if (nodeWidestPosY > maxHeight) {\r\n                maxHeight = nodeWidestPosY;\r\n            }\r\n        }\r\n\r\n        this.root.setAttributeNS(null, 'width', '' + (maxWidth + 100));\r\n        this.root.setAttributeNS(null, 'height', '' + (maxHeight + 50));\r\n    }\r\n\r\n    public saveAs(typ: string) {\r\n        typ = typ.toLowerCase();\r\n\r\n        // shrink size of graph to minimum. only to show up nodes\r\n        const currentSize = this.getRootSize();\r\n        this.fitSizeOnNodes();\r\n\r\n        if (typ === 'svg') {\r\n            this.exportSvg();\r\n        } else if (typ === 'png') {\r\n            this.exportPng();\r\n        } else if (typ === 'html') {\r\n            this.exportHtml();\r\n\r\n        } else if (typ === 'pdf') {\r\n            this.exportPdf();\r\n            // } else if (typ === 'eps') {\r\n            // this.ExportEPS();\r\n        }\r\n        else if (typ === 'json') {\r\n            this.exportJson();\r\n        }\r\n\r\n        // set the size back to default\r\n        this.root.setAttributeNS(null, 'width', '' + currentSize.width);\r\n        this.root.setAttributeNS(null, 'height', '' + currentSize.height);\r\n    }\r\n\r\n    /**\r\n     * generates a blob file and makes it available for download.\r\n     * @param type type of file\r\n     * @param data raw data\r\n     * @param name name of download file\r\n     */\r\n    public save(type: string, data: any, name: string, context: string) {\r\n        if (window['java']) {\r\n            window['java'].export(type, data, name, context);\r\n            return;\r\n        }\r\n        let a = document.createElement('a');\r\n        a.href = window.URL.createObjectURL(new Blob([data], { type: context }));\r\n        a.download = name;\r\n        document.body.appendChild(a);\r\n        a.click();\r\n        document.body.removeChild(a);\r\n    }\r\n\r\n    /** Exports the diagram as svg. */\r\n    public exportSvg(): void {\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        this.save('svg', this.serializeXmlNode(wellFormatedSvgDom), 'class_diagram.svg', 'image/svg+xml');\r\n    }\r\n\r\n    /** Exports the diagram as html. */\r\n    public exportHtml(): void {\r\n        let htmlFacade = '<html><head><title>DiagramJS - Classdiagram</title></head><body>$content</body></html>';\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        let svgAsXml = this.serializeXmlNode(wellFormatedSvgDom);\r\n\r\n        let htmlResult = htmlFacade.replace('$content', svgAsXml);\r\n\r\n        this.save('html', htmlResult, 'class_diagram.htm', 'text/plain');\r\n    }\r\n\r\n    /** Exports the diagram as json. */\r\n    public exportJson(): void {\r\n        let type = 'text/plain';\r\n        let jsonObj = Util.toJson(this.$graphModel);\r\n        let data = JSON.stringify(jsonObj, null, '\\t');\r\n\r\n        this.save('json', data, 'class_diagram.json', type);\r\n    }\r\n\r\n    /** Exports the diagram as pdf. */\r\n    public exportPdf(): void {\r\n        if (!window['jsPDF']) {\r\n            console.log('jspdf n.a.');\r\n            return;\r\n        }\r\n        let type = 'image/svg+xml';\r\n        let converter, pdf = new window['jsPDF']('l', 'px', [this.$graphModel.getSize().x, this.$graphModel.getSize().y]);\r\n        converter = new SVGConverter(this.$view, pdf, {removeInvalid: false});\r\n        pdf.save('Download.pdf');\r\n/*        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let canvas, context, a, image = new Image();\r\n        let size = this.getRootSize();\r\n\r\n        // create the loaded img source into a canvas. to generate a picture. then place this picture in the pdf\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            let pdf = new window['jsPDF']();\r\n\r\n            pdf.addImage(canvas.toDataURL('image/jpeg'), 'jpeg', 15, 40, 180, 160);\r\n            pdf.save('class_diagram.pdf');\r\n\r\n        };\r\n\r\n        image.src = url;\r\n        */\r\n    }\r\n\r\n    public import(data: string): void {\r\n        let rootElement = this.$graphModel.$view;\r\n        while (rootElement.hasChildNodes()) {\r\n            rootElement.removeChild(rootElement.firstChild);\r\n        }\r\n\r\n        while (this.$view.hasChildNodes()) {\r\n            this.$view.removeChild(this.$view.firstChild);\r\n        }\r\n\r\n        this.clearModel();\r\n        let jsonData = JSON.parse(data);\r\n        this.load(jsonData);\r\n        this.layout();\r\n    }\r\n\r\n    public exportEPS(): void {\r\n          let converter, doc = new JSEPS({inverting: true});\r\n            converter = new SVGConverter(this.$view, doc, {removeInvalid: false});\r\n            this.save('eps', doc.getData(), 'diagram.eps', doc.getType());\r\n    }\r\n\r\n    /** Exports the diagram as png. */\r\n    public exportPng(): void {\r\n        let canvas, context, a, image = new Image();\r\n        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let typ = 'image/svg+xml';\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let size = this.getRootSize();\r\n\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            a = document.createElement('a');\r\n            a.download = 'class_diagram.png';\r\n            a.href = canvas.toDataURL('image/png');\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            document.body.removeChild(a);\r\n        };\r\n\r\n        image.src = url;\r\n\r\n    }\r\n\r\n    public getSvgWithStyleAttributes(): Node {\r\n        let oDOM = this.$graphModel.$view.cloneNode(true);\r\n        this.readElement(oDOM, this.$graphModel.$view);\r\n\r\n        return oDOM;\r\n    }\r\n\r\n    public serializeXmlNode(xmlNode: any) {\r\n        if (window['XMLSerializer'] !== undefined) {\r\n            return (new window['XMLSerializer']()).serializeToString(xmlNode);\r\n        }\r\n        if (xmlNode.xml !== undefined) {\r\n            return xmlNode.xml;\r\n        }\r\n        return xmlNode.outerHTML;\r\n    }\r\n\r\n    public getRootSize(): Size {\r\n        let width: number;\r\n        let height: number;\r\n        width = +this.root.getAttribute('width');\r\n        height = +this.root.getAttribute('height');\r\n\r\n        return { width: width, height: height };\r\n    }\r\n\r\n        // Graph.prototype.ExportEPS = function () {\r\n        //     var converter, doc = new svgConverter.jsEPS({inverting: true});\r\n        //     converter = new svgConverter(this.board, doc, {removeInvalid: false});\r\n        //     doc.save();\r\n        // };\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        this.$graphModel = new GraphModel();\r\n        this.$graphModel.init(this);\r\n        this.$graphModel.load(json);\r\n    }\r\n\r\n    public clearModel(): void {\r\n        this.$graphModel.removeAllElements();\r\n        this.clearSvgRoot();\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.layout();\r\n        return this;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        return;\r\n    }\r\n\r\n    public getNextFreePosition(): Point {\r\n\r\n        if (!this.$graphModel) {\r\n            return new Point(50, 50);\r\n        }\r\n\r\n        let point = new Point(0, 50);\r\n\r\n        let maxX = 0;\r\n        let minX = 9000;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            maxX = Math.max(maxX, node.getPos().x);\r\n            minX = Math.min(minX, node.getPos().x);\r\n        }\r\n\r\n        if (minX > 170) {\r\n            point.x = 10;\r\n        }\r\n        else {\r\n            point.x = maxX + 200;\r\n        }\r\n\r\n        return point;\r\n    }\r\n\r\n    public addElement(type: string, dontDraw?: boolean): boolean {\r\n        let success = this.$graphModel.addElement(type);\r\n        if (success === true) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return success;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues?: Object, layout?: boolean, dontDraw?: boolean): DiagramElement {\r\n        let element = this.$graphModel.addElementWithValues(type, optionalValues);\r\n        if (element && layout) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public layout(dontDraw?: boolean): Graph {\r\n        this.getLayout().layout(this, this.$graphModel);\r\n\r\n        if (dontDraw) {\r\n            return this;\r\n        }\r\n\r\n        this.draw();\r\n        return this;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTDRAGOVER, EventBus.ELEMENTDRAGLEAVE, EventBus.ELEMENTDROP];\r\n    }\r\n\r\n    public draw() {\r\n        this.clearSvgRoot();\r\n        let model = this.$graphModel;\r\n        let root = this.root;\r\n        let max: Point = new Point();\r\n        if (this.options) {\r\n            max.x = this.options.minWidth || 0;\r\n            max.y = this.options.minHeight || 0;\r\n        }\r\n\r\n        for (let node of model.nodes) {\r\n            let svg = node.getSVG();\r\n            EventBus.register(node, svg);\r\n            root.appendChild(svg);\r\n\r\n            let temp: number;\r\n            temp = node.getPos().x + node.getSize().x;\r\n            if (temp > max.x) {\r\n                max.x = temp;\r\n            }\r\n            temp = node.getPos().y + node.getSize().y;\r\n            if (temp > max.y) {\r\n                max.y = temp;\r\n            }\r\n\r\n        }\r\n        Util.setAttributeSize(this.root, max.x + 60, max.y + 40);\r\n\r\n        for (let edge of model.edges) {\r\n            let svg = edge.getSVG();\r\n            EventBus.register(edge, svg);\r\n            root.appendChild(svg);\r\n        }\r\n    }\r\n\r\n    public getNode(id: string) {\r\n        return this.$graphModel.getNodeById(id);\r\n    }\r\n\r\n    public drawElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let svg = element.getSVG();\r\n        this.root.appendChild(svg);\r\n\r\n        // actualize root width size, if neccessary\r\n        // get current width of root\r\n        let rootSize = this.getRootSize();\r\n        let newWidth = element.getPos().x + element.getSize().x + 40;\r\n        let newHeight = element.getPos().y + element.getSize().y;\r\n\r\n        if (rootSize.width < newWidth) {\r\n            this.root.setAttributeNS(null, 'width', '' + newWidth);\r\n        }\r\n\r\n        if (rootSize.height < newHeight) {\r\n            this.root.setAttributeNS(null, 'height', '' + newHeight);\r\n        }\r\n\r\n        // draw edge\r\n        if (element instanceof Association) {\r\n            let edge = <Association>element;\r\n            edge.redraw(edge.$sNode);\r\n            let srcSvg = element.$sNode.getAlreadyDisplayingSVG();\r\n            let targetSvg = element.$tNode.getAlreadyDisplayingSVG();\r\n\r\n            this.root.appendChild(srcSvg);\r\n            this.root.appendChild(targetSvg);\r\n        }\r\n\r\n        EventBus.register(element, svg);\r\n    }\r\n\r\n    public removeElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let alreadyDisplayingSvg = element.getAlreadyDisplayingSVG();\r\n        if (Util.isParentOfChild(this.root, alreadyDisplayingSvg)) {\r\n            this.root.removeChild(alreadyDisplayingSvg);\r\n        }\r\n    }\r\n\r\n    public generate(packageName: string, path?: string) {\r\n        this.$graphModel.package = packageName;\r\n        this.$graphModel.genPath = path;\r\n\r\n        let data, result = Util.toJson(this.$graphModel);\r\n        data = JSON.stringify(result, null, '\\t');\r\n        if (window['java'] && typeof window['java'].generate === 'function') {\r\n            window['java'].generate(data);\r\n        }\r\n    }\r\n// REFACTORING dd\r\n    private readElement(parent: any, origData: any): void {\r\n        let children = parent.childNodes;\r\n        let origChildDat = origData.childNodes;\r\n\r\n        for (let cd = 0; cd < children.length; cd++) {\r\n            let child = children[cd];\r\n\r\n            let tagName = child.tagName;\r\n            if (this.containerElements.indexOf(tagName) !== -1) {\r\n                this.readElement(child, origChildDat[cd]);\r\n            } else if (tagName in this.relevantStyles) {\r\n                let styleDef = window.getComputedStyle(origChildDat[cd]);\r\n\r\n                let styleString = '';\r\n                for (let st = 0; st < this.relevantStyles[tagName].length; st++) {\r\n                    styleString += this.relevantStyles[tagName][st] + ':' + styleDef.getPropertyValue(this.relevantStyles[tagName][st]) + '; ';\r\n                }\r\n\r\n                child.setAttribute('style', styleString);\r\n            }\r\n        }\r\n    }\r\n\r\n    private createPattern(): Element {\r\n        const defs = Util.createShape({ tag: 'defs' });\r\n        const pattern = Util.createShape({\r\n            tag: 'pattern',\r\n            id: 'raster',\r\n            patternUnits: 'userSpaceOnUse',\r\n            width: 40,\r\n            height: 40\r\n        });\r\n        const path = 'M0 4 L0 0 L4 0 M36 0 L40 0 L40 4 M40 36 L40 40 L36 40 M4 40 L0 40 L0 36';\r\n        const cross = Util.createShape({\r\n            tag: 'path',\r\n            d: path,\r\n            stroke: '#DDD',\r\n            'stroke-width': 1,\r\n            fill: 'none'\r\n        });\r\n\r\n        const rect = Util.createShape({\r\n            tag: 'rect',\r\n            x: 0,\r\n            y: 0,\r\n            width: 40,\r\n            height: 40,\r\n            fill: 'none'\r\n        });\r\n        pattern.appendChild(rect);\r\n        pattern.appendChild(cross);\r\n        defs.appendChild(pattern);\r\n        return defs;\r\n    }\r\n\r\n    private clearSvgRoot() {\r\n        const root = this.root;\r\n        this.$graphModel.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n        while (root.firstChild) {\r\n            root.removeChild(root.firstChild);\r\n        }\r\n\r\n        root.appendChild(this.createPattern());\r\n        let fillValue = 'none';\r\n        if (this.options.raster) {\r\n            fillValue = 'url(#raster)';\r\n        }\r\n        let background = Util.createShape({\r\n            tag: 'rect',\r\n            id: 'background',\r\n            width: 5000,\r\n            height: 5000,\r\n            x: 0,\r\n            y: 0,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: fillValue\r\n        });\r\n        root.appendChild(background);\r\n\r\n        // delete inline Edit, if exists\r\n        let inlineEdit = document.getElementById('inlineEdit');\r\n        if (inlineEdit && document.body.contains(inlineEdit)) {\r\n            document.body.removeChild(inlineEdit);\r\n        }\r\n    }\r\n\r\n    private getLayout(): Layout {\r\n        if (this.currentlayout) {\r\n            return this.currentlayout;\r\n        }\r\n\r\n        let layout = this.options.layout || '';\r\n        if (this.layoutFactory[layout]) {\r\n            this.currentlayout = new this.layoutFactory[layout]();\r\n        } else {\r\n            this.currentlayout = new layouts.DagreLayout();\r\n        }\r\n\r\n        return this.currentlayout;\r\n    }\r\n\r\n    private initFactories() {\r\n\r\n        let noder = nodes;\r\n        this.nodeFactory = {};\r\n        for (let id in noder) {\r\n            if (noder.hasOwnProperty(id) === true) {\r\n                this.nodeFactory[id] = noder[id];\r\n            }\r\n        }\r\n\r\n        let edger = edges;\r\n        this.edgeFactory = {};\r\n        for (let id in edger) {\r\n            if (edger.hasOwnProperty(id) === true) {\r\n                this.edgeFactory[id] = edger[id];\r\n            }\r\n        }\r\n\r\n        let layouter = layouts;\r\n        this.layoutFactory = {};\r\n        for (let id in layouter) {\r\n            if (layouter.hasOwnProperty(id) === true) {\r\n                this.layoutFactory[id] = layouter[id];\r\n            }\r\n        }\r\n    }\r\n\r\n    private initCanvas() {\r\n        if (this.options.canvas) {\r\n            this.$view = document.getElementById(this.options.canvas);\r\n        }\r\n        if (!this.$view) {\r\n            this.$view = document.createElement('div');\r\n            this.$view.setAttribute('class', 'diagram');\r\n            document.body.appendChild(this.$view);\r\n        }\r\n    }\r\n\r\n    private initFeatures(features: any) {\r\n\r\n        if (features) {\r\n            if (features.newedge) {\r\n                EventBus.subscribe(new NewEdge(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            this.importFile = new ImportFile(this);\r\n            if (features.import) {\r\n                EventBus.subscribe(this.importFile, 'dragover', 'dragleave', 'drop');\r\n            }\r\n            if (features.zoom) {\r\n                let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n                EventBus.subscribe(new Zoom(this), mousewheel);\r\n            }\r\n            if (features.drag) {\r\n                EventBus.subscribe(new Drag(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            if (features.select) {\r\n                EventBus.subscribe(new Select(this), 'click', 'drag');\r\n            }\r\n            if (features.palette) {\r\n                new Palette(this).show();\r\n            }\r\n            if (features.toolbar) {\r\n                new Toolbar(this).show();\r\n            }\r\n            if (features.properties) {\r\n                let propertyPanel = new PanelGroup(this);\r\n                // let dispatcher = new PropertiesDispatcher(this);\r\n                EventBus.subscribe(propertyPanel, 'dblclick', 'click', EventBus.RELOADPROPERTIES);\r\n                propertyPanel.show();\r\n            }\r\n            if (features.addnode) {\r\n                EventBus.subscribe(new AddNode(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n        }\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport {DiagramElement, Point} from './BaseElements';\r\nimport {Association} from './edges';\r\nimport {Node} from './nodes';\r\nimport {Control} from '../Control';\r\nimport {Util} from '../util';\r\nimport {EventBus} from '../EventBus';\r\n\r\nexport class GraphModel extends DiagramElement {\r\n    nodes: Node[] = [];\r\n    edges: Association[] = [];\r\n    package: string;\r\n    genPath: string;\r\n    $isLoading: boolean;\r\n\r\n    public load(data?: any) {\r\n\r\n        this.$isLoading = true;\r\n        data = data || {};\r\n        this.property = data.type || data.property || 'classdiagram';\r\n        this.id = 'RootElement';\r\n        if (data.nodes) {\r\n            for (let node of data.nodes) {\r\n                this.addNode(node);\r\n            }\r\n        }\r\n        if (data.edges) {\r\n            for (let edge of data.edges) {\r\n                this.addEdge(edge);\r\n            }\r\n        }\r\n\r\n        this.$isLoading = false;\r\n    }\r\n\r\n    public getNodeByPosition(x: number, y: number): Node {\r\n        for (let node of this.nodes) {\r\n            let posOfNode: Point = (<Node>node).getPos();\r\n            let sizeOfNode: Point = (<Node>node).getSize();\r\n\r\n            if ((posOfNode.x <= x && (posOfNode.x + sizeOfNode.x) >= x)\r\n                && (posOfNode.y <= y && (posOfNode.y + sizeOfNode.y) >= y)) {\r\n                return node;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.initCanvas();\r\n        return this;\r\n    }\r\n\r\n    public addElement(type: string): boolean {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n        if (element) {\r\n            Util.saveToLocalStorage(this);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues: Object): DiagramElement {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n\r\n        // position\r\n        if (optionalValues) {\r\n            if (optionalValues.hasOwnProperty('x') && optionalValues.hasOwnProperty('y')) {\r\n                let x = optionalValues['x'];\r\n                let y = optionalValues['y'];\r\n                element.withPos(x, y);\r\n            }\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return element;\r\n    }\r\n\r\n    public removeAllElements(): void {\r\n\r\n        let nodesLength = this.nodes.length;\r\n        for (let i = 0; i < nodesLength; i++) {\r\n            this.removeElement(this.nodes[0].id);\r\n        }\r\n\r\n        this.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n    }\r\n\r\n    public removeElement(id: string): boolean {\r\n\r\n        let element = this.getDiagramElementById(id);\r\n        if (!element) {\r\n            return false;\r\n        }\r\n\r\n        (<Graph>this.$owner).removeElement(element);\r\n\r\n        if (element instanceof Node) {\r\n\r\n            let idxOfNode = this.nodes.indexOf(element);\r\n            if (idxOfNode > -1) {\r\n                this.nodes.splice(idxOfNode, 1);\r\n            }\r\n\r\n            while (element.$edges.length > 0) {\r\n                this.removeElement(element.$edges[0].id);\r\n            }\r\n\r\n            element.$edges = [];\r\n        }\r\n        else if (element instanceof Association) {\r\n\r\n            let idxOfEdge = this.edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                this.edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from source\r\n            idxOfEdge = element.$sNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$sNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from target\r\n            idxOfEdge = element.$tNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$tNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return true;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        const size = 10;\r\n        const path = `M${-size} 0 L${+size} 0 M0 ${-size} L0 ${+size}`;\r\n\r\n        const attr = {\r\n            tag: 'path',\r\n            id: 'origin',\r\n            d: path,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: 'none'\r\n        };\r\n        let shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: 0 - size,\r\n            y: 0 - size / 1.5,\r\n            'text-anchor': 'end',\r\n            'font-family': 'Verdana',\r\n            'font-size': '9',\r\n            fill: '#999'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = '(0, 0)';\r\n\r\n        let group = this.createShape({tag: 'g'});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEUP, EventBus.ELEMENTMOUSELEAVE, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTMOUSEWHEEL, EventBus.ELEMENTCLICK, EventBus.ELEMENTDRAG];\r\n    }\r\n\r\n    public getNewId(prefix?: string): string {\r\n        let id = (prefix ? prefix.toLowerCase() + '-' : '') + Math.floor(Math.random() * 100000);\r\n        return id;\r\n    }\r\n\r\n    public getEdgeById(id: string): Association {\r\n        for (let edge of this.edges) {\r\n            if (edge.id === id) {\r\n                return edge;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    public getDiagramElementById(id: string): DiagramElement {\r\n\r\n        return this.getNodeById(id) || this.getEdgeById(id);\r\n    }\r\n\r\n    /**\r\n     * Add an edge with data in json file. Optional you can say, that the edge should have\r\n     * the points of source node and target node.\r\n     * @param edge information about edge in json\r\n     * @param withPosOfNodes optional. set points to line of source and target node\r\n     */\r\n    public addEdge(edge: any, withPosOfNodes?: boolean): Association {\r\n\r\n        // lookup in factoryedges and check if the edge type realy exists\r\n        if (edge && edge.type) {\r\n            const graph = (<Graph>this.$owner);\r\n            let typeExists = false;\r\n            for (let edgeType in graph.edgeFactory) {\r\n                if (edgeType === edge.type) {\r\n                    typeExists = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!typeExists) {\r\n                edge.type = 'Association';\r\n            }\r\n        }\r\n\r\n        let type = edge.type || 'Association';\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n\r\n        let newEdge = <Association>this.createElement(type, id, edge);\r\n        newEdge.type = type;\r\n\r\n        let source: Node;\r\n        let sourceAsString: string = edge.source.id || edge.source;\r\n        if (sourceAsString) {\r\n            source = this.getNodeById(sourceAsString);\r\n            if (!source) {\r\n                let nodeID = edge.source;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                source = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                source.init(this);\r\n            }\r\n        }\r\n\r\n        let target: Node;\r\n        let targetAsString: string = edge.target.id || edge.target;\r\n        if (targetAsString) {\r\n            target = this.getNodeById(targetAsString);\r\n            if (!target) {\r\n                let nodeID = edge.target;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                target = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                target.init(this);\r\n            }\r\n        }\r\n\r\n        newEdge.withItem(source, target);\r\n\r\n        if (withPosOfNodes) {\r\n            let srcX = source.getPos().x + (source.getSize().x / 2);\r\n            let srcY = source.getPos().y + (source.getSize().y / 2);\r\n\r\n            let targetX = target.getPos().x + (target.getSize().x / 2);\r\n            let targetY = target.getPos().y + (target.getSize().y / 2);\r\n\r\n            newEdge.addPoint(srcX, srcY);\r\n            newEdge.addPoint(targetX, targetY);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public createElement(type: string, id: string, data: Object): DiagramElement {\r\n        const graph = <Graph>this.$owner;\r\n        let element: DiagramElement;\r\n        if (graph.nodeFactory[type]) {\r\n            element = new graph.nodeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.nodes.push(<Node>element);\r\n        }\r\n        if (graph.edgeFactory[type]) {\r\n            element = new graph.edgeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.edges.push(<Association>element);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public getNodeById(id: string): Node {\r\n        for (let node of this.nodes) {\r\n            if (node.id === id) {\r\n                return node;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    private initCanvas() {\r\n        const graph = <Graph>this.$owner;\r\n        graph.canvasSize = {width: graph.$view.clientWidth, height: graph.$view.clientHeight};\r\n        graph.root = Util.createShape({\r\n            tag: 'svg',\r\n            id: 'root',\r\n            width: graph.canvasSize.width,\r\n            height: graph.canvasSize.height\r\n            // FIXME,viewBox: `${this.$graph.options.origin.x * -1} ${this.$graph.options.origin.y * -1} ${this.$graph.canvasSize.width} ${this.$graph.canvasSize.height}`\r\n        });\r\n        this.$view = graph.root;\r\n        graph.$view.appendChild(graph.root);\r\n\r\n        let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    private addNode(node: Node): Node {\r\n        let type = node['type'] || node.property || 'Node';\r\n        type = Util.toPascalCase(type);\r\n        let id = node['id'] || node['name'] || this.getNewId(type);\r\n\r\n        return <Node>this.createElement(type, id, node);\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction } from './index';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\n\r\nexport abstract class Aggregate extends Association {\r\n\r\n    protected $diamond: Element;\r\n\r\n    public getSVG(): Element {\r\n\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled diamond\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n        };\r\n\r\n        this.$diamond = this.createShape(attr);\r\n\r\n        group.appendChild(this.$diamond);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint: Point = this.$points[0];\r\n        let direction: Direction = Direction.Down;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if (this.$sNode.id === startNode.id || this.$points.length == 2) {\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$diamond.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint: Point, direction: Direction): string {\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                path = `M${startX} ${startY} L${startX + 6} ${startY + 10} L${startX} ${startY + 20} L${startX - 6} ${startY + 10} Z`;\r\n                startPoint.y = startPoint.y+20;\r\n                break;\r\n            case Direction.Right:\r\n                path = `M${startX} ${startY} L${startX - 10} ${startY + 6} L${startX - 20} ${startY} L${startX - 10} ${startY - 6} Z`;\r\n                startPoint.x = startPoint.x-20;\r\n                break;\r\n            case Direction.Left:\r\n                path = `M${startX} ${startY} L${startX + 10} ${startY - 6} L${startX + 20} ${startY} L${startX + 10} ${startY + 6} Z`;\r\n                startPoint.x = startPoint.x+20;\r\n                break;\r\n            case Direction.Down:\r\n                path = `M${startX} ${startY} L${startX - 6} ${startY - 10} L${startX} ${startY - 20} L${startX + 6} ${startY - 10} Z`;\r\n                startPoint.y = startPoint.y-20;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Aggregation extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'white');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { DiagramElement, Line, Point } from '../BaseElements';\r\nimport { Node } from '../nodes';\r\nimport { InfoText } from '../nodes/InfoText';\r\nimport { Util } from '../../util';\r\nimport { EventBus } from '../../EventBus';\r\nimport * as edges from '../edges';\r\nimport { Graph } from '../Graph';\r\n\r\nexport const enum Direction {\r\n    Up, Down, Left, Right\r\n}\r\n\r\nexport class Association extends DiagramElement {\r\n    public source: string;\r\n    public target: string;\r\n    public type: string;\r\n    public $sNode: Node;\r\n    public $tNode: Node;\r\n    public lineStyle: string;\r\n    public $points: Point[] = [];\r\n    public $pathSvg: Element;\r\n    public $pathWideSvg: Element;\r\n    public info: InfoText;\r\n    public sourceInfo: InfoText;\r\n    public targetInfo: InfoText;\r\n    $m: number;\r\n    $n: number;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super();\r\n\r\n        this.withData(data);\r\n    }\r\n\r\n    public withData(data: JSON | string | Object | any): Association {\r\n\r\n        if (!data) {\r\n            return this;\r\n        }\r\n        let srcInfo;\r\n        let trgInfo;\r\n\r\n        if (data.source && typeof data.source !== 'string') {\r\n            srcInfo = data.source;\r\n        }\r\n        else if (data.sourceInfo && typeof data.sourceInfo !== 'string') {\r\n            srcInfo = data.sourceInfo;\r\n        }\r\n\r\n        if (srcInfo) {\r\n            this.sourceInfo = new InfoText(srcInfo);\r\n            this.sourceInfo.$owner = this;\r\n        }\r\n\r\n        if (data.target && typeof data.target !== 'string') {\r\n            trgInfo = data.target;\r\n        }\r\n        else if (data.targetInfo && typeof data.targetInfo !== 'string') {\r\n            trgInfo = data.targetInfo;\r\n        }\r\n\r\n        if (trgInfo) {\r\n            this.targetInfo = new InfoText(trgInfo);\r\n            this.targetInfo.$owner = this;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    public updateSrcCardinality(cardinality: string): void {\r\n        this.sourceInfo = this.updateCardinality(this.$sNode, this.sourceInfo, cardinality);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetCardinality(cardinality: string): void {\r\n        this.targetInfo = this.updateCardinality(this.$tNode, this.targetInfo, cardinality);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateSrcProperty(property: string): void {\r\n        this.sourceInfo = this.updateProperty(this.$sNode, this.sourceInfo, property);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetProperty(property: string): void {\r\n        this.targetInfo = this.updateProperty(this.$tNode, this.targetInfo, property);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public withItem(source: Node, target: Node): Association {\r\n        source.$edges.push(this);\r\n        target.$edges.push(this);\r\n        this.$sNode = source;\r\n        this.$tNode = target;\r\n        this.source = source.id;\r\n        this.target = target.id;\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let group = Util.createShape({ tag: 'g', id: this.id, class: 'SVGEdge' });\r\n\r\n        let path: string = this.getPath();\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'none'\r\n        };\r\n        let pathLine = this.createShape(attr);\r\n\r\n        //attr['style'] = 'stroke-width:20;opacity:0;width:20;height:20';\r\n        let extendedPathLine = Util.createShape(attr);\r\n\r\n        group.appendChild(extendedPathLine);\r\n        group.appendChild(pathLine);\r\n\r\n        if (this.sourceInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.sourceInfo.getSVG());\r\n        }\r\n        if (this.targetInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.targetInfo.getSVG());\r\n        }\r\n\r\n        this.$pathWideSvg = extendedPathLine;\r\n        this.$pathSvg = pathLine;\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.EDITOR, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    public convertEdge(type: string, newId: string, redraw?: boolean): Association {\r\n        if (!edges[type]) {\r\n            return this;\r\n        }\r\n\r\n        let newEdge: Association = new edges[type]();\r\n        newEdge.withItem(this.$sNode, this.$tNode);\r\n        newEdge.id = newId;\r\n        newEdge.type = type;\r\n        newEdge.lineStyle = this.lineStyle;\r\n        newEdge.$owner = this.$owner;\r\n\r\n        if (this.sourceInfo) {\r\n            newEdge.sourceInfo = new InfoText({ property: this.sourceInfo.property, cardinality: this.sourceInfo.cardinality });\r\n            newEdge.sourceInfo.$owner = newEdge;\r\n        }\r\n\r\n        if (this.targetInfo) {\r\n            newEdge.targetInfo = new InfoText({ property: this.targetInfo.property, cardinality: this.targetInfo.cardinality });\r\n            newEdge.targetInfo.$owner = newEdge;\r\n        }\r\n\r\n        this.$points.forEach(point => {\r\n            newEdge.addPoint(point.x, point.y);\r\n        });\r\n\r\n        let graph = <Graph>this.getRoot();\r\n        if (!graph) {\r\n            return this;\r\n        }\r\n\r\n        // update model. insert the edge exact on the same index, like the old edge\r\n        let idx = graph.$graphModel.edges.indexOf(this);\r\n        graph.$graphModel.removeElement(this.id);\r\n        if (idx > -1) {\r\n            graph.$graphModel.edges.splice(idx, 0, newEdge);\r\n        }\r\n        else {\r\n            graph.$graphModel.edges.push(newEdge);\r\n        }\r\n\r\n        if (!redraw) {\r\n            return newEdge;\r\n        }\r\n\r\n        let svgRoot: Element;\r\n        if (graph) {\r\n            svgRoot = graph.root;\r\n        }\r\n        else {\r\n            svgRoot = document.getElementById('root');\r\n        }\r\n        let newEdgeSvg = newEdge.getSVG();\r\n\r\n        // update graph\r\n        graph.removeElement(this);\r\n        svgRoot.appendChild(newEdgeSvg);\r\n\r\n        // redraw the edge from both sides to get the correct display\r\n        // if the type is edge, so the path can be redraw.\r\n        // if not, so the inherited class redraw the path with his own logic\r\n\r\n        let dontDrawPath: boolean = (type !== 'Edge');\r\n        newEdge.redraw(newEdge.$sNode, dontDrawPath);\r\n        newEdge.redraw(newEdge.$tNode, dontDrawPath);\r\n\r\n        EventBus.register(newEdge, newEdgeSvg);\r\n\r\n        this.sourceInfo = undefined;\r\n        this.targetInfo = undefined;\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n        // redraw the first point\r\n        // check which point is the near to startnode\r\n        let endPoint: Point;\r\n        let recalcPoint: Point;\r\n        let endPointIdx: number;\r\n\r\n        if (this.$sNode.id === startNode.id) {\r\n            recalcPoint = this.$points[0];\r\n            endPointIdx = 1;\r\n        } else if (this.$tNode.id === startNode.id) {\r\n            recalcPoint = this.$points[this.$points.length - 1];\r\n            endPointIdx = this.$points.length - 2;\r\n        }\r\n\r\n        endPoint = this.$points[endPointIdx];\r\n\r\n        // calculate and set new position of point to redraw\r\n        this.calcIntersection(startNode, recalcPoint, endPoint);\r\n\r\n        // remove the 2nd point next to startnode, if the node was dragged upper the point\r\n        if (this.$points.length > 2 && this.$tNode.id === startNode.id && endPoint.y > (startNode.getPos().y + (startNode.getSize().y / 2))) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$tNode.id === startNode.id && this.$points.length === 2) {\r\n            this.calcIntersection(this.$sNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (this.$points.length > 2 && this.$sNode.id === startNode.id && (startNode.getPos().y + (startNode.getSize().y / 2) > endPoint.y)) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$sNode.id === startNode.id && this.$points.length === 2) {\r\n\r\n            this.calcIntersection(this.$tNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (!dontDrawPoints) {\r\n            this.redrawPointsAndInfo();\r\n        }\r\n    }\r\n\r\n    public getPath(): string {\r\n\r\n        if (this.$points.length === 0) {\r\n            return '';\r\n        }\r\n\r\n        let path: string = 'M';\r\n        for (let i = 0; i < this.$points.length; i++) {\r\n            let point: Point = this.$points[i];\r\n            if (i > 0) {\r\n                path += 'L';\r\n            }\r\n            path += Math.floor(point.x) + ' ' + Math.floor(point.y) + ' ';\r\n        }\r\n\r\n        return path;\r\n    }\r\n    public calcInfoPosNew(infoTxt: InfoText, node: Node): Point {\r\n\r\n        if (!infoTxt || !node) {\r\n            return null;\r\n        }\r\n\r\n        // 1. step: get direction\r\n        let startPoint: Point;\r\n        let nextToStartPoint: Point;\r\n        if (this.$sNode.id === node.id) {\r\n            startPoint = this.$points[0];\r\n            nextToStartPoint = this.$points[1];\r\n        }\r\n        else if (this.$tNode.id === node.id) {\r\n            startPoint = this.$points[this.$points.length - 1];\r\n            nextToStartPoint = this.$points[this.$points.length - 2];\r\n        }\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(node, startPoint);\r\n\r\n        let x: number;\r\n        let y: number;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                break;\r\n            case Direction.Right:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x - (infoTxt.getSize().x) - 5;\r\n                break;\r\n            case Direction.Left:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x + 5;\r\n                break;\r\n            case Direction.Down:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        // assign calculated position to infotext\r\n        return new Point(x, y);\r\n    }\r\n\r\n    public clearPoints(): any {\r\n        this.$points = [];\r\n        this.$points = [];\r\n    }\r\n\r\n    public addPoint(x: number, y: number): Point[] {\r\n        this.$points.push(new Point(x, y));\r\n\r\n        return this.$points;\r\n    }\r\n\r\n    protected redrawPointsAndInfo(): void {\r\n        // redraw the edge with the new position\r\n        let path: string = this.getPath();\r\n        this.$pathSvg.setAttributeNS(null, 'd', path);\r\n        this.$pathWideSvg.setAttributeNS(null, 'd', path);\r\n\r\n        this.redrawSourceInfo();\r\n        this.redrawTargetInfo();\r\n    }\r\n\r\n    protected redrawSourceInfo() {\r\n        if (this.sourceInfo) {\r\n            let newPosOfSrc = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.redrawFromEdge(newPosOfSrc);\r\n        }\r\n    }\r\n\r\n    protected redrawTargetInfo() {\r\n        if (this.targetInfo) {\r\n            let newPosOfTarget = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.redrawFromEdge(newPosOfTarget);\r\n        }\r\n    }\r\n\r\n    protected getDirectionOfPointToNode(node: Node, pointNearNode: Point): Direction {\r\n        /*\r\n            Example to calculate the direction of nearest point to Node\r\n\r\n            node\r\n         x1_ _ _ _\r\n          |       |\r\n          |       |. pointNearNode\r\n          |       |\r\n          |_ _ _ x2\r\n\r\n          the calculation would return Direction.Left\r\n        */\r\n\r\n        let x1: Point = node.getPos();\r\n        let x2: Point = new Point((x1.x + node.getSize().x), (x1.y + node.getSize().y));\r\n        let direction: Direction = Direction.Down;\r\n\r\n        if (x1.y >= pointNearNode.y) {\r\n            direction = Direction.Down;\r\n        }\r\n        if (x2.y <= pointNearNode.y) {\r\n            direction = Direction.Up;\r\n        }\r\n        if (x1.x >= pointNearNode.x) {\r\n            direction = Direction.Right;\r\n        }\r\n        if (x2.x <= pointNearNode.x) {\r\n            direction = Direction.Left;\r\n        }\r\n\r\n        return direction;\r\n    }\r\n\r\n    private updateCardinality(node: Node, infoText: InfoText, cardinality: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'cardinality': cardinality });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.cardinality = cardinality;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateCardinality(cardinality);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private updateProperty(node: Node, infoText: InfoText, property: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'property': property });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.property = property;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateProperty(property);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private calcIntersection(startNode: Node, recalcPoint: Point, endPoint: Point): Point {\r\n\r\n        // https://www.mathelounge.de/21534/schnittpunkt-einer-linie-mit-den-randern-eines-rechtecks\r\n        let h = startNode.getSize().y;\r\n        let w = startNode.getSize().x;\r\n\r\n        let x1: number = startNode.getPos().x + (w / 2);\r\n        let y1: number = startNode.getPos().y + (h / 2);\r\n\r\n        let x2: number = endPoint.x;\r\n        let y2: number = endPoint.y;\r\n\r\n        let newX: number = recalcPoint.x;\r\n        let newY: number = recalcPoint.y;\r\n\r\n        if (x2 > x1) {\r\n            newX = x1 + (w / 2);\r\n        }\r\n        else if (x2 < x1) {\r\n            newX = x1 - (w / 2);\r\n        }\r\n        else {\r\n            newX = x1;\r\n        }\r\n\r\n        if ((x2 - x1) !== 0) {\r\n            newY = ((y2 - y1) / (x2 - x1) * (newX - x1)) + y1;\r\n        }\r\n        else {\r\n            if (y1 > y2) {\r\n                newY = startNode.getPos().y;\r\n            }\r\n            else {\r\n                newY = startNode.getPos().y + h;\r\n            }\r\n        }\r\n\r\n        // if the statement is not true, so the intersection is at the horizontal line\r\n        if (!((y1 - (h / 2) <= newY) && newY <= y1 + (h / 2))) {\r\n\r\n            if (y2 > y1) {\r\n                newY = y1 + (h / 2);\r\n            }\r\n            else {\r\n                newY = y1 - (h / 2);\r\n            }\r\n\r\n            if ((x2 - x1) !== 0) {\r\n                let tmp = ((y2 - y1) / (x2 - x1));\r\n                newX = (newY + (tmp * x1) - y1) / tmp;\r\n            }\r\n            else {\r\n                newX = x1;\r\n            }\r\n        }\r\n\r\n        recalcPoint.x = Math.ceil(newX);\r\n        recalcPoint.y = Math.ceil(newY);\r\n\r\n        return null;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Composition extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'black');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { Association } from './Association';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\nimport { Direction } from '../index';\r\n\r\nexport class Generalisation extends Association {\r\n\r\n    public $TARGET_ELEMENT_HEIGHT : number = 12;\r\n    protected $targetElement: Element;\r\n\r\n    public getSVG(): Element {\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction : Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled arrow\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'white'\r\n          };\r\n\r\n        this.$targetElement = this.createShape(attr);\r\n\r\n        group.appendChild(this.$targetElement);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean) : void {\r\n\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint : Point = this.$points[0];\r\n        let direction : Direction = Direction.Up;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if(this.$sNode.id === startNode.id || this.$points.length == 2){\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$targetElement.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint : Point, direction : Direction) : string{\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch(direction){\r\n            case Direction.Up:\r\n            path = `M${startX} ${startY+3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y+12;\r\n            break;\r\n            case Direction.Right:\r\n            path = `M${startX-3} ${startY} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x-12;\r\n            break;\r\n            case Direction.Left:\r\n            path = `M${startX+3} ${startY} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x+12;\r\n            break;\r\n            case Direction.Down:\r\n            path = `M${startX} ${startY-3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y-12;\r\n            break;\r\n            default :\r\n            break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n\r\n}\r\n","import { Generalisation } from './Generalisation';\r\n\r\nexport class Implements extends Generalisation {\r\n\r\n    public getSVG(): Element {\r\n        let group = super.getSVG();\r\n\r\n        this.$pathSvg.setAttributeNS(null, 'stroke-dasharray', '3, 3');\r\n\r\n        return group;\r\n    }\r\n}\r\n","export * from './Association';\r\nexport * from './Aggregate';\r\nexport * from './Aggregation';\r\nexport * from './Composition';\r\nexport * from './Generalisation';\r\nexport * from './Implements';","export * from './edges';\r\nexport * from './nodes';\r\nexport * from './BaseElements';\r\nexport * from './Graph';\r\nexport * from './Model';\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Attribute extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 28.06.2017.\r\n */\r\nimport {Control} from \"../../Control\";\r\n\r\nexport class AutoComplete extends Control {\r\n    private $inputField:HTMLInputElement;\r\n    private $dataList:HTMLDataListElement;\r\n    private $selected:HTMLSelectElement;\r\n    private $items:HTMLDivElement;\r\n    private isMultiple:boolean;\r\n\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        let div:HTMLDivElement = document.createElement('div');\r\n        this.$view = div;\r\n        this.$inputField = document.createElement('input');\r\n        this.$dataList = document.createElement(\"datalist\");\r\n        this.$dataList.id = \"data_\"+this.id;\r\n        this.$inputField.setAttribute(\"list\", \"data_\"+this.id);\r\n        if(data[\"value\"]) {\r\n            let values = data[\"value\"];\r\n            this.isMultiple = data[\"multiple\"] != null;\r\n            let option:HTMLOptionElement;\r\n            if(this.isMultiple) {\r\n                this.$selected = document.createElement(\"select\");\r\n                this.$selected.className = \"hide\";\r\n                this.$selected.multiple = true;\r\n\r\n                this.$selected.id = this.id;\r\n                this.$items = document.createElement(\"div\");\r\n                this.$items.className = \"selectedList\";\r\n                div.appendChild(this.$items);\r\n                this.$inputField.className = \"selectedInput\";\r\n                div.appendChild(this.$selected);\r\n                this.$view[\"style\"].setProperty(\"float\", \"left\");\r\n                let that = this;\r\n                this.$inputField.oninput = function(){that.onChange();}\r\n            } else {\r\n                this.$inputField.id = this.id;\r\n            }\r\n            for (let attr in values) {\r\n                if (!values.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                option = document.createElement(\"option\");\r\n                option.value = values[attr];\r\n                this.$dataList.appendChild(option);\r\n                if(this.isMultiple) {\r\n                    option = document.createElement(\"option\");\r\n                    option.value = values[attr];\r\n                    option.innerHTML = values[attr];\r\n                    this.$selected.appendChild(option);\r\n                }\r\n        }\r\n\r\n            div.appendChild(this.$inputField);\r\n            div.appendChild(this.$dataList);\r\n        }\r\n\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n            if(this.isMultiple) {\r\n                div.appendChild(this.$selected);\r\n            }\r\n        }\r\n\r\n        parent.appendChild(this);\r\n    }\r\n\r\n    public onChange() : void {\r\n        let textValue:string = this.$inputField.value;\r\n        if(textValue.length<1) {\r\n            return;\r\n        }\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == textValue) {\r\n                if(item.selected == false) {\r\n                    item.selected = true;\r\n                    item.defaultSelected = true;\r\n                    let test = document.createElement(\"li\");\r\n                    let that = this;\r\n                    test.onclick = function() {that.onDelete(item.value, test);};\r\n                    test.className = \"selectedItem\";\r\n                    test.innerHTML = item.value;\r\n                    this.$items.appendChild(test);\r\n                    this.$inputField.value = \"\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n    public onDelete(value:string, selectedItem:HTMLLIElement) : void {\r\n        this.$items.removeChild(selectedItem);\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == value ) {\r\n                if(item.selected) {\r\n                    item.selected = false;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","import {Control} from '../../Control';\r\n\r\nexport class BR extends Control {\r\n    public load(json: JSON): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('br');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            this.$view.setAttribute(attr, data[attr]);\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\nexport class Button extends Control {\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        this.$view = document.createElement('button');\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\nimport { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\nimport { Size } from '../index';\r\nimport ClazzProperty from './ClazzProperty';\r\nimport {SymbolLibary} from './Symbol';\r\nimport {StereoType} from './StereoType';\r\nimport {GraphListener} from '../../handlers/GraphListener';\r\n\r\nexport class Class extends Node {\r\n    public attributes: Attribute[] = [];\r\n    public methods: Method[] = [];\r\n    public modifier: string;\r\n    public stereoType: string;\r\n\r\n    protected $attrHeight = 25;\r\n    protected $attrFontSize = 12;\r\n    protected $labelView: Element;\r\n\r\n    constructor(json: JSON | string | Object | any) {\r\n        super(json);\r\n        return this;\r\n    }\r\n\r\n    public load(json?: any) {\r\n        if (!json) {\r\n            json = {};\r\n        }\r\n        let y = this.$labelHeight;\r\n        let labelObj = json.name || json.id || ('New ' + this.property);\r\n\r\n        let width: number = 150;\r\n        width = Math.max(width, Util.sizeOf(labelObj).width + 60);\r\n\r\n        if (json['attributes']) {\r\n            for (let attr of json['attributes']) {\r\n\r\n                let attrObj = new Attribute(attr);\r\n                attrObj.$owner = this;\r\n                this.attributes.push(attrObj);\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(attrObj.toString()).width);\r\n                let listener = new GraphListener(attrObj);\r\n                attrObj.$data.addListener(listener);\r\n            }\r\n        }\r\n        if (json['stereotype']) {\r\n            this.stereoType = json['stereotype'];\r\n        }\r\n        if (json['methods']) {\r\n            for (let method of json['methods']) {\r\n\r\n                let methodObj = new Method(method);\r\n                methodObj.$owner = this;\r\n                this.methods.push(methodObj);\r\n\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(methodObj.toString()).width);\r\n            }\r\n            y += this.$attrHeight;\r\n        }\r\n        this.withSize(width, y);\r\n    }\r\n\r\n    public getAttributes(): Attribute[] {\r\n        return this.attributes;\r\n    }\r\n\r\n    public getMethods(): Method[] {\r\n        return this.methods;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        let icon = SymbolLibary.draw({type: 'Class', property: 'HTML', width: '50', height: '50', transform: 'translate(-26,-21)'});\r\n        return icon;\r\n        // let group = this.createShape(\r\n//    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n//    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos: Point = this.getPos();\r\n        const size: Point = this.getSize();\r\n\r\n        let group = this.createShape({ tag: 'g', id: this.id, class: 'SVGClazz', transform: 'translate(0 0)' });\r\n\r\n        if (this.stereoType) {\r\n            let type = new StereoType(this.stereoType, pos.x, pos.y);\r\n            group.appendChild(type.getSVG());\r\n        }\r\n\r\n        // Full Shape\r\n        let options = null;\r\n        let style;\r\n        let clazzName;\r\n        if (this.$owner['options']) {\r\n            let options = this.$owner['options'];\r\n            if (options) {\r\n                style = options.style;\r\n            }\r\n        }\r\n        // = = = Background = = =\r\n        if (style === 'modern') {\r\n            clazzName = 'ClazzHeader';\r\n        }\r\n        clazzName = 'ClazzHeader';\r\n        const nodeShape = this.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            height: size.y,\r\n            width: size.x,\r\n            rx: 5,\r\n            ry: 5,\r\n            fill: 'none',\r\n            stroke: 'black',\r\n            'stroke-width': 1\r\n        });\r\n        if (clazzName) {\r\n            nodeShape.setAttribute('className', clazzName);\r\n            let styleHeader = Util.getStyle('ClazzHeader');\r\n            // headerHeight = styleHeader.getNumber('height');\r\n        }\r\n\r\n        // = = = LABEL = = =\r\n        let label = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y + this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': this.$labelFontSize,\r\n            fill: 'black'\r\n        });\r\n        label.textContent = this.id;\r\n        this.$labelView = label;\r\n\r\n        group.appendChild(nodeShape);\r\n        group.appendChild(label);\r\n\r\n        // = = = ATTRIBUTES = = =\r\n        if (this.attributes.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorLabelAttr = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight,\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight,\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorLabelAttr);\r\n\r\n            let groupOfAttributes = this.createShape({ tag: 'g', id: (this.id + 'Attributes') });\r\n            groupOfAttributes.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzAttribute');\r\n            group.appendChild(groupOfAttributes);\r\n\r\n            let y = pos.y + this.$labelHeight + this.$attrHeight / 2;\r\n            for (let attr of this.attributes) {\r\n\r\n                let attrSvg = attr.getSVG();\r\n                attr.$owner = this;\r\n\r\n                attrSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                attrSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfAttributes.appendChild(attrSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        // = = = METHODS = = =\r\n        let height = this.attributes.length * this.$attrHeight;\r\n        let y = pos.y + this.$labelHeight + height + this.$attrHeight / 2;\r\n        if (this.methods.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorAttrMethods = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorAttrMethods);\r\n\r\n            let groupOfMethods = this.createShape({ tag: 'g', id: (this.id + 'Methods') });\r\n            groupOfMethods.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzMethod');\r\n            group.appendChild(groupOfMethods);\r\n\r\n            y += this.$attrHeight / 2;\r\n            for (let method of this.methods) {\r\n\r\n                let methodSvg = method.getSVG();\r\n                method.$owner = this;\r\n\r\n                methodSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                methodSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfMethods.appendChild(methodSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        this.$view = group;\r\n        return group;\r\n    }\r\n\r\n    public copy(): Class {\r\n        let copy: Class;\r\n        copy = <Class>super.copy();\r\n\r\n        // copy label\r\n        copy.id = this.id + 'Copy';\r\n\r\n        // copy attributes\r\n        this.attributes.forEach(attr => {\r\n            copy.attributes.push(new Attribute(attr.toString()));\r\n        });\r\n        // copy methods\r\n        this.methods.forEach(method => {\r\n            copy.methods.push(new Method(method.toString()));\r\n        });\r\n        copy.reCalcSize();\r\n\r\n        return copy;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTCLICK,\r\n                EventBus.ELEMENTDRAG, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES, EventBus.RELOADPROPERTIES];\r\n    }\r\n\r\n    public addProperty(value: string, type: string): any {\r\n        if (!this[type] || !value || value.length === 0) {\r\n            return;\r\n        }\r\n\r\n        let extractedValue;\r\n        if (type === 'attributes') {\r\n            extractedValue = new Attribute(value);\r\n        }\r\n        else if (type === 'methods') {\r\n            extractedValue = new Method(value);\r\n        }\r\n\r\n        for (let valueOfType of this[type]) {\r\n            if (valueOfType.toString() === extractedValue.toString()) {\r\n                alert(extractedValue.toString() + ' already exists.');\r\n                extractedValue = undefined;\r\n                return;\r\n            }\r\n        }\r\n\r\n        this[type].push(extractedValue);\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        return extractedValue;\r\n    }\r\n\r\n    public addAttribute(value: string): Attribute {\r\n        return this.addProperty(value, 'attributes');\r\n    }\r\n\r\n    public addAttributeObj(attr: Attribute): Attribute[] {\r\n        this.attributes.push(attr);\r\n        return this.getAttributes();\r\n    }\r\n\r\n    public addMethodObj(method: Method): Method[] {\r\n        this.methods.push(method);\r\n        return this.getMethods();\r\n    }\r\n\r\n    public addMethod(value: string): Method {\r\n        return this.addProperty(value, 'methods');\r\n    }\r\n\r\n    public removeAttribute(attr: Attribute): void {\r\n        let idx = this.attributes.indexOf(attr);\r\n        this.attributes.splice(idx, 1);\r\n    }\r\n\r\n    public removeMethod(method: Method): void {\r\n        let idx = this.methods.indexOf(method);\r\n        this.methods.splice(idx, 1);\r\n    }\r\n\r\n    public removeProperty(property: ClazzProperty): void {\r\n\r\n        if (property instanceof Attribute) {\r\n            this.removeAttribute(<Attribute>property);\r\n        }\r\n\r\n        if (property instanceof Method) {\r\n            this.removeMethod(<Method>property);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n        let hasSizeChanged: [boolean, Size] = this.hasSizeChanged();\r\n\r\n        if (drawOnlyIfSizeChanged) {\r\n            if (!hasSizeChanged[0]) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n\r\n        // redraw only this clazz\r\n        this.$owner.$view.removeChild(this.$view);\r\n        let newSvg = this.getSVG();\r\n        this.$owner.$view.appendChild(newSvg);\r\n        this.$view = newSvg;\r\n        EventBus.register(this, newSvg);\r\n\r\n        this.redrawEdges();\r\n    }\r\n\r\n    public hasSizeChanged(): [boolean, Size] {\r\n        let oldSize = { width: this.getSize().x, height: this.getSize().y };\r\n        let newSize = this.reCalcSize();\r\n\r\n        // size doenst changed, so nothing to redraw\r\n        if (oldSize.width === newSize.width && oldSize.height === newSize.height) {\r\n            return [false, newSize];\r\n        }\r\n\r\n        return [true, newSize];\r\n    }\r\n\r\n    public updateLabel(newLabel: string): void {\r\n        if (this.$labelView) {\r\n            this.$labelView.textContent = newLabel;\r\n        }\r\n\r\n        // update label in all edges\r\n        this.$edges.forEach(edge => {\r\n            if (this.id === edge.$sNode.id) {\r\n                edge.source = newLabel;\r\n            }\r\n            else if (this.id === edge.$tNode.id) {\r\n                edge.target = newLabel;\r\n            }\r\n        });\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        this.reDraw(true);\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.modifier = modifier;\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reCalcSize(): Size {\r\n        // label\r\n        let newWidth = 150;\r\n        newWidth = Math.max(newWidth, Util.sizeOf(this.id).width + 30);\r\n\r\n        // attributes\r\n        this.attributes.forEach(attrEl => {\r\n\r\n            let widthOfAttr;\r\n            if (attrEl.$view) {\r\n                widthOfAttr = attrEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfAttr = Util.sizeOf(attrEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfAttr + 15);\r\n        });\r\n\r\n        // methods\r\n        this.methods.forEach(methodEl => {\r\n            let widthOfMethod;\r\n            if (methodEl.$view) {\r\n                widthOfMethod = methodEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfMethod = Util.sizeOf(methodEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfMethod + 15);\r\n        });\r\n\r\n        // TODO: height has to be calculated by font-size\r\n        this.getSize().x = newWidth;\r\n        this.getSize().y = this.$labelHeight + ((this.attributes.length + this.methods.length) * this.$attrHeight)\r\n            + this.$attrHeight;\r\n\r\n        let newSize = { width: newWidth, height: this.getSize().y };\r\n\r\n        return newSize;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    private getModernStyle(): Element {\r\n        let width, height, id, size, z, item, rect, g, board, styleHeader, headerHeight, x, y;\r\n        board = this.getRoot()['board'];\r\n        styleHeader = Util.getStyle('ClazzHeader');\r\n        headerHeight = styleHeader.getNumber('height');\r\n        width = 0;\r\n        height = 10 + headerHeight;\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].getType().toLowerCase() === 'objectdiagram') {\r\n            id = this.id.charAt(0).toLowerCase() + this.id.slice(1);\r\n            item = 'Object';\r\n        } else {\r\n            id = this.id;\r\n            item = 'Class';\r\n            if (this['counter']) {\r\n                id += ' (' + this['counter'] + ')';\r\n            }\r\n        }\r\n        g = Util.create({tag: 'g', model: this});\r\n        size = Util.sizeOf(id, this);\r\n        width = Math.max(width, size.width);\r\n        if (this.attributes && this.attributes.length > 0) {\r\n            height = height + this.attributes.length * 25;\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.attributes[z], this).width);\r\n            }\r\n        } else {\r\n            height += 20;\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            height = height + this.methods.length * 25;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.methods[z], this).width);\r\n            }\r\n        }\r\n        width += 20;\r\n\r\n        let pos = this.getPos();\r\n        y = pos.y;\r\n        x = pos.x;\r\n\r\n        rect = {\r\n            tag: 'rect',\r\n            'width': width,\r\n            'height': height,\r\n            'x': x,\r\n            'y': y,\r\n            'class': item + ' draggable',\r\n            'fill': 'none'\r\n        };\r\n        g.appendChild(Util.create(rect));\r\n        g.appendChild(Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            'x': x,\r\n            'y': y,\r\n            height: headerHeight,\r\n            'width': width,\r\n            'class': 'ClazzHeader'\r\n        }));\r\n\r\n        item = Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'class': 'InfoText',\r\n            'text-anchor': 'right',\r\n            'x': x + width / 2 - size.width / 2,\r\n            'y': y + (headerHeight / 2) + (size.height / 2),\r\n            'width': size.width\r\n        });\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].type.toLowerCase() === 'objectdiagram') {\r\n            item.setAttribute('text-decoration', 'underline');\r\n        }\r\n        item.appendChild(document.createTextNode(id));\r\n\r\n        g.appendChild(item);\r\n        g.appendChild(Util.create({\r\n            tag: 'line',\r\n            x1: x,\r\n            y1: y + headerHeight,\r\n            x2: x + width,\r\n            y2: y + headerHeight,\r\n            stroke: '#000'\r\n        }));\r\n        y += headerHeight + 20;\r\n\r\n        if (this.attributes) {\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': (x + 10),\r\n                    'y': y,\r\n                    value: this.attributes[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n            if (this.attributes.length > 0) {\r\n                y -= 10;\r\n            }\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            g.appendChild(Util.create({tag: 'line', x1: x, y1: y, x2: x + width, y2: y, stroke: '#000'}));\r\n            y += 20;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': x + 10,\r\n                    'y': y,\r\n                    value: this.methods[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n        }\r\n        return g;\r\n    }\r\n}\r\n","import {Util} from '../../util';\r\nimport {DiagramElement} from '../BaseElements';\r\nimport Data from '../../Data';\r\n\r\nexport default class ClazzProperty extends DiagramElement {\r\n\r\n    // Public (+)\r\n    // Private (-)\r\n    // Protected (#)\r\n    // Package (~)\r\n\r\n    public $data = new Data();\r\n//    public modifier: string = '+';\r\n//    public name: string;\r\n//    public type: string;\r\n//    public value: string;\r\n\r\n    constructor(data: any | JSON) {\r\n        super();\r\n        this.$data.setValue('modifier', '+');\r\n        this.$data.setValue('name', null);\r\n        this.$data.setValue('type', null);\r\n        this.$data.setValue('value', null);\r\n        this.extractData(data);\r\n    }\r\n\r\n    public update(data: any | JSON): void {\r\n        this.extractData(data);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.$data.setValue('modifier', modifier);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateType(type: string): void {\r\n        this.$data.setValue('type', type);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateValue(value: string): void {\r\n        this.$data.setValue('value', value);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateName(name: string): void {\r\n        this.$data.setValue('name', name);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public getName(): string {\r\n        return this.$data.getValue('name');\r\n    }\r\n\r\n    public getModifier(): string {\r\n        return this.$data.getValue('modifier');\r\n    }\r\n\r\n    public getType(): string {\r\n        return this.$data.getValue('type');\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let attrText = {\r\n            tag: 'text',\r\n            'text-anchor': 'start',\r\n            'alignment-baseline': 'middle',\r\n        };\r\n\r\n        let attrSvg = Util.createShape(attrText);\r\n        attrSvg.textContent = this.toString();\r\n\r\n        this.$view = attrSvg;\r\n\r\n        return attrSvg;\r\n    }\r\n\r\n    public toString(): string {\r\n        let value = this.$data.getValue('value');\r\n        let result = this.$data.getValue('modifier') + ' ';\r\n        result += this.$data.getValue('name') + ' : ';\r\n        result += this.$data.getValue('type');\r\n        if (value && value.length > 0) {\r\n            result += ' = ' + this.$data.getValue('value');\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.$data.setValue('type', data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.$data.setValue('name', data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.$data.setValue('modifier', data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n\r\n            // e.g. name : string or name:string\r\n            let dataSplitted = data.split(':');\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                let name;\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.$data.setValue('modifier', firstChar);\r\n                    name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                }\r\n                else {\r\n                    name = modifierAndNameSplitted;\r\n                }\r\n                // delete whitespaces in name\r\n                name = name.replace(/ /g, '_');\r\n\r\n                this.$data.setValue('name', name);\r\n                let type = dataSplitted[1].trim() || 'String';\r\n\r\n                // if the type was entered with a small begin letter\r\n                if (type.toLowerCase() === 'string') {\r\n                    type = 'String';\r\n                }\r\n                // delete whitespaces in type\r\n                type = type.replace(/ /g, '_');\r\n                this.$data.setValue('type',  type);\r\n            } else {\r\n                dataSplitted = data.split('=');\r\n                if (dataSplitted && dataSplitted.length === 2) {\r\n                    // modifer (and or) name\r\n                    let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                    // first char is +, - or #\r\n                    let firstChar = modifierAndNameSplitted[0];\r\n                    let name;\r\n                    if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                        this.$data.setValue('modifier', firstChar);\r\n                        name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                    }\r\n                    else {\r\n                        name = modifierAndNameSplitted;\r\n                    }\r\n                    // delete whitespaces in name\r\n                    name = name.replace(/ /g, '_');\r\n\r\n                    this.$data.setValue('name', name);\r\n                    let value = dataSplitted[1].trim() || '\"\"';\r\n                    this.$data.setValue('value', value);\r\n                    this.$data.setValue('type', typeof value);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected updateTextOfView() {\r\n        if (this.$view) {\r\n            this.$view.textContent = this.toString();\r\n        }\r\n        if (this.$owner) {\r\n            Util.saveToLocalStorage(this.$owner.$owner);\r\n        }\r\n    }\r\n}\r\n","import {Node} from \"./Node\";\r\n/**\r\n * Created by Stefan on 29.03.2017.\r\n */\r\n\r\nexport class Dice extends Node {\r\n    private value: number;\r\n    private max: number = 6;\r\n    private $animation: SVGElement;\r\n    private $zoom: number = 0.6;\r\n    private $border: number = 0.2;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super(data);\r\n        this.withSize(100, 100);\r\n    }\r\n\r\n    public setNumber(number: number) {\r\n        this.value = number;\r\n        this.refresh();\r\n    }\r\n\r\n    public refresh() {\r\n        if (this.$view) {\r\n            this.reset();\r\n            let group = this.createPointValue();\r\n            if (group) {\r\n                this.$view.appendChild(group);\r\n            }\r\n        }\r\n    }\r\n\r\n    public reset() {\r\n        if (this.$view) {\r\n            while (this.$view.children.length > 1) {\r\n                if(this.$view.children.item(this.$view.children.length - 1).tagName!== \"animateTransform\") {\r\n                    console.log(this.$view.children.item(this.$view.children.length - 1));\r\n                    this.$view.removeChild(this.$view.children.item(this.$view.children.length - 1));\r\n                }else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let dice: SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x + size.x * this.$border,\r\n            y: pos.y + size.y * this.$border,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y * this.$zoom,\r\n            width: size.x * this.$zoom,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        dice.appendChild(this.createShape(attr));\r\n\r\n        let group = this.createPointValue();\r\n        if (group) {\r\n            dice.appendChild(group);\r\n        }\r\n\r\n        this.$view = dice;\r\n        return dice;\r\n    }\r\n\r\n    public animationTimeout(newValues: number[]) {\r\n        if(newValues.length>0) {\r\n            let newValue = newValues.shift();\r\n            this.setNumber(newValue);\r\n            let that=this;\r\n            setTimeout(function() {that.animationTimeout(newValues)}, 100);\r\n        }\r\n    }\r\n\r\n    public roll() {\r\n        this.startAnimation();\r\n        let values:number[]=[];\r\n        let i:number;\r\n        for(i=1;i<this.max;i++) {\r\n            values.push(i);\r\n        }\r\n        for(i=this.max;i>0;i--) {\r\n            values.push(i);\r\n        }\r\n        let that=this;\r\n        values.push( Math.floor(Math.random() * this.max)+1 );\r\n        setTimeout(function() {that.animationTimeout(values)}, 100);\r\n    }\r\n    public startAnimation() {\r\n        if(this.$animation) {\r\n            return;\r\n        }\r\n        let center = this.getPos().x+this.getSize().x /2;\r\n        const attr = {\r\n            tag: 'animateTransform',\r\n            attributeType: \"xml\",\r\n            attributeName:\"transform\",\r\n            type:\"rotate\",\r\n            dur: \"1s\",\r\n            repeatCount:\"1\",\r\n            from:\"0 \"+center+\" \"+center,\r\n            to:\"360 \"+center+\" \"+center\r\n        };\r\n        this.$animation = <SVGElement>this.createShape(attr);\r\n        this.$view.appendChild(this.$animation);\r\n    }\r\n\r\n    public stopAnimation() {\r\n        if(this.$animation) {\r\n            this.$view.removeChild(this.$animation);\r\n            this.$animation = null;\r\n        }\r\n    }\r\n\r\n    public createPointValue() :SVGElement {\r\n        if (this.value == 1) {\r\n           return this.getCircle(2, 2);\r\n        } else if (this.value == 2) {\r\n            return this.getCircle(1, 1, 3, 3);\r\n        } else if (this.value == 3) {\r\n            return this.getCircle(1, 1, 2, 2, 3, 3);\r\n        } else if (this.value == 4) {\r\n            return this.getCircle(1, 1, 1, 3, 3, 1, 3, 3);\r\n        } else if (this.value == 5) {\r\n            return this.getCircle(1, 1, 1, 3, 2, 2, 3, 1, 3, 3);\r\n        } else if (this.value == 6) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 7) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 2, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 8) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 9) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private getCircle(...values:number[]) : SVGElement {\r\n        if (values.length % 2 > 0) {\r\n            return null;\r\n        }\r\n        let size = this.getSize();\r\n        let pos = this.getPos();\r\n        //FIXME let group:SVGElement = <SVGElement>this.createShape({tag: 'g', transform: 'translate(0 0)', height: size.y, width: size.x});\r\n        let group:SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n\r\n\r\n        for (let i: number = 0; i < values.length; i += 2) {\r\n            group.appendChild(this.createCircle(values[i], values[i + 1]));\r\n        }\r\n        return group;\r\n    }\r\n    private createCircle(x:number, y:number) : SVGElement {\r\n        let size = this.getSize();\r\n        let radius = size.x / 10*this.$zoom;\r\n        let border = size.y*this.$border;\r\n        let zoom = size.y*this.$zoom;\r\n        const attr = {\r\n            tag: 'circle',\r\n            r : radius,\r\n            cx: (size.x*this.$zoom * x) / 4 + border,\r\n            cy: (size.y*this.$zoom * y) / 4 + border,\r\n            stroke:\"black\",\r\n            \"stroke-width\":\"3\",\r\n            fill:\"red\",\r\n            style: 'fill:black;stroke:black;stroke-width:2'\r\n        };\r\n        return <SVGElement>this.createShape(attr);\r\n    }\r\n}","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\n\r\nexport class Div extends Control {\r\n    private className: string;\r\n\r\n    public load(data:JSON|any): any {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = <string>data;\r\n        } else {\r\n            id = data.id;\r\n            this.className = data.class;\r\n            this.property = data.property;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let div: HTMLElement = document.getElementById(id);\r\n\r\n        if (!this.property) {\r\n            // if(inputField){\r\n            // TODO disuss how to decide, which property we should listen on...\r\n            // this.property = id;\r\n            this.property = div.getAttribute('Property');\r\n            // }\r\n        }\r\n\r\n        if (div instanceof HTMLDivElement) {\r\n            this.$view = div;\r\n        } else {\r\n            if (!div) {\r\n                this.$view = document.createElement('div');\r\n                this.$view.setAttribute('id', this.id);\r\n                this.$view.setAttribute('property', this.property);\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists+\r\n        if (data.hasOwnProperty('property')) {\r\n            this.setProperty(data['property']);\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        this.$model = entity;\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.className || entity.hasProperty(this.className)) {\r\n                if (entity.id === this.property.split('.')[0]) {\r\n                    entity.addListener(this, this.className);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        this.$view.innerHTML = <string>newValue;\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Form extends Control {\r\n    // private applyingChange: boolean = false;\r\n    private children: Object = {};\r\n    // private property: string = \"\";\r\n\r\n    /**\r\n     * Data should look like the following json:\r\n     *\r\n     * <pre>{\r\n     *      id: \"t1\",\r\n     *      control: \"form\",\r\n     *      elements: [\r\n     *          {id: \"inputField1\", property: \"talk\"},\r\n     *          {id: \"inputField2\", property: \"room\"}\r\n     *      ]\r\n     * }</pre>\r\n     * @param data\r\n     */\r\n    public load(data: any) {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let form: HTMLElement = document.getElementById(id);\r\n\r\n        if (form instanceof HTMLFormElement) {\r\n            this.$view = form;\r\n            if (this.$view.hasAttribute('property')) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            if (!form) {\r\n                this.$view = document.createElement('form');\r\n                this.$view.setAttribute('id', this.id);\r\n\r\n                if (data.hasOwnProperty('property')) {\r\n                    this.property = data['property'];\r\n                }\r\n\r\n                // add all the attributes to the form element\r\n                for (let attr in data) {\r\n                    if (data.hasOwnProperty(attr) === false) {\r\n                        continue;\r\n                    }\r\n                    if (attr === 'elements') {\r\n                        continue;\r\n                    }\r\n                    this.$view.setAttribute(attr, data[attr]);\r\n                }\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists\r\n        let objId = this.property;\r\n        let hasItem = this.$owner.hasItem(objId);\r\n        if (hasItem) {\r\n            let item = this.$owner.getItem(objId);\r\n            item.addListener(this);\r\n            this.$model = item;\r\n        }\r\n\r\n        // now create all the sub input controls\r\n        for (let field of data.elements) {\r\n            // this.createField(field);\r\n            if (field.hasOwnProperty('property')) {\r\n                let property = field['property'];\r\n                property = this.property + '.' + property;\r\n                field['property'] = property;\r\n            }\r\n            if (!field.hasOwnProperty('class')) {\r\n                field['class'] = 'input';\r\n            }\r\n\r\n            // let the Bridge load the subControl\r\n            let control: Control = this.$owner.load(field, this);\r\n\r\n            // add subControl to children\r\n            this.children[control.getId()] = control;\r\n        }\r\n\r\n    }\r\n\r\n    public setProperty(id: string): void {\r\n        this.property = id;\r\n        let keys: string[] = Object.keys(this.children);\r\n        for (let k = 0; k < keys.length; k++) {\r\n            let key = keys[k];\r\n            let childControl = this.children[key];\r\n            // only set Property, if there is a Property defined before\r\n            if (childControl.property) {\r\n                childControl.setProperty(this.property + '.' + childControl.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object,  oldValue?: Object): boolean {\r\n        if (this.$owner != null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    /**\r\n     * Here we create the form elements and put all the attributes to them in order for the Control only having to load\r\n     * the data were appending here. Alternative would be loading with the bridge and afterwards setting\r\n     * the owner to the form instead of the body..\r\n     * @param field\r\n     */\r\n    /*private createField(field: Object) {\r\n     let control = 'input';\r\n     if (field.hasOwnProperty('class')) {\r\n     control = field['class'];\r\n     }\r\n     let input = document.createElement(control);\r\n     input.setAttribute('class', control);\r\n     let id: string;\r\n     if (!field.hasOwnProperty('id')) {\r\n     // TODO: not the best solution for generating unique id's for forms...\r\n     id = this.$owner.getId();\r\n     field['id'] = id;\r\n     }\r\n     if (field.hasOwnProperty('property')) {\r\n     let property = field['property'];\r\n     property = this.id + '.' + property;\r\n     input.setAttribute('property', property);\r\n     }\r\n     for (let attr in field) {\r\n     if (attr === 'property' || attr === 'class' || !field.hasOwnProperty(attr)) {\r\n     continue;\r\n     }\r\n     input.setAttribute(attr, field[attr]);\r\n     }\r\n\r\n     this.$viewElement.appendChild(input);\r\n\r\n     let newcontrol: Control = this.$owner.load(field['id']);\r\n     this.children[newcontrol.getId()] = newcontrol;\r\n     }*/\r\n}\r\n","/**\r\n * Created by Stefan on 01.03.2017.\r\n */\r\nimport {Control} from '../../Control';\r\n\r\nexport class HTML extends Control {\r\n    constructor(data: JSON|Object|any) {\r\n        super();\r\n\r\n        let id: string;\r\n        let tag: string;\r\n\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            data = {};\r\n        } else if (data) {\r\n            id = data.id;\r\n        }\r\n        if (id) {\r\n            this.id = id;\r\n            this.$view = document.getElementById(id);\r\n        }\r\n        if (!this.$view) {\r\n            if (data) {\r\n                tag = data['tag'] || 'div';\r\n            } else {\r\n                tag = 'div';\r\n            }\r\n            this.$view = document.createElement(tag);\r\n            let parent = document.getElementsByTagName('body')[0];\r\n            parent.appendChild(this.$view);\r\n        }\r\n        if (!parent) {\r\n            return;\r\n        }\r\n        this.writeAttribute(data, this.$view);\r\n    }\r\n\r\n    private writeAttribute(properties: Object, entity?: any) {\r\n        let lowKey;\r\n        if (!entity) {\r\n            lowKey = properties['tag'] || 'div';\r\n            entity = document.createElement(lowKey);\r\n        }\r\n        for (let key in properties) {\r\n            if (!properties.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            lowKey = key.toLowerCase();\r\n            if (properties[key] === null) {\r\n                entity.setAttribute(key, '');\r\n                continue;\r\n            }\r\n\r\n            if (lowKey === 'tag' || lowKey.charAt(0) === '$' || lowKey === '$graphModel' || lowKey === 'class') {\r\n                continue;\r\n            }\r\n            if (lowKey === 'children') {\r\n                if (Array.isArray(properties[key])) {\r\n                    for (let item in properties[key]) {\r\n                        if (properties[key].hasOwnProperty(item) === false) {\r\n                            continue;\r\n                        }\r\n                        let child = this.writeAttribute(item);\r\n                        if (child) {\r\n                            entity.appendChild(child);\r\n                        }\r\n                    }\r\n                } else {\r\n                    let child = this.writeAttribute(properties[key]);\r\n                    if (child) {\r\n                        entity.appendChild(child);\r\n                    }\r\n                }\r\n                continue;\r\n            }\r\n            entity[key] = properties[key];\r\n        }\r\n        return entity;\r\n    }\r\n}\r\n","import { Point } from '../BaseElements';\r\nimport { Util } from '../../util';\r\nimport { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\n\r\nexport class InfoText extends Node {\r\n\r\n    public cardinality: string = '';\r\n    private $heightOfOneTextItem: number;\r\n    private $cardinalitySvg: Element;\r\n    private $propertySvg: Element;\r\n    private $rectBackground: Element;\r\n\r\n    constructor(info: any) {\r\n        super(info);\r\n        if (typeof (info) === 'string') {\r\n            this.id = info;\r\n        } else {\r\n            if (info.property) {\r\n                this.property = info.property;\r\n            }\r\n            if (info.cardinality) {\r\n                this.cardinality = info.cardinality;\r\n            }\r\n        }\r\n        this.$isDraggable = true;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n    }\r\n\r\n    public updateCardinality(cardinality: string): void {\r\n        this.cardinality = cardinality;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (this.$rectBackground) {\r\n            this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n            this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n        }\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((cardinality.length === 0 && this.property.length > 0) || !this.$cardinalitySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$cardinalitySvg) {\r\n            this.$cardinalitySvg.textContent = cardinality;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.property.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    public updateProperty(property: string): void {\r\n        this.property = property;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((property.length === 0 && this.cardinality.length > 0) || !this.$propertySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$propertySvg) {\r\n            this.$propertySvg.textContent = property;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.cardinality.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos: Point = this.getPos();\r\n        let group = Util.create({ tag: 'g', class: 'SVGEdgeInfo', transform: 'translate(0, 0)' });\r\n\r\n        // append rect as background for text items\r\n        this.$rectBackground = Util.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y - this.$heightOfOneTextItem + 3,\r\n            width: this.getSize().x,\r\n            height: this.getSize().y,\r\n            fill: '#DDD',\r\n            'stroke-width': 0,\r\n            rx: '5',\r\n            ry: '5'\r\n        });\r\n        group.appendChild(this.$rectBackground);\r\n\r\n        let y = pos.y;\r\n        if (this.property) {\r\n            // property\r\n            this.$propertySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$propertySvg.textContent = this.property;\r\n            group.appendChild(this.$propertySvg);\r\n\r\n            y += this.$heightOfOneTextItem;\r\n        }\r\n\r\n        // cardinality\r\n        if (this.cardinality) {\r\n            this.$cardinalitySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$cardinalitySvg.textContent = this.cardinality;\r\n            group.appendChild(this.$cardinalitySvg);\r\n        }\r\n\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        let cardinalityAvailable = this.cardinality && this.cardinality.length > 0;\r\n        let propertyAvailable = this.property && this.property.length > 0;\r\n\r\n        return !propertyAvailable && !cardinalityAvailable;\r\n    }\r\n\r\n    public redrawFromEdge(newPos: Point): void {\r\n\r\n        if (!newPos) {\r\n            return;\r\n        }\r\n\r\n        let oldPos = this.getPos();\r\n\r\n        // get difference between new and the old position\r\n        let diffPos = new Point();\r\n        diffPos.x = newPos.x - oldPos.x;\r\n        diffPos.y = newPos.y - oldPos.y;\r\n\r\n        // get translate information\r\n        let translation = this.$view.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        let sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        // set new traslation values\r\n        let newTransX = (sx + diffPos.x);\r\n        let newTransY = (sy + diffPos.y);\r\n        this.$view.setAttributeNS(null, 'transform', 'translate(' + newTransX + ' ' + newTransY + ')');\r\n\r\n        // set new position of svg\r\n        this.getPos().x = newPos.x;\r\n        this.getPos().y = newPos.y;\r\n    }\r\n\r\n    public getText(): string {\r\n        let infoTxt: string = '';\r\n\r\n        if (this.property) {\r\n            infoTxt = this.property;\r\n        }\r\n        if (this.cardinality) {\r\n            if (infoTxt.length > 0) {\r\n                infoTxt += '\\n';\r\n            }\r\n            infoTxt += this.cardinality;\r\n        }\r\n\r\n        return infoTxt;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    private calcSize(): Point {\r\n        let text: string = this.getText();\r\n        let items: Array<string> = text.split('\\n');\r\n\r\n        let maxSize = new Point(0, 0);\r\n        if (text.length === 0) {\r\n            return maxSize;\r\n        }\r\n\r\n        for (let i = 0; i < items.length; i += 1) {\r\n            // calculate size\r\n            let sizeOfText: ClientRect = Util.sizeOf(items[i]);\r\n            maxSize.x = Math.max(maxSize.x, sizeOfText.width);\r\n            maxSize.y += sizeOfText.height;\r\n\r\n            this.$heightOfOneTextItem = sizeOfText.height;\r\n        }\r\n\r\n        return maxSize;\r\n    }\r\n    private resetAllSvgElements() {\r\n        this.$cardinalitySvg = undefined;\r\n        this.$view = undefined;\r\n        this.$propertySvg = undefined;\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\nimport {PropertyBinder} from '../../PropertyBinder';\r\n\r\nexport class Input extends Control {\r\n    private type: string;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data = super.initViewDataProperties(oldData);\r\n        if ('checkbox' === this.type || 'radio' === this.type) {\r\n            data.addFrom('checked', oldData);\r\n        }\r\n        data.addFrom('value', oldData);\r\n        data.addFrom('type', oldData);\r\n        return data;\r\n    }\r\n\r\n    public load(data: any) {\r\n        let id: string;\r\n        let inputField: HTMLElement;\r\n        let useData: boolean;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            useData = true;\r\n        } else {\r\n            id = data.id;\r\n            if (data.type) {\r\n                this.setType(data['type']);\r\n            } else {\r\n                this.setType('text');\r\n            }\r\n            if (data.hasOwnProperty('property')) {\r\n                this.setProperty(data['property']);\r\n            }\r\n            useData = false;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n\r\n        inputField = document.getElementById(id);\r\n\r\n        if (useData) {\r\n            if (inputField) {\r\n                // TODO disuss how to decide, which property we should listen on...\r\n                // this.property = id;\r\n                if (inputField.hasAttribute('Property')) {\r\n                    this.setProperty(inputField.getAttribute('Property'));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (inputField instanceof HTMLInputElement) {\r\n            this.setView(inputField);\r\n            this.type = inputField.type;\r\n            // useData = false;\r\n        } else {\r\n            if (!inputField) {\r\n                this.setView(document.createElement('input'));\r\n                this.$viewData = this.initViewDataProperties(this.$viewData);\r\n                // append viewListener\r\n                // this.$view.addEventListener('change', this.$viewListener);\r\n                if (typeof(data) !== 'string') {\r\n                    for (let attr in data) {\r\n                        if (data.hasOwnProperty(attr) === false) {\r\n                            continue;\r\n                        }\r\n                        // this.$view[attr] = data[attr];\r\n                        this.$viewData.setValue(attr, data[attr]);\r\n                    }\r\n                } else {\r\n                    if (this.type) {\r\n                        this.$view.setAttribute('type', this.type);\r\n                    }\r\n                    if (data.hasOwnProperty('class')) {\r\n                        this.$view.setAttribute('class', data['class']);\r\n                    }\r\n                    this.$view.setAttribute('id', this.id);\r\n                    this.$view.setAttribute('property', this.property);\r\n                }\r\n\r\n                if (data.value) {\r\n                    // if theres a value at the control, we want to change the model to the new value\r\n                    if (this.$model) {\r\n                        this.$model.setValue(this.lastProperty, data.value);\r\n                    }\r\n                }\r\n                if (this.$model) {\r\n                    PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                }\r\n\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (this.property && entity) {\r\n            if (entity.id === this.property.split('.')[0]) {\r\n                this.$model = entity;\r\n                PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                // entity.addListener(this, this.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n    // TODO FIXME protected updateElement(property: string, value: string) {\r\n    //     if (this.$view instanceof HTMLInputElement) {\r\n    //         if (value != null) {\r\n    //             if(property == this.lastProperty) {\r\n    //                 (<HTMLInputElement>this.$view)[this.getStandardProperty()] = value;\r\n    //             } else {\r\n    //                 // this.getRoot().setValue(this, property, value, (<HTMLInputElement>this.$view)[property]);\r\n    //                 (<HTMLInputElement>this.$view)[property] = value;\r\n    //             }\r\n    //         } else {\r\n    //             delete (<HTMLInputElement>this.$view)[property];\r\n    //         }\r\n    //     }\r\n    // }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            super.controlChanged(ev);\r\n        }\r\n// <<<<<<< HEAD\r\n//             let newVal = element[this.getStandardProperty()];\r\n//             if (this.isKeyOnly()) {\r\n//                 // we expect, element[this.lastProperty] to be boolean:\r\n//                 if (!newVal) {\r\n//                     newVal = null;\r\n//                 }\r\n//             } else {\r\n//             }\r\n        // let $graphModel;\r\n        // let value;\r\n        /*if (this.$graphModel) {\r\n            $graphModel = this.$graphModel;\r\n            value = this.$graphModel.getValue(this.lastProperty);\r\n        } else {\r\n            $graphModel = this;\r\n            if (this.$view) {\r\n                value = this.$view[this.lastProperty];\r\n            }\r\n        }*/\r\n        // this.$model.setValue(this.lastProperty, newVal);\r\n        // this.propertyChange(this.$graphModel,this.lastProperty, this.$graphModel.getValue(this.lastProperty), newVal);\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n// =======\r\n        // let newVal = element[this.lastProperty];\r\n        // if (this.isKeyOnly()) {\r\n        //     // we expect, element[this.lastProperty] to be boolean:\r\n        //     if (!newVal) {\r\n        //         newVal = null;\r\n        //     }\r\n        // } else {\r\n        // }\r\n        // let $graphModel;\r\n        // let value;\r\n\r\n        // $graphModel = this.getViewData();\r\n        // if (this.$graphModel) {\r\n        //     $graphModel = this.$graphModel;\r\n        //     value = this.$graphModel.getValue(this.lastProperty);\r\n        // } else {\r\n        //     $graphModel = this;\r\n        //     if (this.$view) {\r\n        //         value = this.$view[this.lastProperty];\r\n        //     }\r\n        // }\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n//            this.saveViewInData();\r\n// >>>>>>> addOldFunctions\r\n//         } else {\r\n//             console.log('value does not match the pattern...');\r\n//         }\r\n    }\r\n\r\n    public setType(type: string): void {\r\n        let oldValue: string = this.type;\r\n        if (oldValue === type) {\r\n            return;\r\n        }\r\n        if (type === 'radio') {\r\n            this.$viewData.setValue('checked', null);\r\n        } else {\r\n            this.$viewData.removeKey('checked');\r\n        }\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\n\r\nexport class Label extends Control {\r\n    public load(data: JSON): any {\r\n        this.createControl(this.$owner, data);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('label');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr === 'textContent') {\r\n                this.$view.textContent = data['textContent'];\r\n            } else {\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Method extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.updateType(data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.updateType(data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.updateType(data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n            // e.g. setName() : string or name:string\r\n            let dataSplitted = data.split(':');\r\n\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }\r\n                else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType(dataSplitted[1].trim() || 'void');\r\n            }\r\n            // set default return type of void\r\n            else {\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = data.trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }  else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType('void');\r\n            }\r\n        }\r\n\r\n        if (Util.includes(this.$data.getValue('name'), '(') && !Util.includes(this.$data.getValue('name'), ')') === false) {\r\n            this.$data.setValue('name', this.$data.getValue('name') + '()');\r\n        }\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\nimport {Association} from '../edges';\r\nimport { GraphModel } from '..';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\n\r\nexport class Node extends DiagramElement {\r\n    public $edges: Association[] = [];\r\n    public $minWidth: number = 150;\r\n    public $minheight: number = 25;\r\n    public $defaulEdgeType: string;\r\n\r\n    constructor(data: JSON|string|Object|any) {\r\n        super();\r\n\r\n        // default size\r\n        this.withSize(this.$minWidth, this.$minheight);\r\n\r\n        if (data) {\r\n            if (data['x'] && data['y']) {\r\n                this.withPos(data['x'], data['y']);\r\n            }\r\n            if (data['width'] || data['height']) {\r\n                this.withSize(data['width'], data['height']);\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos = this.getPos();\r\n        const size = this.getSize();\r\n\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x - size.x / 2,\r\n            y: pos.y - size.y / 2,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y,\r\n            width: size.x,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        const shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'middle',\r\n            'font-family': 'Verdana',\r\n            'font-size': '14',\r\n            fill: 'black'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = this.id;\r\n\r\n        let group = this.createShape({tag: 'g', id: this.id});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public copy(): Node {\r\n        let copy: Node;\r\n        // create new id\r\n        let model = <GraphModel>this.$owner || <GraphModel>this.getRoot();\r\n        if (model) {\r\n            let type = this.property || Node.name;\r\n            let newId = model.getNewId(type);\r\n            copy = <Node>model.createElement(type, newId, null);\r\n            copy.withSize(this.getSize().x, this.getSize().y);\r\n            copy.$owner = model;\r\n        } else {\r\n            copy.id = this.id + '-copy';\r\n            copy.$owner = this.getRoot();\r\n        }\r\n        return copy;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n// EMPTY\r\n    }\r\n    public addAttribute(value: string): Attribute {\r\n        return null;\r\n    }\r\n    public getAttributes(): Attribute[] {\r\n        return null;\r\n    }\r\n    public addMethod(value: string): Method {\r\n        return null;\r\n    }\r\n    public updateLabel(newLabel: string): void {\r\n// EMPTY\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\n\r\nexport class SO extends DiagramElement {\r\n    public static create(element: Object) {\r\n        let result: SO = new SO();\r\n        for (let key in element) {\r\n            if (element.hasOwnProperty(key) === false) {\r\n                continue;\r\n            }\r\n            result.withKeyValue(key, element[key]);\r\n\r\n        }\r\n        return result;\r\n    }\r\n\r\n    public withKeyValue(key: string, value: any): SO {\r\n        if (key === 'typ') {\r\n            this.property = value;\r\n        } else if (key === 'x') {\r\n            this.withPos(value, null);\r\n        } else if (key === 'y') {\r\n            this.withPos(null, value);\r\n        } else if (key === 'width') {\r\n            this.withSize(value, null);\r\n        } else if (key === 'height') {\r\n            this.withSize(null, value);\r\n        } else {\r\n            this[key] = value;\r\n        }\r\n        return this;\r\n    }\r\n}\r\n","import {Point} from '../BaseElements';\r\nimport {Node} from './Node';\r\n\r\nexport class StereoType extends Node {\r\n\r\n    protected stereoType: string;\r\n\r\n    constructor (type: string, x: number, y: number) {\r\n        super('');\r\n        this.withPos(x, y);\r\n        this.setStereoType(type);\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        let pos: Point = this.getPos();\r\n        let size: Point = this.getSize();\r\n\r\n               // = = = STEREOTYPE = = =\r\n        let stereoType = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y - this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': 10,\r\n            'font-weight': 'bold',\r\n            fill: 'black'\r\n        });\r\n        stereoType.textContent = this.stereoType;\r\n\r\n        this.$view = stereoType;\r\n        return stereoType;\r\n    }\r\n\r\n    public setStereoType(value: string): void {\r\n        this.stereoType = '<<' + value + '>>';\r\n    }\r\n\r\n    public getStereoType(): string {\r\n        return this.stereoType;\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { SO } from './SO';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport { Util } from '../../util';\r\n\r\nexport class Symbol extends Node {\r\n    public $heightMax: number = 0;\r\n    public $heightMin: number = 0;\r\n\r\n    constructor(typ: string) {\r\n        super(typ);\r\n    }\r\n\r\n    public draw(typ?: string): SVGElement {\r\n        return SymbolLibary.draw(this);\r\n    }\r\n}\r\n\r\n// \t\t\t\t###################################################### SymbolLibary ####################################################################################\r\n// Example Items\r\n// {tag: 'path', d: ''}\r\n// {tag: 'rect', width:46, height:34}\r\n// {tag: 'ellipse', width:23, height:4}\r\n// {tag: 'line', x1:650, y1:-286, x2:650, y2:-252}\r\n// {tag: 'circle', r:5, x:12, y:0}\r\n// {tag: 'image', height: 30, width: 50, content$src: hallo}\r\n// {tag: 'text', 'text-anchor': 'left', x: '10'}\r\nexport class SymbolLibary {\r\n\r\n    public static drawSVG(node: any): SVGSVGElement {\r\n        // const lib = new SymbolLibary();\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            const parent = SO.create(node);\r\n            parent['property'] = 'SVG';\r\n            symbol = fn(parent);\r\n            // symbol = fn.apply(lib, parent);\r\n\r\n            return SymbolLibary.createGroup(parent, symbol);\r\n        }\r\n        return symbol;\r\n    }\r\n\r\n    public static draw(node: any, parent?: Object): SVGElement {\r\n        // Node is Symbol or simple Object\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            if (!(node instanceof DiagramElement)) {\r\n                node = SO.create(node);\r\n                if (!node.property) {\r\n                    node.property = 'SVG';\r\n                }\r\n            }\r\n            symbol = fn.apply(this, [node]);\r\n            if (!parent) {\r\n                return SymbolLibary.createGroup(node, symbol);\r\n            }\r\n            return SymbolLibary.createGroup(node, symbol);\r\n        } else if (node.property) {\r\n            symbol = new Symbol(node.property);\r\n            symbol.init(node);\r\n            let pos = node.getPos();\r\n            let size = node.getSize();\r\n            symbol.withPos(pos.x, pos.y);\r\n            symbol.withSize(size.x, size.y);\r\n            symbol['value'] = node['value'];\r\n            parent = node['$parent'];\r\n            return SymbolLibary.draw(symbol, parent);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public static upFirstChar(txt: string): string {\r\n        return txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase();\r\n    }\r\n\r\n    public static isSymbolName(typ: string): boolean {\r\n        let fn = SymbolLibary['draw' + SymbolLibary.upFirstChar(typ)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static isSymbol(node: Symbol) {\r\n        let fn = SymbolLibary[SymbolLibary.getName(node)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static getName(node: any): string {\r\n        if (node['type']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['type']);\r\n        }\r\n        if (node.property) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node.property);\r\n        }\r\n        if (node['src']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['src']);\r\n        }\r\n        return 'drawNode';\r\n    }\r\n\r\n    /*FIXME   public static createImage(node: Symbol, $graphModel:Node) {\r\n           let n, img: HTMLElement;\r\n           // node.$graphModel = node;\r\n           if (SymbolLibary.isSymbol(node)) {\r\n               return SymbolLibary.draw(null, node);\r\n           }\r\n           n = {tag: 'img', $graphModel: node, src: node['src']};\r\n           let size = node.getSize();\r\n           if (size.isEmpty() === false) {\r\n               n['width'] = size.x;\r\n               n['height'] = size.y;\r\n           } else {\r\n               n['xmlns'] = 'http://www.w3.org/1999/xhtml';\r\n           }\r\n           img = Util.create(n);\r\n           if (size.isEmpty()) {\r\n               $graphModel.appendImage(img);\r\n               return null;\r\n           }\r\n           return img;\r\n       }*/\r\n\r\n    public static createGroup(node: DiagramElement, group: any) {\r\n        let func, y: number, z: number, box, item: Element, transform, i, offsetX = 0, offsetY = 0;\r\n        let svg: any;\r\n        if (node.property.toUpperCase() === 'HTML') {\r\n            let so = {\r\n                tag: 'svg',\r\n                style: { left: (group.x | 0) + node.getPos().x, top: (group.y | 0) + node.getPos().y, position: 'absolute' }\r\n            };\r\n            if (node['transform']) {\r\n                so['transform'] = node['transform'];\r\n            }\r\n            svg = Util.create(so);\r\n        } else {\r\n            svg = Util.create({ tag: 'g' });\r\n            transform = 'translate(' + group.getPos().x + ' ' + group.getPos().y + ')';\r\n            if (group.scale) {\r\n                transform += ' scale(' + group.scale + ')';\r\n            }\r\n            if (group.rotate) {\r\n                transform += ' rotate(' + group.rotate + ')';\r\n            }\r\n            svg.setAttribute('transform', transform);\r\n            if (group['id']) {\r\n                svg.id = group['id'];\r\n            }\r\n        }\r\n\r\n        if (node['tooltip']) {\r\n            const tooltipTitleAttr = {\r\n                tag: 'title'\r\n            };\r\n            let tooltipTitle = Util.createShape(tooltipTitleAttr);\r\n            tooltipTitle.textContent = node['tooltip'];\r\n            svg.appendChild(tooltipTitle);\r\n        }\r\n\r\n        if (node['background']) {\r\n            const attrCircle = {\r\n                tag: 'circle',\r\n                cx: 20,\r\n                cy: 20,\r\n                r: 17,\r\n                stroke: '#888',\r\n                'stroke-width': 0,\r\n                fill: '#DDD'\r\n            };\r\n            svg.appendChild(Util.create(attrCircle));\r\n        }\r\n\r\n        for (i = 0; i < group.items.length; i += 1) {\r\n            svg.appendChild(Util.create(group.items[i]));\r\n        }\r\n        let elements = node['elements'];\r\n        Util.setSize(svg, group.width + node.getSize().x, group.height + node.getSize().y);\r\n        node['$heightMin'] = node.getSize().y;\r\n        if (elements) {\r\n            for (i = 0; i < elements.length; i += 1) {\r\n                if (!elements[i] && elements[i].length < 1) {\r\n                    elements.splice(i, 1);\r\n                    i -= 1;\r\n                }\r\n            }\r\n            box = Util.create({ tag: 'g' });\r\n            // Calculate new Height\r\n            let c: number;\r\n            z = 0;\r\n            for (c = 0; c < elements.length; c += 1) {\r\n                if (typeof elements[c] === 'string') {\r\n                    z += 1;\r\n                } else {\r\n                    z += elements[c].length;\r\n                }\r\n            }\r\n            z = z * 25 + 6;\r\n            box.appendChild(Util.create({\r\n                tag: 'rect',\r\n                rx: 0,\r\n                x: offsetX,\r\n                y: (offsetY + 28),\r\n                width: 70,\r\n                height: z,\r\n                stroke: '#000',\r\n                fill: '#fff',\r\n                opacity: '0.7'\r\n            }));\r\n            node['$heightMax'] = z + node['$heightMin'];\r\n\r\n            svg['elements'] = elements;\r\n            if (node['type'] === 'DropDown') {\r\n                svg['activ'] = Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': 60,\r\n                    'x': (10 + offsetX),\r\n                    'y': 20,\r\n                    value: node['activText']\r\n                });\r\n                svg.appendChild(svg.activ);\r\n            }\r\n\r\n            y = offsetY + 46;\r\n            // 46 -28 = 18\r\n\r\n            func = function (event: Event) {\r\n                if (svg.activ) {\r\n                    svg.activ.textContent = (<any>event.currentTarget).value;\r\n                }\r\n            };\r\n            let txt: string;\r\n            let textClass = 'SVGTEXT';\r\n            for (z = 0; z < elements.length; z += 1) {\r\n                if (typeof elements[z] === 'string') {\r\n                    txt = elements[z];\r\n                } else {\r\n                    item = this.addText(y, offsetX, box, elements[z][0], 'SVGTEXT');\r\n                    y += 26;\r\n                    for (c = 1; c < elements[z].length; c += 1) {\r\n                        item = this.addText(y, offsetX, box, '* ' + elements[z][c], 'SVGTEXTITEM');\r\n\r\n                        item['value'] = elements[z];\r\n                        if (node['action']) {\r\n                            item['onclick'] = node['action'];\r\n                        } else {\r\n                            item['onclick'] = func;\r\n                        }\r\n                        y += 26;\r\n                    }\r\n                    txt = elements[z];\r\n                    let subBox = Util.create({\r\n                        tag: 'rect',\r\n                        rx: 0,\r\n                        x: offsetX,\r\n                        y: (offsetY + 28),\r\n                        width: 60,\r\n                        height: z,\r\n                        stroke: '#000',\r\n                        fill: '#fff',\r\n                        opacity: '0.7'\r\n                    });\r\n                    continue;\r\n                }\r\n                // let txt = elements[z];\r\n                item = this.addText(y, offsetX, box, txt, textClass);\r\n\r\n                item['value'] = elements[z];\r\n                if (node['action']) {\r\n                    item['onclick'] = node['action'];\r\n                } else {\r\n                    item['onclick'] = func;\r\n                }\r\n                y += 26;\r\n            }\r\n            svg.choicebox = box;\r\n        }\r\n        svg.tool = node;\r\n        svg.onclick = function () {\r\n            if (svg.status === 'close') {\r\n                svg.open();\r\n            } else {\r\n                svg.close();\r\n            }\r\n        };\r\n        svg.close = function () {\r\n            if (svg.status === 'open' && svg.choicebox) {\r\n                this.removeChild(svg.choicebox);\r\n            }\r\n            svg.status = 'close';\r\n            svg.tool.$size.height = svg.tool.heightMin;\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x, g.tool.height + g.tool.y);\r\n            Util.setSize(svg, svg.tool.$size.x, svg.tool.$size.y);\r\n        };\r\n        svg.open = function () {\r\n            if (this.tagName === 'svg') {\r\n                return;\r\n            }\r\n            if (svg.status === 'close' && svg.choicebox) {\r\n                this.appendChild(svg.choicebox);\r\n            }\r\n            svg.status = 'open';\r\n            svg.tool.$size.height = svg.tool.heightMax;\r\n            Util.setSize(svg, svg.tool.width, svg.tool.height);\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x + 10, g.tool.height + g.tool.y + 10);\r\n        };\r\n        svg.close();\r\n        return svg;\r\n    }\r\n\r\n    public static addChild(parent: SVGElement, json: JSON | Element): void {\r\n        let item: Element;\r\n        if ((<any>json).offsetLeft) {\r\n            item = <Element>json;\r\n        } else {\r\n            item = Util.create(json);\r\n        }\r\n        item.setAttribute('class', 'draggable');\r\n        parent.appendChild(item);\r\n    }\r\n\r\n    public static all(node: any): void {\r\n        SymbolLibary.drawSmiley(node);\r\n        SymbolLibary.drawDatabase(node);\r\n        SymbolLibary.drawLetter(node);\r\n        SymbolLibary.drawMobilephone(node);\r\n        SymbolLibary.drawWall(node);\r\n        SymbolLibary.drawActor(node);\r\n        SymbolLibary.drawLamp(node);\r\n        SymbolLibary.drawArrow(node);\r\n        SymbolLibary.drawButton(node);\r\n        SymbolLibary.drawDropdown(node);\r\n        SymbolLibary.drawClassicon(node);\r\n        SymbolLibary.drawClassWithEdgeicon(node);\r\n    }\r\n\r\n    public static drawHamburger(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'circle', r: 10, fill: '#ccc', cx: 12, cy: 12, 'stroke-width': 1, stroke: 'black'},\r\n                { tag: 'path', d: 'M 8,7 H 16 M 8,12 H 16 M 8,17 H 16', stroke: 'black', fill: 'none' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawSmiley(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'path', d: 'm49.01774,25.64542a24.5001,24.5 0 1 1 -49.0001,0a24.5001,24.5 0 1 1 49.0001,0z', stroke: 'black', fill: 'none' }, { tag: 'path', d: 'm8,31.5c16,20 32,0.3 32,0.3' },\r\n                { tag: 'path', d: 'm19.15,20.32a1.74,2.52 0 1 1 -3.49,0a1.74,2.52 0 1 1 3.49,0z' },\r\n                { tag: 'path', d: 'm33,20.32a1.74,2.52 0 1 1 -3.48,0a1.74,2.52 0 1 1 3.48,0z' },\r\n                { tag: 'path', d: 'm5.57,31.65c3.39,0.91 4.03,-2.20 4.03,-2.20' },\r\n                { tag: 'path', d: 'm43,32c-3,0.91 -4,-2.20 -4.04,-2.20' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDatabase(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 40,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,-6.26 25.03,-6.26 25.03,0l0,25.82c0,6.26 -25.03,6.26 -25.03,0l0,-25.82z',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLetter(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 17,\r\n            items: [\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1,1l22,0l0,14l-22,0l0,-14z' },\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1.06,1.14l10.94,6.81l10.91,-6.91' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMobilephone(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 4.2 0.5 15.61 0c 2 0 3.7 1.65 3.7 3.7l 0 41.6c 0 2-1.65 3.7-3.7 3.7l-15.6 0c-2 0-3.7-1.6-3.7-3.7l 0-41.6c 0-2 1.6-3.7 3.7-3.7z',\r\n                    fill: 'none',\r\n                    stroke: 'black'\r\n                },\r\n                { tag: 'path', d: 'm 12.5 2.73a 0.5 0.5 0 1 1-1 0 0.5 0.5 0 1 1 1 0z' },\r\n                { tag: 'path', d: 'm 14 46a 2 2 0 1 1-4 0 2 2 0 1 1 4 0z' },\r\n                { tag: 'path', d: 'm 8 5 7 0' },\r\n                { tag: 'path', d: 'm 1.63 7.54 20.73 0 0 34-20.73 0z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawWall(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'path', d: 'm26,45.44l-5,3.56l-21,-9l0,-36.41l5,-3.56l20.96,9l-0,36.4z' },\r\n                {\r\n                    tag: 'path',\r\n                    stroke: 'white',\r\n                    d: 'm2.21,11l18.34,7.91m-14.46,-12.57l0,6.3m8.2,21.74l0,6.35m-8.6,-10l0,6.351m4.1,-10.67l0,6.3m4.8,-10.2l0,6.3m-8.87,-10.23l0,6.35m4.78,-10.22l0,6.35m-8,14.5l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m0,-13l0,34m-18.23,-41.84l18.3,8m0,0.11l5,-3.57'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawActor(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'line', stroke: '#000', x1: '12', y1: '10', x2: '12', y2: '30' },\r\n                { tag: 'circle', stroke: '#000', cy: '5', cx: '12', r: '5' },\r\n                { tag: 'line', stroke: '#000', y2: '18', x2: '25', y1: '18', x1: '0' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '5', y1: '30', x1: '12' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '20', y1: '30', x1: '12' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLamp(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 22.47 10.58c-6.57 0-11.89 5.17-11.89 11.54 0 2.35 0.74 4.54 2 6.36 2 4 4.36 5.63 4.42 10.4l 11.15 0c 0.12-4.9 2.5-6.8 4.43-10.4 1.39-1.5 1.8-4.5 1.8-6.4 0-6.4-5.3-11.5-11.9-11.5z',\r\n                    fill: 'white',\r\n                    stroke: 'black'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 40 8 0c 0.58 0 1 0.5 1 1 0 0.6-0.5 1-1 1l-8 0c-0.6 0-1-0.47-1-1 0-0.58 0.47-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 42.7 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 45.3 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                { tag: 'path', d: 'm 19.5 48c 0.37 0.8 1 1.3 1.9 1.7 0.6 0.3 1.5 0.3 2 0 0.8-0.3 1.4-0.8 1.9-1.8z' },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 6 37.5 4.2-4c 0.3-0.3 0.8-0.3 1 0 0.3 0.3 0.3 0.8 0 1.1l-4.2 4c-0.3 0.3-0.8 0.3-1.1 0-0.3-0.3-0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 39 37.56-4.15-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 38 23 5.8 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.8 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 1.3 23 6 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.9 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 34.75 11.2 4-4.1c 0.3-0.3 0.3-0.8 0-1-0.3-0.3-0.8-0.3-1 0l-4 4.1c-0.3 0.3-0.3 0.8 0 1 0.3 0.3 0.8 0.3 1 0z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 11.23 10-4-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 21.64 1.3 0 5.8c 0 0.4 0.3 0.8 0.8 0.8 0.4 0 0.8-0.3 0.8-0.8l 0-5.8c 0-0.4-0.3-0.8-0.8-0.8-0.4 0-0.8 0.3-0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 26.1 24.3c-0.5 0-1 0.2-1.3 0.4-1.1 0.6-2 3-2.27 3.5-0.26-0.69-1.14-2.9-2.2-3.5-0.7-0.4-2-0.7-2.5 0-0.6 0.8 0.2 2.2 0.9 2.9 1 0.9 3.9 0.9 3.9 0.9 0 0 0 0 0 0 0.54 0 2.8 0 3.7-0.9 0.7-0.7 1.5-2 0.9-2.9-0.2-0.3-0.7-0.4-1.2-0.4z'\r\n                },\r\n                { tag: 'path', d: 'm 22.5 28.57 0 10.7' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawStop(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 30,\r\n            height: 30,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: '#FFF',\r\n                    'stroke-width': '2',\r\n                    stroke: '#B00',\r\n                    d: 'm 6,6 a 14,14 0 1 0 0.06,-0.06 z m 0,0 20,21'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMin(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    d: 'm 0,0 19,0 0,19 -19,0 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 13,-0.04'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawArrow(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 10,\r\n            height: 9,\r\n            rotate: node['rotate'],\r\n            items: [\r\n                { tag: 'path', fill: '#000', stroke: '#000', d: 'M 0,0 10,4 0,9 z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMax(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    'stroke-dashoffset': 2,\r\n                    'stroke-dasharray': '4.8,4.8',\r\n                    d: 'm 0,0 4.91187,0 5.44643,0 9.11886,0 0,19.47716 -19.47716,0 0,-15.88809 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 6,0.006 0.02,5 0.01,-11 -0.03,6.02 c 2,-0.01 4,-0.002 6,0.01'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawButton(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight, btnValue;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        btnValue = node['value'] || '';\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: 60,\r\n            height: 28,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 8,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    filter: 'url(#drop-shadow)',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                { tag: 'text', $font: true, x: 10, y: 18, fill: 'black', value: btnValue, 'class': 'hand' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDropdown(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 0,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth - 20,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 2,\r\n                    x: btnWidth - 20,\r\n                    y: 0,\r\n                    width: 20,\r\n                    height: 28,\r\n                    stroke: '#000',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    style: 'fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1',\r\n                    d: 'm ' + (btnWidth - 15) + ',13 10,0 L ' + (btnWidth - 10) + ',20 z'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassicon(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.19999l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm25.68807,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.2l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                { tag: 'line', x1: 11, y1: 7, x2: 25, y2: 7, stroke: '#000' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassWithEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M2,10 20,10 20,35 2,35 Z M2,17 20,17 M20,10 28,5 28,9 M 28.5,4.7 24,4',\r\n                    style: 'fill:none;stroke:#000000;transform:scale(0.8);'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClass(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: '100%',\r\n            height: '100%',\r\n            items: [\r\n                { tag: 'rect', width: 50, height: 40, x: 0, y: 0, 'stroke-width': 2, stroke: 'black', fill: 'none'},\r\n                { tag: 'rect', width: 50, height: 12, x: 0, y: 18, 'stroke-width': 1, stroke: 'black', fill: 'none'},\r\n                { tag: 'text', x: 27, y: 14, 'text-anchor': 'middle', 'font-size': 11, value: 'Class'},\r\n                { tag: 'text', x: 5, y: 24, 'font-size': 5, value: '+ field: type'},\r\n                { tag: 'text', x: 5, y: 36, 'font-size': 5, value: '+ method(type)'}\r\n            ]\r\n        });\r\n    }\r\n/*\r\n<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n    <g>\r\n    <text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text>\r\n        <text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>\r\n*/\r\n\r\n    public static drawEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M10,30 30,10 M19,10 30,10 30,21',\r\n                    style: 'fill:none;stroke:#555;stroke-width:2;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawCopynode(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M5 5 L15 5 L15 20 L5 20 Z M5 10 L15 10',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M8 2 L18 2 L18 17 L8 17 Z M8 7 L18 7'\r\n                        + 'M11 4.5 L15 4.5 '\r\n                        + 'M10 10 L16 10 '\r\n                        + 'M10 13 L16 13 ',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawBasket(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M12 12 L18 12 L18 11 L22 11 L22 12 L28 12 L28 14 L27 14 L27 29 L13 29 L13 14 L12 14 Z M13 14 L27 14 M20 17 L20 26 M17 16 L17 27 M23 16 L23 27',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawPencil(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M6 20 L12 23 L33 23 L33 17 L12 17 Z M30 17 L30 23 M12 17 L12 23 M15 19 L28 19 M15 21 L28 21',\r\n                    stroke: '#000',\r\n                    'stroke-width': 1,\r\n                    fill: 'white'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    private static addText(y: number, offsetX: number, box: Element, text: string, textClass: string): Element {\r\n        let item: Element;\r\n        box.appendChild(Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'text-anchor': 'left',\r\n            width: 70,\r\n            x: 10,\r\n            y: y,\r\n            class: textClass,\r\n            value: text,\r\n            eventValue: text\r\n        }));\r\n        if (textClass === 'SVGTEXT') {\r\n            textClass = 'SVGChoiceText';\r\n        } else {\r\n            textClass = 'SVGChoice';\r\n        }\r\n\r\n        item = Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            x: offsetX,\r\n            y: y - 18,\r\n            width: 70,\r\n            height: 24,\r\n            stroke: 'none',\r\n            class: textClass,\r\n        });\r\n        item['eventValue'] = text;\r\n        box.appendChild(item);\r\n        return item;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n}\r\n","import {Control} from '../../Control';\r\nimport BridgeElement from '../../BridgeElement';\r\nimport Data from '../../Data';\r\nimport {Util} from '../../util';\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Table extends Control {\r\n    protected items: BridgeElement[] = [];\r\n    private columns: Column[] = [];\r\n    private cells: Object = {};\r\n    private $bodysection: HTMLTableSectionElement;\r\n    private $headersection: HTMLTableSectionElement;\r\n    private showedItems: Array<BridgeElement> = [];\r\n    // BridgeElements:\r\n    private itemsIds: Object = {};\r\n    private countElement: HTMLElement;\r\n    private countColumn: HTMLElement;\r\n    private countColumnPos: number;\r\n    private resultColumn: string;\r\n    private lastSearchText: string;\r\n    private searchColumns: Array<string> = [];\r\n    private searchText: Array<string> = [];\r\n    private sortColumn: Column;\r\n    private direction: number;\r\n    private moveElement: Column = null;\r\n    private isDrag: boolean = false;\r\n    private moveTimeStamp: number;\r\n    private moveX: number;\r\n    private movePos: number;\r\n    private dragColumn: Column;\r\n    private dragPos: number;\r\n    private tableOption: HTMLTableHeaderCellElement;\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    private static indexOfChild(item: BridgeElement) {\r\n        let i: number = 0;\r\n        let child: Node = item.gui;\r\n        while ((child = child.previousSibling) !== null) {\r\n            i++;\r\n        }\r\n        return i;\r\n    }\r\n\r\n    public load(data: any): void {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n            if (data.property) {\r\n                this.property = data.property;\r\n            }\r\n\r\n            if (data.searchColumns) {\r\n                let search: Array<string> = [];\r\n                if (typeof(data.searchColumns) === 'string') {\r\n                    search = data.searchColumns.split(' ');\r\n                } else {\r\n                    search = data.searchColumns;\r\n                }\r\n                for (let z: number = 0; z < search.length; z++) {\r\n                    let item = search[z].trim();\r\n                    if (item.length > 0) {\r\n                        if (this.searchColumns.indexOf(item) < 0) {\r\n                            this.searchColumns.push(item);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        if (this.$view) {\r\n            // Must be an Update\r\n            if (data['columns']) {\r\n                // It is a json must add all things and generate HTML\r\n                for (let i in data['columns']) {\r\n                    if (data['columns'].hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    let col = this.parseData(data['columns'][i]);\r\n                    this.addHeaderInfo(col);\r\n                    this.columns.push(col);\r\n                    this.tableOption.parentElement.insertBefore(col.$element, this.tableOption);\r\n                }\r\n                for (let i in this.showedItems) {\r\n                    let item: BridgeElement = this.showedItems[i];\r\n                    let cell;\r\n                    // Now Add some Children\r\n                    while (item.gui.children.length < this.columns.length) {\r\n                        cell = document.createElement('td');\r\n                        item.gui.appendChild(cell);\r\n                    }\r\n                    // Now Remove Some Children\r\n                    while (item.gui.children.length > this.columns.length) {\r\n                        item.gui.removeChild(item.gui.children[item.gui.children.length - 1]);\r\n                    }\r\n                    for (let c: number = 0; c < this.columns.length; c++) {\r\n                        let name = this.columns[c].attribute;\r\n                        // let count = this.columns.length;\r\n                        cell = item.gui.children[c];\r\n                        cell.innerHTML = item.model.getValue(name);\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n\r\n        this.$view = document.getElementById(id);\r\n        let headerrow: HTMLTableRowElement;\r\n        if (this.$view) {\r\n            if (!this.property) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('table');\r\n            this.$owner.appendChild(this);\r\n        }\r\n        if (!this.$bodysection) {\r\n            // add tbody element if missing\r\n            this.$bodysection = document.createElement('tbody');\r\n            this.$view.appendChild(this.$bodysection);\r\n        }\r\n        if (data['classname']) {\r\n            this.$view.className = data['classname'];\r\n        } else {\r\n            this.$view.className = 'mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp';\r\n        }\r\n\r\n        this.id = id;\r\n        this.$view.id = id;\r\n        this.$view.setAttribute('type', this.constructor['name'].toLowerCase());\r\n        let counter = 0;\r\n        for (let c = 0; c < this.$view.children.length; c++) {\r\n            let row: HTMLTableRowElement = <HTMLTableRowElement>this.$view.children[c];\r\n            if (row instanceof HTMLTableSectionElement) {\r\n                if (row.tagName === 'THEAD') {\r\n                    headerrow = row;\r\n                    // Its a thead\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingHeader(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                } else {\r\n                    // Its a tbody\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingData(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                }\r\n            } else {\r\n                // fallback, if there are no thead and tbody...\r\n                if (counter === 0) {\r\n                    headerrow = row;\r\n                    this.parsingHeader(row);\r\n                } else {\r\n                    this.parsingData(row);\r\n                }\r\n            }\r\n            counter++;\r\n        }\r\n        if (!headerrow || !this.$headersection) {\r\n            if (!this.$headersection) {\r\n                // find eventually existing thead\r\n                let header = this.$view.getElementsByTagName('thead');\r\n                if (header.length === 0) {\r\n                    this.$headersection = document.createElement('thead');\r\n                    this.$view.appendChild(this.$headersection);\r\n                } else {\r\n                    // take first thead element\r\n                    this.$headersection = <HTMLTableSectionElement>header.item(0);\r\n                }\r\n            }\r\n            if (!headerrow) {\r\n                headerrow = document.createElement('tr');\r\n                this.$headersection.appendChild(headerrow);\r\n            }\r\n        }\r\n\r\n        if (data['columns']) {\r\n            // It is a json must add all things and generate HTML\r\n            for (let i in data['columns']) {\r\n                if (data['columns'].hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                let col = this.parseData(data['columns'][i]);\r\n                this.addHeaderInfo(col);\r\n                this.columns.push(col);\r\n                headerrow.appendChild(col.$element);\r\n            }\r\n            this.tableOption = document.createElement('th');\r\n            this.tableOption.classList.add('tableOption');\r\n            headerrow.appendChild(this.tableOption);\r\n            let context: HTMLElement = this.addOptionItem(null, this.tableOption, true);\r\n            let contentChild: HTMLElement = this.addOptionItem('show', context, true);\r\n            // let simpleLink: HTMLElement = this.addOptionItem('show', contentChild, false);\r\n            this.addOptionItem('show', contentChild, false);\r\n        }\r\n        this.registerEvents(['mousemove', 'mousedown', 'mouseup', 'resize', 'dragstart', 'dragover', 'drop', 'dragend']);\r\n\r\n        // Check for SearchBar\r\n        // if(data[\"searchproperty\"]){\r\n        // Create Full Row\r\n        let searchBar = document.createElement('tr');\r\n        let cell = document.createElement('td');\r\n        cell.setAttribute('colspan', '' + (this.columns.length));\r\n        searchBar.appendChild(cell);\r\n\r\n        let search = document.createElement('input');\r\n        search.className = 'search';\r\n        let that = this;\r\n        search.addEventListener('keyup', function (evt) {\r\n            that.search(evt.target['value']);\r\n        });\r\n\r\n        cell.appendChild(search);\r\n        if (this.resultColumn) {\r\n            if (this.resultColumn.indexOf('#') !== 0) {\r\n                this.countElement = document.createElement('div');\r\n                searchBar.appendChild(this.countElement);\r\n            } else {\r\n                for (let z: number = 0; z < this.$headersection.children.length; z++) {\r\n                    if (this.$headersection.children[z].innerHTML === this.resultColumn) {\r\n                        this.countColumn = <HTMLElement> this.$headersection.children[z];\r\n                        this.countColumnPos = z;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        let first = this.$headersection.children.item(0);\r\n        this.$headersection.insertBefore(searchBar, first);\r\n\r\n        this.updateElement(this.property, null);\r\n\r\n        // now update those elements, that were not loaded currently\r\n    }\r\n\r\n    public tableEvent(type: string, e: Event) {\r\n        let button: number = 0;\r\n        let eventX: number = 0;\r\n        if (e instanceof MouseEvent) {\r\n            button = e.buttons;\r\n            eventX = e.pageX;\r\n        }\r\n        if (type === 'mouseup') {\r\n            this.moveElement = null;\r\n        } else if (type === 'mousedown' || type === 'resize') {\r\n            // End to Resize\r\n            this.moveElement = null;\r\n            if (button === 1) {\r\n                let c: number;\r\n                for (c = 0; c < this.columns.length; c++) {\r\n                    if (this.columns[c].$resize === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = false;\r\n                        break;\r\n                    } else if (this.columns[c].$element === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = true;\r\n                    }\r\n                }\r\n                this.moveTimeStamp = e.timeStamp;\r\n                this.moveX = eventX;\r\n            } else {\r\n                this.moveTimeStamp = 0;\r\n            }\r\n        } else if (type === 'mousemove') {\r\n            if (button === 1 && this.moveElement) {\r\n                if (this.moveTimeStamp && e.timeStamp - this.moveTimeStamp < 2000) {\r\n                    if (this.isDrag) {\r\n                        // FIXME\r\n                    } else {\r\n                        let x = eventX - this.moveX;\r\n                        let width = this.moveElement.$element.offsetWidth;\r\n                        this.moveElement.$element.width = '' + (width + x);\r\n                        e.stopPropagation();\r\n                    }\r\n                }\r\n                this.moveX = eventX;\r\n                this.moveTimeStamp = e.timeStamp;\r\n            }\r\n        } else if (this.isDrag) {\r\n            this.columnDragEvent(type, <DragEvent> e);\r\n        }\r\n    }\r\n\r\n    public parsingHeader(row: HTMLTableRowElement) {\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let column: HTMLTableHeaderCellElement = <HTMLTableHeaderCellElement>row.children[i];\r\n            let id = column.innerHTML.trim();\r\n            let col: Column = null;\r\n            for (let c in this.columns) {\r\n                if (this.columns.hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                if (this.columns[c].label === id) {\r\n                    col = this.columns[c];\r\n                    col.$element = column;\r\n                    break;\r\n                }\r\n            }\r\n            if (col === null) {\r\n                col = new Column();\r\n                col.label = id;\r\n                col.attribute = column.getAttribute('attribute');\r\n                col.$element = column;\r\n                this.columns.push(col);\r\n            }\r\n            this.addHeaderInfo(col);\r\n        }\r\n    }\r\n\r\n    public parsingData(row: HTMLTableRowElement) {\r\n        let id = row.getAttribute('id');\r\n        let item: Data = this.$owner.getItem(id);\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let cell: HTMLTableCellElement = <HTMLTableCellElement>row.children[i];\r\n            let colAttribute = this.columns[i].attribute;\r\n            if (colAttribute.indexOf('\\.') < 0) {\r\n                item[colAttribute] = cell.innerHTML.trim();\r\n            }\r\n        }\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: Object, newValue: Object) {\r\n        if (entity) {\r\n            // Check for Show\r\n            if (this.property && !entity.hasProperty(property)) {\r\n                return;\r\n            }\r\n        }\r\n        if (entity.id === undefined) {\r\n            return;\r\n        }\r\n        let item: BridgeElement = <BridgeElement>this.itemsIds[entity.id];\r\n        let row: HTMLTableRowElement;\r\n        if (!item) {\r\n            item = new BridgeElement(entity);\r\n            this.items.push(item);\r\n            this.itemsIds[entity.id] = item;\r\n        }\r\n        row = this.cells[entity.id];\r\n        if (row) {\r\n            item.gui = row;\r\n        }\r\n        if (this.searching(item) === false) {\r\n            return;\r\n        }\r\n        let cell;\r\n        let showItem = false;\r\n\r\n        if (!row) {\r\n            showItem = true;\r\n            row = document.createElement('tr');\r\n            let count = this.columns.length;\r\n            for (let i = 0; i < count; i++) {\r\n                cell = document.createElement('td');\r\n                row.appendChild(cell);\r\n            }\r\n            this.cells[entity.id] = row;\r\n            item.gui = row;\r\n        }\r\n        for (let c: number = 0; c < this.columns.length; c++) {\r\n            let name = this.columns[c].attribute;\r\n            if (name === property) {\r\n                cell = row.children[c];\r\n                cell.innerHTML = <string>newValue;\r\n            }\r\n        }\r\n        if (showItem) {\r\n            this.showItem(item, true);\r\n        }\r\n        // super.propertyChange(entity, property, newValue, oldValue);\r\n    }\r\n\r\n    public sort(column: Column) {\r\n        if (this.sortColumn === column) {\r\n            if (this.direction === 1) {\r\n                this.direction = -1;\r\n                column.$element.classList.remove('asc');\r\n                column.$element.classList.add('desc');\r\n            } else {\r\n                this.direction = 1;\r\n                column.$element.classList.remove('desc');\r\n                column.$element.classList.add('asc');\r\n            }\r\n        } else {\r\n            if (this.sortColumn !== null) {\r\n                this.sortColumn.$element.classList.remove('desc');\r\n                this.sortColumn.$element.classList.remove('asc');\r\n            }\r\n            this.sortColumn = column;\r\n            this.sortColumn.$element.classList.add('asc');\r\n            this.direction = 1;\r\n        }\r\n        let that = this;\r\n        let sort = function (a: BridgeElement, b: BridgeElement) {\r\n            return that.sorting(a, b);\r\n        };\r\n        this.showedItems.sort(sort);\r\n        let len: number = this.showedItems.length;\r\n        let body = this.$bodysection;\r\n        let i = 0;\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            if (i !== Table.indexOfChild(item)) {\r\n                break;\r\n            }\r\n            i = i + 1;\r\n        }\r\n        while (body.children.length > i) {\r\n            body.removeChild(body.children.item(body.children.length - 1));\r\n        }\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            body.appendChild(item.gui);\r\n            i = i + 1;\r\n        }\r\n\r\n        //      body.removeChild(item.gui);\r\n        //      body.remove\r\n    }\r\n\r\n    public sorting(a: BridgeElement, b: BridgeElement): number {\r\n        let path: string[] = this.sortColumn.attribute.split('.');\r\n        let itemA = a.model.prop;\r\n        let itemB = b.model.prop;\r\n        let check = this.sortColumn.attribute;\r\n        for (let p = 0; p < path.length; p++) {\r\n            check = path[p];\r\n            if (itemA[check]) {\r\n                itemA = itemA[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n            if (itemB[check]) {\r\n                itemB = itemB[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n        if (itemA !== itemB) {\r\n            if (this.direction === 1) {\r\n                return (itemA < itemB) ? -1 : 1;\r\n            }\r\n            return (itemA < itemB) ? 1 : -1;\r\n\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    // Searching\r\n    public search(origSearchText: string): void {\r\n        if (!origSearchText) {\r\n            origSearchText = '';\r\n        }\r\n        let searchText: string = origSearchText.trim().toLowerCase();\r\n        if (searchText === this.lastSearchText && searchText !== '') {\r\n            return; // <==== nothing to be done\r\n        }\r\n        let oldSearch: string = this.lastSearchText;\r\n        this.lastSearchText = searchText;\r\n\r\n        this.parseSearchArray();\r\n        if (searchText !== '' && oldSearch !== null && searchText.indexOf(oldSearch) >= 0 && searchText.indexOf('|') < 0) {\r\n            this.searchArray(this.showedItems);\r\n        } else {\r\n            this.searchSet(this.items);\r\n        }\r\n        this.refreshCounter();\r\n    }\r\n\r\n    public refreshCounter() {\r\n        if (this.countColumn) {\r\n            this.countColumn.innerHTML = this.columns[this.countColumnPos].label + ' (' + this.showedItems.length + ')';\r\n        }\r\n        // var countElement = document.getElementById('talkCount');\r\n        //  if (countElement) {\r\n        //     var txt = (this.showedItems.size() > 0 && searchText.length > 0 ) ? this.options.TEXT_SEARCHLIST : this.options.TEXT_SEARCHFULLLIST;\r\n        //     countElement.innerHTML = txt.replace(\"%LEN%\", this.root['children'].length).replace(\"%COUNT%\", this.showedItems.size()).replace(\"%SEARCH%\", origSearchText);\r\n        // }\r\n        // if (this.countColumn) {\r\n        //     this.countColu1mn.innerHTML = this.countColumn[\"label\"] + \" (\" + this.showedItems.size() + \")\";\r\n        // }\r\n    }\r\n\r\n    public parseSearchArray() {\r\n        let pos: number = 0;\r\n        let split: Array<string> = [];\r\n        let quote: boolean = false;\r\n        for (let i: number = 0; i < this.lastSearchText.length; i++) {\r\n            if ((this.lastSearchText.charAt(i) === ' ') && !quote) {\r\n                let txt = this.lastSearchText.substring(pos, i).trim();\r\n                if (txt.length > 0) {\r\n                    split.push(txt);\r\n                }\r\n                pos = i + 1;\r\n            } else if (this.lastSearchText.charAt(i) === '\\\"') {\r\n                if (quote) {\r\n                    let txt = this.lastSearchText.substring(pos, i).trim();\r\n                    if (txt.length > 0) {\r\n                        split.push(txt);\r\n                    }\r\n                    pos = i + 1;\r\n                } else {\r\n                    pos = i + 1;\r\n                }\r\n                quote = !quote;\r\n            }\r\n        }\r\n        if (pos < this.lastSearchText.length) {\r\n            split.push(this.lastSearchText.substring(pos, this.lastSearchText.length).trim());\r\n        }\r\n        this.searchText = split;\r\n        return split;\r\n    }\r\n\r\n    public searchArray(root: Array<BridgeElement>) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let i: number = 0; i < root.length; i++) {\r\n            let item: BridgeElement = root[i];\r\n            this.showItem(item, this.searching(item));\r\n        }\r\n    }\r\n\r\n    public searchSet(root: BridgeElement[]) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let item of root) {\r\n            let child: BridgeElement = <BridgeElement>item;\r\n            this.showItem(child, this.searching(child));\r\n        }\r\n    }\r\n\r\n    public showItem(item: BridgeElement, visible: boolean) {\r\n        if (visible) {\r\n            this.showedItems.push(item);\r\n            this.$bodysection.appendChild(item.gui);\r\n        } else if (item.gui && item.gui.parentElement) {\r\n            this.$bodysection.removeChild(item.gui);\r\n        }\r\n    }\r\n\r\n    public searching(item: BridgeElement): boolean {\r\n        let fullText: string = '';\r\n        for (let i: number = 0; i < this.searchColumns.length; i++) {\r\n            fullText = fullText + ' ' + item.model.getValue(this.searchColumns[i]);\r\n        }\r\n        fullText = fullText.trim().toLowerCase();\r\n        for (let z: number = 0; z < this.searchText.length; z++) {\r\n            if ('' !== this.searchText[z]) {\r\n                let orSplit: Array<string>;\r\n                if (this.searchText[z].indexOf('|') > 0) {\r\n                    orSplit = this.searchText[z].split('|');\r\n                } else {\r\n                    orSplit = [this.searchText[z]];\r\n                }\r\n                let o: number = 0;\r\n                for (; o < orSplit.length; o++) {\r\n                    let pos: number = orSplit[o].indexOf(':');\r\n                    if (orSplit[o].indexOf('#') === 0 && pos > 1) {\r\n                        // if (searchProperties.contains(propString)) {\r\n                        let value: string = orSplit[o].substring(pos + 1);\r\n                        let column: string = orSplit[o].substring(1, pos - 1);\r\n                        let dataValue: Object = item.model.getValue(column);\r\n                        if (dataValue) {\r\n                            if (dataValue.toString().toLowerCase().indexOf(value) >= 0) {\r\n                                // Search for simple Property\r\n                                break;\r\n                            }\r\n                        }\r\n                    } else if (orSplit[o].length > 1 && orSplit[o].indexOf('-') === 0) {\r\n                        if (fullText.indexOf(orSplit[o].substring(1)) < 0) {\r\n                            break;\r\n                        }\r\n                    } else if (fullText.indexOf(orSplit[o]) >= 0) {\r\n                        // his search word is found in full text\r\n                        break;\r\n                    }\r\n                }\r\n                if (o === orSplit.length) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public getColumn(): Column[] {\r\n        return this.columns;\r\n    }\r\n\r\n    public updateElement(property: string, value: string): void {\r\n        // first clear all elements inside the table:\r\n        for (let item of this.items) {\r\n            if (item instanceof BridgeElement) {\r\n                (<BridgeElement>item).model.removeListener(this);\r\n            }\r\n        }\r\n\r\n        this.items = [];\r\n        this.itemsIds = {};\r\n\r\n        // load all entitys that match the property\r\n        if (this.property !== undefined) {\r\n            let items = this.$owner.getItems();\r\n            for (let j in items) {\r\n                if (items.hasOwnProperty(j)) {\r\n                    let item = items[j];\r\n                    if (item instanceof Data) {\r\n                        if (property === j) {\r\n                            // if (property == item.property) {\r\n                            let i = new BridgeElement(<Data>item);\r\n                            this.items.push(i);\r\n                            this.itemsIds[item.id] = i;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            this.redrawAllElements();\r\n        }\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        if (this.$owner !== null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    protected redrawAllElements() {\r\n        let children: HTMLCollection = this.$bodysection.children;\r\n        // remove old children\r\n        for (let i = 0; i < children.length; i++) {\r\n            let child = children.item(i);\r\n            // remove child\r\n            this.$bodysection.removeChild(child);\r\n        }\r\n\r\n        // load new children\r\n        for (let obj of this.items) {\r\n            // register listeners\r\n            obj.model.addListener(this);\r\n            // create tr\r\n            let row = this.createRow(obj);\r\n            this.$bodysection.appendChild(row);\r\n            this.cells[obj.id] = row;\r\n        }\r\n    }\r\n\r\n    private parseData(column: any): Column {\r\n        let col = new Column();\r\n        col.label = column.label || column.id;\r\n        col.attribute = column.attribute || column.label || column.id;\r\n        col.$element = document.createElement('th');\r\n        col.$element.innerHTML = col.label;\r\n        col.$element.draggable = true;\r\n\r\n        // resize Header\r\n        col.$resize = document.createElement('div');\r\n        col.$resize.classList.add('resize');\r\n        col.$element.appendChild(col.$resize);\r\n\r\n        return col;\r\n    }\r\n\r\n    private createRow(data: BridgeElement): HTMLTableRowElement {\r\n        let tr: HTMLTableRowElement = document.createElement('tr');\r\n\r\n        for (let id of this.columns) {\r\n            let td: HTMLTableDataCellElement = document.createElement('td');\r\n            tr.appendChild(td);\r\n            td.innerHTML = data.model.getValue(id.attribute);\r\n        }\r\n        return tr;\r\n    }\r\n\r\n    private addHeaderInfo(col: Column) {\r\n        let element: HTMLTableCellElement = col.$element;\r\n        let that = this;\r\n        element.classList.add('sort');\r\n        element.addEventListener('click',\r\n            function () {\r\n                that.sort(col);\r\n            },\r\n            false);\r\n    }\r\n\r\n    private columnDragEvent(type: string, e: DragEvent) {\r\n        if (type === 'dragstart') {\r\n            // Target (this) element is the source node.\r\n            this.moveElement.$element.style.opacity = '0.4';\r\n            e.dataTransfer.effectAllowed = 'move';\r\n            e.dataTransfer.setData('text/json', JSON.stringify(Util.toJson(this.moveElement)));\r\n        } else if (type === 'dragenter') {\r\n            // TO Nothing\r\n        } else if (type === 'dragleave') {\r\n            this.moveElement.$element.classList.remove('over');\r\n        } else if (type === 'dragover') {\r\n            if (e.preventDefault) {\r\n                e.preventDefault(); // Necessary. Allows us to drop.\r\n            }\r\n            for (let c = 0; c < this.columns.length; c++) {\r\n                if (this.columns[c].$element === e.target) {\r\n                    this.dragColumn = this.columns[c];\r\n                    this.dragPos = c;\r\n                    this.columns[c].$element.classList.add('over');\r\n                } else {\r\n                    this.columns[c].$element.classList.remove('over');\r\n                }\r\n            }\r\n            if (e.target === this.tableOption) {\r\n                this.tableOption.classList.add('over');\r\n                this.dragPos = this.columns.length;\r\n            } else {\r\n                this.tableOption.classList.remove('over');\r\n            }\r\n            e.dataTransfer.dropEffect = 'move';  // See the section on the DataTransfer object.\r\n        } else if (type === 'drop') {\r\n            // this / e.target is current target element.\r\n            if (e.stopPropagation) {\r\n                e.stopPropagation(); // stops the browser from redirecting.\r\n            }\r\n            if (this.movePos === this.dragPos) {\r\n                return;\r\n            }\r\n            // movePos -> dragPos\r\n            // See the section on the DataTransfer object.\r\n            // DataModel\r\n            this.columns.splice(this.movePos, 1);\r\n            if (this.movePos >= this.dragPos) {\r\n                this.columns.splice(this.dragPos, 0, this.moveElement);\r\n            } else {\r\n                this.columns.splice(this.dragPos - 1, 0, this.moveElement);\r\n            }\r\n\r\n            // Header Line\r\n            let line: HTMLElement = this.moveElement.$element.parentElement;\r\n            line.removeChild(this.moveElement.$element);\r\n            if (this.dragPos < this.columns.length) {\r\n                line.insertBefore(this.moveElement.$element, this.dragColumn.$element);\r\n            } else {\r\n                line.insertBefore(this.moveElement.$element, this.tableOption);\r\n            }\r\n\r\n            let oldElement: Element;\r\n            let newElement: Element;\r\n\r\n            // Now all Childs\r\n            for (let i = 0; i < this.$bodysection.children.length; i++) {\r\n                // Each line\r\n                line = <HTMLElement>this.$bodysection.children.item(i);\r\n                oldElement = line.children.item(this.movePos);\r\n                newElement = line.children.item(this.dragPos);\r\n                line.removeChild(oldElement);\r\n                line.insertBefore(oldElement, newElement);\r\n            }\r\n        } else if (type === 'dragend') {\r\n            // this/e.target is the source node.\r\n            this.moveElement.$element.style.opacity = '1';\r\n            for (let i = 0; i < this.columns.length; i++) {\r\n                this.columns[i].$element.classList.remove('over');\r\n            }\r\n            this.tableOption.classList.remove('over');\r\n        }\r\n    }\r\n\r\n    private addOptionItem(label: string, parent: HTMLElement, sub: boolean): HTMLElement {\r\n        let labelControl;\r\n        if (label) {\r\n            labelControl = document.createElement('a');\r\n            labelControl.appendChild(document.createTextNode(label));\r\n            labelControl.href = 'javascript:void(0);';\r\n            parent.appendChild(labelControl);\r\n        }\r\n        if (sub) {\r\n            let context = document.createElement('div');\r\n            context.classList.add('dropdown-content');\r\n            context.style.setProperty('position', 'absolute');\r\n            parent.appendChild(context);\r\n\r\n            /* When the user clicks on the button,\r\n             toggle between hiding and showing the dropdown content */\r\n            parent.addEventListener(\r\n                'click',\r\n                function () {\r\n                    context.classList.toggle('show');\r\n                },\r\n                false);\r\n            return context;\r\n        }\r\n        return labelControl;\r\n    }\r\n\r\n    private registerEvents(events: string[]) {\r\n        let that = this;\r\n        for (let i = 0; i < events.length; i++) {\r\n            this.$view.addEventListener(events[i], function (evt) {\r\n                return that.tableEvent(events[i], evt);\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\nclass Column {\r\n    label: string;\r\n    attribute: string;\r\n    $element: HTMLTableHeaderCellElement;\r\n    $resize: HTMLDivElement;\r\n    visible: boolean;\r\n}\r\n","import { AutoComplete } from './AutoComplete';\r\nimport { BR } from './BR';\r\nimport { Div } from './Div';\r\nimport { Label } from './Label';\r\n\r\nexport * from './Node';\r\nexport * from './Class';\r\nexport * from './SO';\r\nexport * from './Symbol';\r\n\r\nexport * from './BR';\r\nexport * from './Button';\r\nexport * from './Div';\r\nexport * from './Form';\r\nexport * from './Input';\r\nexport * from './Label';\r\nexport * from './Table';\r\nexport * from './HTML';\r\nexport * from './Dice';\r\nexport * from './AutoComplete';\r\nexport * from './Attribute';\r\nexport * from './Method';\r\nexport * from './ClazzProperty';\r\n\r\nnew AutoComplete();\r\nnew BR();\r\nnew Div();\r\nnew Label();\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class AddNode implements EventHandler {\r\n\r\n    public MIN_SIZE_TO_ADD_NODE: number = 30;\r\n    public MIN_SIZE_TO_ADD_TEXT: number = 10;\r\n    private graph: Graph;\r\n    private svgRect: SVGSVGElement;\r\n    private svgGroupAddNode: SVGSVGElement;\r\n    private svgTextAddNode: SVGSVGElement;\r\n    private svgTextRectAddNode: SVGSVGElement;\r\n    private isRectDrawing: boolean;\r\n    private isDrawToLeft: boolean;\r\n    private isDrawToTop: boolean;\r\n    private isBigEnoughForAddNode: boolean;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(AddNode.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(AddNode.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!this.canHandle()) {\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element.id !== 'RootElement') {\r\n            return false;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element.id === 'RootElement') {\r\n                    this.start(event, element);\r\n\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mousemove':\r\n                this.drawRect(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.removeRect();\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.addNode();\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawRect(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isRectDrawing) {\r\n            return;\r\n        }\r\n\r\n        evt.stopPropagation();\r\n\r\n        let width = Util.getEventX(evt) - this.x;\r\n        let height = Util.getEventY(evt) - this.y;\r\n\r\n        // rectangle is in a negative area, drawn to upper case. not possibble with svg\r\n        if (width < 0) {\r\n            this.isDrawToLeft = true;\r\n            width *= -1;\r\n        } else {\r\n            this.isDrawToLeft = false;\r\n        }\r\n\r\n        if (height < 0) {\r\n            this.isDrawToTop = true;\r\n            height *= -1;\r\n        } else {\r\n            this.isDrawToTop = false;\r\n        }\r\n\r\n        if (width > this.MIN_SIZE_TO_ADD_NODE && height > this.MIN_SIZE_TO_ADD_NODE) {\r\n            this.isBigEnoughForAddNode = true;\r\n        } else {\r\n            this.isBigEnoughForAddNode = false;\r\n        }\r\n\r\n        this.graph.root.style.cursor = 'pointer';\r\n\r\n        // if line wasnt draw\r\n        if (!this.svgRect) {\r\n\r\n            let rectAddNode = Util.createShape({\r\n                tag: 'rect',\r\n                id: 'addNodeRect',\r\n                x: this.x,\r\n                y: this.y,\r\n                width: 1,\r\n                height: 1,\r\n                class: 'SVGAddNode'\r\n            });\r\n\r\n            let group = Util.createShape({ tag: 'g', id: 'groupAddNode' });\r\n            group.appendChild(rectAddNode);\r\n\r\n            this.graph.root.appendChild(group);\r\n            this.svgRect = rectAddNode;\r\n            this.svgGroupAddNode = group;\r\n        }\r\n        else {\r\n\r\n            let svgRectBBox = this.svgRect.getBBox();\r\n\r\n            // if rect is big enough, show text as helper\r\n            if ((svgRectBBox.width > this.MIN_SIZE_TO_ADD_TEXT\r\n                || svgRectBBox.height > this.MIN_SIZE_TO_ADD_TEXT) && !this.svgTextAddNode) {\r\n\r\n                let textAddNode = Util.createShape({\r\n                    tag: 'text',\r\n                    x: this.x,\r\n                    y: this.y - 5,\r\n                    'font-family': 'Verdana',\r\n                    'font-size': 12,\r\n                    fill: 'black'\r\n                });\r\n                textAddNode.textContent = 'Hold on and move to create a new class';\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n\r\n\r\n                // get correct size of text node\r\n                let sizeClientRect: ClientRect = textAddNode.getBoundingClientRect();\r\n\r\n                let rectBackgroundForText = Util.createShape({\r\n                    tag: 'rect',\r\n                    x: this.x,\r\n                    y: this.y - sizeClientRect.height,\r\n                    width: sizeClientRect.width,\r\n                    height: sizeClientRect.height,\r\n                    fill: '#DDD',\r\n                    'stroke-width': 0\r\n                });\r\n\r\n                this.svgTextRectAddNode = rectBackgroundForText;\r\n                this.svgTextAddNode = textAddNode;\r\n                this.svgGroupAddNode.appendChild(rectBackgroundForText);\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n            }\r\n\r\n            if (this.isDrawToLeft) {\r\n                this.svgRect.setAttributeNS(null, 'x', '' + Util.getEventX(evt));\r\n            }\r\n\r\n            if (this.isDrawToTop) {\r\n                this.svgRect.setAttributeNS(null, 'y', '' + Util.getEventY(evt));\r\n            }\r\n\r\n            // set width and height\r\n            this.svgRect.setAttributeNS(null, 'width', width.toString());\r\n            this.svgRect.setAttributeNS(null, 'height', height.toString());\r\n\r\n            // set color\r\n            if (this.isBigEnoughForAddNode) {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode-ready');\r\n\r\n                // draw text\r\n            }\r\n            else {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeRect(): void {\r\n        this.isRectDrawing = false;\r\n        this.isBigEnoughForAddNode = false;\r\n\r\n        this.graph.root.style.cursor = 'default';\r\n\r\n        if (this.svgGroupAddNode) {\r\n            this.graph.root.removeChild(this.svgGroupAddNode);\r\n            this.svgGroupAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgRect) {\r\n            this.svgRect = undefined;\r\n        }\r\n\r\n        if (this.svgTextAddNode) {\r\n            this.svgTextAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgTextRectAddNode) {\r\n            this.svgTextRectAddNode = undefined;\r\n        }\r\n    }\r\n\r\n    private addNode(): void {\r\n\r\n        if (!this.isBigEnoughForAddNode) {\r\n            this.removeRect();\r\n            return;\r\n        }\r\n\r\n        this.removeRect();\r\n        let node = this.graph.addElementWithValues('Class', { x: this.x, y: this.y });\r\n        this.graph.drawElement(node);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isRectDrawing) {\r\n            return;\r\n        }\r\n        this.isRectDrawing = true;\r\n\r\n        this.x = Util.getEventX(evt);\r\n        this.y = Util.getEventY(evt);\r\n    }\r\n\r\n}\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement, Point } from '../elements/BaseElements';\r\nimport { GraphModel } from '../elements/Model';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Control } from '../Control';\r\nimport { Util } from '../util';\r\n\r\nexport class Drag implements EventHandler {\r\n\r\n    private element: DiagramElement;\r\n    private svgElement: SVGSVGElement;\r\n    private dragging = false;\r\n    private reinsert = false;\r\n    private mouseOffset = new Point();\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        if (!this.canHandle()) {\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if ((!this.dragging) && (element.id !== 'RootElement')) {\r\n                    this.element = element;\r\n                    this.svgElement = <SVGSVGElement>element.$view;\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mouseup':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n\r\n                break;\r\n            case 'mousemove':\r\n                if (this.dragging) {\r\n                    this.drag(event, element);\r\n                }\r\n                break;\r\n            case 'mouseleave':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Drag.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Drag.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private reset() {\r\n        this.dragging = false;\r\n        this.svgElement.style.cursor = 'pointer';\r\n\r\n        /*  WORKAROUND\r\n            Chrome got problem with the Node.appendChild() method.\r\n            Sometimes it works, sometimes not.\r\n            So the background is, in the drag method will the current element be appended\r\n            to front of the svg root.\r\n            If this happend, the click event won't fire.\r\n            So it will be fired manually.\r\n            This problem occurs only in chrome.\r\n        */\r\n        if (Util.isChrome()) {\r\n            let clickEvt = Util.createCustomEvent('click');\r\n            this.svgElement.dispatchEvent(clickEvt);\r\n        }\r\n    }\r\n\r\n    private start(evt: Event | any, element: Control) {\r\n\r\n        this.dragging = true;\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n        this.reinsert = true;\r\n\r\n        this.svgElement.style.cursor = 'move';\r\n    }\r\n\r\n    private drag(evt: Event | any, element: DiagramElement) {\r\n\r\n        if (this.reinsert) {\r\n            if (this.element.id !== 'RootElement') {\r\n                // nesseccary to set the dragged object on top of svg children\r\n                this.graph.root.appendChild(this.svgElement);\r\n            }\r\n\r\n            let dragEvent = Util.createCustomEvent('drag');\r\n            element.$view.dispatchEvent(dragEvent);\r\n        }\r\n        this.reinsert = false;\r\n\r\n        evt.stopPropagation();\r\n\r\n        const translation = this.svgElement.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        const sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        const transX = sx + evt.clientX - this.mouseOffset.x;\r\n        const transY = sy + evt.clientY - this.mouseOffset.y;\r\n        this.svgElement.setAttributeNS(null, 'transform', 'translate(' + transX + ' ' + transY + ')');\r\n        this.element.getPos().addNum(transX - sx, transY - sy);\r\n\r\n        if (this.element instanceof Node) {\r\n            (<Node>this.element).redrawEdges();\r\n        }\r\n\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n\r\n\r\n        // resize svg root\r\n        let maxX = this.element.getPos().x + this.element.getSize().x;\r\n        let maxY = this.element.getPos().y + this.element.getSize().y;\r\n\r\n        let domRectRoot = this.graph.root.getBoundingClientRect();\r\n        if(!domRectRoot){\r\n            return;\r\n        }\r\n\r\n        if(maxX > domRectRoot.width){\r\n            this.graph.root.setAttributeNS(null, 'width', '' + maxX);\r\n        }\r\n        \r\n        if(maxY > domRectRoot.height){\r\n            this.graph.root.setAttributeNS(null, 'height', '' + maxY);\r\n        }\r\n    }\r\n}\r\n","import PropertyChangeSupport from '../PropertyChangeSupport';\r\nimport Data from '../Data';\r\nimport {Adapter} from '../Adapter';\r\nimport ClazzProperty from '../elements/nodes/ClazzProperty';\r\n\r\nexport class GraphListener implements PropertyChangeSupport {\r\n    private $owner: ClazzProperty;\r\n\r\n    constructor(owner: ClazzProperty) {\r\n        this.$owner = owner;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        let adapter = this.$owner.getRoot().getAdapter();\r\n        if (adapter) {\r\n            // messages.add(\"{\\\"class\\\":\\\"de.uniks.networkparser.test.model.House\\\",\\\"id\\\":\\\"H1\\\",\\\"rem\\\":{\\\"floor\\\":4},\\\"upd\\\":{\\\"floor\\\":42}}\");\r\n            let myId =  this.$owner.$owner.getId();\r\n            if (myId && myId.length > 0) {\r\n                let pos = myId.indexOf(':');\r\n                if (pos > 0) {\r\n                    myId = myId.substring(0, pos).trim();\r\n                }\r\n            }\r\n            let myName = this.$owner.getName();\r\n            let remJson = {};\r\n            remJson[myName] = oldValue;\r\n            let updJson = {};\r\n            updJson[myName] = newValue;\r\n            let json = {};\r\n            json['id'] = myId;\r\n            json['rem'] = remJson;\r\n            json['upd'] = updJson;\r\n            let message = JSON.stringify(json);\r\n            (<Adapter> adapter).update(message);\r\n        }\r\n    }\r\n}\r\n","import {Graph} from '../elements/';\r\nimport {EventHandler, EventBus} from '../EventBus';\r\nimport {DiagramElement} from '../elements/';\r\nimport {Util} from '../util';\r\n\r\nexport class ImportFile implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(ImportFile.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(ImportFile.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        let type: string = typeof event;\r\n        if (type !== 'DragEvent') {\r\n            return false;\r\n        }\r\n        let evt: DragEvent = <DragEvent>event;\r\n        if (evt.type === 'dragover') {\r\n            this.handleDragOver(evt);\r\n        } else if (evt.type === 'dragleave') {\r\n            if (this.graph.$view !== evt.target) {\r\n                return false;\r\n            }\r\n            this.setBoardStyle('dragleave');\r\n        } else if (evt.type === 'drop') {\r\n            this.handleLoadFile(evt);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public setBoardStyle(typ: string): boolean {\r\n        let b = this.graph.$view;\r\n        Util.removeClass(b, 'Error');\r\n        Util.removeClass(b, 'Ok');\r\n        Util.removeClass(b, 'Add');\r\n        if (typ === 'dragleave') {\r\n            if (b['errorText']) {\r\n                b.removeChild(b['errorText']);\r\n                b['errorText'] = null;\r\n            }\r\n            return true;\r\n        }\r\n        Util.addClass(b, typ);\r\n        if (typ === 'Error') {\r\n            if (!b['errorText']) {\r\n                b['errorText'] = Util.create({tag: 'div', style: 'margin-top: 30%', value: 'NO TEXTFILE'});\r\n                b.appendChild(b['errorText']);\r\n            }\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private handleLoadFile(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n\r\n        let files = evt.dataTransfer.files; // FileList object.\r\n\r\n        if (files.length > 1) {\r\n            evt.dataTransfer.dropEffect = 'none';\r\n            return;\r\n        }\r\n\r\n        // files is a FileList of File objects. List some properties.\r\n        let reader  = new FileReader();\r\n        let output = [];\r\n        let htmlResult = '';\r\n        let that = this;\r\n        for (let i = 0, f; f = files[i]; i++) {\r\n            reader.onload = function(event) {\r\n                htmlResult = event.target['result'];\r\n                console.log('fileContent: ' + htmlResult);\r\n\r\n                // CHANGE TO INTERNAL OBJECT\r\n                if (that.graph) {\r\n                    that.graph.import(htmlResult);\r\n                }\r\n            };\r\n            reader.readAsText(f);\r\n        }\r\n        this.setBoardStyle('dragleave');\r\n    }\r\n\r\n    private handleDragOver(evt: DragEvent): void {\r\n        let error: boolean = true, n: string, f;\r\n        let files = evt.dataTransfer.files;\r\n        // process all File objects\r\n        if (files && files.length > 0) {\r\n            for (let i: number = 0; i < files.length; i += 1) {\r\n                f = files[i];\r\n                if (f.type.indexOf('text') === 0) {\r\n                    error = false;\r\n                } else if (f.type === '') {\r\n                    n = f.name.toLowerCase();\r\n                    if (n.indexOf('json', n.length - 4) !== -1) {\r\n                        error = false;\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            let items = evt.dataTransfer.items;\r\n            if (items && items.length > 0) {\r\n                for (let z = 0; z < items.length; z ++) {\r\n                    if (items[z].type === '' || items[z].type === 'text/plain') {\r\n                        error = false;\r\n                    }\r\n                }\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.\r\n        if (error) {\r\n            this.dragStyler(evt, 'Error');\r\n        } else if (evt.ctrlKey) {\r\n            this.dragStyler(evt, 'Add');\r\n        } else {\r\n            this.dragStyler(evt, 'Ok');\r\n        }\r\n        /* //evt.target['className'] += ' diagramLoadFile';\r\n        '//console.log('handDragOver');*/\r\n    }\r\n\r\n    private dragStyler(event: Event, typ: string) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n        this.setBoardStyle(typ);\r\n    }\r\n\r\n    private handleDragLeave(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n        evt.dataTransfer.dropEffect = 'link'; // Explicitly show this is a copy.\r\n        evt.target['className'] = 'diagram';\r\n        console.log('handDragLeave');\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Class } from '../elements/nodes/Class';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Association } from '../elements/index';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class NewEdge implements EventHandler {\r\n    private graph: Graph;\r\n    private svgLine: SVGSVGElement;\r\n    private isEdgeDrawing: boolean;\r\n    private sourceNode: Node;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    private lastTargetNode: Node;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(NewEdge.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(NewEdge.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!((<KeyboardEvent>event).ctrlKey || EventBus.isHandlerActiveOrFree('NewEdge', true))) {\r\n            this.removeLine();\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element instanceof Node) {\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n\r\n            case 'mousemove':\r\n                this.drawEdge(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.setNewEdgeToNode(event);\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default: break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawEdge(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        let lineToX = Util.getEventX(evt);\r\n        let lineToy = Util.getEventY(evt);\r\n\r\n        let path = `M${this.x} ${this.y} L${lineToX} ${lineToy}`;\r\n        // if line wasnt draw\r\n        if (!this.svgLine) {\r\n\r\n            let attr = {\r\n                tag: 'path',\r\n                id: 'newEdgePath',\r\n                d: path,\r\n                class: 'SVGEdge'\r\n            };\r\n\r\n            let shape = Util.createShape(attr);\r\n            this.svgLine = shape;\r\n\r\n            this.graph.root.appendChild(shape);\r\n            this.graph.root.appendChild(this.sourceNode.$view);\r\n        }\r\n        else {\r\n\r\n            // set new L path\r\n            this.svgLine.setAttributeNS(null, 'd', path);\r\n\r\n            // get node from position\r\n            let targetNode = this.graph.$graphModel.getNodeByPosition(Util.getEventX(evt), Util.getEventY(evt));\r\n\r\n            // if some targetnode is available, so highlight the node\r\n            if (targetNode) {\r\n\r\n                // reset the last one\r\n                if (this.lastTargetNode && this.lastTargetNode.id !== targetNode.id) {\r\n                    this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n                }\r\n\r\n                this.lastTargetNode = targetNode;\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz-drawedge');\r\n            }\r\n            else if (this.lastTargetNode) {\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeLine(): void {\r\n        this.isEdgeDrawing = false;\r\n\r\n        if (this.svgLine) {\r\n            this.graph.root.removeChild(this.svgLine);\r\n            this.svgLine = null;\r\n        }\r\n\r\n        if (this.lastTargetNode) {\r\n            this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n        }\r\n    }\r\n\r\n    private setNewEdgeToNode(event: Event | any): void {\r\n        // get node from position\r\n        let targetNode = this.graph.$graphModel\r\n            .getNodeByPosition(Util.getEventX(event), Util.getEventY(event));\r\n\r\n        if (!targetNode) {\r\n            this.removeLine();\r\n\r\n            return;\r\n        }\r\n\r\n        this.removeLine();\r\n        let edgeType = this.sourceNode.$defaulEdgeType || 'Association';\r\n\r\n        let jsonData = {\r\n            type: edgeType,\r\n            source: this.sourceNode.id,\r\n            target: targetNode.id\r\n        };\r\n\r\n        let newEdge = this.graph.$graphModel.addEdge(<any>jsonData, true);\r\n        this.graph.drawElement(newEdge);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        this.isEdgeDrawing = true;\r\n        this.sourceNode = element as Class;\r\n\r\n        this.x = this.sourceNode.getPos().x + (this.sourceNode.getSize().x / 2);\r\n        this.y = this.sourceNode.getPos().y + (this.sourceNode.getSize().y / 2);\r\n\r\n        // TODO: get this into util or select\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Node } from '../elements/nodes';\r\nimport { Association } from '../elements/edges';\r\nimport { Util } from '../util';\r\nimport { SymbolLibary } from '../elements/nodes/Symbol';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\nimport Attribute from '../elements/nodes/Attribute';\r\n\r\nexport class Select implements EventHandler {\r\n\r\n    private deleteShape: SVGSVGElement;\r\n    private addEdgeShape: SVGSVGElement;\r\n    private copyNodeShape: SVGSVGElement;\r\n    private graph: Graph;\r\n    private padding = 5;\r\n\r\n    private lastSelectedNode: Element;\r\n    private lastSelectedEdge: Element;\r\n\r\n    private isDragged: boolean;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.deleteShape = SymbolLibary.drawSVG({ type: 'Basket', background: true, id: 'trashcan', tooltip: 'Delete class' });\r\n        this.copyNodeShape = SymbolLibary.drawSVG({ type: 'Copynode', background: true, id: 'copyNode', tooltip: 'Copy class' });\r\n        this.addEdgeShape = SymbolLibary.drawSVG({ type: 'Edgeicon', background: true, id: 'addEdge', tooltip: 'Click and drag to connect this class' });\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        let x = Util.getEventX(event);\r\n        let y = Util.getEventY(event);\r\n\r\n        event.stopPropagation();\r\n        if (event.type === 'drag') {\r\n            this.isDragged = true;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            if (element instanceof Node) {\r\n                this.lastSelectedNode = <Element>element.$view;\r\n            }\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n        }\r\n\r\n        if (event.target['id'] === 'background' || element === this.graph.$graphModel) {\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let e = <Node>element;\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.graph.root.appendChild(this.addEdgeShape);\r\n            this.graph.root.appendChild(this.copyNodeShape);\r\n            this.graph.root.appendChild(element.$view);\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'visible');\r\n\r\n            let x = (e.getPos().x + e.getSize().x) + 5;\r\n            let y = e.getPos().y;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y + this.padding})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.copyNodeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 40 + this.padding})`);\r\n            this.copyNodeShape.onclick = (evt) => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let copyClass = (element).copy();\r\n                copyClass.withPos(nextFreePosition.x, nextFreePosition.y);\r\n                this.graph.drawElement(copyClass);\r\n            };\r\n\r\n            this.addEdgeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 80 + this.padding})`);\r\n            this.addEdgeShape.onmousedown = function () {\r\n                EventBus.setActiveHandler('NewEdge');\r\n                element.$view.dispatchEvent(Util.createCustomEvent('mousedown'));\r\n            };\r\n        }\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let clazz = <Node>element;\r\n\r\n            if (Util.isChrome()) {\r\n                if (this.lastSelectedNode && element.id === this.lastSelectedNode.id && !this.isDragged) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            this.isDragged = false;\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            this.lastSelectedNode = <Element>element.$view;\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete class');\r\n\r\n            // draw textbox to edit clazz in one line\r\n            let divInlineEdit = document.createElement('div');\r\n            divInlineEdit.id = 'inlineEdit';\r\n            divInlineEdit.style.position = 'absolute';\r\n            divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n            divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n            divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n            divInlineEdit.style.zIndex = '42';\r\n\r\n            let inputText = document.createElement('input');\r\n            inputText.type = 'text';\r\n            inputText.style.width = '100%';\r\n            inputText.placeholder = 'Add properties, edit label';\r\n\r\n            divInlineEdit.appendChild(inputText);\r\n            document.body.appendChild(divInlineEdit);\r\n\r\n            inputText.addEventListener('focusout', (evt) => {\r\n\r\n                if (Util.isChrome()) {\r\n                    // only if input is empty, remove the inline edit function\r\n                    if ((!inputText.value || inputText.value.length === 0) && (!this.lastSelectedNode || element.id !== this.lastSelectedNode.id)) {\r\n                        this.removeLastInlineEdit();\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                // only if input is empty, remove the inline edit function\r\n                if ((!inputText.value || inputText.value.length === 0)) {\r\n                    this.removeLastInlineEdit();\r\n                }\r\n            });\r\n\r\n            let g = this.graph;\r\n            let propertyTypes: string[] = ['boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'short', 'String', 'void'];\r\n            inputText.addEventListener('keydown', function (evt) {\r\n\r\n                let keyCode = (<any>evt).which;\r\n                let inputValue = <any>inputText.value;\r\n\r\n                if (Util.endsWith(inputValue, ':') && !document.getElementById('selectPropertyType')) {\r\n                    let selectType = document.createElement('select');\r\n                    selectType.id = 'selectPropertyType';\r\n                    selectType.style.width = '100%';\r\n\r\n                    for (let type of propertyTypes) {\r\n                        let selectOption = document.createElement('option');\r\n                        selectOption.value = type;\r\n                        selectOption.innerHTML = type;\r\n                        selectType.appendChild(selectOption);\r\n                    }\r\n\r\n                    selectType.addEventListener('change', function (evt) {\r\n                        let inputValueSplitted = inputValue.split(':');\r\n                        let selectedPropertyType = selectType.options[selectType.selectedIndex].value;\r\n\r\n                        if (inputValueSplitted.length >= 1) {\r\n                            inputText.value = inputValueSplitted[0].trim() + ' : ' + selectedPropertyType;\r\n                            inputText.focus();\r\n                        }\r\n                    });\r\n\r\n                    divInlineEdit.appendChild(selectType);\r\n                }\r\n                else if (!Util.includes(inputValue, ':')) {\r\n                    let selectType = document.getElementById('selectPropertyType');\r\n\r\n                    if (selectType) {\r\n                        selectType.remove();\r\n                    }\r\n                }\r\n\r\n                if (keyCode !== 13) {\r\n                    return;\r\n                }\r\n\r\n                // attribute\r\n                if ((Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) === false) {\r\n                    if (Util.includes(inputValue, ':')) {\r\n                        clazz.addAttribute(inputValue.trim());\r\n                        clazz.reDraw();\r\n                    } else if (Util.includes(inputValue, '=') ) {\r\n                        let attr: Attribute = null;\r\n                        let name = inputValue.substring(0, inputValue.indexOf('=')).trim();\r\n                        for (let child of clazz.getAttributes() ) {\r\n                            if ( name === child.getName()) {\r\n                                attr = child;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (attr) {\r\n                            attr.updateValue(inputValue.substring(inputValue.indexOf('=') + 1).trim());\r\n                        }\r\n                        clazz.reDraw();\r\n                    }\r\n                }\r\n\r\n                // method\r\n                else if (Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) {\r\n                    clazz.addMethod(inputValue.trim());\r\n                    clazz.reDraw();\r\n                }\r\n                // label\r\n                else if (inputValue.trim().split(' ').length === 1 && inputValue.trim().length > 0) {\r\n                    clazz.updateLabel(inputValue.trim());\r\n                }\r\n\r\n                // reset size\r\n                divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n                divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n                divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n\r\n                inputText.value = '';\r\n\r\n                // remove combobox to select type of property\r\n                let selectType = document.getElementById('selectPropertyType');\r\n\r\n                if (selectType) {\r\n                    selectType.remove();\r\n                }\r\n\r\n                // TODO: reload propertiespanel. not working!\r\n                // event wont dispatch\r\n                // let customEvt = Util.createCustomEvent(EventBus.RELOADPROPERTIES);\r\n                // element.$view.dispatchEvent(customEvt);\r\n            });\r\n\r\n            (<any>divInlineEdit.children[0]).focus();\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Association) {\r\n            this.graph.root.appendChild(element.$view);\r\n            this.graph.root.appendChild(element.$sNode.$view);\r\n            this.graph.root.appendChild(element.$tNode.$view);\r\n\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete edge');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            let edge = <Association>element;\r\n            this.lastSelectedEdge = edge.$view;\r\n\r\n            Util.addClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Select.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Select.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private setTooltipOfShape(shape: SVGSVGElement, tooltip: string): void {\r\n        if (!shape || !shape.hasChildNodes()) {\r\n            return;\r\n        }\r\n\r\n        let titleElement = <SVGSVGElement>shape.childNodes[0];\r\n        if (!titleElement || titleElement.tagName !== 'title') {\r\n            return;\r\n        }\r\n\r\n        titleElement.textContent = tooltip;\r\n    }\r\n\r\n    private resetLastSelectedElements() {\r\n        // reset the last one\r\n        if (this.lastSelectedNode) {\r\n            Util.removeClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.lastSelectedNode = undefined;\r\n        }\r\n\r\n        if (this.lastSelectedEdge) {\r\n            Util.removeClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n            this.lastSelectedEdge = undefined;\r\n        }\r\n\r\n        this.removeLastInlineEdit();\r\n    }\r\n\r\n    private removeLastInlineEdit(): void {\r\n        // remove last inline edit of clazz\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n\r\n            // its not supported in internet explorer\r\n            // lastInlineEdit.remove();\r\n        }\r\n    }\r\n\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\n\r\nexport class Zoom implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n    }\r\n\r\n    public handle(e: any, element: DiagramElement): boolean {\r\n        let delta = e.deltaY || e.wheelDeltaY || -e.wheelDelta;\r\n        let d = 1 + (delta / 1000);\r\n\r\n        let values = this.graph.root.getAttribute('viewBox').split(' ');\r\n        const newViewBox = `${values[0]} ${values[1]} ${parseInt(values[2]) * d} ${parseInt(values[3]) * d}`;\r\n        this.graph.root.setAttribute('viewBox', newViewBox);\r\n\r\n        e.preventDefault();\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Zoom.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Zoom.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n}\r\n","export * from './Drag';\r\nexport * from './Select';\r\nexport * from './Zoom';\r\nexport * from './NewEdge';\r\nexport * from './ImportFile';\r\nexport * from './AddNode';\r\n","import { Association } from '../elements/edges';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport Layout from './Layout';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\n\r\nexport class DagreLayout implements Layout {\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        if (!window['dagre']) {\r\n            return;\r\n        }\r\n        let model = graph.$graphModel;\r\n        let g = new window['dagre'].graphlib.Graph();\r\n\r\n        g.setGraph({ marginx: 100, marginy: 20 }).setDefaultEdgeLabel(function () {\r\n            return {};\r\n        });\r\n\r\n        for (let node of model.nodes) {\r\n            g.setNode(node.id, { width: node.getSize().x, height: node.getSize().y });\r\n        }\r\n\r\n        for (let edge of model.edges) {\r\n            g.setEdge(edge.$sNode.id, edge.$tNode.id);\r\n        }\r\n\r\n        window['dagre'].layout(g);\r\n\r\n        g.nodes().forEach(function (nodeId: string) {\r\n            for (let node of model.nodes) {\r\n                if (node.id === nodeId) {\r\n                    node.withPos(g.node(nodeId).x - g.node(nodeId).width / 2, g.node(nodeId).y - g.node(nodeId).height / 2);\r\n                }\r\n            }\r\n        });\r\n        g.edges().forEach(function (e: any) {\r\n            for (let edge of model.edges) {\r\n                if (edge.$sNode.id === e.v && edge.$tNode.id === e.w) {\r\n                    let size = g.edge(e).points.length;\r\n                    edge.clearPoints();\r\n                    for (let i = 0; i < size; i++) {\r\n                        let point: SVGPoint = g.edge(e).points[i];\r\n                        edge.addPoint(point.x, point.y);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n}\r\n","import {DiagramElement} from '../elements/BaseElements';\r\nimport Layout from './Layout';\r\nimport {Graph} from '../elements/Graph';\r\nimport {Association} from '../elements/edges/Association';\r\nimport {Node} from '../elements/nodes/Node';\r\nimport {Control} from '../Control';\r\n\r\nexport class LayoutGraphMin {\r\n    public nodes: Object = {};\r\n    public edges: Array<Object> = [];\r\n    public outEdges: Object = {};\r\n    public inEdges: Object = {};\r\n    public dummyNodes: Array<LayoutGraphNode> = [];\r\n    public dummyEdges: Object = {};\r\n    public count: number = 0;\r\n    public minRank: number = Number.POSITIVE_INFINITY;\r\n    public maxRank: number = 0;\r\n    public maxHeight: number = 0;\r\n    public maxWidth: number = 0;\r\n    public ranksep: number = 0;\r\n    public edgesLabel: Array<Object> = [];\r\n\r\n    public nodeCount(): number {\r\n        return this.count;\r\n    }\r\n\r\n    public node(id: string) {\r\n        return this.nodes[id];\r\n    }\r\n\r\n    public setNode(id: string, n: LayoutGraphNode) {\r\n        if (n && !this.nodes[id]) {\r\n            this.nodes[id] = n;\r\n            this.count = this.count + 1;\r\n        } else if (!n && this.nodes[id]) {\r\n            delete this.nodes[id];\r\n        }\r\n    }\r\n}\r\n\r\nexport class LayoutGraphNode {\r\n    public id: string;\r\n    public width: number;\r\n    public height: number;\r\n    public x: number;\r\n    public y: number;\r\n    public edgeObj: LayoutGraphEdge;\r\n    public rank: number;\r\n\r\n    constructor(id: string, width: number, height: number, x: number, y: number) {\r\n        this.id = id;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n\r\nexport class LayoutGraphEdge {\r\n    public source: string;\r\n    public target: string;\r\n}\r\n\r\n// \t\t\t\t######################################################### DagreGraph #########################################################\r\nexport class DagreLayoutMin implements Layout {\r\n    public static EDGE_KEY_DELIM = '\\x01';\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        let g, layoutNode, nodes, newEdge, edges;\r\n        let i, n, x, y, sId, tId, split = DagreLayoutMin.EDGE_KEY_DELIM;\r\n        let e: Association;\r\n\r\n        nodes = node['nodes'];\r\n        edges = node['edges'];\r\n        g = new LayoutGraphMin();\r\n\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            g.setNode(n.id, new LayoutGraphNode(n.id, n.getSize().x, n.getSize().y, n.getPos().x, n.getPos().y));\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            sId = this.getNodeId(e.$sNode);\r\n            tId = this.getNodeId(e.$tNode);\r\n            if (sId > tId) {\r\n                let tmp = tId;\r\n                tId = sId;\r\n                sId = tmp;\r\n            }\r\n            let idAB = sId + split + tId + split;\r\n            let idBA = tId + split + sId + split;\r\n            if (sId !== tId && g.edgesLabel.indexOf(idAB) < 0 && g.edgesLabel.indexOf(idBA) < 0) {\r\n                newEdge = {source: sId, target: tId, minlen: 1, weight: 1};\r\n                g.edges.push(newEdge);\r\n                g.edgesLabel.push(idAB);\r\n                // In Edges\r\n                if (!g.inEdges[tId]) {\r\n                    g.inEdges[tId] = [];\r\n                }\r\n                g.inEdges[tId].push(newEdge);\r\n\r\n                // Out Edges\r\n                if (!g.outEdges[sId]) {\r\n                    g.outEdges[sId] = [];\r\n                }\r\n                g.outEdges[sId].push(newEdge);\r\n            }\r\n        }\r\n        this.layouting(g);\r\n        // Set the layouting back\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            layoutNode = g.node(n.id);\r\n            x = n.getPos().x;\r\n            y = n.getPos().y;\r\n            if (x < 1 && y < 1) {\r\n                n.withPos(Math.ceil(layoutNode.x), Math.ceil(layoutNode.y));\r\n            }\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            // OBSOLETE method:  e.calc(graph.canvas);\r\n        }\r\n        graph.draw();\r\n    }\r\n\r\n    public getNodeId(node: Control): string {\r\n        if (node.$owner) {\r\n            return this.getNodeId(node.$owner) || node.id;\r\n        }\r\n        return node.id;\r\n    }\r\n\r\n    public layouting(g: LayoutGraphMin) {\r\n        this.longestPath(g);\r\n        this.normalizeRanks(g);\r\n        this.normalizeEdge(g);\r\n        // this.setSimpleOrder(g);\r\n        this.order(g);\r\n        g.ranksep = 25;\r\n        // remove Dummy\r\n        this.removeDummy(g);\r\n        this.position(g);\r\n    }\r\n\r\n    public setSimpleOrder(g: LayoutGraphMin) {\r\n        let i, n;\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            n.order = n.rank;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Applies heuristics to minimize edge crossings in the graph and sets the best\r\n     * order solution as an order attribute on each node.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Graph must be DAG\r\n     *    2. Graph nodes must be objects with a \"rank\" attribute\r\n     *    3. Graph edges must have the \"weight\" attribute\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Graph nodes will have an \"order\" attribute based on the results of the\r\n     *       algorithm.\r\n     */\r\n    public order(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        let visited = {};\r\n        let node, n, order, i;\r\n        for (i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (n in g.nodes) {\r\n            if (visited[n]) {\r\n                continue;\r\n            }\r\n            visited[n] = true;\r\n            node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank].push(n);\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                g.nodes[layering[order][n]].order = parseInt(n);\r\n            }\r\n        }\r\n        // Fix resolve conflict\r\n        for (order in layering) {\r\n            if (layering[order].length > 1) {\r\n                for (n in layering[order]) {\r\n                    if (layering[order].hasOwnProperty(n) === false) {\r\n                        continue;\r\n                    }\r\n                    let name = layering[order][n];\r\n                    let sum = 0;\r\n                    let weight = 1;\r\n                    let edges = g.dummyEdges[name];\r\n                    if (edges) {\r\n                        for (i in edges) {\r\n                            if (edges.hasOwnProperty(i) === false) {\r\n                                continue;\r\n                            }\r\n                            let edge = edges[i];\r\n                            let nodeU = g.node(edge.target);\r\n                            sum = sum + (edge.weight * nodeU.order);\r\n                            weight = weight + edge.weight;\r\n                        }\r\n                    }\r\n                    g.node(name).barycenter = sum / weight;\r\n                    g.node(name).weight = weight;\r\n                }\r\n            } else if (layering[order].length > 0) {\r\n                for (n in layering[order]) {\r\n                    let name = layering[order][n];\r\n                    g.node(name).barycenter = 1;\r\n                    g.node(name).weight = 1;\r\n                }\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                let node = g.nodes[layering[order][n]];\r\n                node.order = parseInt(n) + node.barycenter * node.weight;\r\n                if (isNaN(node.order)) {\r\n                    console.log('ERROR');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public removeDummy(g: LayoutGraphMin) {\r\n        for (let z in g.dummyNodes) {\r\n            let node = g.dummyNodes[z];\r\n            g.setNode(node.id, null);\r\n        }\r\n        g.dummyNodes = [];\r\n        g.dummyEdges = {};\r\n    }\r\n\r\n    /*\r\n     * Breaks any long edges in the graph into short segments that span 1 layer\r\n     * each. This operation is undoable with the denormalize function.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. The input graph is a DAG.\r\n     *    2. Each node in the graph has a \"rank\" property.\r\n     *\r\n     * Post-condition:\r\n     *\r\n     *    1. All edges in the graph have a length of 1.\r\n     *    2. Dummy nodes are added where edges have been split into segments.\r\n     *    3. The graph is augmented with a \"dummyChains\" attribute which contains\r\n     *       the first dummy in each chain of dummy nodes produced.\r\n     */\r\n    public normalizeEdge(g: LayoutGraphMin): void {\r\n        let i: number = 1;\r\n        for (let id in g.edges) {\r\n            let e: LayoutGraphEdge = <LayoutGraphEdge>g.edges[id];\r\n            let v: string = e.source;\r\n            let vRank = g.node(v).rank;\r\n            const w: string = e.target;\r\n            const wRank: number = g.node(w).rank;\r\n            let name: string;\r\n\r\n            if (wRank === vRank + 1) {\r\n                continue;\r\n            }\r\n\r\n            let dummy;\r\n            for (vRank = vRank + 1; vRank < wRank; ++vRank) {\r\n                name = '_d' + e.source + e.target + (i++);\r\n                let newEdge = {source: v, target: name, minlen: 1, weight: 1};\r\n                dummy = new LayoutGraphNode(name, 0, 0, 0, 0);\r\n                dummy.edgeObj = e;\r\n                dummy.rank = vRank;\r\n                // Dummy Edges\r\n                if (!g.dummyEdges[v]) {\r\n                    g.dummyEdges[v] = [];\r\n                }\r\n                g.dummyEdges[v].push(newEdge);\r\n\r\n                g.dummyNodes.push(dummy);\r\n                g.setNode(dummy.id, dummy);\r\n                v = name;\r\n            }\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Initializes ranks for the input graph using the longest path algorithm. This\r\n     * algorithm scales well and is fast in practice, it yields rather poor\r\n     * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\r\n     * ranks wide and leaving edges longer than necessary. However, due to its\r\n     * speed, this algorithm is good for getting an initial ranking that can be fed\r\n     * into other algorithms.\r\n     *\r\n     * This algorithm does not normalize layers because it will be used by other\r\n     * algorithms in most cases. If using this algorithm directly, be sure to\r\n     * run normalize at the end.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Input graph is a DAG.\r\n     *    2. Input graph node labels can be assigned properties.\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Each node will be assign an (unnormalized) \"rank\" property.\r\n     */\r\n    public longestPath(g: LayoutGraphMin) {\r\n        let i, n, visited = [];\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            visited.push(i);\r\n            n.rank = this.findAllPaths(g, n, 0, visited);\r\n            g.minRank = Math.min(g.minRank, n.rank);\r\n        }\r\n    }\r\n\r\n    public findAllPaths(g: LayoutGraphMin, n: Node, currentCost: number, path: Array<String>) {\r\n        let min: number = 0;\r\n        let id: string;\r\n        let z: number;\r\n        let target;\r\n        if (g.outEdges[n.id]) {\r\n            for (z = 0; z < g.outEdges[n.id].length; z++) {\r\n                id = g.outEdges[n.id][z].target;\r\n                target = g.nodes[id];\r\n                if (path[id]) {\r\n                    min = Math.min(min, target.rank);\r\n                } else if (path.indexOf(id) < 0) {\r\n                    min = Math.min(min, this.findAllPaths(g, target, currentCost - 2, path));\r\n                } else {\r\n                    min = currentCost;\r\n                }\r\n            }\r\n            return min;\r\n        }\r\n        return currentCost;\r\n    }\r\n\r\n    /*\r\n     * Adjusts the ranks for all nodes in the graph such that all nodes v have\r\n     * rank(v) >= 0 and at least one node w has rank(w) = 0.\r\n     */\r\n    public normalizeRanks(g: LayoutGraphMin) {\r\n        let min = g.minRank;\r\n        let value;\r\n        g.maxRank = Number.NEGATIVE_INFINITY;\r\n        g.maxHeight = 0;\r\n        g.maxWidth = 0;\r\n        for (let i in g.nodes) {\r\n            let node = g.nodes[i];\r\n            if (node.rank !== undefined) {\r\n                node.rank -= min;\r\n                value = Math.abs(node.rank);\r\n                if (value > g.maxRank) {\r\n                    g.maxRank = value;\r\n                }\r\n                g.maxHeight = Math.max(g.maxHeight, node.height);\r\n                g.maxWidth = Math.max(g.maxWidth, node.width);\r\n            }\r\n        }\r\n    }\r\n\r\n    public position(g: LayoutGraphMin) {\r\n        this.positionY(g);\r\n        let list = this.positionX(g);\r\n        for (let i in list) {\r\n            for (let pos in list[i]) {\r\n                if (list[i].hasOwnProperty(pos) === false) {\r\n                    continue;\r\n                }\r\n                if (g.node(list[i][pos])) {\r\n                    g.node(list[i][pos]).x = parseInt(pos) * g.maxWidth;\r\n                }\r\n            }\r\n\r\n        }\r\n    }\r\n\r\n    public positionY(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        let rankSep = g.ranksep;\r\n        let prevY = 0;\r\n        for (let layer in layering) {\r\n            let maxHeight = g.maxHeight;\r\n            for (let v in layering[layer]) {\r\n                if (layering[layer].hasOwnProperty(v) === false) {\r\n                    continue;\r\n                }\r\n                let id = layering[layer][v];\r\n                g.nodes[id].y = prevY + maxHeight / 2;\r\n            }\r\n            prevY += maxHeight + rankSep;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\r\n     * function will produce a matrix with the ids of each node.\r\n     */\r\n    public buildLayerMatrix(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        for (let i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (let n in g.nodes) {\r\n            let node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank][node.order] = n;\r\n            }\r\n        }\r\n        return layering;\r\n    }\r\n\r\n    public positionX(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        return layering;\r\n    }\r\n}\r\n","import { Point } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport Layout from './Layout';\r\n\r\nexport class Random implements Layout {\r\n\r\n  public layout(graph: Graph) {\r\n\r\n    let model = graph.$graphModel;\r\n\r\n    if (model.nodes) {\r\n      for (let node of model.nodes) {\r\n        let pos: Point = node.getPos();\r\n        if (pos.x === 0 && pos.y === 0) {\r\n          let x = Util.getRandomInt(0, graph.canvasSize.width);\r\n          let y = Util.getRandomInt(0, graph.canvasSize.height);\r\n          node.withPos(x, y);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","export * from './DagreLayout';\r\nexport * from './Random';\r\nexport * from './DagreLayoutMin';\r\n\r\nimport {DagreLayout} from './DagreLayout';\r\nimport {DagreLayoutMin} from './DagreLayoutMin';\r\nimport {Random} from './Random';\r\nnew DagreLayout();\r\nnew DagreLayoutMin();\r\nnew Random();\r\n","import {VirtualKeyBoard} from './VirtualKeyBoard';\r\n\r\nexport {Point} from './elements/BaseElements';\r\nexport {Bridge, DelegateAdapter} from './Bridge';\r\nexport {Graph} from './elements/Graph';\r\nexport * from './elements/nodes';\r\nexport * from './elements/edges';\r\nexport * from './adapters';\r\nexport * from './UML';\r\nimport {Point} from './elements/BaseElements';\r\nimport {Graph} from './elements/Graph';\r\nimport {ClassEditor} from './elements/ClassEditor';\r\nimport {Bridge} from './Bridge';\r\nimport {Util} from './util';\r\nimport * as nodes  from './elements/nodes';\r\nimport * as edges from './elements/edges';\r\nimport {ScrumBoard} from './ScrumBoard';\r\n\r\nif (!window['Point']) {\r\n    window['Point'] = Point;\r\n    window['Graph'] = Graph;\r\n    window['bridge'] = new Bridge();\r\n    window['Util'] = Util;\r\n    window['Class'] = nodes.Class;\r\n    window['Association'] = edges.Association;\r\n    window['SymbolLibary'] = nodes.SymbolLibary;\r\n    window['ClassEditor'] = ClassEditor;\r\n    window['VirtualKeyBoard'] = VirtualKeyBoard;\r\n    window['ScrumBoard'] = ScrumBoard;\r\n}\r\n","'use strict';\r\nimport { CSS } from './CSS';\r\nimport { Node } from './elements/nodes/Node';\r\nimport { DiagramElement, Point } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport class Util {\r\n\r\n    public static isAutoSave: boolean;\r\n\r\n    static getRandomInt(min: number, max: number): number {\r\n        return Math.floor(Math.random() * (max - min + 1)) + min;\r\n    }\r\n\r\n    static createShape(attrs: any): SVGSVGElement {\r\n        let xmlns = attrs.xmlns || 'http://www.w3.org/2000/svg';\r\n        let shape = document.createElementNS(xmlns, attrs.tag);\r\n\r\n        for (let attr in attrs) {\r\n            if (!attrs.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr !== 'tag') {\r\n                shape.setAttribute(attr, attrs[attr]);\r\n\r\n            }\r\n        }\r\n        return <SVGSVGElement><any>shape;\r\n    }\r\n\r\n    static toPascalCase(value: string): string {\r\n        value = value.charAt(0).toUpperCase() + value.substring(1).toLowerCase();\r\n        return value;\r\n    }\r\n\r\n    static isSVG(tag: string): boolean {\r\n        let i,\r\n            list = ['svg', 'path', 'polygon', 'polyline', 'line', 'title', 'rect', 'filter', 'feGaussianBlur', 'feOffset', 'feBlend', 'linearGradient', 'stop', 'text', 'symbol', 'textPath', 'defs', 'fegaussianblur', 'feoffset', 'feblend', 'circle', 'ellipse', 'g'];\r\n        for (i = 0; i < list.length; i += 1) {\r\n            if (list[i] === tag) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    static createHTML(node: any): HTMLElement {\r\n        return <HTMLElement>this.create(node);\r\n    }\r\n    static create(node: any): Element {\r\n        let style, item, xmlns, key, tag, k;\r\n        if (document.createElementNS && (this.isSVG(node.tag) || node.xmlns)) {\r\n            if (node.xmlns) {\r\n                xmlns = node.xmlns;\r\n            } else {\r\n                xmlns = 'http://www.w3.org/2000/svg';\r\n            }\r\n            if (node.tag === 'img' && xmlns) {\r\n                item = document.createElementNS(xmlns, 'image');\r\n                item.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\r\n                item.setAttributeNS('http://www.w3.org/1999/xlink', 'href', node.src);\r\n            } else {\r\n                item = document.createElementNS(xmlns, node.tag);\r\n            }\r\n        } else {\r\n            item = document.createElement(node.tag);\r\n        }\r\n        tag = node.tag.toLowerCase();\r\n        for (key in node) {\r\n            if (!node.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            k = key.toLowerCase();\r\n            if (node[key] === null) {\r\n                continue;\r\n            }\r\n            if (k === 'tag' || k.charAt(0) === '$' || k === '$graphModel') {\r\n                continue;\r\n            }\r\n            if (k.charAt(0) === '#') {\r\n                item[k.substring(1)] = node[key];\r\n                continue;\r\n            }\r\n            if (k === 'rotate') {\r\n                item.setAttribute('transform', 'rotate(' + node[key] + ',' + node.$graphModel.x + ',' + node.$graphModel.y + ')');\r\n                continue;\r\n            }\r\n            if (k === 'value') {\r\n                if (!node[key]) {\r\n                    continue;\r\n                }\r\n                if (tag !== 'input') {\r\n                    if (tag === 'text') {// SVG\r\n                        item.appendChild(document.createTextNode(node[key]));\r\n                    } else {\r\n                        item.innerHTML = node[key];\r\n                    }\r\n                } else {\r\n                    item[key] = node[key];\r\n                }\r\n                continue;\r\n            }\r\n            if (k.indexOf('on') === 0) {\r\n                this.bind(item, k.substring(2), node[key]);\r\n                continue;\r\n            }\r\n            if (k.indexOf('-') >= 0) {\r\n                item.style[key] = node[key];\r\n            } else {\r\n                if (k === 'style' && typeof (node[key]) === 'object') {\r\n                    for (style in node[key]) {\r\n                        if (!node[key].hasOwnProperty(style)) {\r\n                            continue;\r\n                        }\r\n                        if (node[key][style]) {\r\n                            if ('transform' === style) {\r\n                                item.style.transform = node[key][style];\r\n                                item.style.msTransform = item.style.MozTransform = item.style.WebkitTransform = item.style.OTransform = node[key][style];\r\n                            } else {\r\n                                item.style[style] = node[key][style];\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    item.setAttribute(key, node[key]);\r\n                }\r\n            }\r\n        }\r\n        if (node.$parent) {\r\n            node.$parent.appendChild(item);\r\n        }\r\n        if (node.$graphModel) {\r\n            item.$graphModel = node.$graphModel;\r\n        }\r\n        return item;\r\n    }\r\n\r\n    static setSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttribute('width', value);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.setAttribute('height', value);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setAttributeSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttributeNS(null, 'width', value);\r\n        value = Util.getValue(height);\r\n        item.setAttributeNS(null, 'height', value);\r\n    }\r\n\r\n    static setStyleSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setPos(item: any, x: number, y: number): void {\r\n        if (item.x && item.x.baseVal) {\r\n            item.style.left = x + 'px';\r\n            item.style.top = y + 'px';\r\n        } else {\r\n            item.x = x;\r\n            item.y = y;\r\n        }\r\n    }\r\n\r\n    static getValue(value: string | number): number {\r\n        return parseInt(('0' + value).replace('px', ''), 10);\r\n    }\r\n\r\n    static isIE(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('.net') > -1;\r\n    }\r\n\r\n    static isEdge(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('edge') > -1;\r\n    }\r\n\r\n    static isFireFox(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n    }\r\n\r\n    static isSafari(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        return navigator.userAgent.toLowerCase().indexOf('safari') > -1 && !isEdge;\r\n    }\r\n\r\n    static isOpera(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('opera') > -1;\r\n    }\r\n\r\n    static isChrome(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        let isSafari = Util.isSafari();\r\n        return navigator.userAgent.toLowerCase().indexOf('chrome') > -1 && !isEdge && isSafari;\r\n    }\r\n\r\n    static getEventX(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetX'] : event.layerX;\r\n    }\r\n\r\n    static getEventY(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetY'] : event.layerY;\r\n    }\r\n\r\n    static getNumber(str: string): number {\r\n        return parseInt((str || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    static getStyle(styleProp: string): CSS {\r\n        let i, style, diff, current, ref, el = document.createElement('div'), css;\r\n        document.body.appendChild(el);\r\n        css = new CSS(styleProp);\r\n        ref = new CSS(styleProp, el).css;\r\n        style = window.getComputedStyle(el, null);\r\n        el.className = styleProp;\r\n        current = new CSS(styleProp, el).css;\r\n        diff = Util.getNumber(style.getPropertyValue('border-width'));\r\n        for (i in current) {\r\n            if (!current.hasOwnProperty(i)) {\r\n                continue;\r\n            }\r\n            if (i === 'width' || i === 'height') {\r\n                if (Util.getNumber(current[i]) !== 0 && Util.getNumber(current[i]) + diff * 2 !== Util.getNumber(ref[i])) {\r\n                    css.add(i, current[i]);\r\n                }\r\n            } else if (current[i] !== ref[i]) {\r\n                css.add(i, current[i]);\r\n            }\r\n        }\r\n        document.body.removeChild(el);\r\n        return css;\r\n    }\r\n\r\n    static sizeOf(item: string | any, node?: Node): ClientRect {\r\n        let board;\r\n        let rect: ClientRect;\r\n        let addBoard: boolean;\r\n        if (!item) {\r\n            return undefined;\r\n        }\r\n        if (node) {\r\n            board = node.$owner.$view;\r\n            addBoard = false;\r\n        }\r\n\r\n        if (!board) {\r\n            addBoard = true;\r\n            board = Util.createShape({ tag: 'svg', id: 'root', width: 200, height: 200 });\r\n            document.body.appendChild(board);\r\n        }\r\n        if (board.tagName === 'svg') {\r\n            if (typeof item === 'string') {\r\n                item = Util.create({ tag: 'text', $font: true, value: item });\r\n                item.setAttribute('width', '5px');\r\n            }\r\n        } else if (typeof item === 'string') {\r\n            item = document.createTextNode(item);\r\n        }\r\n        board.appendChild(item);\r\n        rect = item.getBoundingClientRect();\r\n        board.removeChild(item);\r\n\r\n        if (addBoard) {\r\n            document.body.removeChild(board);\r\n        }\r\n        return rect;\r\n    }\r\n\r\n    static getColor(style: string, defaultColor?: string) {\r\n        if (style) {\r\n            if (style.toLowerCase() === 'create') {\r\n                return '#008000';\r\n            }\r\n            if (style.toLowerCase() === 'nac') {\r\n                return '#FE3E3E';\r\n            }\r\n            if (style.indexOf('#') === 0) {\r\n                return style;\r\n            }\r\n        }\r\n        if (defaultColor) {\r\n            return defaultColor;\r\n        }\r\n        return '#000';\r\n    }\r\n\r\n    public static utf8$to$b64(str: string): string {\r\n        return window.btoa(encodeURIComponent(str));\r\n    }\r\n\r\n    public static showSVG(control: DiagramElement) {\r\n        let svg = Util.create({\r\n            tag: 'svg',\r\n            style: { left: control.getPos().x, top: control.getPos().y, position: 'absolute' }\r\n        });\r\n        let child = control.getSVG();\r\n        if (child) {\r\n            svg.appendChild(child);\r\n        }\r\n        Util.setSize(svg, control.getSize().x, control.getSize().y);\r\n        document.body.appendChild(svg);\r\n    }\r\n\r\n    public static toJson(ref: JSON | Object): Object {\r\n        let result = {};\r\n        return Util.copy(result, ref, false, false);\r\n    }\r\n\r\n    public static initControl(parent: Control, control: Control, type: string, id: string, json: JSON | Object) {\r\n        if (typeof control.init === 'function') {\r\n            control.init(parent, type, id);\r\n        }\r\n        if (typeof control.load === 'function') {\r\n            control.load(json);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * copy One Json into another\r\n     * @function\r\n     * @param ref reference Json\r\n     * @param src source Json\r\n     * @param full all attributes include privet $\r\n     * @param replace set the original reference or copy it\r\n     * @returns ref\r\n     * @name copy\r\n     */\r\n    public static copy(ref: JSON | Object, src: JSON | Object, full: boolean, replace: boolean) {\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (replace) {\r\n                        ref[i] = src[i];\r\n                        continue;\r\n                    }\r\n                    if (!ref[i]) {\r\n                        if (src[i] instanceof Array) {\r\n                            ref[i] = [];\r\n                        } else {\r\n                            ref[i] = {};\r\n                        }\r\n                    }\r\n                    Util.copy(ref[i], src[i], full, false);\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref[i] = src[i];\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    public static xmlstringify(text: string): string {\r\n        text = text.replace('<', '&lt;');\r\n        text = text.replace('>', '&gt;');\r\n        return text;\r\n    }\r\n\r\n    public static toXML(ref: JSON | Object | any, src: JSON | Object | any, full: boolean, doc: Document): any {\r\n        let name;\r\n        if (!ref) {\r\n            name = src.constructor.name;\r\n            doc = document.implementation.createDocument(null, name, null);\r\n            ref = doc.childNodes[0];\r\n        }\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (!ref.getAttribute(i)) {\r\n                        if (src[i] instanceof Array) {\r\n                            for (let c in src[i]) {\r\n                                if (!src[i].hasOwnProperty(c)) {\r\n                                    continue;\r\n                                }\r\n                                name = src[i][c].constructor.name;\r\n                                let child = doc.createElement(name);\r\n                                ref.appendChild(child);\r\n                                Util.toXML(child, src[i][c], full, doc);\r\n                            }\r\n                        } else {\r\n                            name = src[i].constructor.name;\r\n                            let child = doc.createElement(name);\r\n                            ref.appendChild(child);\r\n                            Util.toXML(child, src[i], full, doc);\r\n                        }\r\n                    } else {\r\n                        Util.toXML(ref.getAttribute(i), src[i], full, doc);\r\n                    }\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref.setAttribute(i, src[i]);\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    static Range(min: Point, max: Point, x: number, y: number) {\r\n        max.x = Math.max(max.x, x);\r\n        max.y = Math.max(max.y, y);\r\n        min.x = Math.min(min.x, x);\r\n        min.y = Math.min(min.y, y);\r\n    }\r\n\r\n    public static getPosition(m: number, n: number, entity: DiagramElement, refCenter: Point) {\r\n        let t, p = [], list, distance = [], min = 999999999, position, i, step = 15;\r\n        let pos: Point = entity.getPos();\r\n        let size: Point = entity.getSize();\r\n        list = [Point.LEFT, Point.RIGHT];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = this.getLRPosition(m, n, entity, list[i]);\r\n            if (t.y >= pos.y && t.y <= (pos.y + size.y + 1)) {\r\n                t.y += (entity['$' + list[i]] * step);\r\n                if (t.y > (pos.y + size.y)) {\r\n                    // Alternative\r\n                    t = Util.getUDPosition(m, n, entity, Point.DOWN, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        list = [Point.UP, Point.DOWN];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = Util.getUDPosition(m, n, entity, list[i]);\r\n            if (t.x >= pos.x && t.x <= (pos.x + size.x + 1)) {\r\n                t.x += (entity['$' + list[i]] * step);\r\n                if (t.x > (pos.x + size.x)) {\r\n                    // Alternative\r\n                    t = this.getLRPosition(m, n, entity, Point.RIGHT, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        for (i = 0; i < p.length; i += 1) {\r\n            if (distance[i] < min) {\r\n                min = distance[i];\r\n                position = p[i];\r\n            }\r\n        }\r\n        return position;\r\n    }\r\n\r\n    public static getUDPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let x, y: number = pos.y;\r\n        if (p === Point.DOWN) {\r\n            y += size.y;\r\n        }\r\n        x = (y - n) / m;\r\n        if (step) {\r\n            x += e['$' + p] * step;\r\n            if (x < pos.x) {\r\n                x = pos.x;\r\n            } else if (x > (pos.x + size.x)) {\r\n                x = pos.x + size.x;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static getLRPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let y: number, x: number = pos.x;\r\n        if (p === Point.RIGHT) {\r\n            x += size.x;\r\n        }\r\n        y = m * x + n;\r\n        if (step) {\r\n            y += e['$' + p] * step;\r\n            if (y < pos.y) {\r\n                y = pos.y;\r\n            } else if (y > (pos.y + size.y)) {\r\n                y = pos.y + size.y;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static hasClass(element: Element, cls: string) {\r\n        let className = element.getAttribute('class');\r\n        return className.indexOf(cls) > 0;\r\n    }\r\n    public static addClass(element: Element, cls: string) {\r\n        if (!Util.hasClass(element, cls)) {\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className + ' ' + cls);\r\n        }\r\n    }\r\n    public static removeClass(element: Element, cls: string) {\r\n        if (Util.hasClass(element, cls)) {\r\n            let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className.replace(reg, ' ').trim());\r\n        }\r\n    }\r\n\r\n    public static startsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.startsWith) {\r\n            return s.indexOf(searchS) === 0;\r\n        }\r\n\r\n        return s.startsWith(searchS);\r\n    }\r\n\r\n    public static endsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.endsWith) {\r\n            let lastIndex = s.lastIndexOf(searchS);\r\n            return lastIndex !== -1 && lastIndex === (s.length - 1);\r\n        }\r\n\r\n        return s.endsWith(searchS);\r\n    }\r\n\r\n    public static includes(s: string, searchS: string): boolean {\r\n        if (!String.prototype.includes) {\r\n            let idx = s.indexOf(searchS);\r\n            return idx > -1;\r\n        }\r\n        if (s === null) {\r\n            return false;\r\n        }\r\n\r\n        return s.includes(searchS);\r\n    }\r\n\r\n    public static isParentOfChild(parent: Element, child: Element): boolean {\r\n\r\n        if (!parent || !child) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isIE()) {\r\n            let children = parent.childNodes;\r\n            // let found = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                let childItem = children[i];\r\n                if (childItem === child) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        return parent.contains(child);\r\n    }\r\n\r\n    public static createCustomEvent(type: string, params?: any): CustomEvent {\r\n        let evt: CustomEvent;\r\n\r\n        if (typeof window['CustomEvent'] !== 'function') {\r\n            params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n            evt = document.createEvent('CustomEvent');\r\n            evt.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\r\n            return evt;\r\n        }\r\n\r\n        evt = new CustomEvent(type);\r\n\r\n        return evt;\r\n    }\r\n\r\n    public static saveToLocalStorage(model: any): boolean {\r\n        if (!this.isAutoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isLocalStorageSupported()) {\r\n            if (model) {\r\n                if (model.$isLoading) {\r\n                    return false;\r\n                }\r\n                let jsonObj = Util.toJson(model);\r\n                let data = JSON.stringify(jsonObj, null, '\\t');\r\n                localStorage.setItem('diagram', data);\r\n            } else {\r\n                localStorage.removeItem('diagram');\r\n            }\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static getDiagramFromLocalStorage(): string {\r\n        if (Util.isLocalStorageSupported()) {\r\n            return localStorage.getItem('diagram');\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    public static isLocalStorageSupported(): boolean {\r\n        if (this.isEdge()) {\r\n            return false;\r\n        }\r\n        return localStorage !== undefined;\r\n    }\r\n}\r\n"],"sourceRoot":""}
Severity: Minor
Found in doc/diagram.js.map by fixme

TODO found
Open

{"version":3,"sources":["webpack://DiagramJS/webpack/bootstrap","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Adapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Bridge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/BridgeElement.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/CSS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Control.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Data.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventBus.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/JSEPS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Palette.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertiesPanel.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertyBinder.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/RGBColor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/SVGConverter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/ScrumBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Toolbar.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/UML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/VirtualKeyBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/JavaAdapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/BaseElements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/ClassEditor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Graph.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Model.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregate.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Association.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Composition.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Generalisation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Implements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Attribute.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/AutoComplete.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/BR.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Button.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Class.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/ClazzProperty.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Dice.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Div.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Form.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/HTML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/InfoText.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Input.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Label.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Method.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Node.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/SO.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/StereoType.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Symbol.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Table.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/AddNode.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Drag.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/GraphListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/ImportFile.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/NewEdge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Select.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Zoom.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayout.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayoutMin.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/Random.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/main.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/util.ts"],"names":[],"mappings":"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","file":"diagram.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./main.ts\");\n","export abstract class Adapter {\r\n    public id: string = null;\r\n\r\n    abstract update(evt: Object): boolean;\r\n}\r\n","'use strict';\r\n\r\nimport * as controls from './elements/nodes';\r\nimport * as adapters from './adapters';\r\nimport Data from './Data';\r\nimport {Control} from './Control';\r\nimport {Adapter} from './Adapter';\r\nimport {Graph} from './elements';\r\nimport {Util} from './util';\r\nimport {Point} from './elements';\r\n\r\nexport class Bridge extends Control {\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public static version: string = '0.42.01.1601007-1739';\r\n    private controlFactory: Object = {};\r\n    private adapterFactory: Object = {};\r\n    private controls: Object = {};\r\n    private adapters: Object = {};\r\n    private items: Object = {};\r\n    private controlNo: number = 1;\r\n    private online: boolean = true;\r\n    private language: string = navigator.language.toUpperCase();\r\n    private toolBar: HTMLElement;\r\n\r\n    constructor(viewRoot?: HTMLElement) {\r\n        super();\r\n        let i;\r\n\r\n        if (viewRoot) {\r\n            this.$view = viewRoot;\r\n        }\r\n\r\n        let keys: string[] = Object.keys(adapters);\r\n        for (i = 0; i < keys.length; i++) {\r\n            let child = adapters[keys[i]];\r\n            if (child && child.id) {\r\n                this.adapterFactory[child.id.toLowerCase()] = child;\r\n            }\r\n        }\r\n\r\n        keys = Object.keys(controls);\r\n        for (i = 0; i < keys.length; i++) {\r\n            this.addControl(controls[keys[i]]);\r\n        }\r\n        this.addControl(Graph);\r\n\r\n        let that = this;\r\n        window.addEventListener('load', function () {\r\n            let updateOnlineStatus = function updateOnlineStatus() {\r\n                that.setOnline(navigator.onLine);\r\n            };\r\n            window.addEventListener('online', updateOnlineStatus);\r\n            window.addEventListener('offline', updateOnlineStatus);\r\n        });\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public setOnline(value: boolean) {\r\n        this.online = value;\r\n        if (this.toolBar.children[0]) {\r\n            this.toolBar.children[0].className = value ? 'online' : 'offline';\r\n        }\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addToolbar(): boolean {\r\n        if (this.toolBar) {\r\n            return false;\r\n        }\r\n        this.toolBar = document.createElement('div');\r\n        this.toolBar.className = 'onlineStatus';\r\n        let child = document.createElement('div');\r\n        child.className = 'online';\r\n        this.toolBar.appendChild(child);\r\n        child = document.createElement('div');\r\n        child.className = 'lang';\r\n        child.innerHTML = this.language;\r\n        this.toolBar.appendChild(child);\r\n\r\n        let body: HTMLElement = document.getElementsByTagName('body')[0];\r\n        body.insertBefore(this.toolBar, body.firstChild);\r\n        // Refresh Online Status\r\n        this.setOnline(this.online);\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addListener = function (listener: any) {\r\n        this.listener.push(listener);\r\n    };\r\n\r\n    public addControl(control: any) {\r\n        if (control && control.name) {\r\n            this.controlFactory[control.name.toLowerCase()] = control;\r\n        }\r\n    }\r\n\r\n    public getId(): string {\r\n        return 'control' + (this.controlNo++);\r\n    }\r\n\r\n    public adapterUpdate(message: string) {\r\n        let keys: string[] = Object.keys(this.adapters);\r\n        if (keys.length > 0) {\r\n            let i;\r\n            for (i = 0; i < keys.length; i++) {\r\n                let adapterList = this.adapters[keys[i]];\r\n                if (adapterList instanceof Adapter) {\r\n                    adapterList.update(message);\r\n                } else {\r\n                    for (let adapter of adapterList) {\r\n                        adapter.update(message);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        let config = {}, className: string, id: string;\r\n        if (typeof(json) === 'string') {\r\n            // Only a String\r\n            config['id'] = '' + json;\r\n            let item = document.getElementById(config['id']);\r\n            let className: string;\r\n            if (item) {\r\n                className = item.getAttribute('class');\r\n                if (!className) {\r\n                    className = item.getAttribute('classname') || '';\r\n                }\r\n                // Found Element and now config Data element\r\n                if (item.getAttribute('property')) {\r\n                    if (this.hasItem(item.getAttribute('property'))) {\r\n                        let data = this.getItem(item.getAttribute('property'));\r\n                        for (let key in data.prop) {\r\n                            if (item.getAttribute(key)) {\r\n                                data.setValue(key, item.getAttribute(key));\r\n                            }\r\n                        }\r\n                        if (item.getAttribute('property')) {\r\n                            // TODO: FIXME!!!\r\n                            // data.property = item.getAttribute(\"property\");\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                className = '' + json;\r\n            }\r\n            className = className.toLowerCase();\r\n            config['className'] = className;\r\n        } else {\r\n            config = <JSON>json;\r\n        }\r\n        // Config validate\r\n        if (!config['id']) {\r\n            config['id'] = this.getId();\r\n        }\r\n        // Backup for Old Graph\r\n        if (!config['className'] && (config['type'] === 'clazzdiagram' || config['type'] === 'objectdiagram')) {\r\n            config['className'] = 'graph';\r\n        }\r\n\r\n        className = config['className'] || config['class'];\r\n        className = className.toLocaleLowerCase();\r\n        id = config['id'];\r\n\r\n        // Check For Control or Data\r\n        if ((config['prop'] || config['upd'] || config['rem']) && this.controls[id] === null) {\r\n            // Its Data\r\n            let newData = !this.hasItem(config['id']);\r\n            let item: Data = this.getItem(config['id']);\r\n            // TODO: FIXME!!!\r\n            // if (id && className && !item.property) {\r\n            //      item.property = className;\r\n            // }\r\n            if (newData) {\r\n                for (let i in this.controls) {\r\n                    if (this.controls.hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    this.controls[i].addItem(this, item);\r\n                }\r\n            }\r\n            // Add all Values to item\r\n            item.addProperties(config);\r\n            // Bridge.addProperties(config['prop'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return item;\r\n        }\r\n\r\n        let control;\r\n        if (this.controls[id]) {\r\n            control = this.controls[id];\r\n            control.initControl(json);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return control;\r\n        }\r\n\r\n        if (typeof(this.controlFactory[className]) === 'object' || typeof(this.controlFactory[className]) === 'function') {\r\n            let obj = this.controlFactory[className];\r\n            control = new obj(json);\r\n            Util.initControl(owner || this, control, config['property'], id, json);\r\n\r\n            if (control.id) {\r\n                this.controls[control.id] = control;\r\n            } else {\r\n                this.controls[id] = control;\r\n            }\r\n\r\n            // create DataObject and register this control as listener to it\r\n            // let obj = {id:id};\r\n            // let data: Data = this.load(obj);\r\n            // data.addListener(this);\r\n\r\n            // Try to Show\r\n            if (typeof control.getSVG === 'function' && typeof control.getSize === 'function') {\r\n                let size: Point = control.getSize();\r\n\r\n                let svg = Util.createShape({\r\n                    tag: 'svg',\r\n                    id: 'root',\r\n                    width: size.x,\r\n                    height: size.y\r\n                });\r\n\r\n                let view = control.getSVG();\r\n                svg.appendChild(view);\r\n                document.getElementsByTagName('body')[0].appendChild(svg);\r\n            }\r\n            return control;\r\n        }\r\n        return null;\r\n        // bridge.load('{class:table, columns:[{id:'firstname'}, {id:'lastname'}]}');\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n\r\n        if (this.items[id] !== undefined) {\r\n            return true;\r\n        }\r\n        id = id.split('.')[0];\r\n        return (this.items[id] !== undefined);\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return this.items;\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        let item = this.items[id];\r\n        if (!item) {\r\n            id = id.split('.')[0];\r\n            item = this.items[id];\r\n            if (!item) {\r\n                item = new Data();\r\n                item.id = id;\r\n                this.items[id] = item;\r\n            }\r\n        }\r\n        return item;\r\n    }\r\n\r\n    /**\r\n     * Method for executing user input -> Event\r\n     * @param object\r\n     * @param attribute\r\n     * @param oldValue\r\n     * @param newValue\r\n     * @returns {boolean}\r\n     */\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        alert('Bridge.setValue: oldVal:' + oldValue + ', newVal: ' +  + newValue + ', attribute: ' + attribute + ', object: ' + JSON.stringify(object));\r\n        let obj: Data;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n\r\n        } else if (object instanceof Data) {\r\n            obj = object;\r\n            id = object.id;\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = <Data>object;\r\n            id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return false;\r\n        }\r\n        if (obj) {\r\n            // Execute Update to Data\r\n            obj.setValue(attribute, newValue);\r\n            // Could be done here, but currently is done at this.execueChange..:\r\n            // obj[attribute] = value;\r\n        }\r\n\r\n        /*let tmp = {'id': id};\r\n        if (typeof(newValue) !== 'undefined' && newValue !== null) {\r\n            let upd = {};\r\n            upd[attribute] = newValue;\r\n            tmp['upd'] = upd;\r\n        }\r\n        if (typeof(oldValue) !== 'undefined' && oldValue !== null) {\r\n            let rem = {};\r\n            rem[attribute] = oldValue;\r\n            tmp['rem'] = rem;\r\n        }*/\r\n        // this.load(tmp);\r\n        return true;\r\n    }\r\n\r\n    public getValue(object: Object, attribute: string): any {\r\n        let obj: Object;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = object;\r\n            // id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return;\r\n        }\r\n        if (obj) {\r\n            if (obj.hasOwnProperty(attribute)) {\r\n                return obj[attribute];\r\n            } else if (obj instanceof Data) {\r\n                return (<Data>obj).getValue(attribute);\r\n            } else {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    public getNumber(object: Object, attribute: string, defaultValue: number = 0): number {\r\n        let res = <number>this.getValue(object, attribute);\r\n        if (typeof res === 'number') {\r\n            return res;\r\n        } else if (typeof res === 'string') {\r\n            // check whether res is a number\r\n            let value = Number(res);\r\n            if (value || value === 0) {\r\n                return value;\r\n            }\r\n        }\r\n        return defaultValue;\r\n    }\r\n\r\n    getControl(controlId: string) {\r\n        return this.controls[controlId];\r\n    }\r\n\r\n    public registerListener(eventType: string, control: Control, callBackfunction: string): Control {\r\n        if (typeof control === 'string') {\r\n            control = this.getControl(<string>control);\r\n        }\r\n        if (!control) {\r\n            return null;\r\n        }\r\n        if (eventType) {\r\n            eventType = eventType.toLowerCase();\r\n        }\r\n        control.registerListenerOnHTMLObject(eventType);\r\n        if (callBackfunction) {\r\n            let adapter: DelegateAdapter = new DelegateAdapter();\r\n            adapter.callBackfunction = callBackfunction;\r\n            adapter.id = control.getId();\r\n            this.addAdapter(adapter, eventType);\r\n        }\r\n        return control;\r\n    }\r\n\r\n    public addAdapter(adapter: Adapter | string, eventType: string): Adapter {\r\n        if (!eventType) {\r\n            eventType = '';\r\n        }\r\n        let result: Adapter;\r\n        if (adapter instanceof String) {\r\n            let obj = this.adapterFactory[adapter.toLowerCase()];\r\n            result = new obj();\r\n        } else {\r\n            result = <Adapter>adapter;\r\n        }\r\n        let handlers = this.adapters[eventType];\r\n\r\n        if (handlers === null || handlers === undefined) {\r\n            handlers = [];\r\n            this.adapters[eventType] = handlers;\r\n        }\r\n        handlers.push(result);\r\n        return result;\r\n    }\r\n\r\n    public fireEvent(evt: Event): void {\r\n        let handlers = this.adapters[''];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n        handlers = this.adapters[evt['eventType']];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport class DelegateAdapter extends Adapter {\r\n    adapter: Adapter;\r\n    callBackfunction: string;\r\n\r\n    update(evt: Event): boolean {\r\n        if (this.adapter) {\r\n            this.adapter.update(evt);\r\n            return true;\r\n        } else if (this.callBackfunction) {\r\n            return this.executeFunction(this.callBackfunction, evt);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public setAdapter(adapter: Adapter): boolean {\r\n        this.adapter = adapter;\r\n        return true;\r\n    }\r\n\r\n    private executeFunction(strValue: string, evt: Event): boolean {\r\n        let scope = window;\r\n        let scopeSplit = strValue.split('.');\r\n        for (let i = 0; i < scopeSplit.length - 1; i++) {\r\n            scope = scope[scopeSplit[i]];\r\n            if (scope === undefined) {\r\n                return false;\r\n            }\r\n        }\r\n        let fn: any = scope[scopeSplit[scopeSplit.length - 1]];\r\n        if (typeof fn === 'function') {\r\n            fn.call(scope);\r\n            return true;\r\n        } else {\r\n            window['callBack1'].update(evt);\r\n\r\n        }\r\n        return false;\r\n    }\r\n}\r\n","'use strict';\r\nimport Data from './Data';\r\n\r\nexport default class BridgeElement {\r\n    private static elementSet: BridgeElement[] = [];\r\n    public model: Data;\r\n    public id: string;\r\n    public gui: HTMLElement;\r\n\r\n    constructor(model: Data) {\r\n        this.model = model;\r\n        this.id = model.id;\r\n        BridgeElement.elementSet.push(this);\r\n    }\r\n}\r\n","import {Util} from './util';\r\n\r\n// \t\t\t\t######################################################### CSS #########################################################\r\nexport class CSS {\r\n    public css: Object;\r\n    private name: string;\r\n\r\n    constructor(name: string, item?: any) {\r\n        let i, value, border: string, prop, el;\r\n        this.name = name;\r\n        this.css = {};\r\n        if (!item) {\r\n            return;\r\n        }\r\n\r\n        el = window.getComputedStyle(item, null);\r\n        border = el.getPropertyValue('border');\r\n        for (i in el) {\r\n            prop = i;\r\n            value = el.getPropertyValue(prop);\r\n            if (value && value !== '') {\r\n                // optimize CSS\r\n                if (border) {\r\n                    if (prop === 'border-bottom' || prop === 'border-right' || prop === 'border-top' || prop === 'border-left') {\r\n                        if (value !== border) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-color' || prop === 'border-bottom-color' || prop === 'border-right-color' || prop === 'border-top-color' || prop === 'border-left-color') {\r\n                        if (border.substring(border.length - value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-width') {\r\n                        if (border.substring(0, value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else {\r\n                        this.css[prop] = value;\r\n                    }\r\n                } else {\r\n                    this.css[prop] = value;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public static getStdDef() {\r\n        let child, def = Util.create({tag: 'defs'});\r\n\r\n        child = Util.create({tag: 'filter', id: 'drop-shadow'});\r\n        child.appendChild(Util.create({tag: 'feGaussianBlur', 'in': 'SourceAlpha', result: 'blur-out', stdDeviation: 2}));\r\n        child.appendChild(Util.create({tag: 'feOffset', 'in': 'blur-out', dx: 2, dy: 2}));\r\n        child.appendChild(Util.create({tag: 'feBlend', 'in': 'SourceGraphic', mode: 'normal'}));\r\n        def.appendChild(child);\r\n        child = Util.create({tag: 'linearGradient', id: 'reflect', x1: 0, x2: 0, y1: '50%', y2: 0, spreadMethod: 'reflect'});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#aaa', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#eee', offset: '100%'}));\r\n        def.appendChild(child);\r\n\r\n        child = Util.create({tag: 'linearGradient', id: 'classelement', x1: 0, x2: '100%', y1: '100%', y2: 0});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#fff', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#d3d3d3', offset: 1}));\r\n        def.appendChild(child);\r\n\r\n        return def;\r\n    }\r\n\r\n    public static getSubstring(str: string, search: string, startChar: string, endChar: string, splitter: string): any {\r\n        let pos, end, count = 0, array = [];\r\n        pos = str.indexOf(search);\r\n        if (pos > 0) {\r\n            end = str.indexOf(startChar, pos);\r\n            pos = end + 1;\r\n            if (end > 0) {\r\n                while (end < str.length) {\r\n                    if (str.charAt(end) === startChar) {\r\n                        count += 1;\r\n                    }\r\n                    if (str.charAt(end) === endChar) {\r\n                        count -= 1;\r\n                        if (count === 0) {\r\n                            if (splitter && pos !== end) {\r\n                                array.push(str.substring(pos, end).trim());\r\n                            }\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (str.charAt(end) === splitter && count === 1) {\r\n                        array.push(str.substring(pos, end).trim());\r\n                        pos = end + 1;\r\n                    }\r\n\r\n                    end += 1;\r\n                }\r\n                if (splitter) {\r\n                    return array;\r\n                }\r\n                return str.substring(pos, end);\r\n            }\r\n            return str.substring(pos);\r\n        }\r\n        return '';\r\n    }\r\n\r\n    public static addStyle(board: SVGElement, styleName: any) {\r\n        let defs, style: any, css;\r\n        if (styleName.baseVal || styleName.baseVal === '') {\r\n            styleName = styleName.baseVal;\r\n        }\r\n        if (!styleName) {\r\n            return;\r\n        }\r\n        defs = CSS.getDefs(board);\r\n        if (defs.getElementsByTagName('style').length > 0) {\r\n            style = defs.getElementsByTagName('style')[0];\r\n        } else {\r\n            style = Util.create({tag: 'style'});\r\n            style.item = {};\r\n            defs.appendChild(style);\r\n        }\r\n        if (!style.item[styleName]) {\r\n            css = Util.getStyle(styleName);\r\n            style.item[styleName] = css;\r\n            style.innerHTML = style.innerHTML + '\\n.' + styleName + css.getSVGString(board);\r\n        }\r\n    }\r\n\r\n    public static addStyles(board: SVGElement, item: any) {\r\n        if (!item) {\r\n            return;\r\n        }\r\n        let items, i, className: any = item.className;\r\n\r\n        if (className) {\r\n            if (className.baseVal || className.baseVal === '') {\r\n                className = className.baseVal;\r\n            }\r\n        }\r\n        if (className) {\r\n            items = className.split(' ');\r\n            for (i = 0; i < items.length; i += 1) {\r\n                CSS.addStyle(board, items[i].trim());\r\n            }\r\n        }\r\n        for (i = 0; i < item.childNodes.length; i += 1) {\r\n            this.addStyles(board, item.childNodes[i]);\r\n        }\r\n    }\r\n\r\n    public static getDefs(board: SVGElement) {\r\n        let defs;\r\n        if (board.getElementsByTagName('defs').length < 1) {\r\n            defs = Util.create({tag: 'defs'});\r\n            board.insertBefore(defs, board.childNodes[0]);\r\n        } else {\r\n            defs = board.getElementsByTagName('defs')[0];\r\n        }\r\n        return defs;\r\n    }\r\n\r\n    public add(key: string, value: string) {\r\n        this.css[key] = value;\r\n    }\r\n\r\n    public get(key: string): any {\r\n        let i;\r\n        for (i in this.css) {\r\n            if (i === key) {\r\n                return this.css[key];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public getNumber(key: string) {\r\n        return parseInt((this.get(key) || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    public getSVGString(board: SVGElement) {\r\n        let str, pos, style, defs, value, filter, z;\r\n        str = '{';\r\n        for (style in this.css) {\r\n            if (!this.css.hasOwnProperty(style)) {\r\n                continue;\r\n            }\r\n            if (style === 'border') {\r\n                pos = this.css[style].indexOf(' ');\r\n                str = str + 'stroke-width: ' + this.css[style].substring(0, pos) + ';';\r\n                pos = this.css[style].indexOf(' ', pos + 1);\r\n                str = str + 'stroke:' + this.css[style].substring(pos) + ';';\r\n            } else if (style === 'background-color') {\r\n                str = str + 'fill: ' + this.css[style] + ';';\r\n            } else if (style === 'background') {\r\n                value = CSS.getSubstring(this.css[style], 'linear-gradient', '(', ')', ',');\r\n                if (value.length > 0) {\r\n                    defs = CSS.getDefs(board);\r\n                    if (value[0] === '45deg') {\r\n                        pos = 1;\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '100%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                    } else {\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '0%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                        pos = 0;\r\n                    }\r\n                    defs.appendChild(filter);\r\n                    while (pos < value.length) {\r\n                        value[pos] = value[pos].trim();\r\n                        z = value[pos].lastIndexOf(' ');\r\n                        filter.appendChild(Util.create({\r\n                            tag: 'stop',\r\n                            'offset': value[pos].substring(z + 1),\r\n                            style: {'stop-color': value[pos].substring(0, z)}\r\n                        }));\r\n                        pos += 1;\r\n                    }\r\n                    str = str + 'fill: url(#' + this.name + ');';\r\n                    continue;\r\n                }\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n                // box-shadow: inset 0 3px 4px #888;\r\n// \t\t\t\t<defs>\r\n// \t\t\t\t\t<filter id='drop-shadow'>\r\n// \t\t\t\t\t\t<feGaussianBlur in='SourceAlpha' result='blur-out' stdDeviation='2'></feGaussianBlur>\r\n// \t\t\t\t\t\t<feOffset in='blur-out' dx='2' dy='2'></feOffset>\r\n// \t\t\t\t\t\t<feBlend in='SourceGraphic' mode='normal'></feBlend>\r\n// \t\t\t\t\t</filter>\r\n// \t\t\t\t</defs>\r\n            } else {\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n            }\r\n        }\r\n        str = str + '}';\r\n        return str;\r\n    }\r\n}\r\n","import {Bridge} from './Bridge';\r\nimport Data from './Data';\r\nimport EventListener from './EventListener';\r\n\r\nexport abstract class Control {\r\n    public $owner: Control;\r\n    /**\r\n     *\r\n     */\r\n    public property: string;\r\n    public id: string;\r\n    public $view: Element;\r\n    public $viewData: Data = null;\r\n\r\n    protected $model: Data;\r\n    protected $viewListener: EventListenerOrEventListenerObject;\r\n\r\n    /**\r\n     * The properties, we want to listen to\r\n     */\r\n    // static defaultProperties: string[] = [];\r\n\r\n    // public getProperties(): string[] {\r\n    //     return this.properties;\r\n    // }\r\n\r\n    constructor() {\r\n        // e.g. this.properties.push(\"key\");\r\n        // this.properties.push(\"property\");\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data: Data = new Data();\r\n        if (oldData) {\r\n            oldData.removeListener(this);\r\n            const keys: string[] = oldData.getKeys();\r\n            for (let i = 0; i < keys.length; i++) {\r\n                let attr = keys[i];\r\n                if (this.$view) {\r\n                    if (this.$view[attr] === null) {\r\n                        continue;\r\n                    }\r\n                    data.setValue(attr, this.$view[attr]);\r\n                } else {\r\n                    data.setValue(attr, null);\r\n                }\r\n            }\r\n        }\r\n        data.addListener(this);\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     *  Set the new HTMLElement and attach listener to it.\r\n     *  Also remove Listeners from old one and return the old one, if present.\r\n     * @param element\r\n     * @returns The previous Element\r\n     */\r\n    public setView(element: Element): Element {\r\n        let oldElement: Element = null;\r\n        if (this.$view) {\r\n            oldElement = this.$view;\r\n            if (this.$viewListener) {\r\n                oldElement.removeEventListener('change', this.$viewListener);\r\n            }\r\n        }\r\n        this.$view = element;\r\n\r\n        if (this.$viewListener) {\r\n            element.addEventListener('change', this.$viewListener);\r\n        }\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n        return element;\r\n    }\r\n\r\n    public init(owner: Control, property ?: string, id ?: string): Control {\r\n        if (!this.$owner) {\r\n            this.$owner = owner;\r\n        }\r\n        if (!this.id) {\r\n            this.id = id;\r\n        }\r\n        if (!this.property) {\r\n            this.property = this.generateID(property, id);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public createEventListener(): EventListener {\r\n        return new EventListener();\r\n    }\r\n\r\n    public getRoot(): Control {\r\n        if (this.$owner) {\r\n            return this.$owner.getRoot();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return null;\r\n    }\r\n\r\n    public initControl(data: any): void {\r\n        if (this.$view === null || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (data.hasOwnProperty('prop')) {\r\n            for (let key in data.prop) {\r\n                let oldValue = this.$viewData.getValue(key);\r\n                if (this.$view) {\r\n                    this.updateElement(key, oldValue, data.prop[key]);\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        let hasRem = data.hasOwnProperty('rem');\r\n        let removed: any[] = [];\r\n        if (data.hasOwnProperty('upd')) {\r\n            for (let key in data.upd) {\r\n                let oldValue;\r\n                let newValue = data.upd[key];\r\n                let entity;\r\n                const temp = false;\r\n                if (temp) {\r\n//                if (newValue == this.getViewData().getValue(key)) {\r\n                    // new Value assertEquals old value, so we don't need to change anything..\r\n                    // delete data.rem[key];\r\n                    if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                        removed.push(data.rem[key]);\r\n                    }\r\n                    continue;\r\n                }\r\n                if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                    // if there's a rem, the oldValue from rem will be used and expected to be right..\r\n                    oldValue = data.rem[key];\r\n                    if (this.$model && this.$model.getValue(key) === oldValue) {\r\n                        entity = this.$model;\r\n//                    } else if (oldValue == this.getViewData().getValue(key)) {\r\n//                        $graphModel = this.getViewData();\r\n                    }\r\n                    delete data.rem[key];\r\n\r\n                    if (entity === null) {\r\n                        continue;\r\n                    }\r\n                }\r\n                if (entity) {\r\n                    if (!hasRem) {\r\n                        if (entity === this.$model) {\r\n                            oldValue = this.$model.getValue(key);\r\n                        } else {\r\n//                           oldValue = this.getViewData().getValue(key);\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (this.$model) {\r\n                        // try to get the oldValue directly from the $graphModel...\r\n                        oldValue = this.$model.getValue(key);\r\n                        entity = this.$model;\r\n                    }\r\n                    if (oldValue === null) {\r\n                        // if there was no data in the entity, we try to get oldValue from the $view\r\n//                        oldValue = this.getViewData().getValue(key);\r\n//                        entity = this.getViewData();\r\n                    }\r\n                }\r\n\r\n                //  || oldValue !== this.$viewData.getValue(key)\r\n                if (newValue === oldValue) {\r\n                    // no match, so update should be wrong...\r\n                    continue;\r\n                }\r\n                const viewDataOldValue = this.$viewData.getValue(key);\r\n                if (entity === this.$viewData) {\r\n\r\n                    // this.getViewData().setValue(key, newValue);\r\n                    if (this.$view) {\r\n                        this.updateElement(key, viewDataOldValue, newValue);\r\n                    }\r\n                } else {\r\n                    this.updateElement(key, viewDataOldValue, newValue);\r\n                }\r\n                this.getRoot().setValue(entity, key, newValue, oldValue);\r\n            }\r\n            // this.saveViewInData();\r\n        }\r\n        if (hasRem) {\r\n            for (let key in data.rem) {\r\n                if (removed.hasOwnProperty(key)) {\r\n                    continue;\r\n                }\r\n                let oldValue;\r\n//                    this.getViewData().getValue(key);\r\n//                if (oldValue != data.rem[key] || data.upd !== undefined && (data.upd[key] == oldValue || this.getViewData().getValue(key) == data.upd[key])) {\r\n                // if rem is invalid, or if the change is already applied, don't do anything..\r\n                //                  continue;\r\n                //            }\r\n                // delete this.$viewData.getValue(key);\r\n                // this.saveViewInData();\r\n                this.updateElement(key, null, null);\r\n                // this.$view.removeAttribute(key);\r\n                if (this.$model) {\r\n//                    this.getRoot().setValue(this.$graphModel, key, this.getViewData().getValue(key), oldValue);\r\n                }\r\n            }\r\n        }\r\n        if (this.property) {\r\n            // Add listener to Input field:\r\n            this.$view['onchange'] = ((ev: Event) => {\r\n                    this.controlChanged(ev);\r\n                }\r\n            );\r\n        }\r\n//        this.saveViewInData();\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        return null;\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n        return false;\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return new Object();\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue ?: Object): boolean {\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Is called when a object, that the Control is listening to, changes its value.\r\n     * @param entity\r\n     * @param property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        if (oldValue === newValue || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (oldValue === this.$viewData.getValue(property)) {\r\n            return;\r\n        }\r\n        // Set NewData to ViewData and Fire PC\r\n        this.$viewData.setValue(property, newValue);\r\n\r\n//\r\n//\r\n//         // if (entity == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.entity) {\r\n//                 alert(\"entity = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.entity.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.entity, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the entity is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"entity = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n// >>>>>>> addOldFunctions\r\n        if (this.$viewData) {\r\n            this.$viewData.setValue(property, newValue);\r\n        }\r\n        if (this.$model) {\r\n            this.$model.setValue(property, newValue);\r\n        }\r\n        this.updateElement(property, oldValue, newValue);\r\n    }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            // Do Nothing\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  Update GUI Element\r\n     * @param {string} property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        if (this.$view && this.$view.hasAttribute(property)) {\r\n            this.$view.setAttribute(property, newValue);\r\n        }\r\n    }\r\n\r\n//        if (oldValue == newValue) {\r\n//            return;\r\n//        }\r\n//        if (oldValue == this.$viewData.getValue(property)) {\r\n//            return;\r\n//        }\r\n//        // Set NewData to ViewData and Fire PC\r\n//        this.$viewData.setValue(property, newValue);\r\n//\r\n//\r\n//\r\n//         // if ($graphModel == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.$graphModel) {\r\n//                 alert(\"$graphModel = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.$graphModel.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.$graphModel, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the $graphModel is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"$graphModel = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n\r\n    public getId(): string {\r\n        return this.id;\r\n    }\r\n\r\n    public load(json: JSON | Object, owner ?: Control): any {\r\n        // Do Nothing\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.property || entity.hasProperty(this.property)) {\r\n                entity.addListener(this, this.property);\r\n                this.$model = entity;\r\n            }\r\n        }\r\n    }\r\n\r\n    public appendChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.appendChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].appendChild(child.$view);\r\n        }\r\n    }\r\n\r\n    public removeChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.removeChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].removeChild(child.$view);\r\n        }\r\n    }\r\n\r\n    /*\r\n     Property looks like: 't1.talk'\r\n     */\r\n    public setProperty(property: string): void {\r\n        if (!this.property) {\r\n            return;\r\n        }\r\n        let objId = property.split('.')[0];\r\n        let object = null;\r\n        if (this.$owner.hasItem(objId)) {\r\n            object = this.$owner.getItem(objId);\r\n        }\r\n\r\n        // remove listener on old object\r\n        if (this.$model) {\r\n            // this.$graphModel.removeListener(this);\r\n            this.$model.removeListener(this, this.lastProperty);\r\n        }\r\n        this.property = property;\r\n\r\n        // add listener to object..\r\n        if (object) {\r\n            object.addListener(this, this.lastProperty);\r\n            this.$model = object;\r\n            this.updateElement(this.lastProperty, this.$viewData.getValue(this.lastProperty), object.prop[this.lastProperty]);\r\n        }\r\n    }\r\n\r\n    public registerListenerOnHTMLObject(eventType: string): boolean {\r\n        return this.registerEventListener(eventType, <HTMLElement>this.$view);\r\n    }\r\n\r\n    // Normal Event HTML-Event\r\n    // Eventtype:string,\r\n    // id:string of Control\r\n    public fireEvent(evt: Event): void {\r\n        // Do Nothing\r\n    }\r\n\r\n    public isClosed(): boolean {\r\n        return this['closed'];\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        if (this.isClosed()) {\r\n            return this.$owner.getShowed();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * the id of the Data object, that contains the properties of the view\r\n     * @returns {string}\r\n     */\r\n    protected getControlDataID() {\r\n        return this.id + '_data';\r\n    }\r\n\r\n    protected generateID(property ?: string, id ?: string): string {\r\n        if (property) {\r\n            return property;\r\n        }\r\n        if (id) {\r\n            // will generate a data Object suitable for the Control..\r\n            // must be overridden, if the changeEvent shouldn't listen on value...\r\n//            return id + '.' + this.getStandardProperty();//+ \"_data\"\r\n            return id + '.' + '_data';\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected updateViewData() {\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n        const keys: string[] = this.$viewData.getKeys();\r\n        for (let i = 0; i < keys.length; i++) {\r\n            let attr = keys[i];\r\n            if (this.$view[attr] === null) {\r\n                continue;\r\n            }\r\n            this.$viewData.setValue(attr, this.$view[attr]);\r\n        }\r\n    }\r\n\r\n    protected registerEventListener(eventType: string, htmlElement: HTMLElement): boolean {\r\n        if (!htmlElement) {\r\n            return false;\r\n        }\r\n        if (htmlElement instanceof HTMLElement === false) {\r\n            return false;\r\n        }\r\n        let control = this;\r\n        let listener = (t: any) => {\r\n            t.eventType = eventType;\r\n            t.id = control.id;\r\n            control.$owner.fireEvent(t);\r\n        };\r\n        htmlElement.addEventListener(eventType, listener);\r\n        return true;\r\n    }\r\n\r\n    get lastProperty(): string {\r\n        if (!this.property) {\r\n            return '';\r\n        }\r\n        let arr: string[] = this.property.split('.');\r\n        return arr[arr.length - 1];\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\n\r\nexport default class Data {\r\n    public prop = {};\r\n    id: string;\r\n    // $listener: Control[] = [];\r\n    $listener: Object = {};\r\n\r\n    private static nullCheck(property: string): string {\r\n        if (property === undefined || property === null) {\r\n            property = '';\r\n        }\r\n        return property;\r\n    }\r\n    public getKeys(): string[] {\r\n        return Object.keys(this.prop);\r\n    }\r\n\r\n    public addProperties(values: Object) {\r\n        if (!values) {\r\n            return;\r\n        }\r\n        if (values['prop']) {\r\n            let prop = values['prop'];\r\n            for (let property in prop) {\r\n                if (prop.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (prop[property] !== null && '' !== prop[property]) {\r\n                    this.setValue(property, prop[property]);\r\n                }\r\n            }\r\n        } else {\r\n            let upd = values['upd'] || {};\r\n            let rem = values['rem'] || {};\r\n\r\n            for (let property in upd) {\r\n                if (upd.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (rem.hasOwnProperty(property) === false) {\r\n                    this.setValue(property, upd[property]);\r\n                } else {\r\n                    // if we have a rem, we wan't to check, if its a valid change (teh old value is the value in rem)\r\n                    if (this.getValue(property) === rem[property]) {\r\n                        this.setValue(property, upd[property]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getValue(attribute: string) {\r\n        return this.prop[attribute];\r\n    }\r\n\r\n    public setValue(attribute: string, newValue: any): void {\r\n        let oldValue = this.prop[attribute];\r\n        if (oldValue === newValue && newValue !== null) {\r\n            return;\r\n        }\r\n        this.prop[attribute] = newValue;\r\n        this.firePropertyChange(attribute, oldValue, newValue);\r\n    }\r\n\r\n    public addTo(attribute: string, newValue: any): boolean {\r\n        let add: boolean;\r\n        if (this.prop[attribute]) {\r\n            if (this.prop[attribute].contains(newValue) === false) {\r\n                add = true;\r\n            }\r\n        } else {\r\n            this.prop[attribute] = [];\r\n            add = true;\r\n        }\r\n        if (add) {\r\n            this.prop[attribute].push(newValue);\r\n            this.firePropertyChange(attribute, null, newValue);\r\n        }\r\n        return add;\r\n    }\r\n\r\n    public removeFrom(attribute: string, newValue: any): boolean {\r\n        if (!this.prop[attribute]) {\r\n            return true;\r\n        }\r\n        let pos: number = this.prop[attribute].indexOf(newValue);\r\n        if (pos < 0) {\r\n            return true;\r\n        }\r\n        this.prop[attribute].splice(pos, 1);\r\n        this.firePropertyChange(attribute, newValue, null);\r\n        return true;\r\n    }\r\n\r\n    public addListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(property);\r\n        if (!listeners) {\r\n            listeners = [];\r\n            this.$listener[Data.nullCheck(property)] = listeners;\r\n        }\r\n        listeners.push(control);\r\n    }\r\n\r\n    public removeListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners = this.getListeners(property);\r\n        if (listeners === null) {\r\n            return;\r\n        }\r\n        let pos = listeners.indexOf(control);\r\n        if (pos >= 0) {\r\n            listeners.splice(pos, 1);\r\n        }\r\n        if (listeners.length === 0 && Data.nullCheck(property) !== '') {\r\n            // only remove, if it's not the default listener list...\r\n            delete this.$listener[property];\r\n        }\r\n    }\r\n\r\n    public hasProperty(property: string): boolean {\r\n        return this.prop.hasOwnProperty(property);\r\n    }\r\n\r\n    public addFrom(attribute: string, oldData: Data): void {\r\n        if (oldData) {\r\n            this.setValue(attribute, oldData.getValue(attribute));\r\n        } else {\r\n            this.setValue(attribute, null);\r\n        }\r\n    }\r\n\r\n    public removeKey(key: string): any {\r\n        if (this.hasProperty(key)) {\r\n            const oldValue = this.prop[key];\r\n            delete this.prop[key];\r\n            return oldValue;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected getListeners(property: string): PropertyChangeSupport[] {\r\n        property = Data.nullCheck(property);\r\n        return this.$listener[property];\r\n    }\r\n\r\n    protected firePropertyChange(attribute: string, oldValue: Object, newValue: Object) {\r\n        attribute = Data.nullCheck(attribute);\r\n        // at first fire for the given property\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(attribute);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n        // now we need to fire the Listeners that wan't to listen to everything\r\n        listeners = this.getListeners(null);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport interface EventHandler {\r\n    canHandle(): boolean;\r\n    handle(event: Event, element: DiagramElement): boolean;\r\n    setActive(active: boolean): void;\r\n}\r\n\r\nexport class EventBus {\r\n    public static CREATE: string = 'Create';\r\n    public static EDITOR: string = 'Editor';\r\n    public static OPENPROPERTIES: string = 'openProperties';\r\n    public static RELOADPROPERTIES: string = 'reloadProperties';\r\n    public static ELEMENTMOUSEDOWN: string = 'ELEMENT:MOUSEDOWN';\r\n    public static ELEMENTMOUSEUP: string = 'ELEMENT:MOUSEUP';\r\n    public static ELEMENTMOUSELEAVE: string = 'ELEMENT:MOUSELEAVE';\r\n    public static ELEMENTMOUSEMOVE: string = 'ELEMENT:MOUSEMOVE';\r\n    public static ELEMENTMOUSEWHEEL: string = 'ELEMENT:MOUSEWHEEL';\r\n    public static ELEMENTCLICK: string = 'ELEMENT:CLICK';\r\n    public static ELEMENTDBLCLICK: string = 'ELEMENT:DBLCLICK';\r\n    public static ELEMENTDRAG: string = 'ELEMENT:DRAG';\r\n    public static ELEMENTDRAGOVER: string = 'ELEMENT:DRAGOVER';\r\n    public static ELEMENTDROP: string = 'ELEMENT:DROP';\r\n    public static ELEMENTDRAGLEAVE: string = 'ELEMENT:DRAGLEAVE';\r\n\r\n    public static EVENTS: string[] = [\r\n        EventBus.CREATE,\r\n        EventBus.EDITOR,\r\n        EventBus.OPENPROPERTIES,\r\n        EventBus.RELOADPROPERTIES,\r\n        EventBus.ELEMENTMOUSEDOWN,\r\n        EventBus.ELEMENTMOUSEUP,\r\n        EventBus.ELEMENTMOUSELEAVE,\r\n        EventBus.ELEMENTMOUSEMOVE,\r\n        EventBus.ELEMENTMOUSEWHEEL,\r\n        EventBus.ELEMENTCLICK,\r\n        EventBus.ELEMENTDRAG,\r\n        EventBus.ELEMENTDBLCLICK,\r\n        EventBus.ELEMENTDRAGOVER,\r\n        EventBus.ELEMENTDROP,\r\n        EventBus.ELEMENTDRAGLEAVE,\r\n    ];\r\n\r\n    private static handlers = {};\r\n\r\n    private static $activeHandler: string = '';\r\n\r\n    public static setActiveHandler(handler: string): void {\r\n        this.$activeHandler = handler;\r\n    }\r\n\r\n    public static isHandlerActiveOrFree(handler: string, notEmpty?: boolean): boolean {\r\n        if (notEmpty) {\r\n            return this.$activeHandler === handler;\r\n        }\r\n        return this.$activeHandler === handler || this.$activeHandler === '' || this.$activeHandler === undefined;\r\n    }\r\n\r\n    public static isAnyHandlerActive(): boolean {\r\n        return !(this.$activeHandler === '' || this.$activeHandler === undefined);\r\n    }\r\n\r\n    public static releaseActiveHandler(): void {\r\n        this.$activeHandler = '';\r\n    }\r\n\r\n    public static getActiveHandler(): string {\r\n        return this.$activeHandler;\r\n    }\r\n\r\n    static register(control: Control, view: Element) {\r\n        let events: string[];\r\n        if (typeof control['getEvents'] === 'function') {\r\n            events = control['getEvents']();\r\n        }\r\n\r\n        if (!events || !view) {\r\n            return;\r\n        }\r\n        for (let event of events) {\r\n            this.registerEvent(view, event, control);\r\n        }\r\n    }\r\n\r\n    static registerEvent(view: Element, event: string, control?: any) {\r\n        const pos: number = event.indexOf(':');\r\n        if (pos > 0) {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        } else {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        }\r\n    }\r\n\r\n    public static publish(element: DiagramElement, evt: Event) {\r\n        let handlers = EventBus.handlers[evt.type];\r\n        if (handlers) {\r\n            for (let handler of handlers) {\r\n                handler.handle(evt, element);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static subscribe(handler: EventHandler, ...eventTypes: string[]) {\r\n        for (let event of eventTypes) {\r\n            let handlers = EventBus.handlers[event];\r\n            if (handlers === null || handlers === undefined) {\r\n                handlers = [];\r\n                EventBus.handlers[event] = handlers;\r\n            }\r\n            handlers.push(handler);\r\n        }\r\n    }\r\n}\r\n","import SimpleEvent from './Event';\r\n\r\nexport default class EventListener {\r\n    private $onUpdate: Function;\r\n\r\n    get onUpdate(): Function {\r\n        return this.$onUpdate;\r\n    }\r\n\r\n    set onUpdate(value: Function) {\r\n        this.$onUpdate = value;\r\n    }\r\n\r\n    update(event: SimpleEvent) {\r\n        this.$onUpdate(event);\r\n    }\r\n}\r\n","// ################################## jsEPS ####################################################\r\nimport {SVGConverter} from './SVGConverter';\r\n\r\nexport class JSEPS {\r\n    private max: number;\r\n    private min: number;\r\n    private inverting: boolean;\r\n    private output: string[];\r\n    private font: number;\r\n\r\n    constructor(options: any) {\r\n        this.max = 0;\r\n        this.min = 999;\r\n        let hasInverting = typeof (options.inverting);\r\n        this.inverting = (options && hasInverting !== 'undefined' ? options.inverting : true);\r\n        this.output = ['%!PS-Adobe-3.0 EPSF-3.0', '1 setlinewidth'];\r\n        this.out('/FSD {findfont exch scalefont def} bind def % In the document prolog: define');\r\n        this.out('/SMS {setfont moveto show} bind def % some useful procedures');\r\n        this.out('/MS {moveto show} bind def');\r\n        this.out('/F1  10  /Helvetica  FSD % At the start of the script: set up');\r\n        this.font = 1;\r\n    }\r\n\r\n    public out(value: string) {this.output.push(value); }\r\n    public rect(x: number, y: number, width: number, height: number, style: string) {\r\n        y = y + (this.inverting ? height : 0);\r\n        if (style && style.indexOf('fill:url(#classelement);') >= 0) {\r\n            this.out('gsave 0.93 0.93 0.93 setrgbcolor newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectfill grestore');\r\n        } else {\r\n            this.out('newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectstroke');\r\n        }\r\n    }\r\n    public setFillColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public y(value: number) {this.max = Math.max(this.max, value); this.min = Math.min(this.min, value); return this.inverting ? '%y(' + value + ')' : value; }\r\n    public getType(): string {\r\n        return 'application/postscript';\r\n    }\r\n\r\n    public getData(): string {\r\n        let t, end, url, text, typ = 'application/postscript', a = document.createElement('a'), data = '', pos, i;\r\n        for (i = 0; i < this.output.length; i += 1) {\r\n            text = this.output[i];\r\n            if (this.inverting) {\r\n                while ((pos = text.indexOf('%y')) >= 0) {\r\n                    end = text.indexOf(')', pos);\r\n                    t = this.max - parseInt(text.substring(pos + 3, end), 10);\r\n                    text = text.substring(0, pos) + t + text.substring(end + 1);\r\n                }\r\n            }\r\n            data = data + text + '\\r\\n';\r\n        }\r\n        return data;\r\n    }\r\n\r\n    public setDrawColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public ellipse(cx: number, cy: number, rx: number, ry: number, colorMode: string) {/*FIXME*/}\r\n    public circle(cx: number, cy: number, r: number, colorMode: string) {/*FIXME*/}\r\n    public setTextColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public text(x: number, y: number, text: string) {this.out('(' + text.replace('&lt;', '<').replace('&gt;', '>') + ') ' + x + ' ' + this.y(y) + ' F1 SMS'); }\r\n    public lineto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' lineto'); this.out('stroke'); }\r\n    public moveto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' moveto'); }\r\n    public line(x1: number, y1: number, x2: number, y2: number) {this.out('newpath ' + x1 + ' ' + this.y(y1) + ' moveto ' + x2 + ' ' + this.y(y2) + ' lineto stroke'); }\r\n    public setLineWidth(value: string) {this.out(value + ' setlinewidth'); }\r\n    public setFont(value: string) {this.out('/F' + (this.font += 1) + ' 10 /' + value + ' FSD'); }\r\n}\r\n","import { Graph } from './elements/Graph';\r\n\r\n/*const buttons = {\r\n    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    clazz: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n};\r\n*/\r\nexport default class Palette {\r\n\r\n    private graph: Graph;\r\n    private palette: Element;\r\n    private root: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n        let div = document.createElement('div');\r\n        div.className = 'palette';\r\n        div.id = 'palette';\r\n        this.root = div;\r\n        this.palette = div;\r\n        for (let key in graph.nodeFactory) {\r\n            let element = graph.nodeFactory[key];\r\n            let control = new element();\r\n            let icon = control.getToolBarIcon();\r\n            if (icon) {\r\n                let button = <HTMLButtonElement>document.createElement('button');\r\n                button.className = 'add' + key + 'Btn';\r\n                button.innerHTML = icon.outerHTML;\r\n                button.onclick = e => {\r\n                    let nextFreePosition = this.graph.getNextFreePosition();\r\n                    // let node = this.graph.addElementWithValues(graph.nodeFactory[key], {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    let node = this.graph.addElementWithValues(key, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    this.graph.drawElement(node);\r\n                };\r\n                this.palette.appendChild(button);\r\n            }\r\n        }\r\n        // this.graph.nodeFactory\r\n//        this.addButtons();\r\n    }\r\n\r\n    public show() {\r\n        document.body.appendChild(this.root);\r\n    }\r\n\r\n    private addButtons() {\r\n        /*for (let btn in buttons) {\r\n            let button = <HTMLButtonElement>document.createElement('button');\r\n            button.className = 'add' + btn + 'Btn';\r\n            button.innerHTML = buttons[btn];\r\n            button.onclick = e => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let node = this.graph.addElementWithValues(btn, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                this.graph.drawElement(node);\r\n            };\r\n            this.palette.appendChild(button);\r\n        }*/\r\n    }\r\n}\r\n","import {Graph} from './elements/Graph';\r\nimport * as edges from './elements/edges';\r\nimport {EventBus, EventHandler} from './EventBus';\r\nimport {DiagramElement} from './elements/BaseElements';\r\nimport {Util} from './util';\r\n\r\nexport class PanelGroup implements EventHandler {\r\n    private graph: Graph;\r\n    private selectedElement: DiagramElement;\r\n    private clearPanel: Panel;\r\n    private generatePanel: Panel;\r\n    private propertiesMasterPanel: HTMLDivElement;\r\n    private propertiesContent: HTMLDivElement;\r\n    private propHeaderLabel: HTMLDivElement;\r\n    private propHeaderButton: HTMLButtonElement;\r\n    private selectedPanel: Panel;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.clearPanel = new ClearPanel(this);\r\n        this.generatePanel = new GeneratePanel(this);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        this.handleOpenProperties(event, element);\r\n\r\n        if (event.type === EventBus.RELOADPROPERTIES\r\n            && this.selectedElement && element.id === this.selectedElement.id) {\r\n            this.handleEvent(event, element);\r\n        }\r\n\r\n        // the same element was clicked. do nothing\r\n        if (this.selectedElement && this.selectedElement.id === element.id) {\r\n            return true;\r\n        }\r\n        if (element.id === 'RootElement') {\r\n            this.setActivePanel(this.clearPanel);\r\n        }\r\n        if (element.id === 'GenerateProp') {\r\n            this.setActivePanel(this.generatePanel);\r\n        }\r\n        this.selectedElement = element;\r\n\r\n        return true;\r\n    }\r\n\r\n    public getGraph(): Graph {\r\n        return this.graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(PanelGroup.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(PanelGroup.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n     public handleEvent(event: any, element: any) {\r\n        // DO NOTHING\r\n    }\r\n\r\n    public show() {\r\n        // main div to display any properties, class, edge, etc.\r\n        this.propertiesMasterPanel = document.createElement('div');\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n\r\n        this.propertiesContent = document.createElement('div');\r\n        this.propertiesContent.className = 'properties-hidden';\r\n\r\n        this.propHeaderLabel = document.createElement('div');\r\n        this.propHeaderLabel.style.display = 'inherit';\r\n        this.propHeaderLabel.style.cursor = 'pointer';\r\n        this.propHeaderLabel.onclick = e => this.toogleProperties(e);\r\n\r\n        // button to display and hide the properties of e.g. a class\r\n        this.propHeaderButton = document.createElement('button');\r\n        this.propHeaderButton.className = 'btnHideProp';\r\n        this.propHeaderButton.style.cssFloat = 'right';\r\n        this.propHeaderButton.onclick = e => this.toogleProperties(e);\r\n\r\n        let propertiesHeader = document.createElement('div');\r\n        propertiesHeader.style.display = 'inline';\r\n        propertiesHeader.appendChild(this.propHeaderLabel);\r\n        propertiesHeader.appendChild(this.propHeaderButton);\r\n\r\n        this.propertiesMasterPanel.appendChild(propertiesHeader);\r\n        this.propertiesMasterPanel.appendChild(this.propertiesContent);\r\n        document.body.appendChild(this.propertiesMasterPanel);\r\n\r\n        this.setActivePanel(this.clearPanel);\r\n    }\r\n\r\n    public setActivePanel(panel: Panel) {\r\n        this.selectedPanel = panel;\r\n        this.propHeaderLabel.innerHTML = panel.getHeaderText();\r\n        if (this.propertiesContent) {\r\n            while (this.propertiesContent.hasChildNodes()) {\r\n                this.propertiesContent.removeChild(this.propertiesContent.childNodes[0]);\r\n            }\r\n        }\r\n        panel.show();\r\n\r\n        panel.showFirstTab();\r\n        if (panel !== this.clearPanel) {\r\n            this.showProperties(null);\r\n        } else {\r\n            this.hideProperties(null);\r\n        }\r\n    }\r\n\r\n    public getProperiesContent(): HTMLDivElement {\r\n        return this.propertiesContent;\r\n    }\r\n\r\n    private handleOpenProperties(event: Event, element: DiagramElement) {\r\n        if (event.type === 'dblclick') {\r\n            this.showProperties(event);\r\n        }\r\n    }\r\n\r\n    private showProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Show\r\n        this.propHeaderButton.innerHTML = '&#8897;';\r\n        this.propHeaderButton.title = 'Hide properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel';\r\n        this.propertiesContent.className = 'properties';\r\n    }\r\n\r\n    private toogleProperties(evt: Event): void {\r\n        if (this.propHeaderButton.title === 'Show properties') {\r\n            this.showProperties(evt);\r\n        } else {\r\n            this.hideProperties(evt);\r\n        }\r\n    }\r\n\r\n    private hideProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Hide\r\n        this.propHeaderButton.innerHTML = '&#8896;';\r\n        this.propHeaderButton.title = 'Show properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n        this.propertiesContent.className = 'properties-hidden';\r\n    }\r\n}\r\n\r\nexport abstract class Panel {\r\n    protected divPropertiesPanel: HTMLDivElement;\r\n    protected divPropertiesTabbedPanel: HTMLDivElement;\r\n    protected element: any;\r\n    protected group: PanelGroup;\r\n    private panelItem: PanelItem[] = [];\r\n\r\n    constructor(group: PanelGroup, element: any) {\r\n        // get the properties content panel\r\n        this.divPropertiesPanel = document.createElement('div');\r\n        this.element = element;\r\n        this.group = group;\r\n\r\n        this.divPropertiesTabbedPanel = document.createElement('div');\r\n        this.divPropertiesTabbedPanel.className = 'tabbedpane';\r\n\r\n        // add tabbed panel\r\n        this.divPropertiesPanel.appendChild(this.divPropertiesTabbedPanel);\r\n    }\r\n\r\n    public show(): void {\r\n        let propertiesContent: HTMLDivElement = this.group.getProperiesContent();\r\n        if (this.panelItem.length > 1) {\r\n            propertiesContent.appendChild(this.getPropertiesTabbedPanel());\r\n        }\r\n\r\n        propertiesContent.appendChild(this.getPropertiesPanel());\r\n    }\r\n\r\n    public getPropertiesTabbedPanel(): HTMLDivElement {\r\n        return this.divPropertiesTabbedPanel;\r\n    }\r\n\r\n    public getPropertiesPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return '';\r\n    }\r\n\r\n    public showFirstTab(): void {\r\n        if (this.panelItem.length > 0) {\r\n            this.openTab(this.panelItem[0]);\r\n        }\r\n    }\r\n\r\n    protected createTabElement(tabText: string, tabValue: string, item: PanelItem): PanelItem {\r\n        let tabElementBtn = document.createElement('button');\r\n        tabElementBtn.className = 'tablinks';\r\n        tabElementBtn.innerText = tabText;\r\n        tabElementBtn.value = tabValue;\r\n\r\n        if (item === null) {\r\n            item = new PanelItem(this);\r\n        }\r\n        item.withButton(tabElementBtn);\r\n\r\n        tabElementBtn.onclick = () => this.openTab(item);\r\n        this.divPropertiesTabbedPanel.appendChild(tabElementBtn);\r\n        this.panelItem.push(item);\r\n        return item;\r\n    }\r\n\r\n    protected openTab(panelItem: PanelItem): void {\r\n        for (let key in this.panelItem) {\r\n            let child = this.panelItem[key];\r\n            if (child !== panelItem) {\r\n                 child.deactive();\r\n            }\r\n        }\r\n        panelItem.active();\r\n        // hide other tabcontent\r\n        if (this.divPropertiesPanel) {\r\n            while (this.divPropertiesPanel.hasChildNodes()) {\r\n                this.divPropertiesPanel.removeChild(this.divPropertiesPanel.childNodes[0]);\r\n            }\r\n        }\r\n\r\n        // ADD\r\n        if (panelItem.getContent()) {\r\n            this.divPropertiesPanel.appendChild(panelItem.getContent());\r\n        }\r\n    }\r\n}\r\n\r\nexport class GeneratePanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n\r\n        let item: PanelItem = this.createTabElement('General', 'General', null);\r\n\r\n        // Workspace and generate code stuff\r\n        let inputGenerateWorkspace: HTMLInputElement =  <HTMLInputElement> Util.createHTML({tag: 'input', id: 'workspace', type: 'text', placeholder: 'Type your Folder for generated code...', value: 'src/main/java', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Folder:', inputGenerateWorkspace);\r\n\r\n        let inputGeneratePackage: HTMLInputElement = <HTMLInputElement> Util.createHTML({tag: 'input', id: 'package', type: 'text', placeholder: 'Type your workspace for generated code...', value: '', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Package:', inputGeneratePackage);\r\n\r\n        let options = document.createElement('div');\r\n        options.style.textAlign = 'center';\r\n        options.style.margin = '3';\r\n        options.style.padding = '5';\r\n\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(options);\r\n\r\n        options.style.borderStyle = 'groove';\r\n        options.style.borderRadius = '10px';\r\n\r\n        let btnGenerate = document.createElement('button');\r\n        btnGenerate.textContent = 'Generate';\r\n        btnGenerate.title = 'Generate code into your workspace';\r\n        btnGenerate.className = 'OptionElement';\r\n\r\n        let that = this;\r\n        btnGenerate.onclick = () => {\r\n            let workspace = inputGeneratePackage.value;\r\n            if (workspace.length === 0) {\r\n                alert('No workspace set.\\nEnter first your workspace');\r\n                inputGeneratePackage.focus();\r\n                return;\r\n            }\r\n            that.group.getGraph().generate(workspace, inputGenerateWorkspace.value);\r\n        };\r\n        options.appendChild(btnGenerate);\r\n        options.appendChild(document.createElement('hr'));\r\n        options.appendChild(document.createElement('br'));\r\n\r\n        let btnAutoLayout = Util.createHTML({tag: 'button', className: 'OptionElement', value: 'Auto Layout', style: {marginRight: '10px'}, onclick: () => {\r\n                that.group.getGraph().layout();\r\n            }});\r\n\r\n        options.appendChild(btnAutoLayout);\r\n\r\n        // delete all nodes\r\n        let btnDeleteAll = document.createElement('button');\r\n        btnDeleteAll.className = 'OptionElement';\r\n        btnDeleteAll.textContent = 'Delete All';\r\n        btnDeleteAll.title = 'Delete all nodes from diagram';\r\n\r\n        btnDeleteAll.onclick = () => {\r\n            let confirmDelete = confirm('All classes will be deleted!');\r\n            if (!confirmDelete) {\r\n                return;\r\n            }\r\n            that.group.getGraph().$graphModel.removeAllElements();\r\n        };\r\n        btnDeleteAll.style.marginRight = '10px';\r\n        options.appendChild(btnDeleteAll);\r\n\r\n        // export stuff\r\n        let exportTypes: string[] = ['Export', 'HTML', 'JSON', 'PDF', 'PNG', 'SVG'];\r\n        let selectExport = document.createElement('select');\r\n\r\n        exportTypes.forEach(type => {\r\n            if (!(!window['jsPDF'] && type === 'PDF')) {\r\n                let option = document.createElement('option');\r\n                option.value = type;\r\n                option.textContent = type;\r\n                selectExport.appendChild(option);\r\n            }\r\n        });\r\n\r\n        selectExport.onchange = (evt) => {\r\n            let selectedExportType = selectExport.options[selectExport.selectedIndex].value;\r\n            selectExport.selectedIndex = 0;\r\n            that.group.getGraph().saveAs(selectedExportType);\r\n        };\r\n        selectExport.className = 'OptionElement';\r\n        options.appendChild(selectExport);\r\n        options.appendChild(document.createElement('br'));\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Properties';\r\n    }\r\n\r\n}\r\n\r\nexport class ClearPanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Select any element to see its properties';\r\n    }\r\n}\r\n\r\nexport class PanelItem {\r\n    protected panel: Panel;\r\n    protected label: string;\r\n    protected button: HTMLButtonElement;\r\n    protected content: HTMLDivElement = <HTMLDivElement>Util.create({tag: 'div', className: 'tabContent'});\r\n\r\n    constructor(panel: Panel, label?: string) {\r\n        this.panel = panel;\r\n        this.label = label;\r\n    }\r\n\r\n    public active(): void {\r\n        if (this.getButton()) {\r\n            this.getButton().className += ' active';\r\n        }\r\n    }\r\n\r\n    public deactive(): void {\r\n        if (this.getButton()) {\r\n            Util.removeClass(this.getButton(), 'active');\r\n        }\r\n    }\r\n\r\n    public withButton(button: HTMLButtonElement): PanelItem {\r\n        this.button = button;\r\n        return this;\r\n    }\r\n\r\n    public withContent(element: HTMLElement): PanelItem {\r\n        this.content.appendChild(element);\r\n        return this;\r\n    }\r\n\r\n    public withInput(labelText: string, element: HTMLElement): PanelItem {\r\n        let group: HTMLDivElement = <HTMLDivElement> Util.createHTML({tag: 'div'});\r\n        let label = Util.createHTML({tag: 'label', for: element.id, value: labelText});\r\n        group.appendChild(label);\r\n        group.appendChild(element);\r\n\r\n        this.content.appendChild(group);\r\n        return this;\r\n    }\r\n\r\n    public getButton(): HTMLButtonElement {\r\n        return this.button;\r\n    }\r\n\r\n    public getContent(): HTMLDivElement {\r\n        return this.content;\r\n    }\r\n\r\n   public getHeader(): string {\r\n        return this.label;\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\nimport Data from './Data';\r\n\r\nexport class PropertyBinder implements PropertyChangeSupport {\r\n    private propertyClass1: string;\r\n    private propertyClass2: string;\r\n    private data1: Data;\r\n    private data2: Data;\r\n    // works like a lock\r\n    private applyingChange: boolean = false;\r\n\r\n    constructor(data1: Data, data2: Data, propertyClass1: string, propertyClass2: string) {\r\n        this.data1 = data1;\r\n        this.data2 = data2;\r\n        this.propertyClass1 = propertyClass1;\r\n        this.propertyClass2 = propertyClass2;\r\n    }\r\n    static bind(data1: Data, data2: Data, property1: string, property2: string) {\r\n        if (!data1 || !data2 || !property1) {\r\n            console.error('NullValue!!');\r\n            return null;\r\n        }\r\n        const propertyBinder = new PropertyBinder(data1, data2, property1, property2);\r\n        propertyBinder.bind();\r\n        return propertyBinder;\r\n    }\r\n\r\n    propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        if (!this.applyingChange) {\r\n            this.applyingChange = true;\r\n            if (entity === this.data1) {\r\n                // fire to data2\r\n                this.data2.setValue(this.propertyClass2, newValue);\r\n            } else if (entity === this.data2) {\r\n                // fire to data1\r\n                this.data1.setValue(this.propertyClass1, newValue);\r\n            }\r\n            this.applyingChange = false;\r\n        }\r\n    }\r\n\r\n    protected bind() {\r\n        // public addListener(control: Control, property?: string)\r\n        // todo: set value immediately\r\n        this.data1.setValue(this.propertyClass1, this.data2.getValue(this.propertyClass2));\r\n\r\n        this.data1.addListener(this, this.propertyClass1);\r\n        this.data2.addListener(this, this.propertyClass2);\r\n    }\r\n\r\n    protected unbind() {\r\n        // public addListener(control: Control, property?: string)\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n    }\r\n}\r\n","// ################################## RGBColor ####################################################\r\nexport class RGBColor {\r\n    public  ok: boolean;\r\n    public r: number;\r\n    public g: number;\r\n    public b: number;\r\n\r\n    constructor(value: string) {\r\n        this.ok = false;\r\n        if (value === 'none') {\r\n            return;\r\n        }\r\n        let computedColor, div = document.createElement('div');\r\n        div.style.backgroundColor = value;\r\n        document.body.appendChild(div);\r\n        computedColor = window.getComputedStyle(div).backgroundColor;\r\n        // cleanup temporary div.\r\n        document.body.removeChild(div);\r\n        this.convert(computedColor);\r\n    }\r\n    public convert(value: any) {\r\n        let values, regex = /rgb *\\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\\)/;\r\n        values = regex.exec(value);\r\n        this.r = parseInt(values[1], 10);\r\n        this.g = parseInt(values[2], 10);\r\n        this.b = parseInt(values[3], 10);\r\n        this.ok = true;\r\n    }\r\n\r\n    public toRGB(): string {return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; }\r\n    public toHex(): string {\r\n        return '#' + (this.r + 0x10000).toString(16).substring(3).toUpperCase() + (this.g + 0x10000).toString(16).substring(3).toUpperCase() + (this.b + 0x10000).toString(16).substring(3).toUpperCase();\r\n    }\r\n}\r\n","/*\r\n NetworkParser\r\n Copyright (c) 2011 - 2014, Stefan Lindel\r\n All rights reserved.\r\n\r\n Licensed under the EUPL, Version 1.1 or (as soon they\r\n will be approved by the European Commission) subsequent\r\n versions of the EUPL (the \"Licence\");\r\n You may not use this work except in compliance with the Licence.\r\n You may obtain a copy of the Licence at:\r\n\r\n http://ec.europa.eu/idabc/eupl5\r\n\r\n Unless required by applicable law or agreed to in\r\n writing, software distributed under the Licence is\r\n distributed on an \"AS IS\" basis,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\r\n express or implied.\r\n See the Licence for the specific language governing\r\n permissions and limitations under the Licence.\r\n*/\r\nimport {RGBColor} from './RGBColor';\r\nimport {JSEPS} from \"./JSEPS\";\r\n\r\nconst epsSvgAttr = {\r\n    // allowed attributes. all others are removed from the preview.\r\n    g: ['stroke', 'fill', 'stroke-width'],\r\n    line: ['x1', 'y1', 'x2', 'y2', 'stroke', 'stroke-width'],\r\n    rect: ['x', 'y', 'width', 'height', 'stroke', 'fill', 'stroke-width'],\r\n    ellipse: ['cx', 'cy', 'rx', 'ry', 'stroke', 'fill', 'stroke-width'],\r\n    circle: ['cx', 'cy', 'r', 'stroke', 'fill', 'stroke-width'],\r\n    text: ['x', 'y', 'font-size', 'font-family', 'text-anchor', 'font-weight', 'font-style', 'fill'],\r\n    path: ['']\r\n};\r\nexport class SVGConverter {\r\n    private k: number;\r\n    private remove: boolean;\r\n    private target: any;\r\n\r\n    constructor(element: any, target: any, options: any) {\r\n        this.k = 1.0;\r\n        let hasScale = typeof (options.scale), hasRemoveInvalid = typeof (options.removeInvalid);\r\n        this.k = (options && hasScale !== 'undefined' ? options.scale : 1.0);\r\n        this.remove = (options && hasRemoveInvalid !== 'undefined' ? options.removeInvalid : false);\r\n        this.target = target;\r\n        this.parse(element);\r\n    }\r\n\r\n    public parse(element: any) {\r\n        let el, i, n, colorMode, hasFillColor, fillRGB, fillColor, strokeColor, strokeRGB, fontType, pdfFontSize, x, y,\r\n            box, xOffset;\r\n        if (!element) {\r\n            return;\r\n        }\r\n        if (typeof element === 'string') {\r\n            el = document.createElement('div');\r\n            el.innerHTML = element;\r\n            element = el.childNodes[0];\r\n        }\r\n        for (i = 0; i < element.children.length; i += 1) {\r\n            n = element.children[i];\r\n            colorMode = null;\r\n            hasFillColor = false;\r\n            if ('g,line,rect,ellipse,circle,text'.indexOf(n.tagName) >= 0) {\r\n                fillColor = n.getAttribute('fill');\r\n                if (fillColor) {\r\n                    fillRGB = new RGBColor(fillColor);\r\n                    if (fillRGB.ok) {\r\n                        hasFillColor = true;\r\n                        colorMode = 'F';\r\n                    }\r\n                }\r\n            }\r\n            if ('g,line,rect,ellipse,circle'.indexOf(n.tagName) >= 0) {\r\n                if (hasFillColor) {\r\n                    this.target.setFillColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                }\r\n                strokeColor = n.getAttribute('stroke');\r\n                if (n.hasAttribute('stroke-width')) {\r\n                    this.target.setLineWidth(this.attr(n, 'stroke-width'));\r\n                }\r\n                if (strokeColor) {\r\n                    strokeRGB = new RGBColor(strokeColor);\r\n                    if (strokeRGB.ok) {\r\n                        this.target.setDrawColor(strokeRGB.r, strokeRGB.g, strokeRGB.b);\r\n                        if (colorMode === 'F') {\r\n                            colorMode = 'FD';\r\n                        } else if (!hasFillColor) {\r\n                            colorMode = 'S';\r\n                        }\r\n                    } else {\r\n                        colorMode = null;\r\n                    }\r\n                }\r\n            }\r\n            // console.log(\"write \"+n.tagName);\r\n            switch (n.tagName.toLowerCase()) {\r\n                case 'svg':\r\n                case 'a':\r\n                case 'g':\r\n                    this.parse(n);\r\n                    break;\r\n                case 'line':\r\n                    this.target.line(this.attr(n, 'x1'), this.attr(n, 'y1'), this.attr(n, 'x2'), this.attr(n, 'y2'));\r\n                    break;\r\n                case 'rect':\r\n                    this.target.rect(this.attr(n, 'x'), this.attr(n, 'y'), this.attr(n, 'width'), this.attr(n, 'height'), n.getAttribute('style'));\r\n                    break;\r\n                case 'ellipse':\r\n                    this.target.ellipse(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'rx'), this.attr(n, 'ry'), colorMode);\r\n                    break;\r\n                case 'circle':\r\n                    this.target.circle(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'r'), colorMode);\r\n                    break;\r\n                case 'text':\r\n                    if (n.hasAttribute('font-family')) {\r\n                        switch (n.getAttribute('font-family').toLowerCase()) {\r\n                            case 'serif':\r\n                                this.target.setFont('times');\r\n                                break;\r\n                            case 'monospace':\r\n                                this.target.setFont('courier');\r\n                                break;\r\n                            default:\r\n                                n.getAttribute('font-family', 'sans-serif');\r\n                                this.target.setFont('Helvetica');\r\n                        }\r\n                    }\r\n                    if (hasFillColor) {\r\n                        this.target.setTextColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                    }\r\n                    if (this.target instanceof JSEPS) {\r\n                        this.target.text(this.attr(n, 'x'), this.attr(n, 'y'), n.innerHTML);\r\n                        break;\r\n                    }\r\n                    fontType = '';\r\n                    if (n.hasAttribute('font-weight')) {\r\n                        if (n.getAttribute('font-weight') === 'bold') {\r\n                            fontType = 'bold';\r\n                        }\r\n                    }\r\n                    if (n.hasAttribute('font-style')) {\r\n                        if (n.getAttribute('font-style') === 'italic') {\r\n                            fontType += 'italic';\r\n                        }\r\n                    }\r\n                    this.target.setFontType(fontType);\r\n                    pdfFontSize = 16;\r\n                    if (n.hasAttribute('font-size')) {\r\n                        pdfFontSize = parseInt(n.getAttribute('font-size'), 10);\r\n                    }\r\n                    box = n.getBBox();\r\n                    // FIXME: use more accurate positioning!!\r\n                    x = this.attr(n, 'x');\r\n                    y = this.attr(n, 'y');\r\n                    xOffset = 0;\r\n                    if (n.hasAttribute('text-anchor')) {\r\n                        switch (n.getAttribute('text-anchor')) {\r\n                            case 'end':\r\n                                xOffset = box.width;\r\n                                break;\r\n                            case 'middle':\r\n                                xOffset = box.width / 2;\r\n                                break;\r\n                            case 'start':\r\n                                break;\r\n                            case 'default':\r\n                                n.getAttribute('text-anchor', 'start');\r\n                                break;\r\n                        }\r\n                        x = x - (xOffset * this.k);\r\n                    }\r\n                    this.target.setFontSize(pdfFontSize).text(x, y, n.innerHTML);\r\n                    break;\r\n                default:\r\n                    if (this.remove) {\r\n                        console.log('cant translate to target:', n);\r\n                        element.removeChild(n);\r\n                        i -= 1;\r\n                    }\r\n            }\r\n        }\r\n    }\r\n\r\n    public attr(node: any, name: string) {\r\n        return this.k * parseInt(node.getAttribute(name), 10);\r\n    }\r\n}\r\n","import {Control} from './Control';\r\n\r\nexport class ScrumBoard extends Control {\r\n    public static cards = [0, 0.5, 1, 2, 3, 5, 8, 13, 20, 40, 100, '?', 'Coffee'];\r\n    private $selected: HTMLDivElement;\r\n    private $board: HTMLDivElement;\r\n\r\n    constructor() {\r\n        super();\r\n        this.redraw();\r\n    }\r\n\r\n    public redraw(): void {\r\n        if (this.$board) {\r\n            while (this.$board.children.length > 0 ) {\r\n                this.$board.removeChild(this.$board.children[0]);\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('div');\r\n            this.$selected = document.createElement('div');\r\n            this.$board = document.createElement('div');\r\n            this.$view.appendChild(this.$board);\r\n            this.$view.appendChild(this.$selected);\r\n        }\r\n        this.$view.className = 'ScrumBoard';\r\n        for ( let i = 0; i < ScrumBoard.cards.length; i++) {\r\n            let card = document.createElement('div');\r\n            card.className = 'ScrumCard';\r\n            card.innerHTML = <string>ScrumBoard.cards[i];\r\n            card['pokervalue'] = <string>ScrumBoard.cards[i];\r\n            card.onclick = e => {\r\n                this.onClick(<HTMLDivElement>e.target);\r\n            };\r\n            this.$board.appendChild(card);\r\n        }\r\n    }\r\n\r\n    public getSVG() {\r\n        this.redraw();\r\n        return this.$view;\r\n    }\r\n\r\n    public onClick(target: HTMLDivElement): void {\r\n        console.log(target['pokervalue']);\r\n\r\n        while (this.$selected.children.length > 0 ) {\r\n            this.$selected.removeChild(this.$selected.children[0]);\r\n        }\r\n        let card = document.createElement('div');\r\n        card.className = 'ScrumCard';\r\n        card['pokervalue'] = target['pokervalue'];\r\n        card.onclick = e => {\r\n            this.onShow(<HTMLDivElement>e.target);\r\n        };\r\n        this.$selected.appendChild(card);\r\n        this.$board['style']['display'] = 'none';\r\n    }\r\n\r\n    public onShow(target: HTMLDivElement): void {\r\n        target.innerHTML = target['pokervalue'];\r\n    }\r\n}\r\n","import {Graph} from './main';\r\nimport {SymbolLibary} from './elements/nodes/Symbol';\r\nimport {EventBus} from './EventBus';\r\n\r\nexport class Toolbar {\r\n\r\n    private graph: Graph;\r\n    private mainDiv: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public show(): void {\r\n        if (this.mainDiv) {\r\n            return;\r\n        }\r\n\r\n        this.mainDiv = document.createElement('div');\r\n        this.mainDiv.className = 'toolbar';\r\n\r\n        let h1Logo = document.createElement('h1');\r\n        h1Logo.className = 'logo';\r\n        h1Logo.textContent = 'DiagramJS';\r\n\r\n        let node = {type: 'Hamburger', property: 'HTML', width: 24, height: 24, id: 'GenerateProp'};\r\n        let hamburger = SymbolLibary.draw( node);\r\n        EventBus.registerEvent(hamburger, 'click', node);\r\n        this.mainDiv.appendChild(hamburger);\r\n\r\n        this.mainDiv.appendChild(h1Logo);\r\n        document.body.appendChild(this.mainDiv);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 06.03.2017.\r\n */\r\nimport Data from './Data';\r\n\r\n// export default class Data {\r\n//    public values = {};\r\n//    id: string;\r\n//    $listener: Control[] = [];\r\n//    property: string;\r\nexport namespace UML {\r\n    export class Clazz extends Data {\r\n        public static NAME: string = 'name';\r\n        public static ATTRIBUTES: string = 'attributes';\r\n        public static METHODS: string = 'methods';\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Clazz';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n\r\n        public getAttributes() {\r\n            return this.prop[Clazz.ATTRIBUTES];\r\n        }\r\n\r\n        public addToAttributes(newValue: string) {\r\n            this.addTo(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n\r\n        public removeFromAttributes(newValue: string) {\r\n            this.removeFrom(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n    }\r\n\r\n    export class Attribute extends Data {\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Attribute';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n    }\r\n\r\n    export class Methods extends Data {\r\n\r\n    }\r\n}\r\n\r\nwindow['UML'] = UML;\r\n","import {Control} from './Control';\r\n\r\nexport class VirtualKeyBoard extends Control {\r\n    constructor(data: any) {\r\n        super();\r\n        if (!data) {\r\n            data = this.getDefault();\r\n        }\r\n        let board = document.createElement('div');\r\n        this.$viewData = data;\r\n\r\n        for (let type in data) {\r\n            if (type === 'normal') {\r\n                for (let line in data[type]) {\r\n                    let lineBoard = document.createElement('div');\r\n                    lineBoard.className = 'vkLine';\r\n                    for (let key in data[type][line]) {\r\n                        let btn: HTMLButtonElement = document.createElement('button');\r\n                        let keyTag = data[type][line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                        btn.ontouchend = () => {this.action(btn); };\r\n                        btn.onclick = () => {this.action(btn); };\r\n                        lineBoard.appendChild(btn);\r\n                    }\r\n                    board.appendChild(lineBoard);\r\n                }\r\n            }\r\n        }\r\n        this.$view = board;\r\n    }\r\n\r\n    public action(btn: HTMLButtonElement) {\r\n        if (btn['key'] === '{Shift}') {\r\n            if ( btn.className === 'vkbuttonAction') {\r\n                let keys = this.$viewData['normal'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                    }\r\n                }\r\n            } else if ( btn.className === 'vkbutton') {\r\n                let keys = this.$viewData['shift'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbuttonAction');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        alert(btn);\r\n    }\r\n\r\n    public getDefault(): any {\r\n        let format = {\r\n            normal: [\r\n                ['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '?', '´', '{Bksp}'],\r\n                ['{Tab}', 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+'],\r\n                ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '#', '{enter}'],\r\n                ['{Shift}', '<', 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n// '{left}', '{up}', '{down}','{right}', '{Cancel}']\r\n            ],\r\n            shift: [\r\n                ['°', '!', '\"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '`', '{Bksp}'],\r\n                ['{Tab}', 'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', 'O', 'P', 'Ü', '*'],\r\n                ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', '\\'', '{enter}'],\r\n                ['{Shift}', '>', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n            ]\r\n        };\r\n        return format;\r\n    }\r\n\r\n    public getBoard() {\r\n        return this.$view;\r\n    }\r\n\r\n    private setButtonValue(keyTag: string, btn: HTMLButtonElement, shiftClass: string) {\r\n        btn.className = 'vkbutton';\r\n        btn['key'] = keyTag;\r\n        btn['type'] = 'normal';\r\n        if (keyTag.substring(0, 1) === '{') {\r\n            if (keyTag === '{Bksp}') {\r\n                btn.innerHTML = 'Bksp';\r\n            } else if (keyTag === '{Tab}') {\r\n                btn.innerHTML = '&#8677; Tab';\r\n            } else if (keyTag === '{enter}') {\r\n                btn.innerHTML = 'enter';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Shift}') {\r\n                btn.innerHTML = 'Shift';\r\n                btn.className = shiftClass;\r\n            } else if (keyTag === '{Accept}') {\r\n                btn.innerHTML = 'Accept';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Alt}') {\r\n                btn.innerHTML = 'Alt';\r\n            } else if (keyTag === '{Space}') {\r\n                btn.innerHTML = '&nbsp;';\r\n                btn.className = 'vkbuttonSpace';\r\n            } else if (keyTag === '{left}') {\r\n                btn.innerHTML = '&#8592';\r\n            } else if (keyTag === '{right}') {\r\n                btn.innerHTML = '&#8594;';\r\n            } else if (keyTag === '{up}') {\r\n                btn.innerHTML = '&#8593;';\r\n            } else if (keyTag === '{down}') {\r\n                btn.innerHTML = '&#8595;';\r\n            } else if (keyTag === '{Cancel}') {\r\n                btn.innerHTML = 'Cancel';\r\n                btn.className = 'vkbuttonAction';\r\n            }\r\n        } else {\r\n            btn.innerHTML = keyTag;\r\n        }\r\n    }\r\n}\r\n","import {Adapter} from '../Adapter';\r\n\r\nexport class JavaAdapter extends Adapter {\r\n    constructor() {\r\n        super();\r\n        this.id = 'JavaAdapter';\r\n    }\r\n    update(evt: Object): boolean {\r\n        if (this.isActive()) {\r\n            window['JavaBridge'].executeChange(evt);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public isActive(): boolean {\r\n        return window['JavaBridge'];\r\n    }\r\n}\r\n","export * from './JavaAdapter';\r\n","import { Util } from '../util';\r\nimport { Control } from '../Control';\r\n\r\nexport interface Size {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\ninterface GraphElement {\r\n    getSize(): Point;\r\n\r\n    getPos(): Point;\r\n\r\n    getCenter(): Point;\r\n\r\n    getSVG(): Element;\r\n\r\n    getCanvas(): Element;\r\n\r\n    getEvents(): string[];\r\n\r\n    withPos(x: number, y: number): GraphElement;\r\n\r\n    load(data: any): any;\r\n\r\n    getToolBarIcon(): Element;\r\n\r\n    loadProperties(properties: any): void;\r\n}\r\n\r\nexport abstract class DiagramElement extends Control implements GraphElement {\r\n\r\n    protected $isDraggable: boolean = true;\r\n    protected $labelHeight = 25;\r\n    protected $labelFontSize = 14;\r\n    private $pos: Point = new Point();\r\n    private $size: Point = new Point();\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getPos(): Point {\r\n        return this.$pos;\r\n    }\r\n\r\n    public getSize(): Point {\r\n        return this.$size;\r\n    }\r\n\r\n    public getCenter(): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        return new Point(pos.x + size.x / 2, pos.y + size.y / 2);\r\n    }\r\n\r\n    public getCenterPosition(p: string): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let offset = this['$' + p];\r\n        let center = this.getCenter();\r\n        if (p === Point.DOWN) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y + size.y, Point.DOWN);\r\n        }\r\n        if (p === Point.UP) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y, Point.UP);\r\n        }\r\n        if (p === Point.LEFT) {\r\n            return new Point(pos.x, Math.min(center.y + offset, pos.y + size.y), Point.LEFT);\r\n        }\r\n        if (p === Point.RIGHT) {\r\n            return new Point(pos.x + size.x, Math.min(center.y + offset, pos.y + size.y), Point.RIGHT);\r\n        }\r\n        return new Point();\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getCanvas(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return null;\r\n    }\r\n\r\n    public getAlreadyDisplayingSVG(): Element {\r\n        return document.getElementById(this.id) || this.getSVG();\r\n    }\r\n\r\n    public load(data: any) {\r\n        // Do Nothing\r\n    }\r\n\r\n    public withPos(x: number, y: number): GraphElement {\r\n        if (x && y) {\r\n            this.$pos = new Point(x, y);\r\n        } else {\r\n            if (typeof (x) !== 'undefined' && x !== null) {\r\n                this.$pos.x = x;\r\n            }\r\n            if (typeof (y) !== 'undefined' && y !== null) {\r\n                this.$pos.y = y;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public withSize(width: number, height: number): DiagramElement {\r\n        if (width && height) {\r\n            this.$size = new Point(width, height);\r\n        } else {\r\n            if (typeof (width) !== 'undefined' && width !== null) {\r\n                this.$size.x = width;\r\n            }\r\n            if (typeof (height) !== 'undefined' && height !== null) {\r\n                this.$size.y = height;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        // FIXME if (this.status === 'close') {\r\n        // if (!this.$owner.isClosed()) {\r\n        //        return this;\r\n        //    }\r\n        // }\r\n        return super.getShowed();\r\n    }\r\n\r\n    public loadProperties(properties: any) {\r\n        // DO Nothing\r\n    }\r\n\r\n    protected createShape(attrs: any): Element {\r\n        return Util.createShape(attrs);\r\n    }\r\n}\r\n\r\nexport class Point {\r\n    public static UP: string = 'UP';\r\n    public static LEFT: string = 'LEFT';\r\n    public static RIGHT: string = 'RIGHT';\r\n    public static DOWN: string = 'DOWN';\r\n    x: number = 0;\r\n    y: number = 0;\r\n\r\n    //    pos:string = '';\r\n\r\n    constructor(x?: number, y?: number, pos?: string) {\r\n        this.x = Math.ceil(x || 0);\r\n        this.y = Math.ceil(y || 0);\r\n        if (pos) {\r\n            this['pos'] = pos;\r\n        }\r\n    }\r\n\r\n    public add(pos: Point) {\r\n        this.x += pos.x;\r\n        this.y += pos.y;\r\n        return this;\r\n    }\r\n\r\n    public getPosition(): string {\r\n        if (!this['pos']) {\r\n            return '';\r\n        }\r\n        return this['pos'];\r\n    }\r\n\r\n    public addNum(x: number, y: number) {\r\n        this.x += x;\r\n        this.y += y;\r\n        return this;\r\n    }\r\n\r\n    public sum(pos: Point) {\r\n        let sum = new Point(this.x, this.y);\r\n        sum.add(pos);\r\n        return sum;\r\n    }\r\n\r\n    public center(posA: Point, posB: Point) {\r\n        let count = 0;\r\n        if (posA) {\r\n            this.x += posA.x;\r\n            this.y += posA.y;\r\n            count++;\r\n        }\r\n        if (posB) {\r\n            this.x += posB.x;\r\n            this.y += posB.y;\r\n            count++;\r\n        }\r\n        if (count > 0) {\r\n            this.x = (this.x / count);\r\n            this.y = (this.y / count);\r\n        }\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        return this.x < 1 && this.y < 1;\r\n    }\r\n\r\n    public size(posA: Point, posB: Point) {\r\n        let x1 = 0, x2 = 0, y1 = 0, y2 = 0;\r\n        if (posA) {\r\n            x1 = posA.x;\r\n            y1 = posA.y;\r\n        }\r\n        if (posB) {\r\n            x2 = posB.x;\r\n            y2 = posB.y;\r\n        }\r\n        if (x1 > x2) {\r\n            this.x = x1 - x2;\r\n        } else {\r\n            this.x = x2 - x1;\r\n        }\r\n        if (y1 > y2) {\r\n            this.y = y1 - y2;\r\n        } else {\r\n            this.y = y2 - y1;\r\n        }\r\n    }\r\n}\r\n\r\n// \t\t\t\t######################################################### Line #########################################################\r\nexport class Line extends DiagramElement {\r\n    public static FORMAT = { SOLID: 'SOLID', DOTTED: 'DOTTED', PATH: 'PATH' };\r\n    public source: Point;\r\n    public target: Point;\r\n    public color: string;\r\n    public lineType: string;\r\n    private path: string;\r\n    private angle: Number;\r\n\r\n    constructor(lineType: string) {\r\n        super();\r\n        this.lineType = lineType;\r\n    }\r\n\r\n    public getTyp(): string {\r\n        return 'SVG';\r\n    }\r\n\r\n    public getPos() {\r\n        let pos = new Point();\r\n        pos.center(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public getSize() {\r\n        let pos = new Point();\r\n        pos.size(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public withColor(color: string): Line {\r\n        this.color = color;\r\n        return this;\r\n    }\r\n\r\n    public withSize(x: number, y: number): DiagramElement {\r\n        return this;\r\n    }\r\n\r\n    public withPath(path: Array<Point>, close: boolean, angle?: any): Line {\r\n        let i: number, d: string = 'M' + path[0].x + ' ' + path[0].y;\r\n        this.lineType = Line.FORMAT.PATH; // It is a Path not a Line\r\n        for (i = 1; i < path.length; i += 1) {\r\n            d = d + 'L ' + path[i].x + ' ' + path[i].y;\r\n        }\r\n        if (close) {\r\n            d = d + ' Z';\r\n            this.target = path[0];\r\n        } else {\r\n            this.target = path[path.length - 1];\r\n        }\r\n        this.path = d;\r\n        if (angle instanceof Number) {\r\n            this.angle = angle;\r\n        } else if (angle) {\r\n            // var lineangle, start = path[0], end = path[path.length - 1];\r\n            // lineangle = Math.atan2(end.y - start.y, end.x - start.x);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): SVGGElement {\r\n        if (this.lineType === 'PATH') {\r\n            return <SVGGElement>Util.create({\r\n                tag: 'path',\r\n                'd': this.path,\r\n                'fill': this.color,\r\n                stroke: '#000',\r\n                'stroke-width': '1px'\r\n            });\r\n        }\r\n        let line: SVGGElement = <SVGGElement>Util.create({\r\n            tag: 'line',\r\n            'x1': this.source.x,\r\n            'y1': this.source.y,\r\n            'x2': this.target.x,\r\n            'y2': this.target.y,\r\n            'stroke': Util.getColor(this.color)\r\n        });\r\n        if (this.lineType && this.lineType.toLowerCase() === 'dotted') {\r\n            line.setAttribute('stroke-miterlimit', '4');\r\n            line.setAttribute('stroke-dasharray', '1,1');\r\n        }\r\n        return line;\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport Options from '../Options';\r\nimport {JavaAdapter} from '../adapters';\r\n\r\nexport class ClassEditor extends Graph {\r\n    private adapter: JavaAdapter;\r\n    constructor(json: any, options: Options) {\r\n        if (!options ) {\r\n            options = {};\r\n        }\r\n        options.canvas = options.canvas || 'canvas';\r\n        // options.origin = options.origin || new Point(150, 45);\r\n//            layout: \"DagreLayout\",\r\n        options.autoSave = options.autoSave || true;\r\n        if (!options.features) {\r\n            options.features = {\r\n                drag: true,\r\n                editor: true,\r\n                palette: true,\r\n                select: true,\r\n                zoom: true,\r\n                toolbar: true,\r\n                import: true,\r\n                properties: true,\r\n                addnode: true,\r\n                newedge: true\r\n            };\r\n        }\r\n        super(json, options);\r\n    }\r\n\r\n    public setBoardStyle(value: string) {\r\n        console.log(value);\r\n        this.importFile.setBoardStyle(value);\r\n    }\r\n\r\n    public registerListener(): void {\r\n        this.adapter = new JavaAdapter();\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return this.adapter;\r\n    }\r\n}\r\n","import * as edges from './edges';\r\nimport { Association } from './edges';\r\nimport * as nodes from './nodes';\r\nimport * as layouts from '../layouts';\r\nimport Layout from '../layouts/Layout';\r\nimport { GraphModel } from './Model';\r\nimport { Point, Size } from './BaseElements';\r\nimport { Util } from '../util';\r\nimport { Control } from '../Control';\r\nimport Data from '../Data';\r\nimport { EventBus } from '../EventBus';\r\nimport { AddNode, Drag, NewEdge, Select, Zoom } from '../handlers';\r\nimport Options from '../Options';\r\nimport { ImportFile } from '../handlers/ImportFile';\r\nimport { CSS } from '../CSS';\r\nimport { DiagramElement } from './index';\r\nimport { Toolbar } from '../Toolbar';\r\nimport {JSEPS} from '../JSEPS';\r\nimport {SVGConverter} from '../SVGConverter';\r\nimport Palette from '../Palette';\r\nimport {PanelGroup} from '../PropertiesPanel';\r\n\r\nexport class Graph extends Control {\r\n    // canvas: HTMLElement;\r\n    root: SVGElement;\r\n    $graphModel: GraphModel;\r\n    options: Options;\r\n    canvasSize: Size;\r\n    nodeFactory: Object;\r\n    edgeFactory: Object;\r\n    layoutFactory: Object;\r\n    protected importFile: ImportFile;\r\n    private currentlayout: Layout;\r\n    // private layerToolBar: SVGSVGElement;\r\n    // https://stackoverflow.com/questions/15181452/how-to-save-export-inline-svg-styled-with-css-from-browser-to-image-file\r\n    private containerElements = ['svg', 'g'];\r\n    private relevantStyles = {\r\n        'rect': ['fill', 'stroke', 'stroke-width'],\r\n        'path': ['fill', 'stroke', 'stroke-width', 'opacity'],\r\n        'circle': ['fill', 'stroke', 'stroke-width'],\r\n        'line': ['stroke', 'stroke-width'],\r\n        'text': ['fill', 'font-size', 'text-anchor', 'font-family'],\r\n        'polygon': ['stroke', 'fill']\r\n    };\r\n\r\n    constructor(json: any, options: Options) {\r\n        super();\r\n        json = json || {};\r\n        if (json['data']) {\r\n            options = json['options'];\r\n            json = json['data'];\r\n            this.id = json['id'];\r\n        }\r\n        this.options = options || {features: { drag: true}};\r\n        if (json['init']) {\r\n            return;\r\n        }\r\n        if (!this.options.origin) {\r\n            this.options.origin = new Point(150, 45);\r\n        }\r\n        if (!this.options.style) {\r\n            // Style can be classic or modern\r\n            this.options.style = 'classic';\r\n        }\r\n        if (this.options.autoSave) {\r\n            Util.isAutoSave = options.autoSave;\r\n        }\r\n\r\n        this.initFactories();\r\n        this.initCanvas();\r\n        this.initFeatures(this.options.features);\r\n\r\n        // load previous session, if user wants it\r\n        // otherwise load the json data\r\n        if (!this.lookupInLocalStorage()) {\r\n            this.load(json);\r\n        }\r\n\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    public lookupInLocalStorage(): boolean {\r\n        if (!this.options.autoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (!Util.isLocalStorageSupported()) {\r\n            return false;\r\n        }\r\n        let diagram = Util.getDiagramFromLocalStorage();\r\n        if (diagram && diagram.length > 0) {\r\n            if (confirm('Restore previous session?')) {\r\n                let jsonData: JSON = JSON.parse(diagram);\r\n                this.load(jsonData);\r\n                this.layout();\r\n                return true;\r\n            } else {\r\n                Util.saveToLocalStorage( null);\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public fitSizeOnNodes(): void {\r\n        let maxWidth: number = 0;\r\n        let maxHeight: number = 0;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            let nodePos = node.getPos();\r\n            let nodeSize = node.getSize();\r\n            let nodeWidestPosX = nodePos.x + nodeSize.x;\r\n            let nodeWidestPosY = nodePos.y + nodeSize.y;\r\n\r\n            if (nodeWidestPosX > maxWidth) {\r\n                maxWidth = nodeWidestPosX;\r\n            }\r\n\r\n            if (nodeWidestPosY > maxHeight) {\r\n                maxHeight = nodeWidestPosY;\r\n            }\r\n        }\r\n\r\n        this.root.setAttributeNS(null, 'width', '' + (maxWidth + 100));\r\n        this.root.setAttributeNS(null, 'height', '' + (maxHeight + 50));\r\n    }\r\n\r\n    public saveAs(typ: string) {\r\n        typ = typ.toLowerCase();\r\n\r\n        // shrink size of graph to minimum. only to show up nodes\r\n        const currentSize = this.getRootSize();\r\n        this.fitSizeOnNodes();\r\n\r\n        if (typ === 'svg') {\r\n            this.exportSvg();\r\n        } else if (typ === 'png') {\r\n            this.exportPng();\r\n        } else if (typ === 'html') {\r\n            this.exportHtml();\r\n\r\n        } else if (typ === 'pdf') {\r\n            this.exportPdf();\r\n            // } else if (typ === 'eps') {\r\n            // this.ExportEPS();\r\n        }\r\n        else if (typ === 'json') {\r\n            this.exportJson();\r\n        }\r\n\r\n        // set the size back to default\r\n        this.root.setAttributeNS(null, 'width', '' + currentSize.width);\r\n        this.root.setAttributeNS(null, 'height', '' + currentSize.height);\r\n    }\r\n\r\n    /**\r\n     * generates a blob file and makes it available for download.\r\n     * @param type type of file\r\n     * @param data raw data\r\n     * @param name name of download file\r\n     */\r\n    public save(type: string, data: any, name: string, context: string) {\r\n        if (window['java']) {\r\n            window['java'].export(type, data, name, context);\r\n            return;\r\n        }\r\n        let a = document.createElement('a');\r\n        a.href = window.URL.createObjectURL(new Blob([data], { type: context }));\r\n        a.download = name;\r\n        document.body.appendChild(a);\r\n        a.click();\r\n        document.body.removeChild(a);\r\n    }\r\n\r\n    /** Exports the diagram as svg. */\r\n    public exportSvg(): void {\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        this.save('svg', this.serializeXmlNode(wellFormatedSvgDom), 'class_diagram.svg', 'image/svg+xml');\r\n    }\r\n\r\n    /** Exports the diagram as html. */\r\n    public exportHtml(): void {\r\n        let htmlFacade = '<html><head><title>DiagramJS - Classdiagram</title></head><body>$content</body></html>';\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        let svgAsXml = this.serializeXmlNode(wellFormatedSvgDom);\r\n\r\n        let htmlResult = htmlFacade.replace('$content', svgAsXml);\r\n\r\n        this.save('html', htmlResult, 'class_diagram.htm', 'text/plain');\r\n    }\r\n\r\n    /** Exports the diagram as json. */\r\n    public exportJson(): void {\r\n        let type = 'text/plain';\r\n        let jsonObj = Util.toJson(this.$graphModel);\r\n        let data = JSON.stringify(jsonObj, null, '\\t');\r\n\r\n        this.save('json', data, 'class_diagram.json', type);\r\n    }\r\n\r\n    /** Exports the diagram as pdf. */\r\n    public exportPdf(): void {\r\n        if (!window['jsPDF']) {\r\n            console.log('jspdf n.a.');\r\n            return;\r\n        }\r\n        let type = 'image/svg+xml';\r\n        let converter, pdf = new window['jsPDF']('l', 'px', [this.$graphModel.getSize().x, this.$graphModel.getSize().y]);\r\n        converter = new SVGConverter(this.$view, pdf, {removeInvalid: false});\r\n        pdf.save('Download.pdf');\r\n/*        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let canvas, context, a, image = new Image();\r\n        let size = this.getRootSize();\r\n\r\n        // create the loaded img source into a canvas. to generate a picture. then place this picture in the pdf\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            let pdf = new window['jsPDF']();\r\n\r\n            pdf.addImage(canvas.toDataURL('image/jpeg'), 'jpeg', 15, 40, 180, 160);\r\n            pdf.save('class_diagram.pdf');\r\n\r\n        };\r\n\r\n        image.src = url;\r\n        */\r\n    }\r\n\r\n    public import(data: string): void {\r\n        let rootElement = this.$graphModel.$view;\r\n        while (rootElement.hasChildNodes()) {\r\n            rootElement.removeChild(rootElement.firstChild);\r\n        }\r\n\r\n        while (this.$view.hasChildNodes()) {\r\n            this.$view.removeChild(this.$view.firstChild);\r\n        }\r\n\r\n        this.clearModel();\r\n        let jsonData = JSON.parse(data);\r\n        this.load(jsonData);\r\n        this.layout();\r\n    }\r\n\r\n    public exportEPS(): void {\r\n          let converter, doc = new JSEPS({inverting: true});\r\n            converter = new SVGConverter(this.$view, doc, {removeInvalid: false});\r\n            this.save('eps', doc.getData(), 'diagram.eps', doc.getType());\r\n    }\r\n\r\n    /** Exports the diagram as png. */\r\n    public exportPng(): void {\r\n        let canvas, context, a, image = new Image();\r\n        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let typ = 'image/svg+xml';\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let size = this.getRootSize();\r\n\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            a = document.createElement('a');\r\n            a.download = 'class_diagram.png';\r\n            a.href = canvas.toDataURL('image/png');\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            document.body.removeChild(a);\r\n        };\r\n\r\n        image.src = url;\r\n\r\n    }\r\n\r\n    public getSvgWithStyleAttributes(): Node {\r\n        let oDOM = this.$graphModel.$view.cloneNode(true);\r\n        this.readElement(oDOM, this.$graphModel.$view);\r\n\r\n        return oDOM;\r\n    }\r\n\r\n    public serializeXmlNode(xmlNode: any) {\r\n        if (window['XMLSerializer'] !== undefined) {\r\n            return (new window['XMLSerializer']()).serializeToString(xmlNode);\r\n        }\r\n        if (xmlNode.xml !== undefined) {\r\n            return xmlNode.xml;\r\n        }\r\n        return xmlNode.outerHTML;\r\n    }\r\n\r\n    public getRootSize(): Size {\r\n        let width: number;\r\n        let height: number;\r\n        width = +this.root.getAttribute('width');\r\n        height = +this.root.getAttribute('height');\r\n\r\n        return { width: width, height: height };\r\n    }\r\n\r\n        // Graph.prototype.ExportEPS = function () {\r\n        //     var converter, doc = new svgConverter.jsEPS({inverting: true});\r\n        //     converter = new svgConverter(this.board, doc, {removeInvalid: false});\r\n        //     doc.save();\r\n        // };\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        this.$graphModel = new GraphModel();\r\n        this.$graphModel.init(this);\r\n        this.$graphModel.load(json);\r\n    }\r\n\r\n    public clearModel(): void {\r\n        this.$graphModel.removeAllElements();\r\n        this.clearSvgRoot();\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.layout();\r\n        return this;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        return;\r\n    }\r\n\r\n    public getNextFreePosition(): Point {\r\n\r\n        if (!this.$graphModel) {\r\n            return new Point(50, 50);\r\n        }\r\n\r\n        let point = new Point(0, 50);\r\n\r\n        let maxX = 0;\r\n        let minX = 9000;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            maxX = Math.max(maxX, node.getPos().x);\r\n            minX = Math.min(minX, node.getPos().x);\r\n        }\r\n\r\n        if (minX > 170) {\r\n            point.x = 10;\r\n        }\r\n        else {\r\n            point.x = maxX + 200;\r\n        }\r\n\r\n        return point;\r\n    }\r\n\r\n    public addElement(type: string, dontDraw?: boolean): boolean {\r\n        let success = this.$graphModel.addElement(type);\r\n        if (success === true) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return success;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues?: Object, layout?: boolean, dontDraw?: boolean): DiagramElement {\r\n        let element = this.$graphModel.addElementWithValues(type, optionalValues);\r\n        if (element && layout) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public layout(dontDraw?: boolean): Graph {\r\n        this.getLayout().layout(this, this.$graphModel);\r\n\r\n        if (dontDraw) {\r\n            return this;\r\n        }\r\n\r\n        this.draw();\r\n        return this;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTDRAGOVER, EventBus.ELEMENTDRAGLEAVE, EventBus.ELEMENTDROP];\r\n    }\r\n\r\n    public draw() {\r\n        this.clearSvgRoot();\r\n        let model = this.$graphModel;\r\n        let root = this.root;\r\n        let max: Point = new Point();\r\n        if (this.options) {\r\n            max.x = this.options.minWidth || 0;\r\n            max.y = this.options.minHeight || 0;\r\n        }\r\n\r\n        for (let node of model.nodes) {\r\n            let svg = node.getSVG();\r\n            EventBus.register(node, svg);\r\n            root.appendChild(svg);\r\n\r\n            let temp: number;\r\n            temp = node.getPos().x + node.getSize().x;\r\n            if (temp > max.x) {\r\n                max.x = temp;\r\n            }\r\n            temp = node.getPos().y + node.getSize().y;\r\n            if (temp > max.y) {\r\n                max.y = temp;\r\n            }\r\n\r\n        }\r\n        Util.setAttributeSize(this.root, max.x + 60, max.y + 40);\r\n\r\n        for (let edge of model.edges) {\r\n            let svg = edge.getSVG();\r\n            EventBus.register(edge, svg);\r\n            root.appendChild(svg);\r\n        }\r\n    }\r\n\r\n    public getNode(id: string) {\r\n        return this.$graphModel.getNodeById(id);\r\n    }\r\n\r\n    public drawElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let svg = element.getSVG();\r\n        this.root.appendChild(svg);\r\n\r\n        // actualize root width size, if neccessary\r\n        // get current width of root\r\n        let rootSize = this.getRootSize();\r\n        let newWidth = element.getPos().x + element.getSize().x + 40;\r\n        let newHeight = element.getPos().y + element.getSize().y;\r\n\r\n        if (rootSize.width < newWidth) {\r\n            this.root.setAttributeNS(null, 'width', '' + newWidth);\r\n        }\r\n\r\n        if (rootSize.height < newHeight) {\r\n            this.root.setAttributeNS(null, 'height', '' + newHeight);\r\n        }\r\n\r\n        // draw edge\r\n        if (element instanceof Association) {\r\n            let edge = <Association>element;\r\n            edge.redraw(edge.$sNode);\r\n            let srcSvg = element.$sNode.getAlreadyDisplayingSVG();\r\n            let targetSvg = element.$tNode.getAlreadyDisplayingSVG();\r\n\r\n            this.root.appendChild(srcSvg);\r\n            this.root.appendChild(targetSvg);\r\n        }\r\n\r\n        EventBus.register(element, svg);\r\n    }\r\n\r\n    public removeElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let alreadyDisplayingSvg = element.getAlreadyDisplayingSVG();\r\n        if (Util.isParentOfChild(this.root, alreadyDisplayingSvg)) {\r\n            this.root.removeChild(alreadyDisplayingSvg);\r\n        }\r\n    }\r\n\r\n    public generate(packageName: string, path?: string) {\r\n        this.$graphModel.package = packageName;\r\n        this.$graphModel.genPath = path;\r\n\r\n        let data, result = Util.toJson(this.$graphModel);\r\n        data = JSON.stringify(result, null, '\\t');\r\n        if (window['java'] && typeof window['java'].generate === 'function') {\r\n            window['java'].generate(data);\r\n        }\r\n    }\r\n// REFACTORING dd\r\n    private readElement(parent: any, origData: any): void {\r\n        let children = parent.childNodes;\r\n        let origChildDat = origData.childNodes;\r\n\r\n        for (let cd = 0; cd < children.length; cd++) {\r\n            let child = children[cd];\r\n\r\n            let tagName = child.tagName;\r\n            if (this.containerElements.indexOf(tagName) !== -1) {\r\n                this.readElement(child, origChildDat[cd]);\r\n            } else if (tagName in this.relevantStyles) {\r\n                let styleDef = window.getComputedStyle(origChildDat[cd]);\r\n\r\n                let styleString = '';\r\n                for (let st = 0; st < this.relevantStyles[tagName].length; st++) {\r\n                    styleString += this.relevantStyles[tagName][st] + ':' + styleDef.getPropertyValue(this.relevantStyles[tagName][st]) + '; ';\r\n                }\r\n\r\n                child.setAttribute('style', styleString);\r\n            }\r\n        }\r\n    }\r\n\r\n    private createPattern(): Element {\r\n        const defs = Util.createShape({ tag: 'defs' });\r\n        const pattern = Util.createShape({\r\n            tag: 'pattern',\r\n            id: 'raster',\r\n            patternUnits: 'userSpaceOnUse',\r\n            width: 40,\r\n            height: 40\r\n        });\r\n        const path = 'M0 4 L0 0 L4 0 M36 0 L40 0 L40 4 M40 36 L40 40 L36 40 M4 40 L0 40 L0 36';\r\n        const cross = Util.createShape({\r\n            tag: 'path',\r\n            d: path,\r\n            stroke: '#DDD',\r\n            'stroke-width': 1,\r\n            fill: 'none'\r\n        });\r\n\r\n        const rect = Util.createShape({\r\n            tag: 'rect',\r\n            x: 0,\r\n            y: 0,\r\n            width: 40,\r\n            height: 40,\r\n            fill: 'none'\r\n        });\r\n        pattern.appendChild(rect);\r\n        pattern.appendChild(cross);\r\n        defs.appendChild(pattern);\r\n        return defs;\r\n    }\r\n\r\n    private clearSvgRoot() {\r\n        const root = this.root;\r\n        this.$graphModel.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n        while (root.firstChild) {\r\n            root.removeChild(root.firstChild);\r\n        }\r\n\r\n        root.appendChild(this.createPattern());\r\n        let fillValue = 'none';\r\n        if (this.options.raster) {\r\n            fillValue = 'url(#raster)';\r\n        }\r\n        let background = Util.createShape({\r\n            tag: 'rect',\r\n            id: 'background',\r\n            width: 5000,\r\n            height: 5000,\r\n            x: 0,\r\n            y: 0,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: fillValue\r\n        });\r\n        root.appendChild(background);\r\n\r\n        // delete inline Edit, if exists\r\n        let inlineEdit = document.getElementById('inlineEdit');\r\n        if (inlineEdit && document.body.contains(inlineEdit)) {\r\n            document.body.removeChild(inlineEdit);\r\n        }\r\n    }\r\n\r\n    private getLayout(): Layout {\r\n        if (this.currentlayout) {\r\n            return this.currentlayout;\r\n        }\r\n\r\n        let layout = this.options.layout || '';\r\n        if (this.layoutFactory[layout]) {\r\n            this.currentlayout = new this.layoutFactory[layout]();\r\n        } else {\r\n            this.currentlayout = new layouts.DagreLayout();\r\n        }\r\n\r\n        return this.currentlayout;\r\n    }\r\n\r\n    private initFactories() {\r\n\r\n        let noder = nodes;\r\n        this.nodeFactory = {};\r\n        for (let id in noder) {\r\n            if (noder.hasOwnProperty(id) === true) {\r\n                this.nodeFactory[id] = noder[id];\r\n            }\r\n        }\r\n\r\n        let edger = edges;\r\n        this.edgeFactory = {};\r\n        for (let id in edger) {\r\n            if (edger.hasOwnProperty(id) === true) {\r\n                this.edgeFactory[id] = edger[id];\r\n            }\r\n        }\r\n\r\n        let layouter = layouts;\r\n        this.layoutFactory = {};\r\n        for (let id in layouter) {\r\n            if (layouter.hasOwnProperty(id) === true) {\r\n                this.layoutFactory[id] = layouter[id];\r\n            }\r\n        }\r\n    }\r\n\r\n    private initCanvas() {\r\n        if (this.options.canvas) {\r\n            this.$view = document.getElementById(this.options.canvas);\r\n        }\r\n        if (!this.$view) {\r\n            this.$view = document.createElement('div');\r\n            this.$view.setAttribute('class', 'diagram');\r\n            document.body.appendChild(this.$view);\r\n        }\r\n    }\r\n\r\n    private initFeatures(features: any) {\r\n\r\n        if (features) {\r\n            if (features.newedge) {\r\n                EventBus.subscribe(new NewEdge(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            this.importFile = new ImportFile(this);\r\n            if (features.import) {\r\n                EventBus.subscribe(this.importFile, 'dragover', 'dragleave', 'drop');\r\n            }\r\n            if (features.zoom) {\r\n                let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n                EventBus.subscribe(new Zoom(this), mousewheel);\r\n            }\r\n            if (features.drag) {\r\n                EventBus.subscribe(new Drag(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            if (features.select) {\r\n                EventBus.subscribe(new Select(this), 'click', 'drag');\r\n            }\r\n            if (features.palette) {\r\n                new Palette(this).show();\r\n            }\r\n            if (features.toolbar) {\r\n                new Toolbar(this).show();\r\n            }\r\n            if (features.properties) {\r\n                let propertyPanel = new PanelGroup(this);\r\n                // let dispatcher = new PropertiesDispatcher(this);\r\n                EventBus.subscribe(propertyPanel, 'dblclick', 'click', EventBus.RELOADPROPERTIES);\r\n                propertyPanel.show();\r\n            }\r\n            if (features.addnode) {\r\n                EventBus.subscribe(new AddNode(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n        }\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport {DiagramElement, Point} from './BaseElements';\r\nimport {Association} from './edges';\r\nimport {Node} from './nodes';\r\nimport {Control} from '../Control';\r\nimport {Util} from '../util';\r\nimport {EventBus} from '../EventBus';\r\n\r\nexport class GraphModel extends DiagramElement {\r\n    nodes: Node[] = [];\r\n    edges: Association[] = [];\r\n    package: string;\r\n    genPath: string;\r\n    $isLoading: boolean;\r\n\r\n    public load(data?: any) {\r\n\r\n        this.$isLoading = true;\r\n        data = data || {};\r\n        this.property = data.type || data.property || 'classdiagram';\r\n        this.id = 'RootElement';\r\n        if (data.nodes) {\r\n            for (let node of data.nodes) {\r\n                this.addNode(node);\r\n            }\r\n        }\r\n        if (data.edges) {\r\n            for (let edge of data.edges) {\r\n                this.addEdge(edge);\r\n            }\r\n        }\r\n\r\n        this.$isLoading = false;\r\n    }\r\n\r\n    public getNodeByPosition(x: number, y: number): Node {\r\n        for (let node of this.nodes) {\r\n            let posOfNode: Point = (<Node>node).getPos();\r\n            let sizeOfNode: Point = (<Node>node).getSize();\r\n\r\n            if ((posOfNode.x <= x && (posOfNode.x + sizeOfNode.x) >= x)\r\n                && (posOfNode.y <= y && (posOfNode.y + sizeOfNode.y) >= y)) {\r\n                return node;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.initCanvas();\r\n        return this;\r\n    }\r\n\r\n    public addElement(type: string): boolean {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n        if (element) {\r\n            Util.saveToLocalStorage(this);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues: Object): DiagramElement {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n\r\n        // position\r\n        if (optionalValues) {\r\n            if (optionalValues.hasOwnProperty('x') && optionalValues.hasOwnProperty('y')) {\r\n                let x = optionalValues['x'];\r\n                let y = optionalValues['y'];\r\n                element.withPos(x, y);\r\n            }\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return element;\r\n    }\r\n\r\n    public removeAllElements(): void {\r\n\r\n        let nodesLength = this.nodes.length;\r\n        for (let i = 0; i < nodesLength; i++) {\r\n            this.removeElement(this.nodes[0].id);\r\n        }\r\n\r\n        this.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n    }\r\n\r\n    public removeElement(id: string): boolean {\r\n\r\n        let element = this.getDiagramElementById(id);\r\n        if (!element) {\r\n            return false;\r\n        }\r\n\r\n        (<Graph>this.$owner).removeElement(element);\r\n\r\n        if (element instanceof Node) {\r\n\r\n            let idxOfNode = this.nodes.indexOf(element);\r\n            if (idxOfNode > -1) {\r\n                this.nodes.splice(idxOfNode, 1);\r\n            }\r\n\r\n            while (element.$edges.length > 0) {\r\n                this.removeElement(element.$edges[0].id);\r\n            }\r\n\r\n            element.$edges = [];\r\n        }\r\n        else if (element instanceof Association) {\r\n\r\n            let idxOfEdge = this.edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                this.edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from source\r\n            idxOfEdge = element.$sNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$sNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from target\r\n            idxOfEdge = element.$tNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$tNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return true;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        const size = 10;\r\n        const path = `M${-size} 0 L${+size} 0 M0 ${-size} L0 ${+size}`;\r\n\r\n        const attr = {\r\n            tag: 'path',\r\n            id: 'origin',\r\n            d: path,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: 'none'\r\n        };\r\n        let shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: 0 - size,\r\n            y: 0 - size / 1.5,\r\n            'text-anchor': 'end',\r\n            'font-family': 'Verdana',\r\n            'font-size': '9',\r\n            fill: '#999'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = '(0, 0)';\r\n\r\n        let group = this.createShape({tag: 'g'});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEUP, EventBus.ELEMENTMOUSELEAVE, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTMOUSEWHEEL, EventBus.ELEMENTCLICK, EventBus.ELEMENTDRAG];\r\n    }\r\n\r\n    public getNewId(prefix?: string): string {\r\n        let id = (prefix ? prefix.toLowerCase() + '-' : '') + Math.floor(Math.random() * 100000);\r\n        return id;\r\n    }\r\n\r\n    public getEdgeById(id: string): Association {\r\n        for (let edge of this.edges) {\r\n            if (edge.id === id) {\r\n                return edge;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    public getDiagramElementById(id: string): DiagramElement {\r\n\r\n        return this.getNodeById(id) || this.getEdgeById(id);\r\n    }\r\n\r\n    /**\r\n     * Add an edge with data in json file. Optional you can say, that the edge should have\r\n     * the points of source node and target node.\r\n     * @param edge information about edge in json\r\n     * @param withPosOfNodes optional. set points to line of source and target node\r\n     */\r\n    public addEdge(edge: any, withPosOfNodes?: boolean): Association {\r\n\r\n        // lookup in factoryedges and check if the edge type realy exists\r\n        if (edge && edge.type) {\r\n            const graph = (<Graph>this.$owner);\r\n            let typeExists = false;\r\n            for (let edgeType in graph.edgeFactory) {\r\n                if (edgeType === edge.type) {\r\n                    typeExists = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!typeExists) {\r\n                edge.type = 'Association';\r\n            }\r\n        }\r\n\r\n        let type = edge.type || 'Association';\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n\r\n        let newEdge = <Association>this.createElement(type, id, edge);\r\n        newEdge.type = type;\r\n\r\n        let source: Node;\r\n        let sourceAsString: string = edge.source.id || edge.source;\r\n        if (sourceAsString) {\r\n            source = this.getNodeById(sourceAsString);\r\n            if (!source) {\r\n                let nodeID = edge.source;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                source = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                source.init(this);\r\n            }\r\n        }\r\n\r\n        let target: Node;\r\n        let targetAsString: string = edge.target.id || edge.target;\r\n        if (targetAsString) {\r\n            target = this.getNodeById(targetAsString);\r\n            if (!target) {\r\n                let nodeID = edge.target;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                target = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                target.init(this);\r\n            }\r\n        }\r\n\r\n        newEdge.withItem(source, target);\r\n\r\n        if (withPosOfNodes) {\r\n            let srcX = source.getPos().x + (source.getSize().x / 2);\r\n            let srcY = source.getPos().y + (source.getSize().y / 2);\r\n\r\n            let targetX = target.getPos().x + (target.getSize().x / 2);\r\n            let targetY = target.getPos().y + (target.getSize().y / 2);\r\n\r\n            newEdge.addPoint(srcX, srcY);\r\n            newEdge.addPoint(targetX, targetY);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public createElement(type: string, id: string, data: Object): DiagramElement {\r\n        const graph = <Graph>this.$owner;\r\n        let element: DiagramElement;\r\n        if (graph.nodeFactory[type]) {\r\n            element = new graph.nodeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.nodes.push(<Node>element);\r\n        }\r\n        if (graph.edgeFactory[type]) {\r\n            element = new graph.edgeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.edges.push(<Association>element);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public getNodeById(id: string): Node {\r\n        for (let node of this.nodes) {\r\n            if (node.id === id) {\r\n                return node;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    private initCanvas() {\r\n        const graph = <Graph>this.$owner;\r\n        graph.canvasSize = {width: graph.$view.clientWidth, height: graph.$view.clientHeight};\r\n        graph.root = Util.createShape({\r\n            tag: 'svg',\r\n            id: 'root',\r\n            width: graph.canvasSize.width,\r\n            height: graph.canvasSize.height\r\n            // FIXME,viewBox: `${this.$graph.options.origin.x * -1} ${this.$graph.options.origin.y * -1} ${this.$graph.canvasSize.width} ${this.$graph.canvasSize.height}`\r\n        });\r\n        this.$view = graph.root;\r\n        graph.$view.appendChild(graph.root);\r\n\r\n        let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    private addNode(node: Node): Node {\r\n        let type = node['type'] || node.property || 'Node';\r\n        type = Util.toPascalCase(type);\r\n        let id = node['id'] || node['name'] || this.getNewId(type);\r\n\r\n        return <Node>this.createElement(type, id, node);\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction } from './index';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\n\r\nexport abstract class Aggregate extends Association {\r\n\r\n    protected $diamond: Element;\r\n\r\n    public getSVG(): Element {\r\n\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled diamond\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n        };\r\n\r\n        this.$diamond = this.createShape(attr);\r\n\r\n        group.appendChild(this.$diamond);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint: Point = this.$points[0];\r\n        let direction: Direction = Direction.Down;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if (this.$sNode.id === startNode.id || this.$points.length == 2) {\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$diamond.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint: Point, direction: Direction): string {\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                path = `M${startX} ${startY} L${startX + 6} ${startY + 10} L${startX} ${startY + 20} L${startX - 6} ${startY + 10} Z`;\r\n                startPoint.y = startPoint.y+20;\r\n                break;\r\n            case Direction.Right:\r\n                path = `M${startX} ${startY} L${startX - 10} ${startY + 6} L${startX - 20} ${startY} L${startX - 10} ${startY - 6} Z`;\r\n                startPoint.x = startPoint.x-20;\r\n                break;\r\n            case Direction.Left:\r\n                path = `M${startX} ${startY} L${startX + 10} ${startY - 6} L${startX + 20} ${startY} L${startX + 10} ${startY + 6} Z`;\r\n                startPoint.x = startPoint.x+20;\r\n                break;\r\n            case Direction.Down:\r\n                path = `M${startX} ${startY} L${startX - 6} ${startY - 10} L${startX} ${startY - 20} L${startX + 6} ${startY - 10} Z`;\r\n                startPoint.y = startPoint.y-20;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Aggregation extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'white');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { DiagramElement, Line, Point } from '../BaseElements';\r\nimport { Node } from '../nodes';\r\nimport { InfoText } from '../nodes/InfoText';\r\nimport { Util } from '../../util';\r\nimport { EventBus } from '../../EventBus';\r\nimport * as edges from '../edges';\r\nimport { Graph } from '../Graph';\r\n\r\nexport const enum Direction {\r\n    Up, Down, Left, Right\r\n}\r\n\r\nexport class Association extends DiagramElement {\r\n    public source: string;\r\n    public target: string;\r\n    public type: string;\r\n    public $sNode: Node;\r\n    public $tNode: Node;\r\n    public lineStyle: string;\r\n    public $points: Point[] = [];\r\n    public $pathSvg: Element;\r\n    public $pathWideSvg: Element;\r\n    public info: InfoText;\r\n    public sourceInfo: InfoText;\r\n    public targetInfo: InfoText;\r\n    $m: number;\r\n    $n: number;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super();\r\n\r\n        this.withData(data);\r\n    }\r\n\r\n    public withData(data: JSON | string | Object | any): Association {\r\n\r\n        if (!data) {\r\n            return this;\r\n        }\r\n        let srcInfo;\r\n        let trgInfo;\r\n\r\n        if (data.source && typeof data.source !== 'string') {\r\n            srcInfo = data.source;\r\n        }\r\n        else if (data.sourceInfo && typeof data.sourceInfo !== 'string') {\r\n            srcInfo = data.sourceInfo;\r\n        }\r\n\r\n        if (srcInfo) {\r\n            this.sourceInfo = new InfoText(srcInfo);\r\n            this.sourceInfo.$owner = this;\r\n        }\r\n\r\n        if (data.target && typeof data.target !== 'string') {\r\n            trgInfo = data.target;\r\n        }\r\n        else if (data.targetInfo && typeof data.targetInfo !== 'string') {\r\n            trgInfo = data.targetInfo;\r\n        }\r\n\r\n        if (trgInfo) {\r\n            this.targetInfo = new InfoText(trgInfo);\r\n            this.targetInfo.$owner = this;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    public updateSrcCardinality(cardinality: string): void {\r\n        this.sourceInfo = this.updateCardinality(this.$sNode, this.sourceInfo, cardinality);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetCardinality(cardinality: string): void {\r\n        this.targetInfo = this.updateCardinality(this.$tNode, this.targetInfo, cardinality);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateSrcProperty(property: string): void {\r\n        this.sourceInfo = this.updateProperty(this.$sNode, this.sourceInfo, property);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetProperty(property: string): void {\r\n        this.targetInfo = this.updateProperty(this.$tNode, this.targetInfo, property);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public withItem(source: Node, target: Node): Association {\r\n        source.$edges.push(this);\r\n        target.$edges.push(this);\r\n        this.$sNode = source;\r\n        this.$tNode = target;\r\n        this.source = source.id;\r\n        this.target = target.id;\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let group = Util.createShape({ tag: 'g', id: this.id, class: 'SVGEdge' });\r\n\r\n        let path: string = this.getPath();\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'none'\r\n        };\r\n        let pathLine = this.createShape(attr);\r\n\r\n        //attr['style'] = 'stroke-width:20;opacity:0;width:20;height:20';\r\n        let extendedPathLine = Util.createShape(attr);\r\n\r\n        group.appendChild(extendedPathLine);\r\n        group.appendChild(pathLine);\r\n\r\n        if (this.sourceInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.sourceInfo.getSVG());\r\n        }\r\n        if (this.targetInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.targetInfo.getSVG());\r\n        }\r\n\r\n        this.$pathWideSvg = extendedPathLine;\r\n        this.$pathSvg = pathLine;\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.EDITOR, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    public convertEdge(type: string, newId: string, redraw?: boolean): Association {\r\n        if (!edges[type]) {\r\n            return this;\r\n        }\r\n\r\n        let newEdge: Association = new edges[type]();\r\n        newEdge.withItem(this.$sNode, this.$tNode);\r\n        newEdge.id = newId;\r\n        newEdge.type = type;\r\n        newEdge.lineStyle = this.lineStyle;\r\n        newEdge.$owner = this.$owner;\r\n\r\n        if (this.sourceInfo) {\r\n            newEdge.sourceInfo = new InfoText({ property: this.sourceInfo.property, cardinality: this.sourceInfo.cardinality });\r\n            newEdge.sourceInfo.$owner = newEdge;\r\n        }\r\n\r\n        if (this.targetInfo) {\r\n            newEdge.targetInfo = new InfoText({ property: this.targetInfo.property, cardinality: this.targetInfo.cardinality });\r\n            newEdge.targetInfo.$owner = newEdge;\r\n        }\r\n\r\n        this.$points.forEach(point => {\r\n            newEdge.addPoint(point.x, point.y);\r\n        });\r\n\r\n        let graph = <Graph>this.getRoot();\r\n        if (!graph) {\r\n            return this;\r\n        }\r\n\r\n        // update model. insert the edge exact on the same index, like the old edge\r\n        let idx = graph.$graphModel.edges.indexOf(this);\r\n        graph.$graphModel.removeElement(this.id);\r\n        if (idx > -1) {\r\n            graph.$graphModel.edges.splice(idx, 0, newEdge);\r\n        }\r\n        else {\r\n            graph.$graphModel.edges.push(newEdge);\r\n        }\r\n\r\n        if (!redraw) {\r\n            return newEdge;\r\n        }\r\n\r\n        let svgRoot: Element;\r\n        if (graph) {\r\n            svgRoot = graph.root;\r\n        }\r\n        else {\r\n            svgRoot = document.getElementById('root');\r\n        }\r\n        let newEdgeSvg = newEdge.getSVG();\r\n\r\n        // update graph\r\n        graph.removeElement(this);\r\n        svgRoot.appendChild(newEdgeSvg);\r\n\r\n        // redraw the edge from both sides to get the correct display\r\n        // if the type is edge, so the path can be redraw.\r\n        // if not, so the inherited class redraw the path with his own logic\r\n\r\n        let dontDrawPath: boolean = (type !== 'Edge');\r\n        newEdge.redraw(newEdge.$sNode, dontDrawPath);\r\n        newEdge.redraw(newEdge.$tNode, dontDrawPath);\r\n\r\n        EventBus.register(newEdge, newEdgeSvg);\r\n\r\n        this.sourceInfo = undefined;\r\n        this.targetInfo = undefined;\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n        // redraw the first point\r\n        // check which point is the near to startnode\r\n        let endPoint: Point;\r\n        let recalcPoint: Point;\r\n        let endPointIdx: number;\r\n\r\n        if (this.$sNode.id === startNode.id) {\r\n            recalcPoint = this.$points[0];\r\n            endPointIdx = 1;\r\n        } else if (this.$tNode.id === startNode.id) {\r\n            recalcPoint = this.$points[this.$points.length - 1];\r\n            endPointIdx = this.$points.length - 2;\r\n        }\r\n\r\n        endPoint = this.$points[endPointIdx];\r\n\r\n        // calculate and set new position of point to redraw\r\n        this.calcIntersection(startNode, recalcPoint, endPoint);\r\n\r\n        // remove the 2nd point next to startnode, if the node was dragged upper the point\r\n        if (this.$points.length > 2 && this.$tNode.id === startNode.id && endPoint.y > (startNode.getPos().y + (startNode.getSize().y / 2))) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$tNode.id === startNode.id && this.$points.length === 2) {\r\n            this.calcIntersection(this.$sNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (this.$points.length > 2 && this.$sNode.id === startNode.id && (startNode.getPos().y + (startNode.getSize().y / 2) > endPoint.y)) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$sNode.id === startNode.id && this.$points.length === 2) {\r\n\r\n            this.calcIntersection(this.$tNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (!dontDrawPoints) {\r\n            this.redrawPointsAndInfo();\r\n        }\r\n    }\r\n\r\n    public getPath(): string {\r\n\r\n        if (this.$points.length === 0) {\r\n            return '';\r\n        }\r\n\r\n        let path: string = 'M';\r\n        for (let i = 0; i < this.$points.length; i++) {\r\n            let point: Point = this.$points[i];\r\n            if (i > 0) {\r\n                path += 'L';\r\n            }\r\n            path += Math.floor(point.x) + ' ' + Math.floor(point.y) + ' ';\r\n        }\r\n\r\n        return path;\r\n    }\r\n    public calcInfoPosNew(infoTxt: InfoText, node: Node): Point {\r\n\r\n        if (!infoTxt || !node) {\r\n            return null;\r\n        }\r\n\r\n        // 1. step: get direction\r\n        let startPoint: Point;\r\n        let nextToStartPoint: Point;\r\n        if (this.$sNode.id === node.id) {\r\n            startPoint = this.$points[0];\r\n            nextToStartPoint = this.$points[1];\r\n        }\r\n        else if (this.$tNode.id === node.id) {\r\n            startPoint = this.$points[this.$points.length - 1];\r\n            nextToStartPoint = this.$points[this.$points.length - 2];\r\n        }\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(node, startPoint);\r\n\r\n        let x: number;\r\n        let y: number;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                break;\r\n            case Direction.Right:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x - (infoTxt.getSize().x) - 5;\r\n                break;\r\n            case Direction.Left:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x + 5;\r\n                break;\r\n            case Direction.Down:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        // assign calculated position to infotext\r\n        return new Point(x, y);\r\n    }\r\n\r\n    public clearPoints(): any {\r\n        this.$points = [];\r\n        this.$points = [];\r\n    }\r\n\r\n    public addPoint(x: number, y: number): Point[] {\r\n        this.$points.push(new Point(x, y));\r\n\r\n        return this.$points;\r\n    }\r\n\r\n    protected redrawPointsAndInfo(): void {\r\n        // redraw the edge with the new position\r\n        let path: string = this.getPath();\r\n        this.$pathSvg.setAttributeNS(null, 'd', path);\r\n        this.$pathWideSvg.setAttributeNS(null, 'd', path);\r\n\r\n        this.redrawSourceInfo();\r\n        this.redrawTargetInfo();\r\n    }\r\n\r\n    protected redrawSourceInfo() {\r\n        if (this.sourceInfo) {\r\n            let newPosOfSrc = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.redrawFromEdge(newPosOfSrc);\r\n        }\r\n    }\r\n\r\n    protected redrawTargetInfo() {\r\n        if (this.targetInfo) {\r\n            let newPosOfTarget = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.redrawFromEdge(newPosOfTarget);\r\n        }\r\n    }\r\n\r\n    protected getDirectionOfPointToNode(node: Node, pointNearNode: Point): Direction {\r\n        /*\r\n            Example to calculate the direction of nearest point to Node\r\n\r\n            node\r\n         x1_ _ _ _\r\n          |       |\r\n          |       |. pointNearNode\r\n          |       |\r\n          |_ _ _ x2\r\n\r\n          the calculation would return Direction.Left\r\n        */\r\n\r\n        let x1: Point = node.getPos();\r\n        let x2: Point = new Point((x1.x + node.getSize().x), (x1.y + node.getSize().y));\r\n        let direction: Direction = Direction.Down;\r\n\r\n        if (x1.y >= pointNearNode.y) {\r\n            direction = Direction.Down;\r\n        }\r\n        if (x2.y <= pointNearNode.y) {\r\n            direction = Direction.Up;\r\n        }\r\n        if (x1.x >= pointNearNode.x) {\r\n            direction = Direction.Right;\r\n        }\r\n        if (x2.x <= pointNearNode.x) {\r\n            direction = Direction.Left;\r\n        }\r\n\r\n        return direction;\r\n    }\r\n\r\n    private updateCardinality(node: Node, infoText: InfoText, cardinality: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'cardinality': cardinality });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.cardinality = cardinality;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateCardinality(cardinality);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private updateProperty(node: Node, infoText: InfoText, property: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'property': property });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.property = property;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateProperty(property);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private calcIntersection(startNode: Node, recalcPoint: Point, endPoint: Point): Point {\r\n\r\n        // https://www.mathelounge.de/21534/schnittpunkt-einer-linie-mit-den-randern-eines-rechtecks\r\n        let h = startNode.getSize().y;\r\n        let w = startNode.getSize().x;\r\n\r\n        let x1: number = startNode.getPos().x + (w / 2);\r\n        let y1: number = startNode.getPos().y + (h / 2);\r\n\r\n        let x2: number = endPoint.x;\r\n        let y2: number = endPoint.y;\r\n\r\n        let newX: number = recalcPoint.x;\r\n        let newY: number = recalcPoint.y;\r\n\r\n        if (x2 > x1) {\r\n            newX = x1 + (w / 2);\r\n        }\r\n        else if (x2 < x1) {\r\n            newX = x1 - (w / 2);\r\n        }\r\n        else {\r\n            newX = x1;\r\n        }\r\n\r\n        if ((x2 - x1) !== 0) {\r\n            newY = ((y2 - y1) / (x2 - x1) * (newX - x1)) + y1;\r\n        }\r\n        else {\r\n            if (y1 > y2) {\r\n                newY = startNode.getPos().y;\r\n            }\r\n            else {\r\n                newY = startNode.getPos().y + h;\r\n            }\r\n        }\r\n\r\n        // if the statement is not true, so the intersection is at the horizontal line\r\n        if (!((y1 - (h / 2) <= newY) && newY <= y1 + (h / 2))) {\r\n\r\n            if (y2 > y1) {\r\n                newY = y1 + (h / 2);\r\n            }\r\n            else {\r\n                newY = y1 - (h / 2);\r\n            }\r\n\r\n            if ((x2 - x1) !== 0) {\r\n                let tmp = ((y2 - y1) / (x2 - x1));\r\n                newX = (newY + (tmp * x1) - y1) / tmp;\r\n            }\r\n            else {\r\n                newX = x1;\r\n            }\r\n        }\r\n\r\n        recalcPoint.x = Math.ceil(newX);\r\n        recalcPoint.y = Math.ceil(newY);\r\n\r\n        return null;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Composition extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'black');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { Association } from './Association';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\nimport { Direction } from '../index';\r\n\r\nexport class Generalisation extends Association {\r\n\r\n    public $TARGET_ELEMENT_HEIGHT : number = 12;\r\n    protected $targetElement: Element;\r\n\r\n    public getSVG(): Element {\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction : Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled arrow\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'white'\r\n          };\r\n\r\n        this.$targetElement = this.createShape(attr);\r\n\r\n        group.appendChild(this.$targetElement);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean) : void {\r\n\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint : Point = this.$points[0];\r\n        let direction : Direction = Direction.Up;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if(this.$sNode.id === startNode.id || this.$points.length == 2){\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$targetElement.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint : Point, direction : Direction) : string{\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch(direction){\r\n            case Direction.Up:\r\n            path = `M${startX} ${startY+3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y+12;\r\n            break;\r\n            case Direction.Right:\r\n            path = `M${startX-3} ${startY} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x-12;\r\n            break;\r\n            case Direction.Left:\r\n            path = `M${startX+3} ${startY} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x+12;\r\n            break;\r\n            case Direction.Down:\r\n            path = `M${startX} ${startY-3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y-12;\r\n            break;\r\n            default :\r\n            break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n\r\n}\r\n","import { Generalisation } from './Generalisation';\r\n\r\nexport class Implements extends Generalisation {\r\n\r\n    public getSVG(): Element {\r\n        let group = super.getSVG();\r\n\r\n        this.$pathSvg.setAttributeNS(null, 'stroke-dasharray', '3, 3');\r\n\r\n        return group;\r\n    }\r\n}\r\n","export * from './Association';\r\nexport * from './Aggregate';\r\nexport * from './Aggregation';\r\nexport * from './Composition';\r\nexport * from './Generalisation';\r\nexport * from './Implements';","export * from './edges';\r\nexport * from './nodes';\r\nexport * from './BaseElements';\r\nexport * from './Graph';\r\nexport * from './Model';\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Attribute extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 28.06.2017.\r\n */\r\nimport {Control} from \"../../Control\";\r\n\r\nexport class AutoComplete extends Control {\r\n    private $inputField:HTMLInputElement;\r\n    private $dataList:HTMLDataListElement;\r\n    private $selected:HTMLSelectElement;\r\n    private $items:HTMLDivElement;\r\n    private isMultiple:boolean;\r\n\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        let div:HTMLDivElement = document.createElement('div');\r\n        this.$view = div;\r\n        this.$inputField = document.createElement('input');\r\n        this.$dataList = document.createElement(\"datalist\");\r\n        this.$dataList.id = \"data_\"+this.id;\r\n        this.$inputField.setAttribute(\"list\", \"data_\"+this.id);\r\n        if(data[\"value\"]) {\r\n            let values = data[\"value\"];\r\n            this.isMultiple = data[\"multiple\"] != null;\r\n            let option:HTMLOptionElement;\r\n            if(this.isMultiple) {\r\n                this.$selected = document.createElement(\"select\");\r\n                this.$selected.className = \"hide\";\r\n                this.$selected.multiple = true;\r\n\r\n                this.$selected.id = this.id;\r\n                this.$items = document.createElement(\"div\");\r\n                this.$items.className = \"selectedList\";\r\n                div.appendChild(this.$items);\r\n                this.$inputField.className = \"selectedInput\";\r\n                div.appendChild(this.$selected);\r\n                this.$view[\"style\"].setProperty(\"float\", \"left\");\r\n                let that = this;\r\n                this.$inputField.oninput = function(){that.onChange();}\r\n            } else {\r\n                this.$inputField.id = this.id;\r\n            }\r\n            for (let attr in values) {\r\n                if (!values.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                option = document.createElement(\"option\");\r\n                option.value = values[attr];\r\n                this.$dataList.appendChild(option);\r\n                if(this.isMultiple) {\r\n                    option = document.createElement(\"option\");\r\n                    option.value = values[attr];\r\n                    option.innerHTML = values[attr];\r\n                    this.$selected.appendChild(option);\r\n                }\r\n        }\r\n\r\n            div.appendChild(this.$inputField);\r\n            div.appendChild(this.$dataList);\r\n        }\r\n\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n            if(this.isMultiple) {\r\n                div.appendChild(this.$selected);\r\n            }\r\n        }\r\n\r\n        parent.appendChild(this);\r\n    }\r\n\r\n    public onChange() : void {\r\n        let textValue:string = this.$inputField.value;\r\n        if(textValue.length<1) {\r\n            return;\r\n        }\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == textValue) {\r\n                if(item.selected == false) {\r\n                    item.selected = true;\r\n                    item.defaultSelected = true;\r\n                    let test = document.createElement(\"li\");\r\n                    let that = this;\r\n                    test.onclick = function() {that.onDelete(item.value, test);};\r\n                    test.className = \"selectedItem\";\r\n                    test.innerHTML = item.value;\r\n                    this.$items.appendChild(test);\r\n                    this.$inputField.value = \"\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n    public onDelete(value:string, selectedItem:HTMLLIElement) : void {\r\n        this.$items.removeChild(selectedItem);\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == value ) {\r\n                if(item.selected) {\r\n                    item.selected = false;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","import {Control} from '../../Control';\r\n\r\nexport class BR extends Control {\r\n    public load(json: JSON): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('br');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            this.$view.setAttribute(attr, data[attr]);\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\nexport class Button extends Control {\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        this.$view = document.createElement('button');\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\nimport { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\nimport { Size } from '../index';\r\nimport ClazzProperty from './ClazzProperty';\r\nimport {SymbolLibary} from './Symbol';\r\nimport {StereoType} from './StereoType';\r\nimport {GraphListener} from '../../handlers/GraphListener';\r\n\r\nexport class Class extends Node {\r\n    public attributes: Attribute[] = [];\r\n    public methods: Method[] = [];\r\n    public modifier: string;\r\n    public stereoType: string;\r\n\r\n    protected $attrHeight = 25;\r\n    protected $attrFontSize = 12;\r\n    protected $labelView: Element;\r\n\r\n    constructor(json: JSON | string | Object | any) {\r\n        super(json);\r\n        return this;\r\n    }\r\n\r\n    public load(json?: any) {\r\n        if (!json) {\r\n            json = {};\r\n        }\r\n        let y = this.$labelHeight;\r\n        let labelObj = json.name || json.id || ('New ' + this.property);\r\n\r\n        let width: number = 150;\r\n        width = Math.max(width, Util.sizeOf(labelObj).width + 60);\r\n\r\n        if (json['attributes']) {\r\n            for (let attr of json['attributes']) {\r\n\r\n                let attrObj = new Attribute(attr);\r\n                attrObj.$owner = this;\r\n                this.attributes.push(attrObj);\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(attrObj.toString()).width);\r\n                let listener = new GraphListener(attrObj);\r\n                attrObj.$data.addListener(listener);\r\n            }\r\n        }\r\n        if (json['stereotype']) {\r\n            this.stereoType = json['stereotype'];\r\n        }\r\n        if (json['methods']) {\r\n            for (let method of json['methods']) {\r\n\r\n                let methodObj = new Method(method);\r\n                methodObj.$owner = this;\r\n                this.methods.push(methodObj);\r\n\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(methodObj.toString()).width);\r\n            }\r\n            y += this.$attrHeight;\r\n        }\r\n        this.withSize(width, y);\r\n    }\r\n\r\n    public getAttributes(): Attribute[] {\r\n        return this.attributes;\r\n    }\r\n\r\n    public getMethods(): Method[] {\r\n        return this.methods;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        let icon = SymbolLibary.draw({type: 'Class', property: 'HTML', width: '50', height: '50', transform: 'translate(-26,-21)'});\r\n        return icon;\r\n        // let group = this.createShape(\r\n//    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n//    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos: Point = this.getPos();\r\n        const size: Point = this.getSize();\r\n\r\n        let group = this.createShape({ tag: 'g', id: this.id, class: 'SVGClazz', transform: 'translate(0 0)' });\r\n\r\n        if (this.stereoType) {\r\n            let type = new StereoType(this.stereoType, pos.x, pos.y);\r\n            group.appendChild(type.getSVG());\r\n        }\r\n\r\n        // Full Shape\r\n        let options = null;\r\n        let style;\r\n        let clazzName;\r\n        if (this.$owner['options']) {\r\n            let options = this.$owner['options'];\r\n            if (options) {\r\n                style = options.style;\r\n            }\r\n        }\r\n        // = = = Background = = =\r\n        if (style === 'modern') {\r\n            clazzName = 'ClazzHeader';\r\n        }\r\n        clazzName = 'ClazzHeader';\r\n        const nodeShape = this.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            height: size.y,\r\n            width: size.x,\r\n            rx: 5,\r\n            ry: 5,\r\n            fill: 'none',\r\n            stroke: 'black',\r\n            'stroke-width': 1\r\n        });\r\n        if (clazzName) {\r\n            nodeShape.setAttribute('className', clazzName);\r\n            let styleHeader = Util.getStyle('ClazzHeader');\r\n            // headerHeight = styleHeader.getNumber('height');\r\n        }\r\n\r\n        // = = = LABEL = = =\r\n        let label = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y + this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': this.$labelFontSize,\r\n            fill: 'black'\r\n        });\r\n        label.textContent = this.id;\r\n        this.$labelView = label;\r\n\r\n        group.appendChild(nodeShape);\r\n        group.appendChild(label);\r\n\r\n        // = = = ATTRIBUTES = = =\r\n        if (this.attributes.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorLabelAttr = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight,\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight,\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorLabelAttr);\r\n\r\n            let groupOfAttributes = this.createShape({ tag: 'g', id: (this.id + 'Attributes') });\r\n            groupOfAttributes.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzAttribute');\r\n            group.appendChild(groupOfAttributes);\r\n\r\n            let y = pos.y + this.$labelHeight + this.$attrHeight / 2;\r\n            for (let attr of this.attributes) {\r\n\r\n                let attrSvg = attr.getSVG();\r\n                attr.$owner = this;\r\n\r\n                attrSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                attrSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfAttributes.appendChild(attrSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        // = = = METHODS = = =\r\n        let height = this.attributes.length * this.$attrHeight;\r\n        let y = pos.y + this.$labelHeight + height + this.$attrHeight / 2;\r\n        if (this.methods.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorAttrMethods = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorAttrMethods);\r\n\r\n            let groupOfMethods = this.createShape({ tag: 'g', id: (this.id + 'Methods') });\r\n            groupOfMethods.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzMethod');\r\n            group.appendChild(groupOfMethods);\r\n\r\n            y += this.$attrHeight / 2;\r\n            for (let method of this.methods) {\r\n\r\n                let methodSvg = method.getSVG();\r\n                method.$owner = this;\r\n\r\n                methodSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                methodSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfMethods.appendChild(methodSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        this.$view = group;\r\n        return group;\r\n    }\r\n\r\n    public copy(): Class {\r\n        let copy: Class;\r\n        copy = <Class>super.copy();\r\n\r\n        // copy label\r\n        copy.id = this.id + 'Copy';\r\n\r\n        // copy attributes\r\n        this.attributes.forEach(attr => {\r\n            copy.attributes.push(new Attribute(attr.toString()));\r\n        });\r\n        // copy methods\r\n        this.methods.forEach(method => {\r\n            copy.methods.push(new Method(method.toString()));\r\n        });\r\n        copy.reCalcSize();\r\n\r\n        return copy;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTCLICK,\r\n                EventBus.ELEMENTDRAG, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES, EventBus.RELOADPROPERTIES];\r\n    }\r\n\r\n    public addProperty(value: string, type: string): any {\r\n        if (!this[type] || !value || value.length === 0) {\r\n            return;\r\n        }\r\n\r\n        let extractedValue;\r\n        if (type === 'attributes') {\r\n            extractedValue = new Attribute(value);\r\n        }\r\n        else if (type === 'methods') {\r\n            extractedValue = new Method(value);\r\n        }\r\n\r\n        for (let valueOfType of this[type]) {\r\n            if (valueOfType.toString() === extractedValue.toString()) {\r\n                alert(extractedValue.toString() + ' already exists.');\r\n                extractedValue = undefined;\r\n                return;\r\n            }\r\n        }\r\n\r\n        this[type].push(extractedValue);\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        return extractedValue;\r\n    }\r\n\r\n    public addAttribute(value: string): Attribute {\r\n        return this.addProperty(value, 'attributes');\r\n    }\r\n\r\n    public addAttributeObj(attr: Attribute): Attribute[] {\r\n        this.attributes.push(attr);\r\n        return this.getAttributes();\r\n    }\r\n\r\n    public addMethodObj(method: Method): Method[] {\r\n        this.methods.push(method);\r\n        return this.getMethods();\r\n    }\r\n\r\n    public addMethod(value: string): Method {\r\n        return this.addProperty(value, 'methods');\r\n    }\r\n\r\n    public removeAttribute(attr: Attribute): void {\r\n        let idx = this.attributes.indexOf(attr);\r\n        this.attributes.splice(idx, 1);\r\n    }\r\n\r\n    public removeMethod(method: Method): void {\r\n        let idx = this.methods.indexOf(method);\r\n        this.methods.splice(idx, 1);\r\n    }\r\n\r\n    public removeProperty(property: ClazzProperty): void {\r\n\r\n        if (property instanceof Attribute) {\r\n            this.removeAttribute(<Attribute>property);\r\n        }\r\n\r\n        if (property instanceof Method) {\r\n            this.removeMethod(<Method>property);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n        let hasSizeChanged: [boolean, Size] = this.hasSizeChanged();\r\n\r\n        if (drawOnlyIfSizeChanged) {\r\n            if (!hasSizeChanged[0]) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n\r\n        // redraw only this clazz\r\n        this.$owner.$view.removeChild(this.$view);\r\n        let newSvg = this.getSVG();\r\n        this.$owner.$view.appendChild(newSvg);\r\n        this.$view = newSvg;\r\n        EventBus.register(this, newSvg);\r\n\r\n        this.redrawEdges();\r\n    }\r\n\r\n    public hasSizeChanged(): [boolean, Size] {\r\n        let oldSize = { width: this.getSize().x, height: this.getSize().y };\r\n        let newSize = this.reCalcSize();\r\n\r\n        // size doenst changed, so nothing to redraw\r\n        if (oldSize.width === newSize.width && oldSize.height === newSize.height) {\r\n            return [false, newSize];\r\n        }\r\n\r\n        return [true, newSize];\r\n    }\r\n\r\n    public updateLabel(newLabel: string): void {\r\n        if (this.$labelView) {\r\n            this.$labelView.textContent = newLabel;\r\n        }\r\n\r\n        // update label in all edges\r\n        this.$edges.forEach(edge => {\r\n            if (this.id === edge.$sNode.id) {\r\n                edge.source = newLabel;\r\n            }\r\n            else if (this.id === edge.$tNode.id) {\r\n                edge.target = newLabel;\r\n            }\r\n        });\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        this.reDraw(true);\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.modifier = modifier;\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reCalcSize(): Size {\r\n        // label\r\n        let newWidth = 150;\r\n        newWidth = Math.max(newWidth, Util.sizeOf(this.id).width + 30);\r\n\r\n        // attributes\r\n        this.attributes.forEach(attrEl => {\r\n\r\n            let widthOfAttr;\r\n            if (attrEl.$view) {\r\n                widthOfAttr = attrEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfAttr = Util.sizeOf(attrEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfAttr + 15);\r\n        });\r\n\r\n        // methods\r\n        this.methods.forEach(methodEl => {\r\n            let widthOfMethod;\r\n            if (methodEl.$view) {\r\n                widthOfMethod = methodEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfMethod = Util.sizeOf(methodEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfMethod + 15);\r\n        });\r\n\r\n        // TODO: height has to be calculated by font-size\r\n        this.getSize().x = newWidth;\r\n        this.getSize().y = this.$labelHeight + ((this.attributes.length + this.methods.length) * this.$attrHeight)\r\n            + this.$attrHeight;\r\n\r\n        let newSize = { width: newWidth, height: this.getSize().y };\r\n\r\n        return newSize;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    private getModernStyle(): Element {\r\n        let width, height, id, size, z, item, rect, g, board, styleHeader, headerHeight, x, y;\r\n        board = this.getRoot()['board'];\r\n        styleHeader = Util.getStyle('ClazzHeader');\r\n        headerHeight = styleHeader.getNumber('height');\r\n        width = 0;\r\n        height = 10 + headerHeight;\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].getType().toLowerCase() === 'objectdiagram') {\r\n            id = this.id.charAt(0).toLowerCase() + this.id.slice(1);\r\n            item = 'Object';\r\n        } else {\r\n            id = this.id;\r\n            item = 'Class';\r\n            if (this['counter']) {\r\n                id += ' (' + this['counter'] + ')';\r\n            }\r\n        }\r\n        g = Util.create({tag: 'g', model: this});\r\n        size = Util.sizeOf(id, this);\r\n        width = Math.max(width, size.width);\r\n        if (this.attributes && this.attributes.length > 0) {\r\n            height = height + this.attributes.length * 25;\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.attributes[z], this).width);\r\n            }\r\n        } else {\r\n            height += 20;\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            height = height + this.methods.length * 25;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.methods[z], this).width);\r\n            }\r\n        }\r\n        width += 20;\r\n\r\n        let pos = this.getPos();\r\n        y = pos.y;\r\n        x = pos.x;\r\n\r\n        rect = {\r\n            tag: 'rect',\r\n            'width': width,\r\n            'height': height,\r\n            'x': x,\r\n            'y': y,\r\n            'class': item + ' draggable',\r\n            'fill': 'none'\r\n        };\r\n        g.appendChild(Util.create(rect));\r\n        g.appendChild(Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            'x': x,\r\n            'y': y,\r\n            height: headerHeight,\r\n            'width': width,\r\n            'class': 'ClazzHeader'\r\n        }));\r\n\r\n        item = Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'class': 'InfoText',\r\n            'text-anchor': 'right',\r\n            'x': x + width / 2 - size.width / 2,\r\n            'y': y + (headerHeight / 2) + (size.height / 2),\r\n            'width': size.width\r\n        });\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].type.toLowerCase() === 'objectdiagram') {\r\n            item.setAttribute('text-decoration', 'underline');\r\n        }\r\n        item.appendChild(document.createTextNode(id));\r\n\r\n        g.appendChild(item);\r\n        g.appendChild(Util.create({\r\n            tag: 'line',\r\n            x1: x,\r\n            y1: y + headerHeight,\r\n            x2: x + width,\r\n            y2: y + headerHeight,\r\n            stroke: '#000'\r\n        }));\r\n        y += headerHeight + 20;\r\n\r\n        if (this.attributes) {\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': (x + 10),\r\n                    'y': y,\r\n                    value: this.attributes[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n            if (this.attributes.length > 0) {\r\n                y -= 10;\r\n            }\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            g.appendChild(Util.create({tag: 'line', x1: x, y1: y, x2: x + width, y2: y, stroke: '#000'}));\r\n            y += 20;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': x + 10,\r\n                    'y': y,\r\n                    value: this.methods[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n        }\r\n        return g;\r\n    }\r\n}\r\n","import {Util} from '../../util';\r\nimport {DiagramElement} from '../BaseElements';\r\nimport Data from '../../Data';\r\n\r\nexport default class ClazzProperty extends DiagramElement {\r\n\r\n    // Public (+)\r\n    // Private (-)\r\n    // Protected (#)\r\n    // Package (~)\r\n\r\n    public $data = new Data();\r\n//    public modifier: string = '+';\r\n//    public name: string;\r\n//    public type: string;\r\n//    public value: string;\r\n\r\n    constructor(data: any | JSON) {\r\n        super();\r\n        this.$data.setValue('modifier', '+');\r\n        this.$data.setValue('name', null);\r\n        this.$data.setValue('type', null);\r\n        this.$data.setValue('value', null);\r\n        this.extractData(data);\r\n    }\r\n\r\n    public update(data: any | JSON): void {\r\n        this.extractData(data);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.$data.setValue('modifier', modifier);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateType(type: string): void {\r\n        this.$data.setValue('type', type);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateValue(value: string): void {\r\n        this.$data.setValue('value', value);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateName(name: string): void {\r\n        this.$data.setValue('name', name);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public getName(): string {\r\n        return this.$data.getValue('name');\r\n    }\r\n\r\n    public getModifier(): string {\r\n        return this.$data.getValue('modifier');\r\n    }\r\n\r\n    public getType(): string {\r\n        return this.$data.getValue('type');\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let attrText = {\r\n            tag: 'text',\r\n            'text-anchor': 'start',\r\n            'alignment-baseline': 'middle',\r\n        };\r\n\r\n        let attrSvg = Util.createShape(attrText);\r\n        attrSvg.textContent = this.toString();\r\n\r\n        this.$view = attrSvg;\r\n\r\n        return attrSvg;\r\n    }\r\n\r\n    public toString(): string {\r\n        let value = this.$data.getValue('value');\r\n        let result = this.$data.getValue('modifier') + ' ';\r\n        result += this.$data.getValue('name') + ' : ';\r\n        result += this.$data.getValue('type');\r\n        if (value && value.length > 0) {\r\n            result += ' = ' + this.$data.getValue('value');\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.$data.setValue('type', data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.$data.setValue('name', data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.$data.setValue('modifier', data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n\r\n            // e.g. name : string or name:string\r\n            let dataSplitted = data.split(':');\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                let name;\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.$data.setValue('modifier', firstChar);\r\n                    name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                }\r\n                else {\r\n                    name = modifierAndNameSplitted;\r\n                }\r\n                // delete whitespaces in name\r\n                name = name.replace(/ /g, '_');\r\n\r\n                this.$data.setValue('name', name);\r\n                let type = dataSplitted[1].trim() || 'String';\r\n\r\n                // if the type was entered with a small begin letter\r\n                if (type.toLowerCase() === 'string') {\r\n                    type = 'String';\r\n                }\r\n                // delete whitespaces in type\r\n                type = type.replace(/ /g, '_');\r\n                this.$data.setValue('type',  type);\r\n            } else {\r\n                dataSplitted = data.split('=');\r\n                if (dataSplitted && dataSplitted.length === 2) {\r\n                    // modifer (and or) name\r\n                    let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                    // first char is +, - or #\r\n                    let firstChar = modifierAndNameSplitted[0];\r\n                    let name;\r\n                    if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                        this.$data.setValue('modifier', firstChar);\r\n                        name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                    }\r\n                    else {\r\n                        name = modifierAndNameSplitted;\r\n                    }\r\n                    // delete whitespaces in name\r\n                    name = name.replace(/ /g, '_');\r\n\r\n                    this.$data.setValue('name', name);\r\n                    let value = dataSplitted[1].trim() || '\"\"';\r\n                    this.$data.setValue('value', value);\r\n                    this.$data.setValue('type', typeof value);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected updateTextOfView() {\r\n        if (this.$view) {\r\n            this.$view.textContent = this.toString();\r\n        }\r\n        if (this.$owner) {\r\n            Util.saveToLocalStorage(this.$owner.$owner);\r\n        }\r\n    }\r\n}\r\n","import {Node} from \"./Node\";\r\n/**\r\n * Created by Stefan on 29.03.2017.\r\n */\r\n\r\nexport class Dice extends Node {\r\n    private value: number;\r\n    private max: number = 6;\r\n    private $animation: SVGElement;\r\n    private $zoom: number = 0.6;\r\n    private $border: number = 0.2;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super(data);\r\n        this.withSize(100, 100);\r\n    }\r\n\r\n    public setNumber(number: number) {\r\n        this.value = number;\r\n        this.refresh();\r\n    }\r\n\r\n    public refresh() {\r\n        if (this.$view) {\r\n            this.reset();\r\n            let group = this.createPointValue();\r\n            if (group) {\r\n                this.$view.appendChild(group);\r\n            }\r\n        }\r\n    }\r\n\r\n    public reset() {\r\n        if (this.$view) {\r\n            while (this.$view.children.length > 1) {\r\n                if(this.$view.children.item(this.$view.children.length - 1).tagName!== \"animateTransform\") {\r\n                    console.log(this.$view.children.item(this.$view.children.length - 1));\r\n                    this.$view.removeChild(this.$view.children.item(this.$view.children.length - 1));\r\n                }else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let dice: SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x + size.x * this.$border,\r\n            y: pos.y + size.y * this.$border,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y * this.$zoom,\r\n            width: size.x * this.$zoom,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        dice.appendChild(this.createShape(attr));\r\n\r\n        let group = this.createPointValue();\r\n        if (group) {\r\n            dice.appendChild(group);\r\n        }\r\n\r\n        this.$view = dice;\r\n        return dice;\r\n    }\r\n\r\n    public animationTimeout(newValues: number[]) {\r\n        if(newValues.length>0) {\r\n            let newValue = newValues.shift();\r\n            this.setNumber(newValue);\r\n            let that=this;\r\n            setTimeout(function() {that.animationTimeout(newValues)}, 100);\r\n        }\r\n    }\r\n\r\n    public roll() {\r\n        this.startAnimation();\r\n        let values:number[]=[];\r\n        let i:number;\r\n        for(i=1;i<this.max;i++) {\r\n            values.push(i);\r\n        }\r\n        for(i=this.max;i>0;i--) {\r\n            values.push(i);\r\n        }\r\n        let that=this;\r\n        values.push( Math.floor(Math.random() * this.max)+1 );\r\n        setTimeout(function() {that.animationTimeout(values)}, 100);\r\n    }\r\n    public startAnimation() {\r\n        if(this.$animation) {\r\n            return;\r\n        }\r\n        let center = this.getPos().x+this.getSize().x /2;\r\n        const attr = {\r\n            tag: 'animateTransform',\r\n            attributeType: \"xml\",\r\n            attributeName:\"transform\",\r\n            type:\"rotate\",\r\n            dur: \"1s\",\r\n            repeatCount:\"1\",\r\n            from:\"0 \"+center+\" \"+center,\r\n            to:\"360 \"+center+\" \"+center\r\n        };\r\n        this.$animation = <SVGElement>this.createShape(attr);\r\n        this.$view.appendChild(this.$animation);\r\n    }\r\n\r\n    public stopAnimation() {\r\n        if(this.$animation) {\r\n            this.$view.removeChild(this.$animation);\r\n            this.$animation = null;\r\n        }\r\n    }\r\n\r\n    public createPointValue() :SVGElement {\r\n        if (this.value == 1) {\r\n           return this.getCircle(2, 2);\r\n        } else if (this.value == 2) {\r\n            return this.getCircle(1, 1, 3, 3);\r\n        } else if (this.value == 3) {\r\n            return this.getCircle(1, 1, 2, 2, 3, 3);\r\n        } else if (this.value == 4) {\r\n            return this.getCircle(1, 1, 1, 3, 3, 1, 3, 3);\r\n        } else if (this.value == 5) {\r\n            return this.getCircle(1, 1, 1, 3, 2, 2, 3, 1, 3, 3);\r\n        } else if (this.value == 6) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 7) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 2, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 8) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 9) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private getCircle(...values:number[]) : SVGElement {\r\n        if (values.length % 2 > 0) {\r\n            return null;\r\n        }\r\n        let size = this.getSize();\r\n        let pos = this.getPos();\r\n        //FIXME let group:SVGElement = <SVGElement>this.createShape({tag: 'g', transform: 'translate(0 0)', height: size.y, width: size.x});\r\n        let group:SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n\r\n\r\n        for (let i: number = 0; i < values.length; i += 2) {\r\n            group.appendChild(this.createCircle(values[i], values[i + 1]));\r\n        }\r\n        return group;\r\n    }\r\n    private createCircle(x:number, y:number) : SVGElement {\r\n        let size = this.getSize();\r\n        let radius = size.x / 10*this.$zoom;\r\n        let border = size.y*this.$border;\r\n        let zoom = size.y*this.$zoom;\r\n        const attr = {\r\n            tag: 'circle',\r\n            r : radius,\r\n            cx: (size.x*this.$zoom * x) / 4 + border,\r\n            cy: (size.y*this.$zoom * y) / 4 + border,\r\n            stroke:\"black\",\r\n            \"stroke-width\":\"3\",\r\n            fill:\"red\",\r\n            style: 'fill:black;stroke:black;stroke-width:2'\r\n        };\r\n        return <SVGElement>this.createShape(attr);\r\n    }\r\n}","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\n\r\nexport class Div extends Control {\r\n    private className: string;\r\n\r\n    public load(data:JSON|any): any {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = <string>data;\r\n        } else {\r\n            id = data.id;\r\n            this.className = data.class;\r\n            this.property = data.property;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let div: HTMLElement = document.getElementById(id);\r\n\r\n        if (!this.property) {\r\n            // if(inputField){\r\n            // TODO disuss how to decide, which property we should listen on...\r\n            // this.property = id;\r\n            this.property = div.getAttribute('Property');\r\n            // }\r\n        }\r\n\r\n        if (div instanceof HTMLDivElement) {\r\n            this.$view = div;\r\n        } else {\r\n            if (!div) {\r\n                this.$view = document.createElement('div');\r\n                this.$view.setAttribute('id', this.id);\r\n                this.$view.setAttribute('property', this.property);\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists+\r\n        if (data.hasOwnProperty('property')) {\r\n            this.setProperty(data['property']);\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        this.$model = entity;\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.className || entity.hasProperty(this.className)) {\r\n                if (entity.id === this.property.split('.')[0]) {\r\n                    entity.addListener(this, this.className);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        this.$view.innerHTML = <string>newValue;\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Form extends Control {\r\n    // private applyingChange: boolean = false;\r\n    private children: Object = {};\r\n    // private property: string = \"\";\r\n\r\n    /**\r\n     * Data should look like the following json:\r\n     *\r\n     * <pre>{\r\n     *      id: \"t1\",\r\n     *      control: \"form\",\r\n     *      elements: [\r\n     *          {id: \"inputField1\", property: \"talk\"},\r\n     *          {id: \"inputField2\", property: \"room\"}\r\n     *      ]\r\n     * }</pre>\r\n     * @param data\r\n     */\r\n    public load(data: any) {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let form: HTMLElement = document.getElementById(id);\r\n\r\n        if (form instanceof HTMLFormElement) {\r\n            this.$view = form;\r\n            if (this.$view.hasAttribute('property')) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            if (!form) {\r\n                this.$view = document.createElement('form');\r\n                this.$view.setAttribute('id', this.id);\r\n\r\n                if (data.hasOwnProperty('property')) {\r\n                    this.property = data['property'];\r\n                }\r\n\r\n                // add all the attributes to the form element\r\n                for (let attr in data) {\r\n                    if (data.hasOwnProperty(attr) === false) {\r\n                        continue;\r\n                    }\r\n                    if (attr === 'elements') {\r\n                        continue;\r\n                    }\r\n                    this.$view.setAttribute(attr, data[attr]);\r\n                }\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists\r\n        let objId = this.property;\r\n        let hasItem = this.$owner.hasItem(objId);\r\n        if (hasItem) {\r\n            let item = this.$owner.getItem(objId);\r\n            item.addListener(this);\r\n            this.$model = item;\r\n        }\r\n\r\n        // now create all the sub input controls\r\n        for (let field of data.elements) {\r\n            // this.createField(field);\r\n            if (field.hasOwnProperty('property')) {\r\n                let property = field['property'];\r\n                property = this.property + '.' + property;\r\n                field['property'] = property;\r\n            }\r\n            if (!field.hasOwnProperty('class')) {\r\n                field['class'] = 'input';\r\n            }\r\n\r\n            // let the Bridge load the subControl\r\n            let control: Control = this.$owner.load(field, this);\r\n\r\n            // add subControl to children\r\n            this.children[control.getId()] = control;\r\n        }\r\n\r\n    }\r\n\r\n    public setProperty(id: string): void {\r\n        this.property = id;\r\n        let keys: string[] = Object.keys(this.children);\r\n        for (let k = 0; k < keys.length; k++) {\r\n            let key = keys[k];\r\n            let childControl = this.children[key];\r\n            // only set Property, if there is a Property defined before\r\n            if (childControl.property) {\r\n                childControl.setProperty(this.property + '.' + childControl.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object,  oldValue?: Object): boolean {\r\n        if (this.$owner != null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    /**\r\n     * Here we create the form elements and put all the attributes to them in order for the Control only having to load\r\n     * the data were appending here. Alternative would be loading with the bridge and afterwards setting\r\n     * the owner to the form instead of the body..\r\n     * @param field\r\n     */\r\n    /*private createField(field: Object) {\r\n     let control = 'input';\r\n     if (field.hasOwnProperty('class')) {\r\n     control = field['class'];\r\n     }\r\n     let input = document.createElement(control);\r\n     input.setAttribute('class', control);\r\n     let id: string;\r\n     if (!field.hasOwnProperty('id')) {\r\n     // TODO: not the best solution for generating unique id's for forms...\r\n     id = this.$owner.getId();\r\n     field['id'] = id;\r\n     }\r\n     if (field.hasOwnProperty('property')) {\r\n     let property = field['property'];\r\n     property = this.id + '.' + property;\r\n     input.setAttribute('property', property);\r\n     }\r\n     for (let attr in field) {\r\n     if (attr === 'property' || attr === 'class' || !field.hasOwnProperty(attr)) {\r\n     continue;\r\n     }\r\n     input.setAttribute(attr, field[attr]);\r\n     }\r\n\r\n     this.$viewElement.appendChild(input);\r\n\r\n     let newcontrol: Control = this.$owner.load(field['id']);\r\n     this.children[newcontrol.getId()] = newcontrol;\r\n     }*/\r\n}\r\n","/**\r\n * Created by Stefan on 01.03.2017.\r\n */\r\nimport {Control} from '../../Control';\r\n\r\nexport class HTML extends Control {\r\n    constructor(data: JSON|Object|any) {\r\n        super();\r\n\r\n        let id: string;\r\n        let tag: string;\r\n\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            data = {};\r\n        } else if (data) {\r\n            id = data.id;\r\n        }\r\n        if (id) {\r\n            this.id = id;\r\n            this.$view = document.getElementById(id);\r\n        }\r\n        if (!this.$view) {\r\n            if (data) {\r\n                tag = data['tag'] || 'div';\r\n            } else {\r\n                tag = 'div';\r\n            }\r\n            this.$view = document.createElement(tag);\r\n            let parent = document.getElementsByTagName('body')[0];\r\n            parent.appendChild(this.$view);\r\n        }\r\n        if (!parent) {\r\n            return;\r\n        }\r\n        this.writeAttribute(data, this.$view);\r\n    }\r\n\r\n    private writeAttribute(properties: Object, entity?: any) {\r\n        let lowKey;\r\n        if (!entity) {\r\n            lowKey = properties['tag'] || 'div';\r\n            entity = document.createElement(lowKey);\r\n        }\r\n        for (let key in properties) {\r\n            if (!properties.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            lowKey = key.toLowerCase();\r\n            if (properties[key] === null) {\r\n                entity.setAttribute(key, '');\r\n                continue;\r\n            }\r\n\r\n            if (lowKey === 'tag' || lowKey.charAt(0) === '$' || lowKey === '$graphModel' || lowKey === 'class') {\r\n                continue;\r\n            }\r\n            if (lowKey === 'children') {\r\n                if (Array.isArray(properties[key])) {\r\n                    for (let item in properties[key]) {\r\n                        if (properties[key].hasOwnProperty(item) === false) {\r\n                            continue;\r\n                        }\r\n                        let child = this.writeAttribute(item);\r\n                        if (child) {\r\n                            entity.appendChild(child);\r\n                        }\r\n                    }\r\n                } else {\r\n                    let child = this.writeAttribute(properties[key]);\r\n                    if (child) {\r\n                        entity.appendChild(child);\r\n                    }\r\n                }\r\n                continue;\r\n            }\r\n            entity[key] = properties[key];\r\n        }\r\n        return entity;\r\n    }\r\n}\r\n","import { Point } from '../BaseElements';\r\nimport { Util } from '../../util';\r\nimport { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\n\r\nexport class InfoText extends Node {\r\n\r\n    public cardinality: string = '';\r\n    private $heightOfOneTextItem: number;\r\n    private $cardinalitySvg: Element;\r\n    private $propertySvg: Element;\r\n    private $rectBackground: Element;\r\n\r\n    constructor(info: any) {\r\n        super(info);\r\n        if (typeof (info) === 'string') {\r\n            this.id = info;\r\n        } else {\r\n            if (info.property) {\r\n                this.property = info.property;\r\n            }\r\n            if (info.cardinality) {\r\n                this.cardinality = info.cardinality;\r\n            }\r\n        }\r\n        this.$isDraggable = true;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n    }\r\n\r\n    public updateCardinality(cardinality: string): void {\r\n        this.cardinality = cardinality;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (this.$rectBackground) {\r\n            this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n            this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n        }\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((cardinality.length === 0 && this.property.length > 0) || !this.$cardinalitySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$cardinalitySvg) {\r\n            this.$cardinalitySvg.textContent = cardinality;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.property.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    public updateProperty(property: string): void {\r\n        this.property = property;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((property.length === 0 && this.cardinality.length > 0) || !this.$propertySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$propertySvg) {\r\n            this.$propertySvg.textContent = property;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.cardinality.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos: Point = this.getPos();\r\n        let group = Util.create({ tag: 'g', class: 'SVGEdgeInfo', transform: 'translate(0, 0)' });\r\n\r\n        // append rect as background for text items\r\n        this.$rectBackground = Util.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y - this.$heightOfOneTextItem + 3,\r\n            width: this.getSize().x,\r\n            height: this.getSize().y,\r\n            fill: '#DDD',\r\n            'stroke-width': 0,\r\n            rx: '5',\r\n            ry: '5'\r\n        });\r\n        group.appendChild(this.$rectBackground);\r\n\r\n        let y = pos.y;\r\n        if (this.property) {\r\n            // property\r\n            this.$propertySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$propertySvg.textContent = this.property;\r\n            group.appendChild(this.$propertySvg);\r\n\r\n            y += this.$heightOfOneTextItem;\r\n        }\r\n\r\n        // cardinality\r\n        if (this.cardinality) {\r\n            this.$cardinalitySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$cardinalitySvg.textContent = this.cardinality;\r\n            group.appendChild(this.$cardinalitySvg);\r\n        }\r\n\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        let cardinalityAvailable = this.cardinality && this.cardinality.length > 0;\r\n        let propertyAvailable = this.property && this.property.length > 0;\r\n\r\n        return !propertyAvailable && !cardinalityAvailable;\r\n    }\r\n\r\n    public redrawFromEdge(newPos: Point): void {\r\n\r\n        if (!newPos) {\r\n            return;\r\n        }\r\n\r\n        let oldPos = this.getPos();\r\n\r\n        // get difference between new and the old position\r\n        let diffPos = new Point();\r\n        diffPos.x = newPos.x - oldPos.x;\r\n        diffPos.y = newPos.y - oldPos.y;\r\n\r\n        // get translate information\r\n        let translation = this.$view.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        let sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        // set new traslation values\r\n        let newTransX = (sx + diffPos.x);\r\n        let newTransY = (sy + diffPos.y);\r\n        this.$view.setAttributeNS(null, 'transform', 'translate(' + newTransX + ' ' + newTransY + ')');\r\n\r\n        // set new position of svg\r\n        this.getPos().x = newPos.x;\r\n        this.getPos().y = newPos.y;\r\n    }\r\n\r\n    public getText(): string {\r\n        let infoTxt: string = '';\r\n\r\n        if (this.property) {\r\n            infoTxt = this.property;\r\n        }\r\n        if (this.cardinality) {\r\n            if (infoTxt.length > 0) {\r\n                infoTxt += '\\n';\r\n            }\r\n            infoTxt += this.cardinality;\r\n        }\r\n\r\n        return infoTxt;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    private calcSize(): Point {\r\n        let text: string = this.getText();\r\n        let items: Array<string> = text.split('\\n');\r\n\r\n        let maxSize = new Point(0, 0);\r\n        if (text.length === 0) {\r\n            return maxSize;\r\n        }\r\n\r\n        for (let i = 0; i < items.length; i += 1) {\r\n            // calculate size\r\n            let sizeOfText: ClientRect = Util.sizeOf(items[i]);\r\n            maxSize.x = Math.max(maxSize.x, sizeOfText.width);\r\n            maxSize.y += sizeOfText.height;\r\n\r\n            this.$heightOfOneTextItem = sizeOfText.height;\r\n        }\r\n\r\n        return maxSize;\r\n    }\r\n    private resetAllSvgElements() {\r\n        this.$cardinalitySvg = undefined;\r\n        this.$view = undefined;\r\n        this.$propertySvg = undefined;\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\nimport {PropertyBinder} from '../../PropertyBinder';\r\n\r\nexport class Input extends Control {\r\n    private type: string;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data = super.initViewDataProperties(oldData);\r\n        if ('checkbox' === this.type || 'radio' === this.type) {\r\n            data.addFrom('checked', oldData);\r\n        }\r\n        data.addFrom('value', oldData);\r\n        data.addFrom('type', oldData);\r\n        return data;\r\n    }\r\n\r\n    public load(data: any) {\r\n        let id: string;\r\n        let inputField: HTMLElement;\r\n        let useData: boolean;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            useData = true;\r\n        } else {\r\n            id = data.id;\r\n            if (data.type) {\r\n                this.setType(data['type']);\r\n            } else {\r\n                this.setType('text');\r\n            }\r\n            if (data.hasOwnProperty('property')) {\r\n                this.setProperty(data['property']);\r\n            }\r\n            useData = false;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n\r\n        inputField = document.getElementById(id);\r\n\r\n        if (useData) {\r\n            if (inputField) {\r\n                // TODO disuss how to decide, which property we should listen on...\r\n                // this.property = id;\r\n                if (inputField.hasAttribute('Property')) {\r\n                    this.setProperty(inputField.getAttribute('Property'));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (inputField instanceof HTMLInputElement) {\r\n            this.setView(inputField);\r\n            this.type = inputField.type;\r\n            // useData = false;\r\n        } else {\r\n            if (!inputField) {\r\n                this.setView(document.createElement('input'));\r\n                this.$viewData = this.initViewDataProperties(this.$viewData);\r\n                // append viewListener\r\n                // this.$view.addEventListener('change', this.$viewListener);\r\n                if (typeof(data) !== 'string') {\r\n                    for (let attr in data) {\r\n                        if (data.hasOwnProperty(attr) === false) {\r\n                            continue;\r\n                        }\r\n                        // this.$view[attr] = data[attr];\r\n                        this.$viewData.setValue(attr, data[attr]);\r\n                    }\r\n                } else {\r\n                    if (this.type) {\r\n                        this.$view.setAttribute('type', this.type);\r\n                    }\r\n                    if (data.hasOwnProperty('class')) {\r\n                        this.$view.setAttribute('class', data['class']);\r\n                    }\r\n                    this.$view.setAttribute('id', this.id);\r\n                    this.$view.setAttribute('property', this.property);\r\n                }\r\n\r\n                if (data.value) {\r\n                    // if theres a value at the control, we want to change the model to the new value\r\n                    if (this.$model) {\r\n                        this.$model.setValue(this.lastProperty, data.value);\r\n                    }\r\n                }\r\n                if (this.$model) {\r\n                    PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                }\r\n\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (this.property && entity) {\r\n            if (entity.id === this.property.split('.')[0]) {\r\n                this.$model = entity;\r\n                PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                // entity.addListener(this, this.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n    // TODO FIXME protected updateElement(property: string, value: string) {\r\n    //     if (this.$view instanceof HTMLInputElement) {\r\n    //         if (value != null) {\r\n    //             if(property == this.lastProperty) {\r\n    //                 (<HTMLInputElement>this.$view)[this.getStandardProperty()] = value;\r\n    //             } else {\r\n    //                 // this.getRoot().setValue(this, property, value, (<HTMLInputElement>this.$view)[property]);\r\n    //                 (<HTMLInputElement>this.$view)[property] = value;\r\n    //             }\r\n    //         } else {\r\n    //             delete (<HTMLInputElement>this.$view)[property];\r\n    //         }\r\n    //     }\r\n    // }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            super.controlChanged(ev);\r\n        }\r\n// <<<<<<< HEAD\r\n//             let newVal = element[this.getStandardProperty()];\r\n//             if (this.isKeyOnly()) {\r\n//                 // we expect, element[this.lastProperty] to be boolean:\r\n//                 if (!newVal) {\r\n//                     newVal = null;\r\n//                 }\r\n//             } else {\r\n//             }\r\n        // let $graphModel;\r\n        // let value;\r\n        /*if (this.$graphModel) {\r\n            $graphModel = this.$graphModel;\r\n            value = this.$graphModel.getValue(this.lastProperty);\r\n        } else {\r\n            $graphModel = this;\r\n            if (this.$view) {\r\n                value = this.$view[this.lastProperty];\r\n            }\r\n        }*/\r\n        // this.$model.setValue(this.lastProperty, newVal);\r\n        // this.propertyChange(this.$graphModel,this.lastProperty, this.$graphModel.getValue(this.lastProperty), newVal);\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n// =======\r\n        // let newVal = element[this.lastProperty];\r\n        // if (this.isKeyOnly()) {\r\n        //     // we expect, element[this.lastProperty] to be boolean:\r\n        //     if (!newVal) {\r\n        //         newVal = null;\r\n        //     }\r\n        // } else {\r\n        // }\r\n        // let $graphModel;\r\n        // let value;\r\n\r\n        // $graphModel = this.getViewData();\r\n        // if (this.$graphModel) {\r\n        //     $graphModel = this.$graphModel;\r\n        //     value = this.$graphModel.getValue(this.lastProperty);\r\n        // } else {\r\n        //     $graphModel = this;\r\n        //     if (this.$view) {\r\n        //         value = this.$view[this.lastProperty];\r\n        //     }\r\n        // }\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n//            this.saveViewInData();\r\n// >>>>>>> addOldFunctions\r\n//         } else {\r\n//             console.log('value does not match the pattern...');\r\n//         }\r\n    }\r\n\r\n    public setType(type: string): void {\r\n        let oldValue: string = this.type;\r\n        if (oldValue === type) {\r\n            return;\r\n        }\r\n        if (type === 'radio') {\r\n            this.$viewData.setValue('checked', null);\r\n        } else {\r\n            this.$viewData.removeKey('checked');\r\n        }\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\n\r\nexport class Label extends Control {\r\n    public load(data: JSON): any {\r\n        this.createControl(this.$owner, data);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('label');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr === 'textContent') {\r\n                this.$view.textContent = data['textContent'];\r\n            } else {\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Method extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.updateType(data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.updateType(data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.updateType(data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n            // e.g. setName() : string or name:string\r\n            let dataSplitted = data.split(':');\r\n\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }\r\n                else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType(dataSplitted[1].trim() || 'void');\r\n            }\r\n            // set default return type of void\r\n            else {\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = data.trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }  else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType('void');\r\n            }\r\n        }\r\n\r\n        if (Util.includes(this.$data.getValue('name'), '(') && !Util.includes(this.$data.getValue('name'), ')') === false) {\r\n            this.$data.setValue('name', this.$data.getValue('name') + '()');\r\n        }\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\nimport {Association} from '../edges';\r\nimport { GraphModel } from '..';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\n\r\nexport class Node extends DiagramElement {\r\n    public $edges: Association[] = [];\r\n    public $minWidth: number = 150;\r\n    public $minheight: number = 25;\r\n    public $defaulEdgeType: string;\r\n\r\n    constructor(data: JSON|string|Object|any) {\r\n        super();\r\n\r\n        // default size\r\n        this.withSize(this.$minWidth, this.$minheight);\r\n\r\n        if (data) {\r\n            if (data['x'] && data['y']) {\r\n                this.withPos(data['x'], data['y']);\r\n            }\r\n            if (data['width'] || data['height']) {\r\n                this.withSize(data['width'], data['height']);\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos = this.getPos();\r\n        const size = this.getSize();\r\n\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x - size.x / 2,\r\n            y: pos.y - size.y / 2,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y,\r\n            width: size.x,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        const shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'middle',\r\n            'font-family': 'Verdana',\r\n            'font-size': '14',\r\n            fill: 'black'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = this.id;\r\n\r\n        let group = this.createShape({tag: 'g', id: this.id});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public copy(): Node {\r\n        let copy: Node;\r\n        // create new id\r\n        let model = <GraphModel>this.$owner || <GraphModel>this.getRoot();\r\n        if (model) {\r\n            let type = this.property || Node.name;\r\n            let newId = model.getNewId(type);\r\n            copy = <Node>model.createElement(type, newId, null);\r\n            copy.withSize(this.getSize().x, this.getSize().y);\r\n            copy.$owner = model;\r\n        } else {\r\n            copy.id = this.id + '-copy';\r\n            copy.$owner = this.getRoot();\r\n        }\r\n        return copy;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n// EMPTY\r\n    }\r\n    public addAttribute(value: string): Attribute {\r\n        return null;\r\n    }\r\n    public getAttributes(): Attribute[] {\r\n        return null;\r\n    }\r\n    public addMethod(value: string): Method {\r\n        return null;\r\n    }\r\n    public updateLabel(newLabel: string): void {\r\n// EMPTY\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\n\r\nexport class SO extends DiagramElement {\r\n    public static create(element: Object) {\r\n        let result: SO = new SO();\r\n        for (let key in element) {\r\n            if (element.hasOwnProperty(key) === false) {\r\n                continue;\r\n            }\r\n            result.withKeyValue(key, element[key]);\r\n\r\n        }\r\n        return result;\r\n    }\r\n\r\n    public withKeyValue(key: string, value: any): SO {\r\n        if (key === 'typ') {\r\n            this.property = value;\r\n        } else if (key === 'x') {\r\n            this.withPos(value, null);\r\n        } else if (key === 'y') {\r\n            this.withPos(null, value);\r\n        } else if (key === 'width') {\r\n            this.withSize(value, null);\r\n        } else if (key === 'height') {\r\n            this.withSize(null, value);\r\n        } else {\r\n            this[key] = value;\r\n        }\r\n        return this;\r\n    }\r\n}\r\n","import {Point} from '../BaseElements';\r\nimport {Node} from './Node';\r\n\r\nexport class StereoType extends Node {\r\n\r\n    protected stereoType: string;\r\n\r\n    constructor (type: string, x: number, y: number) {\r\n        super('');\r\n        this.withPos(x, y);\r\n        this.setStereoType(type);\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        let pos: Point = this.getPos();\r\n        let size: Point = this.getSize();\r\n\r\n               // = = = STEREOTYPE = = =\r\n        let stereoType = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y - this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': 10,\r\n            'font-weight': 'bold',\r\n            fill: 'black'\r\n        });\r\n        stereoType.textContent = this.stereoType;\r\n\r\n        this.$view = stereoType;\r\n        return stereoType;\r\n    }\r\n\r\n    public setStereoType(value: string): void {\r\n        this.stereoType = '<<' + value + '>>';\r\n    }\r\n\r\n    public getStereoType(): string {\r\n        return this.stereoType;\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { SO } from './SO';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport { Util } from '../../util';\r\n\r\nexport class Symbol extends Node {\r\n    public $heightMax: number = 0;\r\n    public $heightMin: number = 0;\r\n\r\n    constructor(typ: string) {\r\n        super(typ);\r\n    }\r\n\r\n    public draw(typ?: string): SVGElement {\r\n        return SymbolLibary.draw(this);\r\n    }\r\n}\r\n\r\n// \t\t\t\t###################################################### SymbolLibary ####################################################################################\r\n// Example Items\r\n// {tag: 'path', d: ''}\r\n// {tag: 'rect', width:46, height:34}\r\n// {tag: 'ellipse', width:23, height:4}\r\n// {tag: 'line', x1:650, y1:-286, x2:650, y2:-252}\r\n// {tag: 'circle', r:5, x:12, y:0}\r\n// {tag: 'image', height: 30, width: 50, content$src: hallo}\r\n// {tag: 'text', 'text-anchor': 'left', x: '10'}\r\nexport class SymbolLibary {\r\n\r\n    public static drawSVG(node: any): SVGSVGElement {\r\n        // const lib = new SymbolLibary();\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            const parent = SO.create(node);\r\n            parent['property'] = 'SVG';\r\n            symbol = fn(parent);\r\n            // symbol = fn.apply(lib, parent);\r\n\r\n            return SymbolLibary.createGroup(parent, symbol);\r\n        }\r\n        return symbol;\r\n    }\r\n\r\n    public static draw(node: any, parent?: Object): SVGElement {\r\n        // Node is Symbol or simple Object\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            if (!(node instanceof DiagramElement)) {\r\n                node = SO.create(node);\r\n                if (!node.property) {\r\n                    node.property = 'SVG';\r\n                }\r\n            }\r\n            symbol = fn.apply(this, [node]);\r\n            if (!parent) {\r\n                return SymbolLibary.createGroup(node, symbol);\r\n            }\r\n            return SymbolLibary.createGroup(node, symbol);\r\n        } else if (node.property) {\r\n            symbol = new Symbol(node.property);\r\n            symbol.init(node);\r\n            let pos = node.getPos();\r\n            let size = node.getSize();\r\n            symbol.withPos(pos.x, pos.y);\r\n            symbol.withSize(size.x, size.y);\r\n            symbol['value'] = node['value'];\r\n            parent = node['$parent'];\r\n            return SymbolLibary.draw(symbol, parent);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public static upFirstChar(txt: string): string {\r\n        return txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase();\r\n    }\r\n\r\n    public static isSymbolName(typ: string): boolean {\r\n        let fn = SymbolLibary['draw' + SymbolLibary.upFirstChar(typ)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static isSymbol(node: Symbol) {\r\n        let fn = SymbolLibary[SymbolLibary.getName(node)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static getName(node: any): string {\r\n        if (node['type']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['type']);\r\n        }\r\n        if (node.property) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node.property);\r\n        }\r\n        if (node['src']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['src']);\r\n        }\r\n        return 'drawNode';\r\n    }\r\n\r\n    /*FIXME   public static createImage(node: Symbol, $graphModel:Node) {\r\n           let n, img: HTMLElement;\r\n           // node.$graphModel = node;\r\n           if (SymbolLibary.isSymbol(node)) {\r\n               return SymbolLibary.draw(null, node);\r\n           }\r\n           n = {tag: 'img', $graphModel: node, src: node['src']};\r\n           let size = node.getSize();\r\n           if (size.isEmpty() === false) {\r\n               n['width'] = size.x;\r\n               n['height'] = size.y;\r\n           } else {\r\n               n['xmlns'] = 'http://www.w3.org/1999/xhtml';\r\n           }\r\n           img = Util.create(n);\r\n           if (size.isEmpty()) {\r\n               $graphModel.appendImage(img);\r\n               return null;\r\n           }\r\n           return img;\r\n       }*/\r\n\r\n    public static createGroup(node: DiagramElement, group: any) {\r\n        let func, y: number, z: number, box, item: Element, transform, i, offsetX = 0, offsetY = 0;\r\n        let svg: any;\r\n        if (node.property.toUpperCase() === 'HTML') {\r\n            let so = {\r\n                tag: 'svg',\r\n                style: { left: (group.x | 0) + node.getPos().x, top: (group.y | 0) + node.getPos().y, position: 'absolute' }\r\n            };\r\n            if (node['transform']) {\r\n                so['transform'] = node['transform'];\r\n            }\r\n            svg = Util.create(so);\r\n        } else {\r\n            svg = Util.create({ tag: 'g' });\r\n            transform = 'translate(' + group.getPos().x + ' ' + group.getPos().y + ')';\r\n            if (group.scale) {\r\n                transform += ' scale(' + group.scale + ')';\r\n            }\r\n            if (group.rotate) {\r\n                transform += ' rotate(' + group.rotate + ')';\r\n            }\r\n            svg.setAttribute('transform', transform);\r\n            if (group['id']) {\r\n                svg.id = group['id'];\r\n            }\r\n        }\r\n\r\n        if (node['tooltip']) {\r\n            const tooltipTitleAttr = {\r\n                tag: 'title'\r\n            };\r\n            let tooltipTitle = Util.createShape(tooltipTitleAttr);\r\n            tooltipTitle.textContent = node['tooltip'];\r\n            svg.appendChild(tooltipTitle);\r\n        }\r\n\r\n        if (node['background']) {\r\n            const attrCircle = {\r\n                tag: 'circle',\r\n                cx: 20,\r\n                cy: 20,\r\n                r: 17,\r\n                stroke: '#888',\r\n                'stroke-width': 0,\r\n                fill: '#DDD'\r\n            };\r\n            svg.appendChild(Util.create(attrCircle));\r\n        }\r\n\r\n        for (i = 0; i < group.items.length; i += 1) {\r\n            svg.appendChild(Util.create(group.items[i]));\r\n        }\r\n        let elements = node['elements'];\r\n        Util.setSize(svg, group.width + node.getSize().x, group.height + node.getSize().y);\r\n        node['$heightMin'] = node.getSize().y;\r\n        if (elements) {\r\n            for (i = 0; i < elements.length; i += 1) {\r\n                if (!elements[i] && elements[i].length < 1) {\r\n                    elements.splice(i, 1);\r\n                    i -= 1;\r\n                }\r\n            }\r\n            box = Util.create({ tag: 'g' });\r\n            // Calculate new Height\r\n            let c: number;\r\n            z = 0;\r\n            for (c = 0; c < elements.length; c += 1) {\r\n                if (typeof elements[c] === 'string') {\r\n                    z += 1;\r\n                } else {\r\n                    z += elements[c].length;\r\n                }\r\n            }\r\n            z = z * 25 + 6;\r\n            box.appendChild(Util.create({\r\n                tag: 'rect',\r\n                rx: 0,\r\n                x: offsetX,\r\n                y: (offsetY + 28),\r\n                width: 70,\r\n                height: z,\r\n                stroke: '#000',\r\n                fill: '#fff',\r\n                opacity: '0.7'\r\n            }));\r\n            node['$heightMax'] = z + node['$heightMin'];\r\n\r\n            svg['elements'] = elements;\r\n            if (node['type'] === 'DropDown') {\r\n                svg['activ'] = Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': 60,\r\n                    'x': (10 + offsetX),\r\n                    'y': 20,\r\n                    value: node['activText']\r\n                });\r\n                svg.appendChild(svg.activ);\r\n            }\r\n\r\n            y = offsetY + 46;\r\n            // 46 -28 = 18\r\n\r\n            func = function (event: Event) {\r\n                if (svg.activ) {\r\n                    svg.activ.textContent = (<any>event.currentTarget).value;\r\n                }\r\n            };\r\n            let txt: string;\r\n            let textClass = 'SVGTEXT';\r\n            for (z = 0; z < elements.length; z += 1) {\r\n                if (typeof elements[z] === 'string') {\r\n                    txt = elements[z];\r\n                } else {\r\n                    item = this.addText(y, offsetX, box, elements[z][0], 'SVGTEXT');\r\n                    y += 26;\r\n                    for (c = 1; c < elements[z].length; c += 1) {\r\n                        item = this.addText(y, offsetX, box, '* ' + elements[z][c], 'SVGTEXTITEM');\r\n\r\n                        item['value'] = elements[z];\r\n                        if (node['action']) {\r\n                            item['onclick'] = node['action'];\r\n                        } else {\r\n                            item['onclick'] = func;\r\n                        }\r\n                        y += 26;\r\n                    }\r\n                    txt = elements[z];\r\n                    let subBox = Util.create({\r\n                        tag: 'rect',\r\n                        rx: 0,\r\n                        x: offsetX,\r\n                        y: (offsetY + 28),\r\n                        width: 60,\r\n                        height: z,\r\n                        stroke: '#000',\r\n                        fill: '#fff',\r\n                        opacity: '0.7'\r\n                    });\r\n                    continue;\r\n                }\r\n                // let txt = elements[z];\r\n                item = this.addText(y, offsetX, box, txt, textClass);\r\n\r\n                item['value'] = elements[z];\r\n                if (node['action']) {\r\n                    item['onclick'] = node['action'];\r\n                } else {\r\n                    item['onclick'] = func;\r\n                }\r\n                y += 26;\r\n            }\r\n            svg.choicebox = box;\r\n        }\r\n        svg.tool = node;\r\n        svg.onclick = function () {\r\n            if (svg.status === 'close') {\r\n                svg.open();\r\n            } else {\r\n                svg.close();\r\n            }\r\n        };\r\n        svg.close = function () {\r\n            if (svg.status === 'open' && svg.choicebox) {\r\n                this.removeChild(svg.choicebox);\r\n            }\r\n            svg.status = 'close';\r\n            svg.tool.$size.height = svg.tool.heightMin;\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x, g.tool.height + g.tool.y);\r\n            Util.setSize(svg, svg.tool.$size.x, svg.tool.$size.y);\r\n        };\r\n        svg.open = function () {\r\n            if (this.tagName === 'svg') {\r\n                return;\r\n            }\r\n            if (svg.status === 'close' && svg.choicebox) {\r\n                this.appendChild(svg.choicebox);\r\n            }\r\n            svg.status = 'open';\r\n            svg.tool.$size.height = svg.tool.heightMax;\r\n            Util.setSize(svg, svg.tool.width, svg.tool.height);\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x + 10, g.tool.height + g.tool.y + 10);\r\n        };\r\n        svg.close();\r\n        return svg;\r\n    }\r\n\r\n    public static addChild(parent: SVGElement, json: JSON | Element): void {\r\n        let item: Element;\r\n        if ((<any>json).offsetLeft) {\r\n            item = <Element>json;\r\n        } else {\r\n            item = Util.create(json);\r\n        }\r\n        item.setAttribute('class', 'draggable');\r\n        parent.appendChild(item);\r\n    }\r\n\r\n    public static all(node: any): void {\r\n        SymbolLibary.drawSmiley(node);\r\n        SymbolLibary.drawDatabase(node);\r\n        SymbolLibary.drawLetter(node);\r\n        SymbolLibary.drawMobilephone(node);\r\n        SymbolLibary.drawWall(node);\r\n        SymbolLibary.drawActor(node);\r\n        SymbolLibary.drawLamp(node);\r\n        SymbolLibary.drawArrow(node);\r\n        SymbolLibary.drawButton(node);\r\n        SymbolLibary.drawDropdown(node);\r\n        SymbolLibary.drawClassicon(node);\r\n        SymbolLibary.drawClassWithEdgeicon(node);\r\n    }\r\n\r\n    public static drawHamburger(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'circle', r: 10, fill: '#ccc', cx: 12, cy: 12, 'stroke-width': 1, stroke: 'black'},\r\n                { tag: 'path', d: 'M 8,7 H 16 M 8,12 H 16 M 8,17 H 16', stroke: 'black', fill: 'none' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawSmiley(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'path', d: 'm49.01774,25.64542a24.5001,24.5 0 1 1 -49.0001,0a24.5001,24.5 0 1 1 49.0001,0z', stroke: 'black', fill: 'none' }, { tag: 'path', d: 'm8,31.5c16,20 32,0.3 32,0.3' },\r\n                { tag: 'path', d: 'm19.15,20.32a1.74,2.52 0 1 1 -3.49,0a1.74,2.52 0 1 1 3.49,0z' },\r\n                { tag: 'path', d: 'm33,20.32a1.74,2.52 0 1 1 -3.48,0a1.74,2.52 0 1 1 3.48,0z' },\r\n                { tag: 'path', d: 'm5.57,31.65c3.39,0.91 4.03,-2.20 4.03,-2.20' },\r\n                { tag: 'path', d: 'm43,32c-3,0.91 -4,-2.20 -4.04,-2.20' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDatabase(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 40,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,-6.26 25.03,-6.26 25.03,0l0,25.82c0,6.26 -25.03,6.26 -25.03,0l0,-25.82z',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLetter(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 17,\r\n            items: [\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1,1l22,0l0,14l-22,0l0,-14z' },\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1.06,1.14l10.94,6.81l10.91,-6.91' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMobilephone(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 4.2 0.5 15.61 0c 2 0 3.7 1.65 3.7 3.7l 0 41.6c 0 2-1.65 3.7-3.7 3.7l-15.6 0c-2 0-3.7-1.6-3.7-3.7l 0-41.6c 0-2 1.6-3.7 3.7-3.7z',\r\n                    fill: 'none',\r\n                    stroke: 'black'\r\n                },\r\n                { tag: 'path', d: 'm 12.5 2.73a 0.5 0.5 0 1 1-1 0 0.5 0.5 0 1 1 1 0z' },\r\n                { tag: 'path', d: 'm 14 46a 2 2 0 1 1-4 0 2 2 0 1 1 4 0z' },\r\n                { tag: 'path', d: 'm 8 5 7 0' },\r\n                { tag: 'path', d: 'm 1.63 7.54 20.73 0 0 34-20.73 0z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawWall(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'path', d: 'm26,45.44l-5,3.56l-21,-9l0,-36.41l5,-3.56l20.96,9l-0,36.4z' },\r\n                {\r\n                    tag: 'path',\r\n                    stroke: 'white',\r\n                    d: 'm2.21,11l18.34,7.91m-14.46,-12.57l0,6.3m8.2,21.74l0,6.35m-8.6,-10l0,6.351m4.1,-10.67l0,6.3m4.8,-10.2l0,6.3m-8.87,-10.23l0,6.35m4.78,-10.22l0,6.35m-8,14.5l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m0,-13l0,34m-18.23,-41.84l18.3,8m0,0.11l5,-3.57'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawActor(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'line', stroke: '#000', x1: '12', y1: '10', x2: '12', y2: '30' },\r\n                { tag: 'circle', stroke: '#000', cy: '5', cx: '12', r: '5' },\r\n                { tag: 'line', stroke: '#000', y2: '18', x2: '25', y1: '18', x1: '0' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '5', y1: '30', x1: '12' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '20', y1: '30', x1: '12' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLamp(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 22.47 10.58c-6.57 0-11.89 5.17-11.89 11.54 0 2.35 0.74 4.54 2 6.36 2 4 4.36 5.63 4.42 10.4l 11.15 0c 0.12-4.9 2.5-6.8 4.43-10.4 1.39-1.5 1.8-4.5 1.8-6.4 0-6.4-5.3-11.5-11.9-11.5z',\r\n                    fill: 'white',\r\n                    stroke: 'black'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 40 8 0c 0.58 0 1 0.5 1 1 0 0.6-0.5 1-1 1l-8 0c-0.6 0-1-0.47-1-1 0-0.58 0.47-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 42.7 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 45.3 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                { tag: 'path', d: 'm 19.5 48c 0.37 0.8 1 1.3 1.9 1.7 0.6 0.3 1.5 0.3 2 0 0.8-0.3 1.4-0.8 1.9-1.8z' },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 6 37.5 4.2-4c 0.3-0.3 0.8-0.3 1 0 0.3 0.3 0.3 0.8 0 1.1l-4.2 4c-0.3 0.3-0.8 0.3-1.1 0-0.3-0.3-0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 39 37.56-4.15-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 38 23 5.8 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.8 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 1.3 23 6 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.9 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 34.75 11.2 4-4.1c 0.3-0.3 0.3-0.8 0-1-0.3-0.3-0.8-0.3-1 0l-4 4.1c-0.3 0.3-0.3 0.8 0 1 0.3 0.3 0.8 0.3 1 0z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 11.23 10-4-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 21.64 1.3 0 5.8c 0 0.4 0.3 0.8 0.8 0.8 0.4 0 0.8-0.3 0.8-0.8l 0-5.8c 0-0.4-0.3-0.8-0.8-0.8-0.4 0-0.8 0.3-0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 26.1 24.3c-0.5 0-1 0.2-1.3 0.4-1.1 0.6-2 3-2.27 3.5-0.26-0.69-1.14-2.9-2.2-3.5-0.7-0.4-2-0.7-2.5 0-0.6 0.8 0.2 2.2 0.9 2.9 1 0.9 3.9 0.9 3.9 0.9 0 0 0 0 0 0 0.54 0 2.8 0 3.7-0.9 0.7-0.7 1.5-2 0.9-2.9-0.2-0.3-0.7-0.4-1.2-0.4z'\r\n                },\r\n                { tag: 'path', d: 'm 22.5 28.57 0 10.7' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawStop(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 30,\r\n            height: 30,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: '#FFF',\r\n                    'stroke-width': '2',\r\n                    stroke: '#B00',\r\n                    d: 'm 6,6 a 14,14 0 1 0 0.06,-0.06 z m 0,0 20,21'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMin(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    d: 'm 0,0 19,0 0,19 -19,0 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 13,-0.04'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawArrow(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 10,\r\n            height: 9,\r\n            rotate: node['rotate'],\r\n            items: [\r\n                { tag: 'path', fill: '#000', stroke: '#000', d: 'M 0,0 10,4 0,9 z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMax(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    'stroke-dashoffset': 2,\r\n                    'stroke-dasharray': '4.8,4.8',\r\n                    d: 'm 0,0 4.91187,0 5.44643,0 9.11886,0 0,19.47716 -19.47716,0 0,-15.88809 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 6,0.006 0.02,5 0.01,-11 -0.03,6.02 c 2,-0.01 4,-0.002 6,0.01'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawButton(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight, btnValue;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        btnValue = node['value'] || '';\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: 60,\r\n            height: 28,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 8,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    filter: 'url(#drop-shadow)',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                { tag: 'text', $font: true, x: 10, y: 18, fill: 'black', value: btnValue, 'class': 'hand' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDropdown(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 0,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth - 20,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 2,\r\n                    x: btnWidth - 20,\r\n                    y: 0,\r\n                    width: 20,\r\n                    height: 28,\r\n                    stroke: '#000',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    style: 'fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1',\r\n                    d: 'm ' + (btnWidth - 15) + ',13 10,0 L ' + (btnWidth - 10) + ',20 z'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassicon(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.19999l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm25.68807,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.2l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                { tag: 'line', x1: 11, y1: 7, x2: 25, y2: 7, stroke: '#000' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassWithEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M2,10 20,10 20,35 2,35 Z M2,17 20,17 M20,10 28,5 28,9 M 28.5,4.7 24,4',\r\n                    style: 'fill:none;stroke:#000000;transform:scale(0.8);'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClass(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: '100%',\r\n            height: '100%',\r\n            items: [\r\n                { tag: 'rect', width: 50, height: 40, x: 0, y: 0, 'stroke-width': 2, stroke: 'black', fill: 'none'},\r\n                { tag: 'rect', width: 50, height: 12, x: 0, y: 18, 'stroke-width': 1, stroke: 'black', fill: 'none'},\r\n                { tag: 'text', x: 27, y: 14, 'text-anchor': 'middle', 'font-size': 11, value: 'Class'},\r\n                { tag: 'text', x: 5, y: 24, 'font-size': 5, value: '+ field: type'},\r\n                { tag: 'text', x: 5, y: 36, 'font-size': 5, value: '+ method(type)'}\r\n            ]\r\n        });\r\n    }\r\n/*\r\n<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n    <g>\r\n    <text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text>\r\n        <text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>\r\n*/\r\n\r\n    public static drawEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M10,30 30,10 M19,10 30,10 30,21',\r\n                    style: 'fill:none;stroke:#555;stroke-width:2;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawCopynode(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M5 5 L15 5 L15 20 L5 20 Z M5 10 L15 10',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M8 2 L18 2 L18 17 L8 17 Z M8 7 L18 7'\r\n                        + 'M11 4.5 L15 4.5 '\r\n                        + 'M10 10 L16 10 '\r\n                        + 'M10 13 L16 13 ',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawBasket(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M12 12 L18 12 L18 11 L22 11 L22 12 L28 12 L28 14 L27 14 L27 29 L13 29 L13 14 L12 14 Z M13 14 L27 14 M20 17 L20 26 M17 16 L17 27 M23 16 L23 27',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawPencil(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M6 20 L12 23 L33 23 L33 17 L12 17 Z M30 17 L30 23 M12 17 L12 23 M15 19 L28 19 M15 21 L28 21',\r\n                    stroke: '#000',\r\n                    'stroke-width': 1,\r\n                    fill: 'white'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    private static addText(y: number, offsetX: number, box: Element, text: string, textClass: string): Element {\r\n        let item: Element;\r\n        box.appendChild(Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'text-anchor': 'left',\r\n            width: 70,\r\n            x: 10,\r\n            y: y,\r\n            class: textClass,\r\n            value: text,\r\n            eventValue: text\r\n        }));\r\n        if (textClass === 'SVGTEXT') {\r\n            textClass = 'SVGChoiceText';\r\n        } else {\r\n            textClass = 'SVGChoice';\r\n        }\r\n\r\n        item = Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            x: offsetX,\r\n            y: y - 18,\r\n            width: 70,\r\n            height: 24,\r\n            stroke: 'none',\r\n            class: textClass,\r\n        });\r\n        item['eventValue'] = text;\r\n        box.appendChild(item);\r\n        return item;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n}\r\n","import {Control} from '../../Control';\r\nimport BridgeElement from '../../BridgeElement';\r\nimport Data from '../../Data';\r\nimport {Util} from '../../util';\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Table extends Control {\r\n    protected items: BridgeElement[] = [];\r\n    private columns: Column[] = [];\r\n    private cells: Object = {};\r\n    private $bodysection: HTMLTableSectionElement;\r\n    private $headersection: HTMLTableSectionElement;\r\n    private showedItems: Array<BridgeElement> = [];\r\n    // BridgeElements:\r\n    private itemsIds: Object = {};\r\n    private countElement: HTMLElement;\r\n    private countColumn: HTMLElement;\r\n    private countColumnPos: number;\r\n    private resultColumn: string;\r\n    private lastSearchText: string;\r\n    private searchColumns: Array<string> = [];\r\n    private searchText: Array<string> = [];\r\n    private sortColumn: Column;\r\n    private direction: number;\r\n    private moveElement: Column = null;\r\n    private isDrag: boolean = false;\r\n    private moveTimeStamp: number;\r\n    private moveX: number;\r\n    private movePos: number;\r\n    private dragColumn: Column;\r\n    private dragPos: number;\r\n    private tableOption: HTMLTableHeaderCellElement;\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    private static indexOfChild(item: BridgeElement) {\r\n        let i: number = 0;\r\n        let child: Node = item.gui;\r\n        while ((child = child.previousSibling) !== null) {\r\n            i++;\r\n        }\r\n        return i;\r\n    }\r\n\r\n    public load(data: any): void {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n            if (data.property) {\r\n                this.property = data.property;\r\n            }\r\n\r\n            if (data.searchColumns) {\r\n                let search: Array<string> = [];\r\n                if (typeof(data.searchColumns) === 'string') {\r\n                    search = data.searchColumns.split(' ');\r\n                } else {\r\n                    search = data.searchColumns;\r\n                }\r\n                for (let z: number = 0; z < search.length; z++) {\r\n                    let item = search[z].trim();\r\n                    if (item.length > 0) {\r\n                        if (this.searchColumns.indexOf(item) < 0) {\r\n                            this.searchColumns.push(item);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        if (this.$view) {\r\n            // Must be an Update\r\n            if (data['columns']) {\r\n                // It is a json must add all things and generate HTML\r\n                for (let i in data['columns']) {\r\n                    if (data['columns'].hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    let col = this.parseData(data['columns'][i]);\r\n                    this.addHeaderInfo(col);\r\n                    this.columns.push(col);\r\n                    this.tableOption.parentElement.insertBefore(col.$element, this.tableOption);\r\n                }\r\n                for (let i in this.showedItems) {\r\n                    let item: BridgeElement = this.showedItems[i];\r\n                    let cell;\r\n                    // Now Add some Children\r\n                    while (item.gui.children.length < this.columns.length) {\r\n                        cell = document.createElement('td');\r\n                        item.gui.appendChild(cell);\r\n                    }\r\n                    // Now Remove Some Children\r\n                    while (item.gui.children.length > this.columns.length) {\r\n                        item.gui.removeChild(item.gui.children[item.gui.children.length - 1]);\r\n                    }\r\n                    for (let c: number = 0; c < this.columns.length; c++) {\r\n                        let name = this.columns[c].attribute;\r\n                        // let count = this.columns.length;\r\n                        cell = item.gui.children[c];\r\n                        cell.innerHTML = item.model.getValue(name);\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n\r\n        this.$view = document.getElementById(id);\r\n        let headerrow: HTMLTableRowElement;\r\n        if (this.$view) {\r\n            if (!this.property) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('table');\r\n            this.$owner.appendChild(this);\r\n        }\r\n        if (!this.$bodysection) {\r\n            // add tbody element if missing\r\n            this.$bodysection = document.createElement('tbody');\r\n            this.$view.appendChild(this.$bodysection);\r\n        }\r\n        if (data['classname']) {\r\n            this.$view.className = data['classname'];\r\n        } else {\r\n            this.$view.className = 'mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp';\r\n        }\r\n\r\n        this.id = id;\r\n        this.$view.id = id;\r\n        this.$view.setAttribute('type', this.constructor['name'].toLowerCase());\r\n        let counter = 0;\r\n        for (let c = 0; c < this.$view.children.length; c++) {\r\n            let row: HTMLTableRowElement = <HTMLTableRowElement>this.$view.children[c];\r\n            if (row instanceof HTMLTableSectionElement) {\r\n                if (row.tagName === 'THEAD') {\r\n                    headerrow = row;\r\n                    // Its a thead\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingHeader(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                } else {\r\n                    // Its a tbody\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingData(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                }\r\n            } else {\r\n                // fallback, if there are no thead and tbody...\r\n                if (counter === 0) {\r\n                    headerrow = row;\r\n                    this.parsingHeader(row);\r\n                } else {\r\n                    this.parsingData(row);\r\n                }\r\n            }\r\n            counter++;\r\n        }\r\n        if (!headerrow || !this.$headersection) {\r\n            if (!this.$headersection) {\r\n                // find eventually existing thead\r\n                let header = this.$view.getElementsByTagName('thead');\r\n                if (header.length === 0) {\r\n                    this.$headersection = document.createElement('thead');\r\n                    this.$view.appendChild(this.$headersection);\r\n                } else {\r\n                    // take first thead element\r\n                    this.$headersection = <HTMLTableSectionElement>header.item(0);\r\n                }\r\n            }\r\n            if (!headerrow) {\r\n                headerrow = document.createElement('tr');\r\n                this.$headersection.appendChild(headerrow);\r\n            }\r\n        }\r\n\r\n        if (data['columns']) {\r\n            // It is a json must add all things and generate HTML\r\n            for (let i in data['columns']) {\r\n                if (data['columns'].hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                let col = this.parseData(data['columns'][i]);\r\n                this.addHeaderInfo(col);\r\n                this.columns.push(col);\r\n                headerrow.appendChild(col.$element);\r\n            }\r\n            this.tableOption = document.createElement('th');\r\n            this.tableOption.classList.add('tableOption');\r\n            headerrow.appendChild(this.tableOption);\r\n            let context: HTMLElement = this.addOptionItem(null, this.tableOption, true);\r\n            let contentChild: HTMLElement = this.addOptionItem('show', context, true);\r\n            // let simpleLink: HTMLElement = this.addOptionItem('show', contentChild, false);\r\n            this.addOptionItem('show', contentChild, false);\r\n        }\r\n        this.registerEvents(['mousemove', 'mousedown', 'mouseup', 'resize', 'dragstart', 'dragover', 'drop', 'dragend']);\r\n\r\n        // Check for SearchBar\r\n        // if(data[\"searchproperty\"]){\r\n        // Create Full Row\r\n        let searchBar = document.createElement('tr');\r\n        let cell = document.createElement('td');\r\n        cell.setAttribute('colspan', '' + (this.columns.length));\r\n        searchBar.appendChild(cell);\r\n\r\n        let search = document.createElement('input');\r\n        search.className = 'search';\r\n        let that = this;\r\n        search.addEventListener('keyup', function (evt) {\r\n            that.search(evt.target['value']);\r\n        });\r\n\r\n        cell.appendChild(search);\r\n        if (this.resultColumn) {\r\n            if (this.resultColumn.indexOf('#') !== 0) {\r\n                this.countElement = document.createElement('div');\r\n                searchBar.appendChild(this.countElement);\r\n            } else {\r\n                for (let z: number = 0; z < this.$headersection.children.length; z++) {\r\n                    if (this.$headersection.children[z].innerHTML === this.resultColumn) {\r\n                        this.countColumn = <HTMLElement> this.$headersection.children[z];\r\n                        this.countColumnPos = z;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        let first = this.$headersection.children.item(0);\r\n        this.$headersection.insertBefore(searchBar, first);\r\n\r\n        this.updateElement(this.property, null);\r\n\r\n        // now update those elements, that were not loaded currently\r\n    }\r\n\r\n    public tableEvent(type: string, e: Event) {\r\n        let button: number = 0;\r\n        let eventX: number = 0;\r\n        if (e instanceof MouseEvent) {\r\n            button = e.buttons;\r\n            eventX = e.pageX;\r\n        }\r\n        if (type === 'mouseup') {\r\n            this.moveElement = null;\r\n        } else if (type === 'mousedown' || type === 'resize') {\r\n            // End to Resize\r\n            this.moveElement = null;\r\n            if (button === 1) {\r\n                let c: number;\r\n                for (c = 0; c < this.columns.length; c++) {\r\n                    if (this.columns[c].$resize === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = false;\r\n                        break;\r\n                    } else if (this.columns[c].$element === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = true;\r\n                    }\r\n                }\r\n                this.moveTimeStamp = e.timeStamp;\r\n                this.moveX = eventX;\r\n            } else {\r\n                this.moveTimeStamp = 0;\r\n            }\r\n        } else if (type === 'mousemove') {\r\n            if (button === 1 && this.moveElement) {\r\n                if (this.moveTimeStamp && e.timeStamp - this.moveTimeStamp < 2000) {\r\n                    if (this.isDrag) {\r\n                        // FIXME\r\n                    } else {\r\n                        let x = eventX - this.moveX;\r\n                        let width = this.moveElement.$element.offsetWidth;\r\n                        this.moveElement.$element.width = '' + (width + x);\r\n                        e.stopPropagation();\r\n                    }\r\n                }\r\n                this.moveX = eventX;\r\n                this.moveTimeStamp = e.timeStamp;\r\n            }\r\n        } else if (this.isDrag) {\r\n            this.columnDragEvent(type, <DragEvent> e);\r\n        }\r\n    }\r\n\r\n    public parsingHeader(row: HTMLTableRowElement) {\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let column: HTMLTableHeaderCellElement = <HTMLTableHeaderCellElement>row.children[i];\r\n            let id = column.innerHTML.trim();\r\n            let col: Column = null;\r\n            for (let c in this.columns) {\r\n                if (this.columns.hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                if (this.columns[c].label === id) {\r\n                    col = this.columns[c];\r\n                    col.$element = column;\r\n                    break;\r\n                }\r\n            }\r\n            if (col === null) {\r\n                col = new Column();\r\n                col.label = id;\r\n                col.attribute = column.getAttribute('attribute');\r\n                col.$element = column;\r\n                this.columns.push(col);\r\n            }\r\n            this.addHeaderInfo(col);\r\n        }\r\n    }\r\n\r\n    public parsingData(row: HTMLTableRowElement) {\r\n        let id = row.getAttribute('id');\r\n        let item: Data = this.$owner.getItem(id);\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let cell: HTMLTableCellElement = <HTMLTableCellElement>row.children[i];\r\n            let colAttribute = this.columns[i].attribute;\r\n            if (colAttribute.indexOf('\\.') < 0) {\r\n                item[colAttribute] = cell.innerHTML.trim();\r\n            }\r\n        }\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: Object, newValue: Object) {\r\n        if (entity) {\r\n            // Check for Show\r\n            if (this.property && !entity.hasProperty(property)) {\r\n                return;\r\n            }\r\n        }\r\n        if (entity.id === undefined) {\r\n            return;\r\n        }\r\n        let item: BridgeElement = <BridgeElement>this.itemsIds[entity.id];\r\n        let row: HTMLTableRowElement;\r\n        if (!item) {\r\n            item = new BridgeElement(entity);\r\n            this.items.push(item);\r\n            this.itemsIds[entity.id] = item;\r\n        }\r\n        row = this.cells[entity.id];\r\n        if (row) {\r\n            item.gui = row;\r\n        }\r\n        if (this.searching(item) === false) {\r\n            return;\r\n        }\r\n        let cell;\r\n        let showItem = false;\r\n\r\n        if (!row) {\r\n            showItem = true;\r\n            row = document.createElement('tr');\r\n            let count = this.columns.length;\r\n            for (let i = 0; i < count; i++) {\r\n                cell = document.createElement('td');\r\n                row.appendChild(cell);\r\n            }\r\n            this.cells[entity.id] = row;\r\n            item.gui = row;\r\n        }\r\n        for (let c: number = 0; c < this.columns.length; c++) {\r\n            let name = this.columns[c].attribute;\r\n            if (name === property) {\r\n                cell = row.children[c];\r\n                cell.innerHTML = <string>newValue;\r\n            }\r\n        }\r\n        if (showItem) {\r\n            this.showItem(item, true);\r\n        }\r\n        // super.propertyChange(entity, property, newValue, oldValue);\r\n    }\r\n\r\n    public sort(column: Column) {\r\n        if (this.sortColumn === column) {\r\n            if (this.direction === 1) {\r\n                this.direction = -1;\r\n                column.$element.classList.remove('asc');\r\n                column.$element.classList.add('desc');\r\n            } else {\r\n                this.direction = 1;\r\n                column.$element.classList.remove('desc');\r\n                column.$element.classList.add('asc');\r\n            }\r\n        } else {\r\n            if (this.sortColumn !== null) {\r\n                this.sortColumn.$element.classList.remove('desc');\r\n                this.sortColumn.$element.classList.remove('asc');\r\n            }\r\n            this.sortColumn = column;\r\n            this.sortColumn.$element.classList.add('asc');\r\n            this.direction = 1;\r\n        }\r\n        let that = this;\r\n        let sort = function (a: BridgeElement, b: BridgeElement) {\r\n            return that.sorting(a, b);\r\n        };\r\n        this.showedItems.sort(sort);\r\n        let len: number = this.showedItems.length;\r\n        let body = this.$bodysection;\r\n        let i = 0;\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            if (i !== Table.indexOfChild(item)) {\r\n                break;\r\n            }\r\n            i = i + 1;\r\n        }\r\n        while (body.children.length > i) {\r\n            body.removeChild(body.children.item(body.children.length - 1));\r\n        }\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            body.appendChild(item.gui);\r\n            i = i + 1;\r\n        }\r\n\r\n        //      body.removeChild(item.gui);\r\n        //      body.remove\r\n    }\r\n\r\n    public sorting(a: BridgeElement, b: BridgeElement): number {\r\n        let path: string[] = this.sortColumn.attribute.split('.');\r\n        let itemA = a.model.prop;\r\n        let itemB = b.model.prop;\r\n        let check = this.sortColumn.attribute;\r\n        for (let p = 0; p < path.length; p++) {\r\n            check = path[p];\r\n            if (itemA[check]) {\r\n                itemA = itemA[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n            if (itemB[check]) {\r\n                itemB = itemB[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n        if (itemA !== itemB) {\r\n            if (this.direction === 1) {\r\n                return (itemA < itemB) ? -1 : 1;\r\n            }\r\n            return (itemA < itemB) ? 1 : -1;\r\n\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    // Searching\r\n    public search(origSearchText: string): void {\r\n        if (!origSearchText) {\r\n            origSearchText = '';\r\n        }\r\n        let searchText: string = origSearchText.trim().toLowerCase();\r\n        if (searchText === this.lastSearchText && searchText !== '') {\r\n            return; // <==== nothing to be done\r\n        }\r\n        let oldSearch: string = this.lastSearchText;\r\n        this.lastSearchText = searchText;\r\n\r\n        this.parseSearchArray();\r\n        if (searchText !== '' && oldSearch !== null && searchText.indexOf(oldSearch) >= 0 && searchText.indexOf('|') < 0) {\r\n            this.searchArray(this.showedItems);\r\n        } else {\r\n            this.searchSet(this.items);\r\n        }\r\n        this.refreshCounter();\r\n    }\r\n\r\n    public refreshCounter() {\r\n        if (this.countColumn) {\r\n            this.countColumn.innerHTML = this.columns[this.countColumnPos].label + ' (' + this.showedItems.length + ')';\r\n        }\r\n        // var countElement = document.getElementById('talkCount');\r\n        //  if (countElement) {\r\n        //     var txt = (this.showedItems.size() > 0 && searchText.length > 0 ) ? this.options.TEXT_SEARCHLIST : this.options.TEXT_SEARCHFULLLIST;\r\n        //     countElement.innerHTML = txt.replace(\"%LEN%\", this.root['children'].length).replace(\"%COUNT%\", this.showedItems.size()).replace(\"%SEARCH%\", origSearchText);\r\n        // }\r\n        // if (this.countColumn) {\r\n        //     this.countColu1mn.innerHTML = this.countColumn[\"label\"] + \" (\" + this.showedItems.size() + \")\";\r\n        // }\r\n    }\r\n\r\n    public parseSearchArray() {\r\n        let pos: number = 0;\r\n        let split: Array<string> = [];\r\n        let quote: boolean = false;\r\n        for (let i: number = 0; i < this.lastSearchText.length; i++) {\r\n            if ((this.lastSearchText.charAt(i) === ' ') && !quote) {\r\n                let txt = this.lastSearchText.substring(pos, i).trim();\r\n                if (txt.length > 0) {\r\n                    split.push(txt);\r\n                }\r\n                pos = i + 1;\r\n            } else if (this.lastSearchText.charAt(i) === '\\\"') {\r\n                if (quote) {\r\n                    let txt = this.lastSearchText.substring(pos, i).trim();\r\n                    if (txt.length > 0) {\r\n                        split.push(txt);\r\n                    }\r\n                    pos = i + 1;\r\n                } else {\r\n                    pos = i + 1;\r\n                }\r\n                quote = !quote;\r\n            }\r\n        }\r\n        if (pos < this.lastSearchText.length) {\r\n            split.push(this.lastSearchText.substring(pos, this.lastSearchText.length).trim());\r\n        }\r\n        this.searchText = split;\r\n        return split;\r\n    }\r\n\r\n    public searchArray(root: Array<BridgeElement>) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let i: number = 0; i < root.length; i++) {\r\n            let item: BridgeElement = root[i];\r\n            this.showItem(item, this.searching(item));\r\n        }\r\n    }\r\n\r\n    public searchSet(root: BridgeElement[]) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let item of root) {\r\n            let child: BridgeElement = <BridgeElement>item;\r\n            this.showItem(child, this.searching(child));\r\n        }\r\n    }\r\n\r\n    public showItem(item: BridgeElement, visible: boolean) {\r\n        if (visible) {\r\n            this.showedItems.push(item);\r\n            this.$bodysection.appendChild(item.gui);\r\n        } else if (item.gui && item.gui.parentElement) {\r\n            this.$bodysection.removeChild(item.gui);\r\n        }\r\n    }\r\n\r\n    public searching(item: BridgeElement): boolean {\r\n        let fullText: string = '';\r\n        for (let i: number = 0; i < this.searchColumns.length; i++) {\r\n            fullText = fullText + ' ' + item.model.getValue(this.searchColumns[i]);\r\n        }\r\n        fullText = fullText.trim().toLowerCase();\r\n        for (let z: number = 0; z < this.searchText.length; z++) {\r\n            if ('' !== this.searchText[z]) {\r\n                let orSplit: Array<string>;\r\n                if (this.searchText[z].indexOf('|') > 0) {\r\n                    orSplit = this.searchText[z].split('|');\r\n                } else {\r\n                    orSplit = [this.searchText[z]];\r\n                }\r\n                let o: number = 0;\r\n                for (; o < orSplit.length; o++) {\r\n                    let pos: number = orSplit[o].indexOf(':');\r\n                    if (orSplit[o].indexOf('#') === 0 && pos > 1) {\r\n                        // if (searchProperties.contains(propString)) {\r\n                        let value: string = orSplit[o].substring(pos + 1);\r\n                        let column: string = orSplit[o].substring(1, pos - 1);\r\n                        let dataValue: Object = item.model.getValue(column);\r\n                        if (dataValue) {\r\n                            if (dataValue.toString().toLowerCase().indexOf(value) >= 0) {\r\n                                // Search for simple Property\r\n                                break;\r\n                            }\r\n                        }\r\n                    } else if (orSplit[o].length > 1 && orSplit[o].indexOf('-') === 0) {\r\n                        if (fullText.indexOf(orSplit[o].substring(1)) < 0) {\r\n                            break;\r\n                        }\r\n                    } else if (fullText.indexOf(orSplit[o]) >= 0) {\r\n                        // his search word is found in full text\r\n                        break;\r\n                    }\r\n                }\r\n                if (o === orSplit.length) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public getColumn(): Column[] {\r\n        return this.columns;\r\n    }\r\n\r\n    public updateElement(property: string, value: string): void {\r\n        // first clear all elements inside the table:\r\n        for (let item of this.items) {\r\n            if (item instanceof BridgeElement) {\r\n                (<BridgeElement>item).model.removeListener(this);\r\n            }\r\n        }\r\n\r\n        this.items = [];\r\n        this.itemsIds = {};\r\n\r\n        // load all entitys that match the property\r\n        if (this.property !== undefined) {\r\n            let items = this.$owner.getItems();\r\n            for (let j in items) {\r\n                if (items.hasOwnProperty(j)) {\r\n                    let item = items[j];\r\n                    if (item instanceof Data) {\r\n                        if (property === j) {\r\n                            // if (property == item.property) {\r\n                            let i = new BridgeElement(<Data>item);\r\n                            this.items.push(i);\r\n                            this.itemsIds[item.id] = i;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            this.redrawAllElements();\r\n        }\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        if (this.$owner !== null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    protected redrawAllElements() {\r\n        let children: HTMLCollection = this.$bodysection.children;\r\n        // remove old children\r\n        for (let i = 0; i < children.length; i++) {\r\n            let child = children.item(i);\r\n            // remove child\r\n            this.$bodysection.removeChild(child);\r\n        }\r\n\r\n        // load new children\r\n        for (let obj of this.items) {\r\n            // register listeners\r\n            obj.model.addListener(this);\r\n            // create tr\r\n            let row = this.createRow(obj);\r\n            this.$bodysection.appendChild(row);\r\n            this.cells[obj.id] = row;\r\n        }\r\n    }\r\n\r\n    private parseData(column: any): Column {\r\n        let col = new Column();\r\n        col.label = column.label || column.id;\r\n        col.attribute = column.attribute || column.label || column.id;\r\n        col.$element = document.createElement('th');\r\n        col.$element.innerHTML = col.label;\r\n        col.$element.draggable = true;\r\n\r\n        // resize Header\r\n        col.$resize = document.createElement('div');\r\n        col.$resize.classList.add('resize');\r\n        col.$element.appendChild(col.$resize);\r\n\r\n        return col;\r\n    }\r\n\r\n    private createRow(data: BridgeElement): HTMLTableRowElement {\r\n        let tr: HTMLTableRowElement = document.createElement('tr');\r\n\r\n        for (let id of this.columns) {\r\n            let td: HTMLTableDataCellElement = document.createElement('td');\r\n            tr.appendChild(td);\r\n            td.innerHTML = data.model.getValue(id.attribute);\r\n        }\r\n        return tr;\r\n    }\r\n\r\n    private addHeaderInfo(col: Column) {\r\n        let element: HTMLTableCellElement = col.$element;\r\n        let that = this;\r\n        element.classList.add('sort');\r\n        element.addEventListener('click',\r\n            function () {\r\n                that.sort(col);\r\n            },\r\n            false);\r\n    }\r\n\r\n    private columnDragEvent(type: string, e: DragEvent) {\r\n        if (type === 'dragstart') {\r\n            // Target (this) element is the source node.\r\n            this.moveElement.$element.style.opacity = '0.4';\r\n            e.dataTransfer.effectAllowed = 'move';\r\n            e.dataTransfer.setData('text/json', JSON.stringify(Util.toJson(this.moveElement)));\r\n        } else if (type === 'dragenter') {\r\n            // TO Nothing\r\n        } else if (type === 'dragleave') {\r\n            this.moveElement.$element.classList.remove('over');\r\n        } else if (type === 'dragover') {\r\n            if (e.preventDefault) {\r\n                e.preventDefault(); // Necessary. Allows us to drop.\r\n            }\r\n            for (let c = 0; c < this.columns.length; c++) {\r\n                if (this.columns[c].$element === e.target) {\r\n                    this.dragColumn = this.columns[c];\r\n                    this.dragPos = c;\r\n                    this.columns[c].$element.classList.add('over');\r\n                } else {\r\n                    this.columns[c].$element.classList.remove('over');\r\n                }\r\n            }\r\n            if (e.target === this.tableOption) {\r\n                this.tableOption.classList.add('over');\r\n                this.dragPos = this.columns.length;\r\n            } else {\r\n                this.tableOption.classList.remove('over');\r\n            }\r\n            e.dataTransfer.dropEffect = 'move';  // See the section on the DataTransfer object.\r\n        } else if (type === 'drop') {\r\n            // this / e.target is current target element.\r\n            if (e.stopPropagation) {\r\n                e.stopPropagation(); // stops the browser from redirecting.\r\n            }\r\n            if (this.movePos === this.dragPos) {\r\n                return;\r\n            }\r\n            // movePos -> dragPos\r\n            // See the section on the DataTransfer object.\r\n            // DataModel\r\n            this.columns.splice(this.movePos, 1);\r\n            if (this.movePos >= this.dragPos) {\r\n                this.columns.splice(this.dragPos, 0, this.moveElement);\r\n            } else {\r\n                this.columns.splice(this.dragPos - 1, 0, this.moveElement);\r\n            }\r\n\r\n            // Header Line\r\n            let line: HTMLElement = this.moveElement.$element.parentElement;\r\n            line.removeChild(this.moveElement.$element);\r\n            if (this.dragPos < this.columns.length) {\r\n                line.insertBefore(this.moveElement.$element, this.dragColumn.$element);\r\n            } else {\r\n                line.insertBefore(this.moveElement.$element, this.tableOption);\r\n            }\r\n\r\n            let oldElement: Element;\r\n            let newElement: Element;\r\n\r\n            // Now all Childs\r\n            for (let i = 0; i < this.$bodysection.children.length; i++) {\r\n                // Each line\r\n                line = <HTMLElement>this.$bodysection.children.item(i);\r\n                oldElement = line.children.item(this.movePos);\r\n                newElement = line.children.item(this.dragPos);\r\n                line.removeChild(oldElement);\r\n                line.insertBefore(oldElement, newElement);\r\n            }\r\n        } else if (type === 'dragend') {\r\n            // this/e.target is the source node.\r\n            this.moveElement.$element.style.opacity = '1';\r\n            for (let i = 0; i < this.columns.length; i++) {\r\n                this.columns[i].$element.classList.remove('over');\r\n            }\r\n            this.tableOption.classList.remove('over');\r\n        }\r\n    }\r\n\r\n    private addOptionItem(label: string, parent: HTMLElement, sub: boolean): HTMLElement {\r\n        let labelControl;\r\n        if (label) {\r\n            labelControl = document.createElement('a');\r\n            labelControl.appendChild(document.createTextNode(label));\r\n            labelControl.href = 'javascript:void(0);';\r\n            parent.appendChild(labelControl);\r\n        }\r\n        if (sub) {\r\n            let context = document.createElement('div');\r\n            context.classList.add('dropdown-content');\r\n            context.style.setProperty('position', 'absolute');\r\n            parent.appendChild(context);\r\n\r\n            /* When the user clicks on the button,\r\n             toggle between hiding and showing the dropdown content */\r\n            parent.addEventListener(\r\n                'click',\r\n                function () {\r\n                    context.classList.toggle('show');\r\n                },\r\n                false);\r\n            return context;\r\n        }\r\n        return labelControl;\r\n    }\r\n\r\n    private registerEvents(events: string[]) {\r\n        let that = this;\r\n        for (let i = 0; i < events.length; i++) {\r\n            this.$view.addEventListener(events[i], function (evt) {\r\n                return that.tableEvent(events[i], evt);\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\nclass Column {\r\n    label: string;\r\n    attribute: string;\r\n    $element: HTMLTableHeaderCellElement;\r\n    $resize: HTMLDivElement;\r\n    visible: boolean;\r\n}\r\n","import { AutoComplete } from './AutoComplete';\r\nimport { BR } from './BR';\r\nimport { Div } from './Div';\r\nimport { Label } from './Label';\r\n\r\nexport * from './Node';\r\nexport * from './Class';\r\nexport * from './SO';\r\nexport * from './Symbol';\r\n\r\nexport * from './BR';\r\nexport * from './Button';\r\nexport * from './Div';\r\nexport * from './Form';\r\nexport * from './Input';\r\nexport * from './Label';\r\nexport * from './Table';\r\nexport * from './HTML';\r\nexport * from './Dice';\r\nexport * from './AutoComplete';\r\nexport * from './Attribute';\r\nexport * from './Method';\r\nexport * from './ClazzProperty';\r\n\r\nnew AutoComplete();\r\nnew BR();\r\nnew Div();\r\nnew Label();\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class AddNode implements EventHandler {\r\n\r\n    public MIN_SIZE_TO_ADD_NODE: number = 30;\r\n    public MIN_SIZE_TO_ADD_TEXT: number = 10;\r\n    private graph: Graph;\r\n    private svgRect: SVGSVGElement;\r\n    private svgGroupAddNode: SVGSVGElement;\r\n    private svgTextAddNode: SVGSVGElement;\r\n    private svgTextRectAddNode: SVGSVGElement;\r\n    private isRectDrawing: boolean;\r\n    private isDrawToLeft: boolean;\r\n    private isDrawToTop: boolean;\r\n    private isBigEnoughForAddNode: boolean;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(AddNode.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(AddNode.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!this.canHandle()) {\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element.id !== 'RootElement') {\r\n            return false;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element.id === 'RootElement') {\r\n                    this.start(event, element);\r\n\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mousemove':\r\n                this.drawRect(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.removeRect();\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.addNode();\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawRect(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isRectDrawing) {\r\n            return;\r\n        }\r\n\r\n        evt.stopPropagation();\r\n\r\n        let width = Util.getEventX(evt) - this.x;\r\n        let height = Util.getEventY(evt) - this.y;\r\n\r\n        // rectangle is in a negative area, drawn to upper case. not possibble with svg\r\n        if (width < 0) {\r\n            this.isDrawToLeft = true;\r\n            width *= -1;\r\n        } else {\r\n            this.isDrawToLeft = false;\r\n        }\r\n\r\n        if (height < 0) {\r\n            this.isDrawToTop = true;\r\n            height *= -1;\r\n        } else {\r\n            this.isDrawToTop = false;\r\n        }\r\n\r\n        if (width > this.MIN_SIZE_TO_ADD_NODE && height > this.MIN_SIZE_TO_ADD_NODE) {\r\n            this.isBigEnoughForAddNode = true;\r\n        } else {\r\n            this.isBigEnoughForAddNode = false;\r\n        }\r\n\r\n        this.graph.root.style.cursor = 'pointer';\r\n\r\n        // if line wasnt draw\r\n        if (!this.svgRect) {\r\n\r\n            let rectAddNode = Util.createShape({\r\n                tag: 'rect',\r\n                id: 'addNodeRect',\r\n                x: this.x,\r\n                y: this.y,\r\n                width: 1,\r\n                height: 1,\r\n                class: 'SVGAddNode'\r\n            });\r\n\r\n            let group = Util.createShape({ tag: 'g', id: 'groupAddNode' });\r\n            group.appendChild(rectAddNode);\r\n\r\n            this.graph.root.appendChild(group);\r\n            this.svgRect = rectAddNode;\r\n            this.svgGroupAddNode = group;\r\n        }\r\n        else {\r\n\r\n            let svgRectBBox = this.svgRect.getBBox();\r\n\r\n            // if rect is big enough, show text as helper\r\n            if ((svgRectBBox.width > this.MIN_SIZE_TO_ADD_TEXT\r\n                || svgRectBBox.height > this.MIN_SIZE_TO_ADD_TEXT) && !this.svgTextAddNode) {\r\n\r\n                let textAddNode = Util.createShape({\r\n                    tag: 'text',\r\n                    x: this.x,\r\n                    y: this.y - 5,\r\n                    'font-family': 'Verdana',\r\n                    'font-size': 12,\r\n                    fill: 'black'\r\n                });\r\n                textAddNode.textContent = 'Hold on and move to create a new class';\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n\r\n\r\n                // get correct size of text node\r\n                let sizeClientRect: ClientRect = textAddNode.getBoundingClientRect();\r\n\r\n                let rectBackgroundForText = Util.createShape({\r\n                    tag: 'rect',\r\n                    x: this.x,\r\n                    y: this.y - sizeClientRect.height,\r\n                    width: sizeClientRect.width,\r\n                    height: sizeClientRect.height,\r\n                    fill: '#DDD',\r\n                    'stroke-width': 0\r\n                });\r\n\r\n                this.svgTextRectAddNode = rectBackgroundForText;\r\n                this.svgTextAddNode = textAddNode;\r\n                this.svgGroupAddNode.appendChild(rectBackgroundForText);\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n            }\r\n\r\n            if (this.isDrawToLeft) {\r\n                this.svgRect.setAttributeNS(null, 'x', '' + Util.getEventX(evt));\r\n            }\r\n\r\n            if (this.isDrawToTop) {\r\n                this.svgRect.setAttributeNS(null, 'y', '' + Util.getEventY(evt));\r\n            }\r\n\r\n            // set width and height\r\n            this.svgRect.setAttributeNS(null, 'width', width.toString());\r\n            this.svgRect.setAttributeNS(null, 'height', height.toString());\r\n\r\n            // set color\r\n            if (this.isBigEnoughForAddNode) {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode-ready');\r\n\r\n                // draw text\r\n            }\r\n            else {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeRect(): void {\r\n        this.isRectDrawing = false;\r\n        this.isBigEnoughForAddNode = false;\r\n\r\n        this.graph.root.style.cursor = 'default';\r\n\r\n        if (this.svgGroupAddNode) {\r\n            this.graph.root.removeChild(this.svgGroupAddNode);\r\n            this.svgGroupAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgRect) {\r\n            this.svgRect = undefined;\r\n        }\r\n\r\n        if (this.svgTextAddNode) {\r\n            this.svgTextAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgTextRectAddNode) {\r\n            this.svgTextRectAddNode = undefined;\r\n        }\r\n    }\r\n\r\n    private addNode(): void {\r\n\r\n        if (!this.isBigEnoughForAddNode) {\r\n            this.removeRect();\r\n            return;\r\n        }\r\n\r\n        this.removeRect();\r\n        let node = this.graph.addElementWithValues('Class', { x: this.x, y: this.y });\r\n        this.graph.drawElement(node);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isRectDrawing) {\r\n            return;\r\n        }\r\n        this.isRectDrawing = true;\r\n\r\n        this.x = Util.getEventX(evt);\r\n        this.y = Util.getEventY(evt);\r\n    }\r\n\r\n}\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement, Point } from '../elements/BaseElements';\r\nimport { GraphModel } from '../elements/Model';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Control } from '../Control';\r\nimport { Util } from '../util';\r\n\r\nexport class Drag implements EventHandler {\r\n\r\n    private element: DiagramElement;\r\n    private svgElement: SVGSVGElement;\r\n    private dragging = false;\r\n    private reinsert = false;\r\n    private mouseOffset = new Point();\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        if (!this.canHandle()) {\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if ((!this.dragging) && (element.id !== 'RootElement')) {\r\n                    this.element = element;\r\n                    this.svgElement = <SVGSVGElement>element.$view;\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mouseup':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n\r\n                break;\r\n            case 'mousemove':\r\n                if (this.dragging) {\r\n                    this.drag(event, element);\r\n                }\r\n                break;\r\n            case 'mouseleave':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Drag.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Drag.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private reset() {\r\n        this.dragging = false;\r\n        this.svgElement.style.cursor = 'pointer';\r\n\r\n        /*  WORKAROUND\r\n            Chrome got problem with the Node.appendChild() method.\r\n            Sometimes it works, sometimes not.\r\n            So the background is, in the drag method will the current element be appended\r\n            to front of the svg root.\r\n            If this happend, the click event won't fire.\r\n            So it will be fired manually.\r\n            This problem occurs only in chrome.\r\n        */\r\n        if (Util.isChrome()) {\r\n            let clickEvt = Util.createCustomEvent('click');\r\n            this.svgElement.dispatchEvent(clickEvt);\r\n        }\r\n    }\r\n\r\n    private start(evt: Event | any, element: Control) {\r\n\r\n        this.dragging = true;\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n        this.reinsert = true;\r\n\r\n        this.svgElement.style.cursor = 'move';\r\n    }\r\n\r\n    private drag(evt: Event | any, element: DiagramElement) {\r\n\r\n        if (this.reinsert) {\r\n            if (this.element.id !== 'RootElement') {\r\n                // nesseccary to set the dragged object on top of svg children\r\n                this.graph.root.appendChild(this.svgElement);\r\n            }\r\n\r\n            let dragEvent = Util.createCustomEvent('drag');\r\n            element.$view.dispatchEvent(dragEvent);\r\n        }\r\n        this.reinsert = false;\r\n\r\n        evt.stopPropagation();\r\n\r\n        const translation = this.svgElement.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        const sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        const transX = sx + evt.clientX - this.mouseOffset.x;\r\n        const transY = sy + evt.clientY - this.mouseOffset.y;\r\n        this.svgElement.setAttributeNS(null, 'transform', 'translate(' + transX + ' ' + transY + ')');\r\n        this.element.getPos().addNum(transX - sx, transY - sy);\r\n\r\n        if (this.element instanceof Node) {\r\n            (<Node>this.element).redrawEdges();\r\n        }\r\n\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n\r\n\r\n        // resize svg root\r\n        let maxX = this.element.getPos().x + this.element.getSize().x;\r\n        let maxY = this.element.getPos().y + this.element.getSize().y;\r\n\r\n        let domRectRoot = this.graph.root.getBoundingClientRect();\r\n        if(!domRectRoot){\r\n            return;\r\n        }\r\n\r\n        if(maxX > domRectRoot.width){\r\n            this.graph.root.setAttributeNS(null, 'width', '' + maxX);\r\n        }\r\n        \r\n        if(maxY > domRectRoot.height){\r\n            this.graph.root.setAttributeNS(null, 'height', '' + maxY);\r\n        }\r\n    }\r\n}\r\n","import PropertyChangeSupport from '../PropertyChangeSupport';\r\nimport Data from '../Data';\r\nimport {Adapter} from '../Adapter';\r\nimport ClazzProperty from '../elements/nodes/ClazzProperty';\r\n\r\nexport class GraphListener implements PropertyChangeSupport {\r\n    private $owner: ClazzProperty;\r\n\r\n    constructor(owner: ClazzProperty) {\r\n        this.$owner = owner;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        let adapter = this.$owner.getRoot().getAdapter();\r\n        if (adapter) {\r\n            // messages.add(\"{\\\"class\\\":\\\"de.uniks.networkparser.test.model.House\\\",\\\"id\\\":\\\"H1\\\",\\\"rem\\\":{\\\"floor\\\":4},\\\"upd\\\":{\\\"floor\\\":42}}\");\r\n            let myId =  this.$owner.$owner.getId();\r\n            if (myId && myId.length > 0) {\r\n                let pos = myId.indexOf(':');\r\n                if (pos > 0) {\r\n                    myId = myId.substring(0, pos).trim();\r\n                }\r\n            }\r\n            let myName = this.$owner.getName();\r\n            let remJson = {};\r\n            remJson[myName] = oldValue;\r\n            let updJson = {};\r\n            updJson[myName] = newValue;\r\n            let json = {};\r\n            json['id'] = myId;\r\n            json['rem'] = remJson;\r\n            json['upd'] = updJson;\r\n            let message = JSON.stringify(json);\r\n            (<Adapter> adapter).update(message);\r\n        }\r\n    }\r\n}\r\n","import {Graph} from '../elements/';\r\nimport {EventHandler, EventBus} from '../EventBus';\r\nimport {DiagramElement} from '../elements/';\r\nimport {Util} from '../util';\r\n\r\nexport class ImportFile implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(ImportFile.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(ImportFile.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        let type: string = typeof event;\r\n        if (type !== 'DragEvent') {\r\n            return false;\r\n        }\r\n        let evt: DragEvent = <DragEvent>event;\r\n        if (evt.type === 'dragover') {\r\n            this.handleDragOver(evt);\r\n        } else if (evt.type === 'dragleave') {\r\n            if (this.graph.$view !== evt.target) {\r\n                return false;\r\n            }\r\n            this.setBoardStyle('dragleave');\r\n        } else if (evt.type === 'drop') {\r\n            this.handleLoadFile(evt);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public setBoardStyle(typ: string): boolean {\r\n        let b = this.graph.$view;\r\n        Util.removeClass(b, 'Error');\r\n        Util.removeClass(b, 'Ok');\r\n        Util.removeClass(b, 'Add');\r\n        if (typ === 'dragleave') {\r\n            if (b['errorText']) {\r\n                b.removeChild(b['errorText']);\r\n                b['errorText'] = null;\r\n            }\r\n            return true;\r\n        }\r\n        Util.addClass(b, typ);\r\n        if (typ === 'Error') {\r\n            if (!b['errorText']) {\r\n                b['errorText'] = Util.create({tag: 'div', style: 'margin-top: 30%', value: 'NO TEXTFILE'});\r\n                b.appendChild(b['errorText']);\r\n            }\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private handleLoadFile(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n\r\n        let files = evt.dataTransfer.files; // FileList object.\r\n\r\n        if (files.length > 1) {\r\n            evt.dataTransfer.dropEffect = 'none';\r\n            return;\r\n        }\r\n\r\n        // files is a FileList of File objects. List some properties.\r\n        let reader  = new FileReader();\r\n        let output = [];\r\n        let htmlResult = '';\r\n        let that = this;\r\n        for (let i = 0, f; f = files[i]; i++) {\r\n            reader.onload = function(event) {\r\n                htmlResult = event.target['result'];\r\n                console.log('fileContent: ' + htmlResult);\r\n\r\n                // CHANGE TO INTERNAL OBJECT\r\n                if (that.graph) {\r\n                    that.graph.import(htmlResult);\r\n                }\r\n            };\r\n            reader.readAsText(f);\r\n        }\r\n        this.setBoardStyle('dragleave');\r\n    }\r\n\r\n    private handleDragOver(evt: DragEvent): void {\r\n        let error: boolean = true, n: string, f;\r\n        let files = evt.dataTransfer.files;\r\n        // process all File objects\r\n        if (files && files.length > 0) {\r\n            for (let i: number = 0; i < files.length; i += 1) {\r\n                f = files[i];\r\n                if (f.type.indexOf('text') === 0) {\r\n                    error = false;\r\n                } else if (f.type === '') {\r\n                    n = f.name.toLowerCase();\r\n                    if (n.indexOf('json', n.length - 4) !== -1) {\r\n                        error = false;\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            let items = evt.dataTransfer.items;\r\n            if (items && items.length > 0) {\r\n                for (let z = 0; z < items.length; z ++) {\r\n                    if (items[z].type === '' || items[z].type === 'text/plain') {\r\n                        error = false;\r\n                    }\r\n                }\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.\r\n        if (error) {\r\n            this.dragStyler(evt, 'Error');\r\n        } else if (evt.ctrlKey) {\r\n            this.dragStyler(evt, 'Add');\r\n        } else {\r\n            this.dragStyler(evt, 'Ok');\r\n        }\r\n        /* //evt.target['className'] += ' diagramLoadFile';\r\n        '//console.log('handDragOver');*/\r\n    }\r\n\r\n    private dragStyler(event: Event, typ: string) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n        this.setBoardStyle(typ);\r\n    }\r\n\r\n    private handleDragLeave(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n        evt.dataTransfer.dropEffect = 'link'; // Explicitly show this is a copy.\r\n        evt.target['className'] = 'diagram';\r\n        console.log('handDragLeave');\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Class } from '../elements/nodes/Class';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Association } from '../elements/index';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class NewEdge implements EventHandler {\r\n    private graph: Graph;\r\n    private svgLine: SVGSVGElement;\r\n    private isEdgeDrawing: boolean;\r\n    private sourceNode: Node;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    private lastTargetNode: Node;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(NewEdge.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(NewEdge.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!((<KeyboardEvent>event).ctrlKey || EventBus.isHandlerActiveOrFree('NewEdge', true))) {\r\n            this.removeLine();\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element instanceof Node) {\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n\r\n            case 'mousemove':\r\n                this.drawEdge(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.setNewEdgeToNode(event);\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default: break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawEdge(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        let lineToX = Util.getEventX(evt);\r\n        let lineToy = Util.getEventY(evt);\r\n\r\n        let path = `M${this.x} ${this.y} L${lineToX} ${lineToy}`;\r\n        // if line wasnt draw\r\n        if (!this.svgLine) {\r\n\r\n            let attr = {\r\n                tag: 'path',\r\n                id: 'newEdgePath',\r\n                d: path,\r\n                class: 'SVGEdge'\r\n            };\r\n\r\n            let shape = Util.createShape(attr);\r\n            this.svgLine = shape;\r\n\r\n            this.graph.root.appendChild(shape);\r\n            this.graph.root.appendChild(this.sourceNode.$view);\r\n        }\r\n        else {\r\n\r\n            // set new L path\r\n            this.svgLine.setAttributeNS(null, 'd', path);\r\n\r\n            // get node from position\r\n            let targetNode = this.graph.$graphModel.getNodeByPosition(Util.getEventX(evt), Util.getEventY(evt));\r\n\r\n            // if some targetnode is available, so highlight the node\r\n            if (targetNode) {\r\n\r\n                // reset the last one\r\n                if (this.lastTargetNode && this.lastTargetNode.id !== targetNode.id) {\r\n                    this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n                }\r\n\r\n                this.lastTargetNode = targetNode;\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz-drawedge');\r\n            }\r\n            else if (this.lastTargetNode) {\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeLine(): void {\r\n        this.isEdgeDrawing = false;\r\n\r\n        if (this.svgLine) {\r\n            this.graph.root.removeChild(this.svgLine);\r\n            this.svgLine = null;\r\n        }\r\n\r\n        if (this.lastTargetNode) {\r\n            this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n        }\r\n    }\r\n\r\n    private setNewEdgeToNode(event: Event | any): void {\r\n        // get node from position\r\n        let targetNode = this.graph.$graphModel\r\n            .getNodeByPosition(Util.getEventX(event), Util.getEventY(event));\r\n\r\n        if (!targetNode) {\r\n            this.removeLine();\r\n\r\n            return;\r\n        }\r\n\r\n        this.removeLine();\r\n        let edgeType = this.sourceNode.$defaulEdgeType || 'Association';\r\n\r\n        let jsonData = {\r\n            type: edgeType,\r\n            source: this.sourceNode.id,\r\n            target: targetNode.id\r\n        };\r\n\r\n        let newEdge = this.graph.$graphModel.addEdge(<any>jsonData, true);\r\n        this.graph.drawElement(newEdge);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        this.isEdgeDrawing = true;\r\n        this.sourceNode = element as Class;\r\n\r\n        this.x = this.sourceNode.getPos().x + (this.sourceNode.getSize().x / 2);\r\n        this.y = this.sourceNode.getPos().y + (this.sourceNode.getSize().y / 2);\r\n\r\n        // TODO: get this into util or select\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Node } from '../elements/nodes';\r\nimport { Association } from '../elements/edges';\r\nimport { Util } from '../util';\r\nimport { SymbolLibary } from '../elements/nodes/Symbol';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\nimport Attribute from '../elements/nodes/Attribute';\r\n\r\nexport class Select implements EventHandler {\r\n\r\n    private deleteShape: SVGSVGElement;\r\n    private addEdgeShape: SVGSVGElement;\r\n    private copyNodeShape: SVGSVGElement;\r\n    private graph: Graph;\r\n    private padding = 5;\r\n\r\n    private lastSelectedNode: Element;\r\n    private lastSelectedEdge: Element;\r\n\r\n    private isDragged: boolean;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.deleteShape = SymbolLibary.drawSVG({ type: 'Basket', background: true, id: 'trashcan', tooltip: 'Delete class' });\r\n        this.copyNodeShape = SymbolLibary.drawSVG({ type: 'Copynode', background: true, id: 'copyNode', tooltip: 'Copy class' });\r\n        this.addEdgeShape = SymbolLibary.drawSVG({ type: 'Edgeicon', background: true, id: 'addEdge', tooltip: 'Click and drag to connect this class' });\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        let x = Util.getEventX(event);\r\n        let y = Util.getEventY(event);\r\n\r\n        event.stopPropagation();\r\n        if (event.type === 'drag') {\r\n            this.isDragged = true;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            if (element instanceof Node) {\r\n                this.lastSelectedNode = <Element>element.$view;\r\n            }\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n        }\r\n\r\n        if (event.target['id'] === 'background' || element === this.graph.$graphModel) {\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let e = <Node>element;\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.graph.root.appendChild(this.addEdgeShape);\r\n            this.graph.root.appendChild(this.copyNodeShape);\r\n            this.graph.root.appendChild(element.$view);\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'visible');\r\n\r\n            let x = (e.getPos().x + e.getSize().x) + 5;\r\n            let y = e.getPos().y;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y + this.padding})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.copyNodeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 40 + this.padding})`);\r\n            this.copyNodeShape.onclick = (evt) => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let copyClass = (element).copy();\r\n                copyClass.withPos(nextFreePosition.x, nextFreePosition.y);\r\n                this.graph.drawElement(copyClass);\r\n            };\r\n\r\n            this.addEdgeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 80 + this.padding})`);\r\n            this.addEdgeShape.onmousedown = function () {\r\n                EventBus.setActiveHandler('NewEdge');\r\n                element.$view.dispatchEvent(Util.createCustomEvent('mousedown'));\r\n            };\r\n        }\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let clazz = <Node>element;\r\n\r\n            if (Util.isChrome()) {\r\n                if (this.lastSelectedNode && element.id === this.lastSelectedNode.id && !this.isDragged) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            this.isDragged = false;\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            this.lastSelectedNode = <Element>element.$view;\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete class');\r\n\r\n            // draw textbox to edit clazz in one line\r\n            let divInlineEdit = document.createElement('div');\r\n            divInlineEdit.id = 'inlineEdit';\r\n            divInlineEdit.style.position = 'absolute';\r\n            divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n            divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n            divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n            divInlineEdit.style.zIndex = '42';\r\n\r\n            let inputText = document.createElement('input');\r\n            inputText.type = 'text';\r\n            inputText.style.width = '100%';\r\n            inputText.placeholder = 'Add properties, edit label';\r\n\r\n            divInlineEdit.appendChild(inputText);\r\n            document.body.appendChild(divInlineEdit);\r\n\r\n            inputText.addEventListener('focusout', (evt) => {\r\n\r\n                if (Util.isChrome()) {\r\n                    // only if input is empty, remove the inline edit function\r\n                    if ((!inputText.value || inputText.value.length === 0) && (!this.lastSelectedNode || element.id !== this.lastSelectedNode.id)) {\r\n                        this.removeLastInlineEdit();\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                // only if input is empty, remove the inline edit function\r\n                if ((!inputText.value || inputText.value.length === 0)) {\r\n                    this.removeLastInlineEdit();\r\n                }\r\n            });\r\n\r\n            let g = this.graph;\r\n            let propertyTypes: string[] = ['boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'short', 'String', 'void'];\r\n            inputText.addEventListener('keydown', function (evt) {\r\n\r\n                let keyCode = (<any>evt).which;\r\n                let inputValue = <any>inputText.value;\r\n\r\n                if (Util.endsWith(inputValue, ':') && !document.getElementById('selectPropertyType')) {\r\n                    let selectType = document.createElement('select');\r\n                    selectType.id = 'selectPropertyType';\r\n                    selectType.style.width = '100%';\r\n\r\n                    for (let type of propertyTypes) {\r\n                        let selectOption = document.createElement('option');\r\n                        selectOption.value = type;\r\n                        selectOption.innerHTML = type;\r\n                        selectType.appendChild(selectOption);\r\n                    }\r\n\r\n                    selectType.addEventListener('change', function (evt) {\r\n                        let inputValueSplitted = inputValue.split(':');\r\n                        let selectedPropertyType = selectType.options[selectType.selectedIndex].value;\r\n\r\n                        if (inputValueSplitted.length >= 1) {\r\n                            inputText.value = inputValueSplitted[0].trim() + ' : ' + selectedPropertyType;\r\n                            inputText.focus();\r\n                        }\r\n                    });\r\n\r\n                    divInlineEdit.appendChild(selectType);\r\n                }\r\n                else if (!Util.includes(inputValue, ':')) {\r\n                    let selectType = document.getElementById('selectPropertyType');\r\n\r\n                    if (selectType) {\r\n                        selectType.remove();\r\n                    }\r\n                }\r\n\r\n                if (keyCode !== 13) {\r\n                    return;\r\n                }\r\n\r\n                // attribute\r\n                if ((Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) === false) {\r\n                    if (Util.includes(inputValue, ':')) {\r\n                        clazz.addAttribute(inputValue.trim());\r\n                        clazz.reDraw();\r\n                    } else if (Util.includes(inputValue, '=') ) {\r\n                        let attr: Attribute = null;\r\n                        let name = inputValue.substring(0, inputValue.indexOf('=')).trim();\r\n                        for (let child of clazz.getAttributes() ) {\r\n                            if ( name === child.getName()) {\r\n                                attr = child;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (attr) {\r\n                            attr.updateValue(inputValue.substring(inputValue.indexOf('=') + 1).trim());\r\n                        }\r\n                        clazz.reDraw();\r\n                    }\r\n                }\r\n\r\n                // method\r\n                else if (Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) {\r\n                    clazz.addMethod(inputValue.trim());\r\n                    clazz.reDraw();\r\n                }\r\n                // label\r\n                else if (inputValue.trim().split(' ').length === 1 && inputValue.trim().length > 0) {\r\n                    clazz.updateLabel(inputValue.trim());\r\n                }\r\n\r\n                // reset size\r\n                divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n                divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n                divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n\r\n                inputText.value = '';\r\n\r\n                // remove combobox to select type of property\r\n                let selectType = document.getElementById('selectPropertyType');\r\n\r\n                if (selectType) {\r\n                    selectType.remove();\r\n                }\r\n\r\n                // TODO: reload propertiespanel. not working!\r\n                // event wont dispatch\r\n                // let customEvt = Util.createCustomEvent(EventBus.RELOADPROPERTIES);\r\n                // element.$view.dispatchEvent(customEvt);\r\n            });\r\n\r\n            (<any>divInlineEdit.children[0]).focus();\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Association) {\r\n            this.graph.root.appendChild(element.$view);\r\n            this.graph.root.appendChild(element.$sNode.$view);\r\n            this.graph.root.appendChild(element.$tNode.$view);\r\n\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete edge');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            let edge = <Association>element;\r\n            this.lastSelectedEdge = edge.$view;\r\n\r\n            Util.addClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Select.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Select.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private setTooltipOfShape(shape: SVGSVGElement, tooltip: string): void {\r\n        if (!shape || !shape.hasChildNodes()) {\r\n            return;\r\n        }\r\n\r\n        let titleElement = <SVGSVGElement>shape.childNodes[0];\r\n        if (!titleElement || titleElement.tagName !== 'title') {\r\n            return;\r\n        }\r\n\r\n        titleElement.textContent = tooltip;\r\n    }\r\n\r\n    private resetLastSelectedElements() {\r\n        // reset the last one\r\n        if (this.lastSelectedNode) {\r\n            Util.removeClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.lastSelectedNode = undefined;\r\n        }\r\n\r\n        if (this.lastSelectedEdge) {\r\n            Util.removeClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n            this.lastSelectedEdge = undefined;\r\n        }\r\n\r\n        this.removeLastInlineEdit();\r\n    }\r\n\r\n    private removeLastInlineEdit(): void {\r\n        // remove last inline edit of clazz\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n\r\n            // its not supported in internet explorer\r\n            // lastInlineEdit.remove();\r\n        }\r\n    }\r\n\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\n\r\nexport class Zoom implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n    }\r\n\r\n    public handle(e: any, element: DiagramElement): boolean {\r\n        let delta = e.deltaY || e.wheelDeltaY || -e.wheelDelta;\r\n        let d = 1 + (delta / 1000);\r\n\r\n        let values = this.graph.root.getAttribute('viewBox').split(' ');\r\n        const newViewBox = `${values[0]} ${values[1]} ${parseInt(values[2]) * d} ${parseInt(values[3]) * d}`;\r\n        this.graph.root.setAttribute('viewBox', newViewBox);\r\n\r\n        e.preventDefault();\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Zoom.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Zoom.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n}\r\n","export * from './Drag';\r\nexport * from './Select';\r\nexport * from './Zoom';\r\nexport * from './NewEdge';\r\nexport * from './ImportFile';\r\nexport * from './AddNode';\r\n","import { Association } from '../elements/edges';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport Layout from './Layout';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\n\r\nexport class DagreLayout implements Layout {\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        if (!window['dagre']) {\r\n            return;\r\n        }\r\n        let model = graph.$graphModel;\r\n        let g = new window['dagre'].graphlib.Graph();\r\n\r\n        g.setGraph({ marginx: 100, marginy: 20 }).setDefaultEdgeLabel(function () {\r\n            return {};\r\n        });\r\n\r\n        for (let node of model.nodes) {\r\n            g.setNode(node.id, { width: node.getSize().x, height: node.getSize().y });\r\n        }\r\n\r\n        for (let edge of model.edges) {\r\n            g.setEdge(edge.$sNode.id, edge.$tNode.id);\r\n        }\r\n\r\n        window['dagre'].layout(g);\r\n\r\n        g.nodes().forEach(function (nodeId: string) {\r\n            for (let node of model.nodes) {\r\n                if (node.id === nodeId) {\r\n                    node.withPos(g.node(nodeId).x - g.node(nodeId).width / 2, g.node(nodeId).y - g.node(nodeId).height / 2);\r\n                }\r\n            }\r\n        });\r\n        g.edges().forEach(function (e: any) {\r\n            for (let edge of model.edges) {\r\n                if (edge.$sNode.id === e.v && edge.$tNode.id === e.w) {\r\n                    let size = g.edge(e).points.length;\r\n                    edge.clearPoints();\r\n                    for (let i = 0; i < size; i++) {\r\n                        let point: SVGPoint = g.edge(e).points[i];\r\n                        edge.addPoint(point.x, point.y);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n}\r\n","import {DiagramElement} from '../elements/BaseElements';\r\nimport Layout from './Layout';\r\nimport {Graph} from '../elements/Graph';\r\nimport {Association} from '../elements/edges/Association';\r\nimport {Node} from '../elements/nodes/Node';\r\nimport {Control} from '../Control';\r\n\r\nexport class LayoutGraphMin {\r\n    public nodes: Object = {};\r\n    public edges: Array<Object> = [];\r\n    public outEdges: Object = {};\r\n    public inEdges: Object = {};\r\n    public dummyNodes: Array<LayoutGraphNode> = [];\r\n    public dummyEdges: Object = {};\r\n    public count: number = 0;\r\n    public minRank: number = Number.POSITIVE_INFINITY;\r\n    public maxRank: number = 0;\r\n    public maxHeight: number = 0;\r\n    public maxWidth: number = 0;\r\n    public ranksep: number = 0;\r\n    public edgesLabel: Array<Object> = [];\r\n\r\n    public nodeCount(): number {\r\n        return this.count;\r\n    }\r\n\r\n    public node(id: string) {\r\n        return this.nodes[id];\r\n    }\r\n\r\n    public setNode(id: string, n: LayoutGraphNode) {\r\n        if (n && !this.nodes[id]) {\r\n            this.nodes[id] = n;\r\n            this.count = this.count + 1;\r\n        } else if (!n && this.nodes[id]) {\r\n            delete this.nodes[id];\r\n        }\r\n    }\r\n}\r\n\r\nexport class LayoutGraphNode {\r\n    public id: string;\r\n    public width: number;\r\n    public height: number;\r\n    public x: number;\r\n    public y: number;\r\n    public edgeObj: LayoutGraphEdge;\r\n    public rank: number;\r\n\r\n    constructor(id: string, width: number, height: number, x: number, y: number) {\r\n        this.id = id;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n\r\nexport class LayoutGraphEdge {\r\n    public source: string;\r\n    public target: string;\r\n}\r\n\r\n// \t\t\t\t######################################################### DagreGraph #########################################################\r\nexport class DagreLayoutMin implements Layout {\r\n    public static EDGE_KEY_DELIM = '\\x01';\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        let g, layoutNode, nodes, newEdge, edges;\r\n        let i, n, x, y, sId, tId, split = DagreLayoutMin.EDGE_KEY_DELIM;\r\n        let e: Association;\r\n\r\n        nodes = node['nodes'];\r\n        edges = node['edges'];\r\n        g = new LayoutGraphMin();\r\n\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            g.setNode(n.id, new LayoutGraphNode(n.id, n.getSize().x, n.getSize().y, n.getPos().x, n.getPos().y));\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            sId = this.getNodeId(e.$sNode);\r\n            tId = this.getNodeId(e.$tNode);\r\n            if (sId > tId) {\r\n                let tmp = tId;\r\n                tId = sId;\r\n                sId = tmp;\r\n            }\r\n            let idAB = sId + split + tId + split;\r\n            let idBA = tId + split + sId + split;\r\n            if (sId !== tId && g.edgesLabel.indexOf(idAB) < 0 && g.edgesLabel.indexOf(idBA) < 0) {\r\n                newEdge = {source: sId, target: tId, minlen: 1, weight: 1};\r\n                g.edges.push(newEdge);\r\n                g.edgesLabel.push(idAB);\r\n                // In Edges\r\n                if (!g.inEdges[tId]) {\r\n                    g.inEdges[tId] = [];\r\n                }\r\n                g.inEdges[tId].push(newEdge);\r\n\r\n                // Out Edges\r\n                if (!g.outEdges[sId]) {\r\n                    g.outEdges[sId] = [];\r\n                }\r\n                g.outEdges[sId].push(newEdge);\r\n            }\r\n        }\r\n        this.layouting(g);\r\n        // Set the layouting back\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            layoutNode = g.node(n.id);\r\n            x = n.getPos().x;\r\n            y = n.getPos().y;\r\n            if (x < 1 && y < 1) {\r\n                n.withPos(Math.ceil(layoutNode.x), Math.ceil(layoutNode.y));\r\n            }\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            // OBSOLETE method:  e.calc(graph.canvas);\r\n        }\r\n        graph.draw();\r\n    }\r\n\r\n    public getNodeId(node: Control): string {\r\n        if (node.$owner) {\r\n            return this.getNodeId(node.$owner) || node.id;\r\n        }\r\n        return node.id;\r\n    }\r\n\r\n    public layouting(g: LayoutGraphMin) {\r\n        this.longestPath(g);\r\n        this.normalizeRanks(g);\r\n        this.normalizeEdge(g);\r\n        // this.setSimpleOrder(g);\r\n        this.order(g);\r\n        g.ranksep = 25;\r\n        // remove Dummy\r\n        this.removeDummy(g);\r\n        this.position(g);\r\n    }\r\n\r\n    public setSimpleOrder(g: LayoutGraphMin) {\r\n        let i, n;\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            n.order = n.rank;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Applies heuristics to minimize edge crossings in the graph and sets the best\r\n     * order solution as an order attribute on each node.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Graph must be DAG\r\n     *    2. Graph nodes must be objects with a \"rank\" attribute\r\n     *    3. Graph edges must have the \"weight\" attribute\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Graph nodes will have an \"order\" attribute based on the results of the\r\n     *       algorithm.\r\n     */\r\n    public order(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        let visited = {};\r\n        let node, n, order, i;\r\n        for (i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (n in g.nodes) {\r\n            if (visited[n]) {\r\n                continue;\r\n            }\r\n            visited[n] = true;\r\n            node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank].push(n);\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                g.nodes[layering[order][n]].order = parseInt(n);\r\n            }\r\n        }\r\n        // Fix resolve conflict\r\n        for (order in layering) {\r\n            if (layering[order].length > 1) {\r\n                for (n in layering[order]) {\r\n                    if (layering[order].hasOwnProperty(n) === false) {\r\n                        continue;\r\n                    }\r\n                    let name = layering[order][n];\r\n                    let sum = 0;\r\n                    let weight = 1;\r\n                    let edges = g.dummyEdges[name];\r\n                    if (edges) {\r\n                        for (i in edges) {\r\n                            if (edges.hasOwnProperty(i) === false) {\r\n                                continue;\r\n                            }\r\n                            let edge = edges[i];\r\n                            let nodeU = g.node(edge.target);\r\n                            sum = sum + (edge.weight * nodeU.order);\r\n                            weight = weight + edge.weight;\r\n                        }\r\n                    }\r\n                    g.node(name).barycenter = sum / weight;\r\n                    g.node(name).weight = weight;\r\n                }\r\n            } else if (layering[order].length > 0) {\r\n                for (n in layering[order]) {\r\n                    let name = layering[order][n];\r\n                    g.node(name).barycenter = 1;\r\n                    g.node(name).weight = 1;\r\n                }\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                let node = g.nodes[layering[order][n]];\r\n                node.order = parseInt(n) + node.barycenter * node.weight;\r\n                if (isNaN(node.order)) {\r\n                    console.log('ERROR');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public removeDummy(g: LayoutGraphMin) {\r\n        for (let z in g.dummyNodes) {\r\n            let node = g.dummyNodes[z];\r\n            g.setNode(node.id, null);\r\n        }\r\n        g.dummyNodes = [];\r\n        g.dummyEdges = {};\r\n    }\r\n\r\n    /*\r\n     * Breaks any long edges in the graph into short segments that span 1 layer\r\n     * each. This operation is undoable with the denormalize function.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. The input graph is a DAG.\r\n     *    2. Each node in the graph has a \"rank\" property.\r\n     *\r\n     * Post-condition:\r\n     *\r\n     *    1. All edges in the graph have a length of 1.\r\n     *    2. Dummy nodes are added where edges have been split into segments.\r\n     *    3. The graph is augmented with a \"dummyChains\" attribute which contains\r\n     *       the first dummy in each chain of dummy nodes produced.\r\n     */\r\n    public normalizeEdge(g: LayoutGraphMin): void {\r\n        let i: number = 1;\r\n        for (let id in g.edges) {\r\n            let e: LayoutGraphEdge = <LayoutGraphEdge>g.edges[id];\r\n            let v: string = e.source;\r\n            let vRank = g.node(v).rank;\r\n            const w: string = e.target;\r\n            const wRank: number = g.node(w).rank;\r\n            let name: string;\r\n\r\n            if (wRank === vRank + 1) {\r\n                continue;\r\n            }\r\n\r\n            let dummy;\r\n            for (vRank = vRank + 1; vRank < wRank; ++vRank) {\r\n                name = '_d' + e.source + e.target + (i++);\r\n                let newEdge = {source: v, target: name, minlen: 1, weight: 1};\r\n                dummy = new LayoutGraphNode(name, 0, 0, 0, 0);\r\n                dummy.edgeObj = e;\r\n                dummy.rank = vRank;\r\n                // Dummy Edges\r\n                if (!g.dummyEdges[v]) {\r\n                    g.dummyEdges[v] = [];\r\n                }\r\n                g.dummyEdges[v].push(newEdge);\r\n\r\n                g.dummyNodes.push(dummy);\r\n                g.setNode(dummy.id, dummy);\r\n                v = name;\r\n            }\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Initializes ranks for the input graph using the longest path algorithm. This\r\n     * algorithm scales well and is fast in practice, it yields rather poor\r\n     * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\r\n     * ranks wide and leaving edges longer than necessary. However, due to its\r\n     * speed, this algorithm is good for getting an initial ranking that can be fed\r\n     * into other algorithms.\r\n     *\r\n     * This algorithm does not normalize layers because it will be used by other\r\n     * algorithms in most cases. If using this algorithm directly, be sure to\r\n     * run normalize at the end.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Input graph is a DAG.\r\n     *    2. Input graph node labels can be assigned properties.\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Each node will be assign an (unnormalized) \"rank\" property.\r\n     */\r\n    public longestPath(g: LayoutGraphMin) {\r\n        let i, n, visited = [];\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            visited.push(i);\r\n            n.rank = this.findAllPaths(g, n, 0, visited);\r\n            g.minRank = Math.min(g.minRank, n.rank);\r\n        }\r\n    }\r\n\r\n    public findAllPaths(g: LayoutGraphMin, n: Node, currentCost: number, path: Array<String>) {\r\n        let min: number = 0;\r\n        let id: string;\r\n        let z: number;\r\n        let target;\r\n        if (g.outEdges[n.id]) {\r\n            for (z = 0; z < g.outEdges[n.id].length; z++) {\r\n                id = g.outEdges[n.id][z].target;\r\n                target = g.nodes[id];\r\n                if (path[id]) {\r\n                    min = Math.min(min, target.rank);\r\n                } else if (path.indexOf(id) < 0) {\r\n                    min = Math.min(min, this.findAllPaths(g, target, currentCost - 2, path));\r\n                } else {\r\n                    min = currentCost;\r\n                }\r\n            }\r\n            return min;\r\n        }\r\n        return currentCost;\r\n    }\r\n\r\n    /*\r\n     * Adjusts the ranks for all nodes in the graph such that all nodes v have\r\n     * rank(v) >= 0 and at least one node w has rank(w) = 0.\r\n     */\r\n    public normalizeRanks(g: LayoutGraphMin) {\r\n        let min = g.minRank;\r\n        let value;\r\n        g.maxRank = Number.NEGATIVE_INFINITY;\r\n        g.maxHeight = 0;\r\n        g.maxWidth = 0;\r\n        for (let i in g.nodes) {\r\n            let node = g.nodes[i];\r\n            if (node.rank !== undefined) {\r\n                node.rank -= min;\r\n                value = Math.abs(node.rank);\r\n                if (value > g.maxRank) {\r\n                    g.maxRank = value;\r\n                }\r\n                g.maxHeight = Math.max(g.maxHeight, node.height);\r\n                g.maxWidth = Math.max(g.maxWidth, node.width);\r\n            }\r\n        }\r\n    }\r\n\r\n    public position(g: LayoutGraphMin) {\r\n        this.positionY(g);\r\n        let list = this.positionX(g);\r\n        for (let i in list) {\r\n            for (let pos in list[i]) {\r\n                if (list[i].hasOwnProperty(pos) === false) {\r\n                    continue;\r\n                }\r\n                if (g.node(list[i][pos])) {\r\n                    g.node(list[i][pos]).x = parseInt(pos) * g.maxWidth;\r\n                }\r\n            }\r\n\r\n        }\r\n    }\r\n\r\n    public positionY(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        let rankSep = g.ranksep;\r\n        let prevY = 0;\r\n        for (let layer in layering) {\r\n            let maxHeight = g.maxHeight;\r\n            for (let v in layering[layer]) {\r\n                if (layering[layer].hasOwnProperty(v) === false) {\r\n                    continue;\r\n                }\r\n                let id = layering[layer][v];\r\n                g.nodes[id].y = prevY + maxHeight / 2;\r\n            }\r\n            prevY += maxHeight + rankSep;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\r\n     * function will produce a matrix with the ids of each node.\r\n     */\r\n    public buildLayerMatrix(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        for (let i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (let n in g.nodes) {\r\n            let node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank][node.order] = n;\r\n            }\r\n        }\r\n        return layering;\r\n    }\r\n\r\n    public positionX(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        return layering;\r\n    }\r\n}\r\n","import { Point } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport Layout from './Layout';\r\n\r\nexport class Random implements Layout {\r\n\r\n  public layout(graph: Graph) {\r\n\r\n    let model = graph.$graphModel;\r\n\r\n    if (model.nodes) {\r\n      for (let node of model.nodes) {\r\n        let pos: Point = node.getPos();\r\n        if (pos.x === 0 && pos.y === 0) {\r\n          let x = Util.getRandomInt(0, graph.canvasSize.width);\r\n          let y = Util.getRandomInt(0, graph.canvasSize.height);\r\n          node.withPos(x, y);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","export * from './DagreLayout';\r\nexport * from './Random';\r\nexport * from './DagreLayoutMin';\r\n\r\nimport {DagreLayout} from './DagreLayout';\r\nimport {DagreLayoutMin} from './DagreLayoutMin';\r\nimport {Random} from './Random';\r\nnew DagreLayout();\r\nnew DagreLayoutMin();\r\nnew Random();\r\n","import {VirtualKeyBoard} from './VirtualKeyBoard';\r\n\r\nexport {Point} from './elements/BaseElements';\r\nexport {Bridge, DelegateAdapter} from './Bridge';\r\nexport {Graph} from './elements/Graph';\r\nexport * from './elements/nodes';\r\nexport * from './elements/edges';\r\nexport * from './adapters';\r\nexport * from './UML';\r\nimport {Point} from './elements/BaseElements';\r\nimport {Graph} from './elements/Graph';\r\nimport {ClassEditor} from './elements/ClassEditor';\r\nimport {Bridge} from './Bridge';\r\nimport {Util} from './util';\r\nimport * as nodes  from './elements/nodes';\r\nimport * as edges from './elements/edges';\r\nimport {ScrumBoard} from './ScrumBoard';\r\n\r\nif (!window['Point']) {\r\n    window['Point'] = Point;\r\n    window['Graph'] = Graph;\r\n    window['bridge'] = new Bridge();\r\n    window['Util'] = Util;\r\n    window['Class'] = nodes.Class;\r\n    window['Association'] = edges.Association;\r\n    window['SymbolLibary'] = nodes.SymbolLibary;\r\n    window['ClassEditor'] = ClassEditor;\r\n    window['VirtualKeyBoard'] = VirtualKeyBoard;\r\n    window['ScrumBoard'] = ScrumBoard;\r\n}\r\n","'use strict';\r\nimport { CSS } from './CSS';\r\nimport { Node } from './elements/nodes/Node';\r\nimport { DiagramElement, Point } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport class Util {\r\n\r\n    public static isAutoSave: boolean;\r\n\r\n    static getRandomInt(min: number, max: number): number {\r\n        return Math.floor(Math.random() * (max - min + 1)) + min;\r\n    }\r\n\r\n    static createShape(attrs: any): SVGSVGElement {\r\n        let xmlns = attrs.xmlns || 'http://www.w3.org/2000/svg';\r\n        let shape = document.createElementNS(xmlns, attrs.tag);\r\n\r\n        for (let attr in attrs) {\r\n            if (!attrs.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr !== 'tag') {\r\n                shape.setAttribute(attr, attrs[attr]);\r\n\r\n            }\r\n        }\r\n        return <SVGSVGElement><any>shape;\r\n    }\r\n\r\n    static toPascalCase(value: string): string {\r\n        value = value.charAt(0).toUpperCase() + value.substring(1).toLowerCase();\r\n        return value;\r\n    }\r\n\r\n    static isSVG(tag: string): boolean {\r\n        let i,\r\n            list = ['svg', 'path', 'polygon', 'polyline', 'line', 'title', 'rect', 'filter', 'feGaussianBlur', 'feOffset', 'feBlend', 'linearGradient', 'stop', 'text', 'symbol', 'textPath', 'defs', 'fegaussianblur', 'feoffset', 'feblend', 'circle', 'ellipse', 'g'];\r\n        for (i = 0; i < list.length; i += 1) {\r\n            if (list[i] === tag) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    static createHTML(node: any): HTMLElement {\r\n        return <HTMLElement>this.create(node);\r\n    }\r\n    static create(node: any): Element {\r\n        let style, item, xmlns, key, tag, k;\r\n        if (document.createElementNS && (this.isSVG(node.tag) || node.xmlns)) {\r\n            if (node.xmlns) {\r\n                xmlns = node.xmlns;\r\n            } else {\r\n                xmlns = 'http://www.w3.org/2000/svg';\r\n            }\r\n            if (node.tag === 'img' && xmlns) {\r\n                item = document.createElementNS(xmlns, 'image');\r\n                item.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\r\n                item.setAttributeNS('http://www.w3.org/1999/xlink', 'href', node.src);\r\n            } else {\r\n                item = document.createElementNS(xmlns, node.tag);\r\n            }\r\n        } else {\r\n            item = document.createElement(node.tag);\r\n        }\r\n        tag = node.tag.toLowerCase();\r\n        for (key in node) {\r\n            if (!node.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            k = key.toLowerCase();\r\n            if (node[key] === null) {\r\n                continue;\r\n            }\r\n            if (k === 'tag' || k.charAt(0) === '$' || k === '$graphModel') {\r\n                continue;\r\n            }\r\n            if (k.charAt(0) === '#') {\r\n                item[k.substring(1)] = node[key];\r\n                continue;\r\n            }\r\n            if (k === 'rotate') {\r\n                item.setAttribute('transform', 'rotate(' + node[key] + ',' + node.$graphModel.x + ',' + node.$graphModel.y + ')');\r\n                continue;\r\n            }\r\n            if (k === 'value') {\r\n                if (!node[key]) {\r\n                    continue;\r\n                }\r\n                if (tag !== 'input') {\r\n                    if (tag === 'text') {// SVG\r\n                        item.appendChild(document.createTextNode(node[key]));\r\n                    } else {\r\n                        item.innerHTML = node[key];\r\n                    }\r\n                } else {\r\n                    item[key] = node[key];\r\n                }\r\n                continue;\r\n            }\r\n            if (k.indexOf('on') === 0) {\r\n                this.bind(item, k.substring(2), node[key]);\r\n                continue;\r\n            }\r\n            if (k.indexOf('-') >= 0) {\r\n                item.style[key] = node[key];\r\n            } else {\r\n                if (k === 'style' && typeof (node[key]) === 'object') {\r\n                    for (style in node[key]) {\r\n                        if (!node[key].hasOwnProperty(style)) {\r\n                            continue;\r\n                        }\r\n                        if (node[key][style]) {\r\n                            if ('transform' === style) {\r\n                                item.style.transform = node[key][style];\r\n                                item.style.msTransform = item.style.MozTransform = item.style.WebkitTransform = item.style.OTransform = node[key][style];\r\n                            } else {\r\n                                item.style[style] = node[key][style];\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    item.setAttribute(key, node[key]);\r\n                }\r\n            }\r\n        }\r\n        if (node.$parent) {\r\n            node.$parent.appendChild(item);\r\n        }\r\n        if (node.$graphModel) {\r\n            item.$graphModel = node.$graphModel;\r\n        }\r\n        return item;\r\n    }\r\n\r\n    static setSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttribute('width', value);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.setAttribute('height', value);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setAttributeSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttributeNS(null, 'width', value);\r\n        value = Util.getValue(height);\r\n        item.setAttributeNS(null, 'height', value);\r\n    }\r\n\r\n    static setStyleSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setPos(item: any, x: number, y: number): void {\r\n        if (item.x && item.x.baseVal) {\r\n            item.style.left = x + 'px';\r\n            item.style.top = y + 'px';\r\n        } else {\r\n            item.x = x;\r\n            item.y = y;\r\n        }\r\n    }\r\n\r\n    static getValue(value: string | number): number {\r\n        return parseInt(('0' + value).replace('px', ''), 10);\r\n    }\r\n\r\n    static isIE(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('.net') > -1;\r\n    }\r\n\r\n    static isEdge(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('edge') > -1;\r\n    }\r\n\r\n    static isFireFox(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n    }\r\n\r\n    static isSafari(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        return navigator.userAgent.toLowerCase().indexOf('safari') > -1 && !isEdge;\r\n    }\r\n\r\n    static isOpera(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('opera') > -1;\r\n    }\r\n\r\n    static isChrome(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        let isSafari = Util.isSafari();\r\n        return navigator.userAgent.toLowerCase().indexOf('chrome') > -1 && !isEdge && isSafari;\r\n    }\r\n\r\n    static getEventX(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetX'] : event.layerX;\r\n    }\r\n\r\n    static getEventY(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetY'] : event.layerY;\r\n    }\r\n\r\n    static getNumber(str: string): number {\r\n        return parseInt((str || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    static getStyle(styleProp: string): CSS {\r\n        let i, style, diff, current, ref, el = document.createElement('div'), css;\r\n        document.body.appendChild(el);\r\n        css = new CSS(styleProp);\r\n        ref = new CSS(styleProp, el).css;\r\n        style = window.getComputedStyle(el, null);\r\n        el.className = styleProp;\r\n        current = new CSS(styleProp, el).css;\r\n        diff = Util.getNumber(style.getPropertyValue('border-width'));\r\n        for (i in current) {\r\n            if (!current.hasOwnProperty(i)) {\r\n                continue;\r\n            }\r\n            if (i === 'width' || i === 'height') {\r\n                if (Util.getNumber(current[i]) !== 0 && Util.getNumber(current[i]) + diff * 2 !== Util.getNumber(ref[i])) {\r\n                    css.add(i, current[i]);\r\n                }\r\n            } else if (current[i] !== ref[i]) {\r\n                css.add(i, current[i]);\r\n            }\r\n        }\r\n        document.body.removeChild(el);\r\n        return css;\r\n    }\r\n\r\n    static sizeOf(item: string | any, node?: Node): ClientRect {\r\n        let board;\r\n        let rect: ClientRect;\r\n        let addBoard: boolean;\r\n        if (!item) {\r\n            return undefined;\r\n        }\r\n        if (node) {\r\n            board = node.$owner.$view;\r\n            addBoard = false;\r\n        }\r\n\r\n        if (!board) {\r\n            addBoard = true;\r\n            board = Util.createShape({ tag: 'svg', id: 'root', width: 200, height: 200 });\r\n            document.body.appendChild(board);\r\n        }\r\n        if (board.tagName === 'svg') {\r\n            if (typeof item === 'string') {\r\n                item = Util.create({ tag: 'text', $font: true, value: item });\r\n                item.setAttribute('width', '5px');\r\n            }\r\n        } else if (typeof item === 'string') {\r\n            item = document.createTextNode(item);\r\n        }\r\n        board.appendChild(item);\r\n        rect = item.getBoundingClientRect();\r\n        board.removeChild(item);\r\n\r\n        if (addBoard) {\r\n            document.body.removeChild(board);\r\n        }\r\n        return rect;\r\n    }\r\n\r\n    static getColor(style: string, defaultColor?: string) {\r\n        if (style) {\r\n            if (style.toLowerCase() === 'create') {\r\n                return '#008000';\r\n            }\r\n            if (style.toLowerCase() === 'nac') {\r\n                return '#FE3E3E';\r\n            }\r\n            if (style.indexOf('#') === 0) {\r\n                return style;\r\n            }\r\n        }\r\n        if (defaultColor) {\r\n            return defaultColor;\r\n        }\r\n        return '#000';\r\n    }\r\n\r\n    public static utf8$to$b64(str: string): string {\r\n        return window.btoa(encodeURIComponent(str));\r\n    }\r\n\r\n    public static showSVG(control: DiagramElement) {\r\n        let svg = Util.create({\r\n            tag: 'svg',\r\n            style: { left: control.getPos().x, top: control.getPos().y, position: 'absolute' }\r\n        });\r\n        let child = control.getSVG();\r\n        if (child) {\r\n            svg.appendChild(child);\r\n        }\r\n        Util.setSize(svg, control.getSize().x, control.getSize().y);\r\n        document.body.appendChild(svg);\r\n    }\r\n\r\n    public static toJson(ref: JSON | Object): Object {\r\n        let result = {};\r\n        return Util.copy(result, ref, false, false);\r\n    }\r\n\r\n    public static initControl(parent: Control, control: Control, type: string, id: string, json: JSON | Object) {\r\n        if (typeof control.init === 'function') {\r\n            control.init(parent, type, id);\r\n        }\r\n        if (typeof control.load === 'function') {\r\n            control.load(json);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * copy One Json into another\r\n     * @function\r\n     * @param ref reference Json\r\n     * @param src source Json\r\n     * @param full all attributes include privet $\r\n     * @param replace set the original reference or copy it\r\n     * @returns ref\r\n     * @name copy\r\n     */\r\n    public static copy(ref: JSON | Object, src: JSON | Object, full: boolean, replace: boolean) {\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (replace) {\r\n                        ref[i] = src[i];\r\n                        continue;\r\n                    }\r\n                    if (!ref[i]) {\r\n                        if (src[i] instanceof Array) {\r\n                            ref[i] = [];\r\n                        } else {\r\n                            ref[i] = {};\r\n                        }\r\n                    }\r\n                    Util.copy(ref[i], src[i], full, false);\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref[i] = src[i];\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    public static xmlstringify(text: string): string {\r\n        text = text.replace('<', '&lt;');\r\n        text = text.replace('>', '&gt;');\r\n        return text;\r\n    }\r\n\r\n    public static toXML(ref: JSON | Object | any, src: JSON | Object | any, full: boolean, doc: Document): any {\r\n        let name;\r\n        if (!ref) {\r\n            name = src.constructor.name;\r\n            doc = document.implementation.createDocument(null, name, null);\r\n            ref = doc.childNodes[0];\r\n        }\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (!ref.getAttribute(i)) {\r\n                        if (src[i] instanceof Array) {\r\n                            for (let c in src[i]) {\r\n                                if (!src[i].hasOwnProperty(c)) {\r\n                                    continue;\r\n                                }\r\n                                name = src[i][c].constructor.name;\r\n                                let child = doc.createElement(name);\r\n                                ref.appendChild(child);\r\n                                Util.toXML(child, src[i][c], full, doc);\r\n                            }\r\n                        } else {\r\n                            name = src[i].constructor.name;\r\n                            let child = doc.createElement(name);\r\n                            ref.appendChild(child);\r\n                            Util.toXML(child, src[i], full, doc);\r\n                        }\r\n                    } else {\r\n                        Util.toXML(ref.getAttribute(i), src[i], full, doc);\r\n                    }\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref.setAttribute(i, src[i]);\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    static Range(min: Point, max: Point, x: number, y: number) {\r\n        max.x = Math.max(max.x, x);\r\n        max.y = Math.max(max.y, y);\r\n        min.x = Math.min(min.x, x);\r\n        min.y = Math.min(min.y, y);\r\n    }\r\n\r\n    public static getPosition(m: number, n: number, entity: DiagramElement, refCenter: Point) {\r\n        let t, p = [], list, distance = [], min = 999999999, position, i, step = 15;\r\n        let pos: Point = entity.getPos();\r\n        let size: Point = entity.getSize();\r\n        list = [Point.LEFT, Point.RIGHT];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = this.getLRPosition(m, n, entity, list[i]);\r\n            if (t.y >= pos.y && t.y <= (pos.y + size.y + 1)) {\r\n                t.y += (entity['$' + list[i]] * step);\r\n                if (t.y > (pos.y + size.y)) {\r\n                    // Alternative\r\n                    t = Util.getUDPosition(m, n, entity, Point.DOWN, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        list = [Point.UP, Point.DOWN];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = Util.getUDPosition(m, n, entity, list[i]);\r\n            if (t.x >= pos.x && t.x <= (pos.x + size.x + 1)) {\r\n                t.x += (entity['$' + list[i]] * step);\r\n                if (t.x > (pos.x + size.x)) {\r\n                    // Alternative\r\n                    t = this.getLRPosition(m, n, entity, Point.RIGHT, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        for (i = 0; i < p.length; i += 1) {\r\n            if (distance[i] < min) {\r\n                min = distance[i];\r\n                position = p[i];\r\n            }\r\n        }\r\n        return position;\r\n    }\r\n\r\n    public static getUDPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let x, y: number = pos.y;\r\n        if (p === Point.DOWN) {\r\n            y += size.y;\r\n        }\r\n        x = (y - n) / m;\r\n        if (step) {\r\n            x += e['$' + p] * step;\r\n            if (x < pos.x) {\r\n                x = pos.x;\r\n            } else if (x > (pos.x + size.x)) {\r\n                x = pos.x + size.x;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static getLRPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let y: number, x: number = pos.x;\r\n        if (p === Point.RIGHT) {\r\n            x += size.x;\r\n        }\r\n        y = m * x + n;\r\n        if (step) {\r\n            y += e['$' + p] * step;\r\n            if (y < pos.y) {\r\n                y = pos.y;\r\n            } else if (y > (pos.y + size.y)) {\r\n                y = pos.y + size.y;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static hasClass(element: Element, cls: string) {\r\n        let className = element.getAttribute('class');\r\n        return className.indexOf(cls) > 0;\r\n    }\r\n    public static addClass(element: Element, cls: string) {\r\n        if (!Util.hasClass(element, cls)) {\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className + ' ' + cls);\r\n        }\r\n    }\r\n    public static removeClass(element: Element, cls: string) {\r\n        if (Util.hasClass(element, cls)) {\r\n            let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className.replace(reg, ' ').trim());\r\n        }\r\n    }\r\n\r\n    public static startsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.startsWith) {\r\n            return s.indexOf(searchS) === 0;\r\n        }\r\n\r\n        return s.startsWith(searchS);\r\n    }\r\n\r\n    public static endsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.endsWith) {\r\n            let lastIndex = s.lastIndexOf(searchS);\r\n            return lastIndex !== -1 && lastIndex === (s.length - 1);\r\n        }\r\n\r\n        return s.endsWith(searchS);\r\n    }\r\n\r\n    public static includes(s: string, searchS: string): boolean {\r\n        if (!String.prototype.includes) {\r\n            let idx = s.indexOf(searchS);\r\n            return idx > -1;\r\n        }\r\n        if (s === null) {\r\n            return false;\r\n        }\r\n\r\n        return s.includes(searchS);\r\n    }\r\n\r\n    public static isParentOfChild(parent: Element, child: Element): boolean {\r\n\r\n        if (!parent || !child) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isIE()) {\r\n            let children = parent.childNodes;\r\n            // let found = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                let childItem = children[i];\r\n                if (childItem === child) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        return parent.contains(child);\r\n    }\r\n\r\n    public static createCustomEvent(type: string, params?: any): CustomEvent {\r\n        let evt: CustomEvent;\r\n\r\n        if (typeof window['CustomEvent'] !== 'function') {\r\n            params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n            evt = document.createEvent('CustomEvent');\r\n            evt.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\r\n            return evt;\r\n        }\r\n\r\n        evt = new CustomEvent(type);\r\n\r\n        return evt;\r\n    }\r\n\r\n    public static saveToLocalStorage(model: any): boolean {\r\n        if (!this.isAutoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isLocalStorageSupported()) {\r\n            if (model) {\r\n                if (model.$isLoading) {\r\n                    return false;\r\n                }\r\n                let jsonObj = Util.toJson(model);\r\n                let data = JSON.stringify(jsonObj, null, '\\t');\r\n                localStorage.setItem('diagram', data);\r\n            } else {\r\n                localStorage.removeItem('diagram');\r\n            }\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static getDiagramFromLocalStorage(): string {\r\n        if (Util.isLocalStorageSupported()) {\r\n            return localStorage.getItem('diagram');\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    public static isLocalStorageSupported(): boolean {\r\n        if (this.isEdge()) {\r\n            return false;\r\n        }\r\n        return localStorage !== undefined;\r\n    }\r\n}\r\n"],"sourceRoot":""}
Severity: Minor
Found in doc/diagram.js.map by fixme

FIXME found
Open

{"version":3,"sources":["webpack://DiagramJS/webpack/bootstrap","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Adapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Bridge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/BridgeElement.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/CSS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Control.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Data.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventBus.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/JSEPS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Palette.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertiesPanel.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertyBinder.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/RGBColor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/SVGConverter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/ScrumBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Toolbar.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/UML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/VirtualKeyBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/JavaAdapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/BaseElements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/ClassEditor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Graph.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Model.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregate.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Association.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Composition.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Generalisation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Implements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Attribute.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/AutoComplete.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/BR.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Button.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Class.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/ClazzProperty.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Dice.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Div.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Form.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/HTML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/InfoText.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Input.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Label.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Method.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Node.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/SO.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/StereoType.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Symbol.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Table.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/AddNode.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Drag.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/GraphListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/ImportFile.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/NewEdge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Select.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Zoom.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayout.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayoutMin.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/Random.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/main.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/util.ts"],"names":[],"mappings":";;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;;;;AClFA;IAAA;QACW,OAAE,GAAW,IAAI,CAAC;IAG7B,CAAC;IAAD,cAAC;AAAD,CAAC;AAJqB,0BAAO;;;;;;;;;;;;;ACAhB;;;;;;;;;;;;AAEb,wFAA6C;AAC7C,4EAAuC;AACvC,4DAA0B;AAC1B,qEAAkC;AAClC,qEAAkC;AAClC,8EAAiC;AACjC,4DAA4B;AAG5B;IAA4B,0BAAO;IAa/B,gBAAY,QAAsB;QAAlC,YACI,iBAAO,SA6BV;QAxCO,oBAAc,GAAW,EAAE,CAAC;QAC5B,oBAAc,GAAW,EAAE,CAAC;QAC5B,cAAQ,GAAW,EAAE,CAAC;QACtB,cAAQ,GAAW,EAAE,CAAC;QACtB,WAAK,GAAW,EAAE,CAAC;QACnB,eAAS,GAAW,CAAC,CAAC;QACtB,YAAM,GAAY,IAAI,CAAC;QACvB,cAAQ,GAAW,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAkErD,iBAAW,GAAG,UAAU,QAAa;YACxC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC,CAAC;QA/DE,IAAI,CAAC,CAAC;QAEN,IAAI,QAAQ,EAAE;YACV,KAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;SACzB;QAED,IAAI,IAAI,GAAa,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3C,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC9B,IAAI,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,KAAK,IAAI,KAAK,CAAC,EAAE,EAAE;gBACnB,KAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC;aACvD;SACJ;QAED,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC9B,KAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACtC;QACD,KAAI,CAAC,UAAU,CAAC,gBAAK,CAAC,CAAC;QAEvB,IAAI,IAAI,GAAG,KAAI,CAAC;QAChB,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE;YAC5B,IAAI,kBAAkB,GAAG;gBACrB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACrC,CAAC,CAAC;YACF,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;YACtD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;;IACP,CAAC;IAGM,0BAAS,GAAhB,UAAiB,KAAc;QAC3B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC1B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;SACrE;IACL,CAAC;IAGM,2BAAU,GAAjB;QACI,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,cAAc,CAAC;QACxC,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC3B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAChC,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACtC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;QACzB,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEhC,IAAI,IAAI,GAAgB,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAEjD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IAChB,CAAC;IAOM,2BAAU,GAAjB,UAAkB,OAAY;QAC1B,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE;YACzB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC;SAC7D;IACL,CAAC;IAEM,sBAAK,GAAZ;QACI,OAAO,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAC1C,CAAC;IAEM,8BAAa,GAApB,UAAqB,OAAe;QAChC,IAAI,IAAI,GAAa,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACjB,IAAI,CAAC,UAAC;YACN,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC9B,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzC,IAAI,WAAW,YAAY,iBAAO,EAAE;oBAChC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;iBAC/B;qBAAM;oBACH,KAAoB,UAAW,EAAX,2BAAW,EAAX,yBAAW,EAAX,IAAW,EAAE;wBAA5B,IAAI,OAAO;wBACZ,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;qBAC3B;iBACJ;aACJ;SACJ;IACL,CAAC;IAEM,qBAAI,GAAX,UAAY,IAAmB,EAAE,KAAe;QAC5C,IAAI,MAAM,GAAG,EAAE,EAAE,SAAiB,EAAE,EAAU,CAAC;QAC/C,IAAI,OAAM,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;YAE3B,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YACzB,IAAI,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YACjD,IAAI,WAAiB,CAAC;YACtB,IAAI,IAAI,EAAE;gBACN,WAAS,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBACvC,IAAI,CAAC,WAAS,EAAE;oBACZ,WAAS,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;iBACpD;gBAED,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;oBAC/B,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,EAAE;wBAC7C,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;wBACvD,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;4BACvB,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;gCACxB,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;6BAC9C;yBACJ;wBACD,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;yBAGlC;qBACJ;iBACJ;aACJ;iBAAM;gBACH,WAAS,GAAG,EAAE,GAAG,IAAI,CAAC;aACzB;YACD,WAAS,GAAG,WAAS,CAAC,WAAW,EAAE,CAAC;YACpC,MAAM,CAAC,WAAW,CAAC,GAAG,WAAS,CAAC;SACnC;aAAM;YACH,MAAM,GAAS,IAAI,CAAC;SACvB;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACf,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;SAC/B;QAED,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,cAAc,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,eAAe,CAAC,EAAE;YACnG,MAAM,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC;SACjC;QAED,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;QACnD,SAAS,GAAG,SAAS,CAAC,iBAAiB,EAAE,CAAC;QAC1C,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAGlB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE;YAElF,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1C,IAAI,IAAI,GAAS,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAK5C,IAAI,OAAO,EAAE;gBACT,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;wBAC3C,SAAS;qBACZ;oBACD,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;iBACxC;aACJ;YAED,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAI3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC;SACf;QAED,IAAI,OAAO,CAAC;QACZ,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YACnB,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC5B,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3C,OAAO,OAAO,CAAC;SAClB;QAED,IAAI,OAAM,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAM,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,UAAU,EAAE;YAC9G,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YACzC,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;YACxB,WAAI,CAAC,WAAW,CAAC,KAAK,IAAI,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAEvE,IAAI,OAAO,CAAC,EAAE,EAAE;gBACZ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;aACvC;iBAAM;gBACH,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;aAC/B;YAQD,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,UAAU,EAAE;gBAC/E,IAAI,IAAI,GAAU,OAAO,CAAC,OAAO,EAAE,CAAC;gBAEpC,IAAI,GAAG,GAAG,WAAI,CAAC,WAAW,CAAC;oBACvB,GAAG,EAAE,KAAK;oBACV,EAAE,EAAE,MAAM;oBACV,KAAK,EAAE,IAAI,CAAC,CAAC;oBACb,MAAM,EAAE,IAAI,CAAC,CAAC;iBACjB,CAAC,CAAC;gBAEH,IAAI,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC5B,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACtB,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;aAC7D;YACD,OAAO,OAAO,CAAC;SAClB;QACD,OAAO,IAAI,CAAC;IAEhB,CAAC;IAEM,wBAAO,GAAd,UAAe,EAAU;QAErB,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE;YAC9B,OAAO,IAAI,CAAC;SACf;QACD,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC;IAC1C,CAAC;IAEM,yBAAQ,GAAf;QACI,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAEM,wBAAO,GAAd,UAAe,EAAU;QACrB,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE;YACP,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACtB,IAAI,CAAC,IAAI,EAAE;gBACP,IAAI,GAAG,IAAI,cAAI,EAAE,CAAC;gBAClB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;aACzB;SACJ;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAUM,yBAAQ,GAAf,UAAgB,MAAc,EAAE,SAAiB,EAAE,QAAgB,EAAE,QAAiB;QAClF,KAAK,CAAC,0BAA0B,GAAG,QAAQ,GAAG,YAAY,GAAI,CAAE,QAAQ,GAAG,eAAe,GAAG,SAAS,GAAG,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAChJ,IAAI,GAAS,CAAC;QACd,IAAI,EAAU,CAAC;QACf,IAAI,MAAM,YAAY,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;YAExD,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YACvB,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;SAE1B;aAAM,IAAI,MAAM,YAAY,cAAI,EAAE;YAC/B,GAAG,GAAG,MAAM,CAAC;YACb,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;SAClB;aAAM,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YAEpC,GAAG,GAAS,MAAM,CAAC;YACnB,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;SACrB;aAAM;YACH,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;YACnD,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,GAAG,EAAE;YAEL,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;SAGrC;QAcD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,yBAAQ,GAAf,UAAgB,MAAc,EAAE,SAAiB;QAC7C,IAAI,GAAW,CAAC;QAChB,IAAI,EAAU,CAAC;QACf,IAAI,MAAM,YAAY,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;YAExD,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YACvB,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;SAC1B;aAAM,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YAEpC,GAAG,GAAG,MAAM,CAAC;SAEhB;aAAM;YACH,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;YACnD,OAAO;SACV;QACD,IAAI,GAAG,EAAE;YACL,IAAI,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;gBAC/B,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC;aACzB;iBAAM,IAAI,GAAG,YAAY,cAAI,EAAE;gBAC5B,OAAc,GAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;aAC1C;iBAAM;gBACH,OAAO,IAAI,CAAC;aACf;SACJ;IACL,CAAC;IAEM,0BAAS,GAAhB,UAAiB,MAAc,EAAE,SAAiB,EAAE,YAAwB;QAAxB,+CAAwB;QACxE,IAAI,GAAG,GAAW,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACnD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YACzB,OAAO,GAAG,CAAC;SACd;aAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAEhC,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACxB,IAAI,KAAK,IAAI,KAAK,KAAK,CAAC,EAAE;gBACtB,OAAO,KAAK,CAAC;aAChB;SACJ;QACD,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,2BAAU,GAAV,UAAW,SAAiB;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAEM,iCAAgB,GAAvB,UAAwB,SAAiB,EAAE,OAAgB,EAAE,gBAAwB;QACjF,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAC7B,OAAO,GAAG,IAAI,CAAC,UAAU,CAAS,OAAO,CAAC,CAAC;SAC9C;QACD,IAAI,CAAC,OAAO,EAAE;YACV,OAAO,IAAI,CAAC;SACf;QACD,IAAI,SAAS,EAAE;YACX,SAAS,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;SACvC;QACD,OAAO,CAAC,4BAA4B,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,gBAAgB,EAAE;YAClB,IAAI,OAAO,GAAoB,IAAI,eAAe,EAAE,CAAC;YACrD,OAAO,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;YAC5C,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;SACvC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAEM,2BAAU,GAAjB,UAAkB,OAAyB,EAAE,SAAiB;QAC1D,IAAI,CAAC,SAAS,EAAE;YACZ,SAAS,GAAG,EAAE,CAAC;SAClB;QACD,IAAI,MAAe,CAAC;QACpB,IAAI,OAAO,YAAY,MAAM,EAAE;YAC3B,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YACrD,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;SACtB;aAAM;YACH,MAAM,GAAY,OAAO,CAAC;SAC7B;QACD,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAExC,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC7C,QAAQ,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;SACvC;QACD,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtB,OAAO,MAAM,CAAC;IAClB,CAAC;IAEM,0BAAS,GAAhB,UAAiB,GAAU;QACvB,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,QAAQ,EAAE;YACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtC,IAAI,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,OAAO,CAAC,EAAE,KAAK,IAAI,IAAI,OAAO,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE;oBACjD,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;iBACvB;aACJ;SACJ;QACD,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE;YACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtC,IAAI,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,OAAO,CAAC,EAAE,KAAK,IAAI,IAAI,OAAO,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE;oBACjD,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;iBACvB;aACJ;SACJ;IACL,CAAC;IArZa,cAAO,GAAW,sBAAsB,CAAC;IAsZ3D,aAAC;CAAA,CAxZ2B,iBAAO,GAwZlC;AAxZY,wBAAM;AA0ZnB;IAAqC,mCAAO;IAA5C;;IAsCA,CAAC;IAlCG,gCAAM,GAAN,UAAO,GAAU;QACb,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzB,OAAO,IAAI,CAAC;SACf;aAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE;YAC9B,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;SAC3D;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,oCAAU,GAAjB,UAAkB,OAAgB;QAC9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,yCAAe,GAAvB,UAAwB,QAAgB,EAAE,GAAU;QAChD,IAAI,KAAK,GAAG,MAAM,CAAC;QACnB,IAAI,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC5C,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,KAAK,KAAK,SAAS,EAAE;gBACrB,OAAO,KAAK,CAAC;aAChB;SACJ;QACD,IAAI,EAAE,GAAQ,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACvD,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE;YAC1B,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACf,OAAO,IAAI,CAAC;SACf;aAAM;YACH,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SAEnC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IACL,sBAAC;AAAD,CAAC,CAtCoC,iBAAO,GAsC3C;AAtCY,0CAAe;;;;;;;;;;;;;ACraf;;AAGb;IAMI,uBAAY,KAAW;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACnB,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IATc,wBAAU,GAAoB,EAAE,CAAC;IAUpD,oBAAC;CAAA;kBAXoB,aAAa;;;;;;;;;;;;;;;ACHlC,4DAA4B;AAG5B;IAII,aAAY,IAAY,EAAE,IAAU;QAChC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAc,EAAE,IAAI,EAAE,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,IAAI,EAAE;YACP,OAAO;SACV;QAED,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACzC,MAAM,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACvC,KAAK,CAAC,IAAI,EAAE,EAAE;YACV,IAAI,GAAG,CAAC,CAAC;YACT,KAAK,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,KAAK,IAAI,KAAK,KAAK,EAAE,EAAE;gBAEvB,IAAI,MAAM,EAAE;oBACR,IAAI,IAAI,KAAK,eAAe,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,aAAa,EAAE;wBACxG,IAAI,KAAK,KAAK,MAAM,EAAE;4BAClB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;yBAC1B;qBACJ;yBAAM,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,qBAAqB,IAAI,IAAI,KAAK,oBAAoB,IAAI,IAAI,KAAK,kBAAkB,IAAI,IAAI,KAAK,mBAAmB,EAAE;wBAClK,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE;4BAC1D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;yBAC1B;qBACJ;yBAAM,IAAI,IAAI,KAAK,cAAc,EAAE;wBAChC,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE;4BAC7C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;yBAC1B;qBACJ;yBAAM;wBACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;qBAC1B;iBACJ;qBAAM;oBACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;iBAC1B;aACJ;SACJ;IACL,CAAC;IAEa,aAAS,GAAvB;QACI,IAAI,KAAK,EAAE,GAAG,GAAG,WAAI,CAAC,MAAM,CAAC,EAAC,GAAG,EAAE,MAAM,EAAC,CAAC,CAAC;QAE5C,KAAK,GAAG,WAAI,CAAC,MAAM,CAAC,EAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAC,CAAC,CAAC;QACxD,KAAK,CAAC,WAAW,CAAC,WAAI,CAAC,MAAM,CAAC,EAAC,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC;QAClH,KAAK,CAAC,WAAW,CAAC,WAAI,CAAC,MAAM,CAAC,EAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC;QAClF,KAAK,CAAC,WAAW,CAAC,WAAI,CAAC,MAAM,CAAC,EAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAC,CAAC,CAAC,CAAC;QACxF,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACvB,KAAK,GAAG,WAAI,CAAC,MAAM,CAAC,EAAC,GAAG,EAAE,gBAAgB,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,YAAY,EAAE,SAAS,EAAC,CAAC,CAAC;QACrH,KAAK,CAAC,WAAW,CAAC,WAAI,CAAC,MAAM,CAAC,EAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC;QAC/E,KAAK,CAAC,WAAW,CAAC,WAAI,CAAC,MAAM,CAAC,EAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAC,CAAC,CAAC,CAAC;QACpF,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEvB,KAAK,GAAG,WAAI,CAAC,MAAM,CAAC,EAAC,GAAG,EAAE,gBAAgB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAC,CAAC,CAAC;QACvG,KAAK,CAAC,WAAW,CAAC,WAAI,CAAC,MAAM,CAAC,EAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC;QAC/E,KAAK,CAAC,WAAW,CAAC,WAAI,CAAC,MAAM,CAAC,EAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC;QAClF,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEvB,OAAO,GAAG,CAAC;IACf,CAAC;IAEa,gBAAY,GAA1B,UAA2B,GAAW,EAAE,MAAc,EAAE,SAAiB,EAAE,OAAe,EAAE,QAAgB;QACxG,IAAI,GAAG,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC;QACpC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,GAAG,GAAG,CAAC,EAAE;YACT,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAClC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;YACd,IAAI,GAAG,GAAG,CAAC,EAAE;gBACT,OAAO,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE;oBACrB,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE;wBAC/B,KAAK,IAAI,CAAC,CAAC;qBACd;oBACD,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE;wBAC7B,KAAK,IAAI,CAAC,CAAC;wBACX,IAAI,KAAK,KAAK,CAAC,EAAE;4BACb,IAAI,QAAQ,IAAI,GAAG,KAAK,GAAG,EAAE;gCACzB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;6BAC9C;4BACD,MAAM;yBACT;qBACJ;oBACD,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,KAAK,KAAK,CAAC,EAAE;wBAC7C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;wBAC3C,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;qBACjB;oBAED,GAAG,IAAI,CAAC,CAAC;iBACZ;gBACD,IAAI,QAAQ,EAAE;oBACV,OAAO,KAAK,CAAC;iBAChB;gBACD,OAAO,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;aAClC;YACD,OAAO,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;SAC7B;QACD,OAAO,EAAE,CAAC;IACd,CAAC;IAEa,YAAQ,GAAtB,UAAuB,KAAiB,EAAE,SAAc;QACpD,IAAI,IAAI,EAAE,KAAU,EAAE,GAAG,CAAC;QAC1B,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,KAAK,EAAE,EAAE;YAC/C,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC;SACjC;QACD,IAAI,CAAC,SAAS,EAAE;YACZ,OAAO;SACV;QACD,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/C,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;SACjD;aAAM;YACH,KAAK,GAAG,WAAI,CAAC,MAAM,CAAC,EAAC,GAAG,EAAE,OAAO,EAAC,CAAC,CAAC;YACpC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SAC3B;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YACxB,GAAG,GAAG,WAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;YAC5B,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,GAAG,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;SACnF;IACL,CAAC;IAEa,aAAS,GAAvB,UAAwB,KAAiB,EAAE,IAAS;QAChD,IAAI,CAAC,IAAI,EAAE;YACP,OAAO;SACV;QACD,IAAI,KAAK,EAAE,CAAC,EAAE,SAAS,GAAQ,IAAI,CAAC,SAAS,CAAC;QAE9C,IAAI,SAAS,EAAE;YACX,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,KAAK,EAAE,EAAE;gBAC/C,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC;aACjC;SACJ;QACD,IAAI,SAAS,EAAE;YACX,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;gBAClC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;aACxC;SACJ;QACD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YAC5C,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;SAC7C;IACL,CAAC;IAEa,WAAO,GAArB,UAAsB,KAAiB;QACnC,IAAI,IAAI,CAAC;QACT,IAAI,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/C,IAAI,GAAG,WAAI,CAAC,MAAM,CAAC,EAAC,GAAG,EAAE,MAAM,EAAC,CAAC,CAAC;YAClC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;SACjD;aAAM;YACH,IAAI,GAAG,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;SAChD;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,iBAAG,GAAV,UAAW,GAAW,EAAE,KAAa;QACjC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC1B,CAAC;IAEM,iBAAG,GAAV,UAAW,GAAW;QAClB,IAAI,CAAC,CAAC;QACN,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE;YAChB,IAAI,CAAC,KAAK,GAAG,EAAE;gBACX,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aACxB;SACJ;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,uBAAS,GAAhB,UAAiB,GAAW;QACxB,OAAO,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAClE,CAAC;IAEM,0BAAY,GAAnB,UAAoB,KAAiB;QACjC,IAAI,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5C,GAAG,GAAG,GAAG,CAAC;QACV,KAAK,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE;YACpB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;gBACjC,SAAS;aACZ;YACD,IAAI,KAAK,KAAK,QAAQ,EAAE;gBACpB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACnC,GAAG,GAAG,GAAG,GAAG,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;gBACvE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;gBAC5C,GAAG,GAAG,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;aAChE;iBAAM,IAAI,KAAK,KAAK,kBAAkB,EAAE;gBACrC,GAAG,GAAG,GAAG,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;aAChD;iBAAM,IAAI,KAAK,KAAK,YAAY,EAAE;gBAC/B,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,iBAAiB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC5E,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClB,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC1B,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;wBACtB,GAAG,GAAG,CAAC,CAAC;wBACR,MAAM,GAAG,WAAI,CAAC,MAAM,CAAC;4BACjB,GAAG,EAAE,gBAAgB;4BACrB,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,EAAE,EAAE,IAAI;4BACR,EAAE,EAAE,MAAM;4BACV,EAAE,EAAE,MAAM;4BACV,EAAE,EAAE,IAAI;yBACX,CAAC,CAAC;qBACN;yBAAM;wBACH,MAAM,GAAG,WAAI,CAAC,MAAM,CAAC;4BACjB,GAAG,EAAE,gBAAgB;4BACrB,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,EAAE,EAAE,IAAI;4BACR,EAAE,EAAE,IAAI;4BACR,EAAE,EAAE,MAAM;4BACV,EAAE,EAAE,IAAI;yBACX,CAAC,CAAC;wBACH,GAAG,GAAG,CAAC,CAAC;qBACX;oBACD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;oBACzB,OAAO,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE;wBACvB,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;wBAC/B,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;wBAChC,MAAM,CAAC,WAAW,CAAC,WAAI,CAAC,MAAM,CAAC;4BAC3B,GAAG,EAAE,MAAM;4BACX,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;4BACrC,KAAK,EAAE,EAAC,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC;yBACpD,CAAC,CAAC,CAAC;wBACJ,GAAG,IAAI,CAAC,CAAC;qBACZ;oBACD,GAAG,GAAG,GAAG,GAAG,aAAa,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;oBAC7C,SAAS;iBACZ;gBACD,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;aASpD;iBAAM;gBACH,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;aACpD;SACJ;QACD,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QAChB,OAAO,GAAG,CAAC;IACf,CAAC;IACL,UAAC;AAAD,CAAC;AAnPY,kBAAG;;;;;;;;;;;;;;;ACFhB,4DAA0B;AAC1B,uFAA4C;AAE5C;IAsBI;QAdO,cAAS,GAAS,IAAI,CAAC;QAiB1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjE,CAAC;IAEM,gCAAc,GAArB;QACI,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,wCAAsB,GAA7B,UAA8B,OAAc;QACxC,IAAM,IAAI,GAAS,IAAI,cAAI,EAAE,CAAC;QAC9B,IAAI,OAAO,EAAE;YACT,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAM,IAAI,GAAa,OAAO,CAAC,OAAO,EAAE,CAAC;YACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAClC,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACnB,IAAI,IAAI,CAAC,KAAK,EAAE;oBACZ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;wBAC3B,SAAS;qBACZ;oBACD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;iBACzC;qBAAM;oBACH,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;iBAC7B;aACJ;SACJ;QACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IAChB,CAAC;IAQM,yBAAO,GAAd,UAAe,OAAgB;QAC3B,IAAI,UAAU,GAAY,IAAI,CAAC;QAC/B,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;YACxB,IAAI,IAAI,CAAC,aAAa,EAAE;gBACpB,UAAU,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;aAChE;SACJ;QACD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;QAErB,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;SAC1D;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7D,OAAO,OAAO,CAAC;IACnB,CAAC;IAEM,sBAAI,GAAX,UAAY,KAAc,EAAE,QAAkB,EAAE,EAAY;QACxD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;SACvB;QACD,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;YACV,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;SAChB;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;SACjD;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,qCAAmB,GAA1B;QACI,OAAO,IAAI,uBAAa,EAAE,CAAC;IAC/B,CAAC;IAEM,yBAAO,GAAd;QACI,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;SAChC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,4BAAU,GAAjB;QACI,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,6BAAW,GAAlB,UAAmB,IAAS;QAA5B,iBAgHC;QA/GG,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;YAChD,OAAO;SACV;QACD,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;YAC7B,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;gBACvB,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC5C,IAAI,IAAI,CAAC,KAAK,EAAE;oBACZ,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;iBACrD;aACJ;YACD,OAAO;SACV;QACD,IAAI,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,OAAO,GAAU,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;YAC5B,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE;gBACtB,IAAI,QAAQ,UAAC;gBACb,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC7B,IAAI,MAAM,UAAC;gBACX,IAAM,IAAI,GAAG,KAAK,CAAC;gBACnB,IAAI,IAAI,EAAE;oBAIN,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;wBACxC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;qBAC/B;oBACD,SAAS;iBACZ;gBACD,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;oBAExC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACzB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;wBACvD,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;qBAGxB;oBACD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAErB,IAAI,MAAM,KAAK,IAAI,EAAE;wBACjB,SAAS;qBACZ;iBACJ;gBACD,IAAI,MAAM,EAAE;oBACR,IAAI,CAAC,MAAM,EAAE;wBACT,IAAI,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;4BACxB,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;yBACxC;6BAAM;yBAEN;qBACJ;iBACJ;qBAAM;oBACH,IAAI,IAAI,CAAC,MAAM,EAAE;wBAEb,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;wBACrC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;qBACxB;oBACD,IAAI,QAAQ,KAAK,IAAI,EAAE;qBAItB;iBACJ;gBAGD,IAAI,QAAQ,KAAK,QAAQ,EAAE;oBAEvB,SAAS;iBACZ;gBACD,IAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACtD,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,EAAE;oBAG3B,IAAI,IAAI,CAAC,KAAK,EAAE;wBACZ,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;qBACvD;iBACJ;qBAAM;oBACH,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;iBACvD;gBACD,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;aAC5D;SAEJ;QACD,IAAI,MAAM,EAAE;YACR,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE;gBACtB,IAAI,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;oBAC7B,SAAS;iBACZ;gBACD,IAAI,QAAQ,UAAC;gBAQb,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAEpC,IAAI,IAAI,CAAC,MAAM,EAAE;iBAEhB;aACJ;SACJ;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE;YAEf,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,UAAC,EAAS;gBAC5B,KAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YAC5B,CAAC,CACJ,CAAC;SACL;IAEL,CAAC;IAEM,yBAAO,GAAd,UAAe,EAAU;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,yBAAO,GAAd,UAAe,EAAU;QACrB,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,0BAAQ,GAAf;QACI,OAAO,IAAI,MAAM,EAAE,CAAC;IACxB,CAAC;IAEM,0BAAQ,GAAf,UAAgB,MAAc,EAAE,SAAiB,EAAE,QAAgB,EAAE,QAAkB;QACnF,OAAO,KAAK,CAAC;IACjB,CAAC;IASM,gCAAc,GAArB,UAAsB,MAAY,EAAE,QAAgB,EAAE,QAAa,EAAE,QAAa;QAC9E,IAAI,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;YAClD,OAAO;SACV;QACD,IAAI,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAChD,OAAO;SACV;QAED,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAqB5C,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;SAC/C;QACD,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;SAC5C;QACD,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;IAEM,gCAAc,GAArB,UAAsB,EAAS;QAC3B,IAAI,IAAI,CAAC,KAAK,YAAY,gBAAgB,KAAK,KAAK,EAAE;YAClD,OAAO;SACV;QACD,IAAI,OAAO,GAAsB,IAAI,CAAC,KAAM,CAAC;QAC7C,IAAI,OAAO,CAAC,aAAa,EAAE,EAAE;SAE5B;IACL,CAAC;IAQM,+BAAa,GAApB,UAAqB,QAAgB,EAAE,QAAa,EAAE,QAAa;QAC/D,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;YACjD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;SAC/C;IACL,CAAC;IA8BM,uBAAK,GAAZ;QACI,OAAO,IAAI,CAAC,EAAE,CAAC;IACnB,CAAC;IAEM,sBAAI,GAAX,UAAY,IAAmB,EAAE,KAAgB;IAEjD,CAAC;IAEM,yBAAO,GAAd,UAAe,MAAc,EAAE,MAAY;QAEvC,IAAI,MAAM,EAAE;YACR,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBACrD,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACxC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;aACxB;SACJ;IACL,CAAC;IAEM,6BAAW,GAAlB,UAAmB,KAAc;QAC7B,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACvC;aAAM;YACH,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACrE;IACL,CAAC;IAEM,6BAAW,GAAlB,UAAmB,KAAc;QAC7B,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACvC;aAAM;YACH,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACrE;IACL,CAAC;IAKM,6BAAW,GAAlB,UAAmB,QAAgB;QAC/B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,OAAO;SACV;QACD,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC5B,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACvC;QAGD,IAAI,IAAI,CAAC,MAAM,EAAE;YAEb,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;SACvD;QACD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAGzB,IAAI,MAAM,EAAE;YACR,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YAC5C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;SACrH;IACL,CAAC;IAEM,8CAA4B,GAAnC,UAAoC,SAAiB;QACjD,OAAO,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAe,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1E,CAAC;IAKM,2BAAS,GAAhB,UAAiB,GAAU;IAE3B,CAAC;IAEM,0BAAQ,GAAf;QACI,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAEM,2BAAS,GAAhB;QACI,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACjB,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;SAClC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAMS,kCAAgB,GAA1B;QACI,OAAO,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC;IAC7B,CAAC;IAES,4BAAU,GAApB,UAAqB,QAAkB,EAAE,EAAY;QACjD,IAAI,QAAQ,EAAE;YACV,OAAO,QAAQ,CAAC;SACnB;QACD,IAAI,EAAE,EAAE;YAIJ,OAAO,EAAE,GAAG,GAAG,GAAG,OAAO,CAAC;SAC7B;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAES,gCAAc,GAAxB;QACI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACb,OAAO;SACV;QACD,IAAM,IAAI,GAAa,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAClC,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;gBAC3B,SAAS;aACZ;YACD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;SACnD;IACL,CAAC;IAES,uCAAqB,GAA/B,UAAgC,SAAiB,EAAE,WAAwB;QACvE,IAAI,CAAC,WAAW,EAAE;YACd,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,WAAW,YAAY,WAAW,KAAK,KAAK,EAAE;YAC9C,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,IAAI,QAAQ,GAAG,UAAC,CAAM;YAClB,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC;YACxB,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;YAClB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC;QACF,WAAW,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,sBAAI,iCAAY;aAAhB;YACI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAChB,OAAO,EAAE,CAAC;aACb;YACD,IAAI,GAAG,GAAa,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7C,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/B,CAAC;;;OAAA;IACL,cAAC;AAAD,CAAC;AAxdqB,0BAAO;;;;;;;;;;;;;;;ACF7B;IAAA;QACW,SAAI,GAAG,EAAE,CAAC;QAGjB,cAAS,GAAW,EAAE,CAAC;IA4J3B,CAAC;IA1JkB,cAAS,GAAxB,UAAyB,QAAgB;QACrC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,EAAE;YAC7C,QAAQ,GAAG,EAAE,CAAC;SACjB;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;IACM,sBAAO,GAAd;QACI,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAEM,4BAAa,GAApB,UAAqB,MAAc;QAC/B,IAAI,CAAC,MAAM,EAAE;YACT,OAAO;SACV;QACD,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE;YAChB,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1B,KAAK,IAAI,QAAQ,IAAI,IAAI,EAAE;gBACvB,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,KAAK,EAAE;oBACzC,SAAS;iBACZ;gBACD,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,EAAE;oBAClD,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;iBAC3C;aACJ;SACJ;aAAM;YACH,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAE9B,KAAK,IAAI,QAAQ,IAAI,GAAG,EAAE;gBACtB,IAAI,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,KAAK,EAAE;oBACxC,SAAS;iBACZ;gBACD,IAAI,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,KAAK,EAAE;oBACxC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;iBAC1C;qBAAM;oBAEH,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,EAAE;wBAC3C,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;qBAC1C;iBACJ;aACJ;SACJ;IACL,CAAC;IAEM,uBAAQ,GAAf,UAAgB,SAAiB;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;IAEM,uBAAQ,GAAf,UAAgB,SAAiB,EAAE,QAAa;QAC5C,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE;YAC5C,OAAO;SACV;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;QAChC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAEM,oBAAK,GAAZ,UAAa,SAAiB,EAAE,QAAa;QACzC,IAAI,GAAY,CAAC;QACjB,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YACtB,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,KAAK,EAAE;gBACnD,GAAG,GAAG,IAAI,CAAC;aACd;SACJ;aAAM;YACH,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;YAC1B,GAAG,GAAG,IAAI,CAAC;SACd;QACD,IAAI,GAAG,EAAE;YACL,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;SACtD;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAEM,yBAAU,GAAjB,UAAkB,SAAiB,EAAE,QAAa;QAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YACvB,OAAO,IAAI,CAAC;SACf;QACD,IAAI,GAAG,GAAW,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,GAAG,GAAG,CAAC,EAAE;YACT,OAAO,IAAI,CAAC;SACf;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,0BAAW,GAAlB,UAAmB,OAA8B,EAAE,QAAiB;QAChE,IAAI,SAAS,GAA4B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACrE,IAAI,CAAC,SAAS,EAAE;YACZ,SAAS,GAAG,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAC;SACxD;QACD,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAEM,6BAAc,GAArB,UAAsB,OAA8B,EAAE,QAAiB;QACnE,IAAI,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,SAAS,KAAK,IAAI,EAAE;YACpB,OAAO;SACV;QACD,IAAI,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,GAAG,IAAI,CAAC,EAAE;YACV,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;SAC5B;QACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE;YAE3D,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;SACnC;IACL,CAAC;IAEM,0BAAW,GAAlB,UAAmB,QAAgB;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAEM,sBAAO,GAAd,UAAe,SAAiB,EAAE,OAAa;QAC3C,IAAI,OAAO,EAAE;YACT,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;SACzD;aAAM;YACH,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;SAClC;IACL,CAAC;IAEM,wBAAS,GAAhB,UAAiB,GAAW;QACxB,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;YACvB,IAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACtB,OAAO,QAAQ,CAAC;SACnB;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAES,2BAAY,GAAtB,UAAuB,QAAgB;QACnC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAES,iCAAkB,GAA5B,UAA6B,SAAiB,EAAE,QAAgB,EAAE,QAAgB;QAC9E,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAEtC,IAAI,SAAS,GAA4B,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACtE,IAAI,SAAS,EAAE;YACX,KAAK,IAAI,CAAC,IAAI,SAAS,EAAE;gBACrB,SAAS,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;aACpE;SACJ;QAED,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,SAAS,EAAE;YACX,KAAK,IAAI,CAAC,IAAI,SAAS,EAAE;gBACrB,SAAS,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;aACpE;SACJ;IACL,CAAC;IACL,WAAC;AAAD,CAAC;;;;;;;;;;;;;;;;ACzJD;IAAA;IAwGA,CAAC;IAjEiB,yBAAgB,GAA9B,UAA+B,OAAe;QAC1C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;IAClC,CAAC;IAEa,8BAAqB,GAAnC,UAAoC,OAAe,EAAE,QAAkB;QACnE,IAAI,QAAQ,EAAE;YACV,OAAO,IAAI,CAAC,cAAc,KAAK,OAAO,CAAC;SAC1C;QACD,OAAO,IAAI,CAAC,cAAc,KAAK,OAAO,IAAI,IAAI,CAAC,cAAc,KAAK,EAAE,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC;IAC9G,CAAC;IAEa,2BAAkB,GAAhC;QACI,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,KAAK,EAAE,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC;IAC9E,CAAC;IAEa,6BAAoB,GAAlC;QACI,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;IAC7B,CAAC;IAEa,yBAAgB,GAA9B;QACI,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAEM,iBAAQ,GAAf,UAAgB,OAAgB,EAAE,IAAa;QAC3C,IAAI,MAAgB,CAAC;QACrB,IAAI,OAAO,OAAO,CAAC,WAAW,CAAC,KAAK,UAAU,EAAE;YAC5C,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;SACnC;QAED,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE;YAClB,OAAO;SACV;QACD,KAAkB,UAAM,EAAN,iBAAM,EAAN,oBAAM,EAAN,IAAM,EAAE;YAArB,IAAI,OAAK;YACV,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAK,EAAE,OAAO,CAAC,CAAC;SAC5C;IACL,CAAC;IAEM,sBAAa,GAApB,UAAqB,IAAa,EAAE,KAAa,EAAE,OAAa;QAC5D,IAAM,GAAG,GAAW,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,GAAG,GAAG,CAAC,EAAE;YACT,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,UAAU,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAiB,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAClI;aAAM;YACH,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,UAAU,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAiB,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAClI;IACL,CAAC;IAEa,gBAAO,GAArB,UAAsB,OAAuB,EAAE,GAAU;QACrD,IAAI,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE;YACV,KAAoB,UAAQ,EAAR,qBAAQ,EAAR,sBAAQ,EAAR,IAAQ,EAAE;gBAAzB,IAAI,OAAO;gBACZ,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;aAChC;SACJ;IACL,CAAC;IAEa,kBAAS,GAAvB,UAAwB,OAAqB;QAAE,oBAAuB;aAAvB,UAAuB,EAAvB,qBAAuB,EAAvB,IAAuB;YAAvB,mCAAuB;;QAClE,KAAkB,UAAU,EAAV,yBAAU,EAAV,wBAAU,EAAV,IAAU,EAAE;YAAzB,IAAI,OAAK;YACV,IAAI,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAK,CAAC,CAAC;YACxC,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,EAAE;gBAC7C,QAAQ,GAAG,EAAE,CAAC;gBACd,QAAQ,CAAC,QAAQ,CAAC,OAAK,CAAC,GAAG,QAAQ,CAAC;aACvC;YACD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC1B;IACL,CAAC;IAtGa,eAAM,GAAW,QAAQ,CAAC;IAC1B,eAAM,GAAW,QAAQ,CAAC;IAC1B,uBAAc,GAAW,gBAAgB,CAAC;IAC1C,yBAAgB,GAAW,kBAAkB,CAAC;IAC9C,yBAAgB,GAAW,mBAAmB,CAAC;IAC/C,uBAAc,GAAW,iBAAiB,CAAC;IAC3C,0BAAiB,GAAW,oBAAoB,CAAC;IACjD,yBAAgB,GAAW,mBAAmB,CAAC;IAC/C,0BAAiB,GAAW,oBAAoB,CAAC;IACjD,qBAAY,GAAW,eAAe,CAAC;IACvC,wBAAe,GAAW,kBAAkB,CAAC;IAC7C,oBAAW,GAAW,cAAc,CAAC;IACrC,wBAAe,GAAW,kBAAkB,CAAC;IAC7C,oBAAW,GAAW,cAAc,CAAC;IACrC,yBAAgB,GAAW,mBAAmB,CAAC;IAE/C,eAAM,GAAa;QAC7B,QAAQ,CAAC,MAAM;QACf,QAAQ,CAAC,MAAM;QACf,QAAQ,CAAC,cAAc;QACvB,QAAQ,CAAC,gBAAgB;QACzB,QAAQ,CAAC,gBAAgB;QACzB,QAAQ,CAAC,cAAc;QACvB,QAAQ,CAAC,iBAAiB;QAC1B,QAAQ,CAAC,gBAAgB;QACzB,QAAQ,CAAC,iBAAiB;QAC1B,QAAQ,CAAC,YAAY;QACrB,QAAQ,CAAC,WAAW;QACpB,QAAQ,CAAC,eAAe;QACxB,QAAQ,CAAC,eAAe;QACxB,QAAQ,CAAC,WAAW;QACpB,QAAQ,CAAC,gBAAgB;KAC5B,CAAC;IAEa,iBAAQ,GAAG,EAAE,CAAC;IAEd,uBAAc,GAAW,EAAE,CAAC;IAmE/C,eAAC;CAAA;AAxGY,4BAAQ;;;;;;;;;;;;;;;ACPrB;IAAA;IAcA,CAAC;IAXG,sBAAI,mCAAQ;aAAZ;YACI,OAAO,IAAI,CAAC,SAAS,CAAC;QAC1B,CAAC;aAED,UAAa,KAAe;YACxB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC;;;OAJA;IAMD,8BAAM,GAAN,UAAO,KAAkB;QACrB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IACL,oBAAC;AAAD,CAAC;;;;;;;;;;;;;;;;ACbD;IAOI,eAAY,OAAY;QACpB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAG,CAAC,OAAO,IAAI,YAAY,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtF,IAAI,CAAC,MAAM,GAAG,CAAC,yBAAyB,EAAE,gBAAgB,CAAC,CAAC;QAC5D,IAAI,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;QACzF,IAAI,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;QACzE,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;QAC1E,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;IAClB,CAAC;IAEM,mBAAG,GAAV,UAAW,KAAa,IAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9C,oBAAI,GAAX,UAAY,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc,EAAE,KAAa;QAC1E,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE;YACzD,IAAI,CAAC,GAAG,CAAC,2CAA2C,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,MAAM,GAAG,oBAAoB,CAAC,CAAC;SACnI;aAAM;YACH,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,MAAM,GAAG,aAAa,CAAC,CAAC;SAC3F;IACL,CAAC;IACM,4BAAY,GAAnB,UAAoB,CAAS,EAAE,CAAS,EAAE,CAAS,IAAY,CAAC;IACzD,iBAAC,GAAR,UAAS,KAAa,IAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACpJ,uBAAO,GAAd;QACI,OAAO,wBAAwB,CAAC;IACpC,CAAC;IAEM,uBAAO,GAAd;QACI,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,wBAAwB,EAAE,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1G,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YACxC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;oBACpC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC7B,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC1D,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;iBAC/D;aACJ;YACD,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;SAC/B;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,4BAAY,GAAnB,UAAoB,CAAS,EAAE,CAAS,EAAE,CAAS,IAAY,CAAC;IACzD,uBAAO,GAAd,UAAe,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,SAAiB,IAAY,CAAC;IACtF,sBAAM,GAAb,UAAc,EAAU,EAAE,EAAU,EAAE,CAAS,EAAE,SAAiB,IAAY,CAAC;IACxE,4BAAY,GAAnB,UAAoB,CAAS,EAAE,CAAS,EAAE,CAAS,IAAY,CAAC;IACzD,oBAAI,GAAX,UAAY,CAAS,EAAE,CAAS,EAAE,IAAY,IAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACpJ,sBAAM,GAAb,UAAc,CAAS,EAAE,CAAS,IAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9F,sBAAM,GAAb,UAAc,CAAS,EAAE,CAAS,IAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC1E,oBAAI,GAAX,UAAY,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,IAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC7J,4BAAY,GAAnB,UAAoB,KAAa,IAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IACjE,uBAAO,GAAd,UAAe,KAAa,IAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAClG,YAAC;AAAD,CAAC;AA7DY,sBAAK;;;;;;;;;;;;;;;ACKlB;IAMI,iBAAY,KAAY;QAAxB,iBA0BC;QAzBG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACxC,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;QAC1B,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;gCACV,GAAG;YACR,IAAI,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,IAAI,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;YACpC,IAAI,IAAI,EAAE;gBACN,IAAI,MAAM,GAAsB,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACjE,MAAM,CAAC,SAAS,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC;gBACvC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;gBAClC,MAAM,CAAC,OAAO,GAAG,WAAC;oBACd,IAAI,gBAAgB,GAAG,KAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;oBAExD,IAAI,IAAI,GAAG,KAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,GAAG,EAAE,EAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,gBAAgB,CAAC,CAAC,EAAC,EAAE,KAAK,CAAC,CAAC;oBACvG,KAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACjC,CAAC,CAAC;gBACF,OAAK,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;aACpC;QACL,CAAC;;QAhBD,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,WAAW;oBAAxB,GAAG;SAgBX;IAGL,CAAC;IAEM,sBAAI,GAAX;QACI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAEO,4BAAU,GAAlB;IAYA,CAAC;IACL,cAAC;AAAD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;ACzDD,wEAAkD;AAElD,4DAA4B;AAE5B;IAWI,oBAAY,KAAY;QACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAEM,2BAAM,GAAb,UAAc,KAAY,EAAE,OAAuB;QAE/C,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAE1C,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAQ,CAAC,gBAAgB;eACrC,IAAI,CAAC,eAAe,IAAI,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE;YACnE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;SACpC;QAGD,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,EAAE;YAChE,OAAO,IAAI,CAAC;SACf;QACD,IAAI,OAAO,CAAC,EAAE,KAAK,aAAa,EAAE;YAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACxC;QACD,IAAI,OAAO,CAAC,EAAE,KAAK,cAAc,EAAE;YAC/B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SAC3C;QACD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;QAE/B,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,6BAAQ,GAAf;QACI,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAEM,8BAAS,GAAhB;QACI,OAAO,mBAAQ,CAAC,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC;IAEM,8BAAS,GAAhB,UAAiB,MAAe;QAC5B,IAAI,MAAM,EAAE;YACR,mBAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SAC9C;aACI;YACD,mBAAQ,CAAC,oBAAoB,EAAE,CAAC;SACnC;IACL,CAAC;IAEO,gCAAW,GAAlB,UAAmB,KAAU,EAAE,OAAY;IAE5C,CAAC;IAEM,yBAAI,GAAX;QAAA,iBA6BC;QA3BG,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3D,IAAI,CAAC,qBAAqB,CAAC,SAAS,GAAG,wBAAwB,CAAC;QAEhE,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,mBAAmB,CAAC;QAEvD,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;QAC/C,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;QAC9C,IAAI,CAAC,eAAe,CAAC,OAAO,GAAG,WAAC,IAAI,YAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAxB,CAAwB,CAAC;QAG7D,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,aAAa,CAAC;QAChD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;QAC/C,IAAI,CAAC,gBAAgB,CAAC,OAAO,GAAG,WAAC,IAAI,YAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAxB,CAAwB,CAAC;QAE9D,IAAI,gBAAgB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACrD,gBAAgB,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC;QAC1C,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACnD,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAEpD,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QACzD,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC/D,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAEtD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAEM,mCAAc,GAArB,UAAsB,KAAY;QAC9B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;QACvD,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,EAAE;gBAC3C,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;aAC5E;SACJ;QACD,KAAK,CAAC,IAAI,EAAE,CAAC;QAEb,KAAK,CAAC,YAAY,EAAE,CAAC;QACrB,IAAI,KAAK,KAAK,IAAI,CAAC,UAAU,EAAE;YAC3B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;SAC7B;aAAM;YACH,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;SAC7B;IACL,CAAC;IAEM,wCAAmB,GAA1B;QACI,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAEO,yCAAoB,GAA5B,UAA6B,KAAY,EAAE,OAAuB;QAC9D,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE;YAC3B,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;SAC9B;IACL,CAAC;IAEO,mCAAc,GAAtB,UAAuB,GAAU;QAC7B,IAAI,GAAG,EAAE;YACL,GAAG,CAAC,eAAe,EAAE,CAAC;SACzB;QAED,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,SAAS,CAAC;QAC5C,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,iBAAiB,CAAC;QAChD,IAAI,CAAC,qBAAqB,CAAC,SAAS,GAAG,iBAAiB,CAAC;QACzD,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,YAAY,CAAC;IACpD,CAAC;IAEO,qCAAgB,GAAxB,UAAyB,GAAU;QAC/B,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,KAAK,iBAAiB,EAAE;YACnD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;SAC5B;aAAM;YACH,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;SAC5B;IACL,CAAC;IAEO,mCAAc,GAAtB,UAAuB,GAAU;QAC7B,IAAI,GAAG,EAAE;YACL,GAAG,CAAC,eAAe,EAAE,CAAC;SACzB;QAED,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,SAAS,CAAC;QAC5C,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,iBAAiB,CAAC;QAChD,IAAI,CAAC,qBAAqB,CAAC,SAAS,GAAG,wBAAwB,CAAC;QAChE,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,mBAAmB,CAAC;IAC3D,CAAC;IACL,iBAAC;AAAD,CAAC;AAvJY,gCAAU;AAyJvB;IAOI,eAAY,KAAiB,EAAE,OAAY;QAFnC,cAAS,GAAgB,EAAE,CAAC;QAIhC,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,wBAAwB,CAAC,SAAS,GAAG,YAAY,CAAC;QAGvD,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACvE,CAAC;IAEM,oBAAI,GAAX;QACI,IAAI,iBAAiB,GAAmB,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;QACzE,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAC;SAClE;QAED,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC7D,CAAC;IAEM,wCAAwB,GAA/B;QACI,OAAO,IAAI,CAAC,wBAAwB,CAAC;IACzC,CAAC;IAEM,kCAAkB,GAAzB;QACI,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAEM,wBAAQ,GAAf;QACI,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAEM,6BAAa,GAApB;QACI,OAAO,EAAE,CAAC;IACd,CAAC;IAEM,4BAAY,GAAnB;QACI,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SACnC;IACL,CAAC;IAES,gCAAgB,GAA1B,UAA2B,OAAe,EAAE,QAAgB,EAAE,IAAe;QAA7E,iBAeC;QAdG,IAAI,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACrD,aAAa,CAAC,SAAS,GAAG,UAAU,CAAC;QACrC,aAAa,CAAC,SAAS,GAAG,OAAO,CAAC;QAClC,aAAa,CAAC,KAAK,GAAG,QAAQ,CAAC;QAE/B,IAAI,IAAI,KAAK,IAAI,EAAE;YACf,IAAI,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;SAC9B;QACD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAE/B,aAAa,CAAC,OAAO,GAAG,cAAM,YAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAlB,CAAkB,CAAC;QACjD,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QACzD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IAChB,CAAC;IAES,uBAAO,GAAjB,UAAkB,SAAoB;QAClC,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE;YAC5B,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,KAAK,KAAK,SAAS,EAAE;gBACpB,KAAK,CAAC,QAAQ,EAAE,CAAC;aACrB;SACJ;QACD,SAAS,CAAC,MAAM,EAAE,CAAC;QAEnB,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACzB,OAAO,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,EAAE;gBAC5C,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;aAC9E;SACJ;QAGD,IAAI,SAAS,CAAC,UAAU,EAAE,EAAE;YACxB,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;SAC/D;IACL,CAAC;IACL,YAAC;AAAD,CAAC;AAxFqB,sBAAK;AA0F3B;IAAmC,iCAAK;IACpC,uBAAY,KAAiB;QAA7B,YACI,kBAAM,KAAK,EAAE,IAAI,CAAC,SAqFrB;QAnFG,IAAI,IAAI,GAAc,KAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAGxE,IAAI,sBAAsB,GAAyC,WAAI,CAAC,UAAU,CAAC,EAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,wCAAwC,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,EAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAC,EAAC,CAAC,CAAC;QAC9P,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;QAElD,IAAI,oBAAoB,GAAwC,WAAI,CAAC,UAAU,CAAC,EAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,2CAA2C,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAC,EAAC,CAAC,CAAC;QAC/O,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;QAEjD,IAAI,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5C,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;QAE5B,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAE1B,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;QAEpC,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACnD,WAAW,CAAC,WAAW,GAAG,UAAU,CAAC;QACrC,WAAW,CAAC,KAAK,GAAG,mCAAmC,CAAC;QACxD,WAAW,CAAC,SAAS,GAAG,eAAe,CAAC;QAExC,IAAI,IAAI,GAAG,KAAI,CAAC;QAChB,WAAW,CAAC,OAAO,GAAG;YAClB,IAAI,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC;YAC3C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;gBACxB,KAAK,CAAC,+CAA+C,CAAC,CAAC;gBACvD,oBAAoB,CAAC,KAAK,EAAE,CAAC;gBAC7B,OAAO;aACV;YACD,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAC5E,CAAC,CAAC;QACF,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACjC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QAElD,IAAI,aAAa,GAAG,WAAI,CAAC,UAAU,CAAC,EAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,EAAC,WAAW,EAAE,MAAM,EAAC,EAAE,OAAO,EAAE;gBACrI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC;YACnC,CAAC,EAAC,CAAC,CAAC;QAER,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAGnC,IAAI,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACpD,YAAY,CAAC,SAAS,GAAG,eAAe,CAAC;QACzC,YAAY,CAAC,WAAW,GAAG,YAAY,CAAC;QACxC,YAAY,CAAC,KAAK,GAAG,+BAA+B,CAAC;QAErD,YAAY,CAAC,OAAO,GAAG;YACnB,IAAI,aAAa,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAAC;YAC5D,IAAI,CAAC,aAAa,EAAE;gBAChB,OAAO;aACV;YACD,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAC;QAC1D,CAAC,CAAC;QACF,YAAY,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC;QACxC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAGlC,IAAI,WAAW,GAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC5E,IAAI,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAEpD,WAAW,CAAC,OAAO,CAAC,cAAI;YACpB,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE;gBACvC,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAC9C,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;gBACpB,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;gBAC1B,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;aACpC;QACL,CAAC,CAAC,CAAC;QAEH,YAAY,CAAC,QAAQ,GAAG,UAAC,GAAG;YACxB,IAAI,kBAAkB,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC;YAChF,YAAY,CAAC,aAAa,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACrD,CAAC,CAAC;QACF,YAAY,CAAC,SAAS,GAAG,eAAe,CAAC;QACzC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAClC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;;IACtD,CAAC;IAEM,qCAAa,GAApB;QACI,OAAO,YAAY,CAAC;IACxB,CAAC;IAEL,oBAAC;AAAD,CAAC,CA7FkC,KAAK,GA6FvC;AA7FY,sCAAa;AA+F1B;IAAgC,8BAAK;IACjC,oBAAY,KAAiB;eACzB,kBAAM,KAAK,EAAE,IAAI,CAAC;IACtB,CAAC;IAEM,kCAAa,GAApB;QACI,OAAO,0CAA0C,CAAC;IACtD,CAAC;IACL,iBAAC;AAAD,CAAC,CAR+B,KAAK,GAQpC;AARY,gCAAU;AAUvB;IAMI,mBAAY,KAAY,EAAE,KAAc;QAF9B,YAAO,GAAmC,WAAI,CAAC,MAAM,CAAC,EAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAC,CAAC,CAAC;QAGnG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAEM,0BAAM,GAAb;QACI,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YAClB,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS,IAAI,SAAS,CAAC;SAC3C;IACL,CAAC;IAEM,4BAAQ,GAAf;QACI,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YAClB,WAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC;SAChD;IACL,CAAC;IAEM,8BAAU,GAAjB,UAAkB,MAAyB;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,+BAAW,GAAlB,UAAmB,OAAoB;QACnC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,6BAAS,GAAhB,UAAiB,SAAiB,EAAE,OAAoB;QACpD,IAAI,KAAK,GAAoC,WAAI,CAAC,UAAU,CAAC,EAAC,GAAG,EAAE,KAAK,EAAC,CAAC,CAAC;QAC3E,IAAI,KAAK,GAAG,WAAI,CAAC,UAAU,CAAC,EAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAC,CAAC,CAAC;QAC/E,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACzB,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAE3B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,6BAAS,GAAhB;QACI,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAEM,8BAAU,GAAjB;QACI,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAEK,6BAAS,GAAhB;QACK,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IACL,gBAAC;AAAD,CAAC;AAtDY,8BAAS;;;;;;;;;;;;;;;AC/VtB;IAQI,wBAAY,KAAW,EAAE,KAAW,EAAE,cAAsB,EAAE,cAAsB;QAF5E,mBAAc,GAAY,KAAK,CAAC;QAGpC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACzC,CAAC;IACM,mBAAI,GAAX,UAAY,KAAW,EAAE,KAAW,EAAE,SAAiB,EAAE,SAAiB;QACtE,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,EAAE;YAChC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC7B,OAAO,IAAI,CAAC;SACf;QACD,IAAM,cAAc,GAAG,IAAI,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAC9E,cAAc,CAAC,IAAI,EAAE,CAAC;QACtB,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED,uCAAc,GAAd,UAAe,MAAY,EAAE,QAAgB,EAAE,QAAa,EAAE,QAAa;QACvE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,MAAM,KAAK,IAAI,CAAC,KAAK,EAAE;gBAEvB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;aACtD;iBAAM,IAAI,MAAM,KAAK,IAAI,CAAC,KAAK,EAAE;gBAE9B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;aACtD;YACD,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;SAC/B;IACL,CAAC;IAES,6BAAI,GAAd;QAGI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QAEnF,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IACtD,CAAC;IAES,+BAAM,GAAhB;QAEI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IACzD,CAAC;IACL,qBAAC;AAAD,CAAC;AApDY,wCAAc;;;;;;;;;;;;;;;ACF3B;IAMI,kBAAY,KAAa;QACrB,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;QAChB,IAAI,KAAK,KAAK,MAAM,EAAE;YAClB,OAAO;SACV;QACD,IAAI,aAAa,EAAE,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACvD,GAAG,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC;QAClC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC/B,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC;QAE7D,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAChC,CAAC;IACM,0BAAO,GAAd,UAAe,KAAU;QACrB,IAAI,MAAM,EAAE,KAAK,GAAG,6DAA6D,CAAC;QAClF,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;IACnB,CAAC;IAEM,wBAAK,GAAZ,cAAwB,OAAO,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAChF,wBAAK,GAAZ;QACI,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACtM,CAAC;IACL,eAAC;AAAD,CAAC;AAhCY,4BAAQ;;;;;;;;;;;;;;;ACoBrB,wEAAoC;AACpC,+DAA8B;AAE9B,IAAM,UAAU,GAAG;IAEf,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC;IACrC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,CAAC;IACxD,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC;IACrE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC;IACnE,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC;IAC3D,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,CAAC;IAChG,IAAI,EAAE,CAAC,EAAE,CAAC;CACb,CAAC;AACF;IAKI,sBAAY,OAAY,EAAE,MAAW,EAAE,OAAY;QAC/C,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;QACb,IAAI,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACzF,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACrE,IAAI,CAAC,MAAM,GAAG,CAAC,OAAO,IAAI,gBAAgB,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC5F,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAEM,4BAAK,GAAZ,UAAa,OAAY;QACrB,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,EAC1G,GAAG,EAAE,OAAO,CAAC;QACjB,IAAI,CAAC,OAAO,EAAE;YACV,OAAO;SACV;QACD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAC7B,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACnC,EAAE,CAAC,SAAS,GAAG,OAAO,CAAC;YACvB,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;SAC9B;QACD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YAC7C,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACxB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,GAAG,KAAK,CAAC;YACrB,IAAI,iCAAiC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAC3D,SAAS,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBACnC,IAAI,SAAS,EAAE;oBACX,OAAO,GAAG,IAAI,mBAAQ,CAAC,SAAS,CAAC,CAAC;oBAClC,IAAI,OAAO,CAAC,EAAE,EAAE;wBACZ,YAAY,GAAG,IAAI,CAAC;wBACpB,SAAS,GAAG,GAAG,CAAC;qBACnB;iBACJ;aACJ;YACD,IAAI,4BAA4B,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACtD,IAAI,YAAY,EAAE;oBACd,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;iBAC7D;gBACD,WAAW,GAAG,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACvC,IAAI,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE;oBAChC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;iBAC1D;gBACD,IAAI,WAAW,EAAE;oBACb,SAAS,GAAG,IAAI,mBAAQ,CAAC,WAAW,CAAC,CAAC;oBACtC,IAAI,SAAS,CAAC,EAAE,EAAE;wBACd,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;wBAChE,IAAI,SAAS,KAAK,GAAG,EAAE;4BACnB,SAAS,GAAG,IAAI,CAAC;yBACpB;6BAAM,IAAI,CAAC,YAAY,EAAE;4BACtB,SAAS,GAAG,GAAG,CAAC;yBACnB;qBACJ;yBAAM;wBACH,SAAS,GAAG,IAAI,CAAC;qBACpB;iBACJ;aACJ;YAED,QAAQ,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE;gBAC7B,KAAK,KAAK,CAAC;gBACX,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG;oBACJ,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACd,MAAM;gBACV,KAAK,MAAM;oBACP,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;oBACjG,MAAM;gBACV,KAAK,MAAM;oBACP,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;oBAC/H,MAAM;gBACV,KAAK,SAAS;oBACV,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;oBAC/G,MAAM;gBACV,KAAK,QAAQ;oBACT,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;oBACzF,MAAM;gBACV,KAAK,MAAM;oBACP,IAAI,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE;wBAC/B,QAAQ,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,EAAE;4BACjD,KAAK,OAAO;gCACR,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gCAC7B,MAAM;4BACV,KAAK,WAAW;gCACZ,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gCAC/B,MAAM;4BACV;gCACI,CAAC,CAAC,YAAY,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;gCAC5C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;yBACxC;qBACJ;oBACD,IAAI,YAAY,EAAE;wBACd,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;qBAC7D;oBACD,IAAI,IAAI,CAAC,MAAM,YAAY,aAAK,EAAE;wBAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;wBACpE,MAAM;qBACT;oBACD,QAAQ,GAAG,EAAE,CAAC;oBACd,IAAI,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE;wBAC/B,IAAI,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,MAAM,EAAE;4BAC1C,QAAQ,GAAG,MAAM,CAAC;yBACrB;qBACJ;oBACD,IAAI,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE;wBAC9B,IAAI,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,QAAQ,EAAE;4BAC3C,QAAQ,IAAI,QAAQ,CAAC;yBACxB;qBACJ;oBACD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;oBAClC,WAAW,GAAG,EAAE,CAAC;oBACjB,IAAI,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE;wBAC7B,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;qBAC3D;oBACD,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;oBAElB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;oBACtB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;oBACtB,OAAO,GAAG,CAAC,CAAC;oBACZ,IAAI,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE;wBAC/B,QAAQ,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE;4BACnC,KAAK,KAAK;gCACN,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC;gCACpB,MAAM;4BACV,KAAK,QAAQ;gCACT,OAAO,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;gCACxB,MAAM;4BACV,KAAK,OAAO;gCACR,MAAM;4BACV,KAAK,SAAS;gCACV,CAAC,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;gCACvC,MAAM;yBACb;wBACD,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;qBAC9B;oBACD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;oBAC7D,MAAM;gBACV;oBACI,IAAI,IAAI,CAAC,MAAM,EAAE;wBACb,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC;wBAC5C,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;wBACvB,CAAC,IAAI,CAAC,CAAC;qBACV;aACR;SACJ;IACL,CAAC;IAEM,2BAAI,GAAX,UAAY,IAAS,EAAE,IAAY;QAC/B,OAAO,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1D,CAAC;IACL,mBAAC;AAAD,CAAC;AAzJY,oCAAY;;;;;;;;;;;;;;;;;;;;;;;;;AClCzB,qEAAkC;AAElC;IAAgC,8BAAO;IAKnC;QAAA,YACI,iBAAO,SAEV;QADG,KAAI,CAAC,MAAM,EAAE,CAAC;;IAClB,CAAC;IAEM,2BAAM,GAAb;QAAA,iBAuBC;QAtBG,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAG;gBACrC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;aACpD;SACJ;aAAM;YACH,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC1C;QACD,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC;QACpC,KAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC/C,IAAI,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAW,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,YAAY,CAAC,GAAW,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,IAAI,CAAC,OAAO,GAAG,WAAC;gBACZ,KAAI,CAAC,OAAO,CAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;YAC3C,CAAC,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SACjC;IACL,CAAC;IAEM,2BAAM,GAAb;QACI,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAEM,4BAAO,GAAd,UAAe,MAAsB;QAArC,iBAcC;QAbG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;QAElC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAG;YACxC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;SAC1D;QACD,IAAI,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,GAAG,WAAC;YACZ,KAAI,CAAC,MAAM,CAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;IAC7C,CAAC;IAEM,2BAAM,GAAb,UAAc,MAAsB;QAChC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC;IAzDa,gBAAK,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IA0DlF,iBAAC;CAAA,CA3D+B,iBAAO,GA2DtC;AA3DY,gCAAU;;;;;;;;;;;;;;;ACDvB,gGAAqD;AACrD,wEAAoC;AAEpC;IAKI,iBAAY,KAAY;QACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAEM,sBAAI,GAAX;QACI,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,OAAO;SACV;QAED,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;QAEnC,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC;QAC1B,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;QAEjC,IAAI,IAAI,GAAG,EAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,cAAc,EAAC,CAAC;QAC5F,IAAI,SAAS,GAAG,qBAAY,CAAC,IAAI,CAAE,IAAI,CAAC,CAAC;QACzC,mBAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAEpC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IACL,cAAC;AAAD,CAAC;AA7BY,0BAAO;;;;;;;;;;;;;;;;;;;;;;;;;ACDpB,4DAA0B;AAO1B,IAAiB,GAAG,CAqDnB;AArDD,WAAiB,GAAG;IAChB;QAA2B,yBAAI;QAM3B;YAAA,YACI,iBAAO,SAEV;YADG,KAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;;QAC5B,CAAC;QAEM,uBAAO,GAAd;YACI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QAEM,uBAAO,GAAd,UAAe,QAAgB;YAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACxC,CAAC;QAEM,6BAAa,GAApB;YACI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;QAEM,+BAAe,GAAtB,UAAuB,QAAgB;YACnC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC3C,CAAC;QAEM,oCAAoB,GAA3B,UAA4B,QAAgB;YACxC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAChD,CAAC;QA5Ba,UAAI,GAAW,MAAM,CAAC;QACtB,gBAAU,GAAW,YAAY,CAAC;QAClC,aAAO,GAAW,SAAS,CAAC;QA2B9C,YAAC;KAAA,CA9B0B,cAAI,GA8B9B;IA9BY,SAAK,QA8BjB;IAED;QAA+B,6BAAI;QAG/B;YAAA,YACI,iBAAO,SAEV;YADG,KAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;;QAChC,CAAC;QAEM,2BAAO,GAAd;YACI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QAEM,2BAAO,GAAd,UAAe,QAAgB;YAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACxC,CAAC;QACL,gBAAC;IAAD,CAAC,CAf8B,cAAI,GAelC;IAfY,aAAS,YAerB;IAED;QAA6B,2BAAI;QAAjC;;QAEA,CAAC;QAAD,cAAC;IAAD,CAAC,CAF4B,cAAI,GAEhC;IAFY,WAAO,UAEnB;AACL,CAAC,EArDgB,GAAG,GAAH,WAAG,KAAH,WAAG,QAqDnB;AAED,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;ACjEpB,qEAAkC;AAElC;IAAqC,mCAAO;IACxC,yBAAY,IAAS;QAArB,YACI,iBAAO,SAyBV;QAxBG,IAAI,CAAC,IAAI,EAAE;YACP,IAAI,GAAG,KAAI,CAAC,UAAU,EAAE,CAAC;SAC5B;QACD,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,KAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE;YACnB,IAAI,IAAI,KAAK,QAAQ,EAAE;gBACnB,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE;oBACzB,IAAI,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;oBAC9C,SAAS,CAAC,SAAS,GAAG,QAAQ,CAAC;4CACtB,GAAG;wBACR,IAAI,GAAG,GAAsB,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;wBAC9D,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;wBACnC,OAAK,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;wBAC7C,GAAG,CAAC,UAAU,GAAG,cAAO,KAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC5C,GAAG,CAAC,OAAO,GAAG,cAAO,KAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBACzC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;oBAC/B,CAAC;;oBAPD,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;gCAAvB,GAAG;qBAOX;oBACD,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;iBAChC;aACJ;SACJ;QACD,KAAI,CAAC,KAAK,GAAG,KAAK,CAAC;;IACvB,CAAC;IAEM,gCAAM,GAAb,UAAc,GAAsB;QAChC,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE;YAC1B,IAAK,GAAG,CAAC,SAAS,KAAK,gBAAgB,EAAE;gBACrC,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACpC,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE;oBACnB,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBAC1C,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE;wBACxB,IAAI,KAAG,GAAsB,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;wBACrD,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;wBAC7B,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,KAAG,EAAE,UAAU,CAAC,CAAC;qBAChD;iBACJ;aACJ;iBAAM,IAAK,GAAG,CAAC,SAAS,KAAK,UAAU,EAAE;gBACtC,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBACnC,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE;oBACnB,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBAC1C,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE;wBACxB,IAAI,KAAG,GAAsB,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;wBACrD,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;wBAC7B,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,KAAG,EAAE,gBAAgB,CAAC,CAAC;qBACtD;iBACJ;aACJ;SACJ;QACD,KAAK,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IAEM,oCAAU,GAAjB;QACI,IAAI,MAAM,GAAG;YACT,MAAM,EAAE;gBACJ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC;gBAC3E,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;gBACrE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC;gBACvE,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC;gBAC7E,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC;aAE/C;YACD,KAAK,EAAE;gBACH,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC;gBAC3E,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;gBACrE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC;gBACxE,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC;gBAC7E,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC;aAC/C;SACJ,CAAC;QACF,OAAO,MAAM,CAAC;IAClB,CAAC;IAEM,kCAAQ,GAAf;QACI,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAEO,wCAAc,GAAtB,UAAuB,MAAc,EAAE,GAAsB,EAAE,UAAkB;QAC7E,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC;QAC3B,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;QACpB,GAAG,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC;QACvB,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE;YAChC,IAAI,MAAM,KAAK,QAAQ,EAAE;gBACrB,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC;aAC1B;iBAAM,IAAI,MAAM,KAAK,OAAO,EAAE;gBAC3B,GAAG,CAAC,SAAS,GAAG,aAAa,CAAC;aACjC;iBAAM,IAAI,MAAM,KAAK,SAAS,EAAE;gBAC7B,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC;gBACxB,GAAG,CAAC,SAAS,GAAG,gBAAgB,CAAC;aACpC;iBAAM,IAAI,MAAM,KAAK,SAAS,EAAE;gBAC7B,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC;gBACxB,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC;aAC9B;iBAAM,IAAI,MAAM,KAAK,UAAU,EAAE;gBAC9B,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC;gBACzB,GAAG,CAAC,SAAS,GAAG,gBAAgB,CAAC;aACpC;iBAAM,IAAI,MAAM,KAAK,OAAO,EAAE;gBAC3B,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;aACzB;iBAAM,IAAI,MAAM,KAAK,SAAS,EAAE;gBAC7B,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC;gBACzB,GAAG,CAAC,SAAS,GAAG,eAAe,CAAC;aACnC;iBAAM,IAAI,MAAM,KAAK,QAAQ,EAAE;gBAC5B,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC;aAC5B;iBAAM,IAAI,MAAM,KAAK,SAAS,EAAE;gBAC7B,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;aAC7B;iBAAM,IAAI,MAAM,KAAK,MAAM,EAAE;gBAC1B,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;aAC7B;iBAAM,IAAI,MAAM,KAAK,QAAQ,EAAE;gBAC5B,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;aAC7B;iBAAM,IAAI,MAAM,KAAK,UAAU,EAAE;gBAC9B,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC;gBACzB,GAAG,CAAC,SAAS,GAAG,gBAAgB,CAAC;aACpC;SACJ;aAAM;YACH,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC;SAC1B;IACL,CAAC;IACL,sBAAC;AAAD,CAAC,CAxHoC,iBAAO,GAwH3C;AAxHY,0CAAe;;;;;;;;;;;;;;;;;;;;;;;;;ACF5B,sEAAmC;AAEnC;IAAiC,+BAAO;IACpC;QAAA,YACI,iBAAO,SAEV;QADG,KAAI,CAAC,EAAE,GAAG,aAAa,CAAC;;IAC5B,CAAC;IACD,4BAAM,GAAN,UAAO,GAAW;QACd,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACjB,MAAM,CAAC,YAAY,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACxC,OAAO,IAAI,CAAC;SACf;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,8BAAQ,GAAf;QACI,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IACL,kBAAC;AAAD,CAAC,CAhBgC,iBAAO,GAgBvC;AAhBY,kCAAW;;;;;;;;;;;;;;;;;;ACFxB,gFAA8B;;;;;;;;;;;;;;;;;;;;;;;;;ACA9B,6DAA+B;AAC/B,sEAAqC;AA6BrC;IAA6C,kCAAO;IAApD;QAAA,qEA8GC;QA5Ga,kBAAY,GAAY,IAAI,CAAC;QAC7B,kBAAY,GAAG,EAAE,CAAC;QAClB,oBAAc,GAAG,EAAE,CAAC;QACtB,UAAI,GAAU,IAAI,KAAK,EAAE,CAAC;QAC1B,WAAK,GAAU,IAAI,KAAK,EAAE,CAAC;;IAwGvC,CAAC;IAtGU,uCAAc,GAArB;QACI,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,+BAAM,GAAb;QACI,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAEM,gCAAO,GAAd;QACI,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAEM,kCAAS,GAAhB;QACI,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACxB,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1B,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,CAAC;IAEM,0CAAiB,GAAxB,UAAyB,CAAS;QAC9B,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACxB,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1B,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAC3B,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE;YAClB,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;SACvF;QACD,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE,EAAE;YAChB,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;SAC5E;QACD,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE;YAClB,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;SACpF;QACD,IAAI,CAAC,KAAK,KAAK,CAAC,KAAK,EAAE;YACnB,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;SAC9F;QACD,OAAO,IAAI,KAAK,EAAE,CAAC;IACvB,CAAC;IAEM,+BAAM,GAAb;QACI,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,kCAAS,GAAhB;QACI,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,kCAAS,GAAhB;QACI,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,gDAAuB,GAA9B;QACI,OAAO,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;IAC7D,CAAC;IAEM,6BAAI,GAAX,UAAY,IAAS;IAErB,CAAC;IAEM,gCAAO,GAAd,UAAe,CAAS,EAAE,CAAS;QAC/B,IAAI,CAAC,IAAI,CAAC,EAAE;YACR,IAAI,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC/B;aAAM;YACH,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,IAAI,EAAE;gBAC1C,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;aACnB;YACD,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,IAAI,EAAE;gBAC1C,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;aACnB;SACJ;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,iCAAQ,GAAf,UAAgB,KAAa,EAAE,MAAc;QACzC,IAAI,KAAK,IAAI,MAAM,EAAE;YACjB,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;SACzC;aAAM;YACH,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,WAAW,IAAI,KAAK,KAAK,IAAI,EAAE;gBAClD,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC;aACxB;YACD,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,WAAW,IAAI,MAAM,KAAK,IAAI,EAAE;gBACpD,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC;aACzB;SACJ;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,kCAAS,GAAhB;QAMI,OAAO,iBAAM,SAAS,WAAE,CAAC;IAC7B,CAAC;IAEM,uCAAc,GAArB,UAAsB,UAAe;IAErC,CAAC;IAES,oCAAW,GAArB,UAAsB,KAAU;QAC5B,OAAO,WAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IACL,qBAAC;AAAD,CAAC,CA9G4C,iBAAO,GA8GnD;AA9GqB,wCAAc;AAgHpC;IAUI,eAAY,CAAU,EAAE,CAAU,EAAE,GAAY;QALhD,MAAC,GAAW,CAAC,CAAC;QACd,MAAC,GAAW,CAAC,CAAC;QAKV,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3B,IAAI,GAAG,EAAE;YACL,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;SACrB;IACL,CAAC;IAEM,mBAAG,GAAV,UAAW,GAAU;QACjB,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QAChB,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QAChB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,2BAAW,GAAlB;QACI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACd,OAAO,EAAE,CAAC;SACb;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAEM,sBAAM,GAAb,UAAc,CAAS,EAAE,CAAS;QAC9B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QACZ,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,mBAAG,GAAV,UAAW,GAAU;QACjB,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACb,OAAO,GAAG,CAAC;IACf,CAAC;IAEM,sBAAM,GAAb,UAAc,IAAW,EAAE,IAAW;QAClC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YACjB,KAAK,EAAE,CAAC;SACX;QACD,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YACjB,KAAK,EAAE,CAAC;SACX;QACD,IAAI,KAAK,GAAG,CAAC,EAAE;YACX,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;SAC7B;IACL,CAAC;IAEM,uBAAO,GAAd;QACI,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAEM,oBAAI,GAAX,UAAY,IAAW,EAAE,IAAW;QAChC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnC,IAAI,IAAI,EAAE;YACN,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;YACZ,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;SACf;QACD,IAAI,IAAI,EAAE;YACN,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;YACZ,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;SACf;QACD,IAAI,EAAE,GAAG,EAAE,EAAE;YACT,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;SACpB;aAAM;YACH,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;SACpB;QACD,IAAI,EAAE,GAAG,EAAE,EAAE;YACT,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;SACpB;aAAM;YACH,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;SACpB;IACL,CAAC;IApFa,QAAE,GAAW,IAAI,CAAC;IAClB,UAAI,GAAW,MAAM,CAAC;IACtB,WAAK,GAAW,OAAO,CAAC;IACxB,UAAI,GAAW,MAAM,CAAC;IAkFxC,YAAC;CAAA;AAtFY,sBAAK;AAyFlB;IAA0B,wBAAc;IASpC,cAAY,QAAgB;QAA5B,YACI,iBAAO,SAEV;QADG,KAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;;IAC7B,CAAC;IAEM,qBAAM,GAAb;QACI,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,qBAAM,GAAb;QACI,IAAI,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QACtB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,OAAO,GAAG,CAAC;IACf,CAAC;IAEM,sBAAO,GAAd;QACI,IAAI,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QACtB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,OAAO,GAAG,CAAC;IACf,CAAC;IAEM,wBAAS,GAAhB,UAAiB,KAAa;QAC1B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,uBAAQ,GAAf,UAAgB,CAAS,EAAE,CAAS;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,uBAAQ,GAAf,UAAgB,IAAkB,EAAE,KAAc,EAAE,KAAW;QAC3D,IAAI,CAAS,EAAE,CAAC,GAAW,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QACjC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YACjC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAC9C;QACD,IAAI,KAAK,EAAE;YACP,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACb,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;SACzB;aAAM;YACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;SACvC;QACD,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,KAAK,YAAY,MAAM,EAAE;YACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;SACtB;aAAM,IAAI,KAAK,EAAE;SAGjB;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,qBAAM,GAAb;QACI,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE;YAC1B,OAAoB,WAAI,CAAC,MAAM,CAAC;gBAC5B,GAAG,EAAE,MAAM;gBACX,GAAG,EAAE,IAAI,CAAC,IAAI;gBACd,MAAM,EAAE,IAAI,CAAC,KAAK;gBAClB,MAAM,EAAE,MAAM;gBACd,cAAc,EAAE,KAAK;aACxB,CAAC,CAAC;SACN;QACD,IAAI,IAAI,GAA6B,WAAI,CAAC,MAAM,CAAC;YAC7C,GAAG,EAAE,MAAM;YACX,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACnB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACnB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACnB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACnB,QAAQ,EAAE,WAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;SACtC,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE;YAC3D,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;YAC5C,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;SAChD;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAnFa,WAAM,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAoF9E,WAAC;CAAA,CArFyB,cAAc,GAqFvC;AArFY,oBAAI;;;;;;;;;;;;;;;;;;;;;;;;;ACvOjB,wEAA8B;AAE9B,+EAAwC;AAExC;IAAiC,+BAAK;IAElC,qBAAY,IAAS,EAAE,OAAgB;QAAvC,iBAuBC;QAtBG,IAAI,CAAC,OAAO,EAAG;YACX,OAAO,GAAG,EAAE,CAAC;SAChB;QACD,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC;QAG5C,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC;QAC5C,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;YACnB,OAAO,CAAC,QAAQ,GAAG;gBACf,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI;gBAChB,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,IAAI;aAChB,CAAC;SACL;QACD,0BAAM,IAAI,EAAE,OAAO,CAAC,SAAC;;IACzB,CAAC;IAEM,mCAAa,GAApB,UAAqB,KAAa;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAEM,sCAAgB,GAAvB;QACI,IAAI,CAAC,OAAO,GAAG,IAAI,sBAAW,EAAE,CAAC;IACrC,CAAC;IAEM,gCAAU,GAAjB;QACI,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IACL,kBAAC;AAAD,CAAC,CAvCgC,aAAK,GAuCrC;AAvCY,kCAAW;;;;;;;;;;;;;;;;;;;;;;;;;ACJxB,4EAAiC;AACjC,8EAAsC;AACtC,4EAAiC;AACjC,0EAAsC;AAEtC,wEAAqC;AACrC,6FAA6C;AAC7C,6DAA+B;AAC/B,sEAAqC;AAErC,yEAAuC;AACvC,+EAAmE;AAEnE,iGAAoD;AAGpD,sEAAqC;AACrC,gEAA+B;AAC/B,qFAA6C;AAC7C,sEAAiC;AACjC,8FAA8C;AAE9C;IAA2B,yBAAO;IAuB9B,eAAY,IAAS,EAAE,OAAgB;QAAvC,YACI,iBAAO,SAiCV;QA5CO,uBAAiB,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACjC,oBAAc,GAAG;YACrB,MAAM,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,cAAc,CAAC;YAC1C,MAAM,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,CAAC;YACrD,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,cAAc,CAAC;YAC5C,MAAM,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC;YAClC,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC;YAC3D,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;SAChC,CAAC;QAIE,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAClB,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE;YACd,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1B,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YACpB,KAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;SACxB;QACD,KAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAC,EAAC,CAAC;QACpD,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE;;SAEjB;QACD,IAAI,CAAC,KAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACtB,KAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,oBAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;SAC5C;QACD,IAAI,CAAC,KAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YAErB,KAAI,CAAC,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;SAClC;QACD,IAAI,KAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;YACvB,WAAI,CAAC,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC;SACtC;QAED,KAAI,CAAC,aAAa,EAAE,CAAC;QACrB,KAAI,CAAC,UAAU,EAAE,CAAC;QAClB,KAAI,CAAC,YAAY,CAAC,KAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAIzC,IAAI,CAAC,KAAI,CAAC,oBAAoB,EAAE,EAAE;YAC9B,KAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACnB;QAED,mBAAQ,CAAC,QAAQ,CAAC,KAAI,EAAE,KAAI,CAAC,KAAK,CAAC,CAAC;;IACxC,CAAC;IAEM,oCAAoB,GAA3B;QACI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;YACxB,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,CAAC,WAAI,CAAC,uBAAuB,EAAE,EAAE;YACjC,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,OAAO,GAAG,WAAI,CAAC,0BAA0B,EAAE,CAAC;QAChD,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/B,IAAI,OAAO,CAAC,2BAA2B,CAAC,EAAE;gBACtC,IAAI,QAAQ,GAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACzC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACpB,IAAI,CAAC,MAAM,EAAE,CAAC;gBACd,OAAO,IAAI,CAAC;aACf;iBAAM;gBACH,WAAI,CAAC,kBAAkB,CAAE,IAAI,CAAC,CAAC;aAClC;SACJ;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,8BAAc,GAArB;QACI,IAAI,QAAQ,GAAW,CAAC,CAAC;QACzB,IAAI,SAAS,GAAW,CAAC,CAAC;QAE1B,KAAiB,UAAsB,EAAtB,SAAI,CAAC,WAAW,CAAC,KAAK,EAAtB,cAAsB,EAAtB,IAAsB,EAAE;YAApC,IAAI,IAAI;YACT,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC9B,IAAI,cAAc,GAAG,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;YAC5C,IAAI,cAAc,GAAG,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;YAE5C,IAAI,cAAc,GAAG,QAAQ,EAAE;gBAC3B,QAAQ,GAAG,cAAc,CAAC;aAC7B;YAED,IAAI,cAAc,GAAG,SAAS,EAAE;gBAC5B,SAAS,GAAG,cAAc,CAAC;aAC9B;SACJ;QAED,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC;IACpE,CAAC;IAEM,sBAAM,GAAb,UAAc,GAAW;QACrB,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAGxB,IAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,IAAI,GAAG,KAAK,KAAK,EAAE;YACf,IAAI,CAAC,SAAS,EAAE,CAAC;SACpB;aAAM,IAAI,GAAG,KAAK,KAAK,EAAE;YACtB,IAAI,CAAC,SAAS,EAAE,CAAC;SACpB;aAAM,IAAI,GAAG,KAAK,MAAM,EAAE;YACvB,IAAI,CAAC,UAAU,EAAE,CAAC;SAErB;aAAM,IAAI,GAAG,KAAK,KAAK,EAAE;YACtB,IAAI,CAAC,SAAS,EAAE,CAAC;SAGpB;aACI,IAAI,GAAG,KAAK,MAAM,EAAE;YACrB,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;QAGD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACtE,CAAC;IAQM,oBAAI,GAAX,UAAY,IAAY,EAAE,IAAS,EAAE,IAAY,EAAE,OAAe;QAC9D,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE;YAChB,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YACjD,OAAO;SACV;QACD,IAAI,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QACzE,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC,KAAK,EAAE,CAAC;QACV,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IAGM,yBAAS,GAAhB;QACI,IAAI,kBAAkB,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC1D,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,EAAE,mBAAmB,EAAE,eAAe,CAAC,CAAC;IACtG,CAAC;IAGM,0BAAU,GAAjB;QACI,IAAI,UAAU,GAAG,wFAAwF,CAAC;QAC1G,IAAI,kBAAkB,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC1D,IAAI,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;QAEzD,IAAI,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAE1D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,mBAAmB,EAAE,YAAY,CAAC,CAAC;IACrE,CAAC;IAGM,0BAAU,GAAjB;QACI,IAAI,IAAI,GAAG,YAAY,CAAC;QACxB,IAAI,OAAO,GAAG,WAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAE/C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IAGM,yBAAS,GAAhB;QACI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;YAClB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC1B,OAAO;SACV;QACD,IAAI,IAAI,GAAG,eAAe,CAAC;QAC3B,IAAI,SAAS,EAAE,GAAG,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAClH,SAAS,GAAG,IAAI,2BAAY,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,EAAC,aAAa,EAAE,KAAK,EAAC,CAAC,CAAC;QACtE,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAwB7B,CAAC;IAEM,sBAAM,GAAb,UAAc,IAAY;QACtB,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QACzC,OAAO,WAAW,CAAC,aAAa,EAAE,EAAE;YAChC,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;SACnD;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE;YAC/B,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;SACjD;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpB,IAAI,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC;IAEM,yBAAS,GAAhB;QACM,IAAI,SAAS,EAAE,GAAG,GAAG,IAAI,aAAK,CAAC,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;QAChD,SAAS,GAAG,IAAI,2BAAY,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,EAAC,aAAa,EAAE,KAAK,EAAC,CAAC,CAAC;QACtE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACtE,CAAC;IAGM,yBAAS,GAAhB;QACI,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;QAC5C,IAAI,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC;QACtE,IAAI,GAAG,GAAG,eAAe,CAAC;QAC1B,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAEzE,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAE9B,KAAK,CAAC,MAAM,GAAG;YACX,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAC1B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC5B,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAClC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAE/B,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAChC,CAAC,CAAC,QAAQ,GAAG,mBAAmB,CAAC;YACjC,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YACvC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC,CAAC,KAAK,EAAE,CAAC;YACV,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC;QAEF,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;IAEpB,CAAC;IAEM,yCAAyB,GAAhC;QACI,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAE/C,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,gCAAgB,GAAvB,UAAwB,OAAY;QAChC,IAAI,MAAM,CAAC,eAAe,CAAC,KAAK,SAAS,EAAE;YACvC,OAAO,CAAC,IAAI,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;SACrE;QACD,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE;YAC3B,OAAO,OAAO,CAAC,GAAG,CAAC;SACtB;QACD,OAAO,OAAO,CAAC,SAAS,CAAC;IAC7B,CAAC;IAEM,2BAAW,GAAlB;QACI,IAAI,KAAa,CAAC;QAClB,IAAI,MAAc,CAAC;QACnB,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAE3C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC5C,CAAC;IAOM,oBAAI,GAAX,UAAY,IAAmB,EAAE,KAAe;QAC5C,IAAI,CAAC,WAAW,GAAG,IAAI,kBAAU,EAAE,CAAC;QACpC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAEM,0BAAU,GAAjB;QACI,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAC;QACrC,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAEM,oBAAI,GAAX,UAAY,KAAc,EAAE,QAAiB,EAAE,EAAW;QACtD,iBAAM,IAAI,YAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,8BAAc,GAArB,UAAsB,MAAY,EAAE,QAAgB,EAAE,QAAa,EAAE,QAAa;QAC9E,OAAO;IACX,CAAC;IAEM,mCAAmB,GAA1B;QAEI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB,OAAO,IAAI,oBAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;SAC5B;QAED,IAAI,KAAK,GAAG,IAAI,oBAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAE7B,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,IAAI,GAAG,IAAI,CAAC;QAEhB,KAAiB,UAAsB,EAAtB,SAAI,CAAC,WAAW,CAAC,KAAK,EAAtB,cAAsB,EAAtB,IAAsB,EAAE;YAApC,IAAI,IAAI;YACT,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;SAC1C;QAED,IAAI,IAAI,GAAG,GAAG,EAAE;YACZ,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;SAChB;aACI;YACD,KAAK,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;SACxB;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,0BAAU,GAAjB,UAAkB,IAAY,EAAE,QAAkB;QAC9C,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;SACzB;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAEM,oCAAoB,GAA3B,UAA4B,IAAY,EAAE,cAAuB,EAAE,MAAgB,EAAE,QAAkB;QACnG,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAC1E,IAAI,OAAO,IAAI,MAAM,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;SACzB;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAEM,sBAAM,GAAb,UAAc,QAAkB;QAC5B,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAEhD,IAAI,QAAQ,EAAE;YACV,OAAO,IAAI,CAAC;SACf;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,yBAAS,GAAhB;QACI,OAAO,CAAC,mBAAQ,CAAC,eAAe,EAAE,mBAAQ,CAAC,gBAAgB,EAAE,mBAAQ,CAAC,WAAW,CAAC,CAAC;IACvF,CAAC;IAEM,oBAAI,GAAX;QACI,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;QAC7B,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrB,IAAI,GAAG,GAAU,IAAI,oBAAK,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;YACnC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;SACvC;QAED,KAAiB,UAAW,EAAX,UAAK,CAAC,KAAK,EAAX,cAAW,EAAX,IAAW,EAAE;YAAzB,IAAI,IAAI;YACT,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACxB,mBAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAEtB,IAAI,IAAI,SAAQ,CAAC;YACjB,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC1C,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE;gBACd,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;aAChB;YACD,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC1C,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE;gBACd,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;aAChB;SAEJ;QACD,WAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAEzD,KAAiB,UAAW,EAAX,UAAK,CAAC,KAAK,EAAX,cAAW,EAAX,IAAW,EAAE;YAAzB,IAAI,IAAI;YACT,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACxB,mBAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;SACzB;IACL,CAAC;IAEM,uBAAO,GAAd,UAAe,EAAU;QACrB,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC;IAEM,2BAAW,GAAlB,UAAmB,OAAuB;QACtC,IAAI,CAAC,OAAO,EAAE;YACV,OAAO;SACV;QAED,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAI3B,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7D,IAAI,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAEzD,IAAI,QAAQ,CAAC,KAAK,GAAG,QAAQ,EAAE;YAC3B,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC;SAC1D;QAED,IAAI,QAAQ,CAAC,MAAM,GAAG,SAAS,EAAE;YAC7B,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,SAAS,CAAC,CAAC;SAC5D;QAGD,IAAI,OAAO,YAAY,mBAAW,EAAE;YAChC,IAAI,IAAI,GAAgB,OAAO,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzB,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,uBAAuB,EAAE,CAAC;YACtD,IAAI,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,uBAAuB,EAAE,CAAC;YAEzD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;SACpC;QAED,mBAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IAEM,6BAAa,GAApB,UAAqB,OAAuB;QACxC,IAAI,CAAC,OAAO,EAAE;YACV,OAAO;SACV;QAED,IAAI,oBAAoB,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC;QAC7D,IAAI,WAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,EAAE;YACvD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;SAC/C;IACL,CAAC;IAEM,wBAAQ,GAAf,UAAgB,WAAmB,EAAE,IAAa;QAC9C,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC;QACvC,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;QAEhC,IAAI,IAAI,EAAE,MAAM,GAAG,WAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,UAAU,EAAE;YACjE,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;SACjC;IACL,CAAC;IAEO,2BAAW,GAAnB,UAAoB,MAAW,EAAE,QAAa;QAC1C,IAAI,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC;QACjC,IAAI,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC;QAEvC,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;YACzC,IAAI,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;YAEzB,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC5B,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;gBAChD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;aAC7C;iBAAM,IAAI,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvC,IAAI,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;gBAEzD,IAAI,WAAW,GAAG,EAAE,CAAC;gBACrB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;oBAC7D,WAAW,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;iBAC9H;gBAED,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;aAC5C;SACJ;IACL,CAAC;IAEO,6BAAa,GAArB;QACI,IAAM,IAAI,GAAG,WAAI,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/C,IAAM,OAAO,GAAG,WAAI,CAAC,WAAW,CAAC;YAC7B,GAAG,EAAE,SAAS;YACd,EAAE,EAAE,QAAQ;YACZ,YAAY,EAAE,gBAAgB;YAC9B,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;SACb,CAAC,CAAC;QACH,IAAM,IAAI,GAAG,yEAAyE,CAAC;QACvF,IAAM,KAAK,GAAG,WAAI,CAAC,WAAW,CAAC;YAC3B,GAAG,EAAE,MAAM;YACX,CAAC,EAAE,IAAI;YACP,MAAM,EAAE,MAAM;YACd,cAAc,EAAE,CAAC;YACjB,IAAI,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,IAAM,IAAI,GAAG,WAAI,CAAC,WAAW,CAAC;YAC1B,GAAG,EAAE,MAAM;YACX,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,IAAI,EAAE,MAAM;SACf,CAAC,CAAC;QACH,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,4BAAY,GAApB;QACI,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,WAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACrC;QAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QACvC,IAAI,SAAS,GAAG,MAAM,CAAC;QACvB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACrB,SAAS,GAAG,cAAc,CAAC;SAC9B;QACD,IAAI,UAAU,GAAG,WAAI,CAAC,WAAW,CAAC;YAC9B,GAAG,EAAE,MAAM;YACX,EAAE,EAAE,YAAY;YAChB,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;YACZ,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,MAAM,EAAE,MAAM;YACd,cAAc,EAAE,GAAG;YACnB,IAAI,EAAE,SAAS;SAClB,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAG7B,IAAI,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACvD,IAAI,UAAU,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;YAClD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;SACzC;IACL,CAAC;IAEO,yBAAS,GAAjB;QACI,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,OAAO,IAAI,CAAC,aAAa,CAAC;SAC7B;QAED,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;YAC5B,IAAI,CAAC,aAAa,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;SACzD;aAAM;YACH,IAAI,CAAC,aAAa,GAAG,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;SAClD;QAED,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAEO,6BAAa,GAArB;QAEI,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,KAAK,IAAI,EAAE,IAAI,KAAK,EAAE;YAClB,IAAI,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE;gBACnC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;aACpC;SACJ;QAED,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,KAAK,IAAI,EAAE,IAAI,KAAK,EAAE;YAClB,IAAI,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE;gBACnC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;aACpC;SACJ;QAED,IAAI,QAAQ,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,KAAK,IAAI,EAAE,IAAI,QAAQ,EAAE;YACrB,IAAI,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE;gBACtC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;aACzC;SACJ;IACL,CAAC;IAEO,0BAAU,GAAlB;QACI,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACrB,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;SAC7D;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACb,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACzC;IACL,CAAC;IAEO,4BAAY,GAApB,UAAqB,QAAa;QAE9B,IAAI,QAAQ,EAAE;YACV,IAAI,QAAQ,CAAC,OAAO,EAAE;gBAClB,mBAAQ,CAAC,SAAS,CAAC,IAAI,kBAAO,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;aAC5F;YACD,IAAI,CAAC,UAAU,GAAG,IAAI,uBAAU,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,QAAQ,CAAC,MAAM,EAAE;gBACjB,mBAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;aACxE;YACD,IAAI,QAAQ,CAAC,IAAI,EAAE;gBACf,IAAI,UAAU,GAAG,SAAS,IAAI,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC;gBAC9I,mBAAQ,CAAC,SAAS,CAAC,IAAI,eAAI,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;aAClD;YACD,IAAI,QAAQ,CAAC,IAAI,EAAE;gBACf,mBAAQ,CAAC,SAAS,CAAC,IAAI,eAAI,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;aACzF;YACD,IAAI,QAAQ,CAAC,MAAM,EAAE;gBACjB,mBAAQ,CAAC,SAAS,CAAC,IAAI,iBAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;aACzD;YACD,IAAI,QAAQ,CAAC,OAAO,EAAE;gBAClB,IAAI,iBAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;aAC5B;YACD,IAAI,QAAQ,CAAC,OAAO,EAAE;gBAClB,IAAI,iBAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;aAC5B;YACD,IAAI,QAAQ,CAAC,UAAU,EAAE;gBACrB,IAAI,aAAa,GAAG,IAAI,4BAAU,CAAC,IAAI,CAAC,CAAC;gBAEzC,mBAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,mBAAQ,CAAC,gBAAgB,CAAC,CAAC;gBAClF,aAAa,CAAC,IAAI,EAAE,CAAC;aACxB;YACD,IAAI,QAAQ,CAAC,OAAO,EAAE;gBAClB,mBAAQ,CAAC,SAAS,CAAC,IAAI,kBAAO,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;aAC5F;SACJ;IACL,CAAC;IACL,YAAC;AAAD,CAAC,CAroB0B,iBAAO,GAqoBjC;AAroBY,sBAAK;;;;;;;;;;;;;;;;;;;;;;;;;ACrBlB,6FAAqD;AACrD,8EAAoC;AACpC,8EAA6B;AAE7B,6DAA6B;AAC7B,yEAAqC;AAErC;IAAgC,8BAAc;IAA9C;QAAA,qEAoUC;QAnUG,WAAK,GAAW,EAAE,CAAC;QACnB,WAAK,GAAkB,EAAE,CAAC;;IAkU9B,CAAC;IA7TU,yBAAI,GAAX,UAAY,IAAU;QAElB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,cAAc,CAAC;QAC7D,IAAI,CAAC,EAAE,GAAG,aAAa,CAAC;QACxB,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,KAAiB,UAAU,EAAV,SAAI,CAAC,KAAK,EAAV,cAAU,EAAV,IAAU,EAAE;gBAAxB,IAAI,IAAI;gBACT,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aACtB;SACJ;QACD,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,KAAiB,UAAU,EAAV,SAAI,CAAC,KAAK,EAAV,cAAU,EAAV,IAAU,EAAE;gBAAxB,IAAI,IAAI;gBACT,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aACtB;SACJ;QAED,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC5B,CAAC;IAEM,sCAAiB,GAAxB,UAAyB,CAAS,EAAE,CAAS;QACzC,KAAiB,UAAU,EAAV,SAAI,CAAC,KAAK,EAAV,cAAU,EAAV,IAAU,EAAE;YAAxB,IAAI,IAAI;YACT,IAAI,SAAS,GAAiB,IAAK,CAAC,MAAM,EAAE,CAAC;YAC7C,IAAI,UAAU,GAAiB,IAAK,CAAC,OAAO,EAAE,CAAC;YAE/C,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;mBACpD,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;gBAC5D,OAAO,IAAI,CAAC;aACf;SACJ;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,yBAAI,GAAX,UAAY,KAAc,EAAE,QAAiB,EAAE,EAAW;QACtD,iBAAM,IAAI,YAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,+BAAU,GAAjB,UAAkB,IAAY;QAC1B,IAAI,GAAG,WAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,OAAO,GAAmB,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/D,IAAI,OAAO,EAAE;YACT,WAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,IAAI,CAAC;SACf;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,yCAAoB,GAA3B,UAA4B,IAAY,EAAE,cAAsB;QAC5D,IAAI,GAAG,WAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,OAAO,GAAmB,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAG/D,IAAI,cAAc,EAAE;YAChB,IAAI,cAAc,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;gBAC1E,IAAI,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;gBAC5B,IAAI,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;gBAC5B,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aACzB;SACJ;QAED,WAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAE9B,OAAO,OAAO,CAAC;IACnB,CAAC;IAEM,sCAAiB,GAAxB;QAEI,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;YAClC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACxC;QAED,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,WAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC;IAEM,kCAAa,GAApB,UAAqB,EAAU;QAE3B,IAAI,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,EAAE;YACV,OAAO,KAAK,CAAC;SAChB;QAEO,IAAI,CAAC,MAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAE5C,IAAI,OAAO,YAAY,YAAI,EAAE;YAEzB,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC5C,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE;gBAChB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;aACnC;YAED,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC9B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aAC5C;YAED,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;SACvB;aACI,IAAI,OAAO,YAAY,mBAAW,EAAE;YAErC,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC5C,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE;gBAChB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;aACnC;YAGD,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACnD,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE;gBAChB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;aAC9C;YAGD,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACnD,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE;gBAChB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;aAC9C;SAEJ;QAED,WAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAE9B,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,2BAAM,GAAb;QAEI,IAAM,IAAI,GAAG,EAAE,CAAC;QAChB,IAAM,IAAI,GAAG,MAAI,CAAC,IAAI,YAAO,CAAC,IAAI,cAAS,CAAC,IAAI,YAAO,CAAC,IAAM,CAAC;QAE/D,IAAM,IAAI,GAAG;YACT,GAAG,EAAE,MAAM;YACX,EAAE,EAAE,QAAQ;YACZ,CAAC,EAAE,IAAI;YACP,MAAM,EAAE,MAAM;YACd,cAAc,EAAE,GAAG;YACnB,IAAI,EAAE,MAAM;SACf,CAAC;QACF,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEnC,IAAM,QAAQ,GAAG;YACb,GAAG,EAAE,MAAM;YACX,CAAC,EAAE,CAAC,GAAG,IAAI;YACX,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,GAAG;YACjB,aAAa,EAAE,KAAK;YACpB,aAAa,EAAE,SAAS;YACxB,WAAW,EAAE,GAAG;YAChB,IAAI,EAAE,MAAM;SACf,CAAC;QACF,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;QAE5B,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,EAAC,GAAG,EAAE,GAAG,EAAC,CAAC,CAAC;QACzC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACzB,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAExB,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,8BAAS,GAAhB;QACI,OAAO,CAAC,mBAAQ,CAAC,gBAAgB,EAAE,mBAAQ,CAAC,cAAc,EAAE,mBAAQ,CAAC,iBAAiB,EAAE,mBAAQ,CAAC,gBAAgB,EAAE,mBAAQ,CAAC,iBAAiB,EAAE,mBAAQ,CAAC,YAAY,EAAE,mBAAQ,CAAC,WAAW,CAAC,CAAC;IAChM,CAAC;IAEM,6BAAQ,GAAf,UAAgB,MAAe;QAC3B,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;QACzF,OAAO,EAAE,CAAC;IACd,CAAC;IAEM,gCAAW,GAAlB,UAAmB,EAAU;QACzB,KAAiB,UAAU,EAAV,SAAI,CAAC,KAAK,EAAV,cAAU,EAAV,IAAU,EAAE;YAAxB,IAAI,IAAI;YACT,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE;gBAChB,OAAO,IAAI,CAAC;aACf;SACJ;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAEM,0CAAqB,GAA5B,UAA6B,EAAU;QAEnC,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC;IAQM,4BAAO,GAAd,UAAe,IAAS,EAAE,cAAwB;QAG9C,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;YACnB,IAAM,KAAK,GAAW,IAAI,CAAC,MAAO,CAAC;YACnC,IAAI,UAAU,GAAG,KAAK,CAAC;YACvB,KAAK,IAAI,QAAQ,IAAI,KAAK,CAAC,WAAW,EAAE;gBACpC,IAAI,QAAQ,KAAK,IAAI,CAAC,IAAI,EAAE;oBACxB,UAAU,GAAG,IAAI,CAAC;oBAClB,MAAM;iBACT;aACJ;YAED,IAAI,CAAC,UAAU,EAAE;gBACb,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;aAC7B;SACJ;QAED,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,aAAa,CAAC;QACtC,IAAI,GAAG,WAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAE7B,IAAI,OAAO,GAAgB,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QAEpB,IAAI,MAAY,CAAC;QACjB,IAAI,cAAc,GAAW,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC;QAC3D,IAAI,cAAc,EAAE;YAChB,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM,EAAE;gBACT,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBACzB,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;oBAC5B,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;iBACtB;gBACb,IAAG,CAAC,MAAM,EAAE;oBACX,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;iBAChC;gBACW,MAAM,GAAS,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC,CAAC;gBACnE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACrB;SACJ;QAED,IAAI,MAAY,CAAC;QACjB,IAAI,cAAc,GAAW,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC;QAC3D,IAAI,cAAc,EAAE;YAChB,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM,EAAE;gBACT,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBACzB,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;oBAC5B,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;iBACtB;gBACb,IAAG,CAAC,MAAM,EAAE;oBACX,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;iBAChC;gBACW,MAAM,GAAS,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC,CAAC;gBACnE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACrB;SACJ;QAED,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAEjC,IAAI,cAAc,EAAE;YAChB,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxD,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAExD,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAE3D,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SACtC;QAED,WAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAE9B,OAAO,OAAO,CAAC;IACnB,CAAC;IAEM,kCAAa,GAApB,UAAqB,IAAY,EAAE,EAAU,EAAE,IAAY;QACvD,IAAM,KAAK,GAAU,IAAI,CAAC,MAAM,CAAC;QACjC,IAAI,OAAuB,CAAC;QAC5B,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YACzB,OAAO,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5C,WAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAChD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAO,OAAO,CAAC,CAAC;SAClC;QACD,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YACzB,OAAO,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5C,WAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAChD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAc,OAAO,CAAC,CAAC;SACzC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAEM,gCAAW,GAAlB,UAAmB,EAAU;QACzB,KAAiB,UAAU,EAAV,SAAI,CAAC,KAAK,EAAV,cAAU,EAAV,IAAU,EAAE;YAAxB,IAAI,IAAI;YACT,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE;gBAChB,OAAO,IAAI,CAAC;aACf;SACJ;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,+BAAU,GAAlB;QACI,IAAM,KAAK,GAAU,IAAI,CAAC,MAAM,CAAC;QACjC,KAAK,CAAC,UAAU,GAAG,EAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,YAAY,EAAC,CAAC;QACtF,KAAK,CAAC,IAAI,GAAG,WAAI,CAAC,WAAW,CAAC;YAC1B,GAAG,EAAE,KAAK;YACV,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK;YAC7B,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM;SAElC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,UAAU,GAAG,SAAS,IAAI,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC;QAC9I,mBAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAEO,4BAAO,GAAf,UAAgB,IAAU;QACtB,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC;QACnD,IAAI,GAAG,WAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAE3D,OAAa,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IACL,iBAAC;AAAD,CAAC,CApU+B,6BAAc,GAoU7C;AApUY,gCAAU;;;;;;;;;;;;;;;;;;;;;;;;;ACRvB,gGAA4C;AAK5C;IAAwC,6BAAW;IAAnD;;IA6EA,CAAC;IAzEU,0BAAM,GAAb;QAEI,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAEjC,IAAI,SAAS,GAAc,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACnF,IAAI,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAEvD,IAAI,KAAK,GAAG,iBAAM,MAAM,WAAE,CAAC;QAG3B,IAAI,IAAI,GAAG;YACP,GAAG,EAAE,MAAM;YACX,CAAC,EAAE,IAAI;SACV,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEvC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,0BAAM,GAAb,UAAc,SAAe,EAAE,cAAwB;QAEnD,iBAAM,MAAM,YAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAK9B,IAAI,UAAU,GAAU,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,SAAS,IAA4B,CAAC;QAG1C,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE;YAE7D,SAAS,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAEpE,IAAI,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YACvD,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;SACjD;QAGD,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC/B,CAAC;IAES,mCAAe,GAAzB,UAA0B,UAAiB,EAAE,SAAoB;QAC7D,IAAI,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;QAC1B,IAAI,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;QAE1B,IAAI,IAAI,CAAC;QAET,QAAQ,SAAS,EAAE;YACf;gBACI,IAAI,GAAG,MAAI,MAAM,SAAI,MAAM,WAAK,MAAM,GAAG,CAAC,WAAI,MAAM,GAAG,EAAE,WAAK,MAAM,UAAI,MAAM,GAAG,EAAE,YAAK,MAAM,GAAG,CAAC,WAAI,MAAM,GAAG,EAAE,QAAI,CAAC;gBACtH,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAC,EAAE,CAAC;gBAC/B,MAAM;YACV;gBACI,IAAI,GAAG,MAAI,MAAM,SAAI,MAAM,WAAK,MAAM,GAAG,EAAE,WAAI,MAAM,GAAG,CAAC,YAAK,MAAM,GAAG,EAAE,UAAI,MAAM,WAAK,MAAM,GAAG,EAAE,WAAI,MAAM,GAAG,CAAC,QAAI,CAAC;gBACtH,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAC,EAAE,CAAC;gBAC/B,MAAM;YACV;gBACI,IAAI,GAAG,MAAI,MAAM,SAAI,MAAM,WAAK,MAAM,GAAG,EAAE,WAAI,MAAM,GAAG,CAAC,YAAK,MAAM,GAAG,EAAE,UAAI,MAAM,WAAK,MAAM,GAAG,EAAE,WAAI,MAAM,GAAG,CAAC,QAAI,CAAC;gBACtH,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAC,EAAE,CAAC;gBAC/B,MAAM;YACV;gBACI,IAAI,GAAG,MAAI,MAAM,SAAI,MAAM,WAAK,MAAM,GAAG,CAAC,WAAI,MAAM,GAAG,EAAE,WAAK,MAAM,UAAI,MAAM,GAAG,EAAE,YAAK,MAAM,GAAG,CAAC,WAAI,MAAM,GAAG,EAAE,QAAI,CAAC;gBACtH,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAC,EAAE,CAAC;gBAC/B,MAAM;YACV;gBACI,MAAM;SACb;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IACL,gBAAC;AAAD,CAAC,CA7EuC,yBAAW,GA6ElD;AA7EqB,8BAAS;;;;;;;;;;;;;;;;;;;;;;;;;ACJ/B,8EAA+C;AAE/C;IAAiC,+BAAS;IAA1C;;IAOA,CAAC;IANQ,4BAAM,GAAb;QACE,IAAI,KAAK,GAAG,iBAAM,MAAM,WAAE,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAEpD,OAAO,KAAK,CAAC;IACf,CAAC;IACH,kBAAC;AAAD,CAAC,CAPgC,iBAAS,GAOzC;AAPY,kCAAW;;;;;;;;;;;;;;;;;;;;;;;;;ACHxB,8FAA8D;AAE9D,8FAA6C;AAC7C,gEAAkC;AAClC,4EAA0C;AAC1C,6EAAkC;AAGlC,IAAkB,SAEjB;AAFD,WAAkB,SAAS;IACvB,qCAAE;IAAE,yCAAI;IAAE,yCAAI;IAAE,2CAAK;AACzB,CAAC,EAFiB,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAE1B;AAED;IAAiC,+BAAc;IAgB3C,qBAAY,IAAkC;QAA9C,YACI,iBAAO,SAGV;QAbM,aAAO,GAAY,EAAE,CAAC;QAYzB,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;IACxB,CAAC;IAEM,8BAAQ,GAAf,UAAgB,IAAkC;QAE9C,IAAI,CAAC,IAAI,EAAE;YACP,OAAO,IAAI,CAAC;SACf;QACD,IAAI,OAAO,CAAC;QACZ,IAAI,OAAO,CAAC;QAEZ,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;YAChD,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;SACzB;aACI,IAAI,IAAI,CAAC,UAAU,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE;YAC7D,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;SAC7B;QAED,IAAI,OAAO,EAAE;YACT,IAAI,CAAC,UAAU,GAAG,IAAI,mBAAQ,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;SACjC;QAED,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;YAChD,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;SACzB;aACI,IAAI,IAAI,CAAC,UAAU,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE;YAC7D,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;SAC7B;QAED,IAAI,OAAO,EAAE;YACT,IAAI,CAAC,UAAU,GAAG,IAAI,mBAAQ,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;SACjC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,0CAAoB,GAA3B,UAA4B,WAAmB;QAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACpF,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,WAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAEM,6CAAuB,GAA9B,UAA+B,WAAmB;QAC9C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACpF,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,WAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAEM,uCAAiB,GAAxB,UAAyB,QAAgB;QACrC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC9E,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,WAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAEM,0CAAoB,GAA3B,UAA4B,QAAgB;QACxC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC9E,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,WAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAEM,8BAAQ,GAAf,UAAgB,MAAY,EAAE,MAAY;QACtC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,4BAAM,GAAb;QACI,IAAI,KAAK,GAAG,WAAI,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAE1E,IAAI,IAAI,GAAW,IAAI,CAAC,OAAO,EAAE,CAAC;QAClC,IAAI,IAAI,GAAG;YACP,GAAG,EAAE,MAAM;YACX,CAAC,EAAE,IAAI;YACP,IAAI,EAAE,MAAM;SACf,CAAC;QACF,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAGtC,IAAI,gBAAgB,GAAG,WAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAE9C,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QACpC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5B,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAChE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;YAC9C,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;SAC/C;QACD,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAChE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;YAC9C,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;SAC/C;QAED,IAAI,CAAC,YAAY,GAAG,gBAAgB,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,+BAAS,GAAhB;QACI,OAAO,CAAC,mBAAQ,CAAC,YAAY,EAAE,mBAAQ,CAAC,eAAe,EAAE,mBAAQ,CAAC,MAAM,EAAE,mBAAQ,CAAC,cAAc,CAAC,CAAC;IACvG,CAAC;IAEM,iCAAW,GAAlB,UAAmB,IAAY,EAAE,KAAa,EAAE,MAAgB;QAC5D,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YACd,OAAO,IAAI,CAAC;SACf;QAED,IAAI,OAAO,GAAgB,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC;QACnB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QACpB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACnC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE7B,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,OAAO,CAAC,UAAU,GAAG,IAAI,mBAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;YACpH,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC;SACvC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,OAAO,CAAC,UAAU,GAAG,IAAI,mBAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;YACpH,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC;SACvC;QAED,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,eAAK;YACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,IAAI,KAAK,GAAU,IAAI,CAAC,OAAO,EAAE,CAAC;QAClC,IAAI,CAAC,KAAK,EAAE;YACR,OAAO,IAAI,CAAC;SACf;QAGD,IAAI,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChD,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE;YACV,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;SACnD;aACI;YACD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACzC;QAED,IAAI,CAAC,MAAM,EAAE;YACT,OAAO,OAAO,CAAC;SAClB;QAED,IAAI,OAAgB,CAAC;QACrB,IAAI,KAAK,EAAE;YACP,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;SACxB;aACI;YACD,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;SAC7C;QACD,IAAI,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAGlC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAMhC,IAAI,YAAY,GAAY,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAC9C,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAC7C,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAE7C,mBAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAEvC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAE5B,OAAO,OAAO,CAAC;IACnB,CAAC;IAEM,4BAAM,GAAb,UAAc,SAAe,EAAE,cAAwB;QAEnD,IAAI,CAAC,SAAS,EAAE;YACZ,OAAO;SACV;QAGD,IAAI,QAAe,CAAC;QACpB,IAAI,WAAkB,CAAC;QACvB,IAAI,WAAmB,CAAC;QAExB,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,EAAE;YACjC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC9B,WAAW,GAAG,CAAC,CAAC;SACnB;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,EAAE;YACxC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACpD,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;SACzC;QAED,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAGrC,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QAGxD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,IAAI,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAEjI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;SACvC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;SAC7D;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE;YAEjI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;SACvC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YAE9D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;SAC7D;QAED,IAAI,CAAC,cAAc,EAAE;YACjB,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC9B;IACL,CAAC;IAEM,6BAAO,GAAd;QAEI,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3B,OAAO,EAAE,CAAC;SACb;QAED,IAAI,IAAI,GAAW,GAAG,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAI,KAAK,GAAU,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,GAAG,CAAC,EAAE;gBACP,IAAI,IAAI,GAAG,CAAC;aACf;YACD,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;SACjE;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IACM,oCAAc,GAArB,UAAsB,OAAiB,EAAE,IAAU;QAE/C,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE;YACnB,OAAO,IAAI,CAAC;SACf;QAGD,IAAI,UAAiB,CAAC;QACtB,IAAI,gBAAuB,CAAC;QAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE;YAC5B,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC7B,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SACtC;aACI,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE;YACjC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACnD,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;SAC5D;QAED,IAAI,SAAS,GAAc,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAE5E,IAAI,CAAS,CAAC;QACd,IAAI,CAAS,CAAC;QAEd,QAAQ,SAAS,EAAE;YACf;gBAEI,IAAI,UAAU,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,EAAE;oBACpC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;iBACxB;qBACI;oBACD,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;iBAC5C;gBACD,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC7C,MAAM;YACV;gBAEI,IAAI,UAAU,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,EAAE;oBACpC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;iBAChD;qBACI;oBACD,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;iBACpD;gBACD,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC7C,MAAM;YACV;gBAEI,IAAI,UAAU,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,EAAE;oBACpC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;iBAChD;qBACI;oBACD,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;iBACpD;gBACD,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;gBACrB,MAAM;YACV;gBAEI,IAAI,UAAU,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,EAAE;oBACpC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;iBACxB;qBACI;oBACD,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;iBAC5C;gBACD,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBACjD,MAAM;YACV;gBACI,MAAM;SACb;QAGD,OAAO,IAAI,oBAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,CAAC;IAEM,iCAAW,GAAlB;QACI,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACtB,CAAC;IAEM,8BAAQ,GAAf,UAAgB,CAAS,EAAE,CAAS;QAChC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,oBAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEnC,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAES,yCAAmB,GAA7B;QAEI,IAAI,IAAI,GAAW,IAAI,CAAC,OAAO,EAAE,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAElD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IAES,sCAAgB,GAA1B;QACI,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACpE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;SAC/C;IACL,CAAC;IAES,sCAAgB,GAA1B;QACI,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACvE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;SAClD;IACL,CAAC;IAES,+CAAyB,GAAnC,UAAoC,IAAU,EAAE,aAAoB;QAchE,IAAI,EAAE,GAAU,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9B,IAAI,EAAE,GAAU,IAAI,oBAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAChF,IAAI,SAAS,IAA4B,CAAC;QAE1C,IAAI,EAAE,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,EAAE;YACzB,SAAS,IAAiB,CAAC;SAC9B;QACD,IAAI,EAAE,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,EAAE;YACzB,SAAS,IAAe,CAAC;SAC5B;QACD,IAAI,EAAE,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,EAAE;YACzB,SAAS,IAAkB,CAAC;SAC/B;QACD,IAAI,EAAE,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,EAAE;YACzB,SAAS,IAAiB,CAAC;SAC9B;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,uCAAiB,GAAzB,UAA0B,IAAU,EAAE,QAAkB,EAAE,WAAmB;QACzE,IAAI,CAAC,QAAQ,EAAE;YACX,QAAQ,GAAG,IAAI,mBAAQ,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC;YACxD,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;YAEvB,IAAI,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAClD,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAE1C,OAAO,QAAQ,CAAC;SACnB;QAED,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC;QACnC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE;YACpB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAEvC,OAAO,SAAS,CAAC;SACpB;QAED,QAAQ,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAExC,OAAO,QAAQ,CAAC;IACpB,CAAC;IAEO,oCAAc,GAAtB,UAAuB,IAAU,EAAE,QAAkB,EAAE,QAAgB;QACnE,IAAI,CAAC,QAAQ,EAAE;YACX,QAAQ,GAAG,IAAI,mBAAQ,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;YAClD,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;YAEvB,IAAI,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAClD,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAE1C,OAAO,QAAQ,CAAC;SACnB;QAED,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC7B,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE;YACpB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAEvC,OAAO,SAAS,CAAC;SACpB;QAED,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAElC,OAAO,QAAQ,CAAC;IACpB,CAAC;IAEO,sCAAgB,GAAxB,UAAyB,SAAe,EAAE,WAAkB,EAAE,QAAe;QAGzE,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAE9B,IAAI,EAAE,GAAW,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,IAAI,EAAE,GAAW,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAEhD,IAAI,EAAE,GAAW,QAAQ,CAAC,CAAC,CAAC;QAC5B,IAAI,EAAE,GAAW,QAAQ,CAAC,CAAC,CAAC;QAE5B,IAAI,IAAI,GAAW,WAAW,CAAC,CAAC,CAAC;QACjC,IAAI,IAAI,GAAW,WAAW,CAAC,CAAC,CAAC;QAEjC,IAAI,EAAE,GAAG,EAAE,EAAE;YACT,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;SACvB;aACI,IAAI,EAAE,GAAG,EAAE,EAAE;YACd,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;SACvB;aACI;YACD,IAAI,GAAG,EAAE,CAAC;SACb;QAED,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE;YACjB,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;SACrD;aACI;YACD,IAAI,EAAE,GAAG,EAAE,EAAE;gBACT,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;aAC/B;iBACI;gBACD,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;aACnC;SACJ;QAGD,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAEnD,IAAI,EAAE,GAAG,EAAE,EAAE;gBACT,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;aACvB;iBACI;gBACD,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;aACvB;YAED,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE;gBACjB,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;gBAClC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;aACzC;iBACI;gBACD,IAAI,GAAG,EAAE,CAAC;aACb;SACJ;QAED,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhC,OAAO,IAAI,CAAC;IAChB,CAAC;IACL,kBAAC;AAAD,CAAC,CA5gBgC,6BAAc,GA4gB9C;AA5gBY,kCAAW;;;;;;;;;;;;;;;;;;;;;;;;;ACXxB,8EAA+C;AAE/C;IAAiC,+BAAS;IAA1C;;IAOA,CAAC;IANQ,4BAAM,GAAb;QACE,IAAI,KAAK,GAAG,iBAAM,MAAM,WAAE,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAEpD,OAAO,KAAK,CAAC;IACf,CAAC;IACH,kBAAC;AAAD,CAAC,CAPgC,iBAAS,GAOzC;AAPY,kCAAW;;;;;;;;;;;;;;;;;;;;;;;;;ACHxB,gGAA4C;AAK5C;IAAoC,kCAAW;IAA/C;QAAA,qEAgFC;QA9EU,4BAAsB,GAAY,EAAE,CAAC;;IA8EhD,CAAC;IA3EU,+BAAM,GAAb;QACI,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAEjC,IAAI,SAAS,GAAe,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACpF,IAAI,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAEvD,IAAI,KAAK,GAAG,iBAAM,MAAM,WAAE,CAAC;QAG3B,IAAI,IAAI,GAAG;YACP,GAAG,EAAE,MAAM;YACX,CAAC,EAAE,IAAI;YACP,IAAI,EAAE,OAAO;SACd,CAAC;QAEJ,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAE7C,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACvC,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,+BAAM,GAAb,UAAc,SAAe,EAAE,cAAwB;QAGnD,iBAAM,MAAM,YAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAK9B,IAAI,UAAU,GAAW,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,SAAS,IAA2B,CAAC;QAGzC,IAAG,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,EAAC;YAE3D,SAAS,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAEpE,IAAI,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YACvD,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;SACvD;QAGD,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC/B,CAAC;IAES,wCAAe,GAAzB,UAA0B,UAAkB,EAAE,SAAqB;QAC/D,IAAI,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;QAC1B,IAAI,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;QAE1B,IAAI,IAAI,CAAC;QAET,QAAO,SAAS,EAAC;YACb;gBACA,IAAI,GAAG,MAAI,MAAM,UAAI,MAAM,GAAC,CAAC,YAAK,MAAM,GAAC,IAAI,CAAC,sBAAsB,WAAI,MAAM,GAAC,IAAI,CAAC,sBAAsB,YAAK,MAAM,GAAC,IAAI,CAAC,sBAAsB,WAAI,MAAM,GAAC,IAAI,CAAC,sBAAsB,QAAI,CAAC;gBAC5L,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAC,EAAE,CAAC;gBAC/B,MAAM;YACN;gBACA,IAAI,GAAG,OAAI,MAAM,GAAC,CAAC,UAAI,MAAM,WAAK,MAAM,GAAC,IAAI,CAAC,sBAAsB,WAAI,MAAM,GAAC,IAAI,CAAC,sBAAsB,YAAK,MAAM,GAAC,IAAI,CAAC,sBAAsB,WAAI,MAAM,GAAC,IAAI,CAAC,sBAAsB,QAAI,CAAC;gBAC5L,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAC,EAAE,CAAC;gBAC/B,MAAM;YACN;gBACA,IAAI,GAAG,OAAI,MAAM,GAAC,CAAC,UAAI,MAAM,WAAK,MAAM,GAAC,IAAI,CAAC,sBAAsB,WAAI,MAAM,GAAC,IAAI,CAAC,sBAAsB,YAAK,MAAM,GAAC,IAAI,CAAC,sBAAsB,WAAI,MAAM,GAAC,IAAI,CAAC,sBAAsB,QAAI,CAAC;gBAC5L,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAC,EAAE,CAAC;gBAC/B,MAAM;YACN;gBACA,IAAI,GAAG,MAAI,MAAM,UAAI,MAAM,GAAC,CAAC,YAAK,MAAM,GAAC,IAAI,CAAC,sBAAsB,WAAI,MAAM,GAAC,IAAI,CAAC,sBAAsB,YAAK,MAAM,GAAC,IAAI,CAAC,sBAAsB,WAAI,MAAM,GAAC,IAAI,CAAC,sBAAsB,QAAI,CAAC;gBAC5L,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAC,EAAE,CAAC;gBAC/B,MAAM;YACN;gBACA,MAAM;SACT;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEL,qBAAC;AAAD,CAAC,CAhFmC,yBAAW,GAgF9C;AAhFY,wCAAc;;;;;;;;;;;;;;;;;;;;;;;;;ACL3B,yGAAkD;AAElD;IAAgC,8BAAc;IAA9C;;IASA,CAAC;IAPU,2BAAM,GAAb;QACI,IAAI,KAAK,GAAG,iBAAM,MAAM,WAAE,CAAC;QAE3B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC;QAE/D,OAAO,KAAK,CAAC;IACjB,CAAC;IACL,iBAAC;AAAD,CAAC,CAT+B,+BAAc,GAS7C;AATY,gCAAU;;;;;;;;;;;;;;;;;;ACFvB,sFAA8B;AAC9B,kFAA4B;AAC5B,sFAA8B;AAC9B,sFAA8B;AAC9B,4FAAiC;AACjC,oFAA6B;;;;;;;;;;;;;;;;;;ACL7B,0EAAwB;AACxB,0EAAwB;AACxB,kFAA+B;AAC/B,oEAAwB;AACxB,oEAAwB;;;;;;;;;;;;;;;;;;;;;;;;;ACDxB,sGAA4C;AAE5C;IAAuC,6BAAa;IAEhD,mBAAY,IAAgB;eACxB,kBAAM,IAAI,CAAC;IACf,CAAC;IACL,gBAAC;AAAD,CAAC,CALsC,uBAAa,GAKnD;;;;;;;;;;;;;;;;;;;;;;;;;;ACPD,yEAAsC;AAEtC;IAAkC,gCAAO;IAAzC;;IA8GA,CAAC;IAvGU,2BAAI,GAAX,UAAY,IAAU,EAAE,KAAe;QACnC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IACS,oCAAa,GAAvB,UAAwB,MAAe,EAAE,IAAU;QAC/C,IAAI,OAAM,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;YAC3B,IAAI,CAAC,EAAE,GAAW,IAAI,CAAC;SAC1B;aAAM;YACH,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;SACxB;QACD,IAAI,GAAG,GAAkB,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,OAAO,GAAC,IAAI,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,GAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvD,IAAG,IAAI,CAAC,OAAO,CAAC,EAAE;YACd,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;YAC3C,IAAI,MAAM,SAAkB,CAAC;YAC7B,IAAG,IAAI,CAAC,UAAU,EAAE;gBAChB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAClD,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,MAAM,CAAC;gBAClC,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAE/B,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC5C,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,cAAc,CAAC;gBACvC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC7B,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,eAAe,CAAC;gBAC7C,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBACjD,IAAI,MAAI,GAAG,IAAI,CAAC;gBAChB,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,cAAW,MAAI,CAAC,QAAQ,EAAE,CAAC,EAAC;aAC1D;iBAAM;gBACH,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;aACjC;YACD,KAAK,IAAI,IAAI,IAAI,MAAM,EAAE;gBACrB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;oBAC9B,SAAS;iBACZ;gBACD,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAC1C,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC5B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBACnC,IAAG,IAAI,CAAC,UAAU,EAAE;oBAChB,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;oBAC1C,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC5B,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;oBAChC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;iBACtC;aACR;YAEG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAClC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACnC;QAED,IAAI,IAAI,YAAY,MAAM,EAAE;YACxB,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE;gBACnB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;oBAC5B,SAAS;iBACZ;gBACD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;aAC7C;YACD,IAAG,IAAI,CAAC,UAAU,EAAE;gBAChB,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aACnC;SACJ;QAED,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAEM,+BAAQ,GAAf;QACI,IAAI,SAAS,GAAU,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QAC9C,IAAG,SAAS,CAAC,MAAM,GAAC,CAAC,EAAE;YACnB,OAAO;SACV;gCACO,CAAC;YACL,IAAI,IAAI,GAAwC,OAAK,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC3E,IAAG,IAAI,CAAC,KAAK,IAAI,SAAS,EAAE;gBACxB,IAAG,IAAI,CAAC,QAAQ,IAAI,KAAK,EAAE;oBACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;oBACrB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;oBAC5B,IAAI,MAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;oBACxC,IAAI,MAAI,SAAO,CAAC;oBAChB,MAAI,CAAC,OAAO,GAAG,cAAY,MAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,MAAI,CAAC,CAAC,EAAC,CAAC;oBAC7D,MAAI,CAAC,SAAS,GAAG,cAAc,CAAC;oBAChC,MAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;oBAC5B,OAAK,MAAM,CAAC,WAAW,CAAC,MAAI,CAAC,CAAC;oBAC9B,OAAK,WAAW,CAAC,KAAK,GAAG,EAAE,CAAC;iBAC/B;aACJ;QACL,CAAC;;QAfD,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAC,CAAC,EAAE;oBAAxC,CAAC;SAeR;IACL,CAAC;IACM,+BAAQ,GAAf,UAAgB,KAAY,EAAE,YAA0B;QACpD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QACtC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAC,CAAC,EAAE,EAAE;YAC9C,IAAI,IAAI,GAAwC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC3E,IAAG,IAAI,CAAC,KAAK,IAAI,KAAK,EAAG;gBACrB,IAAG,IAAI,CAAC,QAAQ,EAAE;oBACd,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;iBACzB;aACJ;SACJ;IACL,CAAC;IACL,mBAAC;AAAD,CAAC,CA9GiC,iBAAO,GA8GxC;AA9GY,oCAAY;;;;;;;;;;;;;;;;;;;;;;;;;ACLzB,yEAAsC;AAEtC;IAAwB,sBAAO;IAA/B;;IAeA,CAAC;IAdU,iBAAI,GAAX,UAAY,IAAU;QAClB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAES,0BAAa,GAAvB,UAAwB,MAAe,EAAE,IAAU;QAC/C,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1C,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE;YACnB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;gBAC5B,SAAS;aACZ;YACD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SAC7C;QACD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IACL,SAAC;AAAD,CAAC,CAfuB,iBAAO,GAe9B;AAfY,gBAAE;;;;;;;;;;;;;;;;;;;;;;;;;ACFf,yEAAsC;AAEtC;IAA4B,0BAAO;IAAnC;;IAsBA,CAAC;IArBU,qBAAI,GAAX,UAAY,IAAU,EAAE,KAAe;QACnC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAES,8BAAa,GAAvB,UAAwB,MAAe,EAAE,IAAU;QAC/C,IAAI,OAAM,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;YAC3B,IAAI,CAAC,EAAE,GAAW,IAAI,CAAC;SAC1B;aAAM;YACH,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;SACxB;QACD,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,IAAI,YAAY,MAAM,EAAE;YACxB,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE;gBACnB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;oBAC5B,SAAS;iBACZ;gBACD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;aAC7C;SACJ;QACD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IACL,aAAC;AAAD,CAAC,CAtB2B,iBAAO,GAsBlC;AAtBY,wBAAM;;;;;;;;;;;;;;;;;;;;;;;;;ACFnB,2EAA8B;AAC9B,4EAA0C;AAC1C,gEAAkC;AAElC,0FAAoC;AACpC,iFAA8B;AAG9B,iFAAsC;AACtC,6FAAwC;AACxC,6GAA2D;AAE3D;IAA2B,yBAAI;IAU3B,eAAY,IAAkC;QAA9C,YACI,kBAAM,IAAI,CAAC,SAEd;QAZM,gBAAU,GAAgB,EAAE,CAAC;QAC7B,aAAO,GAAa,EAAE,CAAC;QAIpB,iBAAW,GAAG,EAAE,CAAC;QACjB,mBAAa,GAAG,EAAE,CAAC;QAKzB,OAAO,KAAI,CAAC;IAChB,CAAC;IAEM,oBAAI,GAAX,UAAY,IAAU;QAClB,IAAI,CAAC,IAAI,EAAE;YACP,IAAI,GAAG,EAAE,CAAC;SACb;QACD,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;QAC1B,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEhE,IAAI,KAAK,GAAW,GAAG,CAAC;QACxB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,WAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QAE1D,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE;YACpB,KAAiB,UAAkB,EAAlB,SAAI,CAAC,YAAY,CAAC,EAAlB,cAAkB,EAAlB,IAAkB,EAAE;gBAAhC,IAAI,IAAI;gBAET,IAAI,OAAO,GAAG,IAAI,mBAAS,CAAC,IAAI,CAAC,CAAC;gBAClC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;gBACtB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC9B,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC;gBACtB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,WAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC/D,IAAI,QAAQ,GAAG,IAAI,6BAAa,CAAC,OAAO,CAAC,CAAC;gBAC1C,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;aACvC;SACJ;QACD,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE;YACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;SACxC;QACD,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE;YACjB,KAAmB,UAAe,EAAf,SAAI,CAAC,SAAS,CAAC,EAAf,cAAe,EAAf,IAAe,EAAE;gBAA/B,IAAI,MAAM;gBAEX,IAAI,SAAS,GAAG,IAAI,gBAAM,CAAC,MAAM,CAAC,CAAC;gBACnC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC;gBACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAE7B,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC;gBACtB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,WAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;aACpE;YACD,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC;SACzB;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5B,CAAC;IAEM,6BAAa,GAApB;QACI,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAEM,0BAAU,GAAjB;QACI,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAEM,8BAAc,GAArB;QACI,IAAI,IAAI,GAAG,qBAAY,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,oBAAoB,EAAC,CAAC,CAAC;QAC5H,OAAO,IAAI,CAAC;IAIhB,CAAC;IAEM,sBAAM,GAAb;QACI,IAAM,GAAG,GAAU,IAAI,CAAC,MAAM,EAAE,CAAC;QACjC,IAAM,IAAI,GAAU,IAAI,CAAC,OAAO,EAAE,CAAC;QAEnC,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAExG,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,IAAI,GAAG,IAAI,uBAAU,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YACzD,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;SACpC;QAGD,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,IAAI,KAAK,CAAC;QACV,IAAI,SAAS,CAAC;QACd,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;YACxB,IAAI,SAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,SAAO,EAAE;gBACT,KAAK,GAAG,SAAO,CAAC,KAAK,CAAC;aACzB;SACJ;QAED,IAAI,KAAK,KAAK,QAAQ,EAAE;YACpB,SAAS,GAAG,aAAa,CAAC;SAC7B;QACD,SAAS,GAAG,aAAa,CAAC;QAC1B,IAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC;YAC/B,GAAG,EAAE,MAAM;YACX,CAAC,EAAE,GAAG,CAAC,CAAC;YACR,CAAC,EAAE,GAAG,CAAC,CAAC;YACR,MAAM,EAAE,IAAI,CAAC,CAAC;YACd,KAAK,EAAE,IAAI,CAAC,CAAC;YACb,EAAE,EAAE,CAAC;YACL,EAAE,EAAE,CAAC;YACL,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,OAAO;YACf,cAAc,EAAE,CAAC;SACpB,CAAC,CAAC;QACH,IAAI,SAAS,EAAE;YACX,SAAS,CAAC,YAAY,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAC/C,IAAI,WAAW,GAAG,WAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;SAElD;QAGD,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;YACzB,GAAG,EAAE,MAAM;YACX,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;YACrB,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC;YAChC,aAAa,EAAE,QAAQ;YACvB,oBAAoB,EAAE,SAAS;YAC/B,aAAa,EAAE,SAAS;YACxB,WAAW,EAAE,IAAI,CAAC,cAAc;YAChC,IAAI,EAAE,OAAO;SAChB,CAAC,CAAC;QACH,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAExB,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC7B,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAGzB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YAG5B,IAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC;gBACxC,GAAG,EAAE,MAAM;gBACX,EAAE,EAAE,GAAG,CAAC,CAAC;gBACT,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY;gBAC7B,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBAClB,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY;gBAC7B,cAAc,EAAE,CAAC;aACpB,CAAC,CAAC;YAEH,KAAK,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;YAEtC,IAAI,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;YACrF,iBAAiB,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,oCAAoC,CAAC,CAAC;YACtF,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;YAErC,IAAI,GAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YACzD,KAAiB,UAAe,EAAf,SAAI,CAAC,UAAU,EAAf,cAAe,EAAf,IAAe,EAAE;gBAA7B,IAAI,IAAI;gBAET,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBAEnB,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACrD,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,GAAC,CAAC,CAAC;gBAE1C,iBAAiB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBACvC,GAAC,IAAI,IAAI,CAAC,WAAW,CAAC;aACzB;SACJ;QAGD,IAAI,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;QACvD,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,GAAG,MAAM,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QAClE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YAGzB,IAAM,oBAAoB,GAAG,IAAI,CAAC,WAAW,CAAC;gBAC1C,GAAG,EAAE,MAAM;gBACX,EAAE,EAAE,GAAG,CAAC,CAAC;gBACT,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC3E,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBAClB,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC3E,cAAc,EAAE,CAAC;aACpB,CAAC,CAAC;YAEH,KAAK,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;YAExC,IAAI,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;YAC/E,cAAc,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,iCAAiC,CAAC,CAAC;YAChF,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;YAElC,CAAC,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YAC1B,KAAmB,UAAY,EAAZ,SAAI,CAAC,OAAO,EAAZ,cAAY,EAAZ,IAAY,EAAE;gBAA5B,IAAI,MAAM;gBAEX,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;gBAErB,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACvD,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;gBAE5C,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;gBACtC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC;aACzB;SACJ;QAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,oBAAI,GAAX;QACI,IAAI,IAAW,CAAC;QAChB,IAAI,GAAU,iBAAM,IAAI,WAAE,CAAC;QAG3B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC;QAG3B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,cAAI;YACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,mBAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAM;YACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,gBAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,yBAAS,GAAhB;QACI,OAAO,CAAC,mBAAQ,CAAC,gBAAgB,EAAE,mBAAQ,CAAC,gBAAgB,EAAE,mBAAQ,CAAC,YAAY;YAC3E,mBAAQ,CAAC,WAAW,EAAE,mBAAQ,CAAC,eAAe,EAAE,mBAAQ,CAAC,cAAc,EAAE,mBAAQ,CAAC,gBAAgB,CAAC,CAAC;IAChH,CAAC;IAEM,2BAAW,GAAlB,UAAmB,KAAa,EAAE,IAAY;QAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7C,OAAO;SACV;QAED,IAAI,cAAc,CAAC;QACnB,IAAI,IAAI,KAAK,YAAY,EAAE;YACvB,cAAc,GAAG,IAAI,mBAAS,CAAC,KAAK,CAAC,CAAC;SACzC;aACI,IAAI,IAAI,KAAK,SAAS,EAAE;YACzB,cAAc,GAAG,IAAI,gBAAM,CAAC,KAAK,CAAC,CAAC;SACtC;QAED,KAAwB,UAAU,EAAV,SAAI,CAAC,IAAI,CAAC,EAAV,cAAU,EAAV,IAAU,EAAE;YAA/B,IAAI,WAAW;YAChB,IAAI,WAAW,CAAC,QAAQ,EAAE,KAAK,cAAc,CAAC,QAAQ,EAAE,EAAE;gBACtD,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,GAAG,kBAAkB,CAAC,CAAC;gBACtD,cAAc,GAAG,SAAS,CAAC;gBAC3B,OAAO;aACV;SACJ;QAED,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAEhC,WAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAErC,OAAO,cAAc,CAAC;IAC1B,CAAC;IAEM,4BAAY,GAAnB,UAAoB,KAAa;QAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACjD,CAAC;IAEM,+BAAe,GAAtB,UAAuB,IAAe;QAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;IAChC,CAAC;IAEM,4BAAY,GAAnB,UAAoB,MAAc;QAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;IAC7B,CAAC;IAEM,yBAAS,GAAhB,UAAiB,KAAa;QAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC9C,CAAC;IAEM,+BAAe,GAAtB,UAAuB,IAAe;QAClC,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC;IAEM,4BAAY,GAAnB,UAAoB,MAAc;QAC9B,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAChC,CAAC;IAEM,8BAAc,GAArB,UAAsB,QAAuB;QAEzC,IAAI,QAAQ,YAAY,mBAAS,EAAE;YAC/B,IAAI,CAAC,eAAe,CAAY,QAAQ,CAAC,CAAC;SAC7C;QAED,IAAI,QAAQ,YAAY,gBAAM,EAAE;YAC5B,IAAI,CAAC,YAAY,CAAS,QAAQ,CAAC,CAAC;SACvC;QAED,WAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAEM,sBAAM,GAAb,UAAc,qBAA+B;QACzC,IAAI,cAAc,GAAoB,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5D,IAAI,qBAAqB,EAAE;YACvB,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;gBACpB,OAAO;aACV;SACJ;QAED,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACb,OAAO;SACV;QAGD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;QACpB,mBAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAEhC,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAEM,8BAAc,GAArB;QACI,IAAI,OAAO,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC;QACpE,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAGhC,IAAI,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE;YACtE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;SAC3B;QAED,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3B,CAAC;IAEM,2BAAW,GAAlB,UAAmB,QAAgB;QAAnC,iBAkBC;QAjBG,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,QAAQ,CAAC;SAC1C;QAGD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,cAAI;YACpB,IAAI,KAAI,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;gBAC5B,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;aAC1B;iBACI,IAAI,KAAI,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;gBACjC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;aAC1B;QACL,CAAC,CAAC,CAAC;QAEH,WAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAErC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAEM,8BAAc,GAArB,UAAsB,QAAgB;QAClC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEzB,WAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAEM,0BAAU,GAAjB;QAEI,IAAI,QAAQ,GAAG,GAAG,CAAC;QACnB,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QAG/D,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,gBAAM;YAE1B,IAAI,WAAW,CAAC;YAChB,IAAI,MAAM,CAAC,KAAK,EAAE;gBACd,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;aAC5D;iBACI;gBACD,WAAW,GAAG,WAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC;aACtD;YAED,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,GAAG,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAGH,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAQ;YACzB,IAAI,aAAa,CAAC;YAClB,IAAI,QAAQ,CAAC,KAAK,EAAE;gBAChB,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;aAChE;iBACI;gBACD,aAAa,GAAG,WAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC;aAC1D;YAED,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,GAAG,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAGH,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC;QAC5B,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;cACpG,IAAI,CAAC,WAAW,CAAC;QAEvB,IAAI,OAAO,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC;QAE5D,OAAO,OAAO,CAAC;IACnB,CAAC;IAEM,2BAAW,GAAlB;QACI,KAAiB,UAAW,EAAX,SAAI,CAAC,MAAM,EAAX,cAAW,EAAX,IAAW,EAAE;YAAzB,IAAI,IAAI;YACT,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACrB;IACL,CAAC;IAEO,8BAAc,GAAtB;QACI,IAAI,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;QACtF,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;QAChC,WAAW,GAAG,WAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC3C,YAAY,GAAG,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC/C,KAAK,GAAG,CAAC,CAAC;QACV,MAAM,GAAG,EAAE,GAAG,YAAY,CAAC;QAE3B,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,KAAK,eAAe,EAAE;YACzG,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,GAAG,QAAQ,CAAC;SACnB;aAAM;YACH,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YACb,IAAI,GAAG,OAAO,CAAC;YACf,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE;gBACjB,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;aACtC;SACJ;QACD,CAAC,GAAG,WAAI,CAAC,MAAM,CAAC,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC;QACzC,IAAI,GAAG,WAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC7B,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/C,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,EAAE,CAAC;YAC9C,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;gBAC5C,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,WAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;aACxE;SACJ;aAAM;YACH,MAAM,IAAI,EAAE,CAAC;SAChB;QACD,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACzC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;YAC3C,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;gBACzC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,WAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;aACrE;SACJ;QACD,KAAK,IAAI,EAAE,CAAC;QAEZ,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACxB,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACV,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAEV,IAAI,GAAG;YACH,GAAG,EAAE,MAAM;YACX,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,MAAM;YAChB,GAAG,EAAE,CAAC;YACN,GAAG,EAAE,CAAC;YACN,OAAO,EAAE,IAAI,GAAG,YAAY;YAC5B,MAAM,EAAE,MAAM;SACjB,CAAC;QACF,CAAC,CAAC,WAAW,CAAC,WAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,WAAW,CAAC,WAAI,CAAC,MAAM,CAAC;YACtB,GAAG,EAAE,MAAM;YACX,EAAE,EAAE,CAAC;YACL,GAAG,EAAE,CAAC;YACN,GAAG,EAAE,CAAC;YACN,MAAM,EAAE,YAAY;YACpB,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,aAAa;SACzB,CAAC,CAAC,CAAC;QAEJ,IAAI,GAAG,WAAI,CAAC,MAAM,CAAC;YACf,GAAG,EAAE,MAAM;YACX,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,UAAU;YACnB,aAAa,EAAE,OAAO;YACtB,GAAG,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;YACnC,GAAG,EAAE,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAC/C,OAAO,EAAE,IAAI,CAAC,KAAK;SACtB,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,eAAe,EAAE;YACpG,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;SACrD;QACD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;QAE9C,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC,CAAC,WAAW,CAAC,WAAI,CAAC,MAAM,CAAC;YACtB,GAAG,EAAE,MAAM;YACX,EAAE,EAAE,CAAC;YACL,EAAE,EAAE,CAAC,GAAG,YAAY;YACpB,EAAE,EAAE,CAAC,GAAG,KAAK;YACb,EAAE,EAAE,CAAC,GAAG,YAAY;YACpB,MAAM,EAAE,MAAM;SACjB,CAAC,CAAC,CAAC;QACJ,CAAC,IAAI,YAAY,GAAG,EAAE,CAAC;QAEvB,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;gBAC5C,CAAC,CAAC,WAAW,CAAC,WAAI,CAAC,MAAM,CAAC;oBACtB,GAAG,EAAE,MAAM;oBACX,KAAK,EAAE,IAAI;oBACX,aAAa,EAAE,MAAM;oBACrB,OAAO,EAAE,KAAK;oBACd,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;oBACb,GAAG,EAAE,CAAC;oBACN,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;iBAC5B,CAAC,CAAC,CAAC;gBACJ,CAAC,IAAI,EAAE,CAAC;aACX;YACD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC5B,CAAC,IAAI,EAAE,CAAC;aACX;SACJ;QACD,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACzC,CAAC,CAAC,WAAW,CAAC,WAAI,CAAC,MAAM,CAAC,EAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAC,CAAC,CAAC,CAAC;YAC9F,CAAC,IAAI,EAAE,CAAC;YACR,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;gBACzC,CAAC,CAAC,WAAW,CAAC,WAAI,CAAC,MAAM,CAAC;oBACtB,GAAG,EAAE,MAAM;oBACX,KAAK,EAAE,IAAI;oBACX,aAAa,EAAE,MAAM;oBACrB,OAAO,EAAE,KAAK;oBACd,GAAG,EAAE,CAAC,GAAG,EAAE;oBACX,GAAG,EAAE,CAAC;oBACN,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;iBACzB,CAAC,CAAC,CAAC;gBACJ,CAAC,IAAI,EAAE,CAAC;aACX;SACJ;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IACL,YAAC;AAAD,CAAC,CAjhB0B,WAAI,GAihB9B;AAjhBY,sBAAK;;;;;;;;;;;;;;;;;;;;;;;;;ACZlB,gEAAgC;AAChC,8FAA+C;AAC/C,gEAA8B;AAE9B;IAA2C,iCAAc;IAarD,uBAAY,IAAgB;QAA5B,YACI,iBAAO,SAMV;QAbM,WAAK,GAAG,IAAI,cAAI,EAAE,CAAC;QAQtB,KAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACrC,KAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAClC,KAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAClC,KAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACnC,KAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;;IAC3B,CAAC;IAEM,8BAAM,GAAb,UAAc,IAAgB;QAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IAEM,sCAAc,GAArB,UAAsB,QAAgB;QAClC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IAEM,kCAAU,GAAjB,UAAkB,IAAY;QAC1B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IAEM,mCAAW,GAAlB,UAAmB,KAAa;QAC5B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IAEM,kCAAU,GAAjB,UAAkB,IAAY;QAC1B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IAEM,+BAAO,GAAd;QACI,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAEM,mCAAW,GAAlB;QACI,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;IAEM,+BAAO,GAAd;QACI,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAEM,8BAAM,GAAb;QACI,IAAI,QAAQ,GAAG;YACX,GAAG,EAAE,MAAM;YACX,aAAa,EAAE,OAAO;YACtB,oBAAoB,EAAE,QAAQ;SACjC,CAAC;QAEF,IAAI,OAAO,GAAG,WAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEtC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;QAErB,OAAO,OAAO,CAAC;IACnB,CAAC;IAEM,gCAAQ,GAAf;QACI,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC;QACnD,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;QAC9C,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SAClD;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAES,mCAAW,GAArB,UAAsB,IAAgB;QAElC,IAAI,CAAC,IAAI,EAAE;YACP,OAAO;SACV;QAED,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;SAC1C;QAED,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;SAC1C;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SAClD;QAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAG1B,IAAI,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;gBAG3C,IAAI,uBAAuB,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAGrD,IAAI,SAAS,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC;gBAC3C,IAAI,MAAI,CAAC;gBACT,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,EAAE;oBAC7D,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;oBAC3C,MAAI,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;iBACtF;qBACI;oBACD,MAAI,GAAG,uBAAuB,CAAC;iBAClC;gBAED,MAAI,GAAG,MAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAE/B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAI,CAAC,CAAC;gBAClC,IAAI,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,QAAQ,CAAC;gBAG9C,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE;oBACjC,IAAI,GAAG,QAAQ,CAAC;iBACnB;gBAED,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAC/B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAG,IAAI,CAAC,CAAC;aACtC;iBAAM;gBACH,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC/B,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;oBAE3C,IAAI,uBAAuB,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAGrD,IAAI,SAAS,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC;oBAC3C,IAAI,MAAI,CAAC;oBACT,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,EAAE;wBAC7D,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;wBAC3C,MAAI,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;qBACtF;yBACI;wBACD,MAAI,GAAG,uBAAuB,CAAC;qBAClC;oBAED,MAAI,GAAG,MAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBAE/B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAI,CAAC,CAAC;oBAClC,IAAI,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;oBAC3C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;oBACpC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC,CAAC;iBAC7C;aACJ;SACJ;IACL,CAAC;IAES,wCAAgB,GAA1B;QACI,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;SAC5C;QACD,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,WAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SAC/C;IACL,CAAC;IACL,oBAAC;AAAD,CAAC,CA3K0C,6BAAc,GA2KxD;;;;;;;;;;;;;;;;;;;;;;;;;;AC/KD,2EAA4B;AAK5B;IAA0B,wBAAI;IAO1B,cAAY,IAAkC;QAA9C,YACI,kBAAM,IAAI,CAAC,SAEd;QARO,SAAG,GAAW,CAAC,CAAC;QAEhB,WAAK,GAAW,GAAG,CAAC;QACpB,aAAO,GAAW,GAAG,CAAC;QAI1B,KAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;;IAC5B,CAAC;IAEM,wBAAS,GAAhB,UAAiB,MAAc;QAC3B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;QACpB,IAAI,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;IAEM,sBAAO,GAAd;QACI,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACpC,IAAI,KAAK,EAAE;gBACP,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;aACjC;SACJ;IACL,CAAC;IAEM,oBAAK,GAAZ;QACI,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnC,IAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,KAAI,kBAAkB,EAAE;oBACvF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;oBACtE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;iBACpF;qBAAK;oBACF,MAAM;iBACT;aACJ;SACJ;IACL,CAAC;IAEM,qBAAM,GAAb;QACI,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACxB,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1B,IAAI,IAAI,GAA2B,IAAI,CAAC,WAAW,CAAC,EAAC,GAAG,EAAE,GAAG,EAAC,CAAC,CAAC;QAChE,IAAM,IAAI,GAAG;YACT,GAAG,EAAE,MAAM;YACX,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO;YAChC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO;YAChC,EAAE,EAAE,CAAC;YACL,EAAE,EAAE,CAAC;YACL,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK;YAC3B,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK;YAC1B,KAAK,EAAE,wCAAwC;SAClD,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QAEzC,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpC,IAAI,KAAK,EAAE;YACP,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SAC3B;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,+BAAgB,GAAvB,UAAwB,SAAmB;QACvC,IAAG,SAAS,CAAC,MAAM,GAAC,CAAC,EAAE;YACnB,IAAI,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACzB,IAAI,MAAI,GAAC,IAAI,CAAC;YACd,UAAU,CAAC,cAAY,MAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAC,EAAE,GAAG,CAAC,CAAC;SAClE;IACL,CAAC;IAEM,mBAAI,GAAX;QACI,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,MAAM,GAAU,EAAE,CAAC;QACvB,IAAI,CAAQ,CAAC;QACb,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,IAAI,CAAC,GAAG,EAAC,CAAC,EAAE,EAAE;YACpB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAClB;QACD,KAAI,CAAC,GAAC,IAAI,CAAC,GAAG,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAE;YACpB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAClB;QACD,IAAI,IAAI,GAAC,IAAI,CAAC;QACd,MAAM,CAAC,IAAI,CAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAC,CAAC,CAAE,CAAC;QACtD,UAAU,CAAC,cAAY,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAC,EAAE,GAAG,CAAC,CAAC;IAChE,CAAC;IACM,6BAAc,GAArB;QACI,IAAG,IAAI,CAAC,UAAU,EAAE;YAChB,OAAO;SACV;QACD,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,GAAE,CAAC,CAAC;QACjD,IAAM,IAAI,GAAG;YACT,GAAG,EAAE,kBAAkB;YACvB,aAAa,EAAE,KAAK;YACpB,aAAa,EAAC,WAAW;YACzB,IAAI,EAAC,QAAQ;YACb,GAAG,EAAE,IAAI;YACT,WAAW,EAAC,GAAG;YACf,IAAI,EAAC,IAAI,GAAC,MAAM,GAAC,GAAG,GAAC,MAAM;YAC3B,EAAE,EAAC,MAAM,GAAC,MAAM,GAAC,GAAG,GAAC,MAAM;SAC9B,CAAC;QACF,IAAI,CAAC,UAAU,GAAe,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAEM,4BAAa,GAApB;QACI,IAAG,IAAI,CAAC,UAAU,EAAE;YAChB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACxC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;SAC1B;IACL,CAAC;IAEM,+BAAgB,GAAvB;QACI,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;YAClB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC9B;aAAM,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;YACxB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SACrC;aAAM,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;YACxB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SAC3C;aAAM,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;YACxB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SACjD;aAAM,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;YACxB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SACvD;aAAM,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;YACxB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SAC7D;aAAM,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;YACxB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SACnE;aAAM,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;YACxB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SACzE;aAAM,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;YACxB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SAC/E;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,wBAAS,GAAjB;QAAkB,gBAAkB;aAAlB,UAAkB,EAAlB,qBAAkB,EAAlB,IAAkB;YAAlB,2BAAkB;;QAChC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE;YACvB,OAAO,IAAI,CAAC;SACf;QACD,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1B,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAExB,IAAI,KAAK,GAA0B,IAAI,CAAC,WAAW,CAAC,EAAC,GAAG,EAAE,GAAG,EAAC,CAAC,CAAC;QAGhE,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YAC/C,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAClE;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IACO,2BAAY,GAApB,UAAqB,CAAQ,EAAE,CAAQ;QACnC,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1B,IAAI,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,GAAC,IAAI,CAAC,KAAK,CAAC;QACpC,IAAI,MAAM,GAAG,IAAI,CAAC,CAAC,GAAC,IAAI,CAAC,OAAO,CAAC;QACjC,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,GAAC,IAAI,CAAC,KAAK,CAAC;QAC7B,IAAM,IAAI,GAAG;YACT,GAAG,EAAE,QAAQ;YACb,CAAC,EAAG,MAAM;YACV,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM;YACxC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM;YACxC,MAAM,EAAC,OAAO;YACd,cAAc,EAAC,GAAG;YAClB,IAAI,EAAC,KAAK;YACV,KAAK,EAAE,wCAAwC;SAClD,CAAC;QACF,OAAmB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IACL,WAAC;AAAD,CAAC,CAzKyB,WAAI,GAyK7B;AAzKY,oBAAI;;;;;;;;;;;;;;;;;;;;;;;;;ACLjB,yEAAsC;AAItC;IAAyB,uBAAO;IAAhC;;IA8DA,CAAC;IA3DU,kBAAI,GAAX,UAAY,IAAa;QACrB,IAAI,EAAU,CAAC;QAEf,IAAI,OAAM,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;YAC3B,EAAE,GAAW,IAAI,CAAC;SACrB;aAAM;YACH,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YACb,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;YAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;SACjC;QACD,IAAI,CAAC,EAAE,EAAE;YACL,OAAO;SACV;QACD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,GAAgB,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAEnD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAIhB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;SAEhD;QAED,IAAI,GAAG,YAAY,cAAc,EAAE;YAC/B,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;SACpB;aAAM;YACH,IAAI,CAAC,GAAG,EAAE;gBACN,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC3C,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;gBACvC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACnD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aACjC;iBAAM;gBAEH,OAAO;aACV;SACJ;QAGD,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;YACjC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;SACtC;IACL,CAAC;IAEM,qBAAO,GAAd,UAAe,MAAc,EAAE,MAAY;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,MAAM,EAAE;YACR,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;gBACvD,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;oBAC3C,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;iBAC5C;aACJ;SACJ;IACL,CAAC;IAEM,2BAAa,GAApB,UAAqB,QAAgB,EAAE,QAAa,EAAE,QAAa;QAC/D,IAAI,CAAC,KAAK,CAAC,SAAS,GAAW,QAAQ,CAAC;IAC5C,CAAC;IACL,UAAC;AAAD,CAAC,CA9DwB,iBAAO,GA8D/B;AA9DY,kBAAG;;;;;;;;;;;;;;;;;;;;;;;;;ACJhB,yEAAsC;AAGtC;IAA0B,wBAAO;IAAjC;QAAA,qEA0JC;QAxJW,cAAQ,GAAW,EAAE,CAAC;;IAwJlC,CAAC;IAxIU,mBAAI,GAAX,UAAY,IAAS;QACjB,IAAI,EAAU,CAAC;QAEf,IAAI,OAAM,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;YAC3B,EAAE,GAAG,IAAI,CAAC;SACb;aAAM;YACH,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;SAChB;QACD,IAAI,CAAC,EAAE,EAAE;YACL,OAAO;SACV;QACD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,IAAI,GAAgB,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAEpD,IAAI,IAAI,YAAY,eAAe,EAAE;YACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;gBACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;aACvD;SACJ;aAAM;YACH,IAAI,CAAC,IAAI,EAAE;gBACP,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAC5C,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;gBAEvC,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;oBACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;iBACpC;gBAGD,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE;oBACnB,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE;wBACrC,SAAS;qBACZ;oBACD,IAAI,IAAI,KAAK,UAAU,EAAE;wBACrB,SAAS;qBACZ;oBACD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;iBAC7C;gBACD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aACjC;iBAAM;gBAEH,OAAO;aACV;SACJ;QAGD,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC1B,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,OAAO,EAAE;YACT,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACtB;QAGD,KAAkB,UAAa,EAAb,SAAI,CAAC,QAAQ,EAAb,cAAa,EAAb,IAAa,EAAE;YAA5B,IAAI,KAAK;YAEV,IAAI,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;gBAClC,IAAI,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;gBACjC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,GAAG,GAAG,QAAQ,CAAC;gBAC1C,KAAK,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;aAChC;YACD,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;gBAChC,KAAK,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;aAC5B;YAGD,IAAI,OAAO,GAAY,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAGrD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;SAC5C;IAEL,CAAC;IAEM,0BAAW,GAAlB,UAAmB,EAAU;QACzB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,IAAI,GAAa,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAClC,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAEtC,IAAI,YAAY,CAAC,QAAQ,EAAE;gBACvB,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;aAC7E;SACJ;IACL,CAAC;IAGD,sBAAI,8BAAY;aAAhB;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;;;OAAA;IAEM,uBAAQ,GAAf,UAAgB,MAAc,EAAE,SAAiB,EAAE,QAAgB,EAAG,QAAiB;QACnF,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;YACrB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;SACzE;QACD,OAAO,iBAAM,QAAQ,YAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjE,CAAC;IAsCL,WAAC;AAAD,CAAC,CA1JyB,iBAAO,GA0JhC;AA1JY,oBAAI;;;;;;;;;;;;;;;;;;;;;;;;;ACAjB,yEAAsC;AAEtC;IAA0B,wBAAO;IAC7B,cAAY,IAAqB;QAAjC,YACI,iBAAO,SA8BV;QA5BG,IAAI,EAAU,CAAC;QACf,IAAI,GAAW,CAAC;QAGhB,IAAI,OAAM,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;YAC3B,EAAE,GAAG,IAAI,CAAC;YACV,IAAI,GAAG,EAAE,CAAC;SACb;aAAM,IAAI,IAAI,EAAE;YACb,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;SAChB;QACD,IAAI,EAAE,EAAE;YACJ,KAAI,CAAC,EAAE,GAAG,EAAE,CAAC;YACb,KAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;SAC5C;QACD,IAAI,CAAC,KAAI,CAAC,KAAK,EAAE;YACb,IAAI,IAAI,EAAE;gBACN,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;aAC9B;iBAAM;gBACH,GAAG,GAAG,KAAK,CAAC;aACf;YACD,KAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,QAAM,GAAG,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,QAAM,CAAC,WAAW,CAAC,KAAI,CAAC,KAAK,CAAC,CAAC;SAClC;QACD,IAAI,CAAC,MAAM,EAAE;;SAEZ;QACD,KAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAI,CAAC,KAAK,CAAC,CAAC;;IAC1C,CAAC;IAEO,6BAAc,GAAtB,UAAuB,UAAkB,EAAE,MAAY;QACnD,IAAI,MAAM,CAAC;QACX,IAAI,CAAC,MAAM,EAAE;YACT,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;YACpC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;SAC3C;QACD,KAAK,IAAI,GAAG,IAAI,UAAU,EAAE;YACxB,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;gBACjC,SAAS;aACZ;YACD,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;YAC3B,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;gBAC1B,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC7B,SAAS;aACZ;YAED,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,MAAM,KAAK,aAAa,IAAI,MAAM,KAAK,OAAO,EAAE;gBAChG,SAAS;aACZ;YACD,IAAI,MAAM,KAAK,UAAU,EAAE;gBACvB,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;oBAChC,KAAK,IAAI,IAAI,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE;wBAC9B,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE;4BAChD,SAAS;yBACZ;wBACD,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;wBACtC,IAAI,KAAK,EAAE;4BACP,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;yBAC7B;qBACJ;iBACJ;qBAAM;oBACH,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;oBACjD,IAAI,KAAK,EAAE;wBACP,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;qBAC7B;iBACJ;gBACD,SAAS;aACZ;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;SACjC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IACL,WAAC;AAAD,CAAC,CA5EyB,iBAAO,GA4EhC;AA5EY,oBAAI;;;;;;;;;;;;;;;;;;;;;;;;;ACLjB,8FAAwC;AACxC,gEAAkC;AAClC,2EAA8B;AAC9B,4EAA0C;AAE1C;IAA8B,4BAAI;IAQ9B,kBAAY,IAAS;QAArB,YACI,kBAAM,IAAI,CAAC,SAed;QAtBM,iBAAW,GAAW,EAAE,CAAC;QAQ5B,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;YAC5B,KAAI,CAAC,EAAE,GAAG,IAAI,CAAC;SAClB;aAAM;YACH,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,KAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;aACjC;YACD,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,KAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;aACvC;SACJ;QACD,KAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,IAAI,QAAQ,GAAG,KAAI,CAAC,QAAQ,EAAE,CAAC;QAC/B,KAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;;IAC1C,CAAC;IAEM,oCAAiB,GAAxB,UAAyB,WAAmB;QACxC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAE/B,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEtC,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;SACxE;QAED,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACb,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAEnC,OAAO;SACV;QAED,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACjF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1C,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAE3B,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAEnC,OAAO;SACV;QAED,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,eAAe,CAAC,WAAW,GAAG,WAAW,CAAC;YAG/C,IAAI,IAAI,CAAC,eAAe,EAAE;gBACtB,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACpE,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;aACxE;YAED,OAAO;SACV;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1C,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAE3B,OAAO;SACV;IACL,CAAC;IAEM,iCAAc,GAArB,UAAsB,QAAgB;QAClC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEzB,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEtC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACb,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAEnC,OAAO;SACV;QAED,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAC9E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1C,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAE3B,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAEnC,OAAO;SACV;QAED,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,QAAQ,CAAC;YAGzC,IAAI,IAAI,CAAC,eAAe,EAAE;gBACtB,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACpE,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;aACxE;YAED,OAAO;SACV;QAED,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1C,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC9B;IACL,CAAC;IAEM,yBAAM,GAAb;QACI,IAAI,GAAG,GAAU,IAAI,CAAC,MAAM,EAAE,CAAC;QAC/B,IAAI,KAAK,GAAG,WAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAG1F,IAAI,CAAC,eAAe,GAAG,WAAI,CAAC,WAAW,CAAC;YACpC,GAAG,EAAE,MAAM;YACX,CAAC,EAAE,GAAG,CAAC,CAAC;YACR,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,oBAAoB,GAAG,CAAC;YACxC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACvB,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACxB,IAAI,EAAE,MAAM;YACZ,cAAc,EAAE,CAAC;YACjB,EAAE,EAAE,GAAG;YACP,EAAE,EAAE,GAAG;SACV,CAAC,CAAC;QACH,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAExC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACd,IAAI,IAAI,CAAC,QAAQ,EAAE;YAEf,IAAI,CAAC,YAAY,GAAG,WAAI,CAAC,WAAW,CAAC;gBACjC,GAAG,EAAE,MAAM;gBACX,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC;gBACZ,CAAC,EAAE,CAAC;gBACJ,aAAa,EAAE,MAAM;aACxB,CAAC,CAAC;YACH,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC9C,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAErC,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC;SAClC;QAGD,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,eAAe,GAAG,WAAI,CAAC,WAAW,CAAC;gBACpC,GAAG,EAAE,MAAM;gBACX,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC;gBACZ,CAAC,EAAE,CAAC;gBACJ,aAAa,EAAE,MAAM;aACxB,CAAC,CAAC;YACH,IAAI,CAAC,eAAe,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YACpD,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SAC3C;QAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,0BAAO,GAAd;QACI,IAAI,oBAAoB,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3E,IAAI,iBAAiB,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAElE,OAAO,CAAC,iBAAiB,IAAI,CAAC,oBAAoB,CAAC;IACvD,CAAC;IAEM,iCAAc,GAArB,UAAsB,MAAa;QAE/B,IAAI,CAAC,MAAM,EAAE;YACT,OAAO;SACV;QAED,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAG3B,IAAI,OAAO,GAAG,IAAI,oBAAK,EAAE,CAAC;QAC1B,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QAChC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QAGhC,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxF,IAAI,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YACxB,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;SACjC;QAGD,IAAI,SAAS,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,SAAS,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,GAAG,SAAS,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC;QAG/F,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAC/B,CAAC;IAEM,0BAAO,GAAd;QACI,IAAI,OAAO,GAAW,EAAE,CAAC;QAEzB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;SAC3B;QACD,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBACpB,OAAO,IAAI,IAAI,CAAC;aACnB;YACD,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC;SAC/B;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAEM,4BAAS,GAAhB;QACI,OAAO,CAAC,mBAAQ,CAAC,YAAY,EAAE,mBAAQ,CAAC,eAAe,EAAE,mBAAQ,CAAC,cAAc,CAAC,CAAC;IACtF,CAAC;IAEO,2BAAQ,GAAhB;QACI,IAAI,IAAI,GAAW,IAAI,CAAC,OAAO,EAAE,CAAC;QAClC,IAAI,KAAK,GAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,OAAO,GAAG,IAAI,oBAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACnB,OAAO,OAAO,CAAC;SAClB;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YAEtC,IAAI,UAAU,GAAe,WAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;YAClD,OAAO,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC;YAE/B,IAAI,CAAC,oBAAoB,GAAG,UAAU,CAAC,MAAM,CAAC;SACjD;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IACO,sCAAmB,GAA3B;QACI,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;IAClC,CAAC;IACL,eAAC;AAAD,CAAC,CAxP6B,WAAI,GAwPjC;AAxPY,4BAAQ;;;;;;;;;;;;;;;;;;;;;;;;;ACLrB,yEAAsC;AAGtC,8FAAoD;AAEpD;IAA2B,yBAAO;IAG9B;eACI,iBAAO;IACX,CAAC;IAEM,sCAAsB,GAA7B,UAA8B,OAAc;QACxC,IAAM,IAAI,GAAG,iBAAM,sBAAsB,YAAC,OAAO,CAAC,CAAC;QACnD,IAAI,UAAU,KAAK,IAAI,CAAC,IAAI,IAAI,OAAO,KAAK,IAAI,CAAC,IAAI,EAAE;YACnD,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;SACpC;QACD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,oBAAI,GAAX,UAAY,IAAS;QACjB,IAAI,EAAU,CAAC;QACf,IAAI,UAAuB,CAAC;QAC5B,IAAI,OAAgB,CAAC;QAErB,IAAI,OAAM,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;YAC3B,EAAE,GAAG,IAAI,CAAC;YACV,OAAO,GAAG,IAAI,CAAC;SAClB;aAAM;YACH,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;aAC9B;iBAAM;gBACH,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;aACxB;YACD,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;gBACjC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;aACtC;YACD,OAAO,GAAG,KAAK,CAAC;SACnB;QACD,IAAI,CAAC,EAAE,EAAE;YACL,OAAO;SACV;QACD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QAEb,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAEzC,IAAI,OAAO,EAAE;YACT,IAAI,UAAU,EAAE;gBAGZ,IAAI,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;oBACrC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;iBACzD;aACJ;SACJ;QAED,IAAI,UAAU,YAAY,gBAAgB,EAAE;YACxC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;SAE/B;aAAM;YACH,IAAI,CAAC,UAAU,EAAE;gBACb,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAG7D,IAAI,OAAM,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;oBAC3B,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE;wBACnB,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE;4BACrC,SAAS;yBACZ;wBAED,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;qBAC7C;iBACJ;qBAAM;oBACH,IAAI,IAAI,CAAC,IAAI,EAAE;wBACX,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;qBAC9C;oBACD,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;wBAC9B,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;qBACnD;oBACD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;oBACvC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;iBACtD;gBAED,IAAI,IAAI,CAAC,KAAK,EAAE;oBAEZ,IAAI,IAAI,CAAC,MAAM,EAAE;wBACb,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;qBACvD;iBACJ;gBACD,IAAI,IAAI,CAAC,MAAM,EAAE;oBACb,+BAAc,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;iBAChF;gBAED,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aACjC;iBAAM;gBAEH,OAAO;aACV;SACJ;IACL,CAAC;IAEM,uBAAO,GAAd,UAAe,MAAc,EAAE,MAAY;QAEvC,IAAI,IAAI,CAAC,QAAQ,IAAI,MAAM,EAAE;YACzB,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC3C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBACrB,+BAAc,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;aAEhF;SACJ;IACL,CAAC;IAiBM,8BAAc,GAArB,UAAsB,EAAS;QAC3B,IAAI,IAAI,CAAC,KAAK,YAAY,gBAAgB,KAAK,KAAK,EAAE;YAClD,OAAO;SACV;QACD,IAAI,OAAO,GAAsB,IAAI,CAAC,KAAM,CAAC;QAC7C,IAAI,OAAO,CAAC,aAAa,EAAE,EAAE;YACzB,iBAAM,cAAc,YAAC,EAAE,CAAC,CAAC;SAC5B;IAoDL,CAAC;IAEM,uBAAO,GAAd,UAAe,IAAY;QACvB,IAAI,QAAQ,GAAW,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,QAAQ,KAAK,IAAI,EAAE;YACnB,OAAO;SACV;QACD,IAAI,IAAI,KAAK,OAAO,EAAE;YAClB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;SAC5C;aAAM;YACH,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;SACvC;IACL,CAAC;IACL,YAAC;AAAD,CAAC,CAvM0B,iBAAO,GAuMjC;AAvMY,sBAAK;;;;;;;;;;;;;;;;;;;;;;;;;ACLlB,yEAAsC;AAEtC;IAA2B,yBAAO;IAAlC;;IAmBA,CAAC;IAlBU,oBAAI,GAAX,UAAY,IAAU;QAClB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAES,6BAAa,GAAvB,UAAwB,MAAe,EAAE,IAAU;QAC/C,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC7C,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE;YACnB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;gBAC5B,SAAS;aACZ;YACD,IAAI,IAAI,KAAK,aAAa,EAAE;gBACxB,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;aAChD;iBAAM;gBACH,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;aAC7C;SACJ;QACD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IACL,YAAC;AAAD,CAAC,CAnB0B,iBAAO,GAmBjC;AAnBY,sBAAK;;;;;;;;;;;;;;;;;;;;;;;;;ACFlB,gEAAkC;AAGlC,sGAA4C;AAE5C;IAAoC,0BAAa;IAE7C,gBAAY,IAAgB;eACxB,kBAAM,IAAI,CAAC;IACf,CAAC;IAES,4BAAW,GAArB,UAAsB,IAAgB;QAClC,IAAI,CAAC,IAAI,EAAE;YACP,OAAO;SACV;QAED,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC9B;QAED,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC9B;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAClC;QAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAE1B,IAAI,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAEnC,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;gBAG3C,IAAI,uBAAuB,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAGrD,IAAI,SAAS,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC;gBAC3C,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,EAAE;oBAC7D,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;oBAC/B,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;iBAChG;qBACI;oBACD,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;iBAC5C;gBACD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,CAAC;aACrD;iBAEI;gBAED,IAAI,uBAAuB,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAG1C,IAAI,SAAS,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC;gBAC3C,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,EAAE;oBAC7D,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;oBAC/B,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;iBAChG;qBAAO;oBACJ,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;iBAC5C;gBACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;aAC3B;SACJ;QAED,IAAI,WAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,WAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,KAAK,KAAK,EAAE;YAC/G,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;SACnE;IACL,CAAC;IACL,aAAC;AAAD,CAAC,CAhEmC,uBAAa,GAgEhD;;;;;;;;;;;;;;;;;;;;;;;;;;ACrED,8FAA+C;AAM/C;IAA0B,wBAAc;IAMpC,cAAY,IAA4B;QAAxC,YACI,iBAAO,SAaV;QAnBM,YAAM,GAAkB,EAAE,CAAC;QAC3B,eAAS,GAAW,GAAG,CAAC;QACxB,gBAAU,GAAW,EAAE,CAAC;QAO3B,KAAI,CAAC,QAAQ,CAAC,KAAI,CAAC,SAAS,EAAE,KAAI,CAAC,UAAU,CAAC,CAAC;QAE/C,IAAI,IAAI,EAAE;YACN,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE;gBACxB,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;aACtC;YACD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE;gBACjC,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;aAChD;SACJ;;IACL,CAAC;IAEM,qBAAM,GAAb;QACI,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1B,IAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAE5B,IAAM,IAAI,GAAG;YACT,GAAG,EAAE,MAAM;YACX,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;YACrB,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;YACrB,EAAE,EAAE,CAAC;YACL,EAAE,EAAE,CAAC;YACL,MAAM,EAAE,IAAI,CAAC,CAAC;YACd,KAAK,EAAE,IAAI,CAAC,CAAC;YACb,KAAK,EAAE,wCAAwC;SAClD,CAAC;QACF,IAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAErC,IAAM,QAAQ,GAAG;YACb,GAAG,EAAE,MAAM;YACX,CAAC,EAAE,GAAG,CAAC,CAAC;YACR,CAAC,EAAE,GAAG,CAAC,CAAC;YACR,aAAa,EAAE,QAAQ;YACvB,oBAAoB,EAAE,QAAQ;YAC9B,aAAa,EAAE,SAAS;YACxB,WAAW,EAAE,IAAI;YACjB,IAAI,EAAE,OAAO;SAChB,CAAC;QACF,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC;QAE3B,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,EAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAC,CAAC,CAAC;QACtD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACzB,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAExB,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,mBAAI,GAAX;QACI,IAAI,IAAU,CAAC;QAEf,IAAI,KAAK,GAAe,IAAI,CAAC,MAAM,IAAgB,IAAI,CAAC,OAAO,EAAE,CAAC;QAClE,IAAI,KAAK,EAAE;YACP,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC;YACtC,IAAI,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,GAAS,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YACpD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;YAClD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;SACvB;aAAM;YACH,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC;YAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;SAChC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,0BAAW,GAAlB;QACI,KAAiB,UAAW,EAAX,SAAI,CAAC,MAAM,EAAX,cAAW,EAAX,IAAW,EAAE;YAAzB,IAAI,IAAI;YACT,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACrB;IACL,CAAC;IAEM,qBAAM,GAAb,UAAc,qBAA+B;IAE7C,CAAC;IACM,2BAAY,GAAnB,UAAoB,KAAa;QAC7B,OAAO,IAAI,CAAC;IAChB,CAAC;IACM,4BAAa,GAApB;QACI,OAAO,IAAI,CAAC;IAChB,CAAC;IACM,wBAAS,GAAhB,UAAiB,KAAa;QAC1B,OAAO,IAAI,CAAC;IAChB,CAAC;IACM,0BAAW,GAAlB,UAAmB,QAAgB;IAEnC,CAAC;IACL,WAAC;AAAD,CAAC,CAhGyB,6BAAc,GAgGvC;AAhGY,oBAAI;;;;;;;;;;;;;;;;;;;;;;;;;ACNjB,8FAA+C;AAE/C;IAAwB,sBAAc;IAAtC;;IA6BA,CAAC;IA5BiB,SAAM,GAApB,UAAqB,OAAe;QAChC,IAAI,MAAM,GAAO,IAAI,EAAE,EAAE,CAAC;QAC1B,KAAK,IAAI,GAAG,IAAI,OAAO,EAAE;YACrB,IAAI,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE;gBACvC,SAAS;aACZ;YACD,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;SAE1C;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAEM,yBAAY,GAAnB,UAAoB,GAAW,EAAE,KAAU;QACvC,IAAI,GAAG,KAAK,KAAK,EAAE;YACf,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;SACzB;aAAM,IAAI,GAAG,KAAK,GAAG,EAAE;YACpB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;SAC7B;aAAM,IAAI,GAAG,KAAK,GAAG,EAAE;YACpB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAC7B;aAAM,IAAI,GAAG,KAAK,OAAO,EAAE;YACxB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;SAC9B;aAAM,IAAI,GAAG,KAAK,QAAQ,EAAE;YACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAC9B;aAAM;YACH,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;SACrB;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IACL,SAAC;AAAD,CAAC,CA7BuB,6BAAc,GA6BrC;AA7BY,gBAAE;;;;;;;;;;;;;;;;;;;;;;;;;ACDf,2EAA4B;AAE5B;IAAgC,8BAAI;IAIhC,oBAAa,IAAY,EAAE,CAAS,EAAE,CAAS;QAA/C,YACI,kBAAM,EAAE,CAAC,SAGZ;QAFG,KAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnB,KAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;;IAC7B,CAAC;IAEM,2BAAM,GAAb;QAEI,IAAI,GAAG,GAAU,IAAI,CAAC,MAAM,EAAE,CAAC;QAC/B,IAAI,IAAI,GAAU,IAAI,CAAC,OAAO,EAAE,CAAC;QAGjC,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;YAC9B,GAAG,EAAE,MAAM;YACX,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;YACrB,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC;YAChC,aAAa,EAAE,QAAQ;YACvB,oBAAoB,EAAE,SAAS;YAC/B,aAAa,EAAE,SAAS;YACxB,WAAW,EAAE,EAAE;YACf,aAAa,EAAE,MAAM;YACrB,IAAI,EAAE,OAAO;SAChB,CAAC,CAAC;QACH,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;QAEzC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;QACxB,OAAO,UAAU,CAAC;IACtB,CAAC;IAEM,kCAAa,GAApB,UAAqB,KAAa;QAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;IAC1C,CAAC;IAEM,kCAAa,GAApB;QACI,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IACL,iBAAC;AAAD,CAAC,CAxC+B,WAAI,GAwCnC;AAxCY,gCAAU;;;;;;;;;;;;;;;;;;;;;;;;;ACHvB,2EAA8B;AAC9B,qEAA0B;AAC1B,8FAAiD;AACjD,gEAAkC;AAElC;IAA4B,0BAAI;IAI5B,gBAAY,GAAW;QAAvB,YACI,kBAAM,GAAG,CAAC,SACb;QALM,gBAAU,GAAW,CAAC,CAAC;QACvB,gBAAU,GAAW,CAAC,CAAC;;IAI9B,CAAC;IAEM,qBAAI,GAAX,UAAY,GAAY;QACpB,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IACL,aAAC;AAAD,CAAC,CAX2B,WAAI,GAW/B;AAXY,wBAAM;AAsBnB;IAAA;IA+0BA,CAAC;IA70BiB,oBAAO,GAArB,UAAsB,IAAS;QAE3B,IAAI,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAClD,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE;YAC1B,IAAM,QAAM,GAAG,OAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC/B,QAAM,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;YAC3B,MAAM,GAAG,EAAE,CAAC,QAAM,CAAC,CAAC;YAGpB,OAAO,YAAY,CAAC,WAAW,CAAC,QAAM,EAAE,MAAM,CAAC,CAAC;SACnD;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAEa,iBAAI,GAAlB,UAAmB,IAAS,EAAE,MAAe;QAEzC,IAAI,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAClD,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE;YAC1B,IAAI,CAAC,CAAC,IAAI,YAAY,6BAAc,CAAC,EAAE;gBACnC,IAAI,GAAG,OAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACvB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;oBAChB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;iBACzB;aACJ;YACD,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,MAAM,EAAE;gBACT,OAAO,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;aACjD;YACD,OAAO,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;SACjD;aAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;YACtB,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACxB,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC1B,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;YAChC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;YACzB,OAAO,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SAC5C;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEa,wBAAW,GAAzB,UAA0B,GAAW;QACjC,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACpE,CAAC;IAEa,yBAAY,GAA1B,UAA2B,GAAW;QAClC,IAAI,EAAE,GAAG,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9D,OAAO,OAAO,EAAE,KAAK,UAAU,CAAC;IACpC,CAAC;IAEa,qBAAQ,GAAtB,UAAuB,IAAY;QAC/B,IAAI,EAAE,GAAG,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAClD,OAAO,OAAO,EAAE,KAAK,UAAU,CAAC;IACpC,CAAC;IAEa,oBAAO,GAArB,UAAsB,IAAS;QAC3B,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE;YACd,OAAO,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;SAC1D;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,OAAO,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC3D;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE;YACb,OAAO,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SACzD;QACD,OAAO,UAAU,CAAC;IACtB,CAAC;IAwBa,wBAAW,GAAzB,UAA0B,IAAoB,EAAE,KAAU;QACtD,IAAI,IAAI,EAAE,CAAS,EAAE,CAAS,EAAE,GAAG,EAAE,IAAa,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC;QAC3F,IAAI,GAAQ,CAAC;QACb,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE;YACxC,IAAI,EAAE,GAAG;gBACL,GAAG,EAAE,KAAK;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE;aAC/G,CAAC;YACF,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE;gBACnB,EAAE,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;aACvC;YACD,GAAG,GAAG,WAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACzB;aAAM;YACH,GAAG,GAAG,WAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YAChC,SAAS,GAAG,YAAY,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;YAC3E,IAAI,KAAK,CAAC,KAAK,EAAE;gBACb,SAAS,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;aAC9C;YACD,IAAI,KAAK,CAAC,MAAM,EAAE;gBACd,SAAS,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;aAChD;YACD,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACzC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;gBACb,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;aACxB;SACJ;QAED,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE;YACjB,IAAM,gBAAgB,GAAG;gBACrB,GAAG,EAAE,OAAO;aACf,CAAC;YACF,IAAI,YAAY,GAAG,WAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;YACtD,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3C,GAAG,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;SACjC;QAED,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE;YACpB,IAAM,UAAU,GAAG;gBACf,GAAG,EAAE,QAAQ;gBACb,EAAE,EAAE,EAAE;gBACN,EAAE,EAAE,EAAE;gBACN,CAAC,EAAE,EAAE;gBACL,MAAM,EAAE,MAAM;gBACd,cAAc,EAAE,CAAC;gBACjB,IAAI,EAAE,MAAM;aACf,CAAC;YACF,GAAG,CAAC,WAAW,CAAC,WAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;SAC5C;QAED,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YACxC,GAAG,CAAC,WAAW,CAAC,WAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAChD;QACD,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QAChC,WAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QACnF,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACtC,IAAI,QAAQ,EAAE;YACV,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;gBACrC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;oBACxC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACtB,CAAC,IAAI,CAAC,CAAC;iBACV;aACJ;YACD,GAAG,GAAG,WAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YAEhC,IAAI,CAAC,SAAQ,CAAC;YACd,CAAC,GAAG,CAAC,CAAC;YACN,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;gBACrC,IAAI,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;oBACjC,CAAC,IAAI,CAAC,CAAC;iBACV;qBAAM;oBACH,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;iBAC3B;aACJ;YACD,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACf,GAAG,CAAC,WAAW,CAAC,WAAI,CAAC,MAAM,CAAC;gBACxB,GAAG,EAAE,MAAM;gBACX,EAAE,EAAE,CAAC;gBACL,CAAC,EAAE,OAAO;gBACV,CAAC,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC;gBACjB,KAAK,EAAE,EAAE;gBACT,MAAM,EAAE,CAAC;gBACT,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,KAAK;aACjB,CAAC,CAAC,CAAC;YACJ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;YAE5C,GAAG,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;YAC3B,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,UAAU,EAAE;gBAC7B,GAAG,CAAC,OAAO,CAAC,GAAG,WAAI,CAAC,MAAM,CAAC;oBACvB,GAAG,EAAE,MAAM;oBACX,KAAK,EAAE,IAAI;oBACX,aAAa,EAAE,MAAM;oBACrB,OAAO,EAAE,EAAE;oBACX,GAAG,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC;oBACnB,GAAG,EAAE,EAAE;oBACP,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC;iBAC3B,CAAC,CAAC;gBACH,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aAC9B;YAED,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC;YAGjB,IAAI,GAAG,UAAU,KAAY;gBACzB,IAAI,GAAG,CAAC,KAAK,EAAE;oBACX,GAAG,CAAC,KAAK,CAAC,WAAW,GAAS,KAAK,CAAC,aAAc,CAAC,KAAK,CAAC;iBAC5D;YACL,CAAC,CAAC;YACF,IAAI,GAAG,SAAQ,CAAC;YAChB,IAAI,SAAS,GAAG,SAAS,CAAC;YAC1B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;gBACrC,IAAI,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;oBACjC,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;iBACrB;qBAAM;oBACH,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;oBAChE,CAAC,IAAI,EAAE,CAAC;oBACR,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;wBACxC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;wBAE3E,IAAI,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;wBAC5B,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE;4BAChB,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;yBACpC;6BAAM;4BACH,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;yBAC1B;wBACD,CAAC,IAAI,EAAE,CAAC;qBACX;oBACD,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAClB,IAAI,MAAM,GAAG,WAAI,CAAC,MAAM,CAAC;wBACrB,GAAG,EAAE,MAAM;wBACX,EAAE,EAAE,CAAC;wBACL,CAAC,EAAE,OAAO;wBACV,CAAC,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC;wBACjB,KAAK,EAAE,EAAE;wBACT,MAAM,EAAE,CAAC;wBACT,MAAM,EAAE,MAAM;wBACd,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,KAAK;qBACjB,CAAC,CAAC;oBACH,SAAS;iBACZ;gBAED,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;gBAErD,IAAI,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC5B,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE;oBAChB,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;iBACpC;qBAAM;oBACH,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;iBAC1B;gBACD,CAAC,IAAI,EAAE,CAAC;aACX;YACD,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC;SACvB;QACD,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAChB,GAAG,CAAC,OAAO,GAAG;YACV,IAAI,GAAG,CAAC,MAAM,KAAK,OAAO,EAAE;gBACxB,GAAG,CAAC,IAAI,EAAE,CAAC;aACd;iBAAM;gBACH,GAAG,CAAC,KAAK,EAAE,CAAC;aACf;QACL,CAAC,CAAC;QACF,GAAG,CAAC,KAAK,GAAG;YACR,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE;gBACxC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;aACnC;YACD,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC;YACrB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;YAE3C,WAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC;QACF,GAAG,CAAC,IAAI,GAAG;YACP,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE;gBACxB,OAAO;aACV;YACD,IAAI,GAAG,CAAC,MAAM,KAAK,OAAO,IAAI,GAAG,CAAC,SAAS,EAAE;gBACzC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;aACnC;YACD,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;YACpB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3C,WAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEvD,CAAC,CAAC;QACF,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,GAAG,CAAC;IACf,CAAC;IAEa,qBAAQ,GAAtB,UAAuB,MAAkB,EAAE,IAAoB;QAC3D,IAAI,IAAa,CAAC;QAClB,IAAU,IAAK,CAAC,UAAU,EAAE;YACxB,IAAI,GAAY,IAAI,CAAC;SACxB;aAAM;YACH,IAAI,GAAG,WAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SAC5B;QACD,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACxC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAEa,gBAAG,GAAjB,UAAkB,IAAS;QACvB,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC9B,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAChC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC9B,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACnC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5B,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7B,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5B,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7B,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC9B,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAChC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACjC,YAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAEa,0BAAa,GAA3B,UAA4B,IAAoB;QAC5C,OAAO,OAAE,CAAC,MAAM,CAAC;YACb,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAClB,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAClB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,KAAK,EAAE;gBACH,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAC;gBACzF,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,oCAAoC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;aAC1F;SACJ,CAAC,CAAC;IACP,CAAC;IAEa,uBAAU,GAAxB,UAAyB,IAAoB;QACzC,OAAO,OAAE,CAAC,MAAM,CAAC;YACb,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAClB,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAClB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,KAAK,EAAE;gBACH,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,gFAAgF,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,6BAA6B,EAAE;gBACtL,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,8DAA8D,EAAE;gBAClF,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,2DAA2D,EAAE;gBAC/E,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,6CAA6C,EAAE;gBACjE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,qCAAqC,EAAE;aAC5D;SACJ,CAAC,CAAC;IACP,CAAC;IAEa,yBAAY,GAA1B,UAA2B,IAAoB;QAC3C,OAAO,OAAE,CAAC,MAAM,CAAC;YACb,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;YACvB,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;YACvB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,KAAK,EAAE;gBACH;oBACI,GAAG,EAAE,MAAM;oBACX,CAAC,EAAE,mFAAmF;oBACtF,MAAM,EAAE,OAAO;oBACf,IAAI,EAAE,MAAM;iBACf;gBACD;oBACI,GAAG,EAAE,MAAM;oBACX,CAAC,EAAE,+GAA+G;oBAClH,MAAM,EAAE,OAAO;oBACf,IAAI,EAAE,MAAM;iBACf;aACJ;SACJ,CAAC,CAAC;IACP,CAAC;IAEa,uBAAU,GAAxB,UAAyB,IAAoB;QACzC,OAAO,OAAE,CAAC,MAAM,CAAC;YACb,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;YACvB,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;YACvB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,KAAK,EAAE;gBACH,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,6BAA6B,EAAE;gBAChF,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,mCAAmC,EAAE;aACzF;SACJ,CAAC,CAAC;IACP,CAAC;IAEa,4BAAe,GAA7B,UAA8B,IAAoB;QAC9C,OAAO,OAAE,CAAC,MAAM,CAAC;YACb,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;YACvB,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;YACvB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,KAAK,EAAE;gBACH;oBACI,GAAG,EAAE,MAAM;oBACX,CAAC,EAAE,kIAAkI;oBACrI,IAAI,EAAE,MAAM;oBACZ,MAAM,EAAE,OAAO;iBAClB;gBACD,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,mDAAmD,EAAE;gBACvE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,uCAAuC,EAAE;gBAC3D,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE;gBAC/B,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,mCAAmC,EAAE;aAC1D;SACJ,CAAC,CAAC;IACP,CAAC;IAEa,qBAAQ,GAAtB,UAAuB,IAAoB;QACvC,OAAO,OAAE,CAAC,MAAM,CAAC;YACb,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;YACvB,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;YACvB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,KAAK,EAAE;gBACH,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,4DAA4D,EAAE;gBAChF;oBACI,GAAG,EAAE,MAAM;oBACX,MAAM,EAAE,OAAO;oBACf,CAAC,EAAE,gSAAgS;iBACtS;aACJ;SACJ,CAAC,CAAC;IACP,CAAC;IAEa,sBAAS,GAAvB,UAAwB,IAAoB;QACxC,OAAO,OAAE,CAAC,MAAM,CAAC;YACb,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;YACvB,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;YACvB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,KAAK,EAAE;gBACH,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE;gBACvE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE;gBAC5D,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE;gBACtE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE;gBACtE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE;aAC1E;SACJ,CAAC,CAAC;IACP,CAAC;IAEa,qBAAQ,GAAtB,UAAuB,IAAoB;QACvC,OAAO,OAAE,CAAC,MAAM,CAAC;YACb,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;YACvB,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;YACvB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,KAAK,EAAE;gBACH;oBACI,GAAG,EAAE,MAAM;oBACX,CAAC,EAAE,sLAAsL;oBACzL,IAAI,EAAE,OAAO;oBACb,MAAM,EAAE,OAAO;iBAClB;gBACD;oBACI,GAAG,EAAE,MAAM;oBACX,CAAC,EAAE,2FAA2F;iBACjG;gBACD;oBACI,GAAG,EAAE,MAAM;oBACX,CAAC,EAAE,iGAAiG;iBACvG;gBACD;oBACI,GAAG,EAAE,MAAM;oBACX,CAAC,EAAE,iGAAiG;iBACvG;gBACD,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,gFAAgF,EAAE;gBACpG;oBACI,GAAG,EAAE,MAAM;oBACX,CAAC,EAAE,8GAA8G;iBACpH;gBACD;oBACI,GAAG,EAAE,MAAM;oBACX,CAAC,EAAE,6GAA6G;iBACnH;gBACD;oBACI,GAAG,EAAE,MAAM;oBACX,CAAC,EAAE,iHAAiH;iBACvH;gBACD;oBACI,GAAG,EAAE,MAAM;oBACX,CAAC,EAAE,gHAAgH;iBACtH;gBACD;oBACI,GAAG,EAAE,MAAM;oBACX,CAAC,EAAE,8GAA8G;iBACpH;gBACD;oBACI,GAAG,EAAE,MAAM;oBACX,CAAC,EAAE,0GAA0G;iBAChH;gBACD;oBACI,GAAG,EAAE,MAAM;oBACX,CAAC,EAAE,qHAAqH;iBAC3H;gBACD;oBACI,GAAG,EAAE,MAAM;oBACX,CAAC,EAAE,oOAAoO;iBAC1O;gBACD,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,qBAAqB,EAAE;aAC5C;SACJ,CAAC,CAAC;IACP,CAAC;IAEa,qBAAQ,GAAtB,UAAuB,IAAoB;QACvC,OAAO,OAAE,CAAC,MAAM,CAAC;YACb,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;YACvB,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;YACvB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,KAAK,EAAE;gBACH;oBACI,GAAG,EAAE,MAAM;oBACX,IAAI,EAAE,MAAM;oBACZ,cAAc,EAAE,GAAG;oBACnB,MAAM,EAAE,MAAM;oBACd,CAAC,EAAE,8CAA8C;iBACpD;aACJ;SACJ,CAAC,CAAC;IACP,CAAC;IAEa,oBAAO,GAArB,UAAsB,IAAoB;QACtC,OAAO,OAAE,CAAC,MAAM,CAAC;YACb,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;YACvB,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;YACvB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,KAAK,EAAE;gBACH;oBACI,GAAG,EAAE,MAAM;oBACX,IAAI,EAAE,OAAO;oBACb,MAAM,EAAE,MAAM;oBACd,cAAc,EAAE,GAAG;oBACnB,iBAAiB,EAAE,OAAO;oBAC1B,CAAC,EAAE,yBAAyB;iBAC/B;gBACD;oBACI,GAAG,EAAE,MAAM;oBACX,IAAI,EAAE,MAAM;oBACZ,MAAM,EAAE,MAAM;oBACd,cAAc,EAAE,KAAK;oBACrB,iBAAiB,EAAE,OAAO;oBAC1B,CAAC,EAAE,iBAAiB;iBACvB;aACJ;SACJ,CAAC,CAAC;IACP,CAAC;IAEa,sBAAS,GAAvB,UAAwB,IAAoB;QACxC,OAAO,OAAE,CAAC,MAAM,CAAC;YACb,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;YACvB,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;YACvB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC;YACtB,KAAK,EAAE;gBACH,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,EAAE;aACvE;SACJ,CAAC,CAAC;IACP,CAAC;IAEa,oBAAO,GAArB,UAAsB,IAAoB;QACtC,OAAO,OAAE,CAAC,MAAM,CAAC;YACb,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;YACvB,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;YACvB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,KAAK,EAAE;gBACH;oBACI,GAAG,EAAE,MAAM;oBACX,IAAI,EAAE,OAAO;oBACb,MAAM,EAAE,MAAM;oBACd,cAAc,EAAE,GAAG;oBACnB,iBAAiB,EAAE,OAAO;oBAC1B,mBAAmB,EAAE,CAAC;oBACtB,kBAAkB,EAAE,SAAS;oBAC7B,CAAC,EAAE,0EAA0E;iBAChF;gBACD;oBACI,GAAG,EAAE,MAAM;oBACX,IAAI,EAAE,MAAM;oBACZ,MAAM,EAAE,MAAM;oBACd,cAAc,EAAE,KAAK;oBACrB,iBAAiB,EAAE,OAAO;oBAC1B,CAAC,EAAE,qEAAqE;iBAC3E;aACJ;SACJ,CAAC,CAAC;IACP,CAAC;IAEa,uBAAU,GAAxB,UAAyB,IAAoB;QACzC,IAAI,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;QAE9C,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5B,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAClC,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACnC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC/B,OAAO,OAAE,CAAC,MAAM,CAAC;YACb,CAAC,EAAE,IAAI;YACP,CAAC,EAAE,IAAI;YACP,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,KAAK,EAAE;gBACH;oBACI,GAAG,EAAE,MAAM;oBACX,EAAE,EAAE,CAAC;oBACL,CAAC,EAAE,CAAC;oBACJ,CAAC,EAAE,CAAC;oBACJ,KAAK,EAAE,QAAQ;oBACf,MAAM,EAAE,SAAS;oBACjB,MAAM,EAAE,MAAM;oBACd,MAAM,EAAE,mBAAmB;oBAC3B,OAAO,EAAE,QAAQ;iBACpB;gBACD,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE;aAC9F;SACJ,CAAC,CAAC;IACP,CAAC;IAEa,yBAAY,GAA1B,UAA2B,IAAoB;QAC3C,IAAI,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC;QAEpC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5B,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAClC,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,OAAE,CAAC,MAAM,CAAC;YACb,CAAC,EAAE,IAAI;YACP,CAAC,EAAE,IAAI;YACP,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE;gBACH;oBACI,GAAG,EAAE,MAAM;oBACX,EAAE,EAAE,CAAC;oBACL,CAAC,EAAE,CAAC;oBACJ,CAAC,EAAE,CAAC;oBACJ,KAAK,EAAE,QAAQ,GAAG,EAAE;oBACpB,MAAM,EAAE,SAAS;oBACjB,MAAM,EAAE,MAAM;oBACd,IAAI,EAAE,MAAM;iBACf;gBACD;oBACI,GAAG,EAAE,MAAM;oBACX,EAAE,EAAE,CAAC;oBACL,CAAC,EAAE,QAAQ,GAAG,EAAE;oBAChB,CAAC,EAAE,CAAC;oBACJ,KAAK,EAAE,EAAE;oBACT,MAAM,EAAE,EAAE;oBACV,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,QAAQ;iBACpB;gBACD;oBACI,GAAG,EAAE,MAAM;oBACX,KAAK,EAAE,wHAAwH;oBAC/H,CAAC,EAAE,IAAI,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC,GAAG,aAAa,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC,GAAG,OAAO;iBACxE;aACJ;SACJ,CAAC,CAAC;IACP,CAAC;IAEa,0BAAa,GAA3B,UAA4B,IAAoB;QAC5C,IAAI,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC;QAEpC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5B,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAClC,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,OAAE,CAAC,MAAM,CAAC;YACb,CAAC,EAAE,IAAI;YACP,CAAC,EAAE,IAAI;YACP,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE;gBACH;oBACI,GAAG,EAAE,MAAM;oBACX,CAAC,EAAE,2GAA2G;oBAC9G,KAAK,EAAE,2BAA2B;iBACrC;gBACD;oBACI,GAAG,EAAE,MAAM;oBACX,CAAC,EAAE,8GAA8G;oBACjH,KAAK,EAAE,2BAA2B;iBACrC;gBACD,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE;aAChE;SACJ,CAAC,CAAC;IACP,CAAC;IAEa,kCAAqB,GAAnC,UAAoC,IAAoB;QAEpD,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC;QACpD,OAAO,OAAE,CAAC,MAAM,CAAC;YACb,CAAC,EAAE,IAAI;YACP,CAAC,EAAE,IAAI;YACP,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC;YACd,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE;gBACH;oBACI,GAAG,EAAE,MAAM;oBACX,CAAC,EAAE,uEAAuE;oBAC1E,KAAK,EAAE,gDAAgD;iBAC1D;aACJ;SACJ,CAAC,CAAC;IACP,CAAC;IAEa,sBAAS,GAAvB,UAAwB,IAAoB;QAExC,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC;QACpD,OAAO,OAAE,CAAC,MAAM,CAAC;YACb,CAAC,EAAE,IAAI;YACP,CAAC,EAAE,IAAI;YACP,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC;YACd,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,MAAM;YACd,KAAK,EAAE;gBACH,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAC;gBACnG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAC;gBACpG,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAC;gBACtF,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,eAAe,EAAC;gBACnE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAC;aACvE;SACJ,CAAC,CAAC;IACP,CAAC;IAQa,yBAAY,GAA1B,UAA2B,IAAoB;QAE3C,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC;QACpD,OAAO,OAAE,CAAC,MAAM,CAAC;YACb,CAAC,EAAE,IAAI;YACP,CAAC,EAAE,IAAI;YACP,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC;YACd,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE;gBACH;oBACI,GAAG,EAAE,MAAM;oBACX,CAAC,EAAE,iCAAiC;oBACpC,KAAK,EAAE,uCAAuC;iBACjD;aACJ;SACJ,CAAC,CAAC;IACP,CAAC;IAEa,yBAAY,GAA1B,UAA2B,IAAoB;QAE3C,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC;QACpD,OAAO,OAAE,CAAC,MAAM,CAAC;YACb,CAAC,EAAE,IAAI;YACP,CAAC,EAAE,IAAI;YACP,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC;YACd,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE;gBACH;oBACI,GAAG,EAAE,MAAM;oBACX,CAAC,EAAE,wCAAwC;oBAC3C,KAAK,EAAE,yCAAyC;oBAChD,SAAS,EAAE,2BAA2B;iBACzC;gBACD;oBACI,GAAG,EAAE,MAAM;oBACX,CAAC,EAAE,sCAAsC;0BACnC,kBAAkB;0BAClB,gBAAgB;0BAChB,gBAAgB;oBACtB,KAAK,EAAE,yCAAyC;oBAChD,SAAS,EAAE,2BAA2B;iBACzC;aACJ;SACJ,CAAC,CAAC;IACP,CAAC;IAEa,uBAAU,GAAxB,UAAyB,IAAS;QAC9B,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC;QACpD,OAAO,OAAE,CAAC,MAAM,CAAC;YACb,CAAC,EAAE,IAAI;YACP,CAAC,EAAE,IAAI;YACP,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC;YACd,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK;YACxC,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE;gBACH;oBACI,GAAG,EAAE,MAAM;oBACX,CAAC,EAAE,+IAA+I;oBAClJ,KAAK,EAAE,yCAAyC;iBACnD;aACJ;SACJ,CAAC,CAAC;IACP,CAAC;IAEa,uBAAU,GAAxB,UAAyB,IAAS;QAC9B,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC;QACpD,OAAO,OAAE,CAAC,MAAM,CAAC;YACb,CAAC,EAAE,IAAI;YACP,CAAC,EAAE,IAAI;YACP,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC;YACd,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK;YACxC,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE;gBACH;oBACI,GAAG,EAAE,MAAM;oBACX,CAAC,EAAE,6FAA6F;oBAChG,MAAM,EAAE,MAAM;oBACd,cAAc,EAAE,CAAC;oBACjB,IAAI,EAAE,OAAO;iBAChB;aACJ;SACJ,CAAC,CAAC;IACP,CAAC;IAEc,oBAAO,GAAtB,UAAuB,CAAS,EAAE,OAAe,EAAE,GAAY,EAAE,IAAY,EAAE,SAAiB;QAC5F,IAAI,IAAa,CAAC;QAClB,GAAG,CAAC,WAAW,CAAC,WAAI,CAAC,MAAM,CAAC;YACxB,GAAG,EAAE,MAAM;YACX,KAAK,EAAE,IAAI;YACX,aAAa,EAAE,MAAM;YACrB,KAAK,EAAE,EAAE;YACT,CAAC,EAAE,EAAE;YACL,CAAC,EAAE,CAAC;YACJ,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,IAAI;YACX,UAAU,EAAE,IAAI;SACnB,CAAC,CAAC,CAAC;QACJ,IAAI,SAAS,KAAK,SAAS,EAAE;YACzB,SAAS,GAAG,eAAe,CAAC;SAC/B;aAAM;YACH,SAAS,GAAG,WAAW,CAAC;SAC3B;QAED,IAAI,GAAG,WAAI,CAAC,MAAM,CAAC;YACf,GAAG,EAAE,MAAM;YACX,EAAE,EAAE,CAAC;YACL,CAAC,EAAE,OAAO;YACV,CAAC,EAAE,CAAC,GAAG,EAAE;YACT,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,SAAS;SACnB,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;QAC1B,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,qCAAc,GAArB;QACI,OAAO,IAAI,CAAC;IAChB,CAAC;IAEL,mBAAC;AAAD,CAAC;AA/0BY,oCAAY;;;;;;;;;;;;;;;;;;;;;;;;;AC3BzB,yEAAsC;AACtC,2FAAgD;AAChD,gEAA8B;AAC9B,gEAAgC;AAGhC;IAA2B,yBAAO;IAAlC;QAAA,qEA6yBC;QA5yBa,WAAK,GAAoB,EAAE,CAAC;QAC9B,aAAO,GAAa,EAAE,CAAC;QACvB,WAAK,GAAW,EAAE,CAAC;QAGnB,iBAAW,GAAyB,EAAE,CAAC;QAEvC,cAAQ,GAAW,EAAE,CAAC;QAMtB,mBAAa,GAAkB,EAAE,CAAC;QAClC,gBAAU,GAAkB,EAAE,CAAC;QAG/B,iBAAW,GAAW,IAAI,CAAC;QAC3B,YAAM,GAAY,KAAK,CAAC;;IA0xBpC,CAAC;IAlxBG,sBAAI,+BAAY;aAAhB;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;;;OAAA;IAEc,kBAAY,GAA3B,UAA4B,IAAmB;QAC3C,IAAI,CAAC,GAAW,CAAC,CAAC;QAClB,IAAI,KAAK,GAAS,IAAI,CAAC,GAAG,CAAC;QAC3B,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE;YAC7C,CAAC,EAAE,CAAC;SACP;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IAEM,oBAAI,GAAX,UAAY,IAAS;QACjB,IAAI,EAAU,CAAC;QAEf,IAAI,OAAM,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;YAC3B,EAAE,GAAG,IAAI,CAAC;SACb;aAAM;YACH,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;aACjC;YAED,IAAI,IAAI,CAAC,aAAa,EAAE;gBACpB,IAAI,QAAM,GAAkB,EAAE,CAAC;gBAC/B,IAAI,OAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,QAAQ,EAAE;oBACzC,QAAM,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;iBAC1C;qBAAM;oBACH,QAAM,GAAG,IAAI,CAAC,aAAa,CAAC;iBAC/B;gBACD,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,QAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC5C,IAAI,IAAI,GAAG,QAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC5B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;wBACjB,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;4BACtC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;yBACjC;qBACJ;iBACJ;aACJ;SAEJ;QACD,IAAI,CAAC,EAAE,EAAE;YACL,OAAO;SACV;QACD,IAAI,IAAI,CAAC,KAAK,EAAE;YAEZ,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE;gBAEjB,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE;oBAC3B,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;wBAC7C,SAAS;qBACZ;oBACD,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;oBACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACvB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;iBAC/E;gBACD,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE;oBAC5B,IAAI,IAAI,GAAkB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;oBAC9C,IAAI,MAAI,UAAC;oBAET,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;wBACnD,MAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;wBACpC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAI,CAAC,CAAC;qBAC9B;oBAED,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;wBACnD,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;qBACzE;oBACD,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBAClD,IAAI,MAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;wBAErC,MAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;wBAC5B,MAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAI,CAAC,CAAC;qBAC9C;iBACJ;aACJ;YACD,OAAO;SACV;QAED,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,SAA8B,CAAC;QACnC,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAChB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;aACvD;SACJ;aAAM;YACH,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SACjC;QACD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAEpB,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACpD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SAC7C;QACD,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE;YACnB,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;SAC5C;aAAM;YACH,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,6EAA6E,CAAC;SACxG;QAED,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACxE,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACjD,IAAI,GAAG,GAA6C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC3E,IAAI,GAAG,YAAY,uBAAuB,EAAE;gBACxC,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO,EAAE;oBACzB,SAAS,GAAG,GAAG,CAAC;oBAEhB,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;oBAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACtC,IAAI,CAAC,aAAa,CAAsB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;qBAC5D;iBACJ;qBAAM;oBAEH,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;oBAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACtC,IAAI,CAAC,WAAW,CAAsB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;qBAC1D;iBACJ;aACJ;iBAAM;gBAEH,IAAI,OAAO,KAAK,CAAC,EAAE;oBACf,SAAS,GAAG,GAAG,CAAC;oBAChB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;iBAC3B;qBAAM;oBACH,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;iBACzB;aACJ;YACD,OAAO,EAAE,CAAC;SACb;QACD,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACpC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBAEtB,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;gBACtD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;oBACrB,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;oBACtD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;iBAC/C;qBAAM;oBAEH,IAAI,CAAC,cAAc,GAA4B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACjE;aACJ;YACD,IAAI,CAAC,SAAS,EAAE;gBACZ,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBACzC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;aAC9C;SACJ;QAED,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE;YAEjB,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE;gBAC3B,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;oBAC7C,SAAS;iBACZ;gBACD,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;gBACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACvB,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;aACvC;YACD,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC9C,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxC,IAAI,OAAO,GAAgB,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAC5E,IAAI,YAAY,GAAgB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YAE1E,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;SACnD;QACD,IAAI,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;QAKjH,IAAI,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QACzD,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAE5B,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC5B,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG;YAC1C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBACtC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAClD,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;aAC5C;iBAAM;gBACH,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAClE,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,YAAY,EAAE;wBACjE,IAAI,CAAC,WAAW,GAAiB,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;wBACjE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;wBACxB,MAAM;qBACT;iBACJ;aACJ;SACJ;QACD,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAEnD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAG5C,CAAC;IAEM,0BAAU,GAAjB,UAAkB,IAAY,EAAE,CAAQ;QACpC,IAAI,MAAM,GAAW,CAAC,CAAC;QACvB,IAAI,MAAM,GAAW,CAAC,CAAC;QACvB,IAAI,CAAC,YAAY,UAAU,EAAE;YACzB,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;YACnB,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC;SACpB;QACD,IAAI,IAAI,KAAK,SAAS,EAAE;YACpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;SAC3B;aAAM,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,QAAQ,EAAE;YAElD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,MAAM,KAAK,CAAC,EAAE;gBACd,IAAI,CAAC,SAAQ,CAAC;gBACd,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACtC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,EAAE;wBACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBACnC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;wBACjB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;wBACpB,MAAM;qBACT;yBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,MAAM,EAAE;wBAC9C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBACnC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;wBACjB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;qBACtB;iBACJ;gBACD,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,SAAS,CAAC;gBACjC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;aACvB;iBAAM;gBACH,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;aAC1B;SACJ;aAAM,IAAI,IAAI,KAAK,WAAW,EAAE;YAC7B,IAAI,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClC,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,EAAE;oBAC/D,IAAI,IAAI,CAAC,MAAM,EAAE;qBAEhB;yBAAM;wBACH,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;wBAC5B,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC;wBAClD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,GAAG,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;wBACnD,CAAC,CAAC,eAAe,EAAE,CAAC;qBACvB;iBACJ;gBACD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;gBACpB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,SAAS,CAAC;aACpC;SACJ;aAAM,IAAI,IAAI,CAAC,MAAM,EAAE;YACpB,IAAI,CAAC,eAAe,CAAC,IAAI,EAAc,CAAC,CAAC,CAAC;SAC7C;IACL,CAAC;IAEM,6BAAa,GAApB,UAAqB,GAAwB;QACzC,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE;YACxB,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;gBAC1C,SAAS;aACZ;YACD,IAAI,MAAM,GAA2D,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACrF,IAAI,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,GAAG,GAAW,IAAI,CAAC;YACvB,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;gBACxB,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;oBAC1C,SAAS;iBACZ;gBACD,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,EAAE;oBAC9B,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBACtB,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC;oBACtB,MAAM;iBACT;aACJ;YACD,IAAI,GAAG,KAAK,IAAI,EAAE;gBACd,GAAG,GAAG,IAAI,MAAM,EAAE,CAAC;gBACnB,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;gBACf,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;gBACjD,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC;gBACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC1B;YACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;SAC3B;IACL,CAAC;IAEM,2BAAW,GAAlB,UAAmB,GAAwB;QACvC,IAAI,EAAE,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,IAAI,GAAS,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACzC,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE;YACxB,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;gBAC1C,SAAS;aACZ;YACD,IAAI,IAAI,GAA+C,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACvE,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7C,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBAChC,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;aAC9C;SACJ;IACL,CAAC;IAEM,8BAAc,GAArB,UAAsB,MAAY,EAAE,QAAgB,EAAE,QAAgB,EAAE,QAAgB;QACpF,IAAI,MAAM,EAAE;YAER,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE;gBAChD,OAAO;aACV;SACJ;QACD,IAAI,MAAM,CAAC,EAAE,KAAK,SAAS,EAAE;YACzB,OAAO;SACV;QACD,IAAI,IAAI,GAAiC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClE,IAAI,GAAwB,CAAC;QAC7B,IAAI,CAAC,IAAI,EAAE;YACP,IAAI,GAAG,IAAI,uBAAa,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;SACnC;QACD,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,GAAG,EAAE;YACL,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;SAClB;QACD,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE;YAChC,OAAO;SACV;QACD,IAAI,IAAI,CAAC;QACT,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,IAAI,CAAC,GAAG,EAAE;YACN,QAAQ,GAAG,IAAI,CAAC;YAChB,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC5B,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBACpC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aACzB;YACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;YAC5B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;SAClB;QACD,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAClD,IAAI,MAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACrC,IAAI,MAAI,KAAK,QAAQ,EAAE;gBACnB,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,SAAS,GAAW,QAAQ,CAAC;aACrC;SACJ;QACD,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SAC7B;IAEL,CAAC;IAEM,oBAAI,GAAX,UAAY,MAAc;QACtB,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE;YAC5B,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;gBACtB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;gBACpB,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACxC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;aACzC;iBAAM;gBACH,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;gBACnB,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACzC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aACxC;SACJ;aAAM;YACH,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;gBAC1B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAClD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACpD;YACD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;YACzB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;SACtB;QACD,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,IAAI,IAAI,GAAG,UAAU,CAAgB,EAAE,CAAgB;YACnD,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,GAAG,GAAW,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAC1C,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,GAAG,GAAG,EAAE;YACZ,IAAI,IAAI,GAAkB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,KAAK,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;gBAChC,MAAM;aACT;YACD,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACb;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;SAClE;QACD,OAAO,CAAC,GAAG,GAAG,EAAE;YACZ,IAAI,IAAI,GAAkB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACb;IAIL,CAAC;IAEM,uBAAO,GAAd,UAAe,CAAgB,EAAE,CAAgB;QAC7C,IAAI,IAAI,GAAa,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1D,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QACzB,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QACzB,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAClC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;gBACd,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;aACxB;iBAAM;gBACH,OAAO,CAAC,CAAC;aACZ;YACD,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;gBACd,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;aACxB;iBAAM;gBACH,OAAO,CAAC,CAAC;aACZ;SACJ;QACD,IAAI,KAAK,KAAK,KAAK,EAAE;YACjB,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;gBACtB,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACnC;YACD,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAEnC;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IAGM,sBAAM,GAAb,UAAc,cAAsB;QAChC,IAAI,CAAC,cAAc,EAAE;YACjB,cAAc,GAAG,EAAE,CAAC;SACvB;QACD,IAAI,UAAU,GAAW,cAAc,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC7D,IAAI,UAAU,KAAK,IAAI,CAAC,cAAc,IAAI,UAAU,KAAK,EAAE,EAAE;YACzD,OAAO;SACV;QACD,IAAI,SAAS,GAAW,IAAI,CAAC,cAAc,CAAC;QAC5C,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;QAEjC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,UAAU,KAAK,EAAE,IAAI,SAAS,KAAK,IAAI,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC9G,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACtC;aAAM;YACH,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC9B;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAEM,8BAAc,GAArB;QACI,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG,CAAC;SAC/G;IASL,CAAC;IAEM,gCAAgB,GAAvB;QACI,IAAI,GAAG,GAAW,CAAC,CAAC;QACpB,IAAI,KAAK,GAAkB,EAAE,CAAC;QAC9B,IAAI,KAAK,GAAY,KAAK,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACzD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE;gBACnD,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACvD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;oBAChB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBACnB;gBACD,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;aACf;iBAAM,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;gBAC/C,IAAI,KAAK,EAAE;oBACP,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBACvD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;wBAChB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;qBACnB;oBACD,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;iBACf;qBAAM;oBACH,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;iBACf;gBACD,KAAK,GAAG,CAAC,KAAK,CAAC;aAClB;SACJ;QACD,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;YAClC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;SACrF;QACD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,2BAAW,GAAlB,UAAmB,IAA0B;QACzC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QAEtB,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAI,IAAI,GAAkB,IAAI,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;SAC7C;IACL,CAAC;IAEM,yBAAS,GAAhB,UAAiB,IAAqB;QAClC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QAEtB,KAAiB,UAAI,EAAJ,aAAI,EAAJ,kBAAI,EAAJ,IAAI,EAAE;YAAlB,IAAI,IAAI;YACT,IAAI,KAAK,GAAiC,IAAI,CAAC;YAC/C,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;SAC/C;IACL,CAAC;IAEM,wBAAQ,GAAf,UAAgB,IAAmB,EAAE,OAAgB;QACjD,IAAI,OAAO,EAAE;YACT,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC3C;aAAM,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;YAC3C,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC3C;IACL,CAAC;IAEM,yBAAS,GAAhB,UAAiB,IAAmB;QAChC,IAAI,QAAQ,GAAW,EAAE,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxD,QAAQ,GAAG,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;SAC1E;QACD,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACzC,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrD,IAAI,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;gBAC3B,IAAI,OAAO,SAAe,CAAC;gBAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBACrC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;iBAC3C;qBAAM;oBACH,OAAO,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;iBAClC;gBACD,IAAI,CAAC,GAAW,CAAC,CAAC;gBAClB,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC5B,IAAI,GAAG,GAAW,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBAC1C,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE;wBAE1C,IAAI,KAAK,GAAW,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;wBAClD,IAAI,MAAM,GAAW,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;wBACtD,IAAI,SAAS,GAAW,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;wBACpD,IAAI,SAAS,EAAE;4BACX,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;gCAExD,MAAM;6BACT;yBACJ;qBACJ;yBAAM,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;wBAC/D,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;4BAC/C,MAAM;yBACT;qBACJ;yBAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;wBAE1C,MAAM;qBACT;iBACJ;gBACD,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM,EAAE;oBACtB,OAAO,KAAK,CAAC;iBAChB;aACJ;SACJ;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAGM,yBAAS,GAAhB;QACI,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAEM,6BAAa,GAApB,UAAqB,QAAgB,EAAE,KAAa;QAEhD,KAAiB,UAAU,EAAV,SAAI,CAAC,KAAK,EAAV,cAAU,EAAV,IAAU,EAAE;YAAxB,IAAI,IAAI;YACT,IAAI,IAAI,YAAY,uBAAa,EAAE;gBACf,IAAK,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;aACpD;SACJ;QAED,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QAGnB,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC7B,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACnC,KAAK,IAAI,CAAC,IAAI,KAAK,EAAE;gBACjB,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;oBACzB,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACpB,IAAI,IAAI,YAAY,cAAI,EAAE;wBACtB,IAAI,QAAQ,KAAK,CAAC,EAAE;4BAEhB,IAAI,CAAC,GAAG,IAAI,uBAAa,CAAO,IAAI,CAAC,CAAC;4BACtC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BACnB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;yBAC9B;qBACJ;iBACJ;aACJ;YACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC5B;IACL,CAAC;IAEM,wBAAQ,GAAf,UAAgB,MAAc,EAAE,SAAiB,EAAE,QAAgB,EAAE,QAAiB;QAClF,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;YACtB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;SACzE;QACD,OAAO,iBAAM,QAAQ,YAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjE,CAAC;IAES,iCAAiB,GAA3B;QACI,IAAI,QAAQ,GAAmB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;QAE1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,IAAI,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE7B,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SACxC;QAGD,KAAgB,UAAU,EAAV,SAAI,CAAC,KAAK,EAAV,cAAU,EAAV,IAAU,EAAE;YAAvB,IAAI,GAAG;YAER,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAE5B,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;SAC5B;IACL,CAAC;IAEO,yBAAS,GAAjB,UAAkB,MAAW;QACzB,IAAI,GAAG,GAAG,IAAI,MAAM,EAAE,CAAC;QACvB,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,EAAE,CAAC;QACtC,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,EAAE,CAAC;QAC9D,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC5C,GAAG,CAAC,QAAQ,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC;QACnC,GAAG,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;QAG9B,GAAG,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5C,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEtC,OAAO,GAAG,CAAC;IACf,CAAC;IAEO,yBAAS,GAAjB,UAAkB,IAAmB;QACjC,IAAI,EAAE,GAAwB,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAE3D,KAAe,UAAY,EAAZ,SAAI,CAAC,OAAO,EAAZ,cAAY,EAAZ,IAAY,EAAE;YAAxB,IAAI,EAAE;YACP,IAAI,EAAE,GAA6B,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAChE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACnB,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;SACpD;QACD,OAAO,EAAE,CAAC;IACd,CAAC;IAEO,6BAAa,GAArB,UAAsB,GAAW;QAC7B,IAAI,OAAO,GAAyB,GAAG,CAAC,QAAQ,CAAC;QACjD,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9B,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAC5B;YACI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC,EACD,KAAK,CAAC,CAAC;IACf,CAAC;IAEO,+BAAe,GAAvB,UAAwB,IAAY,EAAE,CAAY;QAC9C,IAAI,IAAI,KAAK,WAAW,EAAE;YAEtB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;YAChD,CAAC,CAAC,YAAY,CAAC,aAAa,GAAG,MAAM,CAAC;YACtC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,WAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;SACtF;aAAM,IAAI,IAAI,KAAK,WAAW,EAAE;SAEhC;aAAM,IAAI,IAAI,KAAK,WAAW,EAAE;YAC7B,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SACtD;aAAM,IAAI,IAAI,KAAK,UAAU,EAAE;YAC5B,IAAI,CAAC,CAAC,cAAc,EAAE;gBAClB,CAAC,CAAC,cAAc,EAAE,CAAC;aACtB;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC1C,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,MAAM,EAAE;oBACvC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAClC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;oBACjB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;iBAClD;qBAAM;oBACH,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;iBACrD;aACJ;YACD,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,EAAE;gBAC/B,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACvC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;aACtC;iBAAM;gBACH,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;aAC7C;YACD,CAAC,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM,CAAC;SACtC;aAAM,IAAI,IAAI,KAAK,MAAM,EAAE;YAExB,IAAI,CAAC,CAAC,eAAe,EAAE;gBACnB,CAAC,CAAC,eAAe,EAAE,CAAC;aACvB;YACD,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE;gBAC/B,OAAO;aACV;YAID,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACrC,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE;gBAC9B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;aAC1D;iBAAM;gBACH,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;aAC9D;YAGD,IAAI,IAAI,GAAgB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC;YAChE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC5C,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBACpC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;aAC1E;iBAAM;gBACH,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;aAClE;YAED,IAAI,UAAU,SAAS,CAAC;YACxB,IAAI,UAAU,SAAS,CAAC;YAGxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAExD,IAAI,GAAgB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvD,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC9C,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC9C,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBAC7B,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;aAC7C;SACJ;aAAM,IAAI,IAAI,KAAK,SAAS,EAAE;YAE3B,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;YAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC1C,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;aACrD;YACD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SAC7C;IACL,CAAC;IAEO,6BAAa,GAArB,UAAsB,KAAa,EAAE,MAAmB,EAAE,GAAY;QAClE,IAAI,YAAY,CAAC;QACjB,IAAI,KAAK,EAAE;YACP,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAC3C,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;YACzD,YAAY,CAAC,IAAI,GAAG,qBAAqB,CAAC;YAC1C,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;SACpC;QACD,IAAI,GAAG,EAAE;YACL,IAAI,SAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC5C,SAAO,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAC1C,SAAO,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAClD,MAAM,CAAC,WAAW,CAAC,SAAO,CAAC,CAAC;YAI5B,MAAM,CAAC,gBAAgB,CACnB,OAAO,EACP;gBACI,SAAO,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACrC,CAAC,EACD,KAAK,CAAC,CAAC;YACX,OAAO,SAAO,CAAC;SAClB;QACD,OAAO,YAAY,CAAC;IACxB,CAAC;IAEO,8BAAc,GAAtB,UAAuB,MAAgB;QACnC,IAAI,IAAI,GAAG,IAAI,CAAC;gCACP,CAAC;YACN,OAAK,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,GAAG;gBAChD,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;QACP,CAAC;;QAJD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;oBAA7B,CAAC;SAIT;IACL,CAAC;IACL,YAAC;AAAD,CAAC,CA7yB0B,iBAAO,GA6yBjC;AA7yBY,sBAAK;AA+yBlB;IAAA;IAMA,CAAC;IAAD,aAAC;AAAD,CAAC;;;;;;;;;;;;;;;;;;AC3zBD,mGAA8C;AAC9C,qEAA0B;AAC1B,wEAA4B;AAC5B,8EAAgC;AAEhC,wEAAuB;AACvB,0EAAwB;AACxB,oEAAqB;AACrB,4EAAyB;AAEzB,oEAAqB;AACrB,4EAAyB;AACzB,sEAAsB;AACtB,wEAAuB;AACvB,0EAAwB;AACxB,0EAAwB;AACxB,0EAAwB;AACxB,wEAAuB;AACvB,wEAAuB;AACvB,wFAA+B;AAC/B,kFAA4B;AAC5B,4EAAyB;AACzB,0FAAgC;AAEhC,IAAI,2BAAY,EAAE,CAAC;AACnB,IAAI,OAAE,EAAE,CAAC;AACT,IAAI,SAAG,EAAE,CAAC;AACV,IAAI,aAAK,EAAE,CAAC;;;;;;;;;;;;;;;AC3BZ,yEAAqD;AAGrD,6DAA+B;AAG/B;IAgBI,iBAAY,KAAY;QAdjB,yBAAoB,GAAW,EAAE,CAAC;QAClC,yBAAoB,GAAW,EAAE,CAAC;QAcrC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAEM,2BAAS,GAAhB;QACI,OAAO,mBAAQ,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;IAEM,2BAAS,GAAhB,UAAiB,MAAe;QAC5B,IAAI,MAAM,EAAE;YACR,mBAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC3C;aACI;YACD,mBAAQ,CAAC,oBAAoB,EAAE,CAAC;SACnC;IACL,CAAC;IAEM,wBAAM,GAAb,UAAc,KAAY,EAAE,OAAuB;QAE/C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;YAEnB,OAAO,IAAI,CAAC;SACf;QAED,IAAI,OAAO,CAAC,EAAE,KAAK,aAAa,EAAE;YAC9B,OAAO,KAAK,CAAC;SAChB;QAED,QAAQ,KAAK,CAAC,IAAI,EAAE;YAChB,KAAK,WAAW;gBACZ,IAAI,OAAO,CAAC,EAAE,KAAK,aAAa,EAAE;oBAC9B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;oBAE3B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;iBACxB;gBACD,MAAM;YACV,KAAK,WAAW;gBACZ,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAC9B,MAAM;YACV,KAAK,YAAY;gBACb,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACtB,MAAM;YACV,KAAK,SAAS;gBACV,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACtB,MAAM;YAEV;gBACI,MAAM;SACb;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,0BAAQ,GAAhB,UAAiB,GAAgB,EAAE,OAAuB;QAEtD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACrB,OAAO;SACV;QAED,GAAG,CAAC,eAAe,EAAE,CAAC;QAEtB,IAAI,KAAK,GAAG,WAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACzC,IAAI,MAAM,GAAG,WAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAG1C,IAAI,KAAK,GAAG,CAAC,EAAE;YACX,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,KAAK,IAAI,CAAC,CAAC,CAAC;SACf;aAAM;YACH,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;SAC7B;QAED,IAAI,MAAM,GAAG,CAAC,EAAE;YACZ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,MAAM,IAAI,CAAC,CAAC,CAAC;SAChB;aAAM;YACH,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;SAC5B;QAED,IAAI,KAAK,GAAG,IAAI,CAAC,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE;YACzE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;SACrC;aAAM;YACH,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;SACtC;QAED,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;QAGzC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAEf,IAAI,WAAW,GAAG,WAAI,CAAC,WAAW,CAAC;gBAC/B,GAAG,EAAE,MAAM;gBACX,EAAE,EAAE,aAAa;gBACjB,CAAC,EAAE,IAAI,CAAC,CAAC;gBACT,CAAC,EAAE,IAAI,CAAC,CAAC;gBACT,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,YAAY;aACtB,CAAC,CAAC;YAEH,IAAI,KAAK,GAAG,WAAI,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;YAC/D,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YAE/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC;YAC3B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;SAChC;aACI;YAED,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAGzC,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,oBAAoB;mBAC3C,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBAE5E,IAAI,WAAW,GAAG,WAAI,CAAC,WAAW,CAAC;oBAC/B,GAAG,EAAE,MAAM;oBACX,CAAC,EAAE,IAAI,CAAC,CAAC;oBACT,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC;oBACb,aAAa,EAAE,SAAS;oBACxB,WAAW,EAAE,EAAE;oBACf,IAAI,EAAE,OAAO;iBAChB,CAAC,CAAC;gBACH,WAAW,CAAC,WAAW,GAAG,wCAAwC,CAAC;gBACnE,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;gBAI9C,IAAI,cAAc,GAAe,WAAW,CAAC,qBAAqB,EAAE,CAAC;gBAErE,IAAI,qBAAqB,GAAG,WAAI,CAAC,WAAW,CAAC;oBACzC,GAAG,EAAE,MAAM;oBACX,CAAC,EAAE,IAAI,CAAC,CAAC;oBACT,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM;oBACjC,KAAK,EAAE,cAAc,CAAC,KAAK;oBAC3B,MAAM,EAAE,cAAc,CAAC,MAAM;oBAC7B,IAAI,EAAE,MAAM;oBACZ,cAAc,EAAE,CAAC;iBACpB,CAAC,CAAC;gBAEH,IAAI,CAAC,kBAAkB,GAAG,qBAAqB,CAAC;gBAChD,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC;gBAClC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;gBACxD,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;aACjD;YAED,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,WAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;aACpE;YAED,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,WAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;aACpE;YAGD,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7D,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YAG/D,IAAI,IAAI,CAAC,qBAAqB,EAAE;gBAC5B,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC;aAGlE;iBACI;gBACD,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;aAC5D;SACJ;IACL,CAAC;IAEO,4BAAU,GAAlB;QACI,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;QAEnC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;QAEzC,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAClD,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;SACpC;QAED,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;SAC5B;QAED,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;SACnC;QAED,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;SACvC;IACL,CAAC;IAEO,yBAAO,GAAf;QAEI,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;YAC7B,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO;SACV;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9E,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAEO,uBAAK,GAAb,UAAc,GAAgB,EAAE,OAAuB;QAEnD,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,OAAO;SACV;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAE1B,IAAI,CAAC,CAAC,GAAG,WAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,CAAC,GAAG,WAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAEL,cAAC;AAAD,CAAC;AA3OY,0BAAO;;;;;;;;;;;;;;;ACNpB,yEAAqD;AACrD,uGAAiE;AAEjE,wFAAyC;AAGzC,6DAA+B;AAE/B;IASI,cAAY,KAAY;QALhB,aAAQ,GAAG,KAAK,CAAC;QACjB,aAAQ,GAAG,KAAK,CAAC;QACjB,gBAAW,GAAG,IAAI,oBAAK,EAAE,CAAC;QAI9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAEM,qBAAM,GAAb,UAAc,KAAY,EAAE,OAAuB;QAC/C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;YACnB,OAAO,IAAI,CAAC;SACf;QAED,QAAQ,KAAK,CAAC,IAAI,EAAE;YAChB,KAAK,WAAW;gBACZ,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,aAAa,CAAC,EAAE;oBACpD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;oBACvB,IAAI,CAAC,UAAU,GAAkB,OAAO,CAAC,KAAK,CAAC;oBAC/C,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;oBAC3B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;iBACxB;gBACD,MAAM;YACV,KAAK,SAAS;gBACV,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACf,IAAI,CAAC,KAAK,EAAE,CAAC;iBAChB;gBACD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAEtB,MAAM;YACV,KAAK,WAAW;gBACZ,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACf,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;iBAC7B;gBACD,MAAM;YACV,KAAK,YAAY;gBACb,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACf,IAAI,CAAC,KAAK,EAAE,CAAC;iBAChB;gBACD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACtB,MAAM;YACV;gBACI,MAAM;SACb;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,wBAAS,GAAhB;QACI,OAAO,mBAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IAEM,wBAAS,GAAhB,UAAiB,MAAe;QAC5B,IAAI,MAAM,EAAE;YACR,mBAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACxC;aACI;YACD,mBAAQ,CAAC,oBAAoB,EAAE,CAAC;SACnC;IACL,CAAC;IAEO,oBAAK,GAAb;QACI,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;QAWzC,IAAI,WAAI,CAAC,QAAQ,EAAE,EAAE;YACjB,IAAI,QAAQ,GAAG,WAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC/C,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;SAC3C;IACL,CAAC;IAEO,oBAAK,GAAb,UAAc,GAAgB,EAAE,OAAgB;QAE5C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;QACjC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IAC1C,CAAC;IAEO,mBAAI,GAAZ,UAAa,GAAgB,EAAE,OAAuB;QAElD,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,aAAa,EAAE;gBAEnC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aAChD;YAED,IAAI,SAAS,GAAG,WAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC/C,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;SAC1C;QACD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAEtB,GAAG,CAAC,eAAe,EAAE,CAAC;QAEtB,IAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/F,IAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YACxB,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;SACjC;QAED,IAAM,MAAM,GAAG,EAAE,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACrD,IAAM,MAAM,GAAG,EAAE,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,GAAG,MAAM,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC;QAC9F,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC;QAEvD,IAAI,IAAI,CAAC,OAAO,YAAY,YAAI,EAAE;YACvB,IAAI,CAAC,OAAQ,CAAC,WAAW,EAAE,CAAC;SACtC;QAED,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;QACjC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;QAIjC,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC9D,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAE9D,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC1D,IAAG,CAAC,WAAW,EAAC;YACZ,OAAO;SACV;QAED,IAAG,IAAI,GAAG,WAAW,CAAC,KAAK,EAAC;YACxB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;SAC5D;QAED,IAAG,IAAI,GAAG,WAAW,CAAC,MAAM,EAAC;YACzB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;SAC7D;IACL,CAAC;IACL,WAAC;AAAD,CAAC;AAjJY,oBAAI;;;;;;;;;;;;;;;ACHjB;IAGI,uBAAY,KAAoB;QAC5B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAEM,sCAAc,GAArB,UAAsB,MAAY,EAAE,QAAgB,EAAE,QAAa,EAAE,QAAa;QAC9E,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,CAAC;QACjD,IAAI,OAAO,EAAE;YAET,IAAI,IAAI,GAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACvC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzB,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC5B,IAAI,GAAG,GAAG,CAAC,EAAE;oBACT,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;iBACxC;aACJ;YACD,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACnC,IAAI,OAAO,GAAG,EAAE,CAAC;YACjB,OAAO,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC;YAC3B,IAAI,OAAO,GAAG,EAAE,CAAC;YACjB,OAAO,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC;YAC3B,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;YACtB,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACxB,OAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;SACvC;IACL,CAAC;IACL,oBAAC;AAAD,CAAC;AA/BY,sCAAa;;;;;;;;;;;;;;;ACJ1B,yEAAmD;AAEnD,6DAA6B;AAE7B;IAII,oBAAY,KAAY;QACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAEM,8BAAS,GAAhB,UAAiB,MAAe;QAC5B,IAAI,MAAM,EAAE;YACR,mBAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SAC9C;aACI;YACD,mBAAQ,CAAC,oBAAoB,EAAE,CAAC;SACnC;IACL,CAAC;IAEM,8BAAS,GAAhB;QACI,OAAO,mBAAQ,CAAC,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC;IAEM,2BAAM,GAAb,UAAc,KAAY,EAAE,OAAuB;QAC/C,IAAI,IAAI,GAAW,OAAO,KAAK,CAAC;QAChC,IAAI,IAAI,KAAK,WAAW,EAAE;YACtB,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,GAAG,GAAyB,KAAK,CAAC;QACtC,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE;YACzB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;SAC5B;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE;YACjC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,GAAG,CAAC,MAAM,EAAE;gBACjC,OAAO,KAAK,CAAC;aAChB;YACD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;SACnC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;YAC5B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;SAC5B;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,kCAAa,GAApB,UAAqB,GAAW;QAC5B,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QACzB,WAAI,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC7B,WAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC1B,WAAI,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3B,IAAI,GAAG,KAAK,WAAW,EAAE;YACrB,IAAI,CAAC,CAAC,WAAW,CAAC,EAAE;gBAChB,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;gBAC9B,CAAC,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;aACzB;YACD,OAAO,IAAI,CAAC;SACf;QACD,WAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACtB,IAAI,GAAG,KAAK,OAAO,EAAE;YACjB,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE;gBACjB,CAAC,CAAC,WAAW,CAAC,GAAG,WAAI,CAAC,MAAM,CAAC,EAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,aAAa,EAAC,CAAC,CAAC;gBAC3F,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;aACjC;YACD,OAAO,IAAI,CAAC;SACf;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,mCAAc,GAAtB,UAAuB,GAAc;QACjC,GAAG,CAAC,eAAe,EAAE,CAAC;QACtB,GAAG,CAAC,cAAc,EAAE,CAAC;QAErB,IAAI,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC;QAEnC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAClB,GAAG,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM,CAAC;YACrC,OAAO;SACV;QAGD,IAAI,MAAM,GAAI,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,WAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAClC,MAAM,CAAC,MAAM,GAAG,UAAS,KAAK;gBAC1B,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,UAAU,CAAC,CAAC;gBAG1C,IAAI,IAAI,CAAC,KAAK,EAAE;oBACZ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;iBACjC;YACL,CAAC,CAAC;YACF,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;SACxB;QACD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;IAEO,mCAAc,GAAtB,UAAuB,GAAc;QACjC,IAAI,KAAK,GAAY,IAAI,EAAE,CAAS,EAAE,CAAC,CAAC;QACxC,IAAI,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC;QAEnC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;gBAC9C,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACb,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;oBAC9B,KAAK,GAAG,KAAK,CAAC;iBACjB;qBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,EAAE,EAAE;oBACtB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;oBACzB,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;wBACxC,KAAK,GAAG,KAAK,CAAC;qBACjB;iBACJ;aACJ;SACJ;aAAM;YACH,IAAI,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC;YACnC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE;oBACpC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE;wBACxD,KAAK,GAAG,KAAK,CAAC;qBACjB;iBACJ;aACJ;iBAAM;gBACH,OAAO;aACV;SACJ;QAED,GAAG,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM,CAAC;QACrC,IAAI,KAAK,EAAE;YACP,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;SACjC;aAAM,IAAI,GAAG,CAAC,OAAO,EAAE;YACpB,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAC/B;aAAM;YACH,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;SAC9B;IAGL,CAAC;IAEO,+BAAU,GAAlB,UAAmB,KAAY,EAAE,GAAW;QACxC,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAEO,oCAAe,GAAvB,UAAwB,GAAc;QAClC,GAAG,CAAC,eAAe,EAAE,CAAC;QACtB,GAAG,CAAC,cAAc,EAAE,CAAC;QACrB,GAAG,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM,CAAC;QACrC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACjC,CAAC;IACL,iBAAC;AAAD,CAAC;AApJY,gCAAU;;;;;;;;;;;;;;;ACHvB,6DAA+B;AAE/B,yEAAqD;AAErD,8FAA+C;AAE/C;IAUI,iBAAY,KAAY;QACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAEM,2BAAS,GAAhB,UAAiB,MAAe;QAC5B,IAAI,MAAM,EAAE;YACR,mBAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC3C;aACI;YACD,mBAAQ,CAAC,oBAAoB,EAAE,CAAC;SACnC;IACL,CAAC;IAEM,2BAAS,GAAhB;QACI,OAAO,mBAAQ,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;IAEM,wBAAM,GAAb,UAAc,KAAY,EAAE,OAAuB;QAE/C,IAAI,CAAC,CAAiB,KAAM,CAAC,OAAO,IAAI,mBAAQ,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,EAAE;YACtF,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;SACf;QAED,QAAQ,KAAK,CAAC,IAAI,EAAE;YAChB,KAAK,WAAW;gBACZ,IAAI,OAAO,YAAY,YAAI,EAAE;oBACzB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;oBAC3B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;iBACxB;gBACD,MAAM;YAEV,KAAK,WAAW;gBACZ,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAC9B,MAAM;YACV,KAAK,YAAY;gBACb,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACtB,MAAM;YACV,KAAK,SAAS;gBACV,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAC7B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACtB,MAAM;YAEV,OAAO,CAAC,CAAC,MAAM;SAClB;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,0BAAQ,GAAhB,UAAiB,GAAgB,EAAE,OAAuB;QAEtD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACrB,OAAO;SACV;QACD,IAAI,OAAO,GAAG,WAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,OAAO,GAAG,WAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAElC,IAAI,IAAI,GAAG,MAAI,IAAI,CAAC,CAAC,SAAI,IAAI,CAAC,CAAC,UAAK,OAAO,SAAI,OAAS,CAAC;QAEzD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAEf,IAAI,IAAI,GAAG;gBACP,GAAG,EAAE,MAAM;gBACX,EAAE,EAAE,aAAa;gBACjB,CAAC,EAAE,IAAI;gBACP,KAAK,EAAE,SAAS;aACnB,CAAC;YAEF,IAAI,KAAK,GAAG,WAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YAErB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SACtD;aACI;YAGD,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YAG7C,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,WAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,WAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YAGpG,IAAI,UAAU,EAAE;gBAGZ,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,EAAE;oBACjE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;iBACvE;gBAED,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;gBACjC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;aAChF;iBACI,IAAI,IAAI,CAAC,cAAc,EAAE;gBAC1B,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;aACvE;SACJ;IACL,CAAC;IAEO,4BAAU,GAAlB;QACI,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAE3B,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;SACvB;QAED,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;SACvE;IACL,CAAC;IAEO,kCAAgB,GAAxB,UAAyB,KAAkB;QAEvC,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW;aAClC,iBAAiB,CAAC,WAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,WAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAErE,IAAI,CAAC,UAAU,EAAE;YACb,IAAI,CAAC,UAAU,EAAE,CAAC;YAElB,OAAO;SACV;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,aAAa,CAAC;QAEhE,IAAI,QAAQ,GAAG;YACX,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE;YAC1B,MAAM,EAAE,UAAU,CAAC,EAAE;SACxB,CAAC;QAEF,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAM,QAAQ,EAAE,IAAI,CAAC,CAAC;QAClE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAEO,uBAAK,GAAb,UAAc,GAAgB,EAAE,OAAuB;QAEnD,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,OAAO;SACV;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,OAAgB,CAAC;QAEnC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAGxE,IAAI,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAC3D,IAAI,cAAc,EAAE;YAChB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;SAC7C;IACL,CAAC;IACL,cAAC;AAAD,CAAC;AAnKY,0BAAO;;;;;;;;;;;;;;;ACPpB,wFAAyC;AACzC,wFAAgD;AAChD,6DAA+B;AAC/B,iGAAwD;AACxD,yEAAqD;AAIrD;IAaI,gBAAY,KAAY;QAPhB,YAAO,GAAG,CAAC,CAAC;QAQhB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,IAAI,CAAC,WAAW,GAAG,qBAAY,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;QACvH,IAAI,CAAC,aAAa,GAAG,qBAAY,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;QACzH,IAAI,CAAC,YAAY,GAAG,qBAAY,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,sCAAsC,EAAE,CAAC,CAAC;IACrJ,CAAC;IAEM,uBAAM,GAAb,UAAc,KAAY,EAAE,OAAuB;QAAnD,iBA8OC;QA5OG,IAAI,CAAC,GAAG,WAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,GAAG,WAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAE9B,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;YACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YAEtB,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;YAC9D,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;YAC/D,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;YAEhE,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAGjC,IAAI,OAAO,YAAY,YAAI,EAAE;gBACzB,IAAI,CAAC,gBAAgB,GAAY,OAAO,CAAC,KAAK,CAAC;aAClD;YACD,WAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;SAC7D;QAED,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,YAAY,IAAI,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAE3E,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAEjC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;YAC9D,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;YAC/D,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;YAEhE,OAAO,IAAI,CAAC;SACf;QAED,IAAI,OAAO,YAAY,YAAI,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;YACnD,IAAI,CAAC,GAAS,OAAO,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC9C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC/C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAChD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAE3C,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;YAC/D,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;YAChE,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;YAEjE,IAAI,GAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC3C,IAAI,GAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAErB,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,eAAa,GAAC,UAAI,GAAC,GAAG,IAAI,CAAC,OAAO,OAAG,CAAC,CAAC;YAC1F,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,WAAC,IAAI,YAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,EAAhD,CAAgD,CAAC;YAEjF,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,eAAa,GAAC,UAAI,GAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,OAAG,CAAC,CAAC;YACjG,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,UAAC,GAAG;gBAC7B,IAAI,gBAAgB,GAAG,KAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;gBACxD,IAAI,SAAS,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;gBACjC,SAAS,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBAC1D,KAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YACtC,CAAC,CAAC;YAEF,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,eAAa,GAAC,UAAI,GAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,OAAG,CAAC,CAAC;YAChG,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG;gBAC5B,mBAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBACrC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,WAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;YACrE,CAAC,CAAC;SACL;QACD,IAAI,OAAO,YAAY,YAAI,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;YACnD,IAAI,OAAK,GAAS,OAAO,CAAC;YAE1B,IAAI,WAAI,CAAC,QAAQ,EAAE,EAAE;gBACjB,IAAI,IAAI,CAAC,gBAAgB,IAAI,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;oBACrF,OAAO,IAAI,CAAC;iBACf;aACJ;YAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAGjC,IAAI,CAAC,gBAAgB,GAAY,OAAO,CAAC,KAAK,CAAC;YAC/C,WAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;YAC1D,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YAGzD,IAAI,eAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAClD,eAAa,CAAC,EAAE,GAAG,YAAY,CAAC;YAChC,eAAa,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;YAC1C,eAAa,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,OAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,OAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YAC7E,eAAa,CAAC,KAAK,CAAC,IAAI,GAAG,OAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;YACnD,eAAa,CAAC,KAAK,CAAC,KAAK,GAAG,OAAK,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;YACrD,eAAa,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;YAElC,IAAI,WAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAChD,WAAS,CAAC,IAAI,GAAG,MAAM,CAAC;YACxB,WAAS,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;YAC/B,WAAS,CAAC,WAAW,GAAG,4BAA4B,CAAC;YAErD,eAAa,CAAC,WAAW,CAAC,WAAS,CAAC,CAAC;YACrC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,eAAa,CAAC,CAAC;YAEzC,WAAS,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAC,GAAG;gBAEvC,IAAI,WAAI,CAAC,QAAQ,EAAE,EAAE;oBAEjB,IAAI,CAAC,CAAC,WAAS,CAAC,KAAK,IAAI,WAAS,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAI,CAAC,gBAAgB,IAAI,OAAO,CAAC,EAAE,KAAK,KAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE;wBAC3H,KAAI,CAAC,oBAAoB,EAAE,CAAC;qBAC/B;oBAED,OAAO;iBACV;gBAGD,IAAI,CAAC,CAAC,WAAS,CAAC,KAAK,IAAI,WAAS,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;oBACpD,KAAI,CAAC,oBAAoB,EAAE,CAAC;iBAC/B;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACnB,IAAI,eAAa,GAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YACvH,WAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAU,GAAG;gBAE/C,IAAI,OAAO,GAAS,GAAI,CAAC,KAAK,CAAC;gBAC/B,IAAI,UAAU,GAAQ,WAAS,CAAC,KAAK,CAAC;gBAEtC,IAAI,WAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC,EAAE;oBAClF,IAAI,YAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;oBAClD,YAAU,CAAC,EAAE,GAAG,oBAAoB,CAAC;oBACrC,YAAU,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;oBAEhC,KAAiB,UAAa,EAAb,iCAAa,EAAb,2BAAa,EAAb,IAAa,EAAE;wBAA3B,IAAI,IAAI;wBACT,IAAI,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;wBACpD,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC;wBAC1B,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC;wBAC9B,YAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;qBACxC;oBAED,YAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,GAAG;wBAC/C,IAAI,kBAAkB,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBAC/C,IAAI,oBAAoB,GAAG,YAAU,CAAC,OAAO,CAAC,YAAU,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC;wBAE9E,IAAI,kBAAkB,CAAC,MAAM,IAAI,CAAC,EAAE;4BAChC,WAAS,CAAC,KAAK,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,oBAAoB,CAAC;4BAC9E,WAAS,CAAC,KAAK,EAAE,CAAC;yBACrB;oBACL,CAAC,CAAC,CAAC;oBAEH,eAAa,CAAC,WAAW,CAAC,YAAU,CAAC,CAAC;iBACzC;qBACI,IAAI,CAAC,WAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE;oBACtC,IAAI,YAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;oBAE/D,IAAI,YAAU,EAAE;wBACZ,YAAU,CAAC,MAAM,EAAE,CAAC;qBACvB;iBACJ;gBAED,IAAI,OAAO,KAAK,EAAE,EAAE;oBAChB,OAAO;iBACV;gBAGD,IAAI,CAAC,WAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,WAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK,EAAE;oBAC9E,IAAI,WAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE;wBAChC,OAAK,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;wBACtC,OAAK,CAAC,MAAM,EAAE,CAAC;qBAClB;yBAAM,IAAI,WAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,EAAG;wBACxC,IAAI,IAAI,GAAc,IAAI,CAAC;wBAC3B,IAAI,MAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;wBACnE,KAAkB,UAAqB,EAArB,YAAK,CAAC,aAAa,EAAE,EAArB,cAAqB,EAArB,IAAqB,EAAG;4BAArC,IAAI,KAAK;4BACV,IAAK,MAAI,KAAK,KAAK,CAAC,OAAO,EAAE,EAAE;gCAC3B,IAAI,GAAG,KAAK,CAAC;gCACb,MAAM;6BACT;yBACJ;wBACD,IAAI,IAAI,EAAE;4BACN,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;yBAC9E;wBACD,OAAK,CAAC,MAAM,EAAE,CAAC;qBAClB;iBACJ;qBAGI,IAAI,WAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,WAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE;oBACvE,OAAK,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;oBACnC,OAAK,CAAC,MAAM,EAAE,CAAC;iBAClB;qBAEI,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;oBAChF,OAAK,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;iBACxC;gBAGD,eAAa,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,OAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,OAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;gBAC7E,eAAa,CAAC,KAAK,CAAC,IAAI,GAAG,OAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;gBACnD,eAAa,CAAC,KAAK,CAAC,KAAK,GAAG,OAAK,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;gBAErD,WAAS,CAAC,KAAK,GAAG,EAAE,CAAC;gBAGrB,IAAI,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;gBAE/D,IAAI,UAAU,EAAE;oBACZ,UAAU,CAAC,MAAM,EAAE,CAAC;iBACvB;YAML,CAAC,CAAC,CAAC;YAEG,eAAa,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,KAAK,EAAE,CAAC;YAEzC,OAAO,IAAI,CAAC;SACf;QAED,IAAI,OAAO,YAAY,mBAAW,EAAE;YAChC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAClD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAElD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC9C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;YAExD,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;YAC/D,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;YAC/D,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;YAEhE,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,eAAa,CAAC,SAAI,CAAC,MAAG,CAAC,CAAC;YAC3E,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,WAAC,IAAI,YAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,EAAhD,CAAgD,CAAC;YAEjF,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAEjC,IAAI,IAAI,GAAgB,OAAO,CAAC;YAChC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC;YAEnC,WAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;SAC5D;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,0BAAS,GAAhB;QACI,OAAO,mBAAQ,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAEM,0BAAS,GAAhB,UAAiB,MAAe;QAC5B,IAAI,MAAM,EAAE;YACR,mBAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SAC1C;aACI;YACD,mBAAQ,CAAC,oBAAoB,EAAE,CAAC;SACnC;IACL,CAAC;IAEO,kCAAiB,GAAzB,UAA0B,KAAoB,EAAE,OAAe;QAC3D,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE;YAClC,OAAO;SACV;QAED,IAAI,YAAY,GAAkB,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,OAAO,KAAK,OAAO,EAAE;YACnD,OAAO;SACV;QAED,YAAY,CAAC,WAAW,GAAG,OAAO,CAAC;IACvC,CAAC;IAEO,0CAAyB,GAAjC;QAEI,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvB,WAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;YAC7D,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;SACrC;QAED,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvB,WAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;YAC5D,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;SACrC;QAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAChC,CAAC;IAEO,qCAAoB,GAA5B;QAEI,IAAI,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAC3D,IAAI,cAAc,EAAE;YAChB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;SAI7C;IACL,CAAC;IAEL,aAAC;AAAD,CAAC;AAzTY,wBAAM;;;;;;;;;;;;;;;ACRnB,yEAAqD;AAGrD;IAII,cAAY,KAAY;IACxB,CAAC;IAEM,qBAAM,GAAb,UAAc,CAAM,EAAE,OAAuB;QACzC,IAAI,KAAK,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;QACvD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;QAE3B,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChE,IAAM,UAAU,GAAM,MAAM,CAAC,CAAC,CAAC,SAAI,MAAM,CAAC,CAAC,CAAC,SAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAG,CAAC;QACrG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAEpD,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,wBAAS,GAAhB;QACI,OAAO,mBAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IAEM,wBAAS,GAAhB,UAAiB,MAAe;QAC5B,IAAI,MAAM,EAAE;YACR,mBAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACxC;aACI;YACD,mBAAQ,CAAC,oBAAoB,EAAE,CAAC;SACnC;IACL,CAAC;IACL,WAAC;AAAD,CAAC;AA/BY,oBAAI;;;;;;;;;;;;;;;;;;ACJjB,kEAAuB;AACvB,sEAAyB;AACzB,kEAAuB;AACvB,wEAA0B;AAC1B,8EAA6B;AAC7B,wEAA0B;;;;;;;;;;;;;;;ACC1B;IAAA;IA2CA,CAAC;IAzCU,4BAAM,GAAb,UAAc,KAAY,EAAE,IAAoB;QAC5C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;YAClB,OAAO;SACV;QACD,IAAI,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC;QAC9B,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAE7C,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC;YAC1D,OAAO,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,KAAiB,UAAW,EAAX,UAAK,CAAC,KAAK,EAAX,cAAW,EAAX,IAAW,EAAE;YAAzB,IAAI,MAAI;YACT,CAAC,CAAC,OAAO,CAAC,MAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;SAC7E;QAED,KAAiB,UAAW,EAAX,UAAK,CAAC,KAAK,EAAX,cAAW,EAAX,IAAW,EAAE;YAAzB,IAAI,IAAI;YACT,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SAC7C;QAED,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAE1B,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,UAAU,MAAc;YACtC,KAAiB,UAAW,EAAX,UAAK,CAAC,KAAK,EAAX,cAAW,EAAX,IAAW,EAAE;gBAAzB,IAAI,MAAI;gBACT,IAAI,MAAI,CAAC,EAAE,KAAK,MAAM,EAAE;oBACpB,MAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;iBAC3G;aACJ;QACL,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,UAAU,CAAM;YAC9B,KAAiB,UAAW,EAAX,UAAK,CAAC,KAAK,EAAX,cAAW,EAAX,IAAW,EAAE;gBAAzB,IAAI,IAAI;gBACT,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE;oBAClD,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;oBACnC,IAAI,CAAC,WAAW,EAAE,CAAC;oBACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;wBAC3B,IAAI,KAAK,GAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;wBAC1C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;qBACnC;iBACJ;aACJ;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IACL,kBAAC;AAAD,CAAC;AA3CY,kCAAW;;;;;;;;;;;;;;;ACCxB;IAAA;QACW,UAAK,GAAW,EAAE,CAAC;QACnB,UAAK,GAAkB,EAAE,CAAC;QAC1B,aAAQ,GAAW,EAAE,CAAC;QACtB,YAAO,GAAW,EAAE,CAAC;QACrB,eAAU,GAA2B,EAAE,CAAC;QACxC,eAAU,GAAW,EAAE,CAAC;QACxB,UAAK,GAAW,CAAC,CAAC;QAClB,YAAO,GAAW,MAAM,CAAC,iBAAiB,CAAC;QAC3C,YAAO,GAAW,CAAC,CAAC;QACpB,cAAS,GAAW,CAAC,CAAC;QACtB,aAAQ,GAAW,CAAC,CAAC;QACrB,YAAO,GAAW,CAAC,CAAC;QACpB,eAAU,GAAkB,EAAE,CAAC;IAkB1C,CAAC;IAhBU,kCAAS,GAAhB;QACI,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAEM,6BAAI,GAAX,UAAY,EAAU;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IAEM,gCAAO,GAAd,UAAe,EAAU,EAAE,CAAkB;QACzC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;YACtB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YACnB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;SAC/B;aAAM,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;SACzB;IACL,CAAC;IACL,qBAAC;AAAD,CAAC;AA/BY,wCAAc;AAiC3B;IASI,yBAAY,EAAU,EAAE,KAAa,EAAE,MAAc,EAAE,CAAS,EAAE,CAAS;QACvE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IACL,sBAAC;AAAD,CAAC;AAhBY,0CAAe;AAkB5B;IAAA;IAGA,CAAC;IAAD,sBAAC;AAAD,CAAC;AAHY,0CAAe;AAM5B;IAAA;IA2XA,CAAC;IAxXU,+BAAM,GAAb,UAAc,KAAY,EAAE,IAAoB;QAC5C,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC;QACzC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,GAAG,cAAc,CAAC,cAAc,CAAC;QAChE,IAAI,CAAc,CAAC;QAEnB,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC,GAAG,IAAI,cAAc,EAAE,CAAC;QAEzB,KAAK,CAAC,IAAI,KAAK,EAAE;YACb,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE;gBAC9D,SAAS;aACZ;YACD,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACb,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;SACxG;QACD,KAAK,CAAC,IAAI,KAAK,EAAE;YACb,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE;gBAC9D,SAAS;aACZ;YACD,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACb,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC/B,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC/B,IAAI,GAAG,GAAG,GAAG,EAAE;gBACX,IAAI,GAAG,GAAG,GAAG,CAAC;gBACd,GAAG,GAAG,GAAG,CAAC;gBACV,GAAG,GAAG,GAAG,CAAC;aACb;YACD,IAAI,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC;YACrC,IAAI,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC;YACrC,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBACjF,OAAO,GAAG,EAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAC,CAAC;gBAC3D,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACtB,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAExB,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBACjB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;iBACvB;gBACD,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAG7B,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;oBAClB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;iBACxB;gBACD,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACjC;SACJ;QACD,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAElB,KAAK,CAAC,IAAI,KAAK,EAAE;YACb,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE;gBAC9D,SAAS;aACZ;YACD,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACb,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACjB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBAChB,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;aAC/D;SACJ;QACD,KAAK,CAAC,IAAI,KAAK,EAAE;YACb,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE;gBAC9D,SAAS;aACZ;YACD,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;SAEhB;QACD,KAAK,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC;IAEM,kCAAS,GAAhB,UAAiB,IAAa;QAC1B,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;SACjD;QACD,OAAO,IAAI,CAAC,EAAE,CAAC;IACnB,CAAC;IAEM,kCAAS,GAAhB,UAAiB,CAAiB;QAC9B,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAEtB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACd,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC;QAEf,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAEM,uCAAc,GAArB,UAAsB,CAAiB;QACnC,IAAI,CAAC,EAAE,CAAC,CAAC;QACT,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;YACf,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACf,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC;SACpB;IACL,CAAC;IAiBM,8BAAK,GAAZ,UAAa,CAAiB;QAC1B,IAAI,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QACpC,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACtB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAClC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;SACpB;QACD,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;YACf,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE;gBACZ,SAAS;aACZ;YACD,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YAClB,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;gBACzB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAC/B;SACJ;QACD,KAAK,KAAK,IAAI,QAAQ,EAAE;YACpB,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACvB,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;oBAC7C,SAAS;iBACZ;gBACD,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;aACnD;SACJ;QAED,KAAK,KAAK,IAAI,QAAQ,EAAE;YACpB,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC5B,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;oBACvB,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;wBAC7C,SAAS;qBACZ;oBACD,IAAI,MAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAI,GAAG,GAAG,CAAC,CAAC;oBACZ,IAAI,MAAM,GAAG,CAAC,CAAC;oBACf,IAAI,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,MAAI,CAAC,CAAC;oBAC/B,IAAI,KAAK,EAAE;wBACP,KAAK,CAAC,IAAI,KAAK,EAAE;4BACb,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;gCACnC,SAAS;6BACZ;4BACD,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;4BACpB,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;4BAChC,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;4BACxC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;yBACjC;qBACJ;oBACD,CAAC,CAAC,IAAI,CAAC,MAAI,CAAC,CAAC,UAAU,GAAG,GAAG,GAAG,MAAM,CAAC;oBACvC,CAAC,CAAC,IAAI,CAAC,MAAI,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC;iBAChC;aACJ;iBAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;oBACvB,IAAI,MAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC9B,CAAC,CAAC,IAAI,CAAC,MAAI,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;oBAC5B,CAAC,CAAC,IAAI,CAAC,MAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;iBAC3B;aACJ;SACJ;QACD,KAAK,KAAK,IAAI,QAAQ,EAAE;YACpB,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACvB,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;oBAC7C,SAAS;iBACZ;gBACD,IAAI,MAAI,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvC,MAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAI,CAAC,UAAU,GAAG,MAAI,CAAC,MAAM,CAAC;gBACzD,IAAI,KAAK,CAAC,MAAI,CAAC,KAAK,CAAC,EAAE;oBACnB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;iBACxB;aACJ;SACJ;IACL,CAAC;IAEM,oCAAW,GAAlB,UAAmB,CAAiB;QAChC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE;YACxB,IAAI,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;SAC5B;QACD,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC;QAClB,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC;IACtB,CAAC;IAkBM,sCAAa,GAApB,UAAqB,CAAiB;QAClC,IAAI,CAAC,GAAW,CAAC,CAAC;QAClB,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE;YACpB,IAAI,CAAC,GAAqC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACtD,IAAI,CAAC,GAAW,CAAC,CAAC,MAAM,CAAC;YACzB,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC3B,IAAM,CAAC,GAAW,CAAC,CAAC,MAAM,CAAC;YAC3B,IAAM,KAAK,GAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACrC,IAAI,MAAI,SAAQ,CAAC;YAEjB,IAAI,KAAK,KAAK,KAAK,GAAG,CAAC,EAAE;gBACrB,SAAS;aACZ;YAED,IAAI,KAAK,UAAC;YACV,KAAK,KAAK,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,EAAE,KAAK,EAAE;gBAC5C,MAAI,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC1C,IAAI,OAAO,GAAG,EAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAC,CAAC;gBAC9D,KAAK,GAAG,IAAI,eAAe,CAAC,MAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9C,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;gBAClB,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;gBAEnB,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;oBAClB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;iBACxB;gBACD,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAE9B,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBAC3B,CAAC,GAAG,MAAI,CAAC;aACZ;SACJ;IACL,CAAC;IAuBM,oCAAW,GAAlB,UAAmB,CAAiB;QAChC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;YACf,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YAC7C,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;SAC3C;IACL,CAAC;IAEM,qCAAY,GAAnB,UAAoB,CAAiB,EAAE,CAAO,EAAE,WAAmB,EAAE,IAAmB;QACpF,IAAI,GAAG,GAAW,CAAC,CAAC;QACpB,IAAI,EAAU,CAAC;QACf,IAAI,CAAS,CAAC;QACd,IAAI,MAAM,CAAC;QACX,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;YAClB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC1C,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAChC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACrB,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE;oBACV,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;iBACpC;qBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;oBAC7B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;iBAC5E;qBAAM;oBACH,GAAG,GAAG,WAAW,CAAC;iBACrB;aACJ;YACD,OAAO,GAAG,CAAC;SACd;QACD,OAAO,WAAW,CAAC;IACvB,CAAC;IAMM,uCAAc,GAArB,UAAsB,CAAiB;QACnC,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC;QACpB,IAAI,KAAK,CAAC;QACV,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,iBAAiB,CAAC;QACrC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;QAChB,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;QACf,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;YACnB,IAAI,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;gBACzB,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC;gBACjB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5B,IAAI,KAAK,GAAG,CAAC,CAAC,OAAO,EAAE;oBACnB,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;iBACrB;gBACD,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBACjD,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;aACjD;SACJ;IACL,CAAC;IAEM,iCAAQ,GAAf,UAAgB,CAAiB;QAC7B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC7B,KAAK,IAAI,CAAC,IAAI,IAAI,EAAE;YAChB,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE;gBACrB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE;oBACvC,SAAS;iBACZ;gBACD,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;oBACtB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;iBACvD;aACJ;SAEJ;IACL,CAAC;IAEM,kCAAS,GAAhB,UAAiB,CAAiB;QAC9B,IAAI,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;QACxB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,KAAK,IAAI,QAAQ,EAAE;YACxB,IAAI,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;YAC5B,KAAK,IAAI,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;gBAC3B,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;oBAC7C,SAAS;iBACZ;gBACD,IAAI,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5B,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,SAAS,GAAG,CAAC,CAAC;aACzC;YACD,KAAK,IAAI,SAAS,GAAG,OAAO,CAAC;SAChC;IACL,CAAC;IAMM,yCAAgB,GAAvB,UAAwB,CAAiB;QACrC,IAAI,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;SACpB;QACD,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;YACnB,IAAI,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;gBACzB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;aACvC;SACJ;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAEM,kCAAS,GAAhB,UAAiB,CAAiB;QAC9B,IAAI,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACxC,OAAO,QAAQ,CAAC;IACpB,CAAC;IAzXa,6BAAc,GAAG,MAAM,CAAC;IA0X1C,qBAAC;CAAA;AA3XY,wCAAc;;;;;;;;;;;;;;;AC9D3B,6DAA+B;AAG/B;IAAA;IAiBA,CAAC;IAfQ,uBAAM,GAAb,UAAc,KAAY;QAExB,IAAI,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC;QAE9B,IAAI,KAAK,CAAC,KAAK,EAAE;YACf,KAAiB,UAAW,EAAX,UAAK,CAAC,KAAK,EAAX,cAAW,EAAX,IAAW,EAAE;gBAAzB,IAAI,IAAI;gBACX,IAAI,GAAG,GAAU,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC/B,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;oBAC9B,IAAI,CAAC,GAAG,WAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;oBACrD,IAAI,CAAC,GAAG,WAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;oBACtD,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;iBACpB;aACF;SACF;IACH,CAAC;IACH,aAAC;AAAD,CAAC;AAjBY,wBAAM;;;;;;;;;;;;;;;;;;ACLnB,+EAA8B;AAC9B,qEAAyB;AACzB,qFAAiC;AAEjC,yFAA0C;AAC1C,kGAAgD;AAChD,0EAAgC;AAChC,IAAI,yBAAW,EAAE,CAAC;AAClB,IAAI,+BAAc,EAAE,CAAC;AACrB,IAAI,eAAM,EAAE,CAAC;;;;;;;;;;;;;;;;;;ACTb,6FAAkD;AAElD,sGAA8C;AAAtC,oCAAK;AACb,kEAAiD;AAAzC,gCAAM;AAAE,kDAAe;AAC/B,iFAAuC;AAA/B,6BAAK;AACb,mFAAiC;AACjC,mFAAiC;AACjC,uEAA2B;AAC3B,uDAAsB;AACtB,sGAA8C;AAC9C,iFAAuC;AACvC,mGAAmD;AACnD,kEAAgC;AAChC,4DAA4B;AAC5B,qFAA2C;AAC3C,qFAA0C;AAC1C,8EAAwC;AAExC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;IAClB,MAAM,CAAC,OAAO,CAAC,GAAG,oBAAK,CAAC;IACxB,MAAM,CAAC,OAAO,CAAC,GAAG,aAAK,CAAC;IACxB,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,eAAM,EAAE,CAAC;IAChC,MAAM,CAAC,MAAM,CAAC,GAAG,WAAI,CAAC;IACtB,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IAC9B,MAAM,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC;IAC1C,MAAM,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC;IAC5C,MAAM,CAAC,aAAa,CAAC,GAAG,yBAAW,CAAC;IACpC,MAAM,CAAC,iBAAiB,CAAC,GAAG,iCAAe,CAAC;IAC5C,MAAM,CAAC,YAAY,CAAC,GAAG,uBAAU,CAAC;CACrC;;;;;;;;;;;;;AC7BY;;AACb,yDAA4B;AAE5B,sGAAgE;AAGhE;IAAA;IAknBA,CAAC;IA9mBU,iBAAY,GAAnB,UAAoB,GAAW,EAAE,GAAW;QACxC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAC7D,CAAC;IAEM,gBAAW,GAAlB,UAAmB,KAAU;QACzB,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,4BAA4B,CAAC;QACxD,IAAI,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QAEvD,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;YACpB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;gBAC7B,SAAS;aACZ;YACD,IAAI,IAAI,KAAK,KAAK,EAAE;gBAChB,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;aAEzC;SACJ;QACD,OAA2B,KAAK,CAAC;IACrC,CAAC;IAEM,iBAAY,GAAnB,UAAoB,KAAa;QAC7B,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACzE,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,UAAK,GAAZ,UAAa,GAAW;QACpB,IAAI,CAAC,EACD,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QACjQ,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YACjC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;gBACjB,OAAO,IAAI,CAAC;aACf;SACJ;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IACM,eAAU,GAAjB,UAAkB,IAAS;QACvB,OAAoB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IACM,WAAM,GAAb,UAAc,IAAS;QACnB,IAAI,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACpC,IAAI,QAAQ,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE;YAClE,IAAI,IAAI,CAAC,KAAK,EAAE;gBACZ,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;aACtB;iBAAM;gBACH,KAAK,GAAG,4BAA4B,CAAC;aACxC;YACD,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,IAAI,KAAK,EAAE;gBAC7B,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAChD,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,8BAA8B,CAAC,CAAC;gBACjE,IAAI,CAAC,cAAc,CAAC,8BAA8B,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;aACzE;iBAAM;gBACH,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;aACpD;SACJ;aAAM;YACH,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC3C;QACD,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QAC7B,KAAK,GAAG,IAAI,IAAI,EAAE;YACd,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;gBAC3B,SAAS;aACZ;YACD,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;gBACpB,SAAS;aACZ;YACD,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,aAAa,EAAE;gBAC3D,SAAS;aACZ;YACD,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;gBACrB,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;gBACjC,SAAS;aACZ;YACD,IAAI,CAAC,KAAK,QAAQ,EAAE;gBAChB,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;gBAClH,SAAS;aACZ;YACD,IAAI,CAAC,KAAK,OAAO,EAAE;gBACf,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;oBACZ,SAAS;iBACZ;gBACD,IAAI,GAAG,KAAK,OAAO,EAAE;oBACjB,IAAI,GAAG,KAAK,MAAM,EAAE;wBAChB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;qBACxD;yBAAM;wBACH,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;qBAC9B;iBACJ;qBAAM;oBACH,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;iBACzB;gBACD,SAAS;aACZ;YACD,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACvB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3C,SAAS;aACZ;YACD,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;aAC/B;iBAAM;gBACH,IAAI,CAAC,KAAK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,QAAQ,EAAE;oBAClD,KAAK,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE;wBACrB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;4BAClC,SAAS;yBACZ;wBACD,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;4BAClB,IAAI,WAAW,KAAK,KAAK,EAAE;gCACvB,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;gCACxC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;6BAC5H;iCAAM;gCACH,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;6BACxC;yBACJ;qBACJ;iBACJ;qBAAM;oBACH,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;iBACrC;aACJ;SACJ;QACD,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SAClC;QACD,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;SACvC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,YAAO,GAAd,UAAe,IAAS,EAAE,KAAsB,EAAE,MAAuB;QACrE,IAAI,KAAa,CAAC;QAClB,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAEM,qBAAgB,GAAvB,UAAwB,IAAS,EAAE,KAAsB,EAAE,MAAuB;QAC9E,IAAI,KAAa,CAAC;QAClB,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1C,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;IAEM,iBAAY,GAAnB,UAAoB,IAAS,EAAE,KAAsB,EAAE,MAAuB;QAC1E,IAAI,KAAa,CAAC;QAClB,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAEM,WAAM,GAAb,UAAc,IAAS,EAAE,CAAS,EAAE,CAAS;QACzC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;YAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;SAC7B;aAAM;YACH,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;SACd;IACL,CAAC;IAEM,aAAQ,GAAf,UAAgB,KAAsB;QAClC,OAAO,QAAQ,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACzD,CAAC;IAEM,SAAI,GAAX;QACI,OAAO,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAClE,CAAC;IAEM,WAAM,GAAb;QACI,OAAO,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAClE,CAAC;IAEM,cAAS,GAAhB;QACI,OAAO,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACrE,CAAC;IAEM,aAAQ,GAAf;QACI,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/E,CAAC;IAEM,YAAO,GAAd;QACI,OAAO,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACnE,CAAC;IAEM,aAAQ,GAAf;QACI,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3B,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC;IAC3F,CAAC;IAEM,cAAS,GAAhB,UAAiB,KAAkB;QAC/B,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IAC5E,CAAC;IAEM,cAAS,GAAhB,UAAiB,KAAkB;QAC/B,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IAC5E,CAAC;IAEM,cAAS,GAAhB,UAAiB,GAAW;QACxB,OAAO,QAAQ,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACxD,CAAC;IAEM,aAAQ,GAAf,UAAgB,SAAiB;QAC7B,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC;QAC1E,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC9B,GAAG,GAAG,IAAI,SAAG,CAAC,SAAS,CAAC,CAAC;QACzB,GAAG,GAAG,IAAI,SAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC;QACjC,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1C,EAAE,CAAC,SAAS,GAAG,SAAS,CAAC;QACzB,OAAO,GAAG,IAAI,SAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC;QACrC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC;QAC9D,KAAK,CAAC,IAAI,OAAO,EAAE;YACf,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;gBAC5B,SAAS;aACZ;YACD,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,QAAQ,EAAE;gBACjC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;oBACtG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC1B;aACJ;iBAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE;gBAC9B,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;aAC1B;SACJ;QACD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC9B,OAAO,GAAG,CAAC;IACf,CAAC;IAEM,WAAM,GAAb,UAAc,IAAkB,EAAE,IAAW;QACzC,IAAI,KAAK,CAAC;QACV,IAAI,IAAgB,CAAC;QACrB,IAAI,QAAiB,CAAC;QACtB,IAAI,CAAC,IAAI,EAAE;YACP,OAAO,SAAS,CAAC;SACpB;QACD,IAAI,IAAI,EAAE;YACN,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YAC1B,QAAQ,GAAG,KAAK,CAAC;SACpB;QAED,IAAI,CAAC,KAAK,EAAE;YACR,QAAQ,GAAG,IAAI,CAAC;YAChB,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAC9E,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SACpC;QACD,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,EAAE;YACzB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;gBAC1B,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC9D,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;aACrC;SACJ;aAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YACjC,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;SACxC;QACD,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACpC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAExB,IAAI,QAAQ,EAAE;YACV,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SACpC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,aAAQ,GAAf,UAAgB,KAAa,EAAE,YAAqB;QAChD,IAAI,KAAK,EAAE;YACP,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE;gBAClC,OAAO,SAAS,CAAC;aACpB;YACD,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE;gBAC/B,OAAO,SAAS,CAAC;aACpB;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBAC1B,OAAO,KAAK,CAAC;aAChB;SACJ;QACD,IAAI,YAAY,EAAE;YACd,OAAO,YAAY,CAAC;SACvB;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAEa,gBAAW,GAAzB,UAA0B,GAAW;QACjC,OAAO,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC;IAEa,YAAO,GAArB,UAAsB,OAAuB;QACzC,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;YAClB,GAAG,EAAE,KAAK;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE;SACrF,CAAC,CAAC;QACH,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC7B,IAAI,KAAK,EAAE;YACP,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SAC1B;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5D,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAEa,WAAM,GAApB,UAAqB,GAAkB;QACnC,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;IAEa,gBAAW,GAAzB,UAA0B,MAAe,EAAE,OAAgB,EAAE,IAAY,EAAE,EAAU,EAAE,IAAmB;QACtG,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE;YACpC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;SAClC;QACD,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE;YACpC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;IACL,CAAC;IAYa,SAAI,GAAlB,UAAmB,GAAkB,EAAE,GAAkB,EAAE,IAAa,EAAE,OAAgB;QACtF,IAAI,GAAG,EAAE;YACL,IAAI,CAAC,UAAC;YACN,KAAK,CAAC,IAAI,GAAG,EAAE;gBACX,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE;oBAC1D,SAAS;iBACZ;gBACD,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;oBACrB,IAAI,IAAI,EAAE;wBACN,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;qBACnB;oBACD,SAAS;iBACZ;gBACD,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;oBAC9B,IAAI,OAAO,EAAE;wBACT,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;wBAChB,SAAS;qBACZ;oBACD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;wBACT,IAAI,GAAG,CAAC,CAAC,CAAC,YAAY,KAAK,EAAE;4BACzB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;yBACf;6BAAM;4BACH,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;yBACf;qBACJ;oBACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;iBAC1C;qBAAM;oBACH,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE;wBACf,SAAS;qBACZ;oBACD,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;iBACnB;aACJ;SACJ;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAEa,iBAAY,GAA1B,UAA2B,IAAY;QACnC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAEa,UAAK,GAAnB,UAAoB,GAAwB,EAAE,GAAwB,EAAE,IAAa,EAAE,GAAa;QAChG,IAAI,IAAI,CAAC;QACT,IAAI,CAAC,GAAG,EAAE;YACN,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;YAC5B,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC/D,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;SAC3B;QACD,IAAI,GAAG,EAAE;YACL,IAAI,CAAC,UAAC;YACN,KAAK,CAAC,IAAI,GAAG,EAAE;gBACX,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE;oBAC1D,SAAS;iBACZ;gBACD,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;oBACrB,IAAI,IAAI,EAAE;wBACN,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;qBACnB;oBACD,SAAS;iBACZ;gBACD,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;oBAC9B,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;wBACtB,IAAI,GAAG,CAAC,CAAC,CAAC,YAAY,KAAK,EAAE;4BACzB,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE;gCAClB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;oCAC3B,SAAS;iCACZ;gCACD,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;gCAClC,IAAI,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gCACpC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gCACvB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;6BAC3C;yBACJ;6BAAM;4BACH,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;4BAC/B,IAAI,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;4BACpC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;4BACvB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;yBACxC;qBACJ;yBAAM;wBACH,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;qBACtD;iBACJ;qBAAM;oBACH,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE;wBACf,SAAS;qBACZ;oBACD,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC/B;aACJ;SACJ;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAEM,UAAK,GAAZ,UAAa,GAAU,EAAE,GAAU,EAAE,CAAS,EAAE,CAAS;QACrD,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC;IAEa,gBAAW,GAAzB,UAA0B,CAAS,EAAE,CAAS,EAAE,MAAsB,EAAE,SAAgB;QACpF,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC;QAC5E,IAAI,GAAG,GAAU,MAAM,CAAC,MAAM,EAAE,CAAC;QACjC,IAAI,IAAI,GAAU,MAAM,CAAC,OAAO,EAAE,CAAC;QACnC,IAAI,GAAG,CAAC,oBAAK,CAAC,IAAI,EAAE,oBAAK,CAAC,KAAK,CAAC,CAAC;QACjC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;YACvB,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;gBAC7C,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBACtC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE;oBAExB,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,oBAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;iBAC1D;gBACD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACV,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACnH;SACJ;QACD,IAAI,GAAG,CAAC,oBAAK,CAAC,EAAE,EAAE,oBAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;YACvB,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;gBAC7C,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBACtC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE;oBAExB,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,oBAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;iBAC3D;gBACD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACV,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACnH;SACJ;QACD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YAC9B,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE;gBACnB,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAClB,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aACnB;SACJ;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAEa,kBAAa,GAA3B,UAA4B,CAAS,EAAE,CAAS,EAAE,CAAiB,EAAE,CAAS,EAAE,IAAa;QACzF,IAAI,GAAG,GAAU,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5B,IAAI,IAAI,GAAU,CAAC,CAAC,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC,EAAE,CAAC,GAAW,GAAG,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,oBAAK,CAAC,IAAI,EAAE;YAClB,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;SACf;QACD,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAChB,IAAI,IAAI,EAAE;YACN,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE;gBACX,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;aACb;iBAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE;gBAC7B,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;aACtB;SACJ;QACD,OAAO,IAAI,oBAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,CAAC;IAEa,kBAAa,GAA3B,UAA4B,CAAS,EAAE,CAAS,EAAE,CAAiB,EAAE,CAAS,EAAE,IAAa;QACzF,IAAI,GAAG,GAAU,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5B,IAAI,IAAI,GAAU,CAAC,CAAC,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAS,EAAE,CAAC,GAAW,GAAG,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,oBAAK,CAAC,KAAK,EAAE;YACnB,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;SACf;QACD,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,IAAI,IAAI,EAAE;YACN,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE;gBACX,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;aACb;iBAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE;gBAC7B,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;aACtB;SACJ;QACD,OAAO,IAAI,oBAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,CAAC;IAEa,aAAQ,GAAtB,UAAuB,OAAgB,EAAE,GAAW;QAChD,IAAI,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC9C,OAAO,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IACa,aAAQ,GAAtB,UAAuB,OAAgB,EAAE,GAAW;QAChD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;YAC9B,IAAI,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC9C,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;SAChE;IACL,CAAC;IACa,gBAAW,GAAzB,UAA0B,OAAgB,EAAE,GAAW;QACnD,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;YAC7B,IAAI,GAAG,GAAG,IAAI,MAAM,CAAC,SAAS,GAAG,GAAG,GAAG,SAAS,CAAC,CAAC;YAClD,IAAI,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC9C,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;SAC7E;IACL,CAAC;IAEa,eAAU,GAAxB,UAAyB,CAAS,EAAE,OAAe;QAC/C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE;YAC9B,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACnC;QAED,OAAO,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAEa,aAAQ,GAAtB,UAAuB,CAAS,EAAE,OAAe;QAC7C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE;YAC5B,IAAI,SAAS,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACvC,OAAO,SAAS,KAAK,CAAC,CAAC,IAAI,SAAS,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;SAC3D;QAED,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAEa,aAAQ,GAAtB,UAAuB,CAAS,EAAE,OAAe;QAC7C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE;YAC5B,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC7B,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC;SACnB;QACD,IAAI,CAAC,KAAK,IAAI,EAAE;YACZ,OAAO,KAAK,CAAC;SAChB;QAED,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAEa,oBAAe,GAA7B,UAA8B,MAAe,EAAE,KAAc;QAEzD,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE;YACnB,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;YACb,IAAI,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC;YAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtC,IAAI,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC5B,IAAI,SAAS,KAAK,KAAK,EAAE;oBACrB,OAAO,IAAI,CAAC;iBACf;aACJ;YAED,OAAO,KAAK,CAAC;SAChB;QAED,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAEa,sBAAiB,GAA/B,UAAgC,IAAY,EAAE,MAAY;QACtD,IAAI,GAAgB,CAAC;QAErB,IAAI,OAAO,MAAM,CAAC,aAAa,CAAC,KAAK,UAAU,EAAE;YAC7C,MAAM,GAAG,MAAM,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;YAC5E,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YAC1C,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5E,OAAO,GAAG,CAAC;SACd;QAED,GAAG,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;QAE5B,OAAO,GAAG,CAAC;IACf,CAAC;IAEa,uBAAkB,GAAhC,UAAiC,KAAU;QACvC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;YAChC,IAAI,KAAK,EAAE;gBACP,IAAI,KAAK,CAAC,UAAU,EAAE;oBAClB,OAAO,KAAK,CAAC;iBAChB;gBACD,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACjC,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC/C,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;aACzC;iBAAM;gBACH,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;aACtC;YACD,OAAO,IAAI,CAAC;SACf;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAEa,+BAA0B,GAAxC;QACI,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;YAChC,OAAO,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;SAC1C;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAEa,4BAAuB,GAArC;QACI,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;YACf,OAAO,KAAK,CAAC;SAChB;QACD,OAAO,YAAY,KAAK,SAAS,CAAC;IACtC,CAAC;IACL,WAAC;AAAD,CAAC;AAlnBY,oBAAI","file":"diagram.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./main.ts\");\n","export abstract class Adapter {\r\n    public id: string = null;\r\n\r\n    abstract update(evt: Object): boolean;\r\n}\r\n","'use strict';\r\n\r\nimport * as controls from './elements/nodes';\r\nimport * as adapters from './adapters';\r\nimport Data from './Data';\r\nimport {Control} from './Control';\r\nimport {Adapter} from './Adapter';\r\nimport {Graph} from './elements';\r\nimport {Util} from './util';\r\nimport {Point} from './elements';\r\n\r\nexport class Bridge extends Control {\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public static version: string = '0.42.01.1601007-1739';\r\n    private controlFactory: Object = {};\r\n    private adapterFactory: Object = {};\r\n    private controls: Object = {};\r\n    private adapters: Object = {};\r\n    private items: Object = {};\r\n    private controlNo: number = 1;\r\n    private online: boolean = true;\r\n    private language: string = navigator.language.toUpperCase();\r\n    private toolBar: HTMLElement;\r\n\r\n    constructor(viewRoot?: HTMLElement) {\r\n        super();\r\n        let i;\r\n\r\n        if (viewRoot) {\r\n            this.$view = viewRoot;\r\n        }\r\n\r\n        let keys: string[] = Object.keys(adapters);\r\n        for (i = 0; i < keys.length; i++) {\r\n            let child = adapters[keys[i]];\r\n            if (child && child.id) {\r\n                this.adapterFactory[child.id.toLowerCase()] = child;\r\n            }\r\n        }\r\n\r\n        keys = Object.keys(controls);\r\n        for (i = 0; i < keys.length; i++) {\r\n            this.addControl(controls[keys[i]]);\r\n        }\r\n        this.addControl(Graph);\r\n\r\n        let that = this;\r\n        window.addEventListener('load', function () {\r\n            let updateOnlineStatus = function updateOnlineStatus() {\r\n                that.setOnline(navigator.onLine);\r\n            };\r\n            window.addEventListener('online', updateOnlineStatus);\r\n            window.addEventListener('offline', updateOnlineStatus);\r\n        });\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public setOnline(value: boolean) {\r\n        this.online = value;\r\n        if (this.toolBar.children[0]) {\r\n            this.toolBar.children[0].className = value ? 'online' : 'offline';\r\n        }\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addToolbar(): boolean {\r\n        if (this.toolBar) {\r\n            return false;\r\n        }\r\n        this.toolBar = document.createElement('div');\r\n        this.toolBar.className = 'onlineStatus';\r\n        let child = document.createElement('div');\r\n        child.className = 'online';\r\n        this.toolBar.appendChild(child);\r\n        child = document.createElement('div');\r\n        child.className = 'lang';\r\n        child.innerHTML = this.language;\r\n        this.toolBar.appendChild(child);\r\n\r\n        let body: HTMLElement = document.getElementsByTagName('body')[0];\r\n        body.insertBefore(this.toolBar, body.firstChild);\r\n        // Refresh Online Status\r\n        this.setOnline(this.online);\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addListener = function (listener: any) {\r\n        this.listener.push(listener);\r\n    };\r\n\r\n    public addControl(control: any) {\r\n        if (control && control.name) {\r\n            this.controlFactory[control.name.toLowerCase()] = control;\r\n        }\r\n    }\r\n\r\n    public getId(): string {\r\n        return 'control' + (this.controlNo++);\r\n    }\r\n\r\n    public adapterUpdate(message: string) {\r\n        let keys: string[] = Object.keys(this.adapters);\r\n        if (keys.length > 0) {\r\n            let i;\r\n            for (i = 0; i < keys.length; i++) {\r\n                let adapterList = this.adapters[keys[i]];\r\n                if (adapterList instanceof Adapter) {\r\n                    adapterList.update(message);\r\n                } else {\r\n                    for (let adapter of adapterList) {\r\n                        adapter.update(message);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        let config = {}, className: string, id: string;\r\n        if (typeof(json) === 'string') {\r\n            // Only a String\r\n            config['id'] = '' + json;\r\n            let item = document.getElementById(config['id']);\r\n            let className: string;\r\n            if (item) {\r\n                className = item.getAttribute('class');\r\n                if (!className) {\r\n                    className = item.getAttribute('classname') || '';\r\n                }\r\n                // Found Element and now config Data element\r\n                if (item.getAttribute('property')) {\r\n                    if (this.hasItem(item.getAttribute('property'))) {\r\n                        let data = this.getItem(item.getAttribute('property'));\r\n                        for (let key in data.prop) {\r\n                            if (item.getAttribute(key)) {\r\n                                data.setValue(key, item.getAttribute(key));\r\n                            }\r\n                        }\r\n                        if (item.getAttribute('property')) {\r\n                            // TODO: FIXME!!!\r\n                            // data.property = item.getAttribute(\"property\");\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                className = '' + json;\r\n            }\r\n            className = className.toLowerCase();\r\n            config['className'] = className;\r\n        } else {\r\n            config = <JSON>json;\r\n        }\r\n        // Config validate\r\n        if (!config['id']) {\r\n            config['id'] = this.getId();\r\n        }\r\n        // Backup for Old Graph\r\n        if (!config['className'] && (config['type'] === 'clazzdiagram' || config['type'] === 'objectdiagram')) {\r\n            config['className'] = 'graph';\r\n        }\r\n\r\n        className = config['className'] || config['class'];\r\n        className = className.toLocaleLowerCase();\r\n        id = config['id'];\r\n\r\n        // Check For Control or Data\r\n        if ((config['prop'] || config['upd'] || config['rem']) && this.controls[id] === null) {\r\n            // Its Data\r\n            let newData = !this.hasItem(config['id']);\r\n            let item: Data = this.getItem(config['id']);\r\n            // TODO: FIXME!!!\r\n            // if (id && className && !item.property) {\r\n            //      item.property = className;\r\n            // }\r\n            if (newData) {\r\n                for (let i in this.controls) {\r\n                    if (this.controls.hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    this.controls[i].addItem(this, item);\r\n                }\r\n            }\r\n            // Add all Values to item\r\n            item.addProperties(config);\r\n            // Bridge.addProperties(config['prop'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return item;\r\n        }\r\n\r\n        let control;\r\n        if (this.controls[id]) {\r\n            control = this.controls[id];\r\n            control.initControl(json);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return control;\r\n        }\r\n\r\n        if (typeof(this.controlFactory[className]) === 'object' || typeof(this.controlFactory[className]) === 'function') {\r\n            let obj = this.controlFactory[className];\r\n            control = new obj(json);\r\n            Util.initControl(owner || this, control, config['property'], id, json);\r\n\r\n            if (control.id) {\r\n                this.controls[control.id] = control;\r\n            } else {\r\n                this.controls[id] = control;\r\n            }\r\n\r\n            // create DataObject and register this control as listener to it\r\n            // let obj = {id:id};\r\n            // let data: Data = this.load(obj);\r\n            // data.addListener(this);\r\n\r\n            // Try to Show\r\n            if (typeof control.getSVG === 'function' && typeof control.getSize === 'function') {\r\n                let size: Point = control.getSize();\r\n\r\n                let svg = Util.createShape({\r\n                    tag: 'svg',\r\n                    id: 'root',\r\n                    width: size.x,\r\n                    height: size.y\r\n                });\r\n\r\n                let view = control.getSVG();\r\n                svg.appendChild(view);\r\n                document.getElementsByTagName('body')[0].appendChild(svg);\r\n            }\r\n            return control;\r\n        }\r\n        return null;\r\n        // bridge.load('{class:table, columns:[{id:'firstname'}, {id:'lastname'}]}');\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n\r\n        if (this.items[id] !== undefined) {\r\n            return true;\r\n        }\r\n        id = id.split('.')[0];\r\n        return (this.items[id] !== undefined);\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return this.items;\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        let item = this.items[id];\r\n        if (!item) {\r\n            id = id.split('.')[0];\r\n            item = this.items[id];\r\n            if (!item) {\r\n                item = new Data();\r\n                item.id = id;\r\n                this.items[id] = item;\r\n            }\r\n        }\r\n        return item;\r\n    }\r\n\r\n    /**\r\n     * Method for executing user input -> Event\r\n     * @param object\r\n     * @param attribute\r\n     * @param oldValue\r\n     * @param newValue\r\n     * @returns {boolean}\r\n     */\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        alert('Bridge.setValue: oldVal:' + oldValue + ', newVal: ' +  + newValue + ', attribute: ' + attribute + ', object: ' + JSON.stringify(object));\r\n        let obj: Data;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n\r\n        } else if (object instanceof Data) {\r\n            obj = object;\r\n            id = object.id;\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = <Data>object;\r\n            id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return false;\r\n        }\r\n        if (obj) {\r\n            // Execute Update to Data\r\n            obj.setValue(attribute, newValue);\r\n            // Could be done here, but currently is done at this.execueChange..:\r\n            // obj[attribute] = value;\r\n        }\r\n\r\n        /*let tmp = {'id': id};\r\n        if (typeof(newValue) !== 'undefined' && newValue !== null) {\r\n            let upd = {};\r\n            upd[attribute] = newValue;\r\n            tmp['upd'] = upd;\r\n        }\r\n        if (typeof(oldValue) !== 'undefined' && oldValue !== null) {\r\n            let rem = {};\r\n            rem[attribute] = oldValue;\r\n            tmp['rem'] = rem;\r\n        }*/\r\n        // this.load(tmp);\r\n        return true;\r\n    }\r\n\r\n    public getValue(object: Object, attribute: string): any {\r\n        let obj: Object;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = object;\r\n            // id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return;\r\n        }\r\n        if (obj) {\r\n            if (obj.hasOwnProperty(attribute)) {\r\n                return obj[attribute];\r\n            } else if (obj instanceof Data) {\r\n                return (<Data>obj).getValue(attribute);\r\n            } else {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    public getNumber(object: Object, attribute: string, defaultValue: number = 0): number {\r\n        let res = <number>this.getValue(object, attribute);\r\n        if (typeof res === 'number') {\r\n            return res;\r\n        } else if (typeof res === 'string') {\r\n            // check whether res is a number\r\n            let value = Number(res);\r\n            if (value || value === 0) {\r\n                return value;\r\n            }\r\n        }\r\n        return defaultValue;\r\n    }\r\n\r\n    getControl(controlId: string) {\r\n        return this.controls[controlId];\r\n    }\r\n\r\n    public registerListener(eventType: string, control: Control, callBackfunction: string): Control {\r\n        if (typeof control === 'string') {\r\n            control = this.getControl(<string>control);\r\n        }\r\n        if (!control) {\r\n            return null;\r\n        }\r\n        if (eventType) {\r\n            eventType = eventType.toLowerCase();\r\n        }\r\n        control.registerListenerOnHTMLObject(eventType);\r\n        if (callBackfunction) {\r\n            let adapter: DelegateAdapter = new DelegateAdapter();\r\n            adapter.callBackfunction = callBackfunction;\r\n            adapter.id = control.getId();\r\n            this.addAdapter(adapter, eventType);\r\n        }\r\n        return control;\r\n    }\r\n\r\n    public addAdapter(adapter: Adapter | string, eventType: string): Adapter {\r\n        if (!eventType) {\r\n            eventType = '';\r\n        }\r\n        let result: Adapter;\r\n        if (adapter instanceof String) {\r\n            let obj = this.adapterFactory[adapter.toLowerCase()];\r\n            result = new obj();\r\n        } else {\r\n            result = <Adapter>adapter;\r\n        }\r\n        let handlers = this.adapters[eventType];\r\n\r\n        if (handlers === null || handlers === undefined) {\r\n            handlers = [];\r\n            this.adapters[eventType] = handlers;\r\n        }\r\n        handlers.push(result);\r\n        return result;\r\n    }\r\n\r\n    public fireEvent(evt: Event): void {\r\n        let handlers = this.adapters[''];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n        handlers = this.adapters[evt['eventType']];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport class DelegateAdapter extends Adapter {\r\n    adapter: Adapter;\r\n    callBackfunction: string;\r\n\r\n    update(evt: Event): boolean {\r\n        if (this.adapter) {\r\n            this.adapter.update(evt);\r\n            return true;\r\n        } else if (this.callBackfunction) {\r\n            return this.executeFunction(this.callBackfunction, evt);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public setAdapter(adapter: Adapter): boolean {\r\n        this.adapter = adapter;\r\n        return true;\r\n    }\r\n\r\n    private executeFunction(strValue: string, evt: Event): boolean {\r\n        let scope = window;\r\n        let scopeSplit = strValue.split('.');\r\n        for (let i = 0; i < scopeSplit.length - 1; i++) {\r\n            scope = scope[scopeSplit[i]];\r\n            if (scope === undefined) {\r\n                return false;\r\n            }\r\n        }\r\n        let fn: any = scope[scopeSplit[scopeSplit.length - 1]];\r\n        if (typeof fn === 'function') {\r\n            fn.call(scope);\r\n            return true;\r\n        } else {\r\n            window['callBack1'].update(evt);\r\n\r\n        }\r\n        return false;\r\n    }\r\n}\r\n","'use strict';\r\nimport Data from './Data';\r\n\r\nexport default class BridgeElement {\r\n    private static elementSet: BridgeElement[] = [];\r\n    public model: Data;\r\n    public id: string;\r\n    public gui: HTMLElement;\r\n\r\n    constructor(model: Data) {\r\n        this.model = model;\r\n        this.id = model.id;\r\n        BridgeElement.elementSet.push(this);\r\n    }\r\n}\r\n","import {Util} from './util';\r\n\r\n// \t\t\t\t######################################################### CSS #########################################################\r\nexport class CSS {\r\n    public css: Object;\r\n    private name: string;\r\n\r\n    constructor(name: string, item?: any) {\r\n        let i, value, border: string, prop, el;\r\n        this.name = name;\r\n        this.css = {};\r\n        if (!item) {\r\n            return;\r\n        }\r\n\r\n        el = window.getComputedStyle(item, null);\r\n        border = el.getPropertyValue('border');\r\n        for (i in el) {\r\n            prop = i;\r\n            value = el.getPropertyValue(prop);\r\n            if (value && value !== '') {\r\n                // optimize CSS\r\n                if (border) {\r\n                    if (prop === 'border-bottom' || prop === 'border-right' || prop === 'border-top' || prop === 'border-left') {\r\n                        if (value !== border) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-color' || prop === 'border-bottom-color' || prop === 'border-right-color' || prop === 'border-top-color' || prop === 'border-left-color') {\r\n                        if (border.substring(border.length - value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-width') {\r\n                        if (border.substring(0, value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else {\r\n                        this.css[prop] = value;\r\n                    }\r\n                } else {\r\n                    this.css[prop] = value;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public static getStdDef() {\r\n        let child, def = Util.create({tag: 'defs'});\r\n\r\n        child = Util.create({tag: 'filter', id: 'drop-shadow'});\r\n        child.appendChild(Util.create({tag: 'feGaussianBlur', 'in': 'SourceAlpha', result: 'blur-out', stdDeviation: 2}));\r\n        child.appendChild(Util.create({tag: 'feOffset', 'in': 'blur-out', dx: 2, dy: 2}));\r\n        child.appendChild(Util.create({tag: 'feBlend', 'in': 'SourceGraphic', mode: 'normal'}));\r\n        def.appendChild(child);\r\n        child = Util.create({tag: 'linearGradient', id: 'reflect', x1: 0, x2: 0, y1: '50%', y2: 0, spreadMethod: 'reflect'});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#aaa', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#eee', offset: '100%'}));\r\n        def.appendChild(child);\r\n\r\n        child = Util.create({tag: 'linearGradient', id: 'classelement', x1: 0, x2: '100%', y1: '100%', y2: 0});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#fff', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#d3d3d3', offset: 1}));\r\n        def.appendChild(child);\r\n\r\n        return def;\r\n    }\r\n\r\n    public static getSubstring(str: string, search: string, startChar: string, endChar: string, splitter: string): any {\r\n        let pos, end, count = 0, array = [];\r\n        pos = str.indexOf(search);\r\n        if (pos > 0) {\r\n            end = str.indexOf(startChar, pos);\r\n            pos = end + 1;\r\n            if (end > 0) {\r\n                while (end < str.length) {\r\n                    if (str.charAt(end) === startChar) {\r\n                        count += 1;\r\n                    }\r\n                    if (str.charAt(end) === endChar) {\r\n                        count -= 1;\r\n                        if (count === 0) {\r\n                            if (splitter && pos !== end) {\r\n                                array.push(str.substring(pos, end).trim());\r\n                            }\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (str.charAt(end) === splitter && count === 1) {\r\n                        array.push(str.substring(pos, end).trim());\r\n                        pos = end + 1;\r\n                    }\r\n\r\n                    end += 1;\r\n                }\r\n                if (splitter) {\r\n                    return array;\r\n                }\r\n                return str.substring(pos, end);\r\n            }\r\n            return str.substring(pos);\r\n        }\r\n        return '';\r\n    }\r\n\r\n    public static addStyle(board: SVGElement, styleName: any) {\r\n        let defs, style: any, css;\r\n        if (styleName.baseVal || styleName.baseVal === '') {\r\n            styleName = styleName.baseVal;\r\n        }\r\n        if (!styleName) {\r\n            return;\r\n        }\r\n        defs = CSS.getDefs(board);\r\n        if (defs.getElementsByTagName('style').length > 0) {\r\n            style = defs.getElementsByTagName('style')[0];\r\n        } else {\r\n            style = Util.create({tag: 'style'});\r\n            style.item = {};\r\n            defs.appendChild(style);\r\n        }\r\n        if (!style.item[styleName]) {\r\n            css = Util.getStyle(styleName);\r\n            style.item[styleName] = css;\r\n            style.innerHTML = style.innerHTML + '\\n.' + styleName + css.getSVGString(board);\r\n        }\r\n    }\r\n\r\n    public static addStyles(board: SVGElement, item: any) {\r\n        if (!item) {\r\n            return;\r\n        }\r\n        let items, i, className: any = item.className;\r\n\r\n        if (className) {\r\n            if (className.baseVal || className.baseVal === '') {\r\n                className = className.baseVal;\r\n            }\r\n        }\r\n        if (className) {\r\n            items = className.split(' ');\r\n            for (i = 0; i < items.length; i += 1) {\r\n                CSS.addStyle(board, items[i].trim());\r\n            }\r\n        }\r\n        for (i = 0; i < item.childNodes.length; i += 1) {\r\n            this.addStyles(board, item.childNodes[i]);\r\n        }\r\n    }\r\n\r\n    public static getDefs(board: SVGElement) {\r\n        let defs;\r\n        if (board.getElementsByTagName('defs').length < 1) {\r\n            defs = Util.create({tag: 'defs'});\r\n            board.insertBefore(defs, board.childNodes[0]);\r\n        } else {\r\n            defs = board.getElementsByTagName('defs')[0];\r\n        }\r\n        return defs;\r\n    }\r\n\r\n    public add(key: string, value: string) {\r\n        this.css[key] = value;\r\n    }\r\n\r\n    public get(key: string): any {\r\n        let i;\r\n        for (i in this.css) {\r\n            if (i === key) {\r\n                return this.css[key];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public getNumber(key: string) {\r\n        return parseInt((this.get(key) || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    public getSVGString(board: SVGElement) {\r\n        let str, pos, style, defs, value, filter, z;\r\n        str = '{';\r\n        for (style in this.css) {\r\n            if (!this.css.hasOwnProperty(style)) {\r\n                continue;\r\n            }\r\n            if (style === 'border') {\r\n                pos = this.css[style].indexOf(' ');\r\n                str = str + 'stroke-width: ' + this.css[style].substring(0, pos) + ';';\r\n                pos = this.css[style].indexOf(' ', pos + 1);\r\n                str = str + 'stroke:' + this.css[style].substring(pos) + ';';\r\n            } else if (style === 'background-color') {\r\n                str = str + 'fill: ' + this.css[style] + ';';\r\n            } else if (style === 'background') {\r\n                value = CSS.getSubstring(this.css[style], 'linear-gradient', '(', ')', ',');\r\n                if (value.length > 0) {\r\n                    defs = CSS.getDefs(board);\r\n                    if (value[0] === '45deg') {\r\n                        pos = 1;\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '100%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                    } else {\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '0%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                        pos = 0;\r\n                    }\r\n                    defs.appendChild(filter);\r\n                    while (pos < value.length) {\r\n                        value[pos] = value[pos].trim();\r\n                        z = value[pos].lastIndexOf(' ');\r\n                        filter.appendChild(Util.create({\r\n                            tag: 'stop',\r\n                            'offset': value[pos].substring(z + 1),\r\n                            style: {'stop-color': value[pos].substring(0, z)}\r\n                        }));\r\n                        pos += 1;\r\n                    }\r\n                    str = str + 'fill: url(#' + this.name + ');';\r\n                    continue;\r\n                }\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n                // box-shadow: inset 0 3px 4px #888;\r\n// \t\t\t\t<defs>\r\n// \t\t\t\t\t<filter id='drop-shadow'>\r\n// \t\t\t\t\t\t<feGaussianBlur in='SourceAlpha' result='blur-out' stdDeviation='2'></feGaussianBlur>\r\n// \t\t\t\t\t\t<feOffset in='blur-out' dx='2' dy='2'></feOffset>\r\n// \t\t\t\t\t\t<feBlend in='SourceGraphic' mode='normal'></feBlend>\r\n// \t\t\t\t\t</filter>\r\n// \t\t\t\t</defs>\r\n            } else {\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n            }\r\n        }\r\n        str = str + '}';\r\n        return str;\r\n    }\r\n}\r\n","import {Bridge} from './Bridge';\r\nimport Data from './Data';\r\nimport EventListener from './EventListener';\r\n\r\nexport abstract class Control {\r\n    public $owner: Control;\r\n    /**\r\n     *\r\n     */\r\n    public property: string;\r\n    public id: string;\r\n    public $view: Element;\r\n    public $viewData: Data = null;\r\n\r\n    protected $model: Data;\r\n    protected $viewListener: EventListenerOrEventListenerObject;\r\n\r\n    /**\r\n     * The properties, we want to listen to\r\n     */\r\n    // static defaultProperties: string[] = [];\r\n\r\n    // public getProperties(): string[] {\r\n    //     return this.properties;\r\n    // }\r\n\r\n    constructor() {\r\n        // e.g. this.properties.push(\"key\");\r\n        // this.properties.push(\"property\");\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data: Data = new Data();\r\n        if (oldData) {\r\n            oldData.removeListener(this);\r\n            const keys: string[] = oldData.getKeys();\r\n            for (let i = 0; i < keys.length; i++) {\r\n                let attr = keys[i];\r\n                if (this.$view) {\r\n                    if (this.$view[attr] === null) {\r\n                        continue;\r\n                    }\r\n                    data.setValue(attr, this.$view[attr]);\r\n                } else {\r\n                    data.setValue(attr, null);\r\n                }\r\n            }\r\n        }\r\n        data.addListener(this);\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     *  Set the new HTMLElement and attach listener to it.\r\n     *  Also remove Listeners from old one and return the old one, if present.\r\n     * @param element\r\n     * @returns The previous Element\r\n     */\r\n    public setView(element: Element): Element {\r\n        let oldElement: Element = null;\r\n        if (this.$view) {\r\n            oldElement = this.$view;\r\n            if (this.$viewListener) {\r\n                oldElement.removeEventListener('change', this.$viewListener);\r\n            }\r\n        }\r\n        this.$view = element;\r\n\r\n        if (this.$viewListener) {\r\n            element.addEventListener('change', this.$viewListener);\r\n        }\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n        return element;\r\n    }\r\n\r\n    public init(owner: Control, property ?: string, id ?: string): Control {\r\n        if (!this.$owner) {\r\n            this.$owner = owner;\r\n        }\r\n        if (!this.id) {\r\n            this.id = id;\r\n        }\r\n        if (!this.property) {\r\n            this.property = this.generateID(property, id);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public createEventListener(): EventListener {\r\n        return new EventListener();\r\n    }\r\n\r\n    public getRoot(): Control {\r\n        if (this.$owner) {\r\n            return this.$owner.getRoot();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return null;\r\n    }\r\n\r\n    public initControl(data: any): void {\r\n        if (this.$view === null || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (data.hasOwnProperty('prop')) {\r\n            for (let key in data.prop) {\r\n                let oldValue = this.$viewData.getValue(key);\r\n                if (this.$view) {\r\n                    this.updateElement(key, oldValue, data.prop[key]);\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        let hasRem = data.hasOwnProperty('rem');\r\n        let removed: any[] = [];\r\n        if (data.hasOwnProperty('upd')) {\r\n            for (let key in data.upd) {\r\n                let oldValue;\r\n                let newValue = data.upd[key];\r\n                let entity;\r\n                const temp = false;\r\n                if (temp) {\r\n//                if (newValue == this.getViewData().getValue(key)) {\r\n                    // new Value assertEquals old value, so we don't need to change anything..\r\n                    // delete data.rem[key];\r\n                    if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                        removed.push(data.rem[key]);\r\n                    }\r\n                    continue;\r\n                }\r\n                if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                    // if there's a rem, the oldValue from rem will be used and expected to be right..\r\n                    oldValue = data.rem[key];\r\n                    if (this.$model && this.$model.getValue(key) === oldValue) {\r\n                        entity = this.$model;\r\n//                    } else if (oldValue == this.getViewData().getValue(key)) {\r\n//                        $graphModel = this.getViewData();\r\n                    }\r\n                    delete data.rem[key];\r\n\r\n                    if (entity === null) {\r\n                        continue;\r\n                    }\r\n                }\r\n                if (entity) {\r\n                    if (!hasRem) {\r\n                        if (entity === this.$model) {\r\n                            oldValue = this.$model.getValue(key);\r\n                        } else {\r\n//                           oldValue = this.getViewData().getValue(key);\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (this.$model) {\r\n                        // try to get the oldValue directly from the $graphModel...\r\n                        oldValue = this.$model.getValue(key);\r\n                        entity = this.$model;\r\n                    }\r\n                    if (oldValue === null) {\r\n                        // if there was no data in the entity, we try to get oldValue from the $view\r\n//                        oldValue = this.getViewData().getValue(key);\r\n//                        entity = this.getViewData();\r\n                    }\r\n                }\r\n\r\n                //  || oldValue !== this.$viewData.getValue(key)\r\n                if (newValue === oldValue) {\r\n                    // no match, so update should be wrong...\r\n                    continue;\r\n                }\r\n                const viewDataOldValue = this.$viewData.getValue(key);\r\n                if (entity === this.$viewData) {\r\n\r\n                    // this.getViewData().setValue(key, newValue);\r\n                    if (this.$view) {\r\n                        this.updateElement(key, viewDataOldValue, newValue);\r\n                    }\r\n                } else {\r\n                    this.updateElement(key, viewDataOldValue, newValue);\r\n                }\r\n                this.getRoot().setValue(entity, key, newValue, oldValue);\r\n            }\r\n            // this.saveViewInData();\r\n        }\r\n        if (hasRem) {\r\n            for (let key in data.rem) {\r\n                if (removed.hasOwnProperty(key)) {\r\n                    continue;\r\n                }\r\n                let oldValue;\r\n//                    this.getViewData().getValue(key);\r\n//                if (oldValue != data.rem[key] || data.upd !== undefined && (data.upd[key] == oldValue || this.getViewData().getValue(key) == data.upd[key])) {\r\n                // if rem is invalid, or if the change is already applied, don't do anything..\r\n                //                  continue;\r\n                //            }\r\n                // delete this.$viewData.getValue(key);\r\n                // this.saveViewInData();\r\n                this.updateElement(key, null, null);\r\n                // this.$view.removeAttribute(key);\r\n                if (this.$model) {\r\n//                    this.getRoot().setValue(this.$graphModel, key, this.getViewData().getValue(key), oldValue);\r\n                }\r\n            }\r\n        }\r\n        if (this.property) {\r\n            // Add listener to Input field:\r\n            this.$view['onchange'] = ((ev: Event) => {\r\n                    this.controlChanged(ev);\r\n                }\r\n            );\r\n        }\r\n//        this.saveViewInData();\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        return null;\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n        return false;\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return new Object();\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue ?: Object): boolean {\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Is called when a object, that the Control is listening to, changes its value.\r\n     * @param entity\r\n     * @param property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        if (oldValue === newValue || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (oldValue === this.$viewData.getValue(property)) {\r\n            return;\r\n        }\r\n        // Set NewData to ViewData and Fire PC\r\n        this.$viewData.setValue(property, newValue);\r\n\r\n//\r\n//\r\n//         // if (entity == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.entity) {\r\n//                 alert(\"entity = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.entity.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.entity, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the entity is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"entity = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n// >>>>>>> addOldFunctions\r\n        if (this.$viewData) {\r\n            this.$viewData.setValue(property, newValue);\r\n        }\r\n        if (this.$model) {\r\n            this.$model.setValue(property, newValue);\r\n        }\r\n        this.updateElement(property, oldValue, newValue);\r\n    }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            // Do Nothing\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  Update GUI Element\r\n     * @param {string} property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        if (this.$view && this.$view.hasAttribute(property)) {\r\n            this.$view.setAttribute(property, newValue);\r\n        }\r\n    }\r\n\r\n//        if (oldValue == newValue) {\r\n//            return;\r\n//        }\r\n//        if (oldValue == this.$viewData.getValue(property)) {\r\n//            return;\r\n//        }\r\n//        // Set NewData to ViewData and Fire PC\r\n//        this.$viewData.setValue(property, newValue);\r\n//\r\n//\r\n//\r\n//         // if ($graphModel == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.$graphModel) {\r\n//                 alert(\"$graphModel = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.$graphModel.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.$graphModel, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the $graphModel is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"$graphModel = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n\r\n    public getId(): string {\r\n        return this.id;\r\n    }\r\n\r\n    public load(json: JSON | Object, owner ?: Control): any {\r\n        // Do Nothing\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.property || entity.hasProperty(this.property)) {\r\n                entity.addListener(this, this.property);\r\n                this.$model = entity;\r\n            }\r\n        }\r\n    }\r\n\r\n    public appendChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.appendChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].appendChild(child.$view);\r\n        }\r\n    }\r\n\r\n    public removeChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.removeChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].removeChild(child.$view);\r\n        }\r\n    }\r\n\r\n    /*\r\n     Property looks like: 't1.talk'\r\n     */\r\n    public setProperty(property: string): void {\r\n        if (!this.property) {\r\n            return;\r\n        }\r\n        let objId = property.split('.')[0];\r\n        let object = null;\r\n        if (this.$owner.hasItem(objId)) {\r\n            object = this.$owner.getItem(objId);\r\n        }\r\n\r\n        // remove listener on old object\r\n        if (this.$model) {\r\n            // this.$graphModel.removeListener(this);\r\n            this.$model.removeListener(this, this.lastProperty);\r\n        }\r\n        this.property = property;\r\n\r\n        // add listener to object..\r\n        if (object) {\r\n            object.addListener(this, this.lastProperty);\r\n            this.$model = object;\r\n            this.updateElement(this.lastProperty, this.$viewData.getValue(this.lastProperty), object.prop[this.lastProperty]);\r\n        }\r\n    }\r\n\r\n    public registerListenerOnHTMLObject(eventType: string): boolean {\r\n        return this.registerEventListener(eventType, <HTMLElement>this.$view);\r\n    }\r\n\r\n    // Normal Event HTML-Event\r\n    // Eventtype:string,\r\n    // id:string of Control\r\n    public fireEvent(evt: Event): void {\r\n        // Do Nothing\r\n    }\r\n\r\n    public isClosed(): boolean {\r\n        return this['closed'];\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        if (this.isClosed()) {\r\n            return this.$owner.getShowed();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * the id of the Data object, that contains the properties of the view\r\n     * @returns {string}\r\n     */\r\n    protected getControlDataID() {\r\n        return this.id + '_data';\r\n    }\r\n\r\n    protected generateID(property ?: string, id ?: string): string {\r\n        if (property) {\r\n            return property;\r\n        }\r\n        if (id) {\r\n            // will generate a data Object suitable for the Control..\r\n            // must be overridden, if the changeEvent shouldn't listen on value...\r\n//            return id + '.' + this.getStandardProperty();//+ \"_data\"\r\n            return id + '.' + '_data';\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected updateViewData() {\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n        const keys: string[] = this.$viewData.getKeys();\r\n        for (let i = 0; i < keys.length; i++) {\r\n            let attr = keys[i];\r\n            if (this.$view[attr] === null) {\r\n                continue;\r\n            }\r\n            this.$viewData.setValue(attr, this.$view[attr]);\r\n        }\r\n    }\r\n\r\n    protected registerEventListener(eventType: string, htmlElement: HTMLElement): boolean {\r\n        if (!htmlElement) {\r\n            return false;\r\n        }\r\n        if (htmlElement instanceof HTMLElement === false) {\r\n            return false;\r\n        }\r\n        let control = this;\r\n        let listener = (t: any) => {\r\n            t.eventType = eventType;\r\n            t.id = control.id;\r\n            control.$owner.fireEvent(t);\r\n        };\r\n        htmlElement.addEventListener(eventType, listener);\r\n        return true;\r\n    }\r\n\r\n    get lastProperty(): string {\r\n        if (!this.property) {\r\n            return '';\r\n        }\r\n        let arr: string[] = this.property.split('.');\r\n        return arr[arr.length - 1];\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\n\r\nexport default class Data {\r\n    public prop = {};\r\n    id: string;\r\n    // $listener: Control[] = [];\r\n    $listener: Object = {};\r\n\r\n    private static nullCheck(property: string): string {\r\n        if (property === undefined || property === null) {\r\n            property = '';\r\n        }\r\n        return property;\r\n    }\r\n    public getKeys(): string[] {\r\n        return Object.keys(this.prop);\r\n    }\r\n\r\n    public addProperties(values: Object) {\r\n        if (!values) {\r\n            return;\r\n        }\r\n        if (values['prop']) {\r\n            let prop = values['prop'];\r\n            for (let property in prop) {\r\n                if (prop.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (prop[property] !== null && '' !== prop[property]) {\r\n                    this.setValue(property, prop[property]);\r\n                }\r\n            }\r\n        } else {\r\n            let upd = values['upd'] || {};\r\n            let rem = values['rem'] || {};\r\n\r\n            for (let property in upd) {\r\n                if (upd.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (rem.hasOwnProperty(property) === false) {\r\n                    this.setValue(property, upd[property]);\r\n                } else {\r\n                    // if we have a rem, we wan't to check, if its a valid change (teh old value is the value in rem)\r\n                    if (this.getValue(property) === rem[property]) {\r\n                        this.setValue(property, upd[property]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getValue(attribute: string) {\r\n        return this.prop[attribute];\r\n    }\r\n\r\n    public setValue(attribute: string, newValue: any): void {\r\n        let oldValue = this.prop[attribute];\r\n        if (oldValue === newValue && newValue !== null) {\r\n            return;\r\n        }\r\n        this.prop[attribute] = newValue;\r\n        this.firePropertyChange(attribute, oldValue, newValue);\r\n    }\r\n\r\n    public addTo(attribute: string, newValue: any): boolean {\r\n        let add: boolean;\r\n        if (this.prop[attribute]) {\r\n            if (this.prop[attribute].contains(newValue) === false) {\r\n                add = true;\r\n            }\r\n        } else {\r\n            this.prop[attribute] = [];\r\n            add = true;\r\n        }\r\n        if (add) {\r\n            this.prop[attribute].push(newValue);\r\n            this.firePropertyChange(attribute, null, newValue);\r\n        }\r\n        return add;\r\n    }\r\n\r\n    public removeFrom(attribute: string, newValue: any): boolean {\r\n        if (!this.prop[attribute]) {\r\n            return true;\r\n        }\r\n        let pos: number = this.prop[attribute].indexOf(newValue);\r\n        if (pos < 0) {\r\n            return true;\r\n        }\r\n        this.prop[attribute].splice(pos, 1);\r\n        this.firePropertyChange(attribute, newValue, null);\r\n        return true;\r\n    }\r\n\r\n    public addListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(property);\r\n        if (!listeners) {\r\n            listeners = [];\r\n            this.$listener[Data.nullCheck(property)] = listeners;\r\n        }\r\n        listeners.push(control);\r\n    }\r\n\r\n    public removeListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners = this.getListeners(property);\r\n        if (listeners === null) {\r\n            return;\r\n        }\r\n        let pos = listeners.indexOf(control);\r\n        if (pos >= 0) {\r\n            listeners.splice(pos, 1);\r\n        }\r\n        if (listeners.length === 0 && Data.nullCheck(property) !== '') {\r\n            // only remove, if it's not the default listener list...\r\n            delete this.$listener[property];\r\n        }\r\n    }\r\n\r\n    public hasProperty(property: string): boolean {\r\n        return this.prop.hasOwnProperty(property);\r\n    }\r\n\r\n    public addFrom(attribute: string, oldData: Data): void {\r\n        if (oldData) {\r\n            this.setValue(attribute, oldData.getValue(attribute));\r\n        } else {\r\n            this.setValue(attribute, null);\r\n        }\r\n    }\r\n\r\n    public removeKey(key: string): any {\r\n        if (this.hasProperty(key)) {\r\n            const oldValue = this.prop[key];\r\n            delete this.prop[key];\r\n            return oldValue;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected getListeners(property: string): PropertyChangeSupport[] {\r\n        property = Data.nullCheck(property);\r\n        return this.$listener[property];\r\n    }\r\n\r\n    protected firePropertyChange(attribute: string, oldValue: Object, newValue: Object) {\r\n        attribute = Data.nullCheck(attribute);\r\n        // at first fire for the given property\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(attribute);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n        // now we need to fire the Listeners that wan't to listen to everything\r\n        listeners = this.getListeners(null);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport interface EventHandler {\r\n    canHandle(): boolean;\r\n    handle(event: Event, element: DiagramElement): boolean;\r\n    setActive(active: boolean): void;\r\n}\r\n\r\nexport class EventBus {\r\n    public static CREATE: string = 'Create';\r\n    public static EDITOR: string = 'Editor';\r\n    public static OPENPROPERTIES: string = 'openProperties';\r\n    public static RELOADPROPERTIES: string = 'reloadProperties';\r\n    public static ELEMENTMOUSEDOWN: string = 'ELEMENT:MOUSEDOWN';\r\n    public static ELEMENTMOUSEUP: string = 'ELEMENT:MOUSEUP';\r\n    public static ELEMENTMOUSELEAVE: string = 'ELEMENT:MOUSELEAVE';\r\n    public static ELEMENTMOUSEMOVE: string = 'ELEMENT:MOUSEMOVE';\r\n    public static ELEMENTMOUSEWHEEL: string = 'ELEMENT:MOUSEWHEEL';\r\n    public static ELEMENTCLICK: string = 'ELEMENT:CLICK';\r\n    public static ELEMENTDBLCLICK: string = 'ELEMENT:DBLCLICK';\r\n    public static ELEMENTDRAG: string = 'ELEMENT:DRAG';\r\n    public static ELEMENTDRAGOVER: string = 'ELEMENT:DRAGOVER';\r\n    public static ELEMENTDROP: string = 'ELEMENT:DROP';\r\n    public static ELEMENTDRAGLEAVE: string = 'ELEMENT:DRAGLEAVE';\r\n\r\n    public static EVENTS: string[] = [\r\n        EventBus.CREATE,\r\n        EventBus.EDITOR,\r\n        EventBus.OPENPROPERTIES,\r\n        EventBus.RELOADPROPERTIES,\r\n        EventBus.ELEMENTMOUSEDOWN,\r\n        EventBus.ELEMENTMOUSEUP,\r\n        EventBus.ELEMENTMOUSELEAVE,\r\n        EventBus.ELEMENTMOUSEMOVE,\r\n        EventBus.ELEMENTMOUSEWHEEL,\r\n        EventBus.ELEMENTCLICK,\r\n        EventBus.ELEMENTDRAG,\r\n        EventBus.ELEMENTDBLCLICK,\r\n        EventBus.ELEMENTDRAGOVER,\r\n        EventBus.ELEMENTDROP,\r\n        EventBus.ELEMENTDRAGLEAVE,\r\n    ];\r\n\r\n    private static handlers = {};\r\n\r\n    private static $activeHandler: string = '';\r\n\r\n    public static setActiveHandler(handler: string): void {\r\n        this.$activeHandler = handler;\r\n    }\r\n\r\n    public static isHandlerActiveOrFree(handler: string, notEmpty?: boolean): boolean {\r\n        if (notEmpty) {\r\n            return this.$activeHandler === handler;\r\n        }\r\n        return this.$activeHandler === handler || this.$activeHandler === '' || this.$activeHandler === undefined;\r\n    }\r\n\r\n    public static isAnyHandlerActive(): boolean {\r\n        return !(this.$activeHandler === '' || this.$activeHandler === undefined);\r\n    }\r\n\r\n    public static releaseActiveHandler(): void {\r\n        this.$activeHandler = '';\r\n    }\r\n\r\n    public static getActiveHandler(): string {\r\n        return this.$activeHandler;\r\n    }\r\n\r\n    static register(control: Control, view: Element) {\r\n        let events: string[];\r\n        if (typeof control['getEvents'] === 'function') {\r\n            events = control['getEvents']();\r\n        }\r\n\r\n        if (!events || !view) {\r\n            return;\r\n        }\r\n        for (let event of events) {\r\n            this.registerEvent(view, event, control);\r\n        }\r\n    }\r\n\r\n    static registerEvent(view: Element, event: string, control?: any) {\r\n        const pos: number = event.indexOf(':');\r\n        if (pos > 0) {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        } else {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        }\r\n    }\r\n\r\n    public static publish(element: DiagramElement, evt: Event) {\r\n        let handlers = EventBus.handlers[evt.type];\r\n        if (handlers) {\r\n            for (let handler of handlers) {\r\n                handler.handle(evt, element);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static subscribe(handler: EventHandler, ...eventTypes: string[]) {\r\n        for (let event of eventTypes) {\r\n            let handlers = EventBus.handlers[event];\r\n            if (handlers === null || handlers === undefined) {\r\n                handlers = [];\r\n                EventBus.handlers[event] = handlers;\r\n            }\r\n            handlers.push(handler);\r\n        }\r\n    }\r\n}\r\n","import SimpleEvent from './Event';\r\n\r\nexport default class EventListener {\r\n    private $onUpdate: Function;\r\n\r\n    get onUpdate(): Function {\r\n        return this.$onUpdate;\r\n    }\r\n\r\n    set onUpdate(value: Function) {\r\n        this.$onUpdate = value;\r\n    }\r\n\r\n    update(event: SimpleEvent) {\r\n        this.$onUpdate(event);\r\n    }\r\n}\r\n","// ################################## jsEPS ####################################################\r\nimport {SVGConverter} from './SVGConverter';\r\n\r\nexport class JSEPS {\r\n    private max: number;\r\n    private min: number;\r\n    private inverting: boolean;\r\n    private output: string[];\r\n    private font: number;\r\n\r\n    constructor(options: any) {\r\n        this.max = 0;\r\n        this.min = 999;\r\n        let hasInverting = typeof (options.inverting);\r\n        this.inverting = (options && hasInverting !== 'undefined' ? options.inverting : true);\r\n        this.output = ['%!PS-Adobe-3.0 EPSF-3.0', '1 setlinewidth'];\r\n        this.out('/FSD {findfont exch scalefont def} bind def % In the document prolog: define');\r\n        this.out('/SMS {setfont moveto show} bind def % some useful procedures');\r\n        this.out('/MS {moveto show} bind def');\r\n        this.out('/F1  10  /Helvetica  FSD % At the start of the script: set up');\r\n        this.font = 1;\r\n    }\r\n\r\n    public out(value: string) {this.output.push(value); }\r\n    public rect(x: number, y: number, width: number, height: number, style: string) {\r\n        y = y + (this.inverting ? height : 0);\r\n        if (style && style.indexOf('fill:url(#classelement);') >= 0) {\r\n            this.out('gsave 0.93 0.93 0.93 setrgbcolor newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectfill grestore');\r\n        } else {\r\n            this.out('newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectstroke');\r\n        }\r\n    }\r\n    public setFillColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public y(value: number) {this.max = Math.max(this.max, value); this.min = Math.min(this.min, value); return this.inverting ? '%y(' + value + ')' : value; }\r\n    public getType(): string {\r\n        return 'application/postscript';\r\n    }\r\n\r\n    public getData(): string {\r\n        let t, end, url, text, typ = 'application/postscript', a = document.createElement('a'), data = '', pos, i;\r\n        for (i = 0; i < this.output.length; i += 1) {\r\n            text = this.output[i];\r\n            if (this.inverting) {\r\n                while ((pos = text.indexOf('%y')) >= 0) {\r\n                    end = text.indexOf(')', pos);\r\n                    t = this.max - parseInt(text.substring(pos + 3, end), 10);\r\n                    text = text.substring(0, pos) + t + text.substring(end + 1);\r\n                }\r\n            }\r\n            data = data + text + '\\r\\n';\r\n        }\r\n        return data;\r\n    }\r\n\r\n    public setDrawColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public ellipse(cx: number, cy: number, rx: number, ry: number, colorMode: string) {/*FIXME*/}\r\n    public circle(cx: number, cy: number, r: number, colorMode: string) {/*FIXME*/}\r\n    public setTextColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public text(x: number, y: number, text: string) {this.out('(' + text.replace('&lt;', '<').replace('&gt;', '>') + ') ' + x + ' ' + this.y(y) + ' F1 SMS'); }\r\n    public lineto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' lineto'); this.out('stroke'); }\r\n    public moveto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' moveto'); }\r\n    public line(x1: number, y1: number, x2: number, y2: number) {this.out('newpath ' + x1 + ' ' + this.y(y1) + ' moveto ' + x2 + ' ' + this.y(y2) + ' lineto stroke'); }\r\n    public setLineWidth(value: string) {this.out(value + ' setlinewidth'); }\r\n    public setFont(value: string) {this.out('/F' + (this.font += 1) + ' 10 /' + value + ' FSD'); }\r\n}\r\n","import { Graph } from './elements/Graph';\r\n\r\n/*const buttons = {\r\n    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    clazz: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n};\r\n*/\r\nexport default class Palette {\r\n\r\n    private graph: Graph;\r\n    private palette: Element;\r\n    private root: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n        let div = document.createElement('div');\r\n        div.className = 'palette';\r\n        div.id = 'palette';\r\n        this.root = div;\r\n        this.palette = div;\r\n        for (let key in graph.nodeFactory) {\r\n            let element = graph.nodeFactory[key];\r\n            let control = new element();\r\n            let icon = control.getToolBarIcon();\r\n            if (icon) {\r\n                let button = <HTMLButtonElement>document.createElement('button');\r\n                button.className = 'add' + key + 'Btn';\r\n                button.innerHTML = icon.outerHTML;\r\n                button.onclick = e => {\r\n                    let nextFreePosition = this.graph.getNextFreePosition();\r\n                    // let node = this.graph.addElementWithValues(graph.nodeFactory[key], {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    let node = this.graph.addElementWithValues(key, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    this.graph.drawElement(node);\r\n                };\r\n                this.palette.appendChild(button);\r\n            }\r\n        }\r\n        // this.graph.nodeFactory\r\n//        this.addButtons();\r\n    }\r\n\r\n    public show() {\r\n        document.body.appendChild(this.root);\r\n    }\r\n\r\n    private addButtons() {\r\n        /*for (let btn in buttons) {\r\n            let button = <HTMLButtonElement>document.createElement('button');\r\n            button.className = 'add' + btn + 'Btn';\r\n            button.innerHTML = buttons[btn];\r\n            button.onclick = e => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let node = this.graph.addElementWithValues(btn, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                this.graph.drawElement(node);\r\n            };\r\n            this.palette.appendChild(button);\r\n        }*/\r\n    }\r\n}\r\n","import {Graph} from './elements/Graph';\r\nimport * as edges from './elements/edges';\r\nimport {EventBus, EventHandler} from './EventBus';\r\nimport {DiagramElement} from './elements/BaseElements';\r\nimport {Util} from './util';\r\n\r\nexport class PanelGroup implements EventHandler {\r\n    private graph: Graph;\r\n    private selectedElement: DiagramElement;\r\n    private clearPanel: Panel;\r\n    private generatePanel: Panel;\r\n    private propertiesMasterPanel: HTMLDivElement;\r\n    private propertiesContent: HTMLDivElement;\r\n    private propHeaderLabel: HTMLDivElement;\r\n    private propHeaderButton: HTMLButtonElement;\r\n    private selectedPanel: Panel;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.clearPanel = new ClearPanel(this);\r\n        this.generatePanel = new GeneratePanel(this);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        this.handleOpenProperties(event, element);\r\n\r\n        if (event.type === EventBus.RELOADPROPERTIES\r\n            && this.selectedElement && element.id === this.selectedElement.id) {\r\n            this.handleEvent(event, element);\r\n        }\r\n\r\n        // the same element was clicked. do nothing\r\n        if (this.selectedElement && this.selectedElement.id === element.id) {\r\n            return true;\r\n        }\r\n        if (element.id === 'RootElement') {\r\n            this.setActivePanel(this.clearPanel);\r\n        }\r\n        if (element.id === 'GenerateProp') {\r\n            this.setActivePanel(this.generatePanel);\r\n        }\r\n        this.selectedElement = element;\r\n\r\n        return true;\r\n    }\r\n\r\n    public getGraph(): Graph {\r\n        return this.graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(PanelGroup.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(PanelGroup.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n     public handleEvent(event: any, element: any) {\r\n        // DO NOTHING\r\n    }\r\n\r\n    public show() {\r\n        // main div to display any properties, class, edge, etc.\r\n        this.propertiesMasterPanel = document.createElement('div');\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n\r\n        this.propertiesContent = document.createElement('div');\r\n        this.propertiesContent.className = 'properties-hidden';\r\n\r\n        this.propHeaderLabel = document.createElement('div');\r\n        this.propHeaderLabel.style.display = 'inherit';\r\n        this.propHeaderLabel.style.cursor = 'pointer';\r\n        this.propHeaderLabel.onclick = e => this.toogleProperties(e);\r\n\r\n        // button to display and hide the properties of e.g. a class\r\n        this.propHeaderButton = document.createElement('button');\r\n        this.propHeaderButton.className = 'btnHideProp';\r\n        this.propHeaderButton.style.cssFloat = 'right';\r\n        this.propHeaderButton.onclick = e => this.toogleProperties(e);\r\n\r\n        let propertiesHeader = document.createElement('div');\r\n        propertiesHeader.style.display = 'inline';\r\n        propertiesHeader.appendChild(this.propHeaderLabel);\r\n        propertiesHeader.appendChild(this.propHeaderButton);\r\n\r\n        this.propertiesMasterPanel.appendChild(propertiesHeader);\r\n        this.propertiesMasterPanel.appendChild(this.propertiesContent);\r\n        document.body.appendChild(this.propertiesMasterPanel);\r\n\r\n        this.setActivePanel(this.clearPanel);\r\n    }\r\n\r\n    public setActivePanel(panel: Panel) {\r\n        this.selectedPanel = panel;\r\n        this.propHeaderLabel.innerHTML = panel.getHeaderText();\r\n        if (this.propertiesContent) {\r\n            while (this.propertiesContent.hasChildNodes()) {\r\n                this.propertiesContent.removeChild(this.propertiesContent.childNodes[0]);\r\n            }\r\n        }\r\n        panel.show();\r\n\r\n        panel.showFirstTab();\r\n        if (panel !== this.clearPanel) {\r\n            this.showProperties(null);\r\n        } else {\r\n            this.hideProperties(null);\r\n        }\r\n    }\r\n\r\n    public getProperiesContent(): HTMLDivElement {\r\n        return this.propertiesContent;\r\n    }\r\n\r\n    private handleOpenProperties(event: Event, element: DiagramElement) {\r\n        if (event.type === 'dblclick') {\r\n            this.showProperties(event);\r\n        }\r\n    }\r\n\r\n    private showProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Show\r\n        this.propHeaderButton.innerHTML = '&#8897;';\r\n        this.propHeaderButton.title = 'Hide properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel';\r\n        this.propertiesContent.className = 'properties';\r\n    }\r\n\r\n    private toogleProperties(evt: Event): void {\r\n        if (this.propHeaderButton.title === 'Show properties') {\r\n            this.showProperties(evt);\r\n        } else {\r\n            this.hideProperties(evt);\r\n        }\r\n    }\r\n\r\n    private hideProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Hide\r\n        this.propHeaderButton.innerHTML = '&#8896;';\r\n        this.propHeaderButton.title = 'Show properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n        this.propertiesContent.className = 'properties-hidden';\r\n    }\r\n}\r\n\r\nexport abstract class Panel {\r\n    protected divPropertiesPanel: HTMLDivElement;\r\n    protected divPropertiesTabbedPanel: HTMLDivElement;\r\n    protected element: any;\r\n    protected group: PanelGroup;\r\n    private panelItem: PanelItem[] = [];\r\n\r\n    constructor(group: PanelGroup, element: any) {\r\n        // get the properties content panel\r\n        this.divPropertiesPanel = document.createElement('div');\r\n        this.element = element;\r\n        this.group = group;\r\n\r\n        this.divPropertiesTabbedPanel = document.createElement('div');\r\n        this.divPropertiesTabbedPanel.className = 'tabbedpane';\r\n\r\n        // add tabbed panel\r\n        this.divPropertiesPanel.appendChild(this.divPropertiesTabbedPanel);\r\n    }\r\n\r\n    public show(): void {\r\n        let propertiesContent: HTMLDivElement = this.group.getProperiesContent();\r\n        if (this.panelItem.length > 1) {\r\n            propertiesContent.appendChild(this.getPropertiesTabbedPanel());\r\n        }\r\n\r\n        propertiesContent.appendChild(this.getPropertiesPanel());\r\n    }\r\n\r\n    public getPropertiesTabbedPanel(): HTMLDivElement {\r\n        return this.divPropertiesTabbedPanel;\r\n    }\r\n\r\n    public getPropertiesPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return '';\r\n    }\r\n\r\n    public showFirstTab(): void {\r\n        if (this.panelItem.length > 0) {\r\n            this.openTab(this.panelItem[0]);\r\n        }\r\n    }\r\n\r\n    protected createTabElement(tabText: string, tabValue: string, item: PanelItem): PanelItem {\r\n        let tabElementBtn = document.createElement('button');\r\n        tabElementBtn.className = 'tablinks';\r\n        tabElementBtn.innerText = tabText;\r\n        tabElementBtn.value = tabValue;\r\n\r\n        if (item === null) {\r\n            item = new PanelItem(this);\r\n        }\r\n        item.withButton(tabElementBtn);\r\n\r\n        tabElementBtn.onclick = () => this.openTab(item);\r\n        this.divPropertiesTabbedPanel.appendChild(tabElementBtn);\r\n        this.panelItem.push(item);\r\n        return item;\r\n    }\r\n\r\n    protected openTab(panelItem: PanelItem): void {\r\n        for (let key in this.panelItem) {\r\n            let child = this.panelItem[key];\r\n            if (child !== panelItem) {\r\n                 child.deactive();\r\n            }\r\n        }\r\n        panelItem.active();\r\n        // hide other tabcontent\r\n        if (this.divPropertiesPanel) {\r\n            while (this.divPropertiesPanel.hasChildNodes()) {\r\n                this.divPropertiesPanel.removeChild(this.divPropertiesPanel.childNodes[0]);\r\n            }\r\n        }\r\n\r\n        // ADD\r\n        if (panelItem.getContent()) {\r\n            this.divPropertiesPanel.appendChild(panelItem.getContent());\r\n        }\r\n    }\r\n}\r\n\r\nexport class GeneratePanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n\r\n        let item: PanelItem = this.createTabElement('General', 'General', null);\r\n\r\n        // Workspace and generate code stuff\r\n        let inputGenerateWorkspace: HTMLInputElement =  <HTMLInputElement> Util.createHTML({tag: 'input', id: 'workspace', type: 'text', placeholder: 'Type your Folder for generated code...', value: 'src/main/java', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Folder:', inputGenerateWorkspace);\r\n\r\n        let inputGeneratePackage: HTMLInputElement = <HTMLInputElement> Util.createHTML({tag: 'input', id: 'package', type: 'text', placeholder: 'Type your workspace for generated code...', value: '', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Package:', inputGeneratePackage);\r\n\r\n        let options = document.createElement('div');\r\n        options.style.textAlign = 'center';\r\n        options.style.margin = '3';\r\n        options.style.padding = '5';\r\n\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(options);\r\n\r\n        options.style.borderStyle = 'groove';\r\n        options.style.borderRadius = '10px';\r\n\r\n        let btnGenerate = document.createElement('button');\r\n        btnGenerate.textContent = 'Generate';\r\n        btnGenerate.title = 'Generate code into your workspace';\r\n        btnGenerate.className = 'OptionElement';\r\n\r\n        let that = this;\r\n        btnGenerate.onclick = () => {\r\n            let workspace = inputGeneratePackage.value;\r\n            if (workspace.length === 0) {\r\n                alert('No workspace set.\\nEnter first your workspace');\r\n                inputGeneratePackage.focus();\r\n                return;\r\n            }\r\n            that.group.getGraph().generate(workspace, inputGenerateWorkspace.value);\r\n        };\r\n        options.appendChild(btnGenerate);\r\n        options.appendChild(document.createElement('hr'));\r\n        options.appendChild(document.createElement('br'));\r\n\r\n        let btnAutoLayout = Util.createHTML({tag: 'button', className: 'OptionElement', value: 'Auto Layout', style: {marginRight: '10px'}, onclick: () => {\r\n                that.group.getGraph().layout();\r\n            }});\r\n\r\n        options.appendChild(btnAutoLayout);\r\n\r\n        // delete all nodes\r\n        let btnDeleteAll = document.createElement('button');\r\n        btnDeleteAll.className = 'OptionElement';\r\n        btnDeleteAll.textContent = 'Delete All';\r\n        btnDeleteAll.title = 'Delete all nodes from diagram';\r\n\r\n        btnDeleteAll.onclick = () => {\r\n            let confirmDelete = confirm('All classes will be deleted!');\r\n            if (!confirmDelete) {\r\n                return;\r\n            }\r\n            that.group.getGraph().$graphModel.removeAllElements();\r\n        };\r\n        btnDeleteAll.style.marginRight = '10px';\r\n        options.appendChild(btnDeleteAll);\r\n\r\n        // export stuff\r\n        let exportTypes: string[] = ['Export', 'HTML', 'JSON', 'PDF', 'PNG', 'SVG'];\r\n        let selectExport = document.createElement('select');\r\n\r\n        exportTypes.forEach(type => {\r\n            if (!(!window['jsPDF'] && type === 'PDF')) {\r\n                let option = document.createElement('option');\r\n                option.value = type;\r\n                option.textContent = type;\r\n                selectExport.appendChild(option);\r\n            }\r\n        });\r\n\r\n        selectExport.onchange = (evt) => {\r\n            let selectedExportType = selectExport.options[selectExport.selectedIndex].value;\r\n            selectExport.selectedIndex = 0;\r\n            that.group.getGraph().saveAs(selectedExportType);\r\n        };\r\n        selectExport.className = 'OptionElement';\r\n        options.appendChild(selectExport);\r\n        options.appendChild(document.createElement('br'));\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Properties';\r\n    }\r\n\r\n}\r\n\r\nexport class ClearPanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Select any element to see its properties';\r\n    }\r\n}\r\n\r\nexport class PanelItem {\r\n    protected panel: Panel;\r\n    protected label: string;\r\n    protected button: HTMLButtonElement;\r\n    protected content: HTMLDivElement = <HTMLDivElement>Util.create({tag: 'div', className: 'tabContent'});\r\n\r\n    constructor(panel: Panel, label?: string) {\r\n        this.panel = panel;\r\n        this.label = label;\r\n    }\r\n\r\n    public active(): void {\r\n        if (this.getButton()) {\r\n            this.getButton().className += ' active';\r\n        }\r\n    }\r\n\r\n    public deactive(): void {\r\n        if (this.getButton()) {\r\n            Util.removeClass(this.getButton(), 'active');\r\n        }\r\n    }\r\n\r\n    public withButton(button: HTMLButtonElement): PanelItem {\r\n        this.button = button;\r\n        return this;\r\n    }\r\n\r\n    public withContent(element: HTMLElement): PanelItem {\r\n        this.content.appendChild(element);\r\n        return this;\r\n    }\r\n\r\n    public withInput(labelText: string, element: HTMLElement): PanelItem {\r\n        let group: HTMLDivElement = <HTMLDivElement> Util.createHTML({tag: 'div'});\r\n        let label = Util.createHTML({tag: 'label', for: element.id, value: labelText});\r\n        group.appendChild(label);\r\n        group.appendChild(element);\r\n\r\n        this.content.appendChild(group);\r\n        return this;\r\n    }\r\n\r\n    public getButton(): HTMLButtonElement {\r\n        return this.button;\r\n    }\r\n\r\n    public getContent(): HTMLDivElement {\r\n        return this.content;\r\n    }\r\n\r\n   public getHeader(): string {\r\n        return this.label;\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\nimport Data from './Data';\r\n\r\nexport class PropertyBinder implements PropertyChangeSupport {\r\n    private propertyClass1: string;\r\n    private propertyClass2: string;\r\n    private data1: Data;\r\n    private data2: Data;\r\n    // works like a lock\r\n    private applyingChange: boolean = false;\r\n\r\n    constructor(data1: Data, data2: Data, propertyClass1: string, propertyClass2: string) {\r\n        this.data1 = data1;\r\n        this.data2 = data2;\r\n        this.propertyClass1 = propertyClass1;\r\n        this.propertyClass2 = propertyClass2;\r\n    }\r\n    static bind(data1: Data, data2: Data, property1: string, property2: string) {\r\n        if (!data1 || !data2 || !property1) {\r\n            console.error('NullValue!!');\r\n            return null;\r\n        }\r\n        const propertyBinder = new PropertyBinder(data1, data2, property1, property2);\r\n        propertyBinder.bind();\r\n        return propertyBinder;\r\n    }\r\n\r\n    propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        if (!this.applyingChange) {\r\n            this.applyingChange = true;\r\n            if (entity === this.data1) {\r\n                // fire to data2\r\n                this.data2.setValue(this.propertyClass2, newValue);\r\n            } else if (entity === this.data2) {\r\n                // fire to data1\r\n                this.data1.setValue(this.propertyClass1, newValue);\r\n            }\r\n            this.applyingChange = false;\r\n        }\r\n    }\r\n\r\n    protected bind() {\r\n        // public addListener(control: Control, property?: string)\r\n        // todo: set value immediately\r\n        this.data1.setValue(this.propertyClass1, this.data2.getValue(this.propertyClass2));\r\n\r\n        this.data1.addListener(this, this.propertyClass1);\r\n        this.data2.addListener(this, this.propertyClass2);\r\n    }\r\n\r\n    protected unbind() {\r\n        // public addListener(control: Control, property?: string)\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n    }\r\n}\r\n","// ################################## RGBColor ####################################################\r\nexport class RGBColor {\r\n    public  ok: boolean;\r\n    public r: number;\r\n    public g: number;\r\n    public b: number;\r\n\r\n    constructor(value: string) {\r\n        this.ok = false;\r\n        if (value === 'none') {\r\n            return;\r\n        }\r\n        let computedColor, div = document.createElement('div');\r\n        div.style.backgroundColor = value;\r\n        document.body.appendChild(div);\r\n        computedColor = window.getComputedStyle(div).backgroundColor;\r\n        // cleanup temporary div.\r\n        document.body.removeChild(div);\r\n        this.convert(computedColor);\r\n    }\r\n    public convert(value: any) {\r\n        let values, regex = /rgb *\\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\\)/;\r\n        values = regex.exec(value);\r\n        this.r = parseInt(values[1], 10);\r\n        this.g = parseInt(values[2], 10);\r\n        this.b = parseInt(values[3], 10);\r\n        this.ok = true;\r\n    }\r\n\r\n    public toRGB(): string {return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; }\r\n    public toHex(): string {\r\n        return '#' + (this.r + 0x10000).toString(16).substring(3).toUpperCase() + (this.g + 0x10000).toString(16).substring(3).toUpperCase() + (this.b + 0x10000).toString(16).substring(3).toUpperCase();\r\n    }\r\n}\r\n","/*\r\n NetworkParser\r\n Copyright (c) 2011 - 2014, Stefan Lindel\r\n All rights reserved.\r\n\r\n Licensed under the EUPL, Version 1.1 or (as soon they\r\n will be approved by the European Commission) subsequent\r\n versions of the EUPL (the \"Licence\");\r\n You may not use this work except in compliance with the Licence.\r\n You may obtain a copy of the Licence at:\r\n\r\n http://ec.europa.eu/idabc/eupl5\r\n\r\n Unless required by applicable law or agreed to in\r\n writing, software distributed under the Licence is\r\n distributed on an \"AS IS\" basis,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\r\n express or implied.\r\n See the Licence for the specific language governing\r\n permissions and limitations under the Licence.\r\n*/\r\nimport {RGBColor} from './RGBColor';\r\nimport {JSEPS} from \"./JSEPS\";\r\n\r\nconst epsSvgAttr = {\r\n    // allowed attributes. all others are removed from the preview.\r\n    g: ['stroke', 'fill', 'stroke-width'],\r\n    line: ['x1', 'y1', 'x2', 'y2', 'stroke', 'stroke-width'],\r\n    rect: ['x', 'y', 'width', 'height', 'stroke', 'fill', 'stroke-width'],\r\n    ellipse: ['cx', 'cy', 'rx', 'ry', 'stroke', 'fill', 'stroke-width'],\r\n    circle: ['cx', 'cy', 'r', 'stroke', 'fill', 'stroke-width'],\r\n    text: ['x', 'y', 'font-size', 'font-family', 'text-anchor', 'font-weight', 'font-style', 'fill'],\r\n    path: ['']\r\n};\r\nexport class SVGConverter {\r\n    private k: number;\r\n    private remove: boolean;\r\n    private target: any;\r\n\r\n    constructor(element: any, target: any, options: any) {\r\n        this.k = 1.0;\r\n        let hasScale = typeof (options.scale), hasRemoveInvalid = typeof (options.removeInvalid);\r\n        this.k = (options && hasScale !== 'undefined' ? options.scale : 1.0);\r\n        this.remove = (options && hasRemoveInvalid !== 'undefined' ? options.removeInvalid : false);\r\n        this.target = target;\r\n        this.parse(element);\r\n    }\r\n\r\n    public parse(element: any) {\r\n        let el, i, n, colorMode, hasFillColor, fillRGB, fillColor, strokeColor, strokeRGB, fontType, pdfFontSize, x, y,\r\n            box, xOffset;\r\n        if (!element) {\r\n            return;\r\n        }\r\n        if (typeof element === 'string') {\r\n            el = document.createElement('div');\r\n            el.innerHTML = element;\r\n            element = el.childNodes[0];\r\n        }\r\n        for (i = 0; i < element.children.length; i += 1) {\r\n            n = element.children[i];\r\n            colorMode = null;\r\n            hasFillColor = false;\r\n            if ('g,line,rect,ellipse,circle,text'.indexOf(n.tagName) >= 0) {\r\n                fillColor = n.getAttribute('fill');\r\n                if (fillColor) {\r\n                    fillRGB = new RGBColor(fillColor);\r\n                    if (fillRGB.ok) {\r\n                        hasFillColor = true;\r\n                        colorMode = 'F';\r\n                    }\r\n                }\r\n            }\r\n            if ('g,line,rect,ellipse,circle'.indexOf(n.tagName) >= 0) {\r\n                if (hasFillColor) {\r\n                    this.target.setFillColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                }\r\n                strokeColor = n.getAttribute('stroke');\r\n                if (n.hasAttribute('stroke-width')) {\r\n                    this.target.setLineWidth(this.attr(n, 'stroke-width'));\r\n                }\r\n                if (strokeColor) {\r\n                    strokeRGB = new RGBColor(strokeColor);\r\n                    if (strokeRGB.ok) {\r\n                        this.target.setDrawColor(strokeRGB.r, strokeRGB.g, strokeRGB.b);\r\n                        if (colorMode === 'F') {\r\n                            colorMode = 'FD';\r\n                        } else if (!hasFillColor) {\r\n                            colorMode = 'S';\r\n                        }\r\n                    } else {\r\n                        colorMode = null;\r\n                    }\r\n                }\r\n            }\r\n            // console.log(\"write \"+n.tagName);\r\n            switch (n.tagName.toLowerCase()) {\r\n                case 'svg':\r\n                case 'a':\r\n                case 'g':\r\n                    this.parse(n);\r\n                    break;\r\n                case 'line':\r\n                    this.target.line(this.attr(n, 'x1'), this.attr(n, 'y1'), this.attr(n, 'x2'), this.attr(n, 'y2'));\r\n                    break;\r\n                case 'rect':\r\n                    this.target.rect(this.attr(n, 'x'), this.attr(n, 'y'), this.attr(n, 'width'), this.attr(n, 'height'), n.getAttribute('style'));\r\n                    break;\r\n                case 'ellipse':\r\n                    this.target.ellipse(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'rx'), this.attr(n, 'ry'), colorMode);\r\n                    break;\r\n                case 'circle':\r\n                    this.target.circle(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'r'), colorMode);\r\n                    break;\r\n                case 'text':\r\n                    if (n.hasAttribute('font-family')) {\r\n                        switch (n.getAttribute('font-family').toLowerCase()) {\r\n                            case 'serif':\r\n                                this.target.setFont('times');\r\n                                break;\r\n                            case 'monospace':\r\n                                this.target.setFont('courier');\r\n                                break;\r\n                            default:\r\n                                n.getAttribute('font-family', 'sans-serif');\r\n                                this.target.setFont('Helvetica');\r\n                        }\r\n                    }\r\n                    if (hasFillColor) {\r\n                        this.target.setTextColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                    }\r\n                    if (this.target instanceof JSEPS) {\r\n                        this.target.text(this.attr(n, 'x'), this.attr(n, 'y'), n.innerHTML);\r\n                        break;\r\n                    }\r\n                    fontType = '';\r\n                    if (n.hasAttribute('font-weight')) {\r\n                        if (n.getAttribute('font-weight') === 'bold') {\r\n                            fontType = 'bold';\r\n                        }\r\n                    }\r\n                    if (n.hasAttribute('font-style')) {\r\n                        if (n.getAttribute('font-style') === 'italic') {\r\n                            fontType += 'italic';\r\n                        }\r\n                    }\r\n                    this.target.setFontType(fontType);\r\n                    pdfFontSize = 16;\r\n                    if (n.hasAttribute('font-size')) {\r\n                        pdfFontSize = parseInt(n.getAttribute('font-size'), 10);\r\n                    }\r\n                    box = n.getBBox();\r\n                    // FIXME: use more accurate positioning!!\r\n                    x = this.attr(n, 'x');\r\n                    y = this.attr(n, 'y');\r\n                    xOffset = 0;\r\n                    if (n.hasAttribute('text-anchor')) {\r\n                        switch (n.getAttribute('text-anchor')) {\r\n                            case 'end':\r\n                                xOffset = box.width;\r\n                                break;\r\n                            case 'middle':\r\n                                xOffset = box.width / 2;\r\n                                break;\r\n                            case 'start':\r\n                                break;\r\n                            case 'default':\r\n                                n.getAttribute('text-anchor', 'start');\r\n                                break;\r\n                        }\r\n                        x = x - (xOffset * this.k);\r\n                    }\r\n                    this.target.setFontSize(pdfFontSize).text(x, y, n.innerHTML);\r\n                    break;\r\n                default:\r\n                    if (this.remove) {\r\n                        console.log('cant translate to target:', n);\r\n                        element.removeChild(n);\r\n                        i -= 1;\r\n                    }\r\n            }\r\n        }\r\n    }\r\n\r\n    public attr(node: any, name: string) {\r\n        return this.k * parseInt(node.getAttribute(name), 10);\r\n    }\r\n}\r\n","import {Control} from './Control';\r\n\r\nexport class ScrumBoard extends Control {\r\n    public static cards = [0, 0.5, 1, 2, 3, 5, 8, 13, 20, 40, 100, '?', 'Coffee'];\r\n    private $selected: HTMLDivElement;\r\n    private $board: HTMLDivElement;\r\n\r\n    constructor() {\r\n        super();\r\n        this.redraw();\r\n    }\r\n\r\n    public redraw(): void {\r\n        if (this.$board) {\r\n            while (this.$board.children.length > 0 ) {\r\n                this.$board.removeChild(this.$board.children[0]);\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('div');\r\n            this.$selected = document.createElement('div');\r\n            this.$board = document.createElement('div');\r\n            this.$view.appendChild(this.$board);\r\n            this.$view.appendChild(this.$selected);\r\n        }\r\n        this.$view.className = 'ScrumBoard';\r\n        for ( let i = 0; i < ScrumBoard.cards.length; i++) {\r\n            let card = document.createElement('div');\r\n            card.className = 'ScrumCard';\r\n            card.innerHTML = <string>ScrumBoard.cards[i];\r\n            card['pokervalue'] = <string>ScrumBoard.cards[i];\r\n            card.onclick = e => {\r\n                this.onClick(<HTMLDivElement>e.target);\r\n            };\r\n            this.$board.appendChild(card);\r\n        }\r\n    }\r\n\r\n    public getSVG() {\r\n        this.redraw();\r\n        return this.$view;\r\n    }\r\n\r\n    public onClick(target: HTMLDivElement): void {\r\n        console.log(target['pokervalue']);\r\n\r\n        while (this.$selected.children.length > 0 ) {\r\n            this.$selected.removeChild(this.$selected.children[0]);\r\n        }\r\n        let card = document.createElement('div');\r\n        card.className = 'ScrumCard';\r\n        card['pokervalue'] = target['pokervalue'];\r\n        card.onclick = e => {\r\n            this.onShow(<HTMLDivElement>e.target);\r\n        };\r\n        this.$selected.appendChild(card);\r\n        this.$board['style']['display'] = 'none';\r\n    }\r\n\r\n    public onShow(target: HTMLDivElement): void {\r\n        target.innerHTML = target['pokervalue'];\r\n    }\r\n}\r\n","import {Graph} from './main';\r\nimport {SymbolLibary} from './elements/nodes/Symbol';\r\nimport {EventBus} from './EventBus';\r\n\r\nexport class Toolbar {\r\n\r\n    private graph: Graph;\r\n    private mainDiv: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public show(): void {\r\n        if (this.mainDiv) {\r\n            return;\r\n        }\r\n\r\n        this.mainDiv = document.createElement('div');\r\n        this.mainDiv.className = 'toolbar';\r\n\r\n        let h1Logo = document.createElement('h1');\r\n        h1Logo.className = 'logo';\r\n        h1Logo.textContent = 'DiagramJS';\r\n\r\n        let node = {type: 'Hamburger', property: 'HTML', width: 24, height: 24, id: 'GenerateProp'};\r\n        let hamburger = SymbolLibary.draw( node);\r\n        EventBus.registerEvent(hamburger, 'click', node);\r\n        this.mainDiv.appendChild(hamburger);\r\n\r\n        this.mainDiv.appendChild(h1Logo);\r\n        document.body.appendChild(this.mainDiv);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 06.03.2017.\r\n */\r\nimport Data from './Data';\r\n\r\n// export default class Data {\r\n//    public values = {};\r\n//    id: string;\r\n//    $listener: Control[] = [];\r\n//    property: string;\r\nexport namespace UML {\r\n    export class Clazz extends Data {\r\n        public static NAME: string = 'name';\r\n        public static ATTRIBUTES: string = 'attributes';\r\n        public static METHODS: string = 'methods';\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Clazz';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n\r\n        public getAttributes() {\r\n            return this.prop[Clazz.ATTRIBUTES];\r\n        }\r\n\r\n        public addToAttributes(newValue: string) {\r\n            this.addTo(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n\r\n        public removeFromAttributes(newValue: string) {\r\n            this.removeFrom(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n    }\r\n\r\n    export class Attribute extends Data {\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Attribute';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n    }\r\n\r\n    export class Methods extends Data {\r\n\r\n    }\r\n}\r\n\r\nwindow['UML'] = UML;\r\n","import {Control} from './Control';\r\n\r\nexport class VirtualKeyBoard extends Control {\r\n    constructor(data: any) {\r\n        super();\r\n        if (!data) {\r\n            data = this.getDefault();\r\n        }\r\n        let board = document.createElement('div');\r\n        this.$viewData = data;\r\n\r\n        for (let type in data) {\r\n            if (type === 'normal') {\r\n                for (let line in data[type]) {\r\n                    let lineBoard = document.createElement('div');\r\n                    lineBoard.className = 'vkLine';\r\n                    for (let key in data[type][line]) {\r\n                        let btn: HTMLButtonElement = document.createElement('button');\r\n                        let keyTag = data[type][line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                        btn.ontouchend = () => {this.action(btn); };\r\n                        btn.onclick = () => {this.action(btn); };\r\n                        lineBoard.appendChild(btn);\r\n                    }\r\n                    board.appendChild(lineBoard);\r\n                }\r\n            }\r\n        }\r\n        this.$view = board;\r\n    }\r\n\r\n    public action(btn: HTMLButtonElement) {\r\n        if (btn['key'] === '{Shift}') {\r\n            if ( btn.className === 'vkbuttonAction') {\r\n                let keys = this.$viewData['normal'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                    }\r\n                }\r\n            } else if ( btn.className === 'vkbutton') {\r\n                let keys = this.$viewData['shift'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbuttonAction');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        alert(btn);\r\n    }\r\n\r\n    public getDefault(): any {\r\n        let format = {\r\n            normal: [\r\n                ['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '?', '´', '{Bksp}'],\r\n                ['{Tab}', 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+'],\r\n                ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '#', '{enter}'],\r\n                ['{Shift}', '<', 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n// '{left}', '{up}', '{down}','{right}', '{Cancel}']\r\n            ],\r\n            shift: [\r\n                ['°', '!', '\"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '`', '{Bksp}'],\r\n                ['{Tab}', 'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', 'O', 'P', 'Ü', '*'],\r\n                ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', '\\'', '{enter}'],\r\n                ['{Shift}', '>', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n            ]\r\n        };\r\n        return format;\r\n    }\r\n\r\n    public getBoard() {\r\n        return this.$view;\r\n    }\r\n\r\n    private setButtonValue(keyTag: string, btn: HTMLButtonElement, shiftClass: string) {\r\n        btn.className = 'vkbutton';\r\n        btn['key'] = keyTag;\r\n        btn['type'] = 'normal';\r\n        if (keyTag.substring(0, 1) === '{') {\r\n            if (keyTag === '{Bksp}') {\r\n                btn.innerHTML = 'Bksp';\r\n            } else if (keyTag === '{Tab}') {\r\n                btn.innerHTML = '&#8677; Tab';\r\n            } else if (keyTag === '{enter}') {\r\n                btn.innerHTML = 'enter';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Shift}') {\r\n                btn.innerHTML = 'Shift';\r\n                btn.className = shiftClass;\r\n            } else if (keyTag === '{Accept}') {\r\n                btn.innerHTML = 'Accept';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Alt}') {\r\n                btn.innerHTML = 'Alt';\r\n            } else if (keyTag === '{Space}') {\r\n                btn.innerHTML = '&nbsp;';\r\n                btn.className = 'vkbuttonSpace';\r\n            } else if (keyTag === '{left}') {\r\n                btn.innerHTML = '&#8592';\r\n            } else if (keyTag === '{right}') {\r\n                btn.innerHTML = '&#8594;';\r\n            } else if (keyTag === '{up}') {\r\n                btn.innerHTML = '&#8593;';\r\n            } else if (keyTag === '{down}') {\r\n                btn.innerHTML = '&#8595;';\r\n            } else if (keyTag === '{Cancel}') {\r\n                btn.innerHTML = 'Cancel';\r\n                btn.className = 'vkbuttonAction';\r\n            }\r\n        } else {\r\n            btn.innerHTML = keyTag;\r\n        }\r\n    }\r\n}\r\n","import {Adapter} from '../Adapter';\r\n\r\nexport class JavaAdapter extends Adapter {\r\n    constructor() {\r\n        super();\r\n        this.id = 'JavaAdapter';\r\n    }\r\n    update(evt: Object): boolean {\r\n        if (this.isActive()) {\r\n            window['JavaBridge'].executeChange(evt);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public isActive(): boolean {\r\n        return window['JavaBridge'];\r\n    }\r\n}\r\n","export * from './JavaAdapter';\r\n","import { Util } from '../util';\r\nimport { Control } from '../Control';\r\n\r\nexport interface Size {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\ninterface GraphElement {\r\n    getSize(): Point;\r\n\r\n    getPos(): Point;\r\n\r\n    getCenter(): Point;\r\n\r\n    getSVG(): Element;\r\n\r\n    getCanvas(): Element;\r\n\r\n    getEvents(): string[];\r\n\r\n    withPos(x: number, y: number): GraphElement;\r\n\r\n    load(data: any): any;\r\n\r\n    getToolBarIcon(): Element;\r\n\r\n    loadProperties(properties: any): void;\r\n}\r\n\r\nexport abstract class DiagramElement extends Control implements GraphElement {\r\n\r\n    protected $isDraggable: boolean = true;\r\n    protected $labelHeight = 25;\r\n    protected $labelFontSize = 14;\r\n    private $pos: Point = new Point();\r\n    private $size: Point = new Point();\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getPos(): Point {\r\n        return this.$pos;\r\n    }\r\n\r\n    public getSize(): Point {\r\n        return this.$size;\r\n    }\r\n\r\n    public getCenter(): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        return new Point(pos.x + size.x / 2, pos.y + size.y / 2);\r\n    }\r\n\r\n    public getCenterPosition(p: string): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let offset = this['$' + p];\r\n        let center = this.getCenter();\r\n        if (p === Point.DOWN) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y + size.y, Point.DOWN);\r\n        }\r\n        if (p === Point.UP) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y, Point.UP);\r\n        }\r\n        if (p === Point.LEFT) {\r\n            return new Point(pos.x, Math.min(center.y + offset, pos.y + size.y), Point.LEFT);\r\n        }\r\n        if (p === Point.RIGHT) {\r\n            return new Point(pos.x + size.x, Math.min(center.y + offset, pos.y + size.y), Point.RIGHT);\r\n        }\r\n        return new Point();\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getCanvas(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return null;\r\n    }\r\n\r\n    public getAlreadyDisplayingSVG(): Element {\r\n        return document.getElementById(this.id) || this.getSVG();\r\n    }\r\n\r\n    public load(data: any) {\r\n        // Do Nothing\r\n    }\r\n\r\n    public withPos(x: number, y: number): GraphElement {\r\n        if (x && y) {\r\n            this.$pos = new Point(x, y);\r\n        } else {\r\n            if (typeof (x) !== 'undefined' && x !== null) {\r\n                this.$pos.x = x;\r\n            }\r\n            if (typeof (y) !== 'undefined' && y !== null) {\r\n                this.$pos.y = y;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public withSize(width: number, height: number): DiagramElement {\r\n        if (width && height) {\r\n            this.$size = new Point(width, height);\r\n        } else {\r\n            if (typeof (width) !== 'undefined' && width !== null) {\r\n                this.$size.x = width;\r\n            }\r\n            if (typeof (height) !== 'undefined' && height !== null) {\r\n                this.$size.y = height;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        // FIXME if (this.status === 'close') {\r\n        // if (!this.$owner.isClosed()) {\r\n        //        return this;\r\n        //    }\r\n        // }\r\n        return super.getShowed();\r\n    }\r\n\r\n    public loadProperties(properties: any) {\r\n        // DO Nothing\r\n    }\r\n\r\n    protected createShape(attrs: any): Element {\r\n        return Util.createShape(attrs);\r\n    }\r\n}\r\n\r\nexport class Point {\r\n    public static UP: string = 'UP';\r\n    public static LEFT: string = 'LEFT';\r\n    public static RIGHT: string = 'RIGHT';\r\n    public static DOWN: string = 'DOWN';\r\n    x: number = 0;\r\n    y: number = 0;\r\n\r\n    //    pos:string = '';\r\n\r\n    constructor(x?: number, y?: number, pos?: string) {\r\n        this.x = Math.ceil(x || 0);\r\n        this.y = Math.ceil(y || 0);\r\n        if (pos) {\r\n            this['pos'] = pos;\r\n        }\r\n    }\r\n\r\n    public add(pos: Point) {\r\n        this.x += pos.x;\r\n        this.y += pos.y;\r\n        return this;\r\n    }\r\n\r\n    public getPosition(): string {\r\n        if (!this['pos']) {\r\n            return '';\r\n        }\r\n        return this['pos'];\r\n    }\r\n\r\n    public addNum(x: number, y: number) {\r\n        this.x += x;\r\n        this.y += y;\r\n        return this;\r\n    }\r\n\r\n    public sum(pos: Point) {\r\n        let sum = new Point(this.x, this.y);\r\n        sum.add(pos);\r\n        return sum;\r\n    }\r\n\r\n    public center(posA: Point, posB: Point) {\r\n        let count = 0;\r\n        if (posA) {\r\n            this.x += posA.x;\r\n            this.y += posA.y;\r\n            count++;\r\n        }\r\n        if (posB) {\r\n            this.x += posB.x;\r\n            this.y += posB.y;\r\n            count++;\r\n        }\r\n        if (count > 0) {\r\n            this.x = (this.x / count);\r\n            this.y = (this.y / count);\r\n        }\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        return this.x < 1 && this.y < 1;\r\n    }\r\n\r\n    public size(posA: Point, posB: Point) {\r\n        let x1 = 0, x2 = 0, y1 = 0, y2 = 0;\r\n        if (posA) {\r\n            x1 = posA.x;\r\n            y1 = posA.y;\r\n        }\r\n        if (posB) {\r\n            x2 = posB.x;\r\n            y2 = posB.y;\r\n        }\r\n        if (x1 > x2) {\r\n            this.x = x1 - x2;\r\n        } else {\r\n            this.x = x2 - x1;\r\n        }\r\n        if (y1 > y2) {\r\n            this.y = y1 - y2;\r\n        } else {\r\n            this.y = y2 - y1;\r\n        }\r\n    }\r\n}\r\n\r\n// \t\t\t\t######################################################### Line #########################################################\r\nexport class Line extends DiagramElement {\r\n    public static FORMAT = { SOLID: 'SOLID', DOTTED: 'DOTTED', PATH: 'PATH' };\r\n    public source: Point;\r\n    public target: Point;\r\n    public color: string;\r\n    public lineType: string;\r\n    private path: string;\r\n    private angle: Number;\r\n\r\n    constructor(lineType: string) {\r\n        super();\r\n        this.lineType = lineType;\r\n    }\r\n\r\n    public getTyp(): string {\r\n        return 'SVG';\r\n    }\r\n\r\n    public getPos() {\r\n        let pos = new Point();\r\n        pos.center(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public getSize() {\r\n        let pos = new Point();\r\n        pos.size(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public withColor(color: string): Line {\r\n        this.color = color;\r\n        return this;\r\n    }\r\n\r\n    public withSize(x: number, y: number): DiagramElement {\r\n        return this;\r\n    }\r\n\r\n    public withPath(path: Array<Point>, close: boolean, angle?: any): Line {\r\n        let i: number, d: string = 'M' + path[0].x + ' ' + path[0].y;\r\n        this.lineType = Line.FORMAT.PATH; // It is a Path not a Line\r\n        for (i = 1; i < path.length; i += 1) {\r\n            d = d + 'L ' + path[i].x + ' ' + path[i].y;\r\n        }\r\n        if (close) {\r\n            d = d + ' Z';\r\n            this.target = path[0];\r\n        } else {\r\n            this.target = path[path.length - 1];\r\n        }\r\n        this.path = d;\r\n        if (angle instanceof Number) {\r\n            this.angle = angle;\r\n        } else if (angle) {\r\n            // var lineangle, start = path[0], end = path[path.length - 1];\r\n            // lineangle = Math.atan2(end.y - start.y, end.x - start.x);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): SVGGElement {\r\n        if (this.lineType === 'PATH') {\r\n            return <SVGGElement>Util.create({\r\n                tag: 'path',\r\n                'd': this.path,\r\n                'fill': this.color,\r\n                stroke: '#000',\r\n                'stroke-width': '1px'\r\n            });\r\n        }\r\n        let line: SVGGElement = <SVGGElement>Util.create({\r\n            tag: 'line',\r\n            'x1': this.source.x,\r\n            'y1': this.source.y,\r\n            'x2': this.target.x,\r\n            'y2': this.target.y,\r\n            'stroke': Util.getColor(this.color)\r\n        });\r\n        if (this.lineType && this.lineType.toLowerCase() === 'dotted') {\r\n            line.setAttribute('stroke-miterlimit', '4');\r\n            line.setAttribute('stroke-dasharray', '1,1');\r\n        }\r\n        return line;\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport Options from '../Options';\r\nimport {JavaAdapter} from '../adapters';\r\n\r\nexport class ClassEditor extends Graph {\r\n    private adapter: JavaAdapter;\r\n    constructor(json: any, options: Options) {\r\n        if (!options ) {\r\n            options = {};\r\n        }\r\n        options.canvas = options.canvas || 'canvas';\r\n        // options.origin = options.origin || new Point(150, 45);\r\n//            layout: \"DagreLayout\",\r\n        options.autoSave = options.autoSave || true;\r\n        if (!options.features) {\r\n            options.features = {\r\n                drag: true,\r\n                editor: true,\r\n                palette: true,\r\n                select: true,\r\n                zoom: true,\r\n                toolbar: true,\r\n                import: true,\r\n                properties: true,\r\n                addnode: true,\r\n                newedge: true\r\n            };\r\n        }\r\n        super(json, options);\r\n    }\r\n\r\n    public setBoardStyle(value: string) {\r\n        console.log(value);\r\n        this.importFile.setBoardStyle(value);\r\n    }\r\n\r\n    public registerListener(): void {\r\n        this.adapter = new JavaAdapter();\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return this.adapter;\r\n    }\r\n}\r\n","import * as edges from './edges';\r\nimport { Association } from './edges';\r\nimport * as nodes from './nodes';\r\nimport * as layouts from '../layouts';\r\nimport Layout from '../layouts/Layout';\r\nimport { GraphModel } from './Model';\r\nimport { Point, Size } from './BaseElements';\r\nimport { Util } from '../util';\r\nimport { Control } from '../Control';\r\nimport Data from '../Data';\r\nimport { EventBus } from '../EventBus';\r\nimport { AddNode, Drag, NewEdge, Select, Zoom } from '../handlers';\r\nimport Options from '../Options';\r\nimport { ImportFile } from '../handlers/ImportFile';\r\nimport { CSS } from '../CSS';\r\nimport { DiagramElement } from './index';\r\nimport { Toolbar } from '../Toolbar';\r\nimport {JSEPS} from '../JSEPS';\r\nimport {SVGConverter} from '../SVGConverter';\r\nimport Palette from '../Palette';\r\nimport {PanelGroup} from '../PropertiesPanel';\r\n\r\nexport class Graph extends Control {\r\n    // canvas: HTMLElement;\r\n    root: SVGElement;\r\n    $graphModel: GraphModel;\r\n    options: Options;\r\n    canvasSize: Size;\r\n    nodeFactory: Object;\r\n    edgeFactory: Object;\r\n    layoutFactory: Object;\r\n    protected importFile: ImportFile;\r\n    private currentlayout: Layout;\r\n    // private layerToolBar: SVGSVGElement;\r\n    // https://stackoverflow.com/questions/15181452/how-to-save-export-inline-svg-styled-with-css-from-browser-to-image-file\r\n    private containerElements = ['svg', 'g'];\r\n    private relevantStyles = {\r\n        'rect': ['fill', 'stroke', 'stroke-width'],\r\n        'path': ['fill', 'stroke', 'stroke-width', 'opacity'],\r\n        'circle': ['fill', 'stroke', 'stroke-width'],\r\n        'line': ['stroke', 'stroke-width'],\r\n        'text': ['fill', 'font-size', 'text-anchor', 'font-family'],\r\n        'polygon': ['stroke', 'fill']\r\n    };\r\n\r\n    constructor(json: any, options: Options) {\r\n        super();\r\n        json = json || {};\r\n        if (json['data']) {\r\n            options = json['options'];\r\n            json = json['data'];\r\n            this.id = json['id'];\r\n        }\r\n        this.options = options || {features: { drag: true}};\r\n        if (json['init']) {\r\n            return;\r\n        }\r\n        if (!this.options.origin) {\r\n            this.options.origin = new Point(150, 45);\r\n        }\r\n        if (!this.options.style) {\r\n            // Style can be classic or modern\r\n            this.options.style = 'classic';\r\n        }\r\n        if (this.options.autoSave) {\r\n            Util.isAutoSave = options.autoSave;\r\n        }\r\n\r\n        this.initFactories();\r\n        this.initCanvas();\r\n        this.initFeatures(this.options.features);\r\n\r\n        // load previous session, if user wants it\r\n        // otherwise load the json data\r\n        if (!this.lookupInLocalStorage()) {\r\n            this.load(json);\r\n        }\r\n\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    public lookupInLocalStorage(): boolean {\r\n        if (!this.options.autoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (!Util.isLocalStorageSupported()) {\r\n            return false;\r\n        }\r\n        let diagram = Util.getDiagramFromLocalStorage();\r\n        if (diagram && diagram.length > 0) {\r\n            if (confirm('Restore previous session?')) {\r\n                let jsonData: JSON = JSON.parse(diagram);\r\n                this.load(jsonData);\r\n                this.layout();\r\n                return true;\r\n            } else {\r\n                Util.saveToLocalStorage( null);\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public fitSizeOnNodes(): void {\r\n        let maxWidth: number = 0;\r\n        let maxHeight: number = 0;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            let nodePos = node.getPos();\r\n            let nodeSize = node.getSize();\r\n            let nodeWidestPosX = nodePos.x + nodeSize.x;\r\n            let nodeWidestPosY = nodePos.y + nodeSize.y;\r\n\r\n            if (nodeWidestPosX > maxWidth) {\r\n                maxWidth = nodeWidestPosX;\r\n            }\r\n\r\n            if (nodeWidestPosY > maxHeight) {\r\n                maxHeight = nodeWidestPosY;\r\n            }\r\n        }\r\n\r\n        this.root.setAttributeNS(null, 'width', '' + (maxWidth + 100));\r\n        this.root.setAttributeNS(null, 'height', '' + (maxHeight + 50));\r\n    }\r\n\r\n    public saveAs(typ: string) {\r\n        typ = typ.toLowerCase();\r\n\r\n        // shrink size of graph to minimum. only to show up nodes\r\n        const currentSize = this.getRootSize();\r\n        this.fitSizeOnNodes();\r\n\r\n        if (typ === 'svg') {\r\n            this.exportSvg();\r\n        } else if (typ === 'png') {\r\n            this.exportPng();\r\n        } else if (typ === 'html') {\r\n            this.exportHtml();\r\n\r\n        } else if (typ === 'pdf') {\r\n            this.exportPdf();\r\n            // } else if (typ === 'eps') {\r\n            // this.ExportEPS();\r\n        }\r\n        else if (typ === 'json') {\r\n            this.exportJson();\r\n        }\r\n\r\n        // set the size back to default\r\n        this.root.setAttributeNS(null, 'width', '' + currentSize.width);\r\n        this.root.setAttributeNS(null, 'height', '' + currentSize.height);\r\n    }\r\n\r\n    /**\r\n     * generates a blob file and makes it available for download.\r\n     * @param type type of file\r\n     * @param data raw data\r\n     * @param name name of download file\r\n     */\r\n    public save(type: string, data: any, name: string, context: string) {\r\n        if (window['java']) {\r\n            window['java'].export(type, data, name, context);\r\n            return;\r\n        }\r\n        let a = document.createElement('a');\r\n        a.href = window.URL.createObjectURL(new Blob([data], { type: context }));\r\n        a.download = name;\r\n        document.body.appendChild(a);\r\n        a.click();\r\n        document.body.removeChild(a);\r\n    }\r\n\r\n    /** Exports the diagram as svg. */\r\n    public exportSvg(): void {\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        this.save('svg', this.serializeXmlNode(wellFormatedSvgDom), 'class_diagram.svg', 'image/svg+xml');\r\n    }\r\n\r\n    /** Exports the diagram as html. */\r\n    public exportHtml(): void {\r\n        let htmlFacade = '<html><head><title>DiagramJS - Classdiagram</title></head><body>$content</body></html>';\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        let svgAsXml = this.serializeXmlNode(wellFormatedSvgDom);\r\n\r\n        let htmlResult = htmlFacade.replace('$content', svgAsXml);\r\n\r\n        this.save('html', htmlResult, 'class_diagram.htm', 'text/plain');\r\n    }\r\n\r\n    /** Exports the diagram as json. */\r\n    public exportJson(): void {\r\n        let type = 'text/plain';\r\n        let jsonObj = Util.toJson(this.$graphModel);\r\n        let data = JSON.stringify(jsonObj, null, '\\t');\r\n\r\n        this.save('json', data, 'class_diagram.json', type);\r\n    }\r\n\r\n    /** Exports the diagram as pdf. */\r\n    public exportPdf(): void {\r\n        if (!window['jsPDF']) {\r\n            console.log('jspdf n.a.');\r\n            return;\r\n        }\r\n        let type = 'image/svg+xml';\r\n        let converter, pdf = new window['jsPDF']('l', 'px', [this.$graphModel.getSize().x, this.$graphModel.getSize().y]);\r\n        converter = new SVGConverter(this.$view, pdf, {removeInvalid: false});\r\n        pdf.save('Download.pdf');\r\n/*        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let canvas, context, a, image = new Image();\r\n        let size = this.getRootSize();\r\n\r\n        // create the loaded img source into a canvas. to generate a picture. then place this picture in the pdf\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            let pdf = new window['jsPDF']();\r\n\r\n            pdf.addImage(canvas.toDataURL('image/jpeg'), 'jpeg', 15, 40, 180, 160);\r\n            pdf.save('class_diagram.pdf');\r\n\r\n        };\r\n\r\n        image.src = url;\r\n        */\r\n    }\r\n\r\n    public import(data: string): void {\r\n        let rootElement = this.$graphModel.$view;\r\n        while (rootElement.hasChildNodes()) {\r\n            rootElement.removeChild(rootElement.firstChild);\r\n        }\r\n\r\n        while (this.$view.hasChildNodes()) {\r\n            this.$view.removeChild(this.$view.firstChild);\r\n        }\r\n\r\n        this.clearModel();\r\n        let jsonData = JSON.parse(data);\r\n        this.load(jsonData);\r\n        this.layout();\r\n    }\r\n\r\n    public exportEPS(): void {\r\n          let converter, doc = new JSEPS({inverting: true});\r\n            converter = new SVGConverter(this.$view, doc, {removeInvalid: false});\r\n            this.save('eps', doc.getData(), 'diagram.eps', doc.getType());\r\n    }\r\n\r\n    /** Exports the diagram as png. */\r\n    public exportPng(): void {\r\n        let canvas, context, a, image = new Image();\r\n        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let typ = 'image/svg+xml';\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let size = this.getRootSize();\r\n\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            a = document.createElement('a');\r\n            a.download = 'class_diagram.png';\r\n            a.href = canvas.toDataURL('image/png');\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            document.body.removeChild(a);\r\n        };\r\n\r\n        image.src = url;\r\n\r\n    }\r\n\r\n    public getSvgWithStyleAttributes(): Node {\r\n        let oDOM = this.$graphModel.$view.cloneNode(true);\r\n        this.readElement(oDOM, this.$graphModel.$view);\r\n\r\n        return oDOM;\r\n    }\r\n\r\n    public serializeXmlNode(xmlNode: any) {\r\n        if (window['XMLSerializer'] !== undefined) {\r\n            return (new window['XMLSerializer']()).serializeToString(xmlNode);\r\n        }\r\n        if (xmlNode.xml !== undefined) {\r\n            return xmlNode.xml;\r\n        }\r\n        return xmlNode.outerHTML;\r\n    }\r\n\r\n    public getRootSize(): Size {\r\n        let width: number;\r\n        let height: number;\r\n        width = +this.root.getAttribute('width');\r\n        height = +this.root.getAttribute('height');\r\n\r\n        return { width: width, height: height };\r\n    }\r\n\r\n        // Graph.prototype.ExportEPS = function () {\r\n        //     var converter, doc = new svgConverter.jsEPS({inverting: true});\r\n        //     converter = new svgConverter(this.board, doc, {removeInvalid: false});\r\n        //     doc.save();\r\n        // };\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        this.$graphModel = new GraphModel();\r\n        this.$graphModel.init(this);\r\n        this.$graphModel.load(json);\r\n    }\r\n\r\n    public clearModel(): void {\r\n        this.$graphModel.removeAllElements();\r\n        this.clearSvgRoot();\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.layout();\r\n        return this;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        return;\r\n    }\r\n\r\n    public getNextFreePosition(): Point {\r\n\r\n        if (!this.$graphModel) {\r\n            return new Point(50, 50);\r\n        }\r\n\r\n        let point = new Point(0, 50);\r\n\r\n        let maxX = 0;\r\n        let minX = 9000;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            maxX = Math.max(maxX, node.getPos().x);\r\n            minX = Math.min(minX, node.getPos().x);\r\n        }\r\n\r\n        if (minX > 170) {\r\n            point.x = 10;\r\n        }\r\n        else {\r\n            point.x = maxX + 200;\r\n        }\r\n\r\n        return point;\r\n    }\r\n\r\n    public addElement(type: string, dontDraw?: boolean): boolean {\r\n        let success = this.$graphModel.addElement(type);\r\n        if (success === true) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return success;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues?: Object, layout?: boolean, dontDraw?: boolean): DiagramElement {\r\n        let element = this.$graphModel.addElementWithValues(type, optionalValues);\r\n        if (element && layout) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public layout(dontDraw?: boolean): Graph {\r\n        this.getLayout().layout(this, this.$graphModel);\r\n\r\n        if (dontDraw) {\r\n            return this;\r\n        }\r\n\r\n        this.draw();\r\n        return this;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTDRAGOVER, EventBus.ELEMENTDRAGLEAVE, EventBus.ELEMENTDROP];\r\n    }\r\n\r\n    public draw() {\r\n        this.clearSvgRoot();\r\n        let model = this.$graphModel;\r\n        let root = this.root;\r\n        let max: Point = new Point();\r\n        if (this.options) {\r\n            max.x = this.options.minWidth || 0;\r\n            max.y = this.options.minHeight || 0;\r\n        }\r\n\r\n        for (let node of model.nodes) {\r\n            let svg = node.getSVG();\r\n            EventBus.register(node, svg);\r\n            root.appendChild(svg);\r\n\r\n            let temp: number;\r\n            temp = node.getPos().x + node.getSize().x;\r\n            if (temp > max.x) {\r\n                max.x = temp;\r\n            }\r\n            temp = node.getPos().y + node.getSize().y;\r\n            if (temp > max.y) {\r\n                max.y = temp;\r\n            }\r\n\r\n        }\r\n        Util.setAttributeSize(this.root, max.x + 60, max.y + 40);\r\n\r\n        for (let edge of model.edges) {\r\n            let svg = edge.getSVG();\r\n            EventBus.register(edge, svg);\r\n            root.appendChild(svg);\r\n        }\r\n    }\r\n\r\n    public getNode(id: string) {\r\n        return this.$graphModel.getNodeById(id);\r\n    }\r\n\r\n    public drawElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let svg = element.getSVG();\r\n        this.root.appendChild(svg);\r\n\r\n        // actualize root width size, if neccessary\r\n        // get current width of root\r\n        let rootSize = this.getRootSize();\r\n        let newWidth = element.getPos().x + element.getSize().x + 40;\r\n        let newHeight = element.getPos().y + element.getSize().y;\r\n\r\n        if (rootSize.width < newWidth) {\r\n            this.root.setAttributeNS(null, 'width', '' + newWidth);\r\n        }\r\n\r\n        if (rootSize.height < newHeight) {\r\n            this.root.setAttributeNS(null, 'height', '' + newHeight);\r\n        }\r\n\r\n        // draw edge\r\n        if (element instanceof Association) {\r\n            let edge = <Association>element;\r\n            edge.redraw(edge.$sNode);\r\n            let srcSvg = element.$sNode.getAlreadyDisplayingSVG();\r\n            let targetSvg = element.$tNode.getAlreadyDisplayingSVG();\r\n\r\n            this.root.appendChild(srcSvg);\r\n            this.root.appendChild(targetSvg);\r\n        }\r\n\r\n        EventBus.register(element, svg);\r\n    }\r\n\r\n    public removeElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let alreadyDisplayingSvg = element.getAlreadyDisplayingSVG();\r\n        if (Util.isParentOfChild(this.root, alreadyDisplayingSvg)) {\r\n            this.root.removeChild(alreadyDisplayingSvg);\r\n        }\r\n    }\r\n\r\n    public generate(packageName: string, path?: string) {\r\n        this.$graphModel.package = packageName;\r\n        this.$graphModel.genPath = path;\r\n\r\n        let data, result = Util.toJson(this.$graphModel);\r\n        data = JSON.stringify(result, null, '\\t');\r\n        if (window['java'] && typeof window['java'].generate === 'function') {\r\n            window['java'].generate(data);\r\n        }\r\n    }\r\n// REFACTORING dd\r\n    private readElement(parent: any, origData: any): void {\r\n        let children = parent.childNodes;\r\n        let origChildDat = origData.childNodes;\r\n\r\n        for (let cd = 0; cd < children.length; cd++) {\r\n            let child = children[cd];\r\n\r\n            let tagName = child.tagName;\r\n            if (this.containerElements.indexOf(tagName) !== -1) {\r\n                this.readElement(child, origChildDat[cd]);\r\n            } else if (tagName in this.relevantStyles) {\r\n                let styleDef = window.getComputedStyle(origChildDat[cd]);\r\n\r\n                let styleString = '';\r\n                for (let st = 0; st < this.relevantStyles[tagName].length; st++) {\r\n                    styleString += this.relevantStyles[tagName][st] + ':' + styleDef.getPropertyValue(this.relevantStyles[tagName][st]) + '; ';\r\n                }\r\n\r\n                child.setAttribute('style', styleString);\r\n            }\r\n        }\r\n    }\r\n\r\n    private createPattern(): Element {\r\n        const defs = Util.createShape({ tag: 'defs' });\r\n        const pattern = Util.createShape({\r\n            tag: 'pattern',\r\n            id: 'raster',\r\n            patternUnits: 'userSpaceOnUse',\r\n            width: 40,\r\n            height: 40\r\n        });\r\n        const path = 'M0 4 L0 0 L4 0 M36 0 L40 0 L40 4 M40 36 L40 40 L36 40 M4 40 L0 40 L0 36';\r\n        const cross = Util.createShape({\r\n            tag: 'path',\r\n            d: path,\r\n            stroke: '#DDD',\r\n            'stroke-width': 1,\r\n            fill: 'none'\r\n        });\r\n\r\n        const rect = Util.createShape({\r\n            tag: 'rect',\r\n            x: 0,\r\n            y: 0,\r\n            width: 40,\r\n            height: 40,\r\n            fill: 'none'\r\n        });\r\n        pattern.appendChild(rect);\r\n        pattern.appendChild(cross);\r\n        defs.appendChild(pattern);\r\n        return defs;\r\n    }\r\n\r\n    private clearSvgRoot() {\r\n        const root = this.root;\r\n        this.$graphModel.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n        while (root.firstChild) {\r\n            root.removeChild(root.firstChild);\r\n        }\r\n\r\n        root.appendChild(this.createPattern());\r\n        let fillValue = 'none';\r\n        if (this.options.raster) {\r\n            fillValue = 'url(#raster)';\r\n        }\r\n        let background = Util.createShape({\r\n            tag: 'rect',\r\n            id: 'background',\r\n            width: 5000,\r\n            height: 5000,\r\n            x: 0,\r\n            y: 0,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: fillValue\r\n        });\r\n        root.appendChild(background);\r\n\r\n        // delete inline Edit, if exists\r\n        let inlineEdit = document.getElementById('inlineEdit');\r\n        if (inlineEdit && document.body.contains(inlineEdit)) {\r\n            document.body.removeChild(inlineEdit);\r\n        }\r\n    }\r\n\r\n    private getLayout(): Layout {\r\n        if (this.currentlayout) {\r\n            return this.currentlayout;\r\n        }\r\n\r\n        let layout = this.options.layout || '';\r\n        if (this.layoutFactory[layout]) {\r\n            this.currentlayout = new this.layoutFactory[layout]();\r\n        } else {\r\n            this.currentlayout = new layouts.DagreLayout();\r\n        }\r\n\r\n        return this.currentlayout;\r\n    }\r\n\r\n    private initFactories() {\r\n\r\n        let noder = nodes;\r\n        this.nodeFactory = {};\r\n        for (let id in noder) {\r\n            if (noder.hasOwnProperty(id) === true) {\r\n                this.nodeFactory[id] = noder[id];\r\n            }\r\n        }\r\n\r\n        let edger = edges;\r\n        this.edgeFactory = {};\r\n        for (let id in edger) {\r\n            if (edger.hasOwnProperty(id) === true) {\r\n                this.edgeFactory[id] = edger[id];\r\n            }\r\n        }\r\n\r\n        let layouter = layouts;\r\n        this.layoutFactory = {};\r\n        for (let id in layouter) {\r\n            if (layouter.hasOwnProperty(id) === true) {\r\n                this.layoutFactory[id] = layouter[id];\r\n            }\r\n        }\r\n    }\r\n\r\n    private initCanvas() {\r\n        if (this.options.canvas) {\r\n            this.$view = document.getElementById(this.options.canvas);\r\n        }\r\n        if (!this.$view) {\r\n            this.$view = document.createElement('div');\r\n            this.$view.setAttribute('class', 'diagram');\r\n            document.body.appendChild(this.$view);\r\n        }\r\n    }\r\n\r\n    private initFeatures(features: any) {\r\n\r\n        if (features) {\r\n            if (features.newedge) {\r\n                EventBus.subscribe(new NewEdge(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            this.importFile = new ImportFile(this);\r\n            if (features.import) {\r\n                EventBus.subscribe(this.importFile, 'dragover', 'dragleave', 'drop');\r\n            }\r\n            if (features.zoom) {\r\n                let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n                EventBus.subscribe(new Zoom(this), mousewheel);\r\n            }\r\n            if (features.drag) {\r\n                EventBus.subscribe(new Drag(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            if (features.select) {\r\n                EventBus.subscribe(new Select(this), 'click', 'drag');\r\n            }\r\n            if (features.palette) {\r\n                new Palette(this).show();\r\n            }\r\n            if (features.toolbar) {\r\n                new Toolbar(this).show();\r\n            }\r\n            if (features.properties) {\r\n                let propertyPanel = new PanelGroup(this);\r\n                // let dispatcher = new PropertiesDispatcher(this);\r\n                EventBus.subscribe(propertyPanel, 'dblclick', 'click', EventBus.RELOADPROPERTIES);\r\n                propertyPanel.show();\r\n            }\r\n            if (features.addnode) {\r\n                EventBus.subscribe(new AddNode(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n        }\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport {DiagramElement, Point} from './BaseElements';\r\nimport {Association} from './edges';\r\nimport {Node} from './nodes';\r\nimport {Control} from '../Control';\r\nimport {Util} from '../util';\r\nimport {EventBus} from '../EventBus';\r\n\r\nexport class GraphModel extends DiagramElement {\r\n    nodes: Node[] = [];\r\n    edges: Association[] = [];\r\n    package: string;\r\n    genPath: string;\r\n    $isLoading: boolean;\r\n\r\n    public load(data?: any) {\r\n\r\n        this.$isLoading = true;\r\n        data = data || {};\r\n        this.property = data.type || data.property || 'classdiagram';\r\n        this.id = 'RootElement';\r\n        if (data.nodes) {\r\n            for (let node of data.nodes) {\r\n                this.addNode(node);\r\n            }\r\n        }\r\n        if (data.edges) {\r\n            for (let edge of data.edges) {\r\n                this.addEdge(edge);\r\n            }\r\n        }\r\n\r\n        this.$isLoading = false;\r\n    }\r\n\r\n    public getNodeByPosition(x: number, y: number): Node {\r\n        for (let node of this.nodes) {\r\n            let posOfNode: Point = (<Node>node).getPos();\r\n            let sizeOfNode: Point = (<Node>node).getSize();\r\n\r\n            if ((posOfNode.x <= x && (posOfNode.x + sizeOfNode.x) >= x)\r\n                && (posOfNode.y <= y && (posOfNode.y + sizeOfNode.y) >= y)) {\r\n                return node;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.initCanvas();\r\n        return this;\r\n    }\r\n\r\n    public addElement(type: string): boolean {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n        if (element) {\r\n            Util.saveToLocalStorage(this);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues: Object): DiagramElement {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n\r\n        // position\r\n        if (optionalValues) {\r\n            if (optionalValues.hasOwnProperty('x') && optionalValues.hasOwnProperty('y')) {\r\n                let x = optionalValues['x'];\r\n                let y = optionalValues['y'];\r\n                element.withPos(x, y);\r\n            }\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return element;\r\n    }\r\n\r\n    public removeAllElements(): void {\r\n\r\n        let nodesLength = this.nodes.length;\r\n        for (let i = 0; i < nodesLength; i++) {\r\n            this.removeElement(this.nodes[0].id);\r\n        }\r\n\r\n        this.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n    }\r\n\r\n    public removeElement(id: string): boolean {\r\n\r\n        let element = this.getDiagramElementById(id);\r\n        if (!element) {\r\n            return false;\r\n        }\r\n\r\n        (<Graph>this.$owner).removeElement(element);\r\n\r\n        if (element instanceof Node) {\r\n\r\n            let idxOfNode = this.nodes.indexOf(element);\r\n            if (idxOfNode > -1) {\r\n                this.nodes.splice(idxOfNode, 1);\r\n            }\r\n\r\n            while (element.$edges.length > 0) {\r\n                this.removeElement(element.$edges[0].id);\r\n            }\r\n\r\n            element.$edges = [];\r\n        }\r\n        else if (element instanceof Association) {\r\n\r\n            let idxOfEdge = this.edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                this.edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from source\r\n            idxOfEdge = element.$sNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$sNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from target\r\n            idxOfEdge = element.$tNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$tNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return true;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        const size = 10;\r\n        const path = `M${-size} 0 L${+size} 0 M0 ${-size} L0 ${+size}`;\r\n\r\n        const attr = {\r\n            tag: 'path',\r\n            id: 'origin',\r\n            d: path,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: 'none'\r\n        };\r\n        let shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: 0 - size,\r\n            y: 0 - size / 1.5,\r\n            'text-anchor': 'end',\r\n            'font-family': 'Verdana',\r\n            'font-size': '9',\r\n            fill: '#999'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = '(0, 0)';\r\n\r\n        let group = this.createShape({tag: 'g'});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEUP, EventBus.ELEMENTMOUSELEAVE, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTMOUSEWHEEL, EventBus.ELEMENTCLICK, EventBus.ELEMENTDRAG];\r\n    }\r\n\r\n    public getNewId(prefix?: string): string {\r\n        let id = (prefix ? prefix.toLowerCase() + '-' : '') + Math.floor(Math.random() * 100000);\r\n        return id;\r\n    }\r\n\r\n    public getEdgeById(id: string): Association {\r\n        for (let edge of this.edges) {\r\n            if (edge.id === id) {\r\n                return edge;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    public getDiagramElementById(id: string): DiagramElement {\r\n\r\n        return this.getNodeById(id) || this.getEdgeById(id);\r\n    }\r\n\r\n    /**\r\n     * Add an edge with data in json file. Optional you can say, that the edge should have\r\n     * the points of source node and target node.\r\n     * @param edge information about edge in json\r\n     * @param withPosOfNodes optional. set points to line of source and target node\r\n     */\r\n    public addEdge(edge: any, withPosOfNodes?: boolean): Association {\r\n\r\n        // lookup in factoryedges and check if the edge type realy exists\r\n        if (edge && edge.type) {\r\n            const graph = (<Graph>this.$owner);\r\n            let typeExists = false;\r\n            for (let edgeType in graph.edgeFactory) {\r\n                if (edgeType === edge.type) {\r\n                    typeExists = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!typeExists) {\r\n                edge.type = 'Association';\r\n            }\r\n        }\r\n\r\n        let type = edge.type || 'Association';\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n\r\n        let newEdge = <Association>this.createElement(type, id, edge);\r\n        newEdge.type = type;\r\n\r\n        let source: Node;\r\n        let sourceAsString: string = edge.source.id || edge.source;\r\n        if (sourceAsString) {\r\n            source = this.getNodeById(sourceAsString);\r\n            if (!source) {\r\n                let nodeID = edge.source;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                source = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                source.init(this);\r\n            }\r\n        }\r\n\r\n        let target: Node;\r\n        let targetAsString: string = edge.target.id || edge.target;\r\n        if (targetAsString) {\r\n            target = this.getNodeById(targetAsString);\r\n            if (!target) {\r\n                let nodeID = edge.target;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                target = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                target.init(this);\r\n            }\r\n        }\r\n\r\n        newEdge.withItem(source, target);\r\n\r\n        if (withPosOfNodes) {\r\n            let srcX = source.getPos().x + (source.getSize().x / 2);\r\n            let srcY = source.getPos().y + (source.getSize().y / 2);\r\n\r\n            let targetX = target.getPos().x + (target.getSize().x / 2);\r\n            let targetY = target.getPos().y + (target.getSize().y / 2);\r\n\r\n            newEdge.addPoint(srcX, srcY);\r\n            newEdge.addPoint(targetX, targetY);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public createElement(type: string, id: string, data: Object): DiagramElement {\r\n        const graph = <Graph>this.$owner;\r\n        let element: DiagramElement;\r\n        if (graph.nodeFactory[type]) {\r\n            element = new graph.nodeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.nodes.push(<Node>element);\r\n        }\r\n        if (graph.edgeFactory[type]) {\r\n            element = new graph.edgeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.edges.push(<Association>element);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public getNodeById(id: string): Node {\r\n        for (let node of this.nodes) {\r\n            if (node.id === id) {\r\n                return node;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    private initCanvas() {\r\n        const graph = <Graph>this.$owner;\r\n        graph.canvasSize = {width: graph.$view.clientWidth, height: graph.$view.clientHeight};\r\n        graph.root = Util.createShape({\r\n            tag: 'svg',\r\n            id: 'root',\r\n            width: graph.canvasSize.width,\r\n            height: graph.canvasSize.height\r\n            // FIXME,viewBox: `${this.$graph.options.origin.x * -1} ${this.$graph.options.origin.y * -1} ${this.$graph.canvasSize.width} ${this.$graph.canvasSize.height}`\r\n        });\r\n        this.$view = graph.root;\r\n        graph.$view.appendChild(graph.root);\r\n\r\n        let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    private addNode(node: Node): Node {\r\n        let type = node['type'] || node.property || 'Node';\r\n        type = Util.toPascalCase(type);\r\n        let id = node['id'] || node['name'] || this.getNewId(type);\r\n\r\n        return <Node>this.createElement(type, id, node);\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction } from './index';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\n\r\nexport abstract class Aggregate extends Association {\r\n\r\n    protected $diamond: Element;\r\n\r\n    public getSVG(): Element {\r\n\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled diamond\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n        };\r\n\r\n        this.$diamond = this.createShape(attr);\r\n\r\n        group.appendChild(this.$diamond);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint: Point = this.$points[0];\r\n        let direction: Direction = Direction.Down;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if (this.$sNode.id === startNode.id || this.$points.length == 2) {\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$diamond.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint: Point, direction: Direction): string {\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                path = `M${startX} ${startY} L${startX + 6} ${startY + 10} L${startX} ${startY + 20} L${startX - 6} ${startY + 10} Z`;\r\n                startPoint.y = startPoint.y+20;\r\n                break;\r\n            case Direction.Right:\r\n                path = `M${startX} ${startY} L${startX - 10} ${startY + 6} L${startX - 20} ${startY} L${startX - 10} ${startY - 6} Z`;\r\n                startPoint.x = startPoint.x-20;\r\n                break;\r\n            case Direction.Left:\r\n                path = `M${startX} ${startY} L${startX + 10} ${startY - 6} L${startX + 20} ${startY} L${startX + 10} ${startY + 6} Z`;\r\n                startPoint.x = startPoint.x+20;\r\n                break;\r\n            case Direction.Down:\r\n                path = `M${startX} ${startY} L${startX - 6} ${startY - 10} L${startX} ${startY - 20} L${startX + 6} ${startY - 10} Z`;\r\n                startPoint.y = startPoint.y-20;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Aggregation extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'white');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { DiagramElement, Line, Point } from '../BaseElements';\r\nimport { Node } from '../nodes';\r\nimport { InfoText } from '../nodes/InfoText';\r\nimport { Util } from '../../util';\r\nimport { EventBus } from '../../EventBus';\r\nimport * as edges from '../edges';\r\nimport { Graph } from '../Graph';\r\n\r\nexport const enum Direction {\r\n    Up, Down, Left, Right\r\n}\r\n\r\nexport class Association extends DiagramElement {\r\n    public source: string;\r\n    public target: string;\r\n    public type: string;\r\n    public $sNode: Node;\r\n    public $tNode: Node;\r\n    public lineStyle: string;\r\n    public $points: Point[] = [];\r\n    public $pathSvg: Element;\r\n    public $pathWideSvg: Element;\r\n    public info: InfoText;\r\n    public sourceInfo: InfoText;\r\n    public targetInfo: InfoText;\r\n    $m: number;\r\n    $n: number;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super();\r\n\r\n        this.withData(data);\r\n    }\r\n\r\n    public withData(data: JSON | string | Object | any): Association {\r\n\r\n        if (!data) {\r\n            return this;\r\n        }\r\n        let srcInfo;\r\n        let trgInfo;\r\n\r\n        if (data.source && typeof data.source !== 'string') {\r\n            srcInfo = data.source;\r\n        }\r\n        else if (data.sourceInfo && typeof data.sourceInfo !== 'string') {\r\n            srcInfo = data.sourceInfo;\r\n        }\r\n\r\n        if (srcInfo) {\r\n            this.sourceInfo = new InfoText(srcInfo);\r\n            this.sourceInfo.$owner = this;\r\n        }\r\n\r\n        if (data.target && typeof data.target !== 'string') {\r\n            trgInfo = data.target;\r\n        }\r\n        else if (data.targetInfo && typeof data.targetInfo !== 'string') {\r\n            trgInfo = data.targetInfo;\r\n        }\r\n\r\n        if (trgInfo) {\r\n            this.targetInfo = new InfoText(trgInfo);\r\n            this.targetInfo.$owner = this;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    public updateSrcCardinality(cardinality: string): void {\r\n        this.sourceInfo = this.updateCardinality(this.$sNode, this.sourceInfo, cardinality);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetCardinality(cardinality: string): void {\r\n        this.targetInfo = this.updateCardinality(this.$tNode, this.targetInfo, cardinality);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateSrcProperty(property: string): void {\r\n        this.sourceInfo = this.updateProperty(this.$sNode, this.sourceInfo, property);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetProperty(property: string): void {\r\n        this.targetInfo = this.updateProperty(this.$tNode, this.targetInfo, property);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public withItem(source: Node, target: Node): Association {\r\n        source.$edges.push(this);\r\n        target.$edges.push(this);\r\n        this.$sNode = source;\r\n        this.$tNode = target;\r\n        this.source = source.id;\r\n        this.target = target.id;\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let group = Util.createShape({ tag: 'g', id: this.id, class: 'SVGEdge' });\r\n\r\n        let path: string = this.getPath();\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'none'\r\n        };\r\n        let pathLine = this.createShape(attr);\r\n\r\n        //attr['style'] = 'stroke-width:20;opacity:0;width:20;height:20';\r\n        let extendedPathLine = Util.createShape(attr);\r\n\r\n        group.appendChild(extendedPathLine);\r\n        group.appendChild(pathLine);\r\n\r\n        if (this.sourceInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.sourceInfo.getSVG());\r\n        }\r\n        if (this.targetInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.targetInfo.getSVG());\r\n        }\r\n\r\n        this.$pathWideSvg = extendedPathLine;\r\n        this.$pathSvg = pathLine;\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.EDITOR, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    public convertEdge(type: string, newId: string, redraw?: boolean): Association {\r\n        if (!edges[type]) {\r\n            return this;\r\n        }\r\n\r\n        let newEdge: Association = new edges[type]();\r\n        newEdge.withItem(this.$sNode, this.$tNode);\r\n        newEdge.id = newId;\r\n        newEdge.type = type;\r\n        newEdge.lineStyle = this.lineStyle;\r\n        newEdge.$owner = this.$owner;\r\n\r\n        if (this.sourceInfo) {\r\n            newEdge.sourceInfo = new InfoText({ property: this.sourceInfo.property, cardinality: this.sourceInfo.cardinality });\r\n            newEdge.sourceInfo.$owner = newEdge;\r\n        }\r\n\r\n        if (this.targetInfo) {\r\n            newEdge.targetInfo = new InfoText({ property: this.targetInfo.property, cardinality: this.targetInfo.cardinality });\r\n            newEdge.targetInfo.$owner = newEdge;\r\n        }\r\n\r\n        this.$points.forEach(point => {\r\n            newEdge.addPoint(point.x, point.y);\r\n        });\r\n\r\n        let graph = <Graph>this.getRoot();\r\n        if (!graph) {\r\n            return this;\r\n        }\r\n\r\n        // update model. insert the edge exact on the same index, like the old edge\r\n        let idx = graph.$graphModel.edges.indexOf(this);\r\n        graph.$graphModel.removeElement(this.id);\r\n        if (idx > -1) {\r\n            graph.$graphModel.edges.splice(idx, 0, newEdge);\r\n        }\r\n        else {\r\n            graph.$graphModel.edges.push(newEdge);\r\n        }\r\n\r\n        if (!redraw) {\r\n            return newEdge;\r\n        }\r\n\r\n        let svgRoot: Element;\r\n        if (graph) {\r\n            svgRoot = graph.root;\r\n        }\r\n        else {\r\n            svgRoot = document.getElementById('root');\r\n        }\r\n        let newEdgeSvg = newEdge.getSVG();\r\n\r\n        // update graph\r\n        graph.removeElement(this);\r\n        svgRoot.appendChild(newEdgeSvg);\r\n\r\n        // redraw the edge from both sides to get the correct display\r\n        // if the type is edge, so the path can be redraw.\r\n        // if not, so the inherited class redraw the path with his own logic\r\n\r\n        let dontDrawPath: boolean = (type !== 'Edge');\r\n        newEdge.redraw(newEdge.$sNode, dontDrawPath);\r\n        newEdge.redraw(newEdge.$tNode, dontDrawPath);\r\n\r\n        EventBus.register(newEdge, newEdgeSvg);\r\n\r\n        this.sourceInfo = undefined;\r\n        this.targetInfo = undefined;\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n        // redraw the first point\r\n        // check which point is the near to startnode\r\n        let endPoint: Point;\r\n        let recalcPoint: Point;\r\n        let endPointIdx: number;\r\n\r\n        if (this.$sNode.id === startNode.id) {\r\n            recalcPoint = this.$points[0];\r\n            endPointIdx = 1;\r\n        } else if (this.$tNode.id === startNode.id) {\r\n            recalcPoint = this.$points[this.$points.length - 1];\r\n            endPointIdx = this.$points.length - 2;\r\n        }\r\n\r\n        endPoint = this.$points[endPointIdx];\r\n\r\n        // calculate and set new position of point to redraw\r\n        this.calcIntersection(startNode, recalcPoint, endPoint);\r\n\r\n        // remove the 2nd point next to startnode, if the node was dragged upper the point\r\n        if (this.$points.length > 2 && this.$tNode.id === startNode.id && endPoint.y > (startNode.getPos().y + (startNode.getSize().y / 2))) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$tNode.id === startNode.id && this.$points.length === 2) {\r\n            this.calcIntersection(this.$sNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (this.$points.length > 2 && this.$sNode.id === startNode.id && (startNode.getPos().y + (startNode.getSize().y / 2) > endPoint.y)) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$sNode.id === startNode.id && this.$points.length === 2) {\r\n\r\n            this.calcIntersection(this.$tNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (!dontDrawPoints) {\r\n            this.redrawPointsAndInfo();\r\n        }\r\n    }\r\n\r\n    public getPath(): string {\r\n\r\n        if (this.$points.length === 0) {\r\n            return '';\r\n        }\r\n\r\n        let path: string = 'M';\r\n        for (let i = 0; i < this.$points.length; i++) {\r\n            let point: Point = this.$points[i];\r\n            if (i > 0) {\r\n                path += 'L';\r\n            }\r\n            path += Math.floor(point.x) + ' ' + Math.floor(point.y) + ' ';\r\n        }\r\n\r\n        return path;\r\n    }\r\n    public calcInfoPosNew(infoTxt: InfoText, node: Node): Point {\r\n\r\n        if (!infoTxt || !node) {\r\n            return null;\r\n        }\r\n\r\n        // 1. step: get direction\r\n        let startPoint: Point;\r\n        let nextToStartPoint: Point;\r\n        if (this.$sNode.id === node.id) {\r\n            startPoint = this.$points[0];\r\n            nextToStartPoint = this.$points[1];\r\n        }\r\n        else if (this.$tNode.id === node.id) {\r\n            startPoint = this.$points[this.$points.length - 1];\r\n            nextToStartPoint = this.$points[this.$points.length - 2];\r\n        }\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(node, startPoint);\r\n\r\n        let x: number;\r\n        let y: number;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                break;\r\n            case Direction.Right:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x - (infoTxt.getSize().x) - 5;\r\n                break;\r\n            case Direction.Left:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x + 5;\r\n                break;\r\n            case Direction.Down:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        // assign calculated position to infotext\r\n        return new Point(x, y);\r\n    }\r\n\r\n    public clearPoints(): any {\r\n        this.$points = [];\r\n        this.$points = [];\r\n    }\r\n\r\n    public addPoint(x: number, y: number): Point[] {\r\n        this.$points.push(new Point(x, y));\r\n\r\n        return this.$points;\r\n    }\r\n\r\n    protected redrawPointsAndInfo(): void {\r\n        // redraw the edge with the new position\r\n        let path: string = this.getPath();\r\n        this.$pathSvg.setAttributeNS(null, 'd', path);\r\n        this.$pathWideSvg.setAttributeNS(null, 'd', path);\r\n\r\n        this.redrawSourceInfo();\r\n        this.redrawTargetInfo();\r\n    }\r\n\r\n    protected redrawSourceInfo() {\r\n        if (this.sourceInfo) {\r\n            let newPosOfSrc = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.redrawFromEdge(newPosOfSrc);\r\n        }\r\n    }\r\n\r\n    protected redrawTargetInfo() {\r\n        if (this.targetInfo) {\r\n            let newPosOfTarget = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.redrawFromEdge(newPosOfTarget);\r\n        }\r\n    }\r\n\r\n    protected getDirectionOfPointToNode(node: Node, pointNearNode: Point): Direction {\r\n        /*\r\n            Example to calculate the direction of nearest point to Node\r\n\r\n            node\r\n         x1_ _ _ _\r\n          |       |\r\n          |       |. pointNearNode\r\n          |       |\r\n          |_ _ _ x2\r\n\r\n          the calculation would return Direction.Left\r\n        */\r\n\r\n        let x1: Point = node.getPos();\r\n        let x2: Point = new Point((x1.x + node.getSize().x), (x1.y + node.getSize().y));\r\n        let direction: Direction = Direction.Down;\r\n\r\n        if (x1.y >= pointNearNode.y) {\r\n            direction = Direction.Down;\r\n        }\r\n        if (x2.y <= pointNearNode.y) {\r\n            direction = Direction.Up;\r\n        }\r\n        if (x1.x >= pointNearNode.x) {\r\n            direction = Direction.Right;\r\n        }\r\n        if (x2.x <= pointNearNode.x) {\r\n            direction = Direction.Left;\r\n        }\r\n\r\n        return direction;\r\n    }\r\n\r\n    private updateCardinality(node: Node, infoText: InfoText, cardinality: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'cardinality': cardinality });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.cardinality = cardinality;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateCardinality(cardinality);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private updateProperty(node: Node, infoText: InfoText, property: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'property': property });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.property = property;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateProperty(property);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private calcIntersection(startNode: Node, recalcPoint: Point, endPoint: Point): Point {\r\n\r\n        // https://www.mathelounge.de/21534/schnittpunkt-einer-linie-mit-den-randern-eines-rechtecks\r\n        let h = startNode.getSize().y;\r\n        let w = startNode.getSize().x;\r\n\r\n        let x1: number = startNode.getPos().x + (w / 2);\r\n        let y1: number = startNode.getPos().y + (h / 2);\r\n\r\n        let x2: number = endPoint.x;\r\n        let y2: number = endPoint.y;\r\n\r\n        let newX: number = recalcPoint.x;\r\n        let newY: number = recalcPoint.y;\r\n\r\n        if (x2 > x1) {\r\n            newX = x1 + (w / 2);\r\n        }\r\n        else if (x2 < x1) {\r\n            newX = x1 - (w / 2);\r\n        }\r\n        else {\r\n            newX = x1;\r\n        }\r\n\r\n        if ((x2 - x1) !== 0) {\r\n            newY = ((y2 - y1) / (x2 - x1) * (newX - x1)) + y1;\r\n        }\r\n        else {\r\n            if (y1 > y2) {\r\n                newY = startNode.getPos().y;\r\n            }\r\n            else {\r\n                newY = startNode.getPos().y + h;\r\n            }\r\n        }\r\n\r\n        // if the statement is not true, so the intersection is at the horizontal line\r\n        if (!((y1 - (h / 2) <= newY) && newY <= y1 + (h / 2))) {\r\n\r\n            if (y2 > y1) {\r\n                newY = y1 + (h / 2);\r\n            }\r\n            else {\r\n                newY = y1 - (h / 2);\r\n            }\r\n\r\n            if ((x2 - x1) !== 0) {\r\n                let tmp = ((y2 - y1) / (x2 - x1));\r\n                newX = (newY + (tmp * x1) - y1) / tmp;\r\n            }\r\n            else {\r\n                newX = x1;\r\n            }\r\n        }\r\n\r\n        recalcPoint.x = Math.ceil(newX);\r\n        recalcPoint.y = Math.ceil(newY);\r\n\r\n        return null;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Composition extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'black');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { Association } from './Association';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\nimport { Direction } from '../index';\r\n\r\nexport class Generalisation extends Association {\r\n\r\n    public $TARGET_ELEMENT_HEIGHT : number = 12;\r\n    protected $targetElement: Element;\r\n\r\n    public getSVG(): Element {\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction : Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled arrow\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'white'\r\n          };\r\n\r\n        this.$targetElement = this.createShape(attr);\r\n\r\n        group.appendChild(this.$targetElement);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean) : void {\r\n\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint : Point = this.$points[0];\r\n        let direction : Direction = Direction.Up;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if(this.$sNode.id === startNode.id || this.$points.length == 2){\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$targetElement.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint : Point, direction : Direction) : string{\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch(direction){\r\n            case Direction.Up:\r\n            path = `M${startX} ${startY+3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y+12;\r\n            break;\r\n            case Direction.Right:\r\n            path = `M${startX-3} ${startY} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x-12;\r\n            break;\r\n            case Direction.Left:\r\n            path = `M${startX+3} ${startY} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x+12;\r\n            break;\r\n            case Direction.Down:\r\n            path = `M${startX} ${startY-3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y-12;\r\n            break;\r\n            default :\r\n            break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n\r\n}\r\n","import { Generalisation } from './Generalisation';\r\n\r\nexport class Implements extends Generalisation {\r\n\r\n    public getSVG(): Element {\r\n        let group = super.getSVG();\r\n\r\n        this.$pathSvg.setAttributeNS(null, 'stroke-dasharray', '3, 3');\r\n\r\n        return group;\r\n    }\r\n}\r\n","export * from './Association';\r\nexport * from './Aggregate';\r\nexport * from './Aggregation';\r\nexport * from './Composition';\r\nexport * from './Generalisation';\r\nexport * from './Implements';","export * from './edges';\r\nexport * from './nodes';\r\nexport * from './BaseElements';\r\nexport * from './Graph';\r\nexport * from './Model';\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Attribute extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 28.06.2017.\r\n */\r\nimport {Control} from \"../../Control\";\r\n\r\nexport class AutoComplete extends Control {\r\n    private $inputField:HTMLInputElement;\r\n    private $dataList:HTMLDataListElement;\r\n    private $selected:HTMLSelectElement;\r\n    private $items:HTMLDivElement;\r\n    private isMultiple:boolean;\r\n\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        let div:HTMLDivElement = document.createElement('div');\r\n        this.$view = div;\r\n        this.$inputField = document.createElement('input');\r\n        this.$dataList = document.createElement(\"datalist\");\r\n        this.$dataList.id = \"data_\"+this.id;\r\n        this.$inputField.setAttribute(\"list\", \"data_\"+this.id);\r\n        if(data[\"value\"]) {\r\n            let values = data[\"value\"];\r\n            this.isMultiple = data[\"multiple\"] != null;\r\n            let option:HTMLOptionElement;\r\n            if(this.isMultiple) {\r\n                this.$selected = document.createElement(\"select\");\r\n                this.$selected.className = \"hide\";\r\n                this.$selected.multiple = true;\r\n\r\n                this.$selected.id = this.id;\r\n                this.$items = document.createElement(\"div\");\r\n                this.$items.className = \"selectedList\";\r\n                div.appendChild(this.$items);\r\n                this.$inputField.className = \"selectedInput\";\r\n                div.appendChild(this.$selected);\r\n                this.$view[\"style\"].setProperty(\"float\", \"left\");\r\n                let that = this;\r\n                this.$inputField.oninput = function(){that.onChange();}\r\n            } else {\r\n                this.$inputField.id = this.id;\r\n            }\r\n            for (let attr in values) {\r\n                if (!values.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                option = document.createElement(\"option\");\r\n                option.value = values[attr];\r\n                this.$dataList.appendChild(option);\r\n                if(this.isMultiple) {\r\n                    option = document.createElement(\"option\");\r\n                    option.value = values[attr];\r\n                    option.innerHTML = values[attr];\r\n                    this.$selected.appendChild(option);\r\n                }\r\n        }\r\n\r\n            div.appendChild(this.$inputField);\r\n            div.appendChild(this.$dataList);\r\n        }\r\n\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n            if(this.isMultiple) {\r\n                div.appendChild(this.$selected);\r\n            }\r\n        }\r\n\r\n        parent.appendChild(this);\r\n    }\r\n\r\n    public onChange() : void {\r\n        let textValue:string = this.$inputField.value;\r\n        if(textValue.length<1) {\r\n            return;\r\n        }\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == textValue) {\r\n                if(item.selected == false) {\r\n                    item.selected = true;\r\n                    item.defaultSelected = true;\r\n                    let test = document.createElement(\"li\");\r\n                    let that = this;\r\n                    test.onclick = function() {that.onDelete(item.value, test);};\r\n                    test.className = \"selectedItem\";\r\n                    test.innerHTML = item.value;\r\n                    this.$items.appendChild(test);\r\n                    this.$inputField.value = \"\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n    public onDelete(value:string, selectedItem:HTMLLIElement) : void {\r\n        this.$items.removeChild(selectedItem);\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == value ) {\r\n                if(item.selected) {\r\n                    item.selected = false;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","import {Control} from '../../Control';\r\n\r\nexport class BR extends Control {\r\n    public load(json: JSON): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('br');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            this.$view.setAttribute(attr, data[attr]);\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\nexport class Button extends Control {\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        this.$view = document.createElement('button');\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\nimport { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\nimport { Size } from '../index';\r\nimport ClazzProperty from './ClazzProperty';\r\nimport {SymbolLibary} from './Symbol';\r\nimport {StereoType} from './StereoType';\r\nimport {GraphListener} from '../../handlers/GraphListener';\r\n\r\nexport class Class extends Node {\r\n    public attributes: Attribute[] = [];\r\n    public methods: Method[] = [];\r\n    public modifier: string;\r\n    public stereoType: string;\r\n\r\n    protected $attrHeight = 25;\r\n    protected $attrFontSize = 12;\r\n    protected $labelView: Element;\r\n\r\n    constructor(json: JSON | string | Object | any) {\r\n        super(json);\r\n        return this;\r\n    }\r\n\r\n    public load(json?: any) {\r\n        if (!json) {\r\n            json = {};\r\n        }\r\n        let y = this.$labelHeight;\r\n        let labelObj = json.name || json.id || ('New ' + this.property);\r\n\r\n        let width: number = 150;\r\n        width = Math.max(width, Util.sizeOf(labelObj).width + 60);\r\n\r\n        if (json['attributes']) {\r\n            for (let attr of json['attributes']) {\r\n\r\n                let attrObj = new Attribute(attr);\r\n                attrObj.$owner = this;\r\n                this.attributes.push(attrObj);\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(attrObj.toString()).width);\r\n                let listener = new GraphListener(attrObj);\r\n                attrObj.$data.addListener(listener);\r\n            }\r\n        }\r\n        if (json['stereotype']) {\r\n            this.stereoType = json['stereotype'];\r\n        }\r\n        if (json['methods']) {\r\n            for (let method of json['methods']) {\r\n\r\n                let methodObj = new Method(method);\r\n                methodObj.$owner = this;\r\n                this.methods.push(methodObj);\r\n\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(methodObj.toString()).width);\r\n            }\r\n            y += this.$attrHeight;\r\n        }\r\n        this.withSize(width, y);\r\n    }\r\n\r\n    public getAttributes(): Attribute[] {\r\n        return this.attributes;\r\n    }\r\n\r\n    public getMethods(): Method[] {\r\n        return this.methods;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        let icon = SymbolLibary.draw({type: 'Class', property: 'HTML', width: '50', height: '50', transform: 'translate(-26,-21)'});\r\n        return icon;\r\n        // let group = this.createShape(\r\n//    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n//    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos: Point = this.getPos();\r\n        const size: Point = this.getSize();\r\n\r\n        let group = this.createShape({ tag: 'g', id: this.id, class: 'SVGClazz', transform: 'translate(0 0)' });\r\n\r\n        if (this.stereoType) {\r\n            let type = new StereoType(this.stereoType, pos.x, pos.y);\r\n            group.appendChild(type.getSVG());\r\n        }\r\n\r\n        // Full Shape\r\n        let options = null;\r\n        let style;\r\n        let clazzName;\r\n        if (this.$owner['options']) {\r\n            let options = this.$owner['options'];\r\n            if (options) {\r\n                style = options.style;\r\n            }\r\n        }\r\n        // = = = Background = = =\r\n        if (style === 'modern') {\r\n            clazzName = 'ClazzHeader';\r\n        }\r\n        clazzName = 'ClazzHeader';\r\n        const nodeShape = this.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            height: size.y,\r\n            width: size.x,\r\n            rx: 5,\r\n            ry: 5,\r\n            fill: 'none',\r\n            stroke: 'black',\r\n            'stroke-width': 1\r\n        });\r\n        if (clazzName) {\r\n            nodeShape.setAttribute('className', clazzName);\r\n            let styleHeader = Util.getStyle('ClazzHeader');\r\n            // headerHeight = styleHeader.getNumber('height');\r\n        }\r\n\r\n        // = = = LABEL = = =\r\n        let label = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y + this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': this.$labelFontSize,\r\n            fill: 'black'\r\n        });\r\n        label.textContent = this.id;\r\n        this.$labelView = label;\r\n\r\n        group.appendChild(nodeShape);\r\n        group.appendChild(label);\r\n\r\n        // = = = ATTRIBUTES = = =\r\n        if (this.attributes.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorLabelAttr = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight,\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight,\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorLabelAttr);\r\n\r\n            let groupOfAttributes = this.createShape({ tag: 'g', id: (this.id + 'Attributes') });\r\n            groupOfAttributes.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzAttribute');\r\n            group.appendChild(groupOfAttributes);\r\n\r\n            let y = pos.y + this.$labelHeight + this.$attrHeight / 2;\r\n            for (let attr of this.attributes) {\r\n\r\n                let attrSvg = attr.getSVG();\r\n                attr.$owner = this;\r\n\r\n                attrSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                attrSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfAttributes.appendChild(attrSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        // = = = METHODS = = =\r\n        let height = this.attributes.length * this.$attrHeight;\r\n        let y = pos.y + this.$labelHeight + height + this.$attrHeight / 2;\r\n        if (this.methods.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorAttrMethods = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorAttrMethods);\r\n\r\n            let groupOfMethods = this.createShape({ tag: 'g', id: (this.id + 'Methods') });\r\n            groupOfMethods.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzMethod');\r\n            group.appendChild(groupOfMethods);\r\n\r\n            y += this.$attrHeight / 2;\r\n            for (let method of this.methods) {\r\n\r\n                let methodSvg = method.getSVG();\r\n                method.$owner = this;\r\n\r\n                methodSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                methodSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfMethods.appendChild(methodSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        this.$view = group;\r\n        return group;\r\n    }\r\n\r\n    public copy(): Class {\r\n        let copy: Class;\r\n        copy = <Class>super.copy();\r\n\r\n        // copy label\r\n        copy.id = this.id + 'Copy';\r\n\r\n        // copy attributes\r\n        this.attributes.forEach(attr => {\r\n            copy.attributes.push(new Attribute(attr.toString()));\r\n        });\r\n        // copy methods\r\n        this.methods.forEach(method => {\r\n            copy.methods.push(new Method(method.toString()));\r\n        });\r\n        copy.reCalcSize();\r\n\r\n        return copy;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTCLICK,\r\n                EventBus.ELEMENTDRAG, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES, EventBus.RELOADPROPERTIES];\r\n    }\r\n\r\n    public addProperty(value: string, type: string): any {\r\n        if (!this[type] || !value || value.length === 0) {\r\n            return;\r\n        }\r\n\r\n        let extractedValue;\r\n        if (type === 'attributes') {\r\n            extractedValue = new Attribute(value);\r\n        }\r\n        else if (type === 'methods') {\r\n            extractedValue = new Method(value);\r\n        }\r\n\r\n        for (let valueOfType of this[type]) {\r\n            if (valueOfType.toString() === extractedValue.toString()) {\r\n                alert(extractedValue.toString() + ' already exists.');\r\n                extractedValue = undefined;\r\n                return;\r\n            }\r\n        }\r\n\r\n        this[type].push(extractedValue);\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        return extractedValue;\r\n    }\r\n\r\n    public addAttribute(value: string): Attribute {\r\n        return this.addProperty(value, 'attributes');\r\n    }\r\n\r\n    public addAttributeObj(attr: Attribute): Attribute[] {\r\n        this.attributes.push(attr);\r\n        return this.getAttributes();\r\n    }\r\n\r\n    public addMethodObj(method: Method): Method[] {\r\n        this.methods.push(method);\r\n        return this.getMethods();\r\n    }\r\n\r\n    public addMethod(value: string): Method {\r\n        return this.addProperty(value, 'methods');\r\n    }\r\n\r\n    public removeAttribute(attr: Attribute): void {\r\n        let idx = this.attributes.indexOf(attr);\r\n        this.attributes.splice(idx, 1);\r\n    }\r\n\r\n    public removeMethod(method: Method): void {\r\n        let idx = this.methods.indexOf(method);\r\n        this.methods.splice(idx, 1);\r\n    }\r\n\r\n    public removeProperty(property: ClazzProperty): void {\r\n\r\n        if (property instanceof Attribute) {\r\n            this.removeAttribute(<Attribute>property);\r\n        }\r\n\r\n        if (property instanceof Method) {\r\n            this.removeMethod(<Method>property);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n        let hasSizeChanged: [boolean, Size] = this.hasSizeChanged();\r\n\r\n        if (drawOnlyIfSizeChanged) {\r\n            if (!hasSizeChanged[0]) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n\r\n        // redraw only this clazz\r\n        this.$owner.$view.removeChild(this.$view);\r\n        let newSvg = this.getSVG();\r\n        this.$owner.$view.appendChild(newSvg);\r\n        this.$view = newSvg;\r\n        EventBus.register(this, newSvg);\r\n\r\n        this.redrawEdges();\r\n    }\r\n\r\n    public hasSizeChanged(): [boolean, Size] {\r\n        let oldSize = { width: this.getSize().x, height: this.getSize().y };\r\n        let newSize = this.reCalcSize();\r\n\r\n        // size doenst changed, so nothing to redraw\r\n        if (oldSize.width === newSize.width && oldSize.height === newSize.height) {\r\n            return [false, newSize];\r\n        }\r\n\r\n        return [true, newSize];\r\n    }\r\n\r\n    public updateLabel(newLabel: string): void {\r\n        if (this.$labelView) {\r\n            this.$labelView.textContent = newLabel;\r\n        }\r\n\r\n        // update label in all edges\r\n        this.$edges.forEach(edge => {\r\n            if (this.id === edge.$sNode.id) {\r\n                edge.source = newLabel;\r\n            }\r\n            else if (this.id === edge.$tNode.id) {\r\n                edge.target = newLabel;\r\n            }\r\n        });\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        this.reDraw(true);\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.modifier = modifier;\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reCalcSize(): Size {\r\n        // label\r\n        let newWidth = 150;\r\n        newWidth = Math.max(newWidth, Util.sizeOf(this.id).width + 30);\r\n\r\n        // attributes\r\n        this.attributes.forEach(attrEl => {\r\n\r\n            let widthOfAttr;\r\n            if (attrEl.$view) {\r\n                widthOfAttr = attrEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfAttr = Util.sizeOf(attrEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfAttr + 15);\r\n        });\r\n\r\n        // methods\r\n        this.methods.forEach(methodEl => {\r\n            let widthOfMethod;\r\n            if (methodEl.$view) {\r\n                widthOfMethod = methodEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfMethod = Util.sizeOf(methodEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfMethod + 15);\r\n        });\r\n\r\n        // TODO: height has to be calculated by font-size\r\n        this.getSize().x = newWidth;\r\n        this.getSize().y = this.$labelHeight + ((this.attributes.length + this.methods.length) * this.$attrHeight)\r\n            + this.$attrHeight;\r\n\r\n        let newSize = { width: newWidth, height: this.getSize().y };\r\n\r\n        return newSize;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    private getModernStyle(): Element {\r\n        let width, height, id, size, z, item, rect, g, board, styleHeader, headerHeight, x, y;\r\n        board = this.getRoot()['board'];\r\n        styleHeader = Util.getStyle('ClazzHeader');\r\n        headerHeight = styleHeader.getNumber('height');\r\n        width = 0;\r\n        height = 10 + headerHeight;\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].getType().toLowerCase() === 'objectdiagram') {\r\n            id = this.id.charAt(0).toLowerCase() + this.id.slice(1);\r\n            item = 'Object';\r\n        } else {\r\n            id = this.id;\r\n            item = 'Class';\r\n            if (this['counter']) {\r\n                id += ' (' + this['counter'] + ')';\r\n            }\r\n        }\r\n        g = Util.create({tag: 'g', model: this});\r\n        size = Util.sizeOf(id, this);\r\n        width = Math.max(width, size.width);\r\n        if (this.attributes && this.attributes.length > 0) {\r\n            height = height + this.attributes.length * 25;\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.attributes[z], this).width);\r\n            }\r\n        } else {\r\n            height += 20;\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            height = height + this.methods.length * 25;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.methods[z], this).width);\r\n            }\r\n        }\r\n        width += 20;\r\n\r\n        let pos = this.getPos();\r\n        y = pos.y;\r\n        x = pos.x;\r\n\r\n        rect = {\r\n            tag: 'rect',\r\n            'width': width,\r\n            'height': height,\r\n            'x': x,\r\n            'y': y,\r\n            'class': item + ' draggable',\r\n            'fill': 'none'\r\n        };\r\n        g.appendChild(Util.create(rect));\r\n        g.appendChild(Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            'x': x,\r\n            'y': y,\r\n            height: headerHeight,\r\n            'width': width,\r\n            'class': 'ClazzHeader'\r\n        }));\r\n\r\n        item = Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'class': 'InfoText',\r\n            'text-anchor': 'right',\r\n            'x': x + width / 2 - size.width / 2,\r\n            'y': y + (headerHeight / 2) + (size.height / 2),\r\n            'width': size.width\r\n        });\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].type.toLowerCase() === 'objectdiagram') {\r\n            item.setAttribute('text-decoration', 'underline');\r\n        }\r\n        item.appendChild(document.createTextNode(id));\r\n\r\n        g.appendChild(item);\r\n        g.appendChild(Util.create({\r\n            tag: 'line',\r\n            x1: x,\r\n            y1: y + headerHeight,\r\n            x2: x + width,\r\n            y2: y + headerHeight,\r\n            stroke: '#000'\r\n        }));\r\n        y += headerHeight + 20;\r\n\r\n        if (this.attributes) {\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': (x + 10),\r\n                    'y': y,\r\n                    value: this.attributes[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n            if (this.attributes.length > 0) {\r\n                y -= 10;\r\n            }\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            g.appendChild(Util.create({tag: 'line', x1: x, y1: y, x2: x + width, y2: y, stroke: '#000'}));\r\n            y += 20;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': x + 10,\r\n                    'y': y,\r\n                    value: this.methods[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n        }\r\n        return g;\r\n    }\r\n}\r\n","import {Util} from '../../util';\r\nimport {DiagramElement} from '../BaseElements';\r\nimport Data from '../../Data';\r\n\r\nexport default class ClazzProperty extends DiagramElement {\r\n\r\n    // Public (+)\r\n    // Private (-)\r\n    // Protected (#)\r\n    // Package (~)\r\n\r\n    public $data = new Data();\r\n//    public modifier: string = '+';\r\n//    public name: string;\r\n//    public type: string;\r\n//    public value: string;\r\n\r\n    constructor(data: any | JSON) {\r\n        super();\r\n        this.$data.setValue('modifier', '+');\r\n        this.$data.setValue('name', null);\r\n        this.$data.setValue('type', null);\r\n        this.$data.setValue('value', null);\r\n        this.extractData(data);\r\n    }\r\n\r\n    public update(data: any | JSON): void {\r\n        this.extractData(data);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.$data.setValue('modifier', modifier);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateType(type: string): void {\r\n        this.$data.setValue('type', type);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateValue(value: string): void {\r\n        this.$data.setValue('value', value);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateName(name: string): void {\r\n        this.$data.setValue('name', name);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public getName(): string {\r\n        return this.$data.getValue('name');\r\n    }\r\n\r\n    public getModifier(): string {\r\n        return this.$data.getValue('modifier');\r\n    }\r\n\r\n    public getType(): string {\r\n        return this.$data.getValue('type');\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let attrText = {\r\n            tag: 'text',\r\n            'text-anchor': 'start',\r\n            'alignment-baseline': 'middle',\r\n        };\r\n\r\n        let attrSvg = Util.createShape(attrText);\r\n        attrSvg.textContent = this.toString();\r\n\r\n        this.$view = attrSvg;\r\n\r\n        return attrSvg;\r\n    }\r\n\r\n    public toString(): string {\r\n        let value = this.$data.getValue('value');\r\n        let result = this.$data.getValue('modifier') + ' ';\r\n        result += this.$data.getValue('name') + ' : ';\r\n        result += this.$data.getValue('type');\r\n        if (value && value.length > 0) {\r\n            result += ' = ' + this.$data.getValue('value');\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.$data.setValue('type', data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.$data.setValue('name', data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.$data.setValue('modifier', data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n\r\n            // e.g. name : string or name:string\r\n            let dataSplitted = data.split(':');\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                let name;\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.$data.setValue('modifier', firstChar);\r\n                    name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                }\r\n                else {\r\n                    name = modifierAndNameSplitted;\r\n                }\r\n                // delete whitespaces in name\r\n                name = name.replace(/ /g, '_');\r\n\r\n                this.$data.setValue('name', name);\r\n                let type = dataSplitted[1].trim() || 'String';\r\n\r\n                // if the type was entered with a small begin letter\r\n                if (type.toLowerCase() === 'string') {\r\n                    type = 'String';\r\n                }\r\n                // delete whitespaces in type\r\n                type = type.replace(/ /g, '_');\r\n                this.$data.setValue('type',  type);\r\n            } else {\r\n                dataSplitted = data.split('=');\r\n                if (dataSplitted && dataSplitted.length === 2) {\r\n                    // modifer (and or) name\r\n                    let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                    // first char is +, - or #\r\n                    let firstChar = modifierAndNameSplitted[0];\r\n                    let name;\r\n                    if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                        this.$data.setValue('modifier', firstChar);\r\n                        name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                    }\r\n                    else {\r\n                        name = modifierAndNameSplitted;\r\n                    }\r\n                    // delete whitespaces in name\r\n                    name = name.replace(/ /g, '_');\r\n\r\n                    this.$data.setValue('name', name);\r\n                    let value = dataSplitted[1].trim() || '\"\"';\r\n                    this.$data.setValue('value', value);\r\n                    this.$data.setValue('type', typeof value);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected updateTextOfView() {\r\n        if (this.$view) {\r\n            this.$view.textContent = this.toString();\r\n        }\r\n        if (this.$owner) {\r\n            Util.saveToLocalStorage(this.$owner.$owner);\r\n        }\r\n    }\r\n}\r\n","import {Node} from \"./Node\";\r\n/**\r\n * Created by Stefan on 29.03.2017.\r\n */\r\n\r\nexport class Dice extends Node {\r\n    private value: number;\r\n    private max: number = 6;\r\n    private $animation: SVGElement;\r\n    private $zoom: number = 0.6;\r\n    private $border: number = 0.2;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super(data);\r\n        this.withSize(100, 100);\r\n    }\r\n\r\n    public setNumber(number: number) {\r\n        this.value = number;\r\n        this.refresh();\r\n    }\r\n\r\n    public refresh() {\r\n        if (this.$view) {\r\n            this.reset();\r\n            let group = this.createPointValue();\r\n            if (group) {\r\n                this.$view.appendChild(group);\r\n            }\r\n        }\r\n    }\r\n\r\n    public reset() {\r\n        if (this.$view) {\r\n            while (this.$view.children.length > 1) {\r\n                if(this.$view.children.item(this.$view.children.length - 1).tagName!== \"animateTransform\") {\r\n                    console.log(this.$view.children.item(this.$view.children.length - 1));\r\n                    this.$view.removeChild(this.$view.children.item(this.$view.children.length - 1));\r\n                }else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let dice: SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x + size.x * this.$border,\r\n            y: pos.y + size.y * this.$border,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y * this.$zoom,\r\n            width: size.x * this.$zoom,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        dice.appendChild(this.createShape(attr));\r\n\r\n        let group = this.createPointValue();\r\n        if (group) {\r\n            dice.appendChild(group);\r\n        }\r\n\r\n        this.$view = dice;\r\n        return dice;\r\n    }\r\n\r\n    public animationTimeout(newValues: number[]) {\r\n        if(newValues.length>0) {\r\n            let newValue = newValues.shift();\r\n            this.setNumber(newValue);\r\n            let that=this;\r\n            setTimeout(function() {that.animationTimeout(newValues)}, 100);\r\n        }\r\n    }\r\n\r\n    public roll() {\r\n        this.startAnimation();\r\n        let values:number[]=[];\r\n        let i:number;\r\n        for(i=1;i<this.max;i++) {\r\n            values.push(i);\r\n        }\r\n        for(i=this.max;i>0;i--) {\r\n            values.push(i);\r\n        }\r\n        let that=this;\r\n        values.push( Math.floor(Math.random() * this.max)+1 );\r\n        setTimeout(function() {that.animationTimeout(values)}, 100);\r\n    }\r\n    public startAnimation() {\r\n        if(this.$animation) {\r\n            return;\r\n        }\r\n        let center = this.getPos().x+this.getSize().x /2;\r\n        const attr = {\r\n            tag: 'animateTransform',\r\n            attributeType: \"xml\",\r\n            attributeName:\"transform\",\r\n            type:\"rotate\",\r\n            dur: \"1s\",\r\n            repeatCount:\"1\",\r\n            from:\"0 \"+center+\" \"+center,\r\n            to:\"360 \"+center+\" \"+center\r\n        };\r\n        this.$animation = <SVGElement>this.createShape(attr);\r\n        this.$view.appendChild(this.$animation);\r\n    }\r\n\r\n    public stopAnimation() {\r\n        if(this.$animation) {\r\n            this.$view.removeChild(this.$animation);\r\n            this.$animation = null;\r\n        }\r\n    }\r\n\r\n    public createPointValue() :SVGElement {\r\n        if (this.value == 1) {\r\n           return this.getCircle(2, 2);\r\n        } else if (this.value == 2) {\r\n            return this.getCircle(1, 1, 3, 3);\r\n        } else if (this.value == 3) {\r\n            return this.getCircle(1, 1, 2, 2, 3, 3);\r\n        } else if (this.value == 4) {\r\n            return this.getCircle(1, 1, 1, 3, 3, 1, 3, 3);\r\n        } else if (this.value == 5) {\r\n            return this.getCircle(1, 1, 1, 3, 2, 2, 3, 1, 3, 3);\r\n        } else if (this.value == 6) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 7) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 2, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 8) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 9) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private getCircle(...values:number[]) : SVGElement {\r\n        if (values.length % 2 > 0) {\r\n            return null;\r\n        }\r\n        let size = this.getSize();\r\n        let pos = this.getPos();\r\n        //FIXME let group:SVGElement = <SVGElement>this.createShape({tag: 'g', transform: 'translate(0 0)', height: size.y, width: size.x});\r\n        let group:SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n\r\n\r\n        for (let i: number = 0; i < values.length; i += 2) {\r\n            group.appendChild(this.createCircle(values[i], values[i + 1]));\r\n        }\r\n        return group;\r\n    }\r\n    private createCircle(x:number, y:number) : SVGElement {\r\n        let size = this.getSize();\r\n        let radius = size.x / 10*this.$zoom;\r\n        let border = size.y*this.$border;\r\n        let zoom = size.y*this.$zoom;\r\n        const attr = {\r\n            tag: 'circle',\r\n            r : radius,\r\n            cx: (size.x*this.$zoom * x) / 4 + border,\r\n            cy: (size.y*this.$zoom * y) / 4 + border,\r\n            stroke:\"black\",\r\n            \"stroke-width\":\"3\",\r\n            fill:\"red\",\r\n            style: 'fill:black;stroke:black;stroke-width:2'\r\n        };\r\n        return <SVGElement>this.createShape(attr);\r\n    }\r\n}","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\n\r\nexport class Div extends Control {\r\n    private className: string;\r\n\r\n    public load(data:JSON|any): any {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = <string>data;\r\n        } else {\r\n            id = data.id;\r\n            this.className = data.class;\r\n            this.property = data.property;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let div: HTMLElement = document.getElementById(id);\r\n\r\n        if (!this.property) {\r\n            // if(inputField){\r\n            // TODO disuss how to decide, which property we should listen on...\r\n            // this.property = id;\r\n            this.property = div.getAttribute('Property');\r\n            // }\r\n        }\r\n\r\n        if (div instanceof HTMLDivElement) {\r\n            this.$view = div;\r\n        } else {\r\n            if (!div) {\r\n                this.$view = document.createElement('div');\r\n                this.$view.setAttribute('id', this.id);\r\n                this.$view.setAttribute('property', this.property);\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists+\r\n        if (data.hasOwnProperty('property')) {\r\n            this.setProperty(data['property']);\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        this.$model = entity;\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.className || entity.hasProperty(this.className)) {\r\n                if (entity.id === this.property.split('.')[0]) {\r\n                    entity.addListener(this, this.className);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        this.$view.innerHTML = <string>newValue;\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Form extends Control {\r\n    // private applyingChange: boolean = false;\r\n    private children: Object = {};\r\n    // private property: string = \"\";\r\n\r\n    /**\r\n     * Data should look like the following json:\r\n     *\r\n     * <pre>{\r\n     *      id: \"t1\",\r\n     *      control: \"form\",\r\n     *      elements: [\r\n     *          {id: \"inputField1\", property: \"talk\"},\r\n     *          {id: \"inputField2\", property: \"room\"}\r\n     *      ]\r\n     * }</pre>\r\n     * @param data\r\n     */\r\n    public load(data: any) {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let form: HTMLElement = document.getElementById(id);\r\n\r\n        if (form instanceof HTMLFormElement) {\r\n            this.$view = form;\r\n            if (this.$view.hasAttribute('property')) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            if (!form) {\r\n                this.$view = document.createElement('form');\r\n                this.$view.setAttribute('id', this.id);\r\n\r\n                if (data.hasOwnProperty('property')) {\r\n                    this.property = data['property'];\r\n                }\r\n\r\n                // add all the attributes to the form element\r\n                for (let attr in data) {\r\n                    if (data.hasOwnProperty(attr) === false) {\r\n                        continue;\r\n                    }\r\n                    if (attr === 'elements') {\r\n                        continue;\r\n                    }\r\n                    this.$view.setAttribute(attr, data[attr]);\r\n                }\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists\r\n        let objId = this.property;\r\n        let hasItem = this.$owner.hasItem(objId);\r\n        if (hasItem) {\r\n            let item = this.$owner.getItem(objId);\r\n            item.addListener(this);\r\n            this.$model = item;\r\n        }\r\n\r\n        // now create all the sub input controls\r\n        for (let field of data.elements) {\r\n            // this.createField(field);\r\n            if (field.hasOwnProperty('property')) {\r\n                let property = field['property'];\r\n                property = this.property + '.' + property;\r\n                field['property'] = property;\r\n            }\r\n            if (!field.hasOwnProperty('class')) {\r\n                field['class'] = 'input';\r\n            }\r\n\r\n            // let the Bridge load the subControl\r\n            let control: Control = this.$owner.load(field, this);\r\n\r\n            // add subControl to children\r\n            this.children[control.getId()] = control;\r\n        }\r\n\r\n    }\r\n\r\n    public setProperty(id: string): void {\r\n        this.property = id;\r\n        let keys: string[] = Object.keys(this.children);\r\n        for (let k = 0; k < keys.length; k++) {\r\n            let key = keys[k];\r\n            let childControl = this.children[key];\r\n            // only set Property, if there is a Property defined before\r\n            if (childControl.property) {\r\n                childControl.setProperty(this.property + '.' + childControl.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object,  oldValue?: Object): boolean {\r\n        if (this.$owner != null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    /**\r\n     * Here we create the form elements and put all the attributes to them in order for the Control only having to load\r\n     * the data were appending here. Alternative would be loading with the bridge and afterwards setting\r\n     * the owner to the form instead of the body..\r\n     * @param field\r\n     */\r\n    /*private createField(field: Object) {\r\n     let control = 'input';\r\n     if (field.hasOwnProperty('class')) {\r\n     control = field['class'];\r\n     }\r\n     let input = document.createElement(control);\r\n     input.setAttribute('class', control);\r\n     let id: string;\r\n     if (!field.hasOwnProperty('id')) {\r\n     // TODO: not the best solution for generating unique id's for forms...\r\n     id = this.$owner.getId();\r\n     field['id'] = id;\r\n     }\r\n     if (field.hasOwnProperty('property')) {\r\n     let property = field['property'];\r\n     property = this.id + '.' + property;\r\n     input.setAttribute('property', property);\r\n     }\r\n     for (let attr in field) {\r\n     if (attr === 'property' || attr === 'class' || !field.hasOwnProperty(attr)) {\r\n     continue;\r\n     }\r\n     input.setAttribute(attr, field[attr]);\r\n     }\r\n\r\n     this.$viewElement.appendChild(input);\r\n\r\n     let newcontrol: Control = this.$owner.load(field['id']);\r\n     this.children[newcontrol.getId()] = newcontrol;\r\n     }*/\r\n}\r\n","/**\r\n * Created by Stefan on 01.03.2017.\r\n */\r\nimport {Control} from '../../Control';\r\n\r\nexport class HTML extends Control {\r\n    constructor(data: JSON|Object|any) {\r\n        super();\r\n\r\n        let id: string;\r\n        let tag: string;\r\n\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            data = {};\r\n        } else if (data) {\r\n            id = data.id;\r\n        }\r\n        if (id) {\r\n            this.id = id;\r\n            this.$view = document.getElementById(id);\r\n        }\r\n        if (!this.$view) {\r\n            if (data) {\r\n                tag = data['tag'] || 'div';\r\n            } else {\r\n                tag = 'div';\r\n            }\r\n            this.$view = document.createElement(tag);\r\n            let parent = document.getElementsByTagName('body')[0];\r\n            parent.appendChild(this.$view);\r\n        }\r\n        if (!parent) {\r\n            return;\r\n        }\r\n        this.writeAttribute(data, this.$view);\r\n    }\r\n\r\n    private writeAttribute(properties: Object, entity?: any) {\r\n        let lowKey;\r\n        if (!entity) {\r\n            lowKey = properties['tag'] || 'div';\r\n            entity = document.createElement(lowKey);\r\n        }\r\n        for (let key in properties) {\r\n            if (!properties.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            lowKey = key.toLowerCase();\r\n            if (properties[key] === null) {\r\n                entity.setAttribute(key, '');\r\n                continue;\r\n            }\r\n\r\n            if (lowKey === 'tag' || lowKey.charAt(0) === '$' || lowKey === '$graphModel' || lowKey === 'class') {\r\n                continue;\r\n            }\r\n            if (lowKey === 'children') {\r\n                if (Array.isArray(properties[key])) {\r\n                    for (let item in properties[key]) {\r\n                        if (properties[key].hasOwnProperty(item) === false) {\r\n                            continue;\r\n                        }\r\n                        let child = this.writeAttribute(item);\r\n                        if (child) {\r\n                            entity.appendChild(child);\r\n                        }\r\n                    }\r\n                } else {\r\n                    let child = this.writeAttribute(properties[key]);\r\n                    if (child) {\r\n                        entity.appendChild(child);\r\n                    }\r\n                }\r\n                continue;\r\n            }\r\n            entity[key] = properties[key];\r\n        }\r\n        return entity;\r\n    }\r\n}\r\n","import { Point } from '../BaseElements';\r\nimport { Util } from '../../util';\r\nimport { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\n\r\nexport class InfoText extends Node {\r\n\r\n    public cardinality: string = '';\r\n    private $heightOfOneTextItem: number;\r\n    private $cardinalitySvg: Element;\r\n    private $propertySvg: Element;\r\n    private $rectBackground: Element;\r\n\r\n    constructor(info: any) {\r\n        super(info);\r\n        if (typeof (info) === 'string') {\r\n            this.id = info;\r\n        } else {\r\n            if (info.property) {\r\n                this.property = info.property;\r\n            }\r\n            if (info.cardinality) {\r\n                this.cardinality = info.cardinality;\r\n            }\r\n        }\r\n        this.$isDraggable = true;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n    }\r\n\r\n    public updateCardinality(cardinality: string): void {\r\n        this.cardinality = cardinality;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (this.$rectBackground) {\r\n            this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n            this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n        }\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((cardinality.length === 0 && this.property.length > 0) || !this.$cardinalitySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$cardinalitySvg) {\r\n            this.$cardinalitySvg.textContent = cardinality;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.property.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    public updateProperty(property: string): void {\r\n        this.property = property;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((property.length === 0 && this.cardinality.length > 0) || !this.$propertySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$propertySvg) {\r\n            this.$propertySvg.textContent = property;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.cardinality.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos: Point = this.getPos();\r\n        let group = Util.create({ tag: 'g', class: 'SVGEdgeInfo', transform: 'translate(0, 0)' });\r\n\r\n        // append rect as background for text items\r\n        this.$rectBackground = Util.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y - this.$heightOfOneTextItem + 3,\r\n            width: this.getSize().x,\r\n            height: this.getSize().y,\r\n            fill: '#DDD',\r\n            'stroke-width': 0,\r\n            rx: '5',\r\n            ry: '5'\r\n        });\r\n        group.appendChild(this.$rectBackground);\r\n\r\n        let y = pos.y;\r\n        if (this.property) {\r\n            // property\r\n            this.$propertySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$propertySvg.textContent = this.property;\r\n            group.appendChild(this.$propertySvg);\r\n\r\n            y += this.$heightOfOneTextItem;\r\n        }\r\n\r\n        // cardinality\r\n        if (this.cardinality) {\r\n            this.$cardinalitySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$cardinalitySvg.textContent = this.cardinality;\r\n            group.appendChild(this.$cardinalitySvg);\r\n        }\r\n\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        let cardinalityAvailable = this.cardinality && this.cardinality.length > 0;\r\n        let propertyAvailable = this.property && this.property.length > 0;\r\n\r\n        return !propertyAvailable && !cardinalityAvailable;\r\n    }\r\n\r\n    public redrawFromEdge(newPos: Point): void {\r\n\r\n        if (!newPos) {\r\n            return;\r\n        }\r\n\r\n        let oldPos = this.getPos();\r\n\r\n        // get difference between new and the old position\r\n        let diffPos = new Point();\r\n        diffPos.x = newPos.x - oldPos.x;\r\n        diffPos.y = newPos.y - oldPos.y;\r\n\r\n        // get translate information\r\n        let translation = this.$view.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        let sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        // set new traslation values\r\n        let newTransX = (sx + diffPos.x);\r\n        let newTransY = (sy + diffPos.y);\r\n        this.$view.setAttributeNS(null, 'transform', 'translate(' + newTransX + ' ' + newTransY + ')');\r\n\r\n        // set new position of svg\r\n        this.getPos().x = newPos.x;\r\n        this.getPos().y = newPos.y;\r\n    }\r\n\r\n    public getText(): string {\r\n        let infoTxt: string = '';\r\n\r\n        if (this.property) {\r\n            infoTxt = this.property;\r\n        }\r\n        if (this.cardinality) {\r\n            if (infoTxt.length > 0) {\r\n                infoTxt += '\\n';\r\n            }\r\n            infoTxt += this.cardinality;\r\n        }\r\n\r\n        return infoTxt;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    private calcSize(): Point {\r\n        let text: string = this.getText();\r\n        let items: Array<string> = text.split('\\n');\r\n\r\n        let maxSize = new Point(0, 0);\r\n        if (text.length === 0) {\r\n            return maxSize;\r\n        }\r\n\r\n        for (let i = 0; i < items.length; i += 1) {\r\n            // calculate size\r\n            let sizeOfText: ClientRect = Util.sizeOf(items[i]);\r\n            maxSize.x = Math.max(maxSize.x, sizeOfText.width);\r\n            maxSize.y += sizeOfText.height;\r\n\r\n            this.$heightOfOneTextItem = sizeOfText.height;\r\n        }\r\n\r\n        return maxSize;\r\n    }\r\n    private resetAllSvgElements() {\r\n        this.$cardinalitySvg = undefined;\r\n        this.$view = undefined;\r\n        this.$propertySvg = undefined;\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\nimport {PropertyBinder} from '../../PropertyBinder';\r\n\r\nexport class Input extends Control {\r\n    private type: string;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data = super.initViewDataProperties(oldData);\r\n        if ('checkbox' === this.type || 'radio' === this.type) {\r\n            data.addFrom('checked', oldData);\r\n        }\r\n        data.addFrom('value', oldData);\r\n        data.addFrom('type', oldData);\r\n        return data;\r\n    }\r\n\r\n    public load(data: any) {\r\n        let id: string;\r\n        let inputField: HTMLElement;\r\n        let useData: boolean;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            useData = true;\r\n        } else {\r\n            id = data.id;\r\n            if (data.type) {\r\n                this.setType(data['type']);\r\n            } else {\r\n                this.setType('text');\r\n            }\r\n            if (data.hasOwnProperty('property')) {\r\n                this.setProperty(data['property']);\r\n            }\r\n            useData = false;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n\r\n        inputField = document.getElementById(id);\r\n\r\n        if (useData) {\r\n            if (inputField) {\r\n                // TODO disuss how to decide, which property we should listen on...\r\n                // this.property = id;\r\n                if (inputField.hasAttribute('Property')) {\r\n                    this.setProperty(inputField.getAttribute('Property'));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (inputField instanceof HTMLInputElement) {\r\n            this.setView(inputField);\r\n            this.type = inputField.type;\r\n            // useData = false;\r\n        } else {\r\n            if (!inputField) {\r\n                this.setView(document.createElement('input'));\r\n                this.$viewData = this.initViewDataProperties(this.$viewData);\r\n                // append viewListener\r\n                // this.$view.addEventListener('change', this.$viewListener);\r\n                if (typeof(data) !== 'string') {\r\n                    for (let attr in data) {\r\n                        if (data.hasOwnProperty(attr) === false) {\r\n                            continue;\r\n                        }\r\n                        // this.$view[attr] = data[attr];\r\n                        this.$viewData.setValue(attr, data[attr]);\r\n                    }\r\n                } else {\r\n                    if (this.type) {\r\n                        this.$view.setAttribute('type', this.type);\r\n                    }\r\n                    if (data.hasOwnProperty('class')) {\r\n                        this.$view.setAttribute('class', data['class']);\r\n                    }\r\n                    this.$view.setAttribute('id', this.id);\r\n                    this.$view.setAttribute('property', this.property);\r\n                }\r\n\r\n                if (data.value) {\r\n                    // if theres a value at the control, we want to change the model to the new value\r\n                    if (this.$model) {\r\n                        this.$model.setValue(this.lastProperty, data.value);\r\n                    }\r\n                }\r\n                if (this.$model) {\r\n                    PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                }\r\n\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (this.property && entity) {\r\n            if (entity.id === this.property.split('.')[0]) {\r\n                this.$model = entity;\r\n                PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                // entity.addListener(this, this.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n    // TODO FIXME protected updateElement(property: string, value: string) {\r\n    //     if (this.$view instanceof HTMLInputElement) {\r\n    //         if (value != null) {\r\n    //             if(property == this.lastProperty) {\r\n    //                 (<HTMLInputElement>this.$view)[this.getStandardProperty()] = value;\r\n    //             } else {\r\n    //                 // this.getRoot().setValue(this, property, value, (<HTMLInputElement>this.$view)[property]);\r\n    //                 (<HTMLInputElement>this.$view)[property] = value;\r\n    //             }\r\n    //         } else {\r\n    //             delete (<HTMLInputElement>this.$view)[property];\r\n    //         }\r\n    //     }\r\n    // }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            super.controlChanged(ev);\r\n        }\r\n// <<<<<<< HEAD\r\n//             let newVal = element[this.getStandardProperty()];\r\n//             if (this.isKeyOnly()) {\r\n//                 // we expect, element[this.lastProperty] to be boolean:\r\n//                 if (!newVal) {\r\n//                     newVal = null;\r\n//                 }\r\n//             } else {\r\n//             }\r\n        // let $graphModel;\r\n        // let value;\r\n        /*if (this.$graphModel) {\r\n            $graphModel = this.$graphModel;\r\n            value = this.$graphModel.getValue(this.lastProperty);\r\n        } else {\r\n            $graphModel = this;\r\n            if (this.$view) {\r\n                value = this.$view[this.lastProperty];\r\n            }\r\n        }*/\r\n        // this.$model.setValue(this.lastProperty, newVal);\r\n        // this.propertyChange(this.$graphModel,this.lastProperty, this.$graphModel.getValue(this.lastProperty), newVal);\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n// =======\r\n        // let newVal = element[this.lastProperty];\r\n        // if (this.isKeyOnly()) {\r\n        //     // we expect, element[this.lastProperty] to be boolean:\r\n        //     if (!newVal) {\r\n        //         newVal = null;\r\n        //     }\r\n        // } else {\r\n        // }\r\n        // let $graphModel;\r\n        // let value;\r\n\r\n        // $graphModel = this.getViewData();\r\n        // if (this.$graphModel) {\r\n        //     $graphModel = this.$graphModel;\r\n        //     value = this.$graphModel.getValue(this.lastProperty);\r\n        // } else {\r\n        //     $graphModel = this;\r\n        //     if (this.$view) {\r\n        //         value = this.$view[this.lastProperty];\r\n        //     }\r\n        // }\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n//            this.saveViewInData();\r\n// >>>>>>> addOldFunctions\r\n//         } else {\r\n//             console.log('value does not match the pattern...');\r\n//         }\r\n    }\r\n\r\n    public setType(type: string): void {\r\n        let oldValue: string = this.type;\r\n        if (oldValue === type) {\r\n            return;\r\n        }\r\n        if (type === 'radio') {\r\n            this.$viewData.setValue('checked', null);\r\n        } else {\r\n            this.$viewData.removeKey('checked');\r\n        }\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\n\r\nexport class Label extends Control {\r\n    public load(data: JSON): any {\r\n        this.createControl(this.$owner, data);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('label');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr === 'textContent') {\r\n                this.$view.textContent = data['textContent'];\r\n            } else {\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Method extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.updateType(data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.updateType(data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.updateType(data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n            // e.g. setName() : string or name:string\r\n            let dataSplitted = data.split(':');\r\n\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }\r\n                else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType(dataSplitted[1].trim() || 'void');\r\n            }\r\n            // set default return type of void\r\n            else {\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = data.trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }  else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType('void');\r\n            }\r\n        }\r\n\r\n        if (Util.includes(this.$data.getValue('name'), '(') && !Util.includes(this.$data.getValue('name'), ')') === false) {\r\n            this.$data.setValue('name', this.$data.getValue('name') + '()');\r\n        }\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\nimport {Association} from '../edges';\r\nimport { GraphModel } from '..';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\n\r\nexport class Node extends DiagramElement {\r\n    public $edges: Association[] = [];\r\n    public $minWidth: number = 150;\r\n    public $minheight: number = 25;\r\n    public $defaulEdgeType: string;\r\n\r\n    constructor(data: JSON|string|Object|any) {\r\n        super();\r\n\r\n        // default size\r\n        this.withSize(this.$minWidth, this.$minheight);\r\n\r\n        if (data) {\r\n            if (data['x'] && data['y']) {\r\n                this.withPos(data['x'], data['y']);\r\n            }\r\n            if (data['width'] || data['height']) {\r\n                this.withSize(data['width'], data['height']);\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos = this.getPos();\r\n        const size = this.getSize();\r\n\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x - size.x / 2,\r\n            y: pos.y - size.y / 2,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y,\r\n            width: size.x,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        const shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'middle',\r\n            'font-family': 'Verdana',\r\n            'font-size': '14',\r\n            fill: 'black'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = this.id;\r\n\r\n        let group = this.createShape({tag: 'g', id: this.id});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public copy(): Node {\r\n        let copy: Node;\r\n        // create new id\r\n        let model = <GraphModel>this.$owner || <GraphModel>this.getRoot();\r\n        if (model) {\r\n            let type = this.property || Node.name;\r\n            let newId = model.getNewId(type);\r\n            copy = <Node>model.createElement(type, newId, null);\r\n            copy.withSize(this.getSize().x, this.getSize().y);\r\n            copy.$owner = model;\r\n        } else {\r\n            copy.id = this.id + '-copy';\r\n            copy.$owner = this.getRoot();\r\n        }\r\n        return copy;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n// EMPTY\r\n    }\r\n    public addAttribute(value: string): Attribute {\r\n        return null;\r\n    }\r\n    public getAttributes(): Attribute[] {\r\n        return null;\r\n    }\r\n    public addMethod(value: string): Method {\r\n        return null;\r\n    }\r\n    public updateLabel(newLabel: string): void {\r\n// EMPTY\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\n\r\nexport class SO extends DiagramElement {\r\n    public static create(element: Object) {\r\n        let result: SO = new SO();\r\n        for (let key in element) {\r\n            if (element.hasOwnProperty(key) === false) {\r\n                continue;\r\n            }\r\n            result.withKeyValue(key, element[key]);\r\n\r\n        }\r\n        return result;\r\n    }\r\n\r\n    public withKeyValue(key: string, value: any): SO {\r\n        if (key === 'typ') {\r\n            this.property = value;\r\n        } else if (key === 'x') {\r\n            this.withPos(value, null);\r\n        } else if (key === 'y') {\r\n            this.withPos(null, value);\r\n        } else if (key === 'width') {\r\n            this.withSize(value, null);\r\n        } else if (key === 'height') {\r\n            this.withSize(null, value);\r\n        } else {\r\n            this[key] = value;\r\n        }\r\n        return this;\r\n    }\r\n}\r\n","import {Point} from '../BaseElements';\r\nimport {Node} from './Node';\r\n\r\nexport class StereoType extends Node {\r\n\r\n    protected stereoType: string;\r\n\r\n    constructor (type: string, x: number, y: number) {\r\n        super('');\r\n        this.withPos(x, y);\r\n        this.setStereoType(type);\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        let pos: Point = this.getPos();\r\n        let size: Point = this.getSize();\r\n\r\n               // = = = STEREOTYPE = = =\r\n        let stereoType = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y - this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': 10,\r\n            'font-weight': 'bold',\r\n            fill: 'black'\r\n        });\r\n        stereoType.textContent = this.stereoType;\r\n\r\n        this.$view = stereoType;\r\n        return stereoType;\r\n    }\r\n\r\n    public setStereoType(value: string): void {\r\n        this.stereoType = '<<' + value + '>>';\r\n    }\r\n\r\n    public getStereoType(): string {\r\n        return this.stereoType;\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { SO } from './SO';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport { Util } from '../../util';\r\n\r\nexport class Symbol extends Node {\r\n    public $heightMax: number = 0;\r\n    public $heightMin: number = 0;\r\n\r\n    constructor(typ: string) {\r\n        super(typ);\r\n    }\r\n\r\n    public draw(typ?: string): SVGElement {\r\n        return SymbolLibary.draw(this);\r\n    }\r\n}\r\n\r\n// \t\t\t\t###################################################### SymbolLibary ####################################################################################\r\n// Example Items\r\n// {tag: 'path', d: ''}\r\n// {tag: 'rect', width:46, height:34}\r\n// {tag: 'ellipse', width:23, height:4}\r\n// {tag: 'line', x1:650, y1:-286, x2:650, y2:-252}\r\n// {tag: 'circle', r:5, x:12, y:0}\r\n// {tag: 'image', height: 30, width: 50, content$src: hallo}\r\n// {tag: 'text', 'text-anchor': 'left', x: '10'}\r\nexport class SymbolLibary {\r\n\r\n    public static drawSVG(node: any): SVGSVGElement {\r\n        // const lib = new SymbolLibary();\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            const parent = SO.create(node);\r\n            parent['property'] = 'SVG';\r\n            symbol = fn(parent);\r\n            // symbol = fn.apply(lib, parent);\r\n\r\n            return SymbolLibary.createGroup(parent, symbol);\r\n        }\r\n        return symbol;\r\n    }\r\n\r\n    public static draw(node: any, parent?: Object): SVGElement {\r\n        // Node is Symbol or simple Object\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            if (!(node instanceof DiagramElement)) {\r\n                node = SO.create(node);\r\n                if (!node.property) {\r\n                    node.property = 'SVG';\r\n                }\r\n            }\r\n            symbol = fn.apply(this, [node]);\r\n            if (!parent) {\r\n                return SymbolLibary.createGroup(node, symbol);\r\n            }\r\n            return SymbolLibary.createGroup(node, symbol);\r\n        } else if (node.property) {\r\n            symbol = new Symbol(node.property);\r\n            symbol.init(node);\r\n            let pos = node.getPos();\r\n            let size = node.getSize();\r\n            symbol.withPos(pos.x, pos.y);\r\n            symbol.withSize(size.x, size.y);\r\n            symbol['value'] = node['value'];\r\n            parent = node['$parent'];\r\n            return SymbolLibary.draw(symbol, parent);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public static upFirstChar(txt: string): string {\r\n        return txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase();\r\n    }\r\n\r\n    public static isSymbolName(typ: string): boolean {\r\n        let fn = SymbolLibary['draw' + SymbolLibary.upFirstChar(typ)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static isSymbol(node: Symbol) {\r\n        let fn = SymbolLibary[SymbolLibary.getName(node)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static getName(node: any): string {\r\n        if (node['type']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['type']);\r\n        }\r\n        if (node.property) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node.property);\r\n        }\r\n        if (node['src']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['src']);\r\n        }\r\n        return 'drawNode';\r\n    }\r\n\r\n    /*FIXME   public static createImage(node: Symbol, $graphModel:Node) {\r\n           let n, img: HTMLElement;\r\n           // node.$graphModel = node;\r\n           if (SymbolLibary.isSymbol(node)) {\r\n               return SymbolLibary.draw(null, node);\r\n           }\r\n           n = {tag: 'img', $graphModel: node, src: node['src']};\r\n           let size = node.getSize();\r\n           if (size.isEmpty() === false) {\r\n               n['width'] = size.x;\r\n               n['height'] = size.y;\r\n           } else {\r\n               n['xmlns'] = 'http://www.w3.org/1999/xhtml';\r\n           }\r\n           img = Util.create(n);\r\n           if (size.isEmpty()) {\r\n               $graphModel.appendImage(img);\r\n               return null;\r\n           }\r\n           return img;\r\n       }*/\r\n\r\n    public static createGroup(node: DiagramElement, group: any) {\r\n        let func, y: number, z: number, box, item: Element, transform, i, offsetX = 0, offsetY = 0;\r\n        let svg: any;\r\n        if (node.property.toUpperCase() === 'HTML') {\r\n            let so = {\r\n                tag: 'svg',\r\n                style: { left: (group.x | 0) + node.getPos().x, top: (group.y | 0) + node.getPos().y, position: 'absolute' }\r\n            };\r\n            if (node['transform']) {\r\n                so['transform'] = node['transform'];\r\n            }\r\n            svg = Util.create(so);\r\n        } else {\r\n            svg = Util.create({ tag: 'g' });\r\n            transform = 'translate(' + group.getPos().x + ' ' + group.getPos().y + ')';\r\n            if (group.scale) {\r\n                transform += ' scale(' + group.scale + ')';\r\n            }\r\n            if (group.rotate) {\r\n                transform += ' rotate(' + group.rotate + ')';\r\n            }\r\n            svg.setAttribute('transform', transform);\r\n            if (group['id']) {\r\n                svg.id = group['id'];\r\n            }\r\n        }\r\n\r\n        if (node['tooltip']) {\r\n            const tooltipTitleAttr = {\r\n                tag: 'title'\r\n            };\r\n            let tooltipTitle = Util.createShape(tooltipTitleAttr);\r\n            tooltipTitle.textContent = node['tooltip'];\r\n            svg.appendChild(tooltipTitle);\r\n        }\r\n\r\n        if (node['background']) {\r\n            const attrCircle = {\r\n                tag: 'circle',\r\n                cx: 20,\r\n                cy: 20,\r\n                r: 17,\r\n                stroke: '#888',\r\n                'stroke-width': 0,\r\n                fill: '#DDD'\r\n            };\r\n            svg.appendChild(Util.create(attrCircle));\r\n        }\r\n\r\n        for (i = 0; i < group.items.length; i += 1) {\r\n            svg.appendChild(Util.create(group.items[i]));\r\n        }\r\n        let elements = node['elements'];\r\n        Util.setSize(svg, group.width + node.getSize().x, group.height + node.getSize().y);\r\n        node['$heightMin'] = node.getSize().y;\r\n        if (elements) {\r\n            for (i = 0; i < elements.length; i += 1) {\r\n                if (!elements[i] && elements[i].length < 1) {\r\n                    elements.splice(i, 1);\r\n                    i -= 1;\r\n                }\r\n            }\r\n            box = Util.create({ tag: 'g' });\r\n            // Calculate new Height\r\n            let c: number;\r\n            z = 0;\r\n            for (c = 0; c < elements.length; c += 1) {\r\n                if (typeof elements[c] === 'string') {\r\n                    z += 1;\r\n                } else {\r\n                    z += elements[c].length;\r\n                }\r\n            }\r\n            z = z * 25 + 6;\r\n            box.appendChild(Util.create({\r\n                tag: 'rect',\r\n                rx: 0,\r\n                x: offsetX,\r\n                y: (offsetY + 28),\r\n                width: 70,\r\n                height: z,\r\n                stroke: '#000',\r\n                fill: '#fff',\r\n                opacity: '0.7'\r\n            }));\r\n            node['$heightMax'] = z + node['$heightMin'];\r\n\r\n            svg['elements'] = elements;\r\n            if (node['type'] === 'DropDown') {\r\n                svg['activ'] = Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': 60,\r\n                    'x': (10 + offsetX),\r\n                    'y': 20,\r\n                    value: node['activText']\r\n                });\r\n                svg.appendChild(svg.activ);\r\n            }\r\n\r\n            y = offsetY + 46;\r\n            // 46 -28 = 18\r\n\r\n            func = function (event: Event) {\r\n                if (svg.activ) {\r\n                    svg.activ.textContent = (<any>event.currentTarget).value;\r\n                }\r\n            };\r\n            let txt: string;\r\n            let textClass = 'SVGTEXT';\r\n            for (z = 0; z < elements.length; z += 1) {\r\n                if (typeof elements[z] === 'string') {\r\n                    txt = elements[z];\r\n                } else {\r\n                    item = this.addText(y, offsetX, box, elements[z][0], 'SVGTEXT');\r\n                    y += 26;\r\n                    for (c = 1; c < elements[z].length; c += 1) {\r\n                        item = this.addText(y, offsetX, box, '* ' + elements[z][c], 'SVGTEXTITEM');\r\n\r\n                        item['value'] = elements[z];\r\n                        if (node['action']) {\r\n                            item['onclick'] = node['action'];\r\n                        } else {\r\n                            item['onclick'] = func;\r\n                        }\r\n                        y += 26;\r\n                    }\r\n                    txt = elements[z];\r\n                    let subBox = Util.create({\r\n                        tag: 'rect',\r\n                        rx: 0,\r\n                        x: offsetX,\r\n                        y: (offsetY + 28),\r\n                        width: 60,\r\n                        height: z,\r\n                        stroke: '#000',\r\n                        fill: '#fff',\r\n                        opacity: '0.7'\r\n                    });\r\n                    continue;\r\n                }\r\n                // let txt = elements[z];\r\n                item = this.addText(y, offsetX, box, txt, textClass);\r\n\r\n                item['value'] = elements[z];\r\n                if (node['action']) {\r\n                    item['onclick'] = node['action'];\r\n                } else {\r\n                    item['onclick'] = func;\r\n                }\r\n                y += 26;\r\n            }\r\n            svg.choicebox = box;\r\n        }\r\n        svg.tool = node;\r\n        svg.onclick = function () {\r\n            if (svg.status === 'close') {\r\n                svg.open();\r\n            } else {\r\n                svg.close();\r\n            }\r\n        };\r\n        svg.close = function () {\r\n            if (svg.status === 'open' && svg.choicebox) {\r\n                this.removeChild(svg.choicebox);\r\n            }\r\n            svg.status = 'close';\r\n            svg.tool.$size.height = svg.tool.heightMin;\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x, g.tool.height + g.tool.y);\r\n            Util.setSize(svg, svg.tool.$size.x, svg.tool.$size.y);\r\n        };\r\n        svg.open = function () {\r\n            if (this.tagName === 'svg') {\r\n                return;\r\n            }\r\n            if (svg.status === 'close' && svg.choicebox) {\r\n                this.appendChild(svg.choicebox);\r\n            }\r\n            svg.status = 'open';\r\n            svg.tool.$size.height = svg.tool.heightMax;\r\n            Util.setSize(svg, svg.tool.width, svg.tool.height);\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x + 10, g.tool.height + g.tool.y + 10);\r\n        };\r\n        svg.close();\r\n        return svg;\r\n    }\r\n\r\n    public static addChild(parent: SVGElement, json: JSON | Element): void {\r\n        let item: Element;\r\n        if ((<any>json).offsetLeft) {\r\n            item = <Element>json;\r\n        } else {\r\n            item = Util.create(json);\r\n        }\r\n        item.setAttribute('class', 'draggable');\r\n        parent.appendChild(item);\r\n    }\r\n\r\n    public static all(node: any): void {\r\n        SymbolLibary.drawSmiley(node);\r\n        SymbolLibary.drawDatabase(node);\r\n        SymbolLibary.drawLetter(node);\r\n        SymbolLibary.drawMobilephone(node);\r\n        SymbolLibary.drawWall(node);\r\n        SymbolLibary.drawActor(node);\r\n        SymbolLibary.drawLamp(node);\r\n        SymbolLibary.drawArrow(node);\r\n        SymbolLibary.drawButton(node);\r\n        SymbolLibary.drawDropdown(node);\r\n        SymbolLibary.drawClassicon(node);\r\n        SymbolLibary.drawClassWithEdgeicon(node);\r\n    }\r\n\r\n    public static drawHamburger(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'circle', r: 10, fill: '#ccc', cx: 12, cy: 12, 'stroke-width': 1, stroke: 'black'},\r\n                { tag: 'path', d: 'M 8,7 H 16 M 8,12 H 16 M 8,17 H 16', stroke: 'black', fill: 'none' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawSmiley(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'path', d: 'm49.01774,25.64542a24.5001,24.5 0 1 1 -49.0001,0a24.5001,24.5 0 1 1 49.0001,0z', stroke: 'black', fill: 'none' }, { tag: 'path', d: 'm8,31.5c16,20 32,0.3 32,0.3' },\r\n                { tag: 'path', d: 'm19.15,20.32a1.74,2.52 0 1 1 -3.49,0a1.74,2.52 0 1 1 3.49,0z' },\r\n                { tag: 'path', d: 'm33,20.32a1.74,2.52 0 1 1 -3.48,0a1.74,2.52 0 1 1 3.48,0z' },\r\n                { tag: 'path', d: 'm5.57,31.65c3.39,0.91 4.03,-2.20 4.03,-2.20' },\r\n                { tag: 'path', d: 'm43,32c-3,0.91 -4,-2.20 -4.04,-2.20' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDatabase(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 40,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,-6.26 25.03,-6.26 25.03,0l0,25.82c0,6.26 -25.03,6.26 -25.03,0l0,-25.82z',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLetter(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 17,\r\n            items: [\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1,1l22,0l0,14l-22,0l0,-14z' },\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1.06,1.14l10.94,6.81l10.91,-6.91' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMobilephone(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 4.2 0.5 15.61 0c 2 0 3.7 1.65 3.7 3.7l 0 41.6c 0 2-1.65 3.7-3.7 3.7l-15.6 0c-2 0-3.7-1.6-3.7-3.7l 0-41.6c 0-2 1.6-3.7 3.7-3.7z',\r\n                    fill: 'none',\r\n                    stroke: 'black'\r\n                },\r\n                { tag: 'path', d: 'm 12.5 2.73a 0.5 0.5 0 1 1-1 0 0.5 0.5 0 1 1 1 0z' },\r\n                { tag: 'path', d: 'm 14 46a 2 2 0 1 1-4 0 2 2 0 1 1 4 0z' },\r\n                { tag: 'path', d: 'm 8 5 7 0' },\r\n                { tag: 'path', d: 'm 1.63 7.54 20.73 0 0 34-20.73 0z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawWall(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'path', d: 'm26,45.44l-5,3.56l-21,-9l0,-36.41l5,-3.56l20.96,9l-0,36.4z' },\r\n                {\r\n                    tag: 'path',\r\n                    stroke: 'white',\r\n                    d: 'm2.21,11l18.34,7.91m-14.46,-12.57l0,6.3m8.2,21.74l0,6.35m-8.6,-10l0,6.351m4.1,-10.67l0,6.3m4.8,-10.2l0,6.3m-8.87,-10.23l0,6.35m4.78,-10.22l0,6.35m-8,14.5l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m0,-13l0,34m-18.23,-41.84l18.3,8m0,0.11l5,-3.57'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawActor(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'line', stroke: '#000', x1: '12', y1: '10', x2: '12', y2: '30' },\r\n                { tag: 'circle', stroke: '#000', cy: '5', cx: '12', r: '5' },\r\n                { tag: 'line', stroke: '#000', y2: '18', x2: '25', y1: '18', x1: '0' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '5', y1: '30', x1: '12' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '20', y1: '30', x1: '12' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLamp(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 22.47 10.58c-6.57 0-11.89 5.17-11.89 11.54 0 2.35 0.74 4.54 2 6.36 2 4 4.36 5.63 4.42 10.4l 11.15 0c 0.12-4.9 2.5-6.8 4.43-10.4 1.39-1.5 1.8-4.5 1.8-6.4 0-6.4-5.3-11.5-11.9-11.5z',\r\n                    fill: 'white',\r\n                    stroke: 'black'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 40 8 0c 0.58 0 1 0.5 1 1 0 0.6-0.5 1-1 1l-8 0c-0.6 0-1-0.47-1-1 0-0.58 0.47-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 42.7 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 45.3 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                { tag: 'path', d: 'm 19.5 48c 0.37 0.8 1 1.3 1.9 1.7 0.6 0.3 1.5 0.3 2 0 0.8-0.3 1.4-0.8 1.9-1.8z' },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 6 37.5 4.2-4c 0.3-0.3 0.8-0.3 1 0 0.3 0.3 0.3 0.8 0 1.1l-4.2 4c-0.3 0.3-0.8 0.3-1.1 0-0.3-0.3-0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 39 37.56-4.15-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 38 23 5.8 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.8 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 1.3 23 6 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.9 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 34.75 11.2 4-4.1c 0.3-0.3 0.3-0.8 0-1-0.3-0.3-0.8-0.3-1 0l-4 4.1c-0.3 0.3-0.3 0.8 0 1 0.3 0.3 0.8 0.3 1 0z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 11.23 10-4-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 21.64 1.3 0 5.8c 0 0.4 0.3 0.8 0.8 0.8 0.4 0 0.8-0.3 0.8-0.8l 0-5.8c 0-0.4-0.3-0.8-0.8-0.8-0.4 0-0.8 0.3-0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 26.1 24.3c-0.5 0-1 0.2-1.3 0.4-1.1 0.6-2 3-2.27 3.5-0.26-0.69-1.14-2.9-2.2-3.5-0.7-0.4-2-0.7-2.5 0-0.6 0.8 0.2 2.2 0.9 2.9 1 0.9 3.9 0.9 3.9 0.9 0 0 0 0 0 0 0.54 0 2.8 0 3.7-0.9 0.7-0.7 1.5-2 0.9-2.9-0.2-0.3-0.7-0.4-1.2-0.4z'\r\n                },\r\n                { tag: 'path', d: 'm 22.5 28.57 0 10.7' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawStop(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 30,\r\n            height: 30,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: '#FFF',\r\n                    'stroke-width': '2',\r\n                    stroke: '#B00',\r\n                    d: 'm 6,6 a 14,14 0 1 0 0.06,-0.06 z m 0,0 20,21'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMin(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    d: 'm 0,0 19,0 0,19 -19,0 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 13,-0.04'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawArrow(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 10,\r\n            height: 9,\r\n            rotate: node['rotate'],\r\n            items: [\r\n                { tag: 'path', fill: '#000', stroke: '#000', d: 'M 0,0 10,4 0,9 z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMax(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    'stroke-dashoffset': 2,\r\n                    'stroke-dasharray': '4.8,4.8',\r\n                    d: 'm 0,0 4.91187,0 5.44643,0 9.11886,0 0,19.47716 -19.47716,0 0,-15.88809 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 6,0.006 0.02,5 0.01,-11 -0.03,6.02 c 2,-0.01 4,-0.002 6,0.01'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawButton(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight, btnValue;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        btnValue = node['value'] || '';\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: 60,\r\n            height: 28,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 8,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    filter: 'url(#drop-shadow)',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                { tag: 'text', $font: true, x: 10, y: 18, fill: 'black', value: btnValue, 'class': 'hand' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDropdown(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 0,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth - 20,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 2,\r\n                    x: btnWidth - 20,\r\n                    y: 0,\r\n                    width: 20,\r\n                    height: 28,\r\n                    stroke: '#000',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    style: 'fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1',\r\n                    d: 'm ' + (btnWidth - 15) + ',13 10,0 L ' + (btnWidth - 10) + ',20 z'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassicon(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.19999l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm25.68807,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.2l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                { tag: 'line', x1: 11, y1: 7, x2: 25, y2: 7, stroke: '#000' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassWithEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M2,10 20,10 20,35 2,35 Z M2,17 20,17 M20,10 28,5 28,9 M 28.5,4.7 24,4',\r\n                    style: 'fill:none;stroke:#000000;transform:scale(0.8);'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClass(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: '100%',\r\n            height: '100%',\r\n            items: [\r\n                { tag: 'rect', width: 50, height: 40, x: 0, y: 0, 'stroke-width': 2, stroke: 'black', fill: 'none'},\r\n                { tag: 'rect', width: 50, height: 12, x: 0, y: 18, 'stroke-width': 1, stroke: 'black', fill: 'none'},\r\n                { tag: 'text', x: 27, y: 14, 'text-anchor': 'middle', 'font-size': 11, value: 'Class'},\r\n                { tag: 'text', x: 5, y: 24, 'font-size': 5, value: '+ field: type'},\r\n                { tag: 'text', x: 5, y: 36, 'font-size': 5, value: '+ method(type)'}\r\n            ]\r\n        });\r\n    }\r\n/*\r\n<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n    <g>\r\n    <text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text>\r\n        <text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>\r\n*/\r\n\r\n    public static drawEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M10,30 30,10 M19,10 30,10 30,21',\r\n                    style: 'fill:none;stroke:#555;stroke-width:2;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawCopynode(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M5 5 L15 5 L15 20 L5 20 Z M5 10 L15 10',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M8 2 L18 2 L18 17 L8 17 Z M8 7 L18 7'\r\n                        + 'M11 4.5 L15 4.5 '\r\n                        + 'M10 10 L16 10 '\r\n                        + 'M10 13 L16 13 ',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawBasket(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M12 12 L18 12 L18 11 L22 11 L22 12 L28 12 L28 14 L27 14 L27 29 L13 29 L13 14 L12 14 Z M13 14 L27 14 M20 17 L20 26 M17 16 L17 27 M23 16 L23 27',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawPencil(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M6 20 L12 23 L33 23 L33 17 L12 17 Z M30 17 L30 23 M12 17 L12 23 M15 19 L28 19 M15 21 L28 21',\r\n                    stroke: '#000',\r\n                    'stroke-width': 1,\r\n                    fill: 'white'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    private static addText(y: number, offsetX: number, box: Element, text: string, textClass: string): Element {\r\n        let item: Element;\r\n        box.appendChild(Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'text-anchor': 'left',\r\n            width: 70,\r\n            x: 10,\r\n            y: y,\r\n            class: textClass,\r\n            value: text,\r\n            eventValue: text\r\n        }));\r\n        if (textClass === 'SVGTEXT') {\r\n            textClass = 'SVGChoiceText';\r\n        } else {\r\n            textClass = 'SVGChoice';\r\n        }\r\n\r\n        item = Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            x: offsetX,\r\n            y: y - 18,\r\n            width: 70,\r\n            height: 24,\r\n            stroke: 'none',\r\n            class: textClass,\r\n        });\r\n        item['eventValue'] = text;\r\n        box.appendChild(item);\r\n        return item;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n}\r\n","import {Control} from '../../Control';\r\nimport BridgeElement from '../../BridgeElement';\r\nimport Data from '../../Data';\r\nimport {Util} from '../../util';\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Table extends Control {\r\n    protected items: BridgeElement[] = [];\r\n    private columns: Column[] = [];\r\n    private cells: Object = {};\r\n    private $bodysection: HTMLTableSectionElement;\r\n    private $headersection: HTMLTableSectionElement;\r\n    private showedItems: Array<BridgeElement> = [];\r\n    // BridgeElements:\r\n    private itemsIds: Object = {};\r\n    private countElement: HTMLElement;\r\n    private countColumn: HTMLElement;\r\n    private countColumnPos: number;\r\n    private resultColumn: string;\r\n    private lastSearchText: string;\r\n    private searchColumns: Array<string> = [];\r\n    private searchText: Array<string> = [];\r\n    private sortColumn: Column;\r\n    private direction: number;\r\n    private moveElement: Column = null;\r\n    private isDrag: boolean = false;\r\n    private moveTimeStamp: number;\r\n    private moveX: number;\r\n    private movePos: number;\r\n    private dragColumn: Column;\r\n    private dragPos: number;\r\n    private tableOption: HTMLTableHeaderCellElement;\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    private static indexOfChild(item: BridgeElement) {\r\n        let i: number = 0;\r\n        let child: Node = item.gui;\r\n        while ((child = child.previousSibling) !== null) {\r\n            i++;\r\n        }\r\n        return i;\r\n    }\r\n\r\n    public load(data: any): void {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n            if (data.property) {\r\n                this.property = data.property;\r\n            }\r\n\r\n            if (data.searchColumns) {\r\n                let search: Array<string> = [];\r\n                if (typeof(data.searchColumns) === 'string') {\r\n                    search = data.searchColumns.split(' ');\r\n                } else {\r\n                    search = data.searchColumns;\r\n                }\r\n                for (let z: number = 0; z < search.length; z++) {\r\n                    let item = search[z].trim();\r\n                    if (item.length > 0) {\r\n                        if (this.searchColumns.indexOf(item) < 0) {\r\n                            this.searchColumns.push(item);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        if (this.$view) {\r\n            // Must be an Update\r\n            if (data['columns']) {\r\n                // It is a json must add all things and generate HTML\r\n                for (let i in data['columns']) {\r\n                    if (data['columns'].hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    let col = this.parseData(data['columns'][i]);\r\n                    this.addHeaderInfo(col);\r\n                    this.columns.push(col);\r\n                    this.tableOption.parentElement.insertBefore(col.$element, this.tableOption);\r\n                }\r\n                for (let i in this.showedItems) {\r\n                    let item: BridgeElement = this.showedItems[i];\r\n                    let cell;\r\n                    // Now Add some Children\r\n                    while (item.gui.children.length < this.columns.length) {\r\n                        cell = document.createElement('td');\r\n                        item.gui.appendChild(cell);\r\n                    }\r\n                    // Now Remove Some Children\r\n                    while (item.gui.children.length > this.columns.length) {\r\n                        item.gui.removeChild(item.gui.children[item.gui.children.length - 1]);\r\n                    }\r\n                    for (let c: number = 0; c < this.columns.length; c++) {\r\n                        let name = this.columns[c].attribute;\r\n                        // let count = this.columns.length;\r\n                        cell = item.gui.children[c];\r\n                        cell.innerHTML = item.model.getValue(name);\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n\r\n        this.$view = document.getElementById(id);\r\n        let headerrow: HTMLTableRowElement;\r\n        if (this.$view) {\r\n            if (!this.property) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('table');\r\n            this.$owner.appendChild(this);\r\n        }\r\n        if (!this.$bodysection) {\r\n            // add tbody element if missing\r\n            this.$bodysection = document.createElement('tbody');\r\n            this.$view.appendChild(this.$bodysection);\r\n        }\r\n        if (data['classname']) {\r\n            this.$view.className = data['classname'];\r\n        } else {\r\n            this.$view.className = 'mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp';\r\n        }\r\n\r\n        this.id = id;\r\n        this.$view.id = id;\r\n        this.$view.setAttribute('type', this.constructor['name'].toLowerCase());\r\n        let counter = 0;\r\n        for (let c = 0; c < this.$view.children.length; c++) {\r\n            let row: HTMLTableRowElement = <HTMLTableRowElement>this.$view.children[c];\r\n            if (row instanceof HTMLTableSectionElement) {\r\n                if (row.tagName === 'THEAD') {\r\n                    headerrow = row;\r\n                    // Its a thead\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingHeader(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                } else {\r\n                    // Its a tbody\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingData(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                }\r\n            } else {\r\n                // fallback, if there are no thead and tbody...\r\n                if (counter === 0) {\r\n                    headerrow = row;\r\n                    this.parsingHeader(row);\r\n                } else {\r\n                    this.parsingData(row);\r\n                }\r\n            }\r\n            counter++;\r\n        }\r\n        if (!headerrow || !this.$headersection) {\r\n            if (!this.$headersection) {\r\n                // find eventually existing thead\r\n                let header = this.$view.getElementsByTagName('thead');\r\n                if (header.length === 0) {\r\n                    this.$headersection = document.createElement('thead');\r\n                    this.$view.appendChild(this.$headersection);\r\n                } else {\r\n                    // take first thead element\r\n                    this.$headersection = <HTMLTableSectionElement>header.item(0);\r\n                }\r\n            }\r\n            if (!headerrow) {\r\n                headerrow = document.createElement('tr');\r\n                this.$headersection.appendChild(headerrow);\r\n            }\r\n        }\r\n\r\n        if (data['columns']) {\r\n            // It is a json must add all things and generate HTML\r\n            for (let i in data['columns']) {\r\n                if (data['columns'].hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                let col = this.parseData(data['columns'][i]);\r\n                this.addHeaderInfo(col);\r\n                this.columns.push(col);\r\n                headerrow.appendChild(col.$element);\r\n            }\r\n            this.tableOption = document.createElement('th');\r\n            this.tableOption.classList.add('tableOption');\r\n            headerrow.appendChild(this.tableOption);\r\n            let context: HTMLElement = this.addOptionItem(null, this.tableOption, true);\r\n            let contentChild: HTMLElement = this.addOptionItem('show', context, true);\r\n            // let simpleLink: HTMLElement = this.addOptionItem('show', contentChild, false);\r\n            this.addOptionItem('show', contentChild, false);\r\n        }\r\n        this.registerEvents(['mousemove', 'mousedown', 'mouseup', 'resize', 'dragstart', 'dragover', 'drop', 'dragend']);\r\n\r\n        // Check for SearchBar\r\n        // if(data[\"searchproperty\"]){\r\n        // Create Full Row\r\n        let searchBar = document.createElement('tr');\r\n        let cell = document.createElement('td');\r\n        cell.setAttribute('colspan', '' + (this.columns.length));\r\n        searchBar.appendChild(cell);\r\n\r\n        let search = document.createElement('input');\r\n        search.className = 'search';\r\n        let that = this;\r\n        search.addEventListener('keyup', function (evt) {\r\n            that.search(evt.target['value']);\r\n        });\r\n\r\n        cell.appendChild(search);\r\n        if (this.resultColumn) {\r\n            if (this.resultColumn.indexOf('#') !== 0) {\r\n                this.countElement = document.createElement('div');\r\n                searchBar.appendChild(this.countElement);\r\n            } else {\r\n                for (let z: number = 0; z < this.$headersection.children.length; z++) {\r\n                    if (this.$headersection.children[z].innerHTML === this.resultColumn) {\r\n                        this.countColumn = <HTMLElement> this.$headersection.children[z];\r\n                        this.countColumnPos = z;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        let first = this.$headersection.children.item(0);\r\n        this.$headersection.insertBefore(searchBar, first);\r\n\r\n        this.updateElement(this.property, null);\r\n\r\n        // now update those elements, that were not loaded currently\r\n    }\r\n\r\n    public tableEvent(type: string, e: Event) {\r\n        let button: number = 0;\r\n        let eventX: number = 0;\r\n        if (e instanceof MouseEvent) {\r\n            button = e.buttons;\r\n            eventX = e.pageX;\r\n        }\r\n        if (type === 'mouseup') {\r\n            this.moveElement = null;\r\n        } else if (type === 'mousedown' || type === 'resize') {\r\n            // End to Resize\r\n            this.moveElement = null;\r\n            if (button === 1) {\r\n                let c: number;\r\n                for (c = 0; c < this.columns.length; c++) {\r\n                    if (this.columns[c].$resize === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = false;\r\n                        break;\r\n                    } else if (this.columns[c].$element === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = true;\r\n                    }\r\n                }\r\n                this.moveTimeStamp = e.timeStamp;\r\n                this.moveX = eventX;\r\n            } else {\r\n                this.moveTimeStamp = 0;\r\n            }\r\n        } else if (type === 'mousemove') {\r\n            if (button === 1 && this.moveElement) {\r\n                if (this.moveTimeStamp && e.timeStamp - this.moveTimeStamp < 2000) {\r\n                    if (this.isDrag) {\r\n                        // FIXME\r\n                    } else {\r\n                        let x = eventX - this.moveX;\r\n                        let width = this.moveElement.$element.offsetWidth;\r\n                        this.moveElement.$element.width = '' + (width + x);\r\n                        e.stopPropagation();\r\n                    }\r\n                }\r\n                this.moveX = eventX;\r\n                this.moveTimeStamp = e.timeStamp;\r\n            }\r\n        } else if (this.isDrag) {\r\n            this.columnDragEvent(type, <DragEvent> e);\r\n        }\r\n    }\r\n\r\n    public parsingHeader(row: HTMLTableRowElement) {\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let column: HTMLTableHeaderCellElement = <HTMLTableHeaderCellElement>row.children[i];\r\n            let id = column.innerHTML.trim();\r\n            let col: Column = null;\r\n            for (let c in this.columns) {\r\n                if (this.columns.hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                if (this.columns[c].label === id) {\r\n                    col = this.columns[c];\r\n                    col.$element = column;\r\n                    break;\r\n                }\r\n            }\r\n            if (col === null) {\r\n                col = new Column();\r\n                col.label = id;\r\n                col.attribute = column.getAttribute('attribute');\r\n                col.$element = column;\r\n                this.columns.push(col);\r\n            }\r\n            this.addHeaderInfo(col);\r\n        }\r\n    }\r\n\r\n    public parsingData(row: HTMLTableRowElement) {\r\n        let id = row.getAttribute('id');\r\n        let item: Data = this.$owner.getItem(id);\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let cell: HTMLTableCellElement = <HTMLTableCellElement>row.children[i];\r\n            let colAttribute = this.columns[i].attribute;\r\n            if (colAttribute.indexOf('\\.') < 0) {\r\n                item[colAttribute] = cell.innerHTML.trim();\r\n            }\r\n        }\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: Object, newValue: Object) {\r\n        if (entity) {\r\n            // Check for Show\r\n            if (this.property && !entity.hasProperty(property)) {\r\n                return;\r\n            }\r\n        }\r\n        if (entity.id === undefined) {\r\n            return;\r\n        }\r\n        let item: BridgeElement = <BridgeElement>this.itemsIds[entity.id];\r\n        let row: HTMLTableRowElement;\r\n        if (!item) {\r\n            item = new BridgeElement(entity);\r\n            this.items.push(item);\r\n            this.itemsIds[entity.id] = item;\r\n        }\r\n        row = this.cells[entity.id];\r\n        if (row) {\r\n            item.gui = row;\r\n        }\r\n        if (this.searching(item) === false) {\r\n            return;\r\n        }\r\n        let cell;\r\n        let showItem = false;\r\n\r\n        if (!row) {\r\n            showItem = true;\r\n            row = document.createElement('tr');\r\n            let count = this.columns.length;\r\n            for (let i = 0; i < count; i++) {\r\n                cell = document.createElement('td');\r\n                row.appendChild(cell);\r\n            }\r\n            this.cells[entity.id] = row;\r\n            item.gui = row;\r\n        }\r\n        for (let c: number = 0; c < this.columns.length; c++) {\r\n            let name = this.columns[c].attribute;\r\n            if (name === property) {\r\n                cell = row.children[c];\r\n                cell.innerHTML = <string>newValue;\r\n            }\r\n        }\r\n        if (showItem) {\r\n            this.showItem(item, true);\r\n        }\r\n        // super.propertyChange(entity, property, newValue, oldValue);\r\n    }\r\n\r\n    public sort(column: Column) {\r\n        if (this.sortColumn === column) {\r\n            if (this.direction === 1) {\r\n                this.direction = -1;\r\n                column.$element.classList.remove('asc');\r\n                column.$element.classList.add('desc');\r\n            } else {\r\n                this.direction = 1;\r\n                column.$element.classList.remove('desc');\r\n                column.$element.classList.add('asc');\r\n            }\r\n        } else {\r\n            if (this.sortColumn !== null) {\r\n                this.sortColumn.$element.classList.remove('desc');\r\n                this.sortColumn.$element.classList.remove('asc');\r\n            }\r\n            this.sortColumn = column;\r\n            this.sortColumn.$element.classList.add('asc');\r\n            this.direction = 1;\r\n        }\r\n        let that = this;\r\n        let sort = function (a: BridgeElement, b: BridgeElement) {\r\n            return that.sorting(a, b);\r\n        };\r\n        this.showedItems.sort(sort);\r\n        let len: number = this.showedItems.length;\r\n        let body = this.$bodysection;\r\n        let i = 0;\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            if (i !== Table.indexOfChild(item)) {\r\n                break;\r\n            }\r\n            i = i + 1;\r\n        }\r\n        while (body.children.length > i) {\r\n            body.removeChild(body.children.item(body.children.length - 1));\r\n        }\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            body.appendChild(item.gui);\r\n            i = i + 1;\r\n        }\r\n\r\n        //      body.removeChild(item.gui);\r\n        //      body.remove\r\n    }\r\n\r\n    public sorting(a: BridgeElement, b: BridgeElement): number {\r\n        let path: string[] = this.sortColumn.attribute.split('.');\r\n        let itemA = a.model.prop;\r\n        let itemB = b.model.prop;\r\n        let check = this.sortColumn.attribute;\r\n        for (let p = 0; p < path.length; p++) {\r\n            check = path[p];\r\n            if (itemA[check]) {\r\n                itemA = itemA[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n            if (itemB[check]) {\r\n                itemB = itemB[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n        if (itemA !== itemB) {\r\n            if (this.direction === 1) {\r\n                return (itemA < itemB) ? -1 : 1;\r\n            }\r\n            return (itemA < itemB) ? 1 : -1;\r\n\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    // Searching\r\n    public search(origSearchText: string): void {\r\n        if (!origSearchText) {\r\n            origSearchText = '';\r\n        }\r\n        let searchText: string = origSearchText.trim().toLowerCase();\r\n        if (searchText === this.lastSearchText && searchText !== '') {\r\n            return; // <==== nothing to be done\r\n        }\r\n        let oldSearch: string = this.lastSearchText;\r\n        this.lastSearchText = searchText;\r\n\r\n        this.parseSearchArray();\r\n        if (searchText !== '' && oldSearch !== null && searchText.indexOf(oldSearch) >= 0 && searchText.indexOf('|') < 0) {\r\n            this.searchArray(this.showedItems);\r\n        } else {\r\n            this.searchSet(this.items);\r\n        }\r\n        this.refreshCounter();\r\n    }\r\n\r\n    public refreshCounter() {\r\n        if (this.countColumn) {\r\n            this.countColumn.innerHTML = this.columns[this.countColumnPos].label + ' (' + this.showedItems.length + ')';\r\n        }\r\n        // var countElement = document.getElementById('talkCount');\r\n        //  if (countElement) {\r\n        //     var txt = (this.showedItems.size() > 0 && searchText.length > 0 ) ? this.options.TEXT_SEARCHLIST : this.options.TEXT_SEARCHFULLLIST;\r\n        //     countElement.innerHTML = txt.replace(\"%LEN%\", this.root['children'].length).replace(\"%COUNT%\", this.showedItems.size()).replace(\"%SEARCH%\", origSearchText);\r\n        // }\r\n        // if (this.countColumn) {\r\n        //     this.countColu1mn.innerHTML = this.countColumn[\"label\"] + \" (\" + this.showedItems.size() + \")\";\r\n        // }\r\n    }\r\n\r\n    public parseSearchArray() {\r\n        let pos: number = 0;\r\n        let split: Array<string> = [];\r\n        let quote: boolean = false;\r\n        for (let i: number = 0; i < this.lastSearchText.length; i++) {\r\n            if ((this.lastSearchText.charAt(i) === ' ') && !quote) {\r\n                let txt = this.lastSearchText.substring(pos, i).trim();\r\n                if (txt.length > 0) {\r\n                    split.push(txt);\r\n                }\r\n                pos = i + 1;\r\n            } else if (this.lastSearchText.charAt(i) === '\\\"') {\r\n                if (quote) {\r\n                    let txt = this.lastSearchText.substring(pos, i).trim();\r\n                    if (txt.length > 0) {\r\n                        split.push(txt);\r\n                    }\r\n                    pos = i + 1;\r\n                } else {\r\n                    pos = i + 1;\r\n                }\r\n                quote = !quote;\r\n            }\r\n        }\r\n        if (pos < this.lastSearchText.length) {\r\n            split.push(this.lastSearchText.substring(pos, this.lastSearchText.length).trim());\r\n        }\r\n        this.searchText = split;\r\n        return split;\r\n    }\r\n\r\n    public searchArray(root: Array<BridgeElement>) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let i: number = 0; i < root.length; i++) {\r\n            let item: BridgeElement = root[i];\r\n            this.showItem(item, this.searching(item));\r\n        }\r\n    }\r\n\r\n    public searchSet(root: BridgeElement[]) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let item of root) {\r\n            let child: BridgeElement = <BridgeElement>item;\r\n            this.showItem(child, this.searching(child));\r\n        }\r\n    }\r\n\r\n    public showItem(item: BridgeElement, visible: boolean) {\r\n        if (visible) {\r\n            this.showedItems.push(item);\r\n            this.$bodysection.appendChild(item.gui);\r\n        } else if (item.gui && item.gui.parentElement) {\r\n            this.$bodysection.removeChild(item.gui);\r\n        }\r\n    }\r\n\r\n    public searching(item: BridgeElement): boolean {\r\n        let fullText: string = '';\r\n        for (let i: number = 0; i < this.searchColumns.length; i++) {\r\n            fullText = fullText + ' ' + item.model.getValue(this.searchColumns[i]);\r\n        }\r\n        fullText = fullText.trim().toLowerCase();\r\n        for (let z: number = 0; z < this.searchText.length; z++) {\r\n            if ('' !== this.searchText[z]) {\r\n                let orSplit: Array<string>;\r\n                if (this.searchText[z].indexOf('|') > 0) {\r\n                    orSplit = this.searchText[z].split('|');\r\n                } else {\r\n                    orSplit = [this.searchText[z]];\r\n                }\r\n                let o: number = 0;\r\n                for (; o < orSplit.length; o++) {\r\n                    let pos: number = orSplit[o].indexOf(':');\r\n                    if (orSplit[o].indexOf('#') === 0 && pos > 1) {\r\n                        // if (searchProperties.contains(propString)) {\r\n                        let value: string = orSplit[o].substring(pos + 1);\r\n                        let column: string = orSplit[o].substring(1, pos - 1);\r\n                        let dataValue: Object = item.model.getValue(column);\r\n                        if (dataValue) {\r\n                            if (dataValue.toString().toLowerCase().indexOf(value) >= 0) {\r\n                                // Search for simple Property\r\n                                break;\r\n                            }\r\n                        }\r\n                    } else if (orSplit[o].length > 1 && orSplit[o].indexOf('-') === 0) {\r\n                        if (fullText.indexOf(orSplit[o].substring(1)) < 0) {\r\n                            break;\r\n                        }\r\n                    } else if (fullText.indexOf(orSplit[o]) >= 0) {\r\n                        // his search word is found in full text\r\n                        break;\r\n                    }\r\n                }\r\n                if (o === orSplit.length) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public getColumn(): Column[] {\r\n        return this.columns;\r\n    }\r\n\r\n    public updateElement(property: string, value: string): void {\r\n        // first clear all elements inside the table:\r\n        for (let item of this.items) {\r\n            if (item instanceof BridgeElement) {\r\n                (<BridgeElement>item).model.removeListener(this);\r\n            }\r\n        }\r\n\r\n        this.items = [];\r\n        this.itemsIds = {};\r\n\r\n        // load all entitys that match the property\r\n        if (this.property !== undefined) {\r\n            let items = this.$owner.getItems();\r\n            for (let j in items) {\r\n                if (items.hasOwnProperty(j)) {\r\n                    let item = items[j];\r\n                    if (item instanceof Data) {\r\n                        if (property === j) {\r\n                            // if (property == item.property) {\r\n                            let i = new BridgeElement(<Data>item);\r\n                            this.items.push(i);\r\n                            this.itemsIds[item.id] = i;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            this.redrawAllElements();\r\n        }\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        if (this.$owner !== null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    protected redrawAllElements() {\r\n        let children: HTMLCollection = this.$bodysection.children;\r\n        // remove old children\r\n        for (let i = 0; i < children.length; i++) {\r\n            let child = children.item(i);\r\n            // remove child\r\n            this.$bodysection.removeChild(child);\r\n        }\r\n\r\n        // load new children\r\n        for (let obj of this.items) {\r\n            // register listeners\r\n            obj.model.addListener(this);\r\n            // create tr\r\n            let row = this.createRow(obj);\r\n            this.$bodysection.appendChild(row);\r\n            this.cells[obj.id] = row;\r\n        }\r\n    }\r\n\r\n    private parseData(column: any): Column {\r\n        let col = new Column();\r\n        col.label = column.label || column.id;\r\n        col.attribute = column.attribute || column.label || column.id;\r\n        col.$element = document.createElement('th');\r\n        col.$element.innerHTML = col.label;\r\n        col.$element.draggable = true;\r\n\r\n        // resize Header\r\n        col.$resize = document.createElement('div');\r\n        col.$resize.classList.add('resize');\r\n        col.$element.appendChild(col.$resize);\r\n\r\n        return col;\r\n    }\r\n\r\n    private createRow(data: BridgeElement): HTMLTableRowElement {\r\n        let tr: HTMLTableRowElement = document.createElement('tr');\r\n\r\n        for (let id of this.columns) {\r\n            let td: HTMLTableDataCellElement = document.createElement('td');\r\n            tr.appendChild(td);\r\n            td.innerHTML = data.model.getValue(id.attribute);\r\n        }\r\n        return tr;\r\n    }\r\n\r\n    private addHeaderInfo(col: Column) {\r\n        let element: HTMLTableCellElement = col.$element;\r\n        let that = this;\r\n        element.classList.add('sort');\r\n        element.addEventListener('click',\r\n            function () {\r\n                that.sort(col);\r\n            },\r\n            false);\r\n    }\r\n\r\n    private columnDragEvent(type: string, e: DragEvent) {\r\n        if (type === 'dragstart') {\r\n            // Target (this) element is the source node.\r\n            this.moveElement.$element.style.opacity = '0.4';\r\n            e.dataTransfer.effectAllowed = 'move';\r\n            e.dataTransfer.setData('text/json', JSON.stringify(Util.toJson(this.moveElement)));\r\n        } else if (type === 'dragenter') {\r\n            // TO Nothing\r\n        } else if (type === 'dragleave') {\r\n            this.moveElement.$element.classList.remove('over');\r\n        } else if (type === 'dragover') {\r\n            if (e.preventDefault) {\r\n                e.preventDefault(); // Necessary. Allows us to drop.\r\n            }\r\n            for (let c = 0; c < this.columns.length; c++) {\r\n                if (this.columns[c].$element === e.target) {\r\n                    this.dragColumn = this.columns[c];\r\n                    this.dragPos = c;\r\n                    this.columns[c].$element.classList.add('over');\r\n                } else {\r\n                    this.columns[c].$element.classList.remove('over');\r\n                }\r\n            }\r\n            if (e.target === this.tableOption) {\r\n                this.tableOption.classList.add('over');\r\n                this.dragPos = this.columns.length;\r\n            } else {\r\n                this.tableOption.classList.remove('over');\r\n            }\r\n            e.dataTransfer.dropEffect = 'move';  // See the section on the DataTransfer object.\r\n        } else if (type === 'drop') {\r\n            // this / e.target is current target element.\r\n            if (e.stopPropagation) {\r\n                e.stopPropagation(); // stops the browser from redirecting.\r\n            }\r\n            if (this.movePos === this.dragPos) {\r\n                return;\r\n            }\r\n            // movePos -> dragPos\r\n            // See the section on the DataTransfer object.\r\n            // DataModel\r\n            this.columns.splice(this.movePos, 1);\r\n            if (this.movePos >= this.dragPos) {\r\n                this.columns.splice(this.dragPos, 0, this.moveElement);\r\n            } else {\r\n                this.columns.splice(this.dragPos - 1, 0, this.moveElement);\r\n            }\r\n\r\n            // Header Line\r\n            let line: HTMLElement = this.moveElement.$element.parentElement;\r\n            line.removeChild(this.moveElement.$element);\r\n            if (this.dragPos < this.columns.length) {\r\n                line.insertBefore(this.moveElement.$element, this.dragColumn.$element);\r\n            } else {\r\n                line.insertBefore(this.moveElement.$element, this.tableOption);\r\n            }\r\n\r\n            let oldElement: Element;\r\n            let newElement: Element;\r\n\r\n            // Now all Childs\r\n            for (let i = 0; i < this.$bodysection.children.length; i++) {\r\n                // Each line\r\n                line = <HTMLElement>this.$bodysection.children.item(i);\r\n                oldElement = line.children.item(this.movePos);\r\n                newElement = line.children.item(this.dragPos);\r\n                line.removeChild(oldElement);\r\n                line.insertBefore(oldElement, newElement);\r\n            }\r\n        } else if (type === 'dragend') {\r\n            // this/e.target is the source node.\r\n            this.moveElement.$element.style.opacity = '1';\r\n            for (let i = 0; i < this.columns.length; i++) {\r\n                this.columns[i].$element.classList.remove('over');\r\n            }\r\n            this.tableOption.classList.remove('over');\r\n        }\r\n    }\r\n\r\n    private addOptionItem(label: string, parent: HTMLElement, sub: boolean): HTMLElement {\r\n        let labelControl;\r\n        if (label) {\r\n            labelControl = document.createElement('a');\r\n            labelControl.appendChild(document.createTextNode(label));\r\n            labelControl.href = 'javascript:void(0);';\r\n            parent.appendChild(labelControl);\r\n        }\r\n        if (sub) {\r\n            let context = document.createElement('div');\r\n            context.classList.add('dropdown-content');\r\n            context.style.setProperty('position', 'absolute');\r\n            parent.appendChild(context);\r\n\r\n            /* When the user clicks on the button,\r\n             toggle between hiding and showing the dropdown content */\r\n            parent.addEventListener(\r\n                'click',\r\n                function () {\r\n                    context.classList.toggle('show');\r\n                },\r\n                false);\r\n            return context;\r\n        }\r\n        return labelControl;\r\n    }\r\n\r\n    private registerEvents(events: string[]) {\r\n        let that = this;\r\n        for (let i = 0; i < events.length; i++) {\r\n            this.$view.addEventListener(events[i], function (evt) {\r\n                return that.tableEvent(events[i], evt);\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\nclass Column {\r\n    label: string;\r\n    attribute: string;\r\n    $element: HTMLTableHeaderCellElement;\r\n    $resize: HTMLDivElement;\r\n    visible: boolean;\r\n}\r\n","import { AutoComplete } from './AutoComplete';\r\nimport { BR } from './BR';\r\nimport { Div } from './Div';\r\nimport { Label } from './Label';\r\n\r\nexport * from './Node';\r\nexport * from './Class';\r\nexport * from './SO';\r\nexport * from './Symbol';\r\n\r\nexport * from './BR';\r\nexport * from './Button';\r\nexport * from './Div';\r\nexport * from './Form';\r\nexport * from './Input';\r\nexport * from './Label';\r\nexport * from './Table';\r\nexport * from './HTML';\r\nexport * from './Dice';\r\nexport * from './AutoComplete';\r\nexport * from './Attribute';\r\nexport * from './Method';\r\nexport * from './ClazzProperty';\r\n\r\nnew AutoComplete();\r\nnew BR();\r\nnew Div();\r\nnew Label();\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class AddNode implements EventHandler {\r\n\r\n    public MIN_SIZE_TO_ADD_NODE: number = 30;\r\n    public MIN_SIZE_TO_ADD_TEXT: number = 10;\r\n    private graph: Graph;\r\n    private svgRect: SVGSVGElement;\r\n    private svgGroupAddNode: SVGSVGElement;\r\n    private svgTextAddNode: SVGSVGElement;\r\n    private svgTextRectAddNode: SVGSVGElement;\r\n    private isRectDrawing: boolean;\r\n    private isDrawToLeft: boolean;\r\n    private isDrawToTop: boolean;\r\n    private isBigEnoughForAddNode: boolean;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(AddNode.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(AddNode.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!this.canHandle()) {\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element.id !== 'RootElement') {\r\n            return false;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element.id === 'RootElement') {\r\n                    this.start(event, element);\r\n\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mousemove':\r\n                this.drawRect(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.removeRect();\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.addNode();\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawRect(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isRectDrawing) {\r\n            return;\r\n        }\r\n\r\n        evt.stopPropagation();\r\n\r\n        let width = Util.getEventX(evt) - this.x;\r\n        let height = Util.getEventY(evt) - this.y;\r\n\r\n        // rectangle is in a negative area, drawn to upper case. not possibble with svg\r\n        if (width < 0) {\r\n            this.isDrawToLeft = true;\r\n            width *= -1;\r\n        } else {\r\n            this.isDrawToLeft = false;\r\n        }\r\n\r\n        if (height < 0) {\r\n            this.isDrawToTop = true;\r\n            height *= -1;\r\n        } else {\r\n            this.isDrawToTop = false;\r\n        }\r\n\r\n        if (width > this.MIN_SIZE_TO_ADD_NODE && height > this.MIN_SIZE_TO_ADD_NODE) {\r\n            this.isBigEnoughForAddNode = true;\r\n        } else {\r\n            this.isBigEnoughForAddNode = false;\r\n        }\r\n\r\n        this.graph.root.style.cursor = 'pointer';\r\n\r\n        // if line wasnt draw\r\n        if (!this.svgRect) {\r\n\r\n            let rectAddNode = Util.createShape({\r\n                tag: 'rect',\r\n                id: 'addNodeRect',\r\n                x: this.x,\r\n                y: this.y,\r\n                width: 1,\r\n                height: 1,\r\n                class: 'SVGAddNode'\r\n            });\r\n\r\n            let group = Util.createShape({ tag: 'g', id: 'groupAddNode' });\r\n            group.appendChild(rectAddNode);\r\n\r\n            this.graph.root.appendChild(group);\r\n            this.svgRect = rectAddNode;\r\n            this.svgGroupAddNode = group;\r\n        }\r\n        else {\r\n\r\n            let svgRectBBox = this.svgRect.getBBox();\r\n\r\n            // if rect is big enough, show text as helper\r\n            if ((svgRectBBox.width > this.MIN_SIZE_TO_ADD_TEXT\r\n                || svgRectBBox.height > this.MIN_SIZE_TO_ADD_TEXT) && !this.svgTextAddNode) {\r\n\r\n                let textAddNode = Util.createShape({\r\n                    tag: 'text',\r\n                    x: this.x,\r\n                    y: this.y - 5,\r\n                    'font-family': 'Verdana',\r\n                    'font-size': 12,\r\n                    fill: 'black'\r\n                });\r\n                textAddNode.textContent = 'Hold on and move to create a new class';\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n\r\n\r\n                // get correct size of text node\r\n                let sizeClientRect: ClientRect = textAddNode.getBoundingClientRect();\r\n\r\n                let rectBackgroundForText = Util.createShape({\r\n                    tag: 'rect',\r\n                    x: this.x,\r\n                    y: this.y - sizeClientRect.height,\r\n                    width: sizeClientRect.width,\r\n                    height: sizeClientRect.height,\r\n                    fill: '#DDD',\r\n                    'stroke-width': 0\r\n                });\r\n\r\n                this.svgTextRectAddNode = rectBackgroundForText;\r\n                this.svgTextAddNode = textAddNode;\r\n                this.svgGroupAddNode.appendChild(rectBackgroundForText);\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n            }\r\n\r\n            if (this.isDrawToLeft) {\r\n                this.svgRect.setAttributeNS(null, 'x', '' + Util.getEventX(evt));\r\n            }\r\n\r\n            if (this.isDrawToTop) {\r\n                this.svgRect.setAttributeNS(null, 'y', '' + Util.getEventY(evt));\r\n            }\r\n\r\n            // set width and height\r\n            this.svgRect.setAttributeNS(null, 'width', width.toString());\r\n            this.svgRect.setAttributeNS(null, 'height', height.toString());\r\n\r\n            // set color\r\n            if (this.isBigEnoughForAddNode) {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode-ready');\r\n\r\n                // draw text\r\n            }\r\n            else {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeRect(): void {\r\n        this.isRectDrawing = false;\r\n        this.isBigEnoughForAddNode = false;\r\n\r\n        this.graph.root.style.cursor = 'default';\r\n\r\n        if (this.svgGroupAddNode) {\r\n            this.graph.root.removeChild(this.svgGroupAddNode);\r\n            this.svgGroupAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgRect) {\r\n            this.svgRect = undefined;\r\n        }\r\n\r\n        if (this.svgTextAddNode) {\r\n            this.svgTextAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgTextRectAddNode) {\r\n            this.svgTextRectAddNode = undefined;\r\n        }\r\n    }\r\n\r\n    private addNode(): void {\r\n\r\n        if (!this.isBigEnoughForAddNode) {\r\n            this.removeRect();\r\n            return;\r\n        }\r\n\r\n        this.removeRect();\r\n        let node = this.graph.addElementWithValues('Class', { x: this.x, y: this.y });\r\n        this.graph.drawElement(node);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isRectDrawing) {\r\n            return;\r\n        }\r\n        this.isRectDrawing = true;\r\n\r\n        this.x = Util.getEventX(evt);\r\n        this.y = Util.getEventY(evt);\r\n    }\r\n\r\n}\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement, Point } from '../elements/BaseElements';\r\nimport { GraphModel } from '../elements/Model';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Control } from '../Control';\r\nimport { Util } from '../util';\r\n\r\nexport class Drag implements EventHandler {\r\n\r\n    private element: DiagramElement;\r\n    private svgElement: SVGSVGElement;\r\n    private dragging = false;\r\n    private reinsert = false;\r\n    private mouseOffset = new Point();\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        if (!this.canHandle()) {\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if ((!this.dragging) && (element.id !== 'RootElement')) {\r\n                    this.element = element;\r\n                    this.svgElement = <SVGSVGElement>element.$view;\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mouseup':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n\r\n                break;\r\n            case 'mousemove':\r\n                if (this.dragging) {\r\n                    this.drag(event, element);\r\n                }\r\n                break;\r\n            case 'mouseleave':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Drag.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Drag.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private reset() {\r\n        this.dragging = false;\r\n        this.svgElement.style.cursor = 'pointer';\r\n\r\n        /*  WORKAROUND\r\n            Chrome got problem with the Node.appendChild() method.\r\n            Sometimes it works, sometimes not.\r\n            So the background is, in the drag method will the current element be appended\r\n            to front of the svg root.\r\n            If this happend, the click event won't fire.\r\n            So it will be fired manually.\r\n            This problem occurs only in chrome.\r\n        */\r\n        if (Util.isChrome()) {\r\n            let clickEvt = Util.createCustomEvent('click');\r\n            this.svgElement.dispatchEvent(clickEvt);\r\n        }\r\n    }\r\n\r\n    private start(evt: Event | any, element: Control) {\r\n\r\n        this.dragging = true;\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n        this.reinsert = true;\r\n\r\n        this.svgElement.style.cursor = 'move';\r\n    }\r\n\r\n    private drag(evt: Event | any, element: DiagramElement) {\r\n\r\n        if (this.reinsert) {\r\n            if (this.element.id !== 'RootElement') {\r\n                // nesseccary to set the dragged object on top of svg children\r\n                this.graph.root.appendChild(this.svgElement);\r\n            }\r\n\r\n            let dragEvent = Util.createCustomEvent('drag');\r\n            element.$view.dispatchEvent(dragEvent);\r\n        }\r\n        this.reinsert = false;\r\n\r\n        evt.stopPropagation();\r\n\r\n        const translation = this.svgElement.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        const sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        const transX = sx + evt.clientX - this.mouseOffset.x;\r\n        const transY = sy + evt.clientY - this.mouseOffset.y;\r\n        this.svgElement.setAttributeNS(null, 'transform', 'translate(' + transX + ' ' + transY + ')');\r\n        this.element.getPos().addNum(transX - sx, transY - sy);\r\n\r\n        if (this.element instanceof Node) {\r\n            (<Node>this.element).redrawEdges();\r\n        }\r\n\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n\r\n\r\n        // resize svg root\r\n        let maxX = this.element.getPos().x + this.element.getSize().x;\r\n        let maxY = this.element.getPos().y + this.element.getSize().y;\r\n\r\n        let domRectRoot = this.graph.root.getBoundingClientRect();\r\n        if(!domRectRoot){\r\n            return;\r\n        }\r\n\r\n        if(maxX > domRectRoot.width){\r\n            this.graph.root.setAttributeNS(null, 'width', '' + maxX);\r\n        }\r\n        \r\n        if(maxY > domRectRoot.height){\r\n            this.graph.root.setAttributeNS(null, 'height', '' + maxY);\r\n        }\r\n    }\r\n}\r\n","import PropertyChangeSupport from '../PropertyChangeSupport';\r\nimport Data from '../Data';\r\nimport {Adapter} from '../Adapter';\r\nimport ClazzProperty from '../elements/nodes/ClazzProperty';\r\n\r\nexport class GraphListener implements PropertyChangeSupport {\r\n    private $owner: ClazzProperty;\r\n\r\n    constructor(owner: ClazzProperty) {\r\n        this.$owner = owner;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        let adapter = this.$owner.getRoot().getAdapter();\r\n        if (adapter) {\r\n            // messages.add(\"{\\\"class\\\":\\\"de.uniks.networkparser.test.model.House\\\",\\\"id\\\":\\\"H1\\\",\\\"rem\\\":{\\\"floor\\\":4},\\\"upd\\\":{\\\"floor\\\":42}}\");\r\n            let myId =  this.$owner.$owner.getId();\r\n            if (myId && myId.length > 0) {\r\n                let pos = myId.indexOf(':');\r\n                if (pos > 0) {\r\n                    myId = myId.substring(0, pos).trim();\r\n                }\r\n            }\r\n            let myName = this.$owner.getName();\r\n            let remJson = {};\r\n            remJson[myName] = oldValue;\r\n            let updJson = {};\r\n            updJson[myName] = newValue;\r\n            let json = {};\r\n            json['id'] = myId;\r\n            json['rem'] = remJson;\r\n            json['upd'] = updJson;\r\n            let message = JSON.stringify(json);\r\n            (<Adapter> adapter).update(message);\r\n        }\r\n    }\r\n}\r\n","import {Graph} from '../elements/';\r\nimport {EventHandler, EventBus} from '../EventBus';\r\nimport {DiagramElement} from '../elements/';\r\nimport {Util} from '../util';\r\n\r\nexport class ImportFile implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(ImportFile.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(ImportFile.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        let type: string = typeof event;\r\n        if (type !== 'DragEvent') {\r\n            return false;\r\n        }\r\n        let evt: DragEvent = <DragEvent>event;\r\n        if (evt.type === 'dragover') {\r\n            this.handleDragOver(evt);\r\n        } else if (evt.type === 'dragleave') {\r\n            if (this.graph.$view !== evt.target) {\r\n                return false;\r\n            }\r\n            this.setBoardStyle('dragleave');\r\n        } else if (evt.type === 'drop') {\r\n            this.handleLoadFile(evt);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public setBoardStyle(typ: string): boolean {\r\n        let b = this.graph.$view;\r\n        Util.removeClass(b, 'Error');\r\n        Util.removeClass(b, 'Ok');\r\n        Util.removeClass(b, 'Add');\r\n        if (typ === 'dragleave') {\r\n            if (b['errorText']) {\r\n                b.removeChild(b['errorText']);\r\n                b['errorText'] = null;\r\n            }\r\n            return true;\r\n        }\r\n        Util.addClass(b, typ);\r\n        if (typ === 'Error') {\r\n            if (!b['errorText']) {\r\n                b['errorText'] = Util.create({tag: 'div', style: 'margin-top: 30%', value: 'NO TEXTFILE'});\r\n                b.appendChild(b['errorText']);\r\n            }\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private handleLoadFile(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n\r\n        let files = evt.dataTransfer.files; // FileList object.\r\n\r\n        if (files.length > 1) {\r\n            evt.dataTransfer.dropEffect = 'none';\r\n            return;\r\n        }\r\n\r\n        // files is a FileList of File objects. List some properties.\r\n        let reader  = new FileReader();\r\n        let output = [];\r\n        let htmlResult = '';\r\n        let that = this;\r\n        for (let i = 0, f; f = files[i]; i++) {\r\n            reader.onload = function(event) {\r\n                htmlResult = event.target['result'];\r\n                console.log('fileContent: ' + htmlResult);\r\n\r\n                // CHANGE TO INTERNAL OBJECT\r\n                if (that.graph) {\r\n                    that.graph.import(htmlResult);\r\n                }\r\n            };\r\n            reader.readAsText(f);\r\n        }\r\n        this.setBoardStyle('dragleave');\r\n    }\r\n\r\n    private handleDragOver(evt: DragEvent): void {\r\n        let error: boolean = true, n: string, f;\r\n        let files = evt.dataTransfer.files;\r\n        // process all File objects\r\n        if (files && files.length > 0) {\r\n            for (let i: number = 0; i < files.length; i += 1) {\r\n                f = files[i];\r\n                if (f.type.indexOf('text') === 0) {\r\n                    error = false;\r\n                } else if (f.type === '') {\r\n                    n = f.name.toLowerCase();\r\n                    if (n.indexOf('json', n.length - 4) !== -1) {\r\n                        error = false;\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            let items = evt.dataTransfer.items;\r\n            if (items && items.length > 0) {\r\n                for (let z = 0; z < items.length; z ++) {\r\n                    if (items[z].type === '' || items[z].type === 'text/plain') {\r\n                        error = false;\r\n                    }\r\n                }\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.\r\n        if (error) {\r\n            this.dragStyler(evt, 'Error');\r\n        } else if (evt.ctrlKey) {\r\n            this.dragStyler(evt, 'Add');\r\n        } else {\r\n            this.dragStyler(evt, 'Ok');\r\n        }\r\n        /* //evt.target['className'] += ' diagramLoadFile';\r\n        '//console.log('handDragOver');*/\r\n    }\r\n\r\n    private dragStyler(event: Event, typ: string) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n        this.setBoardStyle(typ);\r\n    }\r\n\r\n    private handleDragLeave(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n        evt.dataTransfer.dropEffect = 'link'; // Explicitly show this is a copy.\r\n        evt.target['className'] = 'diagram';\r\n        console.log('handDragLeave');\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Class } from '../elements/nodes/Class';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Association } from '../elements/index';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class NewEdge implements EventHandler {\r\n    private graph: Graph;\r\n    private svgLine: SVGSVGElement;\r\n    private isEdgeDrawing: boolean;\r\n    private sourceNode: Node;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    private lastTargetNode: Node;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(NewEdge.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(NewEdge.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!((<KeyboardEvent>event).ctrlKey || EventBus.isHandlerActiveOrFree('NewEdge', true))) {\r\n            this.removeLine();\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element instanceof Node) {\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n\r\n            case 'mousemove':\r\n                this.drawEdge(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.setNewEdgeToNode(event);\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default: break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawEdge(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        let lineToX = Util.getEventX(evt);\r\n        let lineToy = Util.getEventY(evt);\r\n\r\n        let path = `M${this.x} ${this.y} L${lineToX} ${lineToy}`;\r\n        // if line wasnt draw\r\n        if (!this.svgLine) {\r\n\r\n            let attr = {\r\n                tag: 'path',\r\n                id: 'newEdgePath',\r\n                d: path,\r\n                class: 'SVGEdge'\r\n            };\r\n\r\n            let shape = Util.createShape(attr);\r\n            this.svgLine = shape;\r\n\r\n            this.graph.root.appendChild(shape);\r\n            this.graph.root.appendChild(this.sourceNode.$view);\r\n        }\r\n        else {\r\n\r\n            // set new L path\r\n            this.svgLine.setAttributeNS(null, 'd', path);\r\n\r\n            // get node from position\r\n            let targetNode = this.graph.$graphModel.getNodeByPosition(Util.getEventX(evt), Util.getEventY(evt));\r\n\r\n            // if some targetnode is available, so highlight the node\r\n            if (targetNode) {\r\n\r\n                // reset the last one\r\n                if (this.lastTargetNode && this.lastTargetNode.id !== targetNode.id) {\r\n                    this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n                }\r\n\r\n                this.lastTargetNode = targetNode;\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz-drawedge');\r\n            }\r\n            else if (this.lastTargetNode) {\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeLine(): void {\r\n        this.isEdgeDrawing = false;\r\n\r\n        if (this.svgLine) {\r\n            this.graph.root.removeChild(this.svgLine);\r\n            this.svgLine = null;\r\n        }\r\n\r\n        if (this.lastTargetNode) {\r\n            this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n        }\r\n    }\r\n\r\n    private setNewEdgeToNode(event: Event | any): void {\r\n        // get node from position\r\n        let targetNode = this.graph.$graphModel\r\n            .getNodeByPosition(Util.getEventX(event), Util.getEventY(event));\r\n\r\n        if (!targetNode) {\r\n            this.removeLine();\r\n\r\n            return;\r\n        }\r\n\r\n        this.removeLine();\r\n        let edgeType = this.sourceNode.$defaulEdgeType || 'Association';\r\n\r\n        let jsonData = {\r\n            type: edgeType,\r\n            source: this.sourceNode.id,\r\n            target: targetNode.id\r\n        };\r\n\r\n        let newEdge = this.graph.$graphModel.addEdge(<any>jsonData, true);\r\n        this.graph.drawElement(newEdge);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        this.isEdgeDrawing = true;\r\n        this.sourceNode = element as Class;\r\n\r\n        this.x = this.sourceNode.getPos().x + (this.sourceNode.getSize().x / 2);\r\n        this.y = this.sourceNode.getPos().y + (this.sourceNode.getSize().y / 2);\r\n\r\n        // TODO: get this into util or select\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Node } from '../elements/nodes';\r\nimport { Association } from '../elements/edges';\r\nimport { Util } from '../util';\r\nimport { SymbolLibary } from '../elements/nodes/Symbol';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\nimport Attribute from '../elements/nodes/Attribute';\r\n\r\nexport class Select implements EventHandler {\r\n\r\n    private deleteShape: SVGSVGElement;\r\n    private addEdgeShape: SVGSVGElement;\r\n    private copyNodeShape: SVGSVGElement;\r\n    private graph: Graph;\r\n    private padding = 5;\r\n\r\n    private lastSelectedNode: Element;\r\n    private lastSelectedEdge: Element;\r\n\r\n    private isDragged: boolean;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.deleteShape = SymbolLibary.drawSVG({ type: 'Basket', background: true, id: 'trashcan', tooltip: 'Delete class' });\r\n        this.copyNodeShape = SymbolLibary.drawSVG({ type: 'Copynode', background: true, id: 'copyNode', tooltip: 'Copy class' });\r\n        this.addEdgeShape = SymbolLibary.drawSVG({ type: 'Edgeicon', background: true, id: 'addEdge', tooltip: 'Click and drag to connect this class' });\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        let x = Util.getEventX(event);\r\n        let y = Util.getEventY(event);\r\n\r\n        event.stopPropagation();\r\n        if (event.type === 'drag') {\r\n            this.isDragged = true;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            if (element instanceof Node) {\r\n                this.lastSelectedNode = <Element>element.$view;\r\n            }\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n        }\r\n\r\n        if (event.target['id'] === 'background' || element === this.graph.$graphModel) {\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let e = <Node>element;\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.graph.root.appendChild(this.addEdgeShape);\r\n            this.graph.root.appendChild(this.copyNodeShape);\r\n            this.graph.root.appendChild(element.$view);\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'visible');\r\n\r\n            let x = (e.getPos().x + e.getSize().x) + 5;\r\n            let y = e.getPos().y;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y + this.padding})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.copyNodeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 40 + this.padding})`);\r\n            this.copyNodeShape.onclick = (evt) => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let copyClass = (element).copy();\r\n                copyClass.withPos(nextFreePosition.x, nextFreePosition.y);\r\n                this.graph.drawElement(copyClass);\r\n            };\r\n\r\n            this.addEdgeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 80 + this.padding})`);\r\n            this.addEdgeShape.onmousedown = function () {\r\n                EventBus.setActiveHandler('NewEdge');\r\n                element.$view.dispatchEvent(Util.createCustomEvent('mousedown'));\r\n            };\r\n        }\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let clazz = <Node>element;\r\n\r\n            if (Util.isChrome()) {\r\n                if (this.lastSelectedNode && element.id === this.lastSelectedNode.id && !this.isDragged) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            this.isDragged = false;\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            this.lastSelectedNode = <Element>element.$view;\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete class');\r\n\r\n            // draw textbox to edit clazz in one line\r\n            let divInlineEdit = document.createElement('div');\r\n            divInlineEdit.id = 'inlineEdit';\r\n            divInlineEdit.style.position = 'absolute';\r\n            divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n            divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n            divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n            divInlineEdit.style.zIndex = '42';\r\n\r\n            let inputText = document.createElement('input');\r\n            inputText.type = 'text';\r\n            inputText.style.width = '100%';\r\n            inputText.placeholder = 'Add properties, edit label';\r\n\r\n            divInlineEdit.appendChild(inputText);\r\n            document.body.appendChild(divInlineEdit);\r\n\r\n            inputText.addEventListener('focusout', (evt) => {\r\n\r\n                if (Util.isChrome()) {\r\n                    // only if input is empty, remove the inline edit function\r\n                    if ((!inputText.value || inputText.value.length === 0) && (!this.lastSelectedNode || element.id !== this.lastSelectedNode.id)) {\r\n                        this.removeLastInlineEdit();\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                // only if input is empty, remove the inline edit function\r\n                if ((!inputText.value || inputText.value.length === 0)) {\r\n                    this.removeLastInlineEdit();\r\n                }\r\n            });\r\n\r\n            let g = this.graph;\r\n            let propertyTypes: string[] = ['boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'short', 'String', 'void'];\r\n            inputText.addEventListener('keydown', function (evt) {\r\n\r\n                let keyCode = (<any>evt).which;\r\n                let inputValue = <any>inputText.value;\r\n\r\n                if (Util.endsWith(inputValue, ':') && !document.getElementById('selectPropertyType')) {\r\n                    let selectType = document.createElement('select');\r\n                    selectType.id = 'selectPropertyType';\r\n                    selectType.style.width = '100%';\r\n\r\n                    for (let type of propertyTypes) {\r\n                        let selectOption = document.createElement('option');\r\n                        selectOption.value = type;\r\n                        selectOption.innerHTML = type;\r\n                        selectType.appendChild(selectOption);\r\n                    }\r\n\r\n                    selectType.addEventListener('change', function (evt) {\r\n                        let inputValueSplitted = inputValue.split(':');\r\n                        let selectedPropertyType = selectType.options[selectType.selectedIndex].value;\r\n\r\n                        if (inputValueSplitted.length >= 1) {\r\n                            inputText.value = inputValueSplitted[0].trim() + ' : ' + selectedPropertyType;\r\n                            inputText.focus();\r\n                        }\r\n                    });\r\n\r\n                    divInlineEdit.appendChild(selectType);\r\n                }\r\n                else if (!Util.includes(inputValue, ':')) {\r\n                    let selectType = document.getElementById('selectPropertyType');\r\n\r\n                    if (selectType) {\r\n                        selectType.remove();\r\n                    }\r\n                }\r\n\r\n                if (keyCode !== 13) {\r\n                    return;\r\n                }\r\n\r\n                // attribute\r\n                if ((Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) === false) {\r\n                    if (Util.includes(inputValue, ':')) {\r\n                        clazz.addAttribute(inputValue.trim());\r\n                        clazz.reDraw();\r\n                    } else if (Util.includes(inputValue, '=') ) {\r\n                        let attr: Attribute = null;\r\n                        let name = inputValue.substring(0, inputValue.indexOf('=')).trim();\r\n                        for (let child of clazz.getAttributes() ) {\r\n                            if ( name === child.getName()) {\r\n                                attr = child;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (attr) {\r\n                            attr.updateValue(inputValue.substring(inputValue.indexOf('=') + 1).trim());\r\n                        }\r\n                        clazz.reDraw();\r\n                    }\r\n                }\r\n\r\n                // method\r\n                else if (Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) {\r\n                    clazz.addMethod(inputValue.trim());\r\n                    clazz.reDraw();\r\n                }\r\n                // label\r\n                else if (inputValue.trim().split(' ').length === 1 && inputValue.trim().length > 0) {\r\n                    clazz.updateLabel(inputValue.trim());\r\n                }\r\n\r\n                // reset size\r\n                divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n                divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n                divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n\r\n                inputText.value = '';\r\n\r\n                // remove combobox to select type of property\r\n                let selectType = document.getElementById('selectPropertyType');\r\n\r\n                if (selectType) {\r\n                    selectType.remove();\r\n                }\r\n\r\n                // TODO: reload propertiespanel. not working!\r\n                // event wont dispatch\r\n                // let customEvt = Util.createCustomEvent(EventBus.RELOADPROPERTIES);\r\n                // element.$view.dispatchEvent(customEvt);\r\n            });\r\n\r\n            (<any>divInlineEdit.children[0]).focus();\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Association) {\r\n            this.graph.root.appendChild(element.$view);\r\n            this.graph.root.appendChild(element.$sNode.$view);\r\n            this.graph.root.appendChild(element.$tNode.$view);\r\n\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete edge');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            let edge = <Association>element;\r\n            this.lastSelectedEdge = edge.$view;\r\n\r\n            Util.addClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Select.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Select.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private setTooltipOfShape(shape: SVGSVGElement, tooltip: string): void {\r\n        if (!shape || !shape.hasChildNodes()) {\r\n            return;\r\n        }\r\n\r\n        let titleElement = <SVGSVGElement>shape.childNodes[0];\r\n        if (!titleElement || titleElement.tagName !== 'title') {\r\n            return;\r\n        }\r\n\r\n        titleElement.textContent = tooltip;\r\n    }\r\n\r\n    private resetLastSelectedElements() {\r\n        // reset the last one\r\n        if (this.lastSelectedNode) {\r\n            Util.removeClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.lastSelectedNode = undefined;\r\n        }\r\n\r\n        if (this.lastSelectedEdge) {\r\n            Util.removeClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n            this.lastSelectedEdge = undefined;\r\n        }\r\n\r\n        this.removeLastInlineEdit();\r\n    }\r\n\r\n    private removeLastInlineEdit(): void {\r\n        // remove last inline edit of clazz\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n\r\n            // its not supported in internet explorer\r\n            // lastInlineEdit.remove();\r\n        }\r\n    }\r\n\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\n\r\nexport class Zoom implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n    }\r\n\r\n    public handle(e: any, element: DiagramElement): boolean {\r\n        let delta = e.deltaY || e.wheelDeltaY || -e.wheelDelta;\r\n        let d = 1 + (delta / 1000);\r\n\r\n        let values = this.graph.root.getAttribute('viewBox').split(' ');\r\n        const newViewBox = `${values[0]} ${values[1]} ${parseInt(values[2]) * d} ${parseInt(values[3]) * d}`;\r\n        this.graph.root.setAttribute('viewBox', newViewBox);\r\n\r\n        e.preventDefault();\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Zoom.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Zoom.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n}\r\n","export * from './Drag';\r\nexport * from './Select';\r\nexport * from './Zoom';\r\nexport * from './NewEdge';\r\nexport * from './ImportFile';\r\nexport * from './AddNode';\r\n","import { Association } from '../elements/edges';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport Layout from './Layout';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\n\r\nexport class DagreLayout implements Layout {\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        if (!window['dagre']) {\r\n            return;\r\n        }\r\n        let model = graph.$graphModel;\r\n        let g = new window['dagre'].graphlib.Graph();\r\n\r\n        g.setGraph({ marginx: 100, marginy: 20 }).setDefaultEdgeLabel(function () {\r\n            return {};\r\n        });\r\n\r\n        for (let node of model.nodes) {\r\n            g.setNode(node.id, { width: node.getSize().x, height: node.getSize().y });\r\n        }\r\n\r\n        for (let edge of model.edges) {\r\n            g.setEdge(edge.$sNode.id, edge.$tNode.id);\r\n        }\r\n\r\n        window['dagre'].layout(g);\r\n\r\n        g.nodes().forEach(function (nodeId: string) {\r\n            for (let node of model.nodes) {\r\n                if (node.id === nodeId) {\r\n                    node.withPos(g.node(nodeId).x - g.node(nodeId).width / 2, g.node(nodeId).y - g.node(nodeId).height / 2);\r\n                }\r\n            }\r\n        });\r\n        g.edges().forEach(function (e: any) {\r\n            for (let edge of model.edges) {\r\n                if (edge.$sNode.id === e.v && edge.$tNode.id === e.w) {\r\n                    let size = g.edge(e).points.length;\r\n                    edge.clearPoints();\r\n                    for (let i = 0; i < size; i++) {\r\n                        let point: SVGPoint = g.edge(e).points[i];\r\n                        edge.addPoint(point.x, point.y);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n}\r\n","import {DiagramElement} from '../elements/BaseElements';\r\nimport Layout from './Layout';\r\nimport {Graph} from '../elements/Graph';\r\nimport {Association} from '../elements/edges/Association';\r\nimport {Node} from '../elements/nodes/Node';\r\nimport {Control} from '../Control';\r\n\r\nexport class LayoutGraphMin {\r\n    public nodes: Object = {};\r\n    public edges: Array<Object> = [];\r\n    public outEdges: Object = {};\r\n    public inEdges: Object = {};\r\n    public dummyNodes: Array<LayoutGraphNode> = [];\r\n    public dummyEdges: Object = {};\r\n    public count: number = 0;\r\n    public minRank: number = Number.POSITIVE_INFINITY;\r\n    public maxRank: number = 0;\r\n    public maxHeight: number = 0;\r\n    public maxWidth: number = 0;\r\n    public ranksep: number = 0;\r\n    public edgesLabel: Array<Object> = [];\r\n\r\n    public nodeCount(): number {\r\n        return this.count;\r\n    }\r\n\r\n    public node(id: string) {\r\n        return this.nodes[id];\r\n    }\r\n\r\n    public setNode(id: string, n: LayoutGraphNode) {\r\n        if (n && !this.nodes[id]) {\r\n            this.nodes[id] = n;\r\n            this.count = this.count + 1;\r\n        } else if (!n && this.nodes[id]) {\r\n            delete this.nodes[id];\r\n        }\r\n    }\r\n}\r\n\r\nexport class LayoutGraphNode {\r\n    public id: string;\r\n    public width: number;\r\n    public height: number;\r\n    public x: number;\r\n    public y: number;\r\n    public edgeObj: LayoutGraphEdge;\r\n    public rank: number;\r\n\r\n    constructor(id: string, width: number, height: number, x: number, y: number) {\r\n        this.id = id;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n\r\nexport class LayoutGraphEdge {\r\n    public source: string;\r\n    public target: string;\r\n}\r\n\r\n// \t\t\t\t######################################################### DagreGraph #########################################################\r\nexport class DagreLayoutMin implements Layout {\r\n    public static EDGE_KEY_DELIM = '\\x01';\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        let g, layoutNode, nodes, newEdge, edges;\r\n        let i, n, x, y, sId, tId, split = DagreLayoutMin.EDGE_KEY_DELIM;\r\n        let e: Association;\r\n\r\n        nodes = node['nodes'];\r\n        edges = node['edges'];\r\n        g = new LayoutGraphMin();\r\n\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            g.setNode(n.id, new LayoutGraphNode(n.id, n.getSize().x, n.getSize().y, n.getPos().x, n.getPos().y));\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            sId = this.getNodeId(e.$sNode);\r\n            tId = this.getNodeId(e.$tNode);\r\n            if (sId > tId) {\r\n                let tmp = tId;\r\n                tId = sId;\r\n                sId = tmp;\r\n            }\r\n            let idAB = sId + split + tId + split;\r\n            let idBA = tId + split + sId + split;\r\n            if (sId !== tId && g.edgesLabel.indexOf(idAB) < 0 && g.edgesLabel.indexOf(idBA) < 0) {\r\n                newEdge = {source: sId, target: tId, minlen: 1, weight: 1};\r\n                g.edges.push(newEdge);\r\n                g.edgesLabel.push(idAB);\r\n                // In Edges\r\n                if (!g.inEdges[tId]) {\r\n                    g.inEdges[tId] = [];\r\n                }\r\n                g.inEdges[tId].push(newEdge);\r\n\r\n                // Out Edges\r\n                if (!g.outEdges[sId]) {\r\n                    g.outEdges[sId] = [];\r\n                }\r\n                g.outEdges[sId].push(newEdge);\r\n            }\r\n        }\r\n        this.layouting(g);\r\n        // Set the layouting back\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            layoutNode = g.node(n.id);\r\n            x = n.getPos().x;\r\n            y = n.getPos().y;\r\n            if (x < 1 && y < 1) {\r\n                n.withPos(Math.ceil(layoutNode.x), Math.ceil(layoutNode.y));\r\n            }\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            // OBSOLETE method:  e.calc(graph.canvas);\r\n        }\r\n        graph.draw();\r\n    }\r\n\r\n    public getNodeId(node: Control): string {\r\n        if (node.$owner) {\r\n            return this.getNodeId(node.$owner) || node.id;\r\n        }\r\n        return node.id;\r\n    }\r\n\r\n    public layouting(g: LayoutGraphMin) {\r\n        this.longestPath(g);\r\n        this.normalizeRanks(g);\r\n        this.normalizeEdge(g);\r\n        // this.setSimpleOrder(g);\r\n        this.order(g);\r\n        g.ranksep = 25;\r\n        // remove Dummy\r\n        this.removeDummy(g);\r\n        this.position(g);\r\n    }\r\n\r\n    public setSimpleOrder(g: LayoutGraphMin) {\r\n        let i, n;\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            n.order = n.rank;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Applies heuristics to minimize edge crossings in the graph and sets the best\r\n     * order solution as an order attribute on each node.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Graph must be DAG\r\n     *    2. Graph nodes must be objects with a \"rank\" attribute\r\n     *    3. Graph edges must have the \"weight\" attribute\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Graph nodes will have an \"order\" attribute based on the results of the\r\n     *       algorithm.\r\n     */\r\n    public order(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        let visited = {};\r\n        let node, n, order, i;\r\n        for (i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (n in g.nodes) {\r\n            if (visited[n]) {\r\n                continue;\r\n            }\r\n            visited[n] = true;\r\n            node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank].push(n);\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                g.nodes[layering[order][n]].order = parseInt(n);\r\n            }\r\n        }\r\n        // Fix resolve conflict\r\n        for (order in layering) {\r\n            if (layering[order].length > 1) {\r\n                for (n in layering[order]) {\r\n                    if (layering[order].hasOwnProperty(n) === false) {\r\n                        continue;\r\n                    }\r\n                    let name = layering[order][n];\r\n                    let sum = 0;\r\n                    let weight = 1;\r\n                    let edges = g.dummyEdges[name];\r\n                    if (edges) {\r\n                        for (i in edges) {\r\n                            if (edges.hasOwnProperty(i) === false) {\r\n                                continue;\r\n                            }\r\n                            let edge = edges[i];\r\n                            let nodeU = g.node(edge.target);\r\n                            sum = sum + (edge.weight * nodeU.order);\r\n                            weight = weight + edge.weight;\r\n                        }\r\n                    }\r\n                    g.node(name).barycenter = sum / weight;\r\n                    g.node(name).weight = weight;\r\n                }\r\n            } else if (layering[order].length > 0) {\r\n                for (n in layering[order]) {\r\n                    let name = layering[order][n];\r\n                    g.node(name).barycenter = 1;\r\n                    g.node(name).weight = 1;\r\n                }\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                let node = g.nodes[layering[order][n]];\r\n                node.order = parseInt(n) + node.barycenter * node.weight;\r\n                if (isNaN(node.order)) {\r\n                    console.log('ERROR');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public removeDummy(g: LayoutGraphMin) {\r\n        for (let z in g.dummyNodes) {\r\n            let node = g.dummyNodes[z];\r\n            g.setNode(node.id, null);\r\n        }\r\n        g.dummyNodes = [];\r\n        g.dummyEdges = {};\r\n    }\r\n\r\n    /*\r\n     * Breaks any long edges in the graph into short segments that span 1 layer\r\n     * each. This operation is undoable with the denormalize function.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. The input graph is a DAG.\r\n     *    2. Each node in the graph has a \"rank\" property.\r\n     *\r\n     * Post-condition:\r\n     *\r\n     *    1. All edges in the graph have a length of 1.\r\n     *    2. Dummy nodes are added where edges have been split into segments.\r\n     *    3. The graph is augmented with a \"dummyChains\" attribute which contains\r\n     *       the first dummy in each chain of dummy nodes produced.\r\n     */\r\n    public normalizeEdge(g: LayoutGraphMin): void {\r\n        let i: number = 1;\r\n        for (let id in g.edges) {\r\n            let e: LayoutGraphEdge = <LayoutGraphEdge>g.edges[id];\r\n            let v: string = e.source;\r\n            let vRank = g.node(v).rank;\r\n            const w: string = e.target;\r\n            const wRank: number = g.node(w).rank;\r\n            let name: string;\r\n\r\n            if (wRank === vRank + 1) {\r\n                continue;\r\n            }\r\n\r\n            let dummy;\r\n            for (vRank = vRank + 1; vRank < wRank; ++vRank) {\r\n                name = '_d' + e.source + e.target + (i++);\r\n                let newEdge = {source: v, target: name, minlen: 1, weight: 1};\r\n                dummy = new LayoutGraphNode(name, 0, 0, 0, 0);\r\n                dummy.edgeObj = e;\r\n                dummy.rank = vRank;\r\n                // Dummy Edges\r\n                if (!g.dummyEdges[v]) {\r\n                    g.dummyEdges[v] = [];\r\n                }\r\n                g.dummyEdges[v].push(newEdge);\r\n\r\n                g.dummyNodes.push(dummy);\r\n                g.setNode(dummy.id, dummy);\r\n                v = name;\r\n            }\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Initializes ranks for the input graph using the longest path algorithm. This\r\n     * algorithm scales well and is fast in practice, it yields rather poor\r\n     * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\r\n     * ranks wide and leaving edges longer than necessary. However, due to its\r\n     * speed, this algorithm is good for getting an initial ranking that can be fed\r\n     * into other algorithms.\r\n     *\r\n     * This algorithm does not normalize layers because it will be used by other\r\n     * algorithms in most cases. If using this algorithm directly, be sure to\r\n     * run normalize at the end.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Input graph is a DAG.\r\n     *    2. Input graph node labels can be assigned properties.\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Each node will be assign an (unnormalized) \"rank\" property.\r\n     */\r\n    public longestPath(g: LayoutGraphMin) {\r\n        let i, n, visited = [];\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            visited.push(i);\r\n            n.rank = this.findAllPaths(g, n, 0, visited);\r\n            g.minRank = Math.min(g.minRank, n.rank);\r\n        }\r\n    }\r\n\r\n    public findAllPaths(g: LayoutGraphMin, n: Node, currentCost: number, path: Array<String>) {\r\n        let min: number = 0;\r\n        let id: string;\r\n        let z: number;\r\n        let target;\r\n        if (g.outEdges[n.id]) {\r\n            for (z = 0; z < g.outEdges[n.id].length; z++) {\r\n                id = g.outEdges[n.id][z].target;\r\n                target = g.nodes[id];\r\n                if (path[id]) {\r\n                    min = Math.min(min, target.rank);\r\n                } else if (path.indexOf(id) < 0) {\r\n                    min = Math.min(min, this.findAllPaths(g, target, currentCost - 2, path));\r\n                } else {\r\n                    min = currentCost;\r\n                }\r\n            }\r\n            return min;\r\n        }\r\n        return currentCost;\r\n    }\r\n\r\n    /*\r\n     * Adjusts the ranks for all nodes in the graph such that all nodes v have\r\n     * rank(v) >= 0 and at least one node w has rank(w) = 0.\r\n     */\r\n    public normalizeRanks(g: LayoutGraphMin) {\r\n        let min = g.minRank;\r\n        let value;\r\n        g.maxRank = Number.NEGATIVE_INFINITY;\r\n        g.maxHeight = 0;\r\n        g.maxWidth = 0;\r\n        for (let i in g.nodes) {\r\n            let node = g.nodes[i];\r\n            if (node.rank !== undefined) {\r\n                node.rank -= min;\r\n                value = Math.abs(node.rank);\r\n                if (value > g.maxRank) {\r\n                    g.maxRank = value;\r\n                }\r\n                g.maxHeight = Math.max(g.maxHeight, node.height);\r\n                g.maxWidth = Math.max(g.maxWidth, node.width);\r\n            }\r\n        }\r\n    }\r\n\r\n    public position(g: LayoutGraphMin) {\r\n        this.positionY(g);\r\n        let list = this.positionX(g);\r\n        for (let i in list) {\r\n            for (let pos in list[i]) {\r\n                if (list[i].hasOwnProperty(pos) === false) {\r\n                    continue;\r\n                }\r\n                if (g.node(list[i][pos])) {\r\n                    g.node(list[i][pos]).x = parseInt(pos) * g.maxWidth;\r\n                }\r\n            }\r\n\r\n        }\r\n    }\r\n\r\n    public positionY(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        let rankSep = g.ranksep;\r\n        let prevY = 0;\r\n        for (let layer in layering) {\r\n            let maxHeight = g.maxHeight;\r\n            for (let v in layering[layer]) {\r\n                if (layering[layer].hasOwnProperty(v) === false) {\r\n                    continue;\r\n                }\r\n                let id = layering[layer][v];\r\n                g.nodes[id].y = prevY + maxHeight / 2;\r\n            }\r\n            prevY += maxHeight + rankSep;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\r\n     * function will produce a matrix with the ids of each node.\r\n     */\r\n    public buildLayerMatrix(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        for (let i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (let n in g.nodes) {\r\n            let node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank][node.order] = n;\r\n            }\r\n        }\r\n        return layering;\r\n    }\r\n\r\n    public positionX(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        return layering;\r\n    }\r\n}\r\n","import { Point } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport Layout from './Layout';\r\n\r\nexport class Random implements Layout {\r\n\r\n  public layout(graph: Graph) {\r\n\r\n    let model = graph.$graphModel;\r\n\r\n    if (model.nodes) {\r\n      for (let node of model.nodes) {\r\n        let pos: Point = node.getPos();\r\n        if (pos.x === 0 && pos.y === 0) {\r\n          let x = Util.getRandomInt(0, graph.canvasSize.width);\r\n          let y = Util.getRandomInt(0, graph.canvasSize.height);\r\n          node.withPos(x, y);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","export * from './DagreLayout';\r\nexport * from './Random';\r\nexport * from './DagreLayoutMin';\r\n\r\nimport {DagreLayout} from './DagreLayout';\r\nimport {DagreLayoutMin} from './DagreLayoutMin';\r\nimport {Random} from './Random';\r\nnew DagreLayout();\r\nnew DagreLayoutMin();\r\nnew Random();\r\n","import {VirtualKeyBoard} from './VirtualKeyBoard';\r\n\r\nexport {Point} from './elements/BaseElements';\r\nexport {Bridge, DelegateAdapter} from './Bridge';\r\nexport {Graph} from './elements/Graph';\r\nexport * from './elements/nodes';\r\nexport * from './elements/edges';\r\nexport * from './adapters';\r\nexport * from './UML';\r\nimport {Point} from './elements/BaseElements';\r\nimport {Graph} from './elements/Graph';\r\nimport {ClassEditor} from './elements/ClassEditor';\r\nimport {Bridge} from './Bridge';\r\nimport {Util} from './util';\r\nimport * as nodes  from './elements/nodes';\r\nimport * as edges from './elements/edges';\r\nimport {ScrumBoard} from './ScrumBoard';\r\n\r\nif (!window['Point']) {\r\n    window['Point'] = Point;\r\n    window['Graph'] = Graph;\r\n    window['bridge'] = new Bridge();\r\n    window['Util'] = Util;\r\n    window['Class'] = nodes.Class;\r\n    window['Association'] = edges.Association;\r\n    window['SymbolLibary'] = nodes.SymbolLibary;\r\n    window['ClassEditor'] = ClassEditor;\r\n    window['VirtualKeyBoard'] = VirtualKeyBoard;\r\n    window['ScrumBoard'] = ScrumBoard;\r\n}\r\n","'use strict';\r\nimport { CSS } from './CSS';\r\nimport { Node } from './elements/nodes/Node';\r\nimport { DiagramElement, Point } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport class Util {\r\n\r\n    public static isAutoSave: boolean;\r\n\r\n    static getRandomInt(min: number, max: number): number {\r\n        return Math.floor(Math.random() * (max - min + 1)) + min;\r\n    }\r\n\r\n    static createShape(attrs: any): SVGSVGElement {\r\n        let xmlns = attrs.xmlns || 'http://www.w3.org/2000/svg';\r\n        let shape = document.createElementNS(xmlns, attrs.tag);\r\n\r\n        for (let attr in attrs) {\r\n            if (!attrs.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr !== 'tag') {\r\n                shape.setAttribute(attr, attrs[attr]);\r\n\r\n            }\r\n        }\r\n        return <SVGSVGElement><any>shape;\r\n    }\r\n\r\n    static toPascalCase(value: string): string {\r\n        value = value.charAt(0).toUpperCase() + value.substring(1).toLowerCase();\r\n        return value;\r\n    }\r\n\r\n    static isSVG(tag: string): boolean {\r\n        let i,\r\n            list = ['svg', 'path', 'polygon', 'polyline', 'line', 'title', 'rect', 'filter', 'feGaussianBlur', 'feOffset', 'feBlend', 'linearGradient', 'stop', 'text', 'symbol', 'textPath', 'defs', 'fegaussianblur', 'feoffset', 'feblend', 'circle', 'ellipse', 'g'];\r\n        for (i = 0; i < list.length; i += 1) {\r\n            if (list[i] === tag) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    static createHTML(node: any): HTMLElement {\r\n        return <HTMLElement>this.create(node);\r\n    }\r\n    static create(node: any): Element {\r\n        let style, item, xmlns, key, tag, k;\r\n        if (document.createElementNS && (this.isSVG(node.tag) || node.xmlns)) {\r\n            if (node.xmlns) {\r\n                xmlns = node.xmlns;\r\n            } else {\r\n                xmlns = 'http://www.w3.org/2000/svg';\r\n            }\r\n            if (node.tag === 'img' && xmlns) {\r\n                item = document.createElementNS(xmlns, 'image');\r\n                item.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\r\n                item.setAttributeNS('http://www.w3.org/1999/xlink', 'href', node.src);\r\n            } else {\r\n                item = document.createElementNS(xmlns, node.tag);\r\n            }\r\n        } else {\r\n            item = document.createElement(node.tag);\r\n        }\r\n        tag = node.tag.toLowerCase();\r\n        for (key in node) {\r\n            if (!node.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            k = key.toLowerCase();\r\n            if (node[key] === null) {\r\n                continue;\r\n            }\r\n            if (k === 'tag' || k.charAt(0) === '$' || k === '$graphModel') {\r\n                continue;\r\n            }\r\n            if (k.charAt(0) === '#') {\r\n                item[k.substring(1)] = node[key];\r\n                continue;\r\n            }\r\n            if (k === 'rotate') {\r\n                item.setAttribute('transform', 'rotate(' + node[key] + ',' + node.$graphModel.x + ',' + node.$graphModel.y + ')');\r\n                continue;\r\n            }\r\n            if (k === 'value') {\r\n                if (!node[key]) {\r\n                    continue;\r\n                }\r\n                if (tag !== 'input') {\r\n                    if (tag === 'text') {// SVG\r\n                        item.appendChild(document.createTextNode(node[key]));\r\n                    } else {\r\n                        item.innerHTML = node[key];\r\n                    }\r\n                } else {\r\n                    item[key] = node[key];\r\n                }\r\n                continue;\r\n            }\r\n            if (k.indexOf('on') === 0) {\r\n                this.bind(item, k.substring(2), node[key]);\r\n                continue;\r\n            }\r\n            if (k.indexOf('-') >= 0) {\r\n                item.style[key] = node[key];\r\n            } else {\r\n                if (k === 'style' && typeof (node[key]) === 'object') {\r\n                    for (style in node[key]) {\r\n                        if (!node[key].hasOwnProperty(style)) {\r\n                            continue;\r\n                        }\r\n                        if (node[key][style]) {\r\n                            if ('transform' === style) {\r\n                                item.style.transform = node[key][style];\r\n                                item.style.msTransform = item.style.MozTransform = item.style.WebkitTransform = item.style.OTransform = node[key][style];\r\n                            } else {\r\n                                item.style[style] = node[key][style];\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    item.setAttribute(key, node[key]);\r\n                }\r\n            }\r\n        }\r\n        if (node.$parent) {\r\n            node.$parent.appendChild(item);\r\n        }\r\n        if (node.$graphModel) {\r\n            item.$graphModel = node.$graphModel;\r\n        }\r\n        return item;\r\n    }\r\n\r\n    static setSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttribute('width', value);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.setAttribute('height', value);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setAttributeSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttributeNS(null, 'width', value);\r\n        value = Util.getValue(height);\r\n        item.setAttributeNS(null, 'height', value);\r\n    }\r\n\r\n    static setStyleSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setPos(item: any, x: number, y: number): void {\r\n        if (item.x && item.x.baseVal) {\r\n            item.style.left = x + 'px';\r\n            item.style.top = y + 'px';\r\n        } else {\r\n            item.x = x;\r\n            item.y = y;\r\n        }\r\n    }\r\n\r\n    static getValue(value: string | number): number {\r\n        return parseInt(('0' + value).replace('px', ''), 10);\r\n    }\r\n\r\n    static isIE(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('.net') > -1;\r\n    }\r\n\r\n    static isEdge(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('edge') > -1;\r\n    }\r\n\r\n    static isFireFox(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n    }\r\n\r\n    static isSafari(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        return navigator.userAgent.toLowerCase().indexOf('safari') > -1 && !isEdge;\r\n    }\r\n\r\n    static isOpera(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('opera') > -1;\r\n    }\r\n\r\n    static isChrome(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        let isSafari = Util.isSafari();\r\n        return navigator.userAgent.toLowerCase().indexOf('chrome') > -1 && !isEdge && isSafari;\r\n    }\r\n\r\n    static getEventX(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetX'] : event.layerX;\r\n    }\r\n\r\n    static getEventY(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetY'] : event.layerY;\r\n    }\r\n\r\n    static getNumber(str: string): number {\r\n        return parseInt((str || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    static getStyle(styleProp: string): CSS {\r\n        let i, style, diff, current, ref, el = document.createElement('div'), css;\r\n        document.body.appendChild(el);\r\n        css = new CSS(styleProp);\r\n        ref = new CSS(styleProp, el).css;\r\n        style = window.getComputedStyle(el, null);\r\n        el.className = styleProp;\r\n        current = new CSS(styleProp, el).css;\r\n        diff = Util.getNumber(style.getPropertyValue('border-width'));\r\n        for (i in current) {\r\n            if (!current.hasOwnProperty(i)) {\r\n                continue;\r\n            }\r\n            if (i === 'width' || i === 'height') {\r\n                if (Util.getNumber(current[i]) !== 0 && Util.getNumber(current[i]) + diff * 2 !== Util.getNumber(ref[i])) {\r\n                    css.add(i, current[i]);\r\n                }\r\n            } else if (current[i] !== ref[i]) {\r\n                css.add(i, current[i]);\r\n            }\r\n        }\r\n        document.body.removeChild(el);\r\n        return css;\r\n    }\r\n\r\n    static sizeOf(item: string | any, node?: Node): ClientRect {\r\n        let board;\r\n        let rect: ClientRect;\r\n        let addBoard: boolean;\r\n        if (!item) {\r\n            return undefined;\r\n        }\r\n        if (node) {\r\n            board = node.$owner.$view;\r\n            addBoard = false;\r\n        }\r\n\r\n        if (!board) {\r\n            addBoard = true;\r\n            board = Util.createShape({ tag: 'svg', id: 'root', width: 200, height: 200 });\r\n            document.body.appendChild(board);\r\n        }\r\n        if (board.tagName === 'svg') {\r\n            if (typeof item === 'string') {\r\n                item = Util.create({ tag: 'text', $font: true, value: item });\r\n                item.setAttribute('width', '5px');\r\n            }\r\n        } else if (typeof item === 'string') {\r\n            item = document.createTextNode(item);\r\n        }\r\n        board.appendChild(item);\r\n        rect = item.getBoundingClientRect();\r\n        board.removeChild(item);\r\n\r\n        if (addBoard) {\r\n            document.body.removeChild(board);\r\n        }\r\n        return rect;\r\n    }\r\n\r\n    static getColor(style: string, defaultColor?: string) {\r\n        if (style) {\r\n            if (style.toLowerCase() === 'create') {\r\n                return '#008000';\r\n            }\r\n            if (style.toLowerCase() === 'nac') {\r\n                return '#FE3E3E';\r\n            }\r\n            if (style.indexOf('#') === 0) {\r\n                return style;\r\n            }\r\n        }\r\n        if (defaultColor) {\r\n            return defaultColor;\r\n        }\r\n        return '#000';\r\n    }\r\n\r\n    public static utf8$to$b64(str: string): string {\r\n        return window.btoa(encodeURIComponent(str));\r\n    }\r\n\r\n    public static showSVG(control: DiagramElement) {\r\n        let svg = Util.create({\r\n            tag: 'svg',\r\n            style: { left: control.getPos().x, top: control.getPos().y, position: 'absolute' }\r\n        });\r\n        let child = control.getSVG();\r\n        if (child) {\r\n            svg.appendChild(child);\r\n        }\r\n        Util.setSize(svg, control.getSize().x, control.getSize().y);\r\n        document.body.appendChild(svg);\r\n    }\r\n\r\n    public static toJson(ref: JSON | Object): Object {\r\n        let result = {};\r\n        return Util.copy(result, ref, false, false);\r\n    }\r\n\r\n    public static initControl(parent: Control, control: Control, type: string, id: string, json: JSON | Object) {\r\n        if (typeof control.init === 'function') {\r\n            control.init(parent, type, id);\r\n        }\r\n        if (typeof control.load === 'function') {\r\n            control.load(json);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * copy One Json into another\r\n     * @function\r\n     * @param ref reference Json\r\n     * @param src source Json\r\n     * @param full all attributes include privet $\r\n     * @param replace set the original reference or copy it\r\n     * @returns ref\r\n     * @name copy\r\n     */\r\n    public static copy(ref: JSON | Object, src: JSON | Object, full: boolean, replace: boolean) {\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (replace) {\r\n                        ref[i] = src[i];\r\n                        continue;\r\n                    }\r\n                    if (!ref[i]) {\r\n                        if (src[i] instanceof Array) {\r\n                            ref[i] = [];\r\n                        } else {\r\n                            ref[i] = {};\r\n                        }\r\n                    }\r\n                    Util.copy(ref[i], src[i], full, false);\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref[i] = src[i];\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    public static xmlstringify(text: string): string {\r\n        text = text.replace('<', '&lt;');\r\n        text = text.replace('>', '&gt;');\r\n        return text;\r\n    }\r\n\r\n    public static toXML(ref: JSON | Object | any, src: JSON | Object | any, full: boolean, doc: Document): any {\r\n        let name;\r\n        if (!ref) {\r\n            name = src.constructor.name;\r\n            doc = document.implementation.createDocument(null, name, null);\r\n            ref = doc.childNodes[0];\r\n        }\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (!ref.getAttribute(i)) {\r\n                        if (src[i] instanceof Array) {\r\n                            for (let c in src[i]) {\r\n                                if (!src[i].hasOwnProperty(c)) {\r\n                                    continue;\r\n                                }\r\n                                name = src[i][c].constructor.name;\r\n                                let child = doc.createElement(name);\r\n                                ref.appendChild(child);\r\n                                Util.toXML(child, src[i][c], full, doc);\r\n                            }\r\n                        } else {\r\n                            name = src[i].constructor.name;\r\n                            let child = doc.createElement(name);\r\n                            ref.appendChild(child);\r\n                            Util.toXML(child, src[i], full, doc);\r\n                        }\r\n                    } else {\r\n                        Util.toXML(ref.getAttribute(i), src[i], full, doc);\r\n                    }\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref.setAttribute(i, src[i]);\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    static Range(min: Point, max: Point, x: number, y: number) {\r\n        max.x = Math.max(max.x, x);\r\n        max.y = Math.max(max.y, y);\r\n        min.x = Math.min(min.x, x);\r\n        min.y = Math.min(min.y, y);\r\n    }\r\n\r\n    public static getPosition(m: number, n: number, entity: DiagramElement, refCenter: Point) {\r\n        let t, p = [], list, distance = [], min = 999999999, position, i, step = 15;\r\n        let pos: Point = entity.getPos();\r\n        let size: Point = entity.getSize();\r\n        list = [Point.LEFT, Point.RIGHT];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = this.getLRPosition(m, n, entity, list[i]);\r\n            if (t.y >= pos.y && t.y <= (pos.y + size.y + 1)) {\r\n                t.y += (entity['$' + list[i]] * step);\r\n                if (t.y > (pos.y + size.y)) {\r\n                    // Alternative\r\n                    t = Util.getUDPosition(m, n, entity, Point.DOWN, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        list = [Point.UP, Point.DOWN];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = Util.getUDPosition(m, n, entity, list[i]);\r\n            if (t.x >= pos.x && t.x <= (pos.x + size.x + 1)) {\r\n                t.x += (entity['$' + list[i]] * step);\r\n                if (t.x > (pos.x + size.x)) {\r\n                    // Alternative\r\n                    t = this.getLRPosition(m, n, entity, Point.RIGHT, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        for (i = 0; i < p.length; i += 1) {\r\n            if (distance[i] < min) {\r\n                min = distance[i];\r\n                position = p[i];\r\n            }\r\n        }\r\n        return position;\r\n    }\r\n\r\n    public static getUDPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let x, y: number = pos.y;\r\n        if (p === Point.DOWN) {\r\n            y += size.y;\r\n        }\r\n        x = (y - n) / m;\r\n        if (step) {\r\n            x += e['$' + p] * step;\r\n            if (x < pos.x) {\r\n                x = pos.x;\r\n            } else if (x > (pos.x + size.x)) {\r\n                x = pos.x + size.x;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static getLRPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let y: number, x: number = pos.x;\r\n        if (p === Point.RIGHT) {\r\n            x += size.x;\r\n        }\r\n        y = m * x + n;\r\n        if (step) {\r\n            y += e['$' + p] * step;\r\n            if (y < pos.y) {\r\n                y = pos.y;\r\n            } else if (y > (pos.y + size.y)) {\r\n                y = pos.y + size.y;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static hasClass(element: Element, cls: string) {\r\n        let className = element.getAttribute('class');\r\n        return className.indexOf(cls) > 0;\r\n    }\r\n    public static addClass(element: Element, cls: string) {\r\n        if (!Util.hasClass(element, cls)) {\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className + ' ' + cls);\r\n        }\r\n    }\r\n    public static removeClass(element: Element, cls: string) {\r\n        if (Util.hasClass(element, cls)) {\r\n            let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className.replace(reg, ' ').trim());\r\n        }\r\n    }\r\n\r\n    public static startsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.startsWith) {\r\n            return s.indexOf(searchS) === 0;\r\n        }\r\n\r\n        return s.startsWith(searchS);\r\n    }\r\n\r\n    public static endsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.endsWith) {\r\n            let lastIndex = s.lastIndexOf(searchS);\r\n            return lastIndex !== -1 && lastIndex === (s.length - 1);\r\n        }\r\n\r\n        return s.endsWith(searchS);\r\n    }\r\n\r\n    public static includes(s: string, searchS: string): boolean {\r\n        if (!String.prototype.includes) {\r\n            let idx = s.indexOf(searchS);\r\n            return idx > -1;\r\n        }\r\n        if (s === null) {\r\n            return false;\r\n        }\r\n\r\n        return s.includes(searchS);\r\n    }\r\n\r\n    public static isParentOfChild(parent: Element, child: Element): boolean {\r\n\r\n        if (!parent || !child) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isIE()) {\r\n            let children = parent.childNodes;\r\n            // let found = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                let childItem = children[i];\r\n                if (childItem === child) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        return parent.contains(child);\r\n    }\r\n\r\n    public static createCustomEvent(type: string, params?: any): CustomEvent {\r\n        let evt: CustomEvent;\r\n\r\n        if (typeof window['CustomEvent'] !== 'function') {\r\n            params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n            evt = document.createEvent('CustomEvent');\r\n            evt.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\r\n            return evt;\r\n        }\r\n\r\n        evt = new CustomEvent(type);\r\n\r\n        return evt;\r\n    }\r\n\r\n    public static saveToLocalStorage(model: any): boolean {\r\n        if (!this.isAutoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isLocalStorageSupported()) {\r\n            if (model) {\r\n                if (model.$isLoading) {\r\n                    return false;\r\n                }\r\n                let jsonObj = Util.toJson(model);\r\n                let data = JSON.stringify(jsonObj, null, '\\t');\r\n                localStorage.setItem('diagram', data);\r\n            } else {\r\n                localStorage.removeItem('diagram');\r\n            }\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static getDiagramFromLocalStorage(): string {\r\n        if (Util.isLocalStorageSupported()) {\r\n            return localStorage.getItem('diagram');\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    public static isLocalStorageSupported(): boolean {\r\n        if (this.isEdge()) {\r\n            return false;\r\n        }\r\n        return localStorage !== undefined;\r\n    }\r\n}\r\n"],"sourceRoot":""}
Severity: Minor
Found in doc/diagram.js.map by fixme

FIXME found
Open

{"version":3,"sources":["webpack://DiagramJS/webpack/bootstrap","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Adapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Bridge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/BridgeElement.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/CSS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Control.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Data.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventBus.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/JSEPS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Palette.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertiesPanel.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertyBinder.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/RGBColor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/SVGConverter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/ScrumBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Toolbar.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/UML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/VirtualKeyBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/JavaAdapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/BaseElements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/ClassEditor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Graph.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Model.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregate.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Association.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Composition.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Generalisation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Implements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Attribute.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/AutoComplete.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/BR.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Button.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Class.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/ClazzProperty.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Dice.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Div.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Form.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/HTML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/InfoText.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Input.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Label.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Method.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Node.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/SO.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/StereoType.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Symbol.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Table.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/AddNode.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Drag.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/GraphListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/ImportFile.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/NewEdge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Select.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Zoom.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayout.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayoutMin.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/Random.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/main.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/util.ts"],"names":[],"mappings":"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","file":"diagram.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./main.ts\");\n","export abstract class Adapter {\r\n    public id: string = null;\r\n\r\n    abstract update(evt: Object): boolean;\r\n}\r\n","'use strict';\r\n\r\nimport * as controls from './elements/nodes';\r\nimport * as adapters from './adapters';\r\nimport Data from './Data';\r\nimport {Control} from './Control';\r\nimport {Adapter} from './Adapter';\r\nimport {Graph} from './elements';\r\nimport {Util} from './util';\r\nimport {Point} from './elements';\r\n\r\nexport class Bridge extends Control {\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public static version: string = '0.42.01.1601007-1739';\r\n    private controlFactory: Object = {};\r\n    private adapterFactory: Object = {};\r\n    private controls: Object = {};\r\n    private adapters: Object = {};\r\n    private items: Object = {};\r\n    private controlNo: number = 1;\r\n    private online: boolean = true;\r\n    private language: string = navigator.language.toUpperCase();\r\n    private toolBar: HTMLElement;\r\n\r\n    constructor(viewRoot?: HTMLElement) {\r\n        super();\r\n        let i;\r\n\r\n        if (viewRoot) {\r\n            this.$view = viewRoot;\r\n        }\r\n\r\n        let keys: string[] = Object.keys(adapters);\r\n        for (i = 0; i < keys.length; i++) {\r\n            let child = adapters[keys[i]];\r\n            if (child && child.id) {\r\n                this.adapterFactory[child.id.toLowerCase()] = child;\r\n            }\r\n        }\r\n\r\n        keys = Object.keys(controls);\r\n        for (i = 0; i < keys.length; i++) {\r\n            this.addControl(controls[keys[i]]);\r\n        }\r\n        this.addControl(Graph);\r\n\r\n        let that = this;\r\n        window.addEventListener('load', function () {\r\n            let updateOnlineStatus = function updateOnlineStatus() {\r\n                that.setOnline(navigator.onLine);\r\n            };\r\n            window.addEventListener('online', updateOnlineStatus);\r\n            window.addEventListener('offline', updateOnlineStatus);\r\n        });\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public setOnline(value: boolean) {\r\n        this.online = value;\r\n        if (this.toolBar.children[0]) {\r\n            this.toolBar.children[0].className = value ? 'online' : 'offline';\r\n        }\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addToolbar(): boolean {\r\n        if (this.toolBar) {\r\n            return false;\r\n        }\r\n        this.toolBar = document.createElement('div');\r\n        this.toolBar.className = 'onlineStatus';\r\n        let child = document.createElement('div');\r\n        child.className = 'online';\r\n        this.toolBar.appendChild(child);\r\n        child = document.createElement('div');\r\n        child.className = 'lang';\r\n        child.innerHTML = this.language;\r\n        this.toolBar.appendChild(child);\r\n\r\n        let body: HTMLElement = document.getElementsByTagName('body')[0];\r\n        body.insertBefore(this.toolBar, body.firstChild);\r\n        // Refresh Online Status\r\n        this.setOnline(this.online);\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addListener = function (listener: any) {\r\n        this.listener.push(listener);\r\n    };\r\n\r\n    public addControl(control: any) {\r\n        if (control && control.name) {\r\n            this.controlFactory[control.name.toLowerCase()] = control;\r\n        }\r\n    }\r\n\r\n    public getId(): string {\r\n        return 'control' + (this.controlNo++);\r\n    }\r\n\r\n    public adapterUpdate(message: string) {\r\n        let keys: string[] = Object.keys(this.adapters);\r\n        if (keys.length > 0) {\r\n            let i;\r\n            for (i = 0; i < keys.length; i++) {\r\n                let adapterList = this.adapters[keys[i]];\r\n                if (adapterList instanceof Adapter) {\r\n                    adapterList.update(message);\r\n                } else {\r\n                    for (let adapter of adapterList) {\r\n                        adapter.update(message);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        let config = {}, className: string, id: string;\r\n        if (typeof(json) === 'string') {\r\n            // Only a String\r\n            config['id'] = '' + json;\r\n            let item = document.getElementById(config['id']);\r\n            let className: string;\r\n            if (item) {\r\n                className = item.getAttribute('class');\r\n                if (!className) {\r\n                    className = item.getAttribute('classname') || '';\r\n                }\r\n                // Found Element and now config Data element\r\n                if (item.getAttribute('property')) {\r\n                    if (this.hasItem(item.getAttribute('property'))) {\r\n                        let data = this.getItem(item.getAttribute('property'));\r\n                        for (let key in data.prop) {\r\n                            if (item.getAttribute(key)) {\r\n                                data.setValue(key, item.getAttribute(key));\r\n                            }\r\n                        }\r\n                        if (item.getAttribute('property')) {\r\n                            // TODO: FIXME!!!\r\n                            // data.property = item.getAttribute(\"property\");\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                className = '' + json;\r\n            }\r\n            className = className.toLowerCase();\r\n            config['className'] = className;\r\n        } else {\r\n            config = <JSON>json;\r\n        }\r\n        // Config validate\r\n        if (!config['id']) {\r\n            config['id'] = this.getId();\r\n        }\r\n        // Backup for Old Graph\r\n        if (!config['className'] && (config['type'] === 'clazzdiagram' || config['type'] === 'objectdiagram')) {\r\n            config['className'] = 'graph';\r\n        }\r\n\r\n        className = config['className'] || config['class'];\r\n        className = className.toLocaleLowerCase();\r\n        id = config['id'];\r\n\r\n        // Check For Control or Data\r\n        if ((config['prop'] || config['upd'] || config['rem']) && this.controls[id] === null) {\r\n            // Its Data\r\n            let newData = !this.hasItem(config['id']);\r\n            let item: Data = this.getItem(config['id']);\r\n            // TODO: FIXME!!!\r\n            // if (id && className && !item.property) {\r\n            //      item.property = className;\r\n            // }\r\n            if (newData) {\r\n                for (let i in this.controls) {\r\n                    if (this.controls.hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    this.controls[i].addItem(this, item);\r\n                }\r\n            }\r\n            // Add all Values to item\r\n            item.addProperties(config);\r\n            // Bridge.addProperties(config['prop'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return item;\r\n        }\r\n\r\n        let control;\r\n        if (this.controls[id]) {\r\n            control = this.controls[id];\r\n            control.initControl(json);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return control;\r\n        }\r\n\r\n        if (typeof(this.controlFactory[className]) === 'object' || typeof(this.controlFactory[className]) === 'function') {\r\n            let obj = this.controlFactory[className];\r\n            control = new obj(json);\r\n            Util.initControl(owner || this, control, config['property'], id, json);\r\n\r\n            if (control.id) {\r\n                this.controls[control.id] = control;\r\n            } else {\r\n                this.controls[id] = control;\r\n            }\r\n\r\n            // create DataObject and register this control as listener to it\r\n            // let obj = {id:id};\r\n            // let data: Data = this.load(obj);\r\n            // data.addListener(this);\r\n\r\n            // Try to Show\r\n            if (typeof control.getSVG === 'function' && typeof control.getSize === 'function') {\r\n                let size: Point = control.getSize();\r\n\r\n                let svg = Util.createShape({\r\n                    tag: 'svg',\r\n                    id: 'root',\r\n                    width: size.x,\r\n                    height: size.y\r\n                });\r\n\r\n                let view = control.getSVG();\r\n                svg.appendChild(view);\r\n                document.getElementsByTagName('body')[0].appendChild(svg);\r\n            }\r\n            return control;\r\n        }\r\n        return null;\r\n        // bridge.load('{class:table, columns:[{id:'firstname'}, {id:'lastname'}]}');\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n\r\n        if (this.items[id] !== undefined) {\r\n            return true;\r\n        }\r\n        id = id.split('.')[0];\r\n        return (this.items[id] !== undefined);\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return this.items;\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        let item = this.items[id];\r\n        if (!item) {\r\n            id = id.split('.')[0];\r\n            item = this.items[id];\r\n            if (!item) {\r\n                item = new Data();\r\n                item.id = id;\r\n                this.items[id] = item;\r\n            }\r\n        }\r\n        return item;\r\n    }\r\n\r\n    /**\r\n     * Method for executing user input -> Event\r\n     * @param object\r\n     * @param attribute\r\n     * @param oldValue\r\n     * @param newValue\r\n     * @returns {boolean}\r\n     */\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        alert('Bridge.setValue: oldVal:' + oldValue + ', newVal: ' +  + newValue + ', attribute: ' + attribute + ', object: ' + JSON.stringify(object));\r\n        let obj: Data;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n\r\n        } else if (object instanceof Data) {\r\n            obj = object;\r\n            id = object.id;\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = <Data>object;\r\n            id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return false;\r\n        }\r\n        if (obj) {\r\n            // Execute Update to Data\r\n            obj.setValue(attribute, newValue);\r\n            // Could be done here, but currently is done at this.execueChange..:\r\n            // obj[attribute] = value;\r\n        }\r\n\r\n        /*let tmp = {'id': id};\r\n        if (typeof(newValue) !== 'undefined' && newValue !== null) {\r\n            let upd = {};\r\n            upd[attribute] = newValue;\r\n            tmp['upd'] = upd;\r\n        }\r\n        if (typeof(oldValue) !== 'undefined' && oldValue !== null) {\r\n            let rem = {};\r\n            rem[attribute] = oldValue;\r\n            tmp['rem'] = rem;\r\n        }*/\r\n        // this.load(tmp);\r\n        return true;\r\n    }\r\n\r\n    public getValue(object: Object, attribute: string): any {\r\n        let obj: Object;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = object;\r\n            // id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return;\r\n        }\r\n        if (obj) {\r\n            if (obj.hasOwnProperty(attribute)) {\r\n                return obj[attribute];\r\n            } else if (obj instanceof Data) {\r\n                return (<Data>obj).getValue(attribute);\r\n            } else {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    public getNumber(object: Object, attribute: string, defaultValue: number = 0): number {\r\n        let res = <number>this.getValue(object, attribute);\r\n        if (typeof res === 'number') {\r\n            return res;\r\n        } else if (typeof res === 'string') {\r\n            // check whether res is a number\r\n            let value = Number(res);\r\n            if (value || value === 0) {\r\n                return value;\r\n            }\r\n        }\r\n        return defaultValue;\r\n    }\r\n\r\n    getControl(controlId: string) {\r\n        return this.controls[controlId];\r\n    }\r\n\r\n    public registerListener(eventType: string, control: Control, callBackfunction: string): Control {\r\n        if (typeof control === 'string') {\r\n            control = this.getControl(<string>control);\r\n        }\r\n        if (!control) {\r\n            return null;\r\n        }\r\n        if (eventType) {\r\n            eventType = eventType.toLowerCase();\r\n        }\r\n        control.registerListenerOnHTMLObject(eventType);\r\n        if (callBackfunction) {\r\n            let adapter: DelegateAdapter = new DelegateAdapter();\r\n            adapter.callBackfunction = callBackfunction;\r\n            adapter.id = control.getId();\r\n            this.addAdapter(adapter, eventType);\r\n        }\r\n        return control;\r\n    }\r\n\r\n    public addAdapter(adapter: Adapter | string, eventType: string): Adapter {\r\n        if (!eventType) {\r\n            eventType = '';\r\n        }\r\n        let result: Adapter;\r\n        if (adapter instanceof String) {\r\n            let obj = this.adapterFactory[adapter.toLowerCase()];\r\n            result = new obj();\r\n        } else {\r\n            result = <Adapter>adapter;\r\n        }\r\n        let handlers = this.adapters[eventType];\r\n\r\n        if (handlers === null || handlers === undefined) {\r\n            handlers = [];\r\n            this.adapters[eventType] = handlers;\r\n        }\r\n        handlers.push(result);\r\n        return result;\r\n    }\r\n\r\n    public fireEvent(evt: Event): void {\r\n        let handlers = this.adapters[''];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n        handlers = this.adapters[evt['eventType']];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport class DelegateAdapter extends Adapter {\r\n    adapter: Adapter;\r\n    callBackfunction: string;\r\n\r\n    update(evt: Event): boolean {\r\n        if (this.adapter) {\r\n            this.adapter.update(evt);\r\n            return true;\r\n        } else if (this.callBackfunction) {\r\n            return this.executeFunction(this.callBackfunction, evt);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public setAdapter(adapter: Adapter): boolean {\r\n        this.adapter = adapter;\r\n        return true;\r\n    }\r\n\r\n    private executeFunction(strValue: string, evt: Event): boolean {\r\n        let scope = window;\r\n        let scopeSplit = strValue.split('.');\r\n        for (let i = 0; i < scopeSplit.length - 1; i++) {\r\n            scope = scope[scopeSplit[i]];\r\n            if (scope === undefined) {\r\n                return false;\r\n            }\r\n        }\r\n        let fn: any = scope[scopeSplit[scopeSplit.length - 1]];\r\n        if (typeof fn === 'function') {\r\n            fn.call(scope);\r\n            return true;\r\n        } else {\r\n            window['callBack1'].update(evt);\r\n\r\n        }\r\n        return false;\r\n    }\r\n}\r\n","'use strict';\r\nimport Data from './Data';\r\n\r\nexport default class BridgeElement {\r\n    private static elementSet: BridgeElement[] = [];\r\n    public model: Data;\r\n    public id: string;\r\n    public gui: HTMLElement;\r\n\r\n    constructor(model: Data) {\r\n        this.model = model;\r\n        this.id = model.id;\r\n        BridgeElement.elementSet.push(this);\r\n    }\r\n}\r\n","import {Util} from './util';\r\n\r\n// \t\t\t\t######################################################### CSS #########################################################\r\nexport class CSS {\r\n    public css: Object;\r\n    private name: string;\r\n\r\n    constructor(name: string, item?: any) {\r\n        let i, value, border: string, prop, el;\r\n        this.name = name;\r\n        this.css = {};\r\n        if (!item) {\r\n            return;\r\n        }\r\n\r\n        el = window.getComputedStyle(item, null);\r\n        border = el.getPropertyValue('border');\r\n        for (i in el) {\r\n            prop = i;\r\n            value = el.getPropertyValue(prop);\r\n            if (value && value !== '') {\r\n                // optimize CSS\r\n                if (border) {\r\n                    if (prop === 'border-bottom' || prop === 'border-right' || prop === 'border-top' || prop === 'border-left') {\r\n                        if (value !== border) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-color' || prop === 'border-bottom-color' || prop === 'border-right-color' || prop === 'border-top-color' || prop === 'border-left-color') {\r\n                        if (border.substring(border.length - value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-width') {\r\n                        if (border.substring(0, value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else {\r\n                        this.css[prop] = value;\r\n                    }\r\n                } else {\r\n                    this.css[prop] = value;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public static getStdDef() {\r\n        let child, def = Util.create({tag: 'defs'});\r\n\r\n        child = Util.create({tag: 'filter', id: 'drop-shadow'});\r\n        child.appendChild(Util.create({tag: 'feGaussianBlur', 'in': 'SourceAlpha', result: 'blur-out', stdDeviation: 2}));\r\n        child.appendChild(Util.create({tag: 'feOffset', 'in': 'blur-out', dx: 2, dy: 2}));\r\n        child.appendChild(Util.create({tag: 'feBlend', 'in': 'SourceGraphic', mode: 'normal'}));\r\n        def.appendChild(child);\r\n        child = Util.create({tag: 'linearGradient', id: 'reflect', x1: 0, x2: 0, y1: '50%', y2: 0, spreadMethod: 'reflect'});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#aaa', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#eee', offset: '100%'}));\r\n        def.appendChild(child);\r\n\r\n        child = Util.create({tag: 'linearGradient', id: 'classelement', x1: 0, x2: '100%', y1: '100%', y2: 0});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#fff', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#d3d3d3', offset: 1}));\r\n        def.appendChild(child);\r\n\r\n        return def;\r\n    }\r\n\r\n    public static getSubstring(str: string, search: string, startChar: string, endChar: string, splitter: string): any {\r\n        let pos, end, count = 0, array = [];\r\n        pos = str.indexOf(search);\r\n        if (pos > 0) {\r\n            end = str.indexOf(startChar, pos);\r\n            pos = end + 1;\r\n            if (end > 0) {\r\n                while (end < str.length) {\r\n                    if (str.charAt(end) === startChar) {\r\n                        count += 1;\r\n                    }\r\n                    if (str.charAt(end) === endChar) {\r\n                        count -= 1;\r\n                        if (count === 0) {\r\n                            if (splitter && pos !== end) {\r\n                                array.push(str.substring(pos, end).trim());\r\n                            }\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (str.charAt(end) === splitter && count === 1) {\r\n                        array.push(str.substring(pos, end).trim());\r\n                        pos = end + 1;\r\n                    }\r\n\r\n                    end += 1;\r\n                }\r\n                if (splitter) {\r\n                    return array;\r\n                }\r\n                return str.substring(pos, end);\r\n            }\r\n            return str.substring(pos);\r\n        }\r\n        return '';\r\n    }\r\n\r\n    public static addStyle(board: SVGElement, styleName: any) {\r\n        let defs, style: any, css;\r\n        if (styleName.baseVal || styleName.baseVal === '') {\r\n            styleName = styleName.baseVal;\r\n        }\r\n        if (!styleName) {\r\n            return;\r\n        }\r\n        defs = CSS.getDefs(board);\r\n        if (defs.getElementsByTagName('style').length > 0) {\r\n            style = defs.getElementsByTagName('style')[0];\r\n        } else {\r\n            style = Util.create({tag: 'style'});\r\n            style.item = {};\r\n            defs.appendChild(style);\r\n        }\r\n        if (!style.item[styleName]) {\r\n            css = Util.getStyle(styleName);\r\n            style.item[styleName] = css;\r\n            style.innerHTML = style.innerHTML + '\\n.' + styleName + css.getSVGString(board);\r\n        }\r\n    }\r\n\r\n    public static addStyles(board: SVGElement, item: any) {\r\n        if (!item) {\r\n            return;\r\n        }\r\n        let items, i, className: any = item.className;\r\n\r\n        if (className) {\r\n            if (className.baseVal || className.baseVal === '') {\r\n                className = className.baseVal;\r\n            }\r\n        }\r\n        if (className) {\r\n            items = className.split(' ');\r\n            for (i = 0; i < items.length; i += 1) {\r\n                CSS.addStyle(board, items[i].trim());\r\n            }\r\n        }\r\n        for (i = 0; i < item.childNodes.length; i += 1) {\r\n            this.addStyles(board, item.childNodes[i]);\r\n        }\r\n    }\r\n\r\n    public static getDefs(board: SVGElement) {\r\n        let defs;\r\n        if (board.getElementsByTagName('defs').length < 1) {\r\n            defs = Util.create({tag: 'defs'});\r\n            board.insertBefore(defs, board.childNodes[0]);\r\n        } else {\r\n            defs = board.getElementsByTagName('defs')[0];\r\n        }\r\n        return defs;\r\n    }\r\n\r\n    public add(key: string, value: string) {\r\n        this.css[key] = value;\r\n    }\r\n\r\n    public get(key: string): any {\r\n        let i;\r\n        for (i in this.css) {\r\n            if (i === key) {\r\n                return this.css[key];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public getNumber(key: string) {\r\n        return parseInt((this.get(key) || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    public getSVGString(board: SVGElement) {\r\n        let str, pos, style, defs, value, filter, z;\r\n        str = '{';\r\n        for (style in this.css) {\r\n            if (!this.css.hasOwnProperty(style)) {\r\n                continue;\r\n            }\r\n            if (style === 'border') {\r\n                pos = this.css[style].indexOf(' ');\r\n                str = str + 'stroke-width: ' + this.css[style].substring(0, pos) + ';';\r\n                pos = this.css[style].indexOf(' ', pos + 1);\r\n                str = str + 'stroke:' + this.css[style].substring(pos) + ';';\r\n            } else if (style === 'background-color') {\r\n                str = str + 'fill: ' + this.css[style] + ';';\r\n            } else if (style === 'background') {\r\n                value = CSS.getSubstring(this.css[style], 'linear-gradient', '(', ')', ',');\r\n                if (value.length > 0) {\r\n                    defs = CSS.getDefs(board);\r\n                    if (value[0] === '45deg') {\r\n                        pos = 1;\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '100%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                    } else {\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '0%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                        pos = 0;\r\n                    }\r\n                    defs.appendChild(filter);\r\n                    while (pos < value.length) {\r\n                        value[pos] = value[pos].trim();\r\n                        z = value[pos].lastIndexOf(' ');\r\n                        filter.appendChild(Util.create({\r\n                            tag: 'stop',\r\n                            'offset': value[pos].substring(z + 1),\r\n                            style: {'stop-color': value[pos].substring(0, z)}\r\n                        }));\r\n                        pos += 1;\r\n                    }\r\n                    str = str + 'fill: url(#' + this.name + ');';\r\n                    continue;\r\n                }\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n                // box-shadow: inset 0 3px 4px #888;\r\n// \t\t\t\t<defs>\r\n// \t\t\t\t\t<filter id='drop-shadow'>\r\n// \t\t\t\t\t\t<feGaussianBlur in='SourceAlpha' result='blur-out' stdDeviation='2'></feGaussianBlur>\r\n// \t\t\t\t\t\t<feOffset in='blur-out' dx='2' dy='2'></feOffset>\r\n// \t\t\t\t\t\t<feBlend in='SourceGraphic' mode='normal'></feBlend>\r\n// \t\t\t\t\t</filter>\r\n// \t\t\t\t</defs>\r\n            } else {\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n            }\r\n        }\r\n        str = str + '}';\r\n        return str;\r\n    }\r\n}\r\n","import {Bridge} from './Bridge';\r\nimport Data from './Data';\r\nimport EventListener from './EventListener';\r\n\r\nexport abstract class Control {\r\n    public $owner: Control;\r\n    /**\r\n     *\r\n     */\r\n    public property: string;\r\n    public id: string;\r\n    public $view: Element;\r\n    public $viewData: Data = null;\r\n\r\n    protected $model: Data;\r\n    protected $viewListener: EventListenerOrEventListenerObject;\r\n\r\n    /**\r\n     * The properties, we want to listen to\r\n     */\r\n    // static defaultProperties: string[] = [];\r\n\r\n    // public getProperties(): string[] {\r\n    //     return this.properties;\r\n    // }\r\n\r\n    constructor() {\r\n        // e.g. this.properties.push(\"key\");\r\n        // this.properties.push(\"property\");\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data: Data = new Data();\r\n        if (oldData) {\r\n            oldData.removeListener(this);\r\n            const keys: string[] = oldData.getKeys();\r\n            for (let i = 0; i < keys.length; i++) {\r\n                let attr = keys[i];\r\n                if (this.$view) {\r\n                    if (this.$view[attr] === null) {\r\n                        continue;\r\n                    }\r\n                    data.setValue(attr, this.$view[attr]);\r\n                } else {\r\n                    data.setValue(attr, null);\r\n                }\r\n            }\r\n        }\r\n        data.addListener(this);\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     *  Set the new HTMLElement and attach listener to it.\r\n     *  Also remove Listeners from old one and return the old one, if present.\r\n     * @param element\r\n     * @returns The previous Element\r\n     */\r\n    public setView(element: Element): Element {\r\n        let oldElement: Element = null;\r\n        if (this.$view) {\r\n            oldElement = this.$view;\r\n            if (this.$viewListener) {\r\n                oldElement.removeEventListener('change', this.$viewListener);\r\n            }\r\n        }\r\n        this.$view = element;\r\n\r\n        if (this.$viewListener) {\r\n            element.addEventListener('change', this.$viewListener);\r\n        }\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n        return element;\r\n    }\r\n\r\n    public init(owner: Control, property ?: string, id ?: string): Control {\r\n        if (!this.$owner) {\r\n            this.$owner = owner;\r\n        }\r\n        if (!this.id) {\r\n            this.id = id;\r\n        }\r\n        if (!this.property) {\r\n            this.property = this.generateID(property, id);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public createEventListener(): EventListener {\r\n        return new EventListener();\r\n    }\r\n\r\n    public getRoot(): Control {\r\n        if (this.$owner) {\r\n            return this.$owner.getRoot();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return null;\r\n    }\r\n\r\n    public initControl(data: any): void {\r\n        if (this.$view === null || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (data.hasOwnProperty('prop')) {\r\n            for (let key in data.prop) {\r\n                let oldValue = this.$viewData.getValue(key);\r\n                if (this.$view) {\r\n                    this.updateElement(key, oldValue, data.prop[key]);\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        let hasRem = data.hasOwnProperty('rem');\r\n        let removed: any[] = [];\r\n        if (data.hasOwnProperty('upd')) {\r\n            for (let key in data.upd) {\r\n                let oldValue;\r\n                let newValue = data.upd[key];\r\n                let entity;\r\n                const temp = false;\r\n                if (temp) {\r\n//                if (newValue == this.getViewData().getValue(key)) {\r\n                    // new Value assertEquals old value, so we don't need to change anything..\r\n                    // delete data.rem[key];\r\n                    if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                        removed.push(data.rem[key]);\r\n                    }\r\n                    continue;\r\n                }\r\n                if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                    // if there's a rem, the oldValue from rem will be used and expected to be right..\r\n                    oldValue = data.rem[key];\r\n                    if (this.$model && this.$model.getValue(key) === oldValue) {\r\n                        entity = this.$model;\r\n//                    } else if (oldValue == this.getViewData().getValue(key)) {\r\n//                        $graphModel = this.getViewData();\r\n                    }\r\n                    delete data.rem[key];\r\n\r\n                    if (entity === null) {\r\n                        continue;\r\n                    }\r\n                }\r\n                if (entity) {\r\n                    if (!hasRem) {\r\n                        if (entity === this.$model) {\r\n                            oldValue = this.$model.getValue(key);\r\n                        } else {\r\n//                           oldValue = this.getViewData().getValue(key);\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (this.$model) {\r\n                        // try to get the oldValue directly from the $graphModel...\r\n                        oldValue = this.$model.getValue(key);\r\n                        entity = this.$model;\r\n                    }\r\n                    if (oldValue === null) {\r\n                        // if there was no data in the entity, we try to get oldValue from the $view\r\n//                        oldValue = this.getViewData().getValue(key);\r\n//                        entity = this.getViewData();\r\n                    }\r\n                }\r\n\r\n                //  || oldValue !== this.$viewData.getValue(key)\r\n                if (newValue === oldValue) {\r\n                    // no match, so update should be wrong...\r\n                    continue;\r\n                }\r\n                const viewDataOldValue = this.$viewData.getValue(key);\r\n                if (entity === this.$viewData) {\r\n\r\n                    // this.getViewData().setValue(key, newValue);\r\n                    if (this.$view) {\r\n                        this.updateElement(key, viewDataOldValue, newValue);\r\n                    }\r\n                } else {\r\n                    this.updateElement(key, viewDataOldValue, newValue);\r\n                }\r\n                this.getRoot().setValue(entity, key, newValue, oldValue);\r\n            }\r\n            // this.saveViewInData();\r\n        }\r\n        if (hasRem) {\r\n            for (let key in data.rem) {\r\n                if (removed.hasOwnProperty(key)) {\r\n                    continue;\r\n                }\r\n                let oldValue;\r\n//                    this.getViewData().getValue(key);\r\n//                if (oldValue != data.rem[key] || data.upd !== undefined && (data.upd[key] == oldValue || this.getViewData().getValue(key) == data.upd[key])) {\r\n                // if rem is invalid, or if the change is already applied, don't do anything..\r\n                //                  continue;\r\n                //            }\r\n                // delete this.$viewData.getValue(key);\r\n                // this.saveViewInData();\r\n                this.updateElement(key, null, null);\r\n                // this.$view.removeAttribute(key);\r\n                if (this.$model) {\r\n//                    this.getRoot().setValue(this.$graphModel, key, this.getViewData().getValue(key), oldValue);\r\n                }\r\n            }\r\n        }\r\n        if (this.property) {\r\n            // Add listener to Input field:\r\n            this.$view['onchange'] = ((ev: Event) => {\r\n                    this.controlChanged(ev);\r\n                }\r\n            );\r\n        }\r\n//        this.saveViewInData();\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        return null;\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n        return false;\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return new Object();\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue ?: Object): boolean {\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Is called when a object, that the Control is listening to, changes its value.\r\n     * @param entity\r\n     * @param property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        if (oldValue === newValue || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (oldValue === this.$viewData.getValue(property)) {\r\n            return;\r\n        }\r\n        // Set NewData to ViewData and Fire PC\r\n        this.$viewData.setValue(property, newValue);\r\n\r\n//\r\n//\r\n//         // if (entity == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.entity) {\r\n//                 alert(\"entity = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.entity.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.entity, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the entity is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"entity = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n// >>>>>>> addOldFunctions\r\n        if (this.$viewData) {\r\n            this.$viewData.setValue(property, newValue);\r\n        }\r\n        if (this.$model) {\r\n            this.$model.setValue(property, newValue);\r\n        }\r\n        this.updateElement(property, oldValue, newValue);\r\n    }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            // Do Nothing\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  Update GUI Element\r\n     * @param {string} property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        if (this.$view && this.$view.hasAttribute(property)) {\r\n            this.$view.setAttribute(property, newValue);\r\n        }\r\n    }\r\n\r\n//        if (oldValue == newValue) {\r\n//            return;\r\n//        }\r\n//        if (oldValue == this.$viewData.getValue(property)) {\r\n//            return;\r\n//        }\r\n//        // Set NewData to ViewData and Fire PC\r\n//        this.$viewData.setValue(property, newValue);\r\n//\r\n//\r\n//\r\n//         // if ($graphModel == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.$graphModel) {\r\n//                 alert(\"$graphModel = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.$graphModel.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.$graphModel, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the $graphModel is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"$graphModel = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n\r\n    public getId(): string {\r\n        return this.id;\r\n    }\r\n\r\n    public load(json: JSON | Object, owner ?: Control): any {\r\n        // Do Nothing\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.property || entity.hasProperty(this.property)) {\r\n                entity.addListener(this, this.property);\r\n                this.$model = entity;\r\n            }\r\n        }\r\n    }\r\n\r\n    public appendChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.appendChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].appendChild(child.$view);\r\n        }\r\n    }\r\n\r\n    public removeChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.removeChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].removeChild(child.$view);\r\n        }\r\n    }\r\n\r\n    /*\r\n     Property looks like: 't1.talk'\r\n     */\r\n    public setProperty(property: string): void {\r\n        if (!this.property) {\r\n            return;\r\n        }\r\n        let objId = property.split('.')[0];\r\n        let object = null;\r\n        if (this.$owner.hasItem(objId)) {\r\n            object = this.$owner.getItem(objId);\r\n        }\r\n\r\n        // remove listener on old object\r\n        if (this.$model) {\r\n            // this.$graphModel.removeListener(this);\r\n            this.$model.removeListener(this, this.lastProperty);\r\n        }\r\n        this.property = property;\r\n\r\n        // add listener to object..\r\n        if (object) {\r\n            object.addListener(this, this.lastProperty);\r\n            this.$model = object;\r\n            this.updateElement(this.lastProperty, this.$viewData.getValue(this.lastProperty), object.prop[this.lastProperty]);\r\n        }\r\n    }\r\n\r\n    public registerListenerOnHTMLObject(eventType: string): boolean {\r\n        return this.registerEventListener(eventType, <HTMLElement>this.$view);\r\n    }\r\n\r\n    // Normal Event HTML-Event\r\n    // Eventtype:string,\r\n    // id:string of Control\r\n    public fireEvent(evt: Event): void {\r\n        // Do Nothing\r\n    }\r\n\r\n    public isClosed(): boolean {\r\n        return this['closed'];\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        if (this.isClosed()) {\r\n            return this.$owner.getShowed();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * the id of the Data object, that contains the properties of the view\r\n     * @returns {string}\r\n     */\r\n    protected getControlDataID() {\r\n        return this.id + '_data';\r\n    }\r\n\r\n    protected generateID(property ?: string, id ?: string): string {\r\n        if (property) {\r\n            return property;\r\n        }\r\n        if (id) {\r\n            // will generate a data Object suitable for the Control..\r\n            // must be overridden, if the changeEvent shouldn't listen on value...\r\n//            return id + '.' + this.getStandardProperty();//+ \"_data\"\r\n            return id + '.' + '_data';\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected updateViewData() {\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n        const keys: string[] = this.$viewData.getKeys();\r\n        for (let i = 0; i < keys.length; i++) {\r\n            let attr = keys[i];\r\n            if (this.$view[attr] === null) {\r\n                continue;\r\n            }\r\n            this.$viewData.setValue(attr, this.$view[attr]);\r\n        }\r\n    }\r\n\r\n    protected registerEventListener(eventType: string, htmlElement: HTMLElement): boolean {\r\n        if (!htmlElement) {\r\n            return false;\r\n        }\r\n        if (htmlElement instanceof HTMLElement === false) {\r\n            return false;\r\n        }\r\n        let control = this;\r\n        let listener = (t: any) => {\r\n            t.eventType = eventType;\r\n            t.id = control.id;\r\n            control.$owner.fireEvent(t);\r\n        };\r\n        htmlElement.addEventListener(eventType, listener);\r\n        return true;\r\n    }\r\n\r\n    get lastProperty(): string {\r\n        if (!this.property) {\r\n            return '';\r\n        }\r\n        let arr: string[] = this.property.split('.');\r\n        return arr[arr.length - 1];\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\n\r\nexport default class Data {\r\n    public prop = {};\r\n    id: string;\r\n    // $listener: Control[] = [];\r\n    $listener: Object = {};\r\n\r\n    private static nullCheck(property: string): string {\r\n        if (property === undefined || property === null) {\r\n            property = '';\r\n        }\r\n        return property;\r\n    }\r\n    public getKeys(): string[] {\r\n        return Object.keys(this.prop);\r\n    }\r\n\r\n    public addProperties(values: Object) {\r\n        if (!values) {\r\n            return;\r\n        }\r\n        if (values['prop']) {\r\n            let prop = values['prop'];\r\n            for (let property in prop) {\r\n                if (prop.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (prop[property] !== null && '' !== prop[property]) {\r\n                    this.setValue(property, prop[property]);\r\n                }\r\n            }\r\n        } else {\r\n            let upd = values['upd'] || {};\r\n            let rem = values['rem'] || {};\r\n\r\n            for (let property in upd) {\r\n                if (upd.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (rem.hasOwnProperty(property) === false) {\r\n                    this.setValue(property, upd[property]);\r\n                } else {\r\n                    // if we have a rem, we wan't to check, if its a valid change (teh old value is the value in rem)\r\n                    if (this.getValue(property) === rem[property]) {\r\n                        this.setValue(property, upd[property]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getValue(attribute: string) {\r\n        return this.prop[attribute];\r\n    }\r\n\r\n    public setValue(attribute: string, newValue: any): void {\r\n        let oldValue = this.prop[attribute];\r\n        if (oldValue === newValue && newValue !== null) {\r\n            return;\r\n        }\r\n        this.prop[attribute] = newValue;\r\n        this.firePropertyChange(attribute, oldValue, newValue);\r\n    }\r\n\r\n    public addTo(attribute: string, newValue: any): boolean {\r\n        let add: boolean;\r\n        if (this.prop[attribute]) {\r\n            if (this.prop[attribute].contains(newValue) === false) {\r\n                add = true;\r\n            }\r\n        } else {\r\n            this.prop[attribute] = [];\r\n            add = true;\r\n        }\r\n        if (add) {\r\n            this.prop[attribute].push(newValue);\r\n            this.firePropertyChange(attribute, null, newValue);\r\n        }\r\n        return add;\r\n    }\r\n\r\n    public removeFrom(attribute: string, newValue: any): boolean {\r\n        if (!this.prop[attribute]) {\r\n            return true;\r\n        }\r\n        let pos: number = this.prop[attribute].indexOf(newValue);\r\n        if (pos < 0) {\r\n            return true;\r\n        }\r\n        this.prop[attribute].splice(pos, 1);\r\n        this.firePropertyChange(attribute, newValue, null);\r\n        return true;\r\n    }\r\n\r\n    public addListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(property);\r\n        if (!listeners) {\r\n            listeners = [];\r\n            this.$listener[Data.nullCheck(property)] = listeners;\r\n        }\r\n        listeners.push(control);\r\n    }\r\n\r\n    public removeListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners = this.getListeners(property);\r\n        if (listeners === null) {\r\n            return;\r\n        }\r\n        let pos = listeners.indexOf(control);\r\n        if (pos >= 0) {\r\n            listeners.splice(pos, 1);\r\n        }\r\n        if (listeners.length === 0 && Data.nullCheck(property) !== '') {\r\n            // only remove, if it's not the default listener list...\r\n            delete this.$listener[property];\r\n        }\r\n    }\r\n\r\n    public hasProperty(property: string): boolean {\r\n        return this.prop.hasOwnProperty(property);\r\n    }\r\n\r\n    public addFrom(attribute: string, oldData: Data): void {\r\n        if (oldData) {\r\n            this.setValue(attribute, oldData.getValue(attribute));\r\n        } else {\r\n            this.setValue(attribute, null);\r\n        }\r\n    }\r\n\r\n    public removeKey(key: string): any {\r\n        if (this.hasProperty(key)) {\r\n            const oldValue = this.prop[key];\r\n            delete this.prop[key];\r\n            return oldValue;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected getListeners(property: string): PropertyChangeSupport[] {\r\n        property = Data.nullCheck(property);\r\n        return this.$listener[property];\r\n    }\r\n\r\n    protected firePropertyChange(attribute: string, oldValue: Object, newValue: Object) {\r\n        attribute = Data.nullCheck(attribute);\r\n        // at first fire for the given property\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(attribute);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n        // now we need to fire the Listeners that wan't to listen to everything\r\n        listeners = this.getListeners(null);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport interface EventHandler {\r\n    canHandle(): boolean;\r\n    handle(event: Event, element: DiagramElement): boolean;\r\n    setActive(active: boolean): void;\r\n}\r\n\r\nexport class EventBus {\r\n    public static CREATE: string = 'Create';\r\n    public static EDITOR: string = 'Editor';\r\n    public static OPENPROPERTIES: string = 'openProperties';\r\n    public static RELOADPROPERTIES: string = 'reloadProperties';\r\n    public static ELEMENTMOUSEDOWN: string = 'ELEMENT:MOUSEDOWN';\r\n    public static ELEMENTMOUSEUP: string = 'ELEMENT:MOUSEUP';\r\n    public static ELEMENTMOUSELEAVE: string = 'ELEMENT:MOUSELEAVE';\r\n    public static ELEMENTMOUSEMOVE: string = 'ELEMENT:MOUSEMOVE';\r\n    public static ELEMENTMOUSEWHEEL: string = 'ELEMENT:MOUSEWHEEL';\r\n    public static ELEMENTCLICK: string = 'ELEMENT:CLICK';\r\n    public static ELEMENTDBLCLICK: string = 'ELEMENT:DBLCLICK';\r\n    public static ELEMENTDRAG: string = 'ELEMENT:DRAG';\r\n    public static ELEMENTDRAGOVER: string = 'ELEMENT:DRAGOVER';\r\n    public static ELEMENTDROP: string = 'ELEMENT:DROP';\r\n    public static ELEMENTDRAGLEAVE: string = 'ELEMENT:DRAGLEAVE';\r\n\r\n    public static EVENTS: string[] = [\r\n        EventBus.CREATE,\r\n        EventBus.EDITOR,\r\n        EventBus.OPENPROPERTIES,\r\n        EventBus.RELOADPROPERTIES,\r\n        EventBus.ELEMENTMOUSEDOWN,\r\n        EventBus.ELEMENTMOUSEUP,\r\n        EventBus.ELEMENTMOUSELEAVE,\r\n        EventBus.ELEMENTMOUSEMOVE,\r\n        EventBus.ELEMENTMOUSEWHEEL,\r\n        EventBus.ELEMENTCLICK,\r\n        EventBus.ELEMENTDRAG,\r\n        EventBus.ELEMENTDBLCLICK,\r\n        EventBus.ELEMENTDRAGOVER,\r\n        EventBus.ELEMENTDROP,\r\n        EventBus.ELEMENTDRAGLEAVE,\r\n    ];\r\n\r\n    private static handlers = {};\r\n\r\n    private static $activeHandler: string = '';\r\n\r\n    public static setActiveHandler(handler: string): void {\r\n        this.$activeHandler = handler;\r\n    }\r\n\r\n    public static isHandlerActiveOrFree(handler: string, notEmpty?: boolean): boolean {\r\n        if (notEmpty) {\r\n            return this.$activeHandler === handler;\r\n        }\r\n        return this.$activeHandler === handler || this.$activeHandler === '' || this.$activeHandler === undefined;\r\n    }\r\n\r\n    public static isAnyHandlerActive(): boolean {\r\n        return !(this.$activeHandler === '' || this.$activeHandler === undefined);\r\n    }\r\n\r\n    public static releaseActiveHandler(): void {\r\n        this.$activeHandler = '';\r\n    }\r\n\r\n    public static getActiveHandler(): string {\r\n        return this.$activeHandler;\r\n    }\r\n\r\n    static register(control: Control, view: Element) {\r\n        let events: string[];\r\n        if (typeof control['getEvents'] === 'function') {\r\n            events = control['getEvents']();\r\n        }\r\n\r\n        if (!events || !view) {\r\n            return;\r\n        }\r\n        for (let event of events) {\r\n            this.registerEvent(view, event, control);\r\n        }\r\n    }\r\n\r\n    static registerEvent(view: Element, event: string, control?: any) {\r\n        const pos: number = event.indexOf(':');\r\n        if (pos > 0) {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        } else {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        }\r\n    }\r\n\r\n    public static publish(element: DiagramElement, evt: Event) {\r\n        let handlers = EventBus.handlers[evt.type];\r\n        if (handlers) {\r\n            for (let handler of handlers) {\r\n                handler.handle(evt, element);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static subscribe(handler: EventHandler, ...eventTypes: string[]) {\r\n        for (let event of eventTypes) {\r\n            let handlers = EventBus.handlers[event];\r\n            if (handlers === null || handlers === undefined) {\r\n                handlers = [];\r\n                EventBus.handlers[event] = handlers;\r\n            }\r\n            handlers.push(handler);\r\n        }\r\n    }\r\n}\r\n","import SimpleEvent from './Event';\r\n\r\nexport default class EventListener {\r\n    private $onUpdate: Function;\r\n\r\n    get onUpdate(): Function {\r\n        return this.$onUpdate;\r\n    }\r\n\r\n    set onUpdate(value: Function) {\r\n        this.$onUpdate = value;\r\n    }\r\n\r\n    update(event: SimpleEvent) {\r\n        this.$onUpdate(event);\r\n    }\r\n}\r\n","// ################################## jsEPS ####################################################\r\nimport {SVGConverter} from './SVGConverter';\r\n\r\nexport class JSEPS {\r\n    private max: number;\r\n    private min: number;\r\n    private inverting: boolean;\r\n    private output: string[];\r\n    private font: number;\r\n\r\n    constructor(options: any) {\r\n        this.max = 0;\r\n        this.min = 999;\r\n        let hasInverting = typeof (options.inverting);\r\n        this.inverting = (options && hasInverting !== 'undefined' ? options.inverting : true);\r\n        this.output = ['%!PS-Adobe-3.0 EPSF-3.0', '1 setlinewidth'];\r\n        this.out('/FSD {findfont exch scalefont def} bind def % In the document prolog: define');\r\n        this.out('/SMS {setfont moveto show} bind def % some useful procedures');\r\n        this.out('/MS {moveto show} bind def');\r\n        this.out('/F1  10  /Helvetica  FSD % At the start of the script: set up');\r\n        this.font = 1;\r\n    }\r\n\r\n    public out(value: string) {this.output.push(value); }\r\n    public rect(x: number, y: number, width: number, height: number, style: string) {\r\n        y = y + (this.inverting ? height : 0);\r\n        if (style && style.indexOf('fill:url(#classelement);') >= 0) {\r\n            this.out('gsave 0.93 0.93 0.93 setrgbcolor newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectfill grestore');\r\n        } else {\r\n            this.out('newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectstroke');\r\n        }\r\n    }\r\n    public setFillColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public y(value: number) {this.max = Math.max(this.max, value); this.min = Math.min(this.min, value); return this.inverting ? '%y(' + value + ')' : value; }\r\n    public getType(): string {\r\n        return 'application/postscript';\r\n    }\r\n\r\n    public getData(): string {\r\n        let t, end, url, text, typ = 'application/postscript', a = document.createElement('a'), data = '', pos, i;\r\n        for (i = 0; i < this.output.length; i += 1) {\r\n            text = this.output[i];\r\n            if (this.inverting) {\r\n                while ((pos = text.indexOf('%y')) >= 0) {\r\n                    end = text.indexOf(')', pos);\r\n                    t = this.max - parseInt(text.substring(pos + 3, end), 10);\r\n                    text = text.substring(0, pos) + t + text.substring(end + 1);\r\n                }\r\n            }\r\n            data = data + text + '\\r\\n';\r\n        }\r\n        return data;\r\n    }\r\n\r\n    public setDrawColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public ellipse(cx: number, cy: number, rx: number, ry: number, colorMode: string) {/*FIXME*/}\r\n    public circle(cx: number, cy: number, r: number, colorMode: string) {/*FIXME*/}\r\n    public setTextColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public text(x: number, y: number, text: string) {this.out('(' + text.replace('&lt;', '<').replace('&gt;', '>') + ') ' + x + ' ' + this.y(y) + ' F1 SMS'); }\r\n    public lineto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' lineto'); this.out('stroke'); }\r\n    public moveto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' moveto'); }\r\n    public line(x1: number, y1: number, x2: number, y2: number) {this.out('newpath ' + x1 + ' ' + this.y(y1) + ' moveto ' + x2 + ' ' + this.y(y2) + ' lineto stroke'); }\r\n    public setLineWidth(value: string) {this.out(value + ' setlinewidth'); }\r\n    public setFont(value: string) {this.out('/F' + (this.font += 1) + ' 10 /' + value + ' FSD'); }\r\n}\r\n","import { Graph } from './elements/Graph';\r\n\r\n/*const buttons = {\r\n    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    clazz: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n};\r\n*/\r\nexport default class Palette {\r\n\r\n    private graph: Graph;\r\n    private palette: Element;\r\n    private root: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n        let div = document.createElement('div');\r\n        div.className = 'palette';\r\n        div.id = 'palette';\r\n        this.root = div;\r\n        this.palette = div;\r\n        for (let key in graph.nodeFactory) {\r\n            let element = graph.nodeFactory[key];\r\n            let control = new element();\r\n            let icon = control.getToolBarIcon();\r\n            if (icon) {\r\n                let button = <HTMLButtonElement>document.createElement('button');\r\n                button.className = 'add' + key + 'Btn';\r\n                button.innerHTML = icon.outerHTML;\r\n                button.onclick = e => {\r\n                    let nextFreePosition = this.graph.getNextFreePosition();\r\n                    // let node = this.graph.addElementWithValues(graph.nodeFactory[key], {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    let node = this.graph.addElementWithValues(key, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    this.graph.drawElement(node);\r\n                };\r\n                this.palette.appendChild(button);\r\n            }\r\n        }\r\n        // this.graph.nodeFactory\r\n//        this.addButtons();\r\n    }\r\n\r\n    public show() {\r\n        document.body.appendChild(this.root);\r\n    }\r\n\r\n    private addButtons() {\r\n        /*for (let btn in buttons) {\r\n            let button = <HTMLButtonElement>document.createElement('button');\r\n            button.className = 'add' + btn + 'Btn';\r\n            button.innerHTML = buttons[btn];\r\n            button.onclick = e => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let node = this.graph.addElementWithValues(btn, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                this.graph.drawElement(node);\r\n            };\r\n            this.palette.appendChild(button);\r\n        }*/\r\n    }\r\n}\r\n","import {Graph} from './elements/Graph';\r\nimport * as edges from './elements/edges';\r\nimport {EventBus, EventHandler} from './EventBus';\r\nimport {DiagramElement} from './elements/BaseElements';\r\nimport {Util} from './util';\r\n\r\nexport class PanelGroup implements EventHandler {\r\n    private graph: Graph;\r\n    private selectedElement: DiagramElement;\r\n    private clearPanel: Panel;\r\n    private generatePanel: Panel;\r\n    private propertiesMasterPanel: HTMLDivElement;\r\n    private propertiesContent: HTMLDivElement;\r\n    private propHeaderLabel: HTMLDivElement;\r\n    private propHeaderButton: HTMLButtonElement;\r\n    private selectedPanel: Panel;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.clearPanel = new ClearPanel(this);\r\n        this.generatePanel = new GeneratePanel(this);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        this.handleOpenProperties(event, element);\r\n\r\n        if (event.type === EventBus.RELOADPROPERTIES\r\n            && this.selectedElement && element.id === this.selectedElement.id) {\r\n            this.handleEvent(event, element);\r\n        }\r\n\r\n        // the same element was clicked. do nothing\r\n        if (this.selectedElement && this.selectedElement.id === element.id) {\r\n            return true;\r\n        }\r\n        if (element.id === 'RootElement') {\r\n            this.setActivePanel(this.clearPanel);\r\n        }\r\n        if (element.id === 'GenerateProp') {\r\n            this.setActivePanel(this.generatePanel);\r\n        }\r\n        this.selectedElement = element;\r\n\r\n        return true;\r\n    }\r\n\r\n    public getGraph(): Graph {\r\n        return this.graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(PanelGroup.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(PanelGroup.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n     public handleEvent(event: any, element: any) {\r\n        // DO NOTHING\r\n    }\r\n\r\n    public show() {\r\n        // main div to display any properties, class, edge, etc.\r\n        this.propertiesMasterPanel = document.createElement('div');\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n\r\n        this.propertiesContent = document.createElement('div');\r\n        this.propertiesContent.className = 'properties-hidden';\r\n\r\n        this.propHeaderLabel = document.createElement('div');\r\n        this.propHeaderLabel.style.display = 'inherit';\r\n        this.propHeaderLabel.style.cursor = 'pointer';\r\n        this.propHeaderLabel.onclick = e => this.toogleProperties(e);\r\n\r\n        // button to display and hide the properties of e.g. a class\r\n        this.propHeaderButton = document.createElement('button');\r\n        this.propHeaderButton.className = 'btnHideProp';\r\n        this.propHeaderButton.style.cssFloat = 'right';\r\n        this.propHeaderButton.onclick = e => this.toogleProperties(e);\r\n\r\n        let propertiesHeader = document.createElement('div');\r\n        propertiesHeader.style.display = 'inline';\r\n        propertiesHeader.appendChild(this.propHeaderLabel);\r\n        propertiesHeader.appendChild(this.propHeaderButton);\r\n\r\n        this.propertiesMasterPanel.appendChild(propertiesHeader);\r\n        this.propertiesMasterPanel.appendChild(this.propertiesContent);\r\n        document.body.appendChild(this.propertiesMasterPanel);\r\n\r\n        this.setActivePanel(this.clearPanel);\r\n    }\r\n\r\n    public setActivePanel(panel: Panel) {\r\n        this.selectedPanel = panel;\r\n        this.propHeaderLabel.innerHTML = panel.getHeaderText();\r\n        if (this.propertiesContent) {\r\n            while (this.propertiesContent.hasChildNodes()) {\r\n                this.propertiesContent.removeChild(this.propertiesContent.childNodes[0]);\r\n            }\r\n        }\r\n        panel.show();\r\n\r\n        panel.showFirstTab();\r\n        if (panel !== this.clearPanel) {\r\n            this.showProperties(null);\r\n        } else {\r\n            this.hideProperties(null);\r\n        }\r\n    }\r\n\r\n    public getProperiesContent(): HTMLDivElement {\r\n        return this.propertiesContent;\r\n    }\r\n\r\n    private handleOpenProperties(event: Event, element: DiagramElement) {\r\n        if (event.type === 'dblclick') {\r\n            this.showProperties(event);\r\n        }\r\n    }\r\n\r\n    private showProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Show\r\n        this.propHeaderButton.innerHTML = '&#8897;';\r\n        this.propHeaderButton.title = 'Hide properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel';\r\n        this.propertiesContent.className = 'properties';\r\n    }\r\n\r\n    private toogleProperties(evt: Event): void {\r\n        if (this.propHeaderButton.title === 'Show properties') {\r\n            this.showProperties(evt);\r\n        } else {\r\n            this.hideProperties(evt);\r\n        }\r\n    }\r\n\r\n    private hideProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Hide\r\n        this.propHeaderButton.innerHTML = '&#8896;';\r\n        this.propHeaderButton.title = 'Show properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n        this.propertiesContent.className = 'properties-hidden';\r\n    }\r\n}\r\n\r\nexport abstract class Panel {\r\n    protected divPropertiesPanel: HTMLDivElement;\r\n    protected divPropertiesTabbedPanel: HTMLDivElement;\r\n    protected element: any;\r\n    protected group: PanelGroup;\r\n    private panelItem: PanelItem[] = [];\r\n\r\n    constructor(group: PanelGroup, element: any) {\r\n        // get the properties content panel\r\n        this.divPropertiesPanel = document.createElement('div');\r\n        this.element = element;\r\n        this.group = group;\r\n\r\n        this.divPropertiesTabbedPanel = document.createElement('div');\r\n        this.divPropertiesTabbedPanel.className = 'tabbedpane';\r\n\r\n        // add tabbed panel\r\n        this.divPropertiesPanel.appendChild(this.divPropertiesTabbedPanel);\r\n    }\r\n\r\n    public show(): void {\r\n        let propertiesContent: HTMLDivElement = this.group.getProperiesContent();\r\n        if (this.panelItem.length > 1) {\r\n            propertiesContent.appendChild(this.getPropertiesTabbedPanel());\r\n        }\r\n\r\n        propertiesContent.appendChild(this.getPropertiesPanel());\r\n    }\r\n\r\n    public getPropertiesTabbedPanel(): HTMLDivElement {\r\n        return this.divPropertiesTabbedPanel;\r\n    }\r\n\r\n    public getPropertiesPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return '';\r\n    }\r\n\r\n    public showFirstTab(): void {\r\n        if (this.panelItem.length > 0) {\r\n            this.openTab(this.panelItem[0]);\r\n        }\r\n    }\r\n\r\n    protected createTabElement(tabText: string, tabValue: string, item: PanelItem): PanelItem {\r\n        let tabElementBtn = document.createElement('button');\r\n        tabElementBtn.className = 'tablinks';\r\n        tabElementBtn.innerText = tabText;\r\n        tabElementBtn.value = tabValue;\r\n\r\n        if (item === null) {\r\n            item = new PanelItem(this);\r\n        }\r\n        item.withButton(tabElementBtn);\r\n\r\n        tabElementBtn.onclick = () => this.openTab(item);\r\n        this.divPropertiesTabbedPanel.appendChild(tabElementBtn);\r\n        this.panelItem.push(item);\r\n        return item;\r\n    }\r\n\r\n    protected openTab(panelItem: PanelItem): void {\r\n        for (let key in this.panelItem) {\r\n            let child = this.panelItem[key];\r\n            if (child !== panelItem) {\r\n                 child.deactive();\r\n            }\r\n        }\r\n        panelItem.active();\r\n        // hide other tabcontent\r\n        if (this.divPropertiesPanel) {\r\n            while (this.divPropertiesPanel.hasChildNodes()) {\r\n                this.divPropertiesPanel.removeChild(this.divPropertiesPanel.childNodes[0]);\r\n            }\r\n        }\r\n\r\n        // ADD\r\n        if (panelItem.getContent()) {\r\n            this.divPropertiesPanel.appendChild(panelItem.getContent());\r\n        }\r\n    }\r\n}\r\n\r\nexport class GeneratePanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n\r\n        let item: PanelItem = this.createTabElement('General', 'General', null);\r\n\r\n        // Workspace and generate code stuff\r\n        let inputGenerateWorkspace: HTMLInputElement =  <HTMLInputElement> Util.createHTML({tag: 'input', id: 'workspace', type: 'text', placeholder: 'Type your Folder for generated code...', value: 'src/main/java', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Folder:', inputGenerateWorkspace);\r\n\r\n        let inputGeneratePackage: HTMLInputElement = <HTMLInputElement> Util.createHTML({tag: 'input', id: 'package', type: 'text', placeholder: 'Type your workspace for generated code...', value: '', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Package:', inputGeneratePackage);\r\n\r\n        let options = document.createElement('div');\r\n        options.style.textAlign = 'center';\r\n        options.style.margin = '3';\r\n        options.style.padding = '5';\r\n\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(options);\r\n\r\n        options.style.borderStyle = 'groove';\r\n        options.style.borderRadius = '10px';\r\n\r\n        let btnGenerate = document.createElement('button');\r\n        btnGenerate.textContent = 'Generate';\r\n        btnGenerate.title = 'Generate code into your workspace';\r\n        btnGenerate.className = 'OptionElement';\r\n\r\n        let that = this;\r\n        btnGenerate.onclick = () => {\r\n            let workspace = inputGeneratePackage.value;\r\n            if (workspace.length === 0) {\r\n                alert('No workspace set.\\nEnter first your workspace');\r\n                inputGeneratePackage.focus();\r\n                return;\r\n            }\r\n            that.group.getGraph().generate(workspace, inputGenerateWorkspace.value);\r\n        };\r\n        options.appendChild(btnGenerate);\r\n        options.appendChild(document.createElement('hr'));\r\n        options.appendChild(document.createElement('br'));\r\n\r\n        let btnAutoLayout = Util.createHTML({tag: 'button', className: 'OptionElement', value: 'Auto Layout', style: {marginRight: '10px'}, onclick: () => {\r\n                that.group.getGraph().layout();\r\n            }});\r\n\r\n        options.appendChild(btnAutoLayout);\r\n\r\n        // delete all nodes\r\n        let btnDeleteAll = document.createElement('button');\r\n        btnDeleteAll.className = 'OptionElement';\r\n        btnDeleteAll.textContent = 'Delete All';\r\n        btnDeleteAll.title = 'Delete all nodes from diagram';\r\n\r\n        btnDeleteAll.onclick = () => {\r\n            let confirmDelete = confirm('All classes will be deleted!');\r\n            if (!confirmDelete) {\r\n                return;\r\n            }\r\n            that.group.getGraph().$graphModel.removeAllElements();\r\n        };\r\n        btnDeleteAll.style.marginRight = '10px';\r\n        options.appendChild(btnDeleteAll);\r\n\r\n        // export stuff\r\n        let exportTypes: string[] = ['Export', 'HTML', 'JSON', 'PDF', 'PNG', 'SVG'];\r\n        let selectExport = document.createElement('select');\r\n\r\n        exportTypes.forEach(type => {\r\n            if (!(!window['jsPDF'] && type === 'PDF')) {\r\n                let option = document.createElement('option');\r\n                option.value = type;\r\n                option.textContent = type;\r\n                selectExport.appendChild(option);\r\n            }\r\n        });\r\n\r\n        selectExport.onchange = (evt) => {\r\n            let selectedExportType = selectExport.options[selectExport.selectedIndex].value;\r\n            selectExport.selectedIndex = 0;\r\n            that.group.getGraph().saveAs(selectedExportType);\r\n        };\r\n        selectExport.className = 'OptionElement';\r\n        options.appendChild(selectExport);\r\n        options.appendChild(document.createElement('br'));\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Properties';\r\n    }\r\n\r\n}\r\n\r\nexport class ClearPanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Select any element to see its properties';\r\n    }\r\n}\r\n\r\nexport class PanelItem {\r\n    protected panel: Panel;\r\n    protected label: string;\r\n    protected button: HTMLButtonElement;\r\n    protected content: HTMLDivElement = <HTMLDivElement>Util.create({tag: 'div', className: 'tabContent'});\r\n\r\n    constructor(panel: Panel, label?: string) {\r\n        this.panel = panel;\r\n        this.label = label;\r\n    }\r\n\r\n    public active(): void {\r\n        if (this.getButton()) {\r\n            this.getButton().className += ' active';\r\n        }\r\n    }\r\n\r\n    public deactive(): void {\r\n        if (this.getButton()) {\r\n            Util.removeClass(this.getButton(), 'active');\r\n        }\r\n    }\r\n\r\n    public withButton(button: HTMLButtonElement): PanelItem {\r\n        this.button = button;\r\n        return this;\r\n    }\r\n\r\n    public withContent(element: HTMLElement): PanelItem {\r\n        this.content.appendChild(element);\r\n        return this;\r\n    }\r\n\r\n    public withInput(labelText: string, element: HTMLElement): PanelItem {\r\n        let group: HTMLDivElement = <HTMLDivElement> Util.createHTML({tag: 'div'});\r\n        let label = Util.createHTML({tag: 'label', for: element.id, value: labelText});\r\n        group.appendChild(label);\r\n        group.appendChild(element);\r\n\r\n        this.content.appendChild(group);\r\n        return this;\r\n    }\r\n\r\n    public getButton(): HTMLButtonElement {\r\n        return this.button;\r\n    }\r\n\r\n    public getContent(): HTMLDivElement {\r\n        return this.content;\r\n    }\r\n\r\n   public getHeader(): string {\r\n        return this.label;\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\nimport Data from './Data';\r\n\r\nexport class PropertyBinder implements PropertyChangeSupport {\r\n    private propertyClass1: string;\r\n    private propertyClass2: string;\r\n    private data1: Data;\r\n    private data2: Data;\r\n    // works like a lock\r\n    private applyingChange: boolean = false;\r\n\r\n    constructor(data1: Data, data2: Data, propertyClass1: string, propertyClass2: string) {\r\n        this.data1 = data1;\r\n        this.data2 = data2;\r\n        this.propertyClass1 = propertyClass1;\r\n        this.propertyClass2 = propertyClass2;\r\n    }\r\n    static bind(data1: Data, data2: Data, property1: string, property2: string) {\r\n        if (!data1 || !data2 || !property1) {\r\n            console.error('NullValue!!');\r\n            return null;\r\n        }\r\n        const propertyBinder = new PropertyBinder(data1, data2, property1, property2);\r\n        propertyBinder.bind();\r\n        return propertyBinder;\r\n    }\r\n\r\n    propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        if (!this.applyingChange) {\r\n            this.applyingChange = true;\r\n            if (entity === this.data1) {\r\n                // fire to data2\r\n                this.data2.setValue(this.propertyClass2, newValue);\r\n            } else if (entity === this.data2) {\r\n                // fire to data1\r\n                this.data1.setValue(this.propertyClass1, newValue);\r\n            }\r\n            this.applyingChange = false;\r\n        }\r\n    }\r\n\r\n    protected bind() {\r\n        // public addListener(control: Control, property?: string)\r\n        // todo: set value immediately\r\n        this.data1.setValue(this.propertyClass1, this.data2.getValue(this.propertyClass2));\r\n\r\n        this.data1.addListener(this, this.propertyClass1);\r\n        this.data2.addListener(this, this.propertyClass2);\r\n    }\r\n\r\n    protected unbind() {\r\n        // public addListener(control: Control, property?: string)\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n    }\r\n}\r\n","// ################################## RGBColor ####################################################\r\nexport class RGBColor {\r\n    public  ok: boolean;\r\n    public r: number;\r\n    public g: number;\r\n    public b: number;\r\n\r\n    constructor(value: string) {\r\n        this.ok = false;\r\n        if (value === 'none') {\r\n            return;\r\n        }\r\n        let computedColor, div = document.createElement('div');\r\n        div.style.backgroundColor = value;\r\n        document.body.appendChild(div);\r\n        computedColor = window.getComputedStyle(div).backgroundColor;\r\n        // cleanup temporary div.\r\n        document.body.removeChild(div);\r\n        this.convert(computedColor);\r\n    }\r\n    public convert(value: any) {\r\n        let values, regex = /rgb *\\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\\)/;\r\n        values = regex.exec(value);\r\n        this.r = parseInt(values[1], 10);\r\n        this.g = parseInt(values[2], 10);\r\n        this.b = parseInt(values[3], 10);\r\n        this.ok = true;\r\n    }\r\n\r\n    public toRGB(): string {return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; }\r\n    public toHex(): string {\r\n        return '#' + (this.r + 0x10000).toString(16).substring(3).toUpperCase() + (this.g + 0x10000).toString(16).substring(3).toUpperCase() + (this.b + 0x10000).toString(16).substring(3).toUpperCase();\r\n    }\r\n}\r\n","/*\r\n NetworkParser\r\n Copyright (c) 2011 - 2014, Stefan Lindel\r\n All rights reserved.\r\n\r\n Licensed under the EUPL, Version 1.1 or (as soon they\r\n will be approved by the European Commission) subsequent\r\n versions of the EUPL (the \"Licence\");\r\n You may not use this work except in compliance with the Licence.\r\n You may obtain a copy of the Licence at:\r\n\r\n http://ec.europa.eu/idabc/eupl5\r\n\r\n Unless required by applicable law or agreed to in\r\n writing, software distributed under the Licence is\r\n distributed on an \"AS IS\" basis,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\r\n express or implied.\r\n See the Licence for the specific language governing\r\n permissions and limitations under the Licence.\r\n*/\r\nimport {RGBColor} from './RGBColor';\r\nimport {JSEPS} from \"./JSEPS\";\r\n\r\nconst epsSvgAttr = {\r\n    // allowed attributes. all others are removed from the preview.\r\n    g: ['stroke', 'fill', 'stroke-width'],\r\n    line: ['x1', 'y1', 'x2', 'y2', 'stroke', 'stroke-width'],\r\n    rect: ['x', 'y', 'width', 'height', 'stroke', 'fill', 'stroke-width'],\r\n    ellipse: ['cx', 'cy', 'rx', 'ry', 'stroke', 'fill', 'stroke-width'],\r\n    circle: ['cx', 'cy', 'r', 'stroke', 'fill', 'stroke-width'],\r\n    text: ['x', 'y', 'font-size', 'font-family', 'text-anchor', 'font-weight', 'font-style', 'fill'],\r\n    path: ['']\r\n};\r\nexport class SVGConverter {\r\n    private k: number;\r\n    private remove: boolean;\r\n    private target: any;\r\n\r\n    constructor(element: any, target: any, options: any) {\r\n        this.k = 1.0;\r\n        let hasScale = typeof (options.scale), hasRemoveInvalid = typeof (options.removeInvalid);\r\n        this.k = (options && hasScale !== 'undefined' ? options.scale : 1.0);\r\n        this.remove = (options && hasRemoveInvalid !== 'undefined' ? options.removeInvalid : false);\r\n        this.target = target;\r\n        this.parse(element);\r\n    }\r\n\r\n    public parse(element: any) {\r\n        let el, i, n, colorMode, hasFillColor, fillRGB, fillColor, strokeColor, strokeRGB, fontType, pdfFontSize, x, y,\r\n            box, xOffset;\r\n        if (!element) {\r\n            return;\r\n        }\r\n        if (typeof element === 'string') {\r\n            el = document.createElement('div');\r\n            el.innerHTML = element;\r\n            element = el.childNodes[0];\r\n        }\r\n        for (i = 0; i < element.children.length; i += 1) {\r\n            n = element.children[i];\r\n            colorMode = null;\r\n            hasFillColor = false;\r\n            if ('g,line,rect,ellipse,circle,text'.indexOf(n.tagName) >= 0) {\r\n                fillColor = n.getAttribute('fill');\r\n                if (fillColor) {\r\n                    fillRGB = new RGBColor(fillColor);\r\n                    if (fillRGB.ok) {\r\n                        hasFillColor = true;\r\n                        colorMode = 'F';\r\n                    }\r\n                }\r\n            }\r\n            if ('g,line,rect,ellipse,circle'.indexOf(n.tagName) >= 0) {\r\n                if (hasFillColor) {\r\n                    this.target.setFillColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                }\r\n                strokeColor = n.getAttribute('stroke');\r\n                if (n.hasAttribute('stroke-width')) {\r\n                    this.target.setLineWidth(this.attr(n, 'stroke-width'));\r\n                }\r\n                if (strokeColor) {\r\n                    strokeRGB = new RGBColor(strokeColor);\r\n                    if (strokeRGB.ok) {\r\n                        this.target.setDrawColor(strokeRGB.r, strokeRGB.g, strokeRGB.b);\r\n                        if (colorMode === 'F') {\r\n                            colorMode = 'FD';\r\n                        } else if (!hasFillColor) {\r\n                            colorMode = 'S';\r\n                        }\r\n                    } else {\r\n                        colorMode = null;\r\n                    }\r\n                }\r\n            }\r\n            // console.log(\"write \"+n.tagName);\r\n            switch (n.tagName.toLowerCase()) {\r\n                case 'svg':\r\n                case 'a':\r\n                case 'g':\r\n                    this.parse(n);\r\n                    break;\r\n                case 'line':\r\n                    this.target.line(this.attr(n, 'x1'), this.attr(n, 'y1'), this.attr(n, 'x2'), this.attr(n, 'y2'));\r\n                    break;\r\n                case 'rect':\r\n                    this.target.rect(this.attr(n, 'x'), this.attr(n, 'y'), this.attr(n, 'width'), this.attr(n, 'height'), n.getAttribute('style'));\r\n                    break;\r\n                case 'ellipse':\r\n                    this.target.ellipse(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'rx'), this.attr(n, 'ry'), colorMode);\r\n                    break;\r\n                case 'circle':\r\n                    this.target.circle(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'r'), colorMode);\r\n                    break;\r\n                case 'text':\r\n                    if (n.hasAttribute('font-family')) {\r\n                        switch (n.getAttribute('font-family').toLowerCase()) {\r\n                            case 'serif':\r\n                                this.target.setFont('times');\r\n                                break;\r\n                            case 'monospace':\r\n                                this.target.setFont('courier');\r\n                                break;\r\n                            default:\r\n                                n.getAttribute('font-family', 'sans-serif');\r\n                                this.target.setFont('Helvetica');\r\n                        }\r\n                    }\r\n                    if (hasFillColor) {\r\n                        this.target.setTextColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                    }\r\n                    if (this.target instanceof JSEPS) {\r\n                        this.target.text(this.attr(n, 'x'), this.attr(n, 'y'), n.innerHTML);\r\n                        break;\r\n                    }\r\n                    fontType = '';\r\n                    if (n.hasAttribute('font-weight')) {\r\n                        if (n.getAttribute('font-weight') === 'bold') {\r\n                            fontType = 'bold';\r\n                        }\r\n                    }\r\n                    if (n.hasAttribute('font-style')) {\r\n                        if (n.getAttribute('font-style') === 'italic') {\r\n                            fontType += 'italic';\r\n                        }\r\n                    }\r\n                    this.target.setFontType(fontType);\r\n                    pdfFontSize = 16;\r\n                    if (n.hasAttribute('font-size')) {\r\n                        pdfFontSize = parseInt(n.getAttribute('font-size'), 10);\r\n                    }\r\n                    box = n.getBBox();\r\n                    // FIXME: use more accurate positioning!!\r\n                    x = this.attr(n, 'x');\r\n                    y = this.attr(n, 'y');\r\n                    xOffset = 0;\r\n                    if (n.hasAttribute('text-anchor')) {\r\n                        switch (n.getAttribute('text-anchor')) {\r\n                            case 'end':\r\n                                xOffset = box.width;\r\n                                break;\r\n                            case 'middle':\r\n                                xOffset = box.width / 2;\r\n                                break;\r\n                            case 'start':\r\n                                break;\r\n                            case 'default':\r\n                                n.getAttribute('text-anchor', 'start');\r\n                                break;\r\n                        }\r\n                        x = x - (xOffset * this.k);\r\n                    }\r\n                    this.target.setFontSize(pdfFontSize).text(x, y, n.innerHTML);\r\n                    break;\r\n                default:\r\n                    if (this.remove) {\r\n                        console.log('cant translate to target:', n);\r\n                        element.removeChild(n);\r\n                        i -= 1;\r\n                    }\r\n            }\r\n        }\r\n    }\r\n\r\n    public attr(node: any, name: string) {\r\n        return this.k * parseInt(node.getAttribute(name), 10);\r\n    }\r\n}\r\n","import {Control} from './Control';\r\n\r\nexport class ScrumBoard extends Control {\r\n    public static cards = [0, 0.5, 1, 2, 3, 5, 8, 13, 20, 40, 100, '?', 'Coffee'];\r\n    private $selected: HTMLDivElement;\r\n    private $board: HTMLDivElement;\r\n\r\n    constructor() {\r\n        super();\r\n        this.redraw();\r\n    }\r\n\r\n    public redraw(): void {\r\n        if (this.$board) {\r\n            while (this.$board.children.length > 0 ) {\r\n                this.$board.removeChild(this.$board.children[0]);\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('div');\r\n            this.$selected = document.createElement('div');\r\n            this.$board = document.createElement('div');\r\n            this.$view.appendChild(this.$board);\r\n            this.$view.appendChild(this.$selected);\r\n        }\r\n        this.$view.className = 'ScrumBoard';\r\n        for ( let i = 0; i < ScrumBoard.cards.length; i++) {\r\n            let card = document.createElement('div');\r\n            card.className = 'ScrumCard';\r\n            card.innerHTML = <string>ScrumBoard.cards[i];\r\n            card['pokervalue'] = <string>ScrumBoard.cards[i];\r\n            card.onclick = e => {\r\n                this.onClick(<HTMLDivElement>e.target);\r\n            };\r\n            this.$board.appendChild(card);\r\n        }\r\n    }\r\n\r\n    public getSVG() {\r\n        this.redraw();\r\n        return this.$view;\r\n    }\r\n\r\n    public onClick(target: HTMLDivElement): void {\r\n        console.log(target['pokervalue']);\r\n\r\n        while (this.$selected.children.length > 0 ) {\r\n            this.$selected.removeChild(this.$selected.children[0]);\r\n        }\r\n        let card = document.createElement('div');\r\n        card.className = 'ScrumCard';\r\n        card['pokervalue'] = target['pokervalue'];\r\n        card.onclick = e => {\r\n            this.onShow(<HTMLDivElement>e.target);\r\n        };\r\n        this.$selected.appendChild(card);\r\n        this.$board['style']['display'] = 'none';\r\n    }\r\n\r\n    public onShow(target: HTMLDivElement): void {\r\n        target.innerHTML = target['pokervalue'];\r\n    }\r\n}\r\n","import {Graph} from './main';\r\nimport {SymbolLibary} from './elements/nodes/Symbol';\r\nimport {EventBus} from './EventBus';\r\n\r\nexport class Toolbar {\r\n\r\n    private graph: Graph;\r\n    private mainDiv: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public show(): void {\r\n        if (this.mainDiv) {\r\n            return;\r\n        }\r\n\r\n        this.mainDiv = document.createElement('div');\r\n        this.mainDiv.className = 'toolbar';\r\n\r\n        let h1Logo = document.createElement('h1');\r\n        h1Logo.className = 'logo';\r\n        h1Logo.textContent = 'DiagramJS';\r\n\r\n        let node = {type: 'Hamburger', property: 'HTML', width: 24, height: 24, id: 'GenerateProp'};\r\n        let hamburger = SymbolLibary.draw( node);\r\n        EventBus.registerEvent(hamburger, 'click', node);\r\n        this.mainDiv.appendChild(hamburger);\r\n\r\n        this.mainDiv.appendChild(h1Logo);\r\n        document.body.appendChild(this.mainDiv);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 06.03.2017.\r\n */\r\nimport Data from './Data';\r\n\r\n// export default class Data {\r\n//    public values = {};\r\n//    id: string;\r\n//    $listener: Control[] = [];\r\n//    property: string;\r\nexport namespace UML {\r\n    export class Clazz extends Data {\r\n        public static NAME: string = 'name';\r\n        public static ATTRIBUTES: string = 'attributes';\r\n        public static METHODS: string = 'methods';\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Clazz';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n\r\n        public getAttributes() {\r\n            return this.prop[Clazz.ATTRIBUTES];\r\n        }\r\n\r\n        public addToAttributes(newValue: string) {\r\n            this.addTo(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n\r\n        public removeFromAttributes(newValue: string) {\r\n            this.removeFrom(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n    }\r\n\r\n    export class Attribute extends Data {\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Attribute';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n    }\r\n\r\n    export class Methods extends Data {\r\n\r\n    }\r\n}\r\n\r\nwindow['UML'] = UML;\r\n","import {Control} from './Control';\r\n\r\nexport class VirtualKeyBoard extends Control {\r\n    constructor(data: any) {\r\n        super();\r\n        if (!data) {\r\n            data = this.getDefault();\r\n        }\r\n        let board = document.createElement('div');\r\n        this.$viewData = data;\r\n\r\n        for (let type in data) {\r\n            if (type === 'normal') {\r\n                for (let line in data[type]) {\r\n                    let lineBoard = document.createElement('div');\r\n                    lineBoard.className = 'vkLine';\r\n                    for (let key in data[type][line]) {\r\n                        let btn: HTMLButtonElement = document.createElement('button');\r\n                        let keyTag = data[type][line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                        btn.ontouchend = () => {this.action(btn); };\r\n                        btn.onclick = () => {this.action(btn); };\r\n                        lineBoard.appendChild(btn);\r\n                    }\r\n                    board.appendChild(lineBoard);\r\n                }\r\n            }\r\n        }\r\n        this.$view = board;\r\n    }\r\n\r\n    public action(btn: HTMLButtonElement) {\r\n        if (btn['key'] === '{Shift}') {\r\n            if ( btn.className === 'vkbuttonAction') {\r\n                let keys = this.$viewData['normal'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                    }\r\n                }\r\n            } else if ( btn.className === 'vkbutton') {\r\n                let keys = this.$viewData['shift'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbuttonAction');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        alert(btn);\r\n    }\r\n\r\n    public getDefault(): any {\r\n        let format = {\r\n            normal: [\r\n                ['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '?', '´', '{Bksp}'],\r\n                ['{Tab}', 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+'],\r\n                ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '#', '{enter}'],\r\n                ['{Shift}', '<', 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n// '{left}', '{up}', '{down}','{right}', '{Cancel}']\r\n            ],\r\n            shift: [\r\n                ['°', '!', '\"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '`', '{Bksp}'],\r\n                ['{Tab}', 'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', 'O', 'P', 'Ü', '*'],\r\n                ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', '\\'', '{enter}'],\r\n                ['{Shift}', '>', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n            ]\r\n        };\r\n        return format;\r\n    }\r\n\r\n    public getBoard() {\r\n        return this.$view;\r\n    }\r\n\r\n    private setButtonValue(keyTag: string, btn: HTMLButtonElement, shiftClass: string) {\r\n        btn.className = 'vkbutton';\r\n        btn['key'] = keyTag;\r\n        btn['type'] = 'normal';\r\n        if (keyTag.substring(0, 1) === '{') {\r\n            if (keyTag === '{Bksp}') {\r\n                btn.innerHTML = 'Bksp';\r\n            } else if (keyTag === '{Tab}') {\r\n                btn.innerHTML = '&#8677; Tab';\r\n            } else if (keyTag === '{enter}') {\r\n                btn.innerHTML = 'enter';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Shift}') {\r\n                btn.innerHTML = 'Shift';\r\n                btn.className = shiftClass;\r\n            } else if (keyTag === '{Accept}') {\r\n                btn.innerHTML = 'Accept';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Alt}') {\r\n                btn.innerHTML = 'Alt';\r\n            } else if (keyTag === '{Space}') {\r\n                btn.innerHTML = '&nbsp;';\r\n                btn.className = 'vkbuttonSpace';\r\n            } else if (keyTag === '{left}') {\r\n                btn.innerHTML = '&#8592';\r\n            } else if (keyTag === '{right}') {\r\n                btn.innerHTML = '&#8594;';\r\n            } else if (keyTag === '{up}') {\r\n                btn.innerHTML = '&#8593;';\r\n            } else if (keyTag === '{down}') {\r\n                btn.innerHTML = '&#8595;';\r\n            } else if (keyTag === '{Cancel}') {\r\n                btn.innerHTML = 'Cancel';\r\n                btn.className = 'vkbuttonAction';\r\n            }\r\n        } else {\r\n            btn.innerHTML = keyTag;\r\n        }\r\n    }\r\n}\r\n","import {Adapter} from '../Adapter';\r\n\r\nexport class JavaAdapter extends Adapter {\r\n    constructor() {\r\n        super();\r\n        this.id = 'JavaAdapter';\r\n    }\r\n    update(evt: Object): boolean {\r\n        if (this.isActive()) {\r\n            window['JavaBridge'].executeChange(evt);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public isActive(): boolean {\r\n        return window['JavaBridge'];\r\n    }\r\n}\r\n","export * from './JavaAdapter';\r\n","import { Util } from '../util';\r\nimport { Control } from '../Control';\r\n\r\nexport interface Size {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\ninterface GraphElement {\r\n    getSize(): Point;\r\n\r\n    getPos(): Point;\r\n\r\n    getCenter(): Point;\r\n\r\n    getSVG(): Element;\r\n\r\n    getCanvas(): Element;\r\n\r\n    getEvents(): string[];\r\n\r\n    withPos(x: number, y: number): GraphElement;\r\n\r\n    load(data: any): any;\r\n\r\n    getToolBarIcon(): Element;\r\n\r\n    loadProperties(properties: any): void;\r\n}\r\n\r\nexport abstract class DiagramElement extends Control implements GraphElement {\r\n\r\n    protected $isDraggable: boolean = true;\r\n    protected $labelHeight = 25;\r\n    protected $labelFontSize = 14;\r\n    private $pos: Point = new Point();\r\n    private $size: Point = new Point();\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getPos(): Point {\r\n        return this.$pos;\r\n    }\r\n\r\n    public getSize(): Point {\r\n        return this.$size;\r\n    }\r\n\r\n    public getCenter(): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        return new Point(pos.x + size.x / 2, pos.y + size.y / 2);\r\n    }\r\n\r\n    public getCenterPosition(p: string): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let offset = this['$' + p];\r\n        let center = this.getCenter();\r\n        if (p === Point.DOWN) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y + size.y, Point.DOWN);\r\n        }\r\n        if (p === Point.UP) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y, Point.UP);\r\n        }\r\n        if (p === Point.LEFT) {\r\n            return new Point(pos.x, Math.min(center.y + offset, pos.y + size.y), Point.LEFT);\r\n        }\r\n        if (p === Point.RIGHT) {\r\n            return new Point(pos.x + size.x, Math.min(center.y + offset, pos.y + size.y), Point.RIGHT);\r\n        }\r\n        return new Point();\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getCanvas(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return null;\r\n    }\r\n\r\n    public getAlreadyDisplayingSVG(): Element {\r\n        return document.getElementById(this.id) || this.getSVG();\r\n    }\r\n\r\n    public load(data: any) {\r\n        // Do Nothing\r\n    }\r\n\r\n    public withPos(x: number, y: number): GraphElement {\r\n        if (x && y) {\r\n            this.$pos = new Point(x, y);\r\n        } else {\r\n            if (typeof (x) !== 'undefined' && x !== null) {\r\n                this.$pos.x = x;\r\n            }\r\n            if (typeof (y) !== 'undefined' && y !== null) {\r\n                this.$pos.y = y;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public withSize(width: number, height: number): DiagramElement {\r\n        if (width && height) {\r\n            this.$size = new Point(width, height);\r\n        } else {\r\n            if (typeof (width) !== 'undefined' && width !== null) {\r\n                this.$size.x = width;\r\n            }\r\n            if (typeof (height) !== 'undefined' && height !== null) {\r\n                this.$size.y = height;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        // FIXME if (this.status === 'close') {\r\n        // if (!this.$owner.isClosed()) {\r\n        //        return this;\r\n        //    }\r\n        // }\r\n        return super.getShowed();\r\n    }\r\n\r\n    public loadProperties(properties: any) {\r\n        // DO Nothing\r\n    }\r\n\r\n    protected createShape(attrs: any): Element {\r\n        return Util.createShape(attrs);\r\n    }\r\n}\r\n\r\nexport class Point {\r\n    public static UP: string = 'UP';\r\n    public static LEFT: string = 'LEFT';\r\n    public static RIGHT: string = 'RIGHT';\r\n    public static DOWN: string = 'DOWN';\r\n    x: number = 0;\r\n    y: number = 0;\r\n\r\n    //    pos:string = '';\r\n\r\n    constructor(x?: number, y?: number, pos?: string) {\r\n        this.x = Math.ceil(x || 0);\r\n        this.y = Math.ceil(y || 0);\r\n        if (pos) {\r\n            this['pos'] = pos;\r\n        }\r\n    }\r\n\r\n    public add(pos: Point) {\r\n        this.x += pos.x;\r\n        this.y += pos.y;\r\n        return this;\r\n    }\r\n\r\n    public getPosition(): string {\r\n        if (!this['pos']) {\r\n            return '';\r\n        }\r\n        return this['pos'];\r\n    }\r\n\r\n    public addNum(x: number, y: number) {\r\n        this.x += x;\r\n        this.y += y;\r\n        return this;\r\n    }\r\n\r\n    public sum(pos: Point) {\r\n        let sum = new Point(this.x, this.y);\r\n        sum.add(pos);\r\n        return sum;\r\n    }\r\n\r\n    public center(posA: Point, posB: Point) {\r\n        let count = 0;\r\n        if (posA) {\r\n            this.x += posA.x;\r\n            this.y += posA.y;\r\n            count++;\r\n        }\r\n        if (posB) {\r\n            this.x += posB.x;\r\n            this.y += posB.y;\r\n            count++;\r\n        }\r\n        if (count > 0) {\r\n            this.x = (this.x / count);\r\n            this.y = (this.y / count);\r\n        }\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        return this.x < 1 && this.y < 1;\r\n    }\r\n\r\n    public size(posA: Point, posB: Point) {\r\n        let x1 = 0, x2 = 0, y1 = 0, y2 = 0;\r\n        if (posA) {\r\n            x1 = posA.x;\r\n            y1 = posA.y;\r\n        }\r\n        if (posB) {\r\n            x2 = posB.x;\r\n            y2 = posB.y;\r\n        }\r\n        if (x1 > x2) {\r\n            this.x = x1 - x2;\r\n        } else {\r\n            this.x = x2 - x1;\r\n        }\r\n        if (y1 > y2) {\r\n            this.y = y1 - y2;\r\n        } else {\r\n            this.y = y2 - y1;\r\n        }\r\n    }\r\n}\r\n\r\n// \t\t\t\t######################################################### Line #########################################################\r\nexport class Line extends DiagramElement {\r\n    public static FORMAT = { SOLID: 'SOLID', DOTTED: 'DOTTED', PATH: 'PATH' };\r\n    public source: Point;\r\n    public target: Point;\r\n    public color: string;\r\n    public lineType: string;\r\n    private path: string;\r\n    private angle: Number;\r\n\r\n    constructor(lineType: string) {\r\n        super();\r\n        this.lineType = lineType;\r\n    }\r\n\r\n    public getTyp(): string {\r\n        return 'SVG';\r\n    }\r\n\r\n    public getPos() {\r\n        let pos = new Point();\r\n        pos.center(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public getSize() {\r\n        let pos = new Point();\r\n        pos.size(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public withColor(color: string): Line {\r\n        this.color = color;\r\n        return this;\r\n    }\r\n\r\n    public withSize(x: number, y: number): DiagramElement {\r\n        return this;\r\n    }\r\n\r\n    public withPath(path: Array<Point>, close: boolean, angle?: any): Line {\r\n        let i: number, d: string = 'M' + path[0].x + ' ' + path[0].y;\r\n        this.lineType = Line.FORMAT.PATH; // It is a Path not a Line\r\n        for (i = 1; i < path.length; i += 1) {\r\n            d = d + 'L ' + path[i].x + ' ' + path[i].y;\r\n        }\r\n        if (close) {\r\n            d = d + ' Z';\r\n            this.target = path[0];\r\n        } else {\r\n            this.target = path[path.length - 1];\r\n        }\r\n        this.path = d;\r\n        if (angle instanceof Number) {\r\n            this.angle = angle;\r\n        } else if (angle) {\r\n            // var lineangle, start = path[0], end = path[path.length - 1];\r\n            // lineangle = Math.atan2(end.y - start.y, end.x - start.x);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): SVGGElement {\r\n        if (this.lineType === 'PATH') {\r\n            return <SVGGElement>Util.create({\r\n                tag: 'path',\r\n                'd': this.path,\r\n                'fill': this.color,\r\n                stroke: '#000',\r\n                'stroke-width': '1px'\r\n            });\r\n        }\r\n        let line: SVGGElement = <SVGGElement>Util.create({\r\n            tag: 'line',\r\n            'x1': this.source.x,\r\n            'y1': this.source.y,\r\n            'x2': this.target.x,\r\n            'y2': this.target.y,\r\n            'stroke': Util.getColor(this.color)\r\n        });\r\n        if (this.lineType && this.lineType.toLowerCase() === 'dotted') {\r\n            line.setAttribute('stroke-miterlimit', '4');\r\n            line.setAttribute('stroke-dasharray', '1,1');\r\n        }\r\n        return line;\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport Options from '../Options';\r\nimport {JavaAdapter} from '../adapters';\r\n\r\nexport class ClassEditor extends Graph {\r\n    private adapter: JavaAdapter;\r\n    constructor(json: any, options: Options) {\r\n        if (!options ) {\r\n            options = {};\r\n        }\r\n        options.canvas = options.canvas || 'canvas';\r\n        // options.origin = options.origin || new Point(150, 45);\r\n//            layout: \"DagreLayout\",\r\n        options.autoSave = options.autoSave || true;\r\n        if (!options.features) {\r\n            options.features = {\r\n                drag: true,\r\n                editor: true,\r\n                palette: true,\r\n                select: true,\r\n                zoom: true,\r\n                toolbar: true,\r\n                import: true,\r\n                properties: true,\r\n                addnode: true,\r\n                newedge: true\r\n            };\r\n        }\r\n        super(json, options);\r\n    }\r\n\r\n    public setBoardStyle(value: string) {\r\n        console.log(value);\r\n        this.importFile.setBoardStyle(value);\r\n    }\r\n\r\n    public registerListener(): void {\r\n        this.adapter = new JavaAdapter();\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return this.adapter;\r\n    }\r\n}\r\n","import * as edges from './edges';\r\nimport { Association } from './edges';\r\nimport * as nodes from './nodes';\r\nimport * as layouts from '../layouts';\r\nimport Layout from '../layouts/Layout';\r\nimport { GraphModel } from './Model';\r\nimport { Point, Size } from './BaseElements';\r\nimport { Util } from '../util';\r\nimport { Control } from '../Control';\r\nimport Data from '../Data';\r\nimport { EventBus } from '../EventBus';\r\nimport { AddNode, Drag, NewEdge, Select, Zoom } from '../handlers';\r\nimport Options from '../Options';\r\nimport { ImportFile } from '../handlers/ImportFile';\r\nimport { CSS } from '../CSS';\r\nimport { DiagramElement } from './index';\r\nimport { Toolbar } from '../Toolbar';\r\nimport {JSEPS} from '../JSEPS';\r\nimport {SVGConverter} from '../SVGConverter';\r\nimport Palette from '../Palette';\r\nimport {PanelGroup} from '../PropertiesPanel';\r\n\r\nexport class Graph extends Control {\r\n    // canvas: HTMLElement;\r\n    root: SVGElement;\r\n    $graphModel: GraphModel;\r\n    options: Options;\r\n    canvasSize: Size;\r\n    nodeFactory: Object;\r\n    edgeFactory: Object;\r\n    layoutFactory: Object;\r\n    protected importFile: ImportFile;\r\n    private currentlayout: Layout;\r\n    // private layerToolBar: SVGSVGElement;\r\n    // https://stackoverflow.com/questions/15181452/how-to-save-export-inline-svg-styled-with-css-from-browser-to-image-file\r\n    private containerElements = ['svg', 'g'];\r\n    private relevantStyles = {\r\n        'rect': ['fill', 'stroke', 'stroke-width'],\r\n        'path': ['fill', 'stroke', 'stroke-width', 'opacity'],\r\n        'circle': ['fill', 'stroke', 'stroke-width'],\r\n        'line': ['stroke', 'stroke-width'],\r\n        'text': ['fill', 'font-size', 'text-anchor', 'font-family'],\r\n        'polygon': ['stroke', 'fill']\r\n    };\r\n\r\n    constructor(json: any, options: Options) {\r\n        super();\r\n        json = json || {};\r\n        if (json['data']) {\r\n            options = json['options'];\r\n            json = json['data'];\r\n            this.id = json['id'];\r\n        }\r\n        this.options = options || {features: { drag: true}};\r\n        if (json['init']) {\r\n            return;\r\n        }\r\n        if (!this.options.origin) {\r\n            this.options.origin = new Point(150, 45);\r\n        }\r\n        if (!this.options.style) {\r\n            // Style can be classic or modern\r\n            this.options.style = 'classic';\r\n        }\r\n        if (this.options.autoSave) {\r\n            Util.isAutoSave = options.autoSave;\r\n        }\r\n\r\n        this.initFactories();\r\n        this.initCanvas();\r\n        this.initFeatures(this.options.features);\r\n\r\n        // load previous session, if user wants it\r\n        // otherwise load the json data\r\n        if (!this.lookupInLocalStorage()) {\r\n            this.load(json);\r\n        }\r\n\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    public lookupInLocalStorage(): boolean {\r\n        if (!this.options.autoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (!Util.isLocalStorageSupported()) {\r\n            return false;\r\n        }\r\n        let diagram = Util.getDiagramFromLocalStorage();\r\n        if (diagram && diagram.length > 0) {\r\n            if (confirm('Restore previous session?')) {\r\n                let jsonData: JSON = JSON.parse(diagram);\r\n                this.load(jsonData);\r\n                this.layout();\r\n                return true;\r\n            } else {\r\n                Util.saveToLocalStorage( null);\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public fitSizeOnNodes(): void {\r\n        let maxWidth: number = 0;\r\n        let maxHeight: number = 0;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            let nodePos = node.getPos();\r\n            let nodeSize = node.getSize();\r\n            let nodeWidestPosX = nodePos.x + nodeSize.x;\r\n            let nodeWidestPosY = nodePos.y + nodeSize.y;\r\n\r\n            if (nodeWidestPosX > maxWidth) {\r\n                maxWidth = nodeWidestPosX;\r\n            }\r\n\r\n            if (nodeWidestPosY > maxHeight) {\r\n                maxHeight = nodeWidestPosY;\r\n            }\r\n        }\r\n\r\n        this.root.setAttributeNS(null, 'width', '' + (maxWidth + 100));\r\n        this.root.setAttributeNS(null, 'height', '' + (maxHeight + 50));\r\n    }\r\n\r\n    public saveAs(typ: string) {\r\n        typ = typ.toLowerCase();\r\n\r\n        // shrink size of graph to minimum. only to show up nodes\r\n        const currentSize = this.getRootSize();\r\n        this.fitSizeOnNodes();\r\n\r\n        if (typ === 'svg') {\r\n            this.exportSvg();\r\n        } else if (typ === 'png') {\r\n            this.exportPng();\r\n        } else if (typ === 'html') {\r\n            this.exportHtml();\r\n\r\n        } else if (typ === 'pdf') {\r\n            this.exportPdf();\r\n            // } else if (typ === 'eps') {\r\n            // this.ExportEPS();\r\n        }\r\n        else if (typ === 'json') {\r\n            this.exportJson();\r\n        }\r\n\r\n        // set the size back to default\r\n        this.root.setAttributeNS(null, 'width', '' + currentSize.width);\r\n        this.root.setAttributeNS(null, 'height', '' + currentSize.height);\r\n    }\r\n\r\n    /**\r\n     * generates a blob file and makes it available for download.\r\n     * @param type type of file\r\n     * @param data raw data\r\n     * @param name name of download file\r\n     */\r\n    public save(type: string, data: any, name: string, context: string) {\r\n        if (window['java']) {\r\n            window['java'].export(type, data, name, context);\r\n            return;\r\n        }\r\n        let a = document.createElement('a');\r\n        a.href = window.URL.createObjectURL(new Blob([data], { type: context }));\r\n        a.download = name;\r\n        document.body.appendChild(a);\r\n        a.click();\r\n        document.body.removeChild(a);\r\n    }\r\n\r\n    /** Exports the diagram as svg. */\r\n    public exportSvg(): void {\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        this.save('svg', this.serializeXmlNode(wellFormatedSvgDom), 'class_diagram.svg', 'image/svg+xml');\r\n    }\r\n\r\n    /** Exports the diagram as html. */\r\n    public exportHtml(): void {\r\n        let htmlFacade = '<html><head><title>DiagramJS - Classdiagram</title></head><body>$content</body></html>';\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        let svgAsXml = this.serializeXmlNode(wellFormatedSvgDom);\r\n\r\n        let htmlResult = htmlFacade.replace('$content', svgAsXml);\r\n\r\n        this.save('html', htmlResult, 'class_diagram.htm', 'text/plain');\r\n    }\r\n\r\n    /** Exports the diagram as json. */\r\n    public exportJson(): void {\r\n        let type = 'text/plain';\r\n        let jsonObj = Util.toJson(this.$graphModel);\r\n        let data = JSON.stringify(jsonObj, null, '\\t');\r\n\r\n        this.save('json', data, 'class_diagram.json', type);\r\n    }\r\n\r\n    /** Exports the diagram as pdf. */\r\n    public exportPdf(): void {\r\n        if (!window['jsPDF']) {\r\n            console.log('jspdf n.a.');\r\n            return;\r\n        }\r\n        let type = 'image/svg+xml';\r\n        let converter, pdf = new window['jsPDF']('l', 'px', [this.$graphModel.getSize().x, this.$graphModel.getSize().y]);\r\n        converter = new SVGConverter(this.$view, pdf, {removeInvalid: false});\r\n        pdf.save('Download.pdf');\r\n/*        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let canvas, context, a, image = new Image();\r\n        let size = this.getRootSize();\r\n\r\n        // create the loaded img source into a canvas. to generate a picture. then place this picture in the pdf\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            let pdf = new window['jsPDF']();\r\n\r\n            pdf.addImage(canvas.toDataURL('image/jpeg'), 'jpeg', 15, 40, 180, 160);\r\n            pdf.save('class_diagram.pdf');\r\n\r\n        };\r\n\r\n        image.src = url;\r\n        */\r\n    }\r\n\r\n    public import(data: string): void {\r\n        let rootElement = this.$graphModel.$view;\r\n        while (rootElement.hasChildNodes()) {\r\n            rootElement.removeChild(rootElement.firstChild);\r\n        }\r\n\r\n        while (this.$view.hasChildNodes()) {\r\n            this.$view.removeChild(this.$view.firstChild);\r\n        }\r\n\r\n        this.clearModel();\r\n        let jsonData = JSON.parse(data);\r\n        this.load(jsonData);\r\n        this.layout();\r\n    }\r\n\r\n    public exportEPS(): void {\r\n          let converter, doc = new JSEPS({inverting: true});\r\n            converter = new SVGConverter(this.$view, doc, {removeInvalid: false});\r\n            this.save('eps', doc.getData(), 'diagram.eps', doc.getType());\r\n    }\r\n\r\n    /** Exports the diagram as png. */\r\n    public exportPng(): void {\r\n        let canvas, context, a, image = new Image();\r\n        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let typ = 'image/svg+xml';\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let size = this.getRootSize();\r\n\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            a = document.createElement('a');\r\n            a.download = 'class_diagram.png';\r\n            a.href = canvas.toDataURL('image/png');\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            document.body.removeChild(a);\r\n        };\r\n\r\n        image.src = url;\r\n\r\n    }\r\n\r\n    public getSvgWithStyleAttributes(): Node {\r\n        let oDOM = this.$graphModel.$view.cloneNode(true);\r\n        this.readElement(oDOM, this.$graphModel.$view);\r\n\r\n        return oDOM;\r\n    }\r\n\r\n    public serializeXmlNode(xmlNode: any) {\r\n        if (window['XMLSerializer'] !== undefined) {\r\n            return (new window['XMLSerializer']()).serializeToString(xmlNode);\r\n        }\r\n        if (xmlNode.xml !== undefined) {\r\n            return xmlNode.xml;\r\n        }\r\n        return xmlNode.outerHTML;\r\n    }\r\n\r\n    public getRootSize(): Size {\r\n        let width: number;\r\n        let height: number;\r\n        width = +this.root.getAttribute('width');\r\n        height = +this.root.getAttribute('height');\r\n\r\n        return { width: width, height: height };\r\n    }\r\n\r\n        // Graph.prototype.ExportEPS = function () {\r\n        //     var converter, doc = new svgConverter.jsEPS({inverting: true});\r\n        //     converter = new svgConverter(this.board, doc, {removeInvalid: false});\r\n        //     doc.save();\r\n        // };\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        this.$graphModel = new GraphModel();\r\n        this.$graphModel.init(this);\r\n        this.$graphModel.load(json);\r\n    }\r\n\r\n    public clearModel(): void {\r\n        this.$graphModel.removeAllElements();\r\n        this.clearSvgRoot();\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.layout();\r\n        return this;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        return;\r\n    }\r\n\r\n    public getNextFreePosition(): Point {\r\n\r\n        if (!this.$graphModel) {\r\n            return new Point(50, 50);\r\n        }\r\n\r\n        let point = new Point(0, 50);\r\n\r\n        let maxX = 0;\r\n        let minX = 9000;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            maxX = Math.max(maxX, node.getPos().x);\r\n            minX = Math.min(minX, node.getPos().x);\r\n        }\r\n\r\n        if (minX > 170) {\r\n            point.x = 10;\r\n        }\r\n        else {\r\n            point.x = maxX + 200;\r\n        }\r\n\r\n        return point;\r\n    }\r\n\r\n    public addElement(type: string, dontDraw?: boolean): boolean {\r\n        let success = this.$graphModel.addElement(type);\r\n        if (success === true) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return success;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues?: Object, layout?: boolean, dontDraw?: boolean): DiagramElement {\r\n        let element = this.$graphModel.addElementWithValues(type, optionalValues);\r\n        if (element && layout) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public layout(dontDraw?: boolean): Graph {\r\n        this.getLayout().layout(this, this.$graphModel);\r\n\r\n        if (dontDraw) {\r\n            return this;\r\n        }\r\n\r\n        this.draw();\r\n        return this;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTDRAGOVER, EventBus.ELEMENTDRAGLEAVE, EventBus.ELEMENTDROP];\r\n    }\r\n\r\n    public draw() {\r\n        this.clearSvgRoot();\r\n        let model = this.$graphModel;\r\n        let root = this.root;\r\n        let max: Point = new Point();\r\n        if (this.options) {\r\n            max.x = this.options.minWidth || 0;\r\n            max.y = this.options.minHeight || 0;\r\n        }\r\n\r\n        for (let node of model.nodes) {\r\n            let svg = node.getSVG();\r\n            EventBus.register(node, svg);\r\n            root.appendChild(svg);\r\n\r\n            let temp: number;\r\n            temp = node.getPos().x + node.getSize().x;\r\n            if (temp > max.x) {\r\n                max.x = temp;\r\n            }\r\n            temp = node.getPos().y + node.getSize().y;\r\n            if (temp > max.y) {\r\n                max.y = temp;\r\n            }\r\n\r\n        }\r\n        Util.setAttributeSize(this.root, max.x + 60, max.y + 40);\r\n\r\n        for (let edge of model.edges) {\r\n            let svg = edge.getSVG();\r\n            EventBus.register(edge, svg);\r\n            root.appendChild(svg);\r\n        }\r\n    }\r\n\r\n    public getNode(id: string) {\r\n        return this.$graphModel.getNodeById(id);\r\n    }\r\n\r\n    public drawElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let svg = element.getSVG();\r\n        this.root.appendChild(svg);\r\n\r\n        // actualize root width size, if neccessary\r\n        // get current width of root\r\n        let rootSize = this.getRootSize();\r\n        let newWidth = element.getPos().x + element.getSize().x + 40;\r\n        let newHeight = element.getPos().y + element.getSize().y;\r\n\r\n        if (rootSize.width < newWidth) {\r\n            this.root.setAttributeNS(null, 'width', '' + newWidth);\r\n        }\r\n\r\n        if (rootSize.height < newHeight) {\r\n            this.root.setAttributeNS(null, 'height', '' + newHeight);\r\n        }\r\n\r\n        // draw edge\r\n        if (element instanceof Association) {\r\n            let edge = <Association>element;\r\n            edge.redraw(edge.$sNode);\r\n            let srcSvg = element.$sNode.getAlreadyDisplayingSVG();\r\n            let targetSvg = element.$tNode.getAlreadyDisplayingSVG();\r\n\r\n            this.root.appendChild(srcSvg);\r\n            this.root.appendChild(targetSvg);\r\n        }\r\n\r\n        EventBus.register(element, svg);\r\n    }\r\n\r\n    public removeElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let alreadyDisplayingSvg = element.getAlreadyDisplayingSVG();\r\n        if (Util.isParentOfChild(this.root, alreadyDisplayingSvg)) {\r\n            this.root.removeChild(alreadyDisplayingSvg);\r\n        }\r\n    }\r\n\r\n    public generate(packageName: string, path?: string) {\r\n        this.$graphModel.package = packageName;\r\n        this.$graphModel.genPath = path;\r\n\r\n        let data, result = Util.toJson(this.$graphModel);\r\n        data = JSON.stringify(result, null, '\\t');\r\n        if (window['java'] && typeof window['java'].generate === 'function') {\r\n            window['java'].generate(data);\r\n        }\r\n    }\r\n// REFACTORING dd\r\n    private readElement(parent: any, origData: any): void {\r\n        let children = parent.childNodes;\r\n        let origChildDat = origData.childNodes;\r\n\r\n        for (let cd = 0; cd < children.length; cd++) {\r\n            let child = children[cd];\r\n\r\n            let tagName = child.tagName;\r\n            if (this.containerElements.indexOf(tagName) !== -1) {\r\n                this.readElement(child, origChildDat[cd]);\r\n            } else if (tagName in this.relevantStyles) {\r\n                let styleDef = window.getComputedStyle(origChildDat[cd]);\r\n\r\n                let styleString = '';\r\n                for (let st = 0; st < this.relevantStyles[tagName].length; st++) {\r\n                    styleString += this.relevantStyles[tagName][st] + ':' + styleDef.getPropertyValue(this.relevantStyles[tagName][st]) + '; ';\r\n                }\r\n\r\n                child.setAttribute('style', styleString);\r\n            }\r\n        }\r\n    }\r\n\r\n    private createPattern(): Element {\r\n        const defs = Util.createShape({ tag: 'defs' });\r\n        const pattern = Util.createShape({\r\n            tag: 'pattern',\r\n            id: 'raster',\r\n            patternUnits: 'userSpaceOnUse',\r\n            width: 40,\r\n            height: 40\r\n        });\r\n        const path = 'M0 4 L0 0 L4 0 M36 0 L40 0 L40 4 M40 36 L40 40 L36 40 M4 40 L0 40 L0 36';\r\n        const cross = Util.createShape({\r\n            tag: 'path',\r\n            d: path,\r\n            stroke: '#DDD',\r\n            'stroke-width': 1,\r\n            fill: 'none'\r\n        });\r\n\r\n        const rect = Util.createShape({\r\n            tag: 'rect',\r\n            x: 0,\r\n            y: 0,\r\n            width: 40,\r\n            height: 40,\r\n            fill: 'none'\r\n        });\r\n        pattern.appendChild(rect);\r\n        pattern.appendChild(cross);\r\n        defs.appendChild(pattern);\r\n        return defs;\r\n    }\r\n\r\n    private clearSvgRoot() {\r\n        const root = this.root;\r\n        this.$graphModel.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n        while (root.firstChild) {\r\n            root.removeChild(root.firstChild);\r\n        }\r\n\r\n        root.appendChild(this.createPattern());\r\n        let fillValue = 'none';\r\n        if (this.options.raster) {\r\n            fillValue = 'url(#raster)';\r\n        }\r\n        let background = Util.createShape({\r\n            tag: 'rect',\r\n            id: 'background',\r\n            width: 5000,\r\n            height: 5000,\r\n            x: 0,\r\n            y: 0,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: fillValue\r\n        });\r\n        root.appendChild(background);\r\n\r\n        // delete inline Edit, if exists\r\n        let inlineEdit = document.getElementById('inlineEdit');\r\n        if (inlineEdit && document.body.contains(inlineEdit)) {\r\n            document.body.removeChild(inlineEdit);\r\n        }\r\n    }\r\n\r\n    private getLayout(): Layout {\r\n        if (this.currentlayout) {\r\n            return this.currentlayout;\r\n        }\r\n\r\n        let layout = this.options.layout || '';\r\n        if (this.layoutFactory[layout]) {\r\n            this.currentlayout = new this.layoutFactory[layout]();\r\n        } else {\r\n            this.currentlayout = new layouts.DagreLayout();\r\n        }\r\n\r\n        return this.currentlayout;\r\n    }\r\n\r\n    private initFactories() {\r\n\r\n        let noder = nodes;\r\n        this.nodeFactory = {};\r\n        for (let id in noder) {\r\n            if (noder.hasOwnProperty(id) === true) {\r\n                this.nodeFactory[id] = noder[id];\r\n            }\r\n        }\r\n\r\n        let edger = edges;\r\n        this.edgeFactory = {};\r\n        for (let id in edger) {\r\n            if (edger.hasOwnProperty(id) === true) {\r\n                this.edgeFactory[id] = edger[id];\r\n            }\r\n        }\r\n\r\n        let layouter = layouts;\r\n        this.layoutFactory = {};\r\n        for (let id in layouter) {\r\n            if (layouter.hasOwnProperty(id) === true) {\r\n                this.layoutFactory[id] = layouter[id];\r\n            }\r\n        }\r\n    }\r\n\r\n    private initCanvas() {\r\n        if (this.options.canvas) {\r\n            this.$view = document.getElementById(this.options.canvas);\r\n        }\r\n        if (!this.$view) {\r\n            this.$view = document.createElement('div');\r\n            this.$view.setAttribute('class', 'diagram');\r\n            document.body.appendChild(this.$view);\r\n        }\r\n    }\r\n\r\n    private initFeatures(features: any) {\r\n\r\n        if (features) {\r\n            if (features.newedge) {\r\n                EventBus.subscribe(new NewEdge(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            this.importFile = new ImportFile(this);\r\n            if (features.import) {\r\n                EventBus.subscribe(this.importFile, 'dragover', 'dragleave', 'drop');\r\n            }\r\n            if (features.zoom) {\r\n                let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n                EventBus.subscribe(new Zoom(this), mousewheel);\r\n            }\r\n            if (features.drag) {\r\n                EventBus.subscribe(new Drag(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            if (features.select) {\r\n                EventBus.subscribe(new Select(this), 'click', 'drag');\r\n            }\r\n            if (features.palette) {\r\n                new Palette(this).show();\r\n            }\r\n            if (features.toolbar) {\r\n                new Toolbar(this).show();\r\n            }\r\n            if (features.properties) {\r\n                let propertyPanel = new PanelGroup(this);\r\n                // let dispatcher = new PropertiesDispatcher(this);\r\n                EventBus.subscribe(propertyPanel, 'dblclick', 'click', EventBus.RELOADPROPERTIES);\r\n                propertyPanel.show();\r\n            }\r\n            if (features.addnode) {\r\n                EventBus.subscribe(new AddNode(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n        }\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport {DiagramElement, Point} from './BaseElements';\r\nimport {Association} from './edges';\r\nimport {Node} from './nodes';\r\nimport {Control} from '../Control';\r\nimport {Util} from '../util';\r\nimport {EventBus} from '../EventBus';\r\n\r\nexport class GraphModel extends DiagramElement {\r\n    nodes: Node[] = [];\r\n    edges: Association[] = [];\r\n    package: string;\r\n    genPath: string;\r\n    $isLoading: boolean;\r\n\r\n    public load(data?: any) {\r\n\r\n        this.$isLoading = true;\r\n        data = data || {};\r\n        this.property = data.type || data.property || 'classdiagram';\r\n        this.id = 'RootElement';\r\n        if (data.nodes) {\r\n            for (let node of data.nodes) {\r\n                this.addNode(node);\r\n            }\r\n        }\r\n        if (data.edges) {\r\n            for (let edge of data.edges) {\r\n                this.addEdge(edge);\r\n            }\r\n        }\r\n\r\n        this.$isLoading = false;\r\n    }\r\n\r\n    public getNodeByPosition(x: number, y: number): Node {\r\n        for (let node of this.nodes) {\r\n            let posOfNode: Point = (<Node>node).getPos();\r\n            let sizeOfNode: Point = (<Node>node).getSize();\r\n\r\n            if ((posOfNode.x <= x && (posOfNode.x + sizeOfNode.x) >= x)\r\n                && (posOfNode.y <= y && (posOfNode.y + sizeOfNode.y) >= y)) {\r\n                return node;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.initCanvas();\r\n        return this;\r\n    }\r\n\r\n    public addElement(type: string): boolean {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n        if (element) {\r\n            Util.saveToLocalStorage(this);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues: Object): DiagramElement {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n\r\n        // position\r\n        if (optionalValues) {\r\n            if (optionalValues.hasOwnProperty('x') && optionalValues.hasOwnProperty('y')) {\r\n                let x = optionalValues['x'];\r\n                let y = optionalValues['y'];\r\n                element.withPos(x, y);\r\n            }\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return element;\r\n    }\r\n\r\n    public removeAllElements(): void {\r\n\r\n        let nodesLength = this.nodes.length;\r\n        for (let i = 0; i < nodesLength; i++) {\r\n            this.removeElement(this.nodes[0].id);\r\n        }\r\n\r\n        this.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n    }\r\n\r\n    public removeElement(id: string): boolean {\r\n\r\n        let element = this.getDiagramElementById(id);\r\n        if (!element) {\r\n            return false;\r\n        }\r\n\r\n        (<Graph>this.$owner).removeElement(element);\r\n\r\n        if (element instanceof Node) {\r\n\r\n            let idxOfNode = this.nodes.indexOf(element);\r\n            if (idxOfNode > -1) {\r\n                this.nodes.splice(idxOfNode, 1);\r\n            }\r\n\r\n            while (element.$edges.length > 0) {\r\n                this.removeElement(element.$edges[0].id);\r\n            }\r\n\r\n            element.$edges = [];\r\n        }\r\n        else if (element instanceof Association) {\r\n\r\n            let idxOfEdge = this.edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                this.edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from source\r\n            idxOfEdge = element.$sNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$sNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from target\r\n            idxOfEdge = element.$tNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$tNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return true;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        const size = 10;\r\n        const path = `M${-size} 0 L${+size} 0 M0 ${-size} L0 ${+size}`;\r\n\r\n        const attr = {\r\n            tag: 'path',\r\n            id: 'origin',\r\n            d: path,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: 'none'\r\n        };\r\n        let shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: 0 - size,\r\n            y: 0 - size / 1.5,\r\n            'text-anchor': 'end',\r\n            'font-family': 'Verdana',\r\n            'font-size': '9',\r\n            fill: '#999'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = '(0, 0)';\r\n\r\n        let group = this.createShape({tag: 'g'});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEUP, EventBus.ELEMENTMOUSELEAVE, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTMOUSEWHEEL, EventBus.ELEMENTCLICK, EventBus.ELEMENTDRAG];\r\n    }\r\n\r\n    public getNewId(prefix?: string): string {\r\n        let id = (prefix ? prefix.toLowerCase() + '-' : '') + Math.floor(Math.random() * 100000);\r\n        return id;\r\n    }\r\n\r\n    public getEdgeById(id: string): Association {\r\n        for (let edge of this.edges) {\r\n            if (edge.id === id) {\r\n                return edge;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    public getDiagramElementById(id: string): DiagramElement {\r\n\r\n        return this.getNodeById(id) || this.getEdgeById(id);\r\n    }\r\n\r\n    /**\r\n     * Add an edge with data in json file. Optional you can say, that the edge should have\r\n     * the points of source node and target node.\r\n     * @param edge information about edge in json\r\n     * @param withPosOfNodes optional. set points to line of source and target node\r\n     */\r\n    public addEdge(edge: any, withPosOfNodes?: boolean): Association {\r\n\r\n        // lookup in factoryedges and check if the edge type realy exists\r\n        if (edge && edge.type) {\r\n            const graph = (<Graph>this.$owner);\r\n            let typeExists = false;\r\n            for (let edgeType in graph.edgeFactory) {\r\n                if (edgeType === edge.type) {\r\n                    typeExists = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!typeExists) {\r\n                edge.type = 'Association';\r\n            }\r\n        }\r\n\r\n        let type = edge.type || 'Association';\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n\r\n        let newEdge = <Association>this.createElement(type, id, edge);\r\n        newEdge.type = type;\r\n\r\n        let source: Node;\r\n        let sourceAsString: string = edge.source.id || edge.source;\r\n        if (sourceAsString) {\r\n            source = this.getNodeById(sourceAsString);\r\n            if (!source) {\r\n                let nodeID = edge.source;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                source = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                source.init(this);\r\n            }\r\n        }\r\n\r\n        let target: Node;\r\n        let targetAsString: string = edge.target.id || edge.target;\r\n        if (targetAsString) {\r\n            target = this.getNodeById(targetAsString);\r\n            if (!target) {\r\n                let nodeID = edge.target;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                target = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                target.init(this);\r\n            }\r\n        }\r\n\r\n        newEdge.withItem(source, target);\r\n\r\n        if (withPosOfNodes) {\r\n            let srcX = source.getPos().x + (source.getSize().x / 2);\r\n            let srcY = source.getPos().y + (source.getSize().y / 2);\r\n\r\n            let targetX = target.getPos().x + (target.getSize().x / 2);\r\n            let targetY = target.getPos().y + (target.getSize().y / 2);\r\n\r\n            newEdge.addPoint(srcX, srcY);\r\n            newEdge.addPoint(targetX, targetY);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public createElement(type: string, id: string, data: Object): DiagramElement {\r\n        const graph = <Graph>this.$owner;\r\n        let element: DiagramElement;\r\n        if (graph.nodeFactory[type]) {\r\n            element = new graph.nodeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.nodes.push(<Node>element);\r\n        }\r\n        if (graph.edgeFactory[type]) {\r\n            element = new graph.edgeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.edges.push(<Association>element);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public getNodeById(id: string): Node {\r\n        for (let node of this.nodes) {\r\n            if (node.id === id) {\r\n                return node;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    private initCanvas() {\r\n        const graph = <Graph>this.$owner;\r\n        graph.canvasSize = {width: graph.$view.clientWidth, height: graph.$view.clientHeight};\r\n        graph.root = Util.createShape({\r\n            tag: 'svg',\r\n            id: 'root',\r\n            width: graph.canvasSize.width,\r\n            height: graph.canvasSize.height\r\n            // FIXME,viewBox: `${this.$graph.options.origin.x * -1} ${this.$graph.options.origin.y * -1} ${this.$graph.canvasSize.width} ${this.$graph.canvasSize.height}`\r\n        });\r\n        this.$view = graph.root;\r\n        graph.$view.appendChild(graph.root);\r\n\r\n        let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    private addNode(node: Node): Node {\r\n        let type = node['type'] || node.property || 'Node';\r\n        type = Util.toPascalCase(type);\r\n        let id = node['id'] || node['name'] || this.getNewId(type);\r\n\r\n        return <Node>this.createElement(type, id, node);\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction } from './index';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\n\r\nexport abstract class Aggregate extends Association {\r\n\r\n    protected $diamond: Element;\r\n\r\n    public getSVG(): Element {\r\n\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled diamond\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n        };\r\n\r\n        this.$diamond = this.createShape(attr);\r\n\r\n        group.appendChild(this.$diamond);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint: Point = this.$points[0];\r\n        let direction: Direction = Direction.Down;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if (this.$sNode.id === startNode.id || this.$points.length == 2) {\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$diamond.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint: Point, direction: Direction): string {\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                path = `M${startX} ${startY} L${startX + 6} ${startY + 10} L${startX} ${startY + 20} L${startX - 6} ${startY + 10} Z`;\r\n                startPoint.y = startPoint.y+20;\r\n                break;\r\n            case Direction.Right:\r\n                path = `M${startX} ${startY} L${startX - 10} ${startY + 6} L${startX - 20} ${startY} L${startX - 10} ${startY - 6} Z`;\r\n                startPoint.x = startPoint.x-20;\r\n                break;\r\n            case Direction.Left:\r\n                path = `M${startX} ${startY} L${startX + 10} ${startY - 6} L${startX + 20} ${startY} L${startX + 10} ${startY + 6} Z`;\r\n                startPoint.x = startPoint.x+20;\r\n                break;\r\n            case Direction.Down:\r\n                path = `M${startX} ${startY} L${startX - 6} ${startY - 10} L${startX} ${startY - 20} L${startX + 6} ${startY - 10} Z`;\r\n                startPoint.y = startPoint.y-20;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Aggregation extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'white');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { DiagramElement, Line, Point } from '../BaseElements';\r\nimport { Node } from '../nodes';\r\nimport { InfoText } from '../nodes/InfoText';\r\nimport { Util } from '../../util';\r\nimport { EventBus } from '../../EventBus';\r\nimport * as edges from '../edges';\r\nimport { Graph } from '../Graph';\r\n\r\nexport const enum Direction {\r\n    Up, Down, Left, Right\r\n}\r\n\r\nexport class Association extends DiagramElement {\r\n    public source: string;\r\n    public target: string;\r\n    public type: string;\r\n    public $sNode: Node;\r\n    public $tNode: Node;\r\n    public lineStyle: string;\r\n    public $points: Point[] = [];\r\n    public $pathSvg: Element;\r\n    public $pathWideSvg: Element;\r\n    public info: InfoText;\r\n    public sourceInfo: InfoText;\r\n    public targetInfo: InfoText;\r\n    $m: number;\r\n    $n: number;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super();\r\n\r\n        this.withData(data);\r\n    }\r\n\r\n    public withData(data: JSON | string | Object | any): Association {\r\n\r\n        if (!data) {\r\n            return this;\r\n        }\r\n        let srcInfo;\r\n        let trgInfo;\r\n\r\n        if (data.source && typeof data.source !== 'string') {\r\n            srcInfo = data.source;\r\n        }\r\n        else if (data.sourceInfo && typeof data.sourceInfo !== 'string') {\r\n            srcInfo = data.sourceInfo;\r\n        }\r\n\r\n        if (srcInfo) {\r\n            this.sourceInfo = new InfoText(srcInfo);\r\n            this.sourceInfo.$owner = this;\r\n        }\r\n\r\n        if (data.target && typeof data.target !== 'string') {\r\n            trgInfo = data.target;\r\n        }\r\n        else if (data.targetInfo && typeof data.targetInfo !== 'string') {\r\n            trgInfo = data.targetInfo;\r\n        }\r\n\r\n        if (trgInfo) {\r\n            this.targetInfo = new InfoText(trgInfo);\r\n            this.targetInfo.$owner = this;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    public updateSrcCardinality(cardinality: string): void {\r\n        this.sourceInfo = this.updateCardinality(this.$sNode, this.sourceInfo, cardinality);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetCardinality(cardinality: string): void {\r\n        this.targetInfo = this.updateCardinality(this.$tNode, this.targetInfo, cardinality);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateSrcProperty(property: string): void {\r\n        this.sourceInfo = this.updateProperty(this.$sNode, this.sourceInfo, property);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetProperty(property: string): void {\r\n        this.targetInfo = this.updateProperty(this.$tNode, this.targetInfo, property);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public withItem(source: Node, target: Node): Association {\r\n        source.$edges.push(this);\r\n        target.$edges.push(this);\r\n        this.$sNode = source;\r\n        this.$tNode = target;\r\n        this.source = source.id;\r\n        this.target = target.id;\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let group = Util.createShape({ tag: 'g', id: this.id, class: 'SVGEdge' });\r\n\r\n        let path: string = this.getPath();\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'none'\r\n        };\r\n        let pathLine = this.createShape(attr);\r\n\r\n        //attr['style'] = 'stroke-width:20;opacity:0;width:20;height:20';\r\n        let extendedPathLine = Util.createShape(attr);\r\n\r\n        group.appendChild(extendedPathLine);\r\n        group.appendChild(pathLine);\r\n\r\n        if (this.sourceInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.sourceInfo.getSVG());\r\n        }\r\n        if (this.targetInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.targetInfo.getSVG());\r\n        }\r\n\r\n        this.$pathWideSvg = extendedPathLine;\r\n        this.$pathSvg = pathLine;\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.EDITOR, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    public convertEdge(type: string, newId: string, redraw?: boolean): Association {\r\n        if (!edges[type]) {\r\n            return this;\r\n        }\r\n\r\n        let newEdge: Association = new edges[type]();\r\n        newEdge.withItem(this.$sNode, this.$tNode);\r\n        newEdge.id = newId;\r\n        newEdge.type = type;\r\n        newEdge.lineStyle = this.lineStyle;\r\n        newEdge.$owner = this.$owner;\r\n\r\n        if (this.sourceInfo) {\r\n            newEdge.sourceInfo = new InfoText({ property: this.sourceInfo.property, cardinality: this.sourceInfo.cardinality });\r\n            newEdge.sourceInfo.$owner = newEdge;\r\n        }\r\n\r\n        if (this.targetInfo) {\r\n            newEdge.targetInfo = new InfoText({ property: this.targetInfo.property, cardinality: this.targetInfo.cardinality });\r\n            newEdge.targetInfo.$owner = newEdge;\r\n        }\r\n\r\n        this.$points.forEach(point => {\r\n            newEdge.addPoint(point.x, point.y);\r\n        });\r\n\r\n        let graph = <Graph>this.getRoot();\r\n        if (!graph) {\r\n            return this;\r\n        }\r\n\r\n        // update model. insert the edge exact on the same index, like the old edge\r\n        let idx = graph.$graphModel.edges.indexOf(this);\r\n        graph.$graphModel.removeElement(this.id);\r\n        if (idx > -1) {\r\n            graph.$graphModel.edges.splice(idx, 0, newEdge);\r\n        }\r\n        else {\r\n            graph.$graphModel.edges.push(newEdge);\r\n        }\r\n\r\n        if (!redraw) {\r\n            return newEdge;\r\n        }\r\n\r\n        let svgRoot: Element;\r\n        if (graph) {\r\n            svgRoot = graph.root;\r\n        }\r\n        else {\r\n            svgRoot = document.getElementById('root');\r\n        }\r\n        let newEdgeSvg = newEdge.getSVG();\r\n\r\n        // update graph\r\n        graph.removeElement(this);\r\n        svgRoot.appendChild(newEdgeSvg);\r\n\r\n        // redraw the edge from both sides to get the correct display\r\n        // if the type is edge, so the path can be redraw.\r\n        // if not, so the inherited class redraw the path with his own logic\r\n\r\n        let dontDrawPath: boolean = (type !== 'Edge');\r\n        newEdge.redraw(newEdge.$sNode, dontDrawPath);\r\n        newEdge.redraw(newEdge.$tNode, dontDrawPath);\r\n\r\n        EventBus.register(newEdge, newEdgeSvg);\r\n\r\n        this.sourceInfo = undefined;\r\n        this.targetInfo = undefined;\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n        // redraw the first point\r\n        // check which point is the near to startnode\r\n        let endPoint: Point;\r\n        let recalcPoint: Point;\r\n        let endPointIdx: number;\r\n\r\n        if (this.$sNode.id === startNode.id) {\r\n            recalcPoint = this.$points[0];\r\n            endPointIdx = 1;\r\n        } else if (this.$tNode.id === startNode.id) {\r\n            recalcPoint = this.$points[this.$points.length - 1];\r\n            endPointIdx = this.$points.length - 2;\r\n        }\r\n\r\n        endPoint = this.$points[endPointIdx];\r\n\r\n        // calculate and set new position of point to redraw\r\n        this.calcIntersection(startNode, recalcPoint, endPoint);\r\n\r\n        // remove the 2nd point next to startnode, if the node was dragged upper the point\r\n        if (this.$points.length > 2 && this.$tNode.id === startNode.id && endPoint.y > (startNode.getPos().y + (startNode.getSize().y / 2))) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$tNode.id === startNode.id && this.$points.length === 2) {\r\n            this.calcIntersection(this.$sNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (this.$points.length > 2 && this.$sNode.id === startNode.id && (startNode.getPos().y + (startNode.getSize().y / 2) > endPoint.y)) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$sNode.id === startNode.id && this.$points.length === 2) {\r\n\r\n            this.calcIntersection(this.$tNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (!dontDrawPoints) {\r\n            this.redrawPointsAndInfo();\r\n        }\r\n    }\r\n\r\n    public getPath(): string {\r\n\r\n        if (this.$points.length === 0) {\r\n            return '';\r\n        }\r\n\r\n        let path: string = 'M';\r\n        for (let i = 0; i < this.$points.length; i++) {\r\n            let point: Point = this.$points[i];\r\n            if (i > 0) {\r\n                path += 'L';\r\n            }\r\n            path += Math.floor(point.x) + ' ' + Math.floor(point.y) + ' ';\r\n        }\r\n\r\n        return path;\r\n    }\r\n    public calcInfoPosNew(infoTxt: InfoText, node: Node): Point {\r\n\r\n        if (!infoTxt || !node) {\r\n            return null;\r\n        }\r\n\r\n        // 1. step: get direction\r\n        let startPoint: Point;\r\n        let nextToStartPoint: Point;\r\n        if (this.$sNode.id === node.id) {\r\n            startPoint = this.$points[0];\r\n            nextToStartPoint = this.$points[1];\r\n        }\r\n        else if (this.$tNode.id === node.id) {\r\n            startPoint = this.$points[this.$points.length - 1];\r\n            nextToStartPoint = this.$points[this.$points.length - 2];\r\n        }\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(node, startPoint);\r\n\r\n        let x: number;\r\n        let y: number;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                break;\r\n            case Direction.Right:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x - (infoTxt.getSize().x) - 5;\r\n                break;\r\n            case Direction.Left:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x + 5;\r\n                break;\r\n            case Direction.Down:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        // assign calculated position to infotext\r\n        return new Point(x, y);\r\n    }\r\n\r\n    public clearPoints(): any {\r\n        this.$points = [];\r\n        this.$points = [];\r\n    }\r\n\r\n    public addPoint(x: number, y: number): Point[] {\r\n        this.$points.push(new Point(x, y));\r\n\r\n        return this.$points;\r\n    }\r\n\r\n    protected redrawPointsAndInfo(): void {\r\n        // redraw the edge with the new position\r\n        let path: string = this.getPath();\r\n        this.$pathSvg.setAttributeNS(null, 'd', path);\r\n        this.$pathWideSvg.setAttributeNS(null, 'd', path);\r\n\r\n        this.redrawSourceInfo();\r\n        this.redrawTargetInfo();\r\n    }\r\n\r\n    protected redrawSourceInfo() {\r\n        if (this.sourceInfo) {\r\n            let newPosOfSrc = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.redrawFromEdge(newPosOfSrc);\r\n        }\r\n    }\r\n\r\n    protected redrawTargetInfo() {\r\n        if (this.targetInfo) {\r\n            let newPosOfTarget = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.redrawFromEdge(newPosOfTarget);\r\n        }\r\n    }\r\n\r\n    protected getDirectionOfPointToNode(node: Node, pointNearNode: Point): Direction {\r\n        /*\r\n            Example to calculate the direction of nearest point to Node\r\n\r\n            node\r\n         x1_ _ _ _\r\n          |       |\r\n          |       |. pointNearNode\r\n          |       |\r\n          |_ _ _ x2\r\n\r\n          the calculation would return Direction.Left\r\n        */\r\n\r\n        let x1: Point = node.getPos();\r\n        let x2: Point = new Point((x1.x + node.getSize().x), (x1.y + node.getSize().y));\r\n        let direction: Direction = Direction.Down;\r\n\r\n        if (x1.y >= pointNearNode.y) {\r\n            direction = Direction.Down;\r\n        }\r\n        if (x2.y <= pointNearNode.y) {\r\n            direction = Direction.Up;\r\n        }\r\n        if (x1.x >= pointNearNode.x) {\r\n            direction = Direction.Right;\r\n        }\r\n        if (x2.x <= pointNearNode.x) {\r\n            direction = Direction.Left;\r\n        }\r\n\r\n        return direction;\r\n    }\r\n\r\n    private updateCardinality(node: Node, infoText: InfoText, cardinality: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'cardinality': cardinality });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.cardinality = cardinality;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateCardinality(cardinality);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private updateProperty(node: Node, infoText: InfoText, property: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'property': property });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.property = property;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateProperty(property);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private calcIntersection(startNode: Node, recalcPoint: Point, endPoint: Point): Point {\r\n\r\n        // https://www.mathelounge.de/21534/schnittpunkt-einer-linie-mit-den-randern-eines-rechtecks\r\n        let h = startNode.getSize().y;\r\n        let w = startNode.getSize().x;\r\n\r\n        let x1: number = startNode.getPos().x + (w / 2);\r\n        let y1: number = startNode.getPos().y + (h / 2);\r\n\r\n        let x2: number = endPoint.x;\r\n        let y2: number = endPoint.y;\r\n\r\n        let newX: number = recalcPoint.x;\r\n        let newY: number = recalcPoint.y;\r\n\r\n        if (x2 > x1) {\r\n            newX = x1 + (w / 2);\r\n        }\r\n        else if (x2 < x1) {\r\n            newX = x1 - (w / 2);\r\n        }\r\n        else {\r\n            newX = x1;\r\n        }\r\n\r\n        if ((x2 - x1) !== 0) {\r\n            newY = ((y2 - y1) / (x2 - x1) * (newX - x1)) + y1;\r\n        }\r\n        else {\r\n            if (y1 > y2) {\r\n                newY = startNode.getPos().y;\r\n            }\r\n            else {\r\n                newY = startNode.getPos().y + h;\r\n            }\r\n        }\r\n\r\n        // if the statement is not true, so the intersection is at the horizontal line\r\n        if (!((y1 - (h / 2) <= newY) && newY <= y1 + (h / 2))) {\r\n\r\n            if (y2 > y1) {\r\n                newY = y1 + (h / 2);\r\n            }\r\n            else {\r\n                newY = y1 - (h / 2);\r\n            }\r\n\r\n            if ((x2 - x1) !== 0) {\r\n                let tmp = ((y2 - y1) / (x2 - x1));\r\n                newX = (newY + (tmp * x1) - y1) / tmp;\r\n            }\r\n            else {\r\n                newX = x1;\r\n            }\r\n        }\r\n\r\n        recalcPoint.x = Math.ceil(newX);\r\n        recalcPoint.y = Math.ceil(newY);\r\n\r\n        return null;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Composition extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'black');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { Association } from './Association';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\nimport { Direction } from '../index';\r\n\r\nexport class Generalisation extends Association {\r\n\r\n    public $TARGET_ELEMENT_HEIGHT : number = 12;\r\n    protected $targetElement: Element;\r\n\r\n    public getSVG(): Element {\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction : Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled arrow\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'white'\r\n          };\r\n\r\n        this.$targetElement = this.createShape(attr);\r\n\r\n        group.appendChild(this.$targetElement);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean) : void {\r\n\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint : Point = this.$points[0];\r\n        let direction : Direction = Direction.Up;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if(this.$sNode.id === startNode.id || this.$points.length == 2){\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$targetElement.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint : Point, direction : Direction) : string{\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch(direction){\r\n            case Direction.Up:\r\n            path = `M${startX} ${startY+3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y+12;\r\n            break;\r\n            case Direction.Right:\r\n            path = `M${startX-3} ${startY} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x-12;\r\n            break;\r\n            case Direction.Left:\r\n            path = `M${startX+3} ${startY} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x+12;\r\n            break;\r\n            case Direction.Down:\r\n            path = `M${startX} ${startY-3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y-12;\r\n            break;\r\n            default :\r\n            break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n\r\n}\r\n","import { Generalisation } from './Generalisation';\r\n\r\nexport class Implements extends Generalisation {\r\n\r\n    public getSVG(): Element {\r\n        let group = super.getSVG();\r\n\r\n        this.$pathSvg.setAttributeNS(null, 'stroke-dasharray', '3, 3');\r\n\r\n        return group;\r\n    }\r\n}\r\n","export * from './Association';\r\nexport * from './Aggregate';\r\nexport * from './Aggregation';\r\nexport * from './Composition';\r\nexport * from './Generalisation';\r\nexport * from './Implements';","export * from './edges';\r\nexport * from './nodes';\r\nexport * from './BaseElements';\r\nexport * from './Graph';\r\nexport * from './Model';\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Attribute extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 28.06.2017.\r\n */\r\nimport {Control} from \"../../Control\";\r\n\r\nexport class AutoComplete extends Control {\r\n    private $inputField:HTMLInputElement;\r\n    private $dataList:HTMLDataListElement;\r\n    private $selected:HTMLSelectElement;\r\n    private $items:HTMLDivElement;\r\n    private isMultiple:boolean;\r\n\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        let div:HTMLDivElement = document.createElement('div');\r\n        this.$view = div;\r\n        this.$inputField = document.createElement('input');\r\n        this.$dataList = document.createElement(\"datalist\");\r\n        this.$dataList.id = \"data_\"+this.id;\r\n        this.$inputField.setAttribute(\"list\", \"data_\"+this.id);\r\n        if(data[\"value\"]) {\r\n            let values = data[\"value\"];\r\n            this.isMultiple = data[\"multiple\"] != null;\r\n            let option:HTMLOptionElement;\r\n            if(this.isMultiple) {\r\n                this.$selected = document.createElement(\"select\");\r\n                this.$selected.className = \"hide\";\r\n                this.$selected.multiple = true;\r\n\r\n                this.$selected.id = this.id;\r\n                this.$items = document.createElement(\"div\");\r\n                this.$items.className = \"selectedList\";\r\n                div.appendChild(this.$items);\r\n                this.$inputField.className = \"selectedInput\";\r\n                div.appendChild(this.$selected);\r\n                this.$view[\"style\"].setProperty(\"float\", \"left\");\r\n                let that = this;\r\n                this.$inputField.oninput = function(){that.onChange();}\r\n            } else {\r\n                this.$inputField.id = this.id;\r\n            }\r\n            for (let attr in values) {\r\n                if (!values.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                option = document.createElement(\"option\");\r\n                option.value = values[attr];\r\n                this.$dataList.appendChild(option);\r\n                if(this.isMultiple) {\r\n                    option = document.createElement(\"option\");\r\n                    option.value = values[attr];\r\n                    option.innerHTML = values[attr];\r\n                    this.$selected.appendChild(option);\r\n                }\r\n        }\r\n\r\n            div.appendChild(this.$inputField);\r\n            div.appendChild(this.$dataList);\r\n        }\r\n\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n            if(this.isMultiple) {\r\n                div.appendChild(this.$selected);\r\n            }\r\n        }\r\n\r\n        parent.appendChild(this);\r\n    }\r\n\r\n    public onChange() : void {\r\n        let textValue:string = this.$inputField.value;\r\n        if(textValue.length<1) {\r\n            return;\r\n        }\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == textValue) {\r\n                if(item.selected == false) {\r\n                    item.selected = true;\r\n                    item.defaultSelected = true;\r\n                    let test = document.createElement(\"li\");\r\n                    let that = this;\r\n                    test.onclick = function() {that.onDelete(item.value, test);};\r\n                    test.className = \"selectedItem\";\r\n                    test.innerHTML = item.value;\r\n                    this.$items.appendChild(test);\r\n                    this.$inputField.value = \"\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n    public onDelete(value:string, selectedItem:HTMLLIElement) : void {\r\n        this.$items.removeChild(selectedItem);\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == value ) {\r\n                if(item.selected) {\r\n                    item.selected = false;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","import {Control} from '../../Control';\r\n\r\nexport class BR extends Control {\r\n    public load(json: JSON): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('br');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            this.$view.setAttribute(attr, data[attr]);\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\nexport class Button extends Control {\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        this.$view = document.createElement('button');\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\nimport { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\nimport { Size } from '../index';\r\nimport ClazzProperty from './ClazzProperty';\r\nimport {SymbolLibary} from './Symbol';\r\nimport {StereoType} from './StereoType';\r\nimport {GraphListener} from '../../handlers/GraphListener';\r\n\r\nexport class Class extends Node {\r\n    public attributes: Attribute[] = [];\r\n    public methods: Method[] = [];\r\n    public modifier: string;\r\n    public stereoType: string;\r\n\r\n    protected $attrHeight = 25;\r\n    protected $attrFontSize = 12;\r\n    protected $labelView: Element;\r\n\r\n    constructor(json: JSON | string | Object | any) {\r\n        super(json);\r\n        return this;\r\n    }\r\n\r\n    public load(json?: any) {\r\n        if (!json) {\r\n            json = {};\r\n        }\r\n        let y = this.$labelHeight;\r\n        let labelObj = json.name || json.id || ('New ' + this.property);\r\n\r\n        let width: number = 150;\r\n        width = Math.max(width, Util.sizeOf(labelObj).width + 60);\r\n\r\n        if (json['attributes']) {\r\n            for (let attr of json['attributes']) {\r\n\r\n                let attrObj = new Attribute(attr);\r\n                attrObj.$owner = this;\r\n                this.attributes.push(attrObj);\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(attrObj.toString()).width);\r\n                let listener = new GraphListener(attrObj);\r\n                attrObj.$data.addListener(listener);\r\n            }\r\n        }\r\n        if (json['stereotype']) {\r\n            this.stereoType = json['stereotype'];\r\n        }\r\n        if (json['methods']) {\r\n            for (let method of json['methods']) {\r\n\r\n                let methodObj = new Method(method);\r\n                methodObj.$owner = this;\r\n                this.methods.push(methodObj);\r\n\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(methodObj.toString()).width);\r\n            }\r\n            y += this.$attrHeight;\r\n        }\r\n        this.withSize(width, y);\r\n    }\r\n\r\n    public getAttributes(): Attribute[] {\r\n        return this.attributes;\r\n    }\r\n\r\n    public getMethods(): Method[] {\r\n        return this.methods;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        let icon = SymbolLibary.draw({type: 'Class', property: 'HTML', width: '50', height: '50', transform: 'translate(-26,-21)'});\r\n        return icon;\r\n        // let group = this.createShape(\r\n//    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n//    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos: Point = this.getPos();\r\n        const size: Point = this.getSize();\r\n\r\n        let group = this.createShape({ tag: 'g', id: this.id, class: 'SVGClazz', transform: 'translate(0 0)' });\r\n\r\n        if (this.stereoType) {\r\n            let type = new StereoType(this.stereoType, pos.x, pos.y);\r\n            group.appendChild(type.getSVG());\r\n        }\r\n\r\n        // Full Shape\r\n        let options = null;\r\n        let style;\r\n        let clazzName;\r\n        if (this.$owner['options']) {\r\n            let options = this.$owner['options'];\r\n            if (options) {\r\n                style = options.style;\r\n            }\r\n        }\r\n        // = = = Background = = =\r\n        if (style === 'modern') {\r\n            clazzName = 'ClazzHeader';\r\n        }\r\n        clazzName = 'ClazzHeader';\r\n        const nodeShape = this.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            height: size.y,\r\n            width: size.x,\r\n            rx: 5,\r\n            ry: 5,\r\n            fill: 'none',\r\n            stroke: 'black',\r\n            'stroke-width': 1\r\n        });\r\n        if (clazzName) {\r\n            nodeShape.setAttribute('className', clazzName);\r\n            let styleHeader = Util.getStyle('ClazzHeader');\r\n            // headerHeight = styleHeader.getNumber('height');\r\n        }\r\n\r\n        // = = = LABEL = = =\r\n        let label = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y + this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': this.$labelFontSize,\r\n            fill: 'black'\r\n        });\r\n        label.textContent = this.id;\r\n        this.$labelView = label;\r\n\r\n        group.appendChild(nodeShape);\r\n        group.appendChild(label);\r\n\r\n        // = = = ATTRIBUTES = = =\r\n        if (this.attributes.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorLabelAttr = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight,\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight,\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorLabelAttr);\r\n\r\n            let groupOfAttributes = this.createShape({ tag: 'g', id: (this.id + 'Attributes') });\r\n            groupOfAttributes.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzAttribute');\r\n            group.appendChild(groupOfAttributes);\r\n\r\n            let y = pos.y + this.$labelHeight + this.$attrHeight / 2;\r\n            for (let attr of this.attributes) {\r\n\r\n                let attrSvg = attr.getSVG();\r\n                attr.$owner = this;\r\n\r\n                attrSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                attrSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfAttributes.appendChild(attrSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        // = = = METHODS = = =\r\n        let height = this.attributes.length * this.$attrHeight;\r\n        let y = pos.y + this.$labelHeight + height + this.$attrHeight / 2;\r\n        if (this.methods.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorAttrMethods = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorAttrMethods);\r\n\r\n            let groupOfMethods = this.createShape({ tag: 'g', id: (this.id + 'Methods') });\r\n            groupOfMethods.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzMethod');\r\n            group.appendChild(groupOfMethods);\r\n\r\n            y += this.$attrHeight / 2;\r\n            for (let method of this.methods) {\r\n\r\n                let methodSvg = method.getSVG();\r\n                method.$owner = this;\r\n\r\n                methodSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                methodSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfMethods.appendChild(methodSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        this.$view = group;\r\n        return group;\r\n    }\r\n\r\n    public copy(): Class {\r\n        let copy: Class;\r\n        copy = <Class>super.copy();\r\n\r\n        // copy label\r\n        copy.id = this.id + 'Copy';\r\n\r\n        // copy attributes\r\n        this.attributes.forEach(attr => {\r\n            copy.attributes.push(new Attribute(attr.toString()));\r\n        });\r\n        // copy methods\r\n        this.methods.forEach(method => {\r\n            copy.methods.push(new Method(method.toString()));\r\n        });\r\n        copy.reCalcSize();\r\n\r\n        return copy;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTCLICK,\r\n                EventBus.ELEMENTDRAG, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES, EventBus.RELOADPROPERTIES];\r\n    }\r\n\r\n    public addProperty(value: string, type: string): any {\r\n        if (!this[type] || !value || value.length === 0) {\r\n            return;\r\n        }\r\n\r\n        let extractedValue;\r\n        if (type === 'attributes') {\r\n            extractedValue = new Attribute(value);\r\n        }\r\n        else if (type === 'methods') {\r\n            extractedValue = new Method(value);\r\n        }\r\n\r\n        for (let valueOfType of this[type]) {\r\n            if (valueOfType.toString() === extractedValue.toString()) {\r\n                alert(extractedValue.toString() + ' already exists.');\r\n                extractedValue = undefined;\r\n                return;\r\n            }\r\n        }\r\n\r\n        this[type].push(extractedValue);\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        return extractedValue;\r\n    }\r\n\r\n    public addAttribute(value: string): Attribute {\r\n        return this.addProperty(value, 'attributes');\r\n    }\r\n\r\n    public addAttributeObj(attr: Attribute): Attribute[] {\r\n        this.attributes.push(attr);\r\n        return this.getAttributes();\r\n    }\r\n\r\n    public addMethodObj(method: Method): Method[] {\r\n        this.methods.push(method);\r\n        return this.getMethods();\r\n    }\r\n\r\n    public addMethod(value: string): Method {\r\n        return this.addProperty(value, 'methods');\r\n    }\r\n\r\n    public removeAttribute(attr: Attribute): void {\r\n        let idx = this.attributes.indexOf(attr);\r\n        this.attributes.splice(idx, 1);\r\n    }\r\n\r\n    public removeMethod(method: Method): void {\r\n        let idx = this.methods.indexOf(method);\r\n        this.methods.splice(idx, 1);\r\n    }\r\n\r\n    public removeProperty(property: ClazzProperty): void {\r\n\r\n        if (property instanceof Attribute) {\r\n            this.removeAttribute(<Attribute>property);\r\n        }\r\n\r\n        if (property instanceof Method) {\r\n            this.removeMethod(<Method>property);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n        let hasSizeChanged: [boolean, Size] = this.hasSizeChanged();\r\n\r\n        if (drawOnlyIfSizeChanged) {\r\n            if (!hasSizeChanged[0]) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n\r\n        // redraw only this clazz\r\n        this.$owner.$view.removeChild(this.$view);\r\n        let newSvg = this.getSVG();\r\n        this.$owner.$view.appendChild(newSvg);\r\n        this.$view = newSvg;\r\n        EventBus.register(this, newSvg);\r\n\r\n        this.redrawEdges();\r\n    }\r\n\r\n    public hasSizeChanged(): [boolean, Size] {\r\n        let oldSize = { width: this.getSize().x, height: this.getSize().y };\r\n        let newSize = this.reCalcSize();\r\n\r\n        // size doenst changed, so nothing to redraw\r\n        if (oldSize.width === newSize.width && oldSize.height === newSize.height) {\r\n            return [false, newSize];\r\n        }\r\n\r\n        return [true, newSize];\r\n    }\r\n\r\n    public updateLabel(newLabel: string): void {\r\n        if (this.$labelView) {\r\n            this.$labelView.textContent = newLabel;\r\n        }\r\n\r\n        // update label in all edges\r\n        this.$edges.forEach(edge => {\r\n            if (this.id === edge.$sNode.id) {\r\n                edge.source = newLabel;\r\n            }\r\n            else if (this.id === edge.$tNode.id) {\r\n                edge.target = newLabel;\r\n            }\r\n        });\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        this.reDraw(true);\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.modifier = modifier;\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reCalcSize(): Size {\r\n        // label\r\n        let newWidth = 150;\r\n        newWidth = Math.max(newWidth, Util.sizeOf(this.id).width + 30);\r\n\r\n        // attributes\r\n        this.attributes.forEach(attrEl => {\r\n\r\n            let widthOfAttr;\r\n            if (attrEl.$view) {\r\n                widthOfAttr = attrEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfAttr = Util.sizeOf(attrEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfAttr + 15);\r\n        });\r\n\r\n        // methods\r\n        this.methods.forEach(methodEl => {\r\n            let widthOfMethod;\r\n            if (methodEl.$view) {\r\n                widthOfMethod = methodEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfMethod = Util.sizeOf(methodEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfMethod + 15);\r\n        });\r\n\r\n        // TODO: height has to be calculated by font-size\r\n        this.getSize().x = newWidth;\r\n        this.getSize().y = this.$labelHeight + ((this.attributes.length + this.methods.length) * this.$attrHeight)\r\n            + this.$attrHeight;\r\n\r\n        let newSize = { width: newWidth, height: this.getSize().y };\r\n\r\n        return newSize;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    private getModernStyle(): Element {\r\n        let width, height, id, size, z, item, rect, g, board, styleHeader, headerHeight, x, y;\r\n        board = this.getRoot()['board'];\r\n        styleHeader = Util.getStyle('ClazzHeader');\r\n        headerHeight = styleHeader.getNumber('height');\r\n        width = 0;\r\n        height = 10 + headerHeight;\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].getType().toLowerCase() === 'objectdiagram') {\r\n            id = this.id.charAt(0).toLowerCase() + this.id.slice(1);\r\n            item = 'Object';\r\n        } else {\r\n            id = this.id;\r\n            item = 'Class';\r\n            if (this['counter']) {\r\n                id += ' (' + this['counter'] + ')';\r\n            }\r\n        }\r\n        g = Util.create({tag: 'g', model: this});\r\n        size = Util.sizeOf(id, this);\r\n        width = Math.max(width, size.width);\r\n        if (this.attributes && this.attributes.length > 0) {\r\n            height = height + this.attributes.length * 25;\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.attributes[z], this).width);\r\n            }\r\n        } else {\r\n            height += 20;\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            height = height + this.methods.length * 25;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.methods[z], this).width);\r\n            }\r\n        }\r\n        width += 20;\r\n\r\n        let pos = this.getPos();\r\n        y = pos.y;\r\n        x = pos.x;\r\n\r\n        rect = {\r\n            tag: 'rect',\r\n            'width': width,\r\n            'height': height,\r\n            'x': x,\r\n            'y': y,\r\n            'class': item + ' draggable',\r\n            'fill': 'none'\r\n        };\r\n        g.appendChild(Util.create(rect));\r\n        g.appendChild(Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            'x': x,\r\n            'y': y,\r\n            height: headerHeight,\r\n            'width': width,\r\n            'class': 'ClazzHeader'\r\n        }));\r\n\r\n        item = Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'class': 'InfoText',\r\n            'text-anchor': 'right',\r\n            'x': x + width / 2 - size.width / 2,\r\n            'y': y + (headerHeight / 2) + (size.height / 2),\r\n            'width': size.width\r\n        });\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].type.toLowerCase() === 'objectdiagram') {\r\n            item.setAttribute('text-decoration', 'underline');\r\n        }\r\n        item.appendChild(document.createTextNode(id));\r\n\r\n        g.appendChild(item);\r\n        g.appendChild(Util.create({\r\n            tag: 'line',\r\n            x1: x,\r\n            y1: y + headerHeight,\r\n            x2: x + width,\r\n            y2: y + headerHeight,\r\n            stroke: '#000'\r\n        }));\r\n        y += headerHeight + 20;\r\n\r\n        if (this.attributes) {\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': (x + 10),\r\n                    'y': y,\r\n                    value: this.attributes[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n            if (this.attributes.length > 0) {\r\n                y -= 10;\r\n            }\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            g.appendChild(Util.create({tag: 'line', x1: x, y1: y, x2: x + width, y2: y, stroke: '#000'}));\r\n            y += 20;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': x + 10,\r\n                    'y': y,\r\n                    value: this.methods[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n        }\r\n        return g;\r\n    }\r\n}\r\n","import {Util} from '../../util';\r\nimport {DiagramElement} from '../BaseElements';\r\nimport Data from '../../Data';\r\n\r\nexport default class ClazzProperty extends DiagramElement {\r\n\r\n    // Public (+)\r\n    // Private (-)\r\n    // Protected (#)\r\n    // Package (~)\r\n\r\n    public $data = new Data();\r\n//    public modifier: string = '+';\r\n//    public name: string;\r\n//    public type: string;\r\n//    public value: string;\r\n\r\n    constructor(data: any | JSON) {\r\n        super();\r\n        this.$data.setValue('modifier', '+');\r\n        this.$data.setValue('name', null);\r\n        this.$data.setValue('type', null);\r\n        this.$data.setValue('value', null);\r\n        this.extractData(data);\r\n    }\r\n\r\n    public update(data: any | JSON): void {\r\n        this.extractData(data);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.$data.setValue('modifier', modifier);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateType(type: string): void {\r\n        this.$data.setValue('type', type);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateValue(value: string): void {\r\n        this.$data.setValue('value', value);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateName(name: string): void {\r\n        this.$data.setValue('name', name);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public getName(): string {\r\n        return this.$data.getValue('name');\r\n    }\r\n\r\n    public getModifier(): string {\r\n        return this.$data.getValue('modifier');\r\n    }\r\n\r\n    public getType(): string {\r\n        return this.$data.getValue('type');\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let attrText = {\r\n            tag: 'text',\r\n            'text-anchor': 'start',\r\n            'alignment-baseline': 'middle',\r\n        };\r\n\r\n        let attrSvg = Util.createShape(attrText);\r\n        attrSvg.textContent = this.toString();\r\n\r\n        this.$view = attrSvg;\r\n\r\n        return attrSvg;\r\n    }\r\n\r\n    public toString(): string {\r\n        let value = this.$data.getValue('value');\r\n        let result = this.$data.getValue('modifier') + ' ';\r\n        result += this.$data.getValue('name') + ' : ';\r\n        result += this.$data.getValue('type');\r\n        if (value && value.length > 0) {\r\n            result += ' = ' + this.$data.getValue('value');\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.$data.setValue('type', data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.$data.setValue('name', data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.$data.setValue('modifier', data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n\r\n            // e.g. name : string or name:string\r\n            let dataSplitted = data.split(':');\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                let name;\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.$data.setValue('modifier', firstChar);\r\n                    name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                }\r\n                else {\r\n                    name = modifierAndNameSplitted;\r\n                }\r\n                // delete whitespaces in name\r\n                name = name.replace(/ /g, '_');\r\n\r\n                this.$data.setValue('name', name);\r\n                let type = dataSplitted[1].trim() || 'String';\r\n\r\n                // if the type was entered with a small begin letter\r\n                if (type.toLowerCase() === 'string') {\r\n                    type = 'String';\r\n                }\r\n                // delete whitespaces in type\r\n                type = type.replace(/ /g, '_');\r\n                this.$data.setValue('type',  type);\r\n            } else {\r\n                dataSplitted = data.split('=');\r\n                if (dataSplitted && dataSplitted.length === 2) {\r\n                    // modifer (and or) name\r\n                    let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                    // first char is +, - or #\r\n                    let firstChar = modifierAndNameSplitted[0];\r\n                    let name;\r\n                    if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                        this.$data.setValue('modifier', firstChar);\r\n                        name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                    }\r\n                    else {\r\n                        name = modifierAndNameSplitted;\r\n                    }\r\n                    // delete whitespaces in name\r\n                    name = name.replace(/ /g, '_');\r\n\r\n                    this.$data.setValue('name', name);\r\n                    let value = dataSplitted[1].trim() || '\"\"';\r\n                    this.$data.setValue('value', value);\r\n                    this.$data.setValue('type', typeof value);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected updateTextOfView() {\r\n        if (this.$view) {\r\n            this.$view.textContent = this.toString();\r\n        }\r\n        if (this.$owner) {\r\n            Util.saveToLocalStorage(this.$owner.$owner);\r\n        }\r\n    }\r\n}\r\n","import {Node} from \"./Node\";\r\n/**\r\n * Created by Stefan on 29.03.2017.\r\n */\r\n\r\nexport class Dice extends Node {\r\n    private value: number;\r\n    private max: number = 6;\r\n    private $animation: SVGElement;\r\n    private $zoom: number = 0.6;\r\n    private $border: number = 0.2;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super(data);\r\n        this.withSize(100, 100);\r\n    }\r\n\r\n    public setNumber(number: number) {\r\n        this.value = number;\r\n        this.refresh();\r\n    }\r\n\r\n    public refresh() {\r\n        if (this.$view) {\r\n            this.reset();\r\n            let group = this.createPointValue();\r\n            if (group) {\r\n                this.$view.appendChild(group);\r\n            }\r\n        }\r\n    }\r\n\r\n    public reset() {\r\n        if (this.$view) {\r\n            while (this.$view.children.length > 1) {\r\n                if(this.$view.children.item(this.$view.children.length - 1).tagName!== \"animateTransform\") {\r\n                    console.log(this.$view.children.item(this.$view.children.length - 1));\r\n                    this.$view.removeChild(this.$view.children.item(this.$view.children.length - 1));\r\n                }else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let dice: SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x + size.x * this.$border,\r\n            y: pos.y + size.y * this.$border,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y * this.$zoom,\r\n            width: size.x * this.$zoom,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        dice.appendChild(this.createShape(attr));\r\n\r\n        let group = this.createPointValue();\r\n        if (group) {\r\n            dice.appendChild(group);\r\n        }\r\n\r\n        this.$view = dice;\r\n        return dice;\r\n    }\r\n\r\n    public animationTimeout(newValues: number[]) {\r\n        if(newValues.length>0) {\r\n            let newValue = newValues.shift();\r\n            this.setNumber(newValue);\r\n            let that=this;\r\n            setTimeout(function() {that.animationTimeout(newValues)}, 100);\r\n        }\r\n    }\r\n\r\n    public roll() {\r\n        this.startAnimation();\r\n        let values:number[]=[];\r\n        let i:number;\r\n        for(i=1;i<this.max;i++) {\r\n            values.push(i);\r\n        }\r\n        for(i=this.max;i>0;i--) {\r\n            values.push(i);\r\n        }\r\n        let that=this;\r\n        values.push( Math.floor(Math.random() * this.max)+1 );\r\n        setTimeout(function() {that.animationTimeout(values)}, 100);\r\n    }\r\n    public startAnimation() {\r\n        if(this.$animation) {\r\n            return;\r\n        }\r\n        let center = this.getPos().x+this.getSize().x /2;\r\n        const attr = {\r\n            tag: 'animateTransform',\r\n            attributeType: \"xml\",\r\n            attributeName:\"transform\",\r\n            type:\"rotate\",\r\n            dur: \"1s\",\r\n            repeatCount:\"1\",\r\n            from:\"0 \"+center+\" \"+center,\r\n            to:\"360 \"+center+\" \"+center\r\n        };\r\n        this.$animation = <SVGElement>this.createShape(attr);\r\n        this.$view.appendChild(this.$animation);\r\n    }\r\n\r\n    public stopAnimation() {\r\n        if(this.$animation) {\r\n            this.$view.removeChild(this.$animation);\r\n            this.$animation = null;\r\n        }\r\n    }\r\n\r\n    public createPointValue() :SVGElement {\r\n        if (this.value == 1) {\r\n           return this.getCircle(2, 2);\r\n        } else if (this.value == 2) {\r\n            return this.getCircle(1, 1, 3, 3);\r\n        } else if (this.value == 3) {\r\n            return this.getCircle(1, 1, 2, 2, 3, 3);\r\n        } else if (this.value == 4) {\r\n            return this.getCircle(1, 1, 1, 3, 3, 1, 3, 3);\r\n        } else if (this.value == 5) {\r\n            return this.getCircle(1, 1, 1, 3, 2, 2, 3, 1, 3, 3);\r\n        } else if (this.value == 6) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 7) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 2, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 8) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 9) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private getCircle(...values:number[]) : SVGElement {\r\n        if (values.length % 2 > 0) {\r\n            return null;\r\n        }\r\n        let size = this.getSize();\r\n        let pos = this.getPos();\r\n        //FIXME let group:SVGElement = <SVGElement>this.createShape({tag: 'g', transform: 'translate(0 0)', height: size.y, width: size.x});\r\n        let group:SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n\r\n\r\n        for (let i: number = 0; i < values.length; i += 2) {\r\n            group.appendChild(this.createCircle(values[i], values[i + 1]));\r\n        }\r\n        return group;\r\n    }\r\n    private createCircle(x:number, y:number) : SVGElement {\r\n        let size = this.getSize();\r\n        let radius = size.x / 10*this.$zoom;\r\n        let border = size.y*this.$border;\r\n        let zoom = size.y*this.$zoom;\r\n        const attr = {\r\n            tag: 'circle',\r\n            r : radius,\r\n            cx: (size.x*this.$zoom * x) / 4 + border,\r\n            cy: (size.y*this.$zoom * y) / 4 + border,\r\n            stroke:\"black\",\r\n            \"stroke-width\":\"3\",\r\n            fill:\"red\",\r\n            style: 'fill:black;stroke:black;stroke-width:2'\r\n        };\r\n        return <SVGElement>this.createShape(attr);\r\n    }\r\n}","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\n\r\nexport class Div extends Control {\r\n    private className: string;\r\n\r\n    public load(data:JSON|any): any {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = <string>data;\r\n        } else {\r\n            id = data.id;\r\n            this.className = data.class;\r\n            this.property = data.property;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let div: HTMLElement = document.getElementById(id);\r\n\r\n        if (!this.property) {\r\n            // if(inputField){\r\n            // TODO disuss how to decide, which property we should listen on...\r\n            // this.property = id;\r\n            this.property = div.getAttribute('Property');\r\n            // }\r\n        }\r\n\r\n        if (div instanceof HTMLDivElement) {\r\n            this.$view = div;\r\n        } else {\r\n            if (!div) {\r\n                this.$view = document.createElement('div');\r\n                this.$view.setAttribute('id', this.id);\r\n                this.$view.setAttribute('property', this.property);\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists+\r\n        if (data.hasOwnProperty('property')) {\r\n            this.setProperty(data['property']);\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        this.$model = entity;\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.className || entity.hasProperty(this.className)) {\r\n                if (entity.id === this.property.split('.')[0]) {\r\n                    entity.addListener(this, this.className);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        this.$view.innerHTML = <string>newValue;\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Form extends Control {\r\n    // private applyingChange: boolean = false;\r\n    private children: Object = {};\r\n    // private property: string = \"\";\r\n\r\n    /**\r\n     * Data should look like the following json:\r\n     *\r\n     * <pre>{\r\n     *      id: \"t1\",\r\n     *      control: \"form\",\r\n     *      elements: [\r\n     *          {id: \"inputField1\", property: \"talk\"},\r\n     *          {id: \"inputField2\", property: \"room\"}\r\n     *      ]\r\n     * }</pre>\r\n     * @param data\r\n     */\r\n    public load(data: any) {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let form: HTMLElement = document.getElementById(id);\r\n\r\n        if (form instanceof HTMLFormElement) {\r\n            this.$view = form;\r\n            if (this.$view.hasAttribute('property')) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            if (!form) {\r\n                this.$view = document.createElement('form');\r\n                this.$view.setAttribute('id', this.id);\r\n\r\n                if (data.hasOwnProperty('property')) {\r\n                    this.property = data['property'];\r\n                }\r\n\r\n                // add all the attributes to the form element\r\n                for (let attr in data) {\r\n                    if (data.hasOwnProperty(attr) === false) {\r\n                        continue;\r\n                    }\r\n                    if (attr === 'elements') {\r\n                        continue;\r\n                    }\r\n                    this.$view.setAttribute(attr, data[attr]);\r\n                }\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists\r\n        let objId = this.property;\r\n        let hasItem = this.$owner.hasItem(objId);\r\n        if (hasItem) {\r\n            let item = this.$owner.getItem(objId);\r\n            item.addListener(this);\r\n            this.$model = item;\r\n        }\r\n\r\n        // now create all the sub input controls\r\n        for (let field of data.elements) {\r\n            // this.createField(field);\r\n            if (field.hasOwnProperty('property')) {\r\n                let property = field['property'];\r\n                property = this.property + '.' + property;\r\n                field['property'] = property;\r\n            }\r\n            if (!field.hasOwnProperty('class')) {\r\n                field['class'] = 'input';\r\n            }\r\n\r\n            // let the Bridge load the subControl\r\n            let control: Control = this.$owner.load(field, this);\r\n\r\n            // add subControl to children\r\n            this.children[control.getId()] = control;\r\n        }\r\n\r\n    }\r\n\r\n    public setProperty(id: string): void {\r\n        this.property = id;\r\n        let keys: string[] = Object.keys(this.children);\r\n        for (let k = 0; k < keys.length; k++) {\r\n            let key = keys[k];\r\n            let childControl = this.children[key];\r\n            // only set Property, if there is a Property defined before\r\n            if (childControl.property) {\r\n                childControl.setProperty(this.property + '.' + childControl.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object,  oldValue?: Object): boolean {\r\n        if (this.$owner != null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    /**\r\n     * Here we create the form elements and put all the attributes to them in order for the Control only having to load\r\n     * the data were appending here. Alternative would be loading with the bridge and afterwards setting\r\n     * the owner to the form instead of the body..\r\n     * @param field\r\n     */\r\n    /*private createField(field: Object) {\r\n     let control = 'input';\r\n     if (field.hasOwnProperty('class')) {\r\n     control = field['class'];\r\n     }\r\n     let input = document.createElement(control);\r\n     input.setAttribute('class', control);\r\n     let id: string;\r\n     if (!field.hasOwnProperty('id')) {\r\n     // TODO: not the best solution for generating unique id's for forms...\r\n     id = this.$owner.getId();\r\n     field['id'] = id;\r\n     }\r\n     if (field.hasOwnProperty('property')) {\r\n     let property = field['property'];\r\n     property = this.id + '.' + property;\r\n     input.setAttribute('property', property);\r\n     }\r\n     for (let attr in field) {\r\n     if (attr === 'property' || attr === 'class' || !field.hasOwnProperty(attr)) {\r\n     continue;\r\n     }\r\n     input.setAttribute(attr, field[attr]);\r\n     }\r\n\r\n     this.$viewElement.appendChild(input);\r\n\r\n     let newcontrol: Control = this.$owner.load(field['id']);\r\n     this.children[newcontrol.getId()] = newcontrol;\r\n     }*/\r\n}\r\n","/**\r\n * Created by Stefan on 01.03.2017.\r\n */\r\nimport {Control} from '../../Control';\r\n\r\nexport class HTML extends Control {\r\n    constructor(data: JSON|Object|any) {\r\n        super();\r\n\r\n        let id: string;\r\n        let tag: string;\r\n\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            data = {};\r\n        } else if (data) {\r\n            id = data.id;\r\n        }\r\n        if (id) {\r\n            this.id = id;\r\n            this.$view = document.getElementById(id);\r\n        }\r\n        if (!this.$view) {\r\n            if (data) {\r\n                tag = data['tag'] || 'div';\r\n            } else {\r\n                tag = 'div';\r\n            }\r\n            this.$view = document.createElement(tag);\r\n            let parent = document.getElementsByTagName('body')[0];\r\n            parent.appendChild(this.$view);\r\n        }\r\n        if (!parent) {\r\n            return;\r\n        }\r\n        this.writeAttribute(data, this.$view);\r\n    }\r\n\r\n    private writeAttribute(properties: Object, entity?: any) {\r\n        let lowKey;\r\n        if (!entity) {\r\n            lowKey = properties['tag'] || 'div';\r\n            entity = document.createElement(lowKey);\r\n        }\r\n        for (let key in properties) {\r\n            if (!properties.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            lowKey = key.toLowerCase();\r\n            if (properties[key] === null) {\r\n                entity.setAttribute(key, '');\r\n                continue;\r\n            }\r\n\r\n            if (lowKey === 'tag' || lowKey.charAt(0) === '$' || lowKey === '$graphModel' || lowKey === 'class') {\r\n                continue;\r\n            }\r\n            if (lowKey === 'children') {\r\n                if (Array.isArray(properties[key])) {\r\n                    for (let item in properties[key]) {\r\n                        if (properties[key].hasOwnProperty(item) === false) {\r\n                            continue;\r\n                        }\r\n                        let child = this.writeAttribute(item);\r\n                        if (child) {\r\n                            entity.appendChild(child);\r\n                        }\r\n                    }\r\n                } else {\r\n                    let child = this.writeAttribute(properties[key]);\r\n                    if (child) {\r\n                        entity.appendChild(child);\r\n                    }\r\n                }\r\n                continue;\r\n            }\r\n            entity[key] = properties[key];\r\n        }\r\n        return entity;\r\n    }\r\n}\r\n","import { Point } from '../BaseElements';\r\nimport { Util } from '../../util';\r\nimport { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\n\r\nexport class InfoText extends Node {\r\n\r\n    public cardinality: string = '';\r\n    private $heightOfOneTextItem: number;\r\n    private $cardinalitySvg: Element;\r\n    private $propertySvg: Element;\r\n    private $rectBackground: Element;\r\n\r\n    constructor(info: any) {\r\n        super(info);\r\n        if (typeof (info) === 'string') {\r\n            this.id = info;\r\n        } else {\r\n            if (info.property) {\r\n                this.property = info.property;\r\n            }\r\n            if (info.cardinality) {\r\n                this.cardinality = info.cardinality;\r\n            }\r\n        }\r\n        this.$isDraggable = true;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n    }\r\n\r\n    public updateCardinality(cardinality: string): void {\r\n        this.cardinality = cardinality;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (this.$rectBackground) {\r\n            this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n            this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n        }\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((cardinality.length === 0 && this.property.length > 0) || !this.$cardinalitySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$cardinalitySvg) {\r\n            this.$cardinalitySvg.textContent = cardinality;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.property.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    public updateProperty(property: string): void {\r\n        this.property = property;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((property.length === 0 && this.cardinality.length > 0) || !this.$propertySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$propertySvg) {\r\n            this.$propertySvg.textContent = property;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.cardinality.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos: Point = this.getPos();\r\n        let group = Util.create({ tag: 'g', class: 'SVGEdgeInfo', transform: 'translate(0, 0)' });\r\n\r\n        // append rect as background for text items\r\n        this.$rectBackground = Util.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y - this.$heightOfOneTextItem + 3,\r\n            width: this.getSize().x,\r\n            height: this.getSize().y,\r\n            fill: '#DDD',\r\n            'stroke-width': 0,\r\n            rx: '5',\r\n            ry: '5'\r\n        });\r\n        group.appendChild(this.$rectBackground);\r\n\r\n        let y = pos.y;\r\n        if (this.property) {\r\n            // property\r\n            this.$propertySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$propertySvg.textContent = this.property;\r\n            group.appendChild(this.$propertySvg);\r\n\r\n            y += this.$heightOfOneTextItem;\r\n        }\r\n\r\n        // cardinality\r\n        if (this.cardinality) {\r\n            this.$cardinalitySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$cardinalitySvg.textContent = this.cardinality;\r\n            group.appendChild(this.$cardinalitySvg);\r\n        }\r\n\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        let cardinalityAvailable = this.cardinality && this.cardinality.length > 0;\r\n        let propertyAvailable = this.property && this.property.length > 0;\r\n\r\n        return !propertyAvailable && !cardinalityAvailable;\r\n    }\r\n\r\n    public redrawFromEdge(newPos: Point): void {\r\n\r\n        if (!newPos) {\r\n            return;\r\n        }\r\n\r\n        let oldPos = this.getPos();\r\n\r\n        // get difference between new and the old position\r\n        let diffPos = new Point();\r\n        diffPos.x = newPos.x - oldPos.x;\r\n        diffPos.y = newPos.y - oldPos.y;\r\n\r\n        // get translate information\r\n        let translation = this.$view.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        let sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        // set new traslation values\r\n        let newTransX = (sx + diffPos.x);\r\n        let newTransY = (sy + diffPos.y);\r\n        this.$view.setAttributeNS(null, 'transform', 'translate(' + newTransX + ' ' + newTransY + ')');\r\n\r\n        // set new position of svg\r\n        this.getPos().x = newPos.x;\r\n        this.getPos().y = newPos.y;\r\n    }\r\n\r\n    public getText(): string {\r\n        let infoTxt: string = '';\r\n\r\n        if (this.property) {\r\n            infoTxt = this.property;\r\n        }\r\n        if (this.cardinality) {\r\n            if (infoTxt.length > 0) {\r\n                infoTxt += '\\n';\r\n            }\r\n            infoTxt += this.cardinality;\r\n        }\r\n\r\n        return infoTxt;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    private calcSize(): Point {\r\n        let text: string = this.getText();\r\n        let items: Array<string> = text.split('\\n');\r\n\r\n        let maxSize = new Point(0, 0);\r\n        if (text.length === 0) {\r\n            return maxSize;\r\n        }\r\n\r\n        for (let i = 0; i < items.length; i += 1) {\r\n            // calculate size\r\n            let sizeOfText: ClientRect = Util.sizeOf(items[i]);\r\n            maxSize.x = Math.max(maxSize.x, sizeOfText.width);\r\n            maxSize.y += sizeOfText.height;\r\n\r\n            this.$heightOfOneTextItem = sizeOfText.height;\r\n        }\r\n\r\n        return maxSize;\r\n    }\r\n    private resetAllSvgElements() {\r\n        this.$cardinalitySvg = undefined;\r\n        this.$view = undefined;\r\n        this.$propertySvg = undefined;\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\nimport {PropertyBinder} from '../../PropertyBinder';\r\n\r\nexport class Input extends Control {\r\n    private type: string;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data = super.initViewDataProperties(oldData);\r\n        if ('checkbox' === this.type || 'radio' === this.type) {\r\n            data.addFrom('checked', oldData);\r\n        }\r\n        data.addFrom('value', oldData);\r\n        data.addFrom('type', oldData);\r\n        return data;\r\n    }\r\n\r\n    public load(data: any) {\r\n        let id: string;\r\n        let inputField: HTMLElement;\r\n        let useData: boolean;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            useData = true;\r\n        } else {\r\n            id = data.id;\r\n            if (data.type) {\r\n                this.setType(data['type']);\r\n            } else {\r\n                this.setType('text');\r\n            }\r\n            if (data.hasOwnProperty('property')) {\r\n                this.setProperty(data['property']);\r\n            }\r\n            useData = false;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n\r\n        inputField = document.getElementById(id);\r\n\r\n        if (useData) {\r\n            if (inputField) {\r\n                // TODO disuss how to decide, which property we should listen on...\r\n                // this.property = id;\r\n                if (inputField.hasAttribute('Property')) {\r\n                    this.setProperty(inputField.getAttribute('Property'));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (inputField instanceof HTMLInputElement) {\r\n            this.setView(inputField);\r\n            this.type = inputField.type;\r\n            // useData = false;\r\n        } else {\r\n            if (!inputField) {\r\n                this.setView(document.createElement('input'));\r\n                this.$viewData = this.initViewDataProperties(this.$viewData);\r\n                // append viewListener\r\n                // this.$view.addEventListener('change', this.$viewListener);\r\n                if (typeof(data) !== 'string') {\r\n                    for (let attr in data) {\r\n                        if (data.hasOwnProperty(attr) === false) {\r\n                            continue;\r\n                        }\r\n                        // this.$view[attr] = data[attr];\r\n                        this.$viewData.setValue(attr, data[attr]);\r\n                    }\r\n                } else {\r\n                    if (this.type) {\r\n                        this.$view.setAttribute('type', this.type);\r\n                    }\r\n                    if (data.hasOwnProperty('class')) {\r\n                        this.$view.setAttribute('class', data['class']);\r\n                    }\r\n                    this.$view.setAttribute('id', this.id);\r\n                    this.$view.setAttribute('property', this.property);\r\n                }\r\n\r\n                if (data.value) {\r\n                    // if theres a value at the control, we want to change the model to the new value\r\n                    if (this.$model) {\r\n                        this.$model.setValue(this.lastProperty, data.value);\r\n                    }\r\n                }\r\n                if (this.$model) {\r\n                    PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                }\r\n\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (this.property && entity) {\r\n            if (entity.id === this.property.split('.')[0]) {\r\n                this.$model = entity;\r\n                PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                // entity.addListener(this, this.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n    // TODO FIXME protected updateElement(property: string, value: string) {\r\n    //     if (this.$view instanceof HTMLInputElement) {\r\n    //         if (value != null) {\r\n    //             if(property == this.lastProperty) {\r\n    //                 (<HTMLInputElement>this.$view)[this.getStandardProperty()] = value;\r\n    //             } else {\r\n    //                 // this.getRoot().setValue(this, property, value, (<HTMLInputElement>this.$view)[property]);\r\n    //                 (<HTMLInputElement>this.$view)[property] = value;\r\n    //             }\r\n    //         } else {\r\n    //             delete (<HTMLInputElement>this.$view)[property];\r\n    //         }\r\n    //     }\r\n    // }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            super.controlChanged(ev);\r\n        }\r\n// <<<<<<< HEAD\r\n//             let newVal = element[this.getStandardProperty()];\r\n//             if (this.isKeyOnly()) {\r\n//                 // we expect, element[this.lastProperty] to be boolean:\r\n//                 if (!newVal) {\r\n//                     newVal = null;\r\n//                 }\r\n//             } else {\r\n//             }\r\n        // let $graphModel;\r\n        // let value;\r\n        /*if (this.$graphModel) {\r\n            $graphModel = this.$graphModel;\r\n            value = this.$graphModel.getValue(this.lastProperty);\r\n        } else {\r\n            $graphModel = this;\r\n            if (this.$view) {\r\n                value = this.$view[this.lastProperty];\r\n            }\r\n        }*/\r\n        // this.$model.setValue(this.lastProperty, newVal);\r\n        // this.propertyChange(this.$graphModel,this.lastProperty, this.$graphModel.getValue(this.lastProperty), newVal);\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n// =======\r\n        // let newVal = element[this.lastProperty];\r\n        // if (this.isKeyOnly()) {\r\n        //     // we expect, element[this.lastProperty] to be boolean:\r\n        //     if (!newVal) {\r\n        //         newVal = null;\r\n        //     }\r\n        // } else {\r\n        // }\r\n        // let $graphModel;\r\n        // let value;\r\n\r\n        // $graphModel = this.getViewData();\r\n        // if (this.$graphModel) {\r\n        //     $graphModel = this.$graphModel;\r\n        //     value = this.$graphModel.getValue(this.lastProperty);\r\n        // } else {\r\n        //     $graphModel = this;\r\n        //     if (this.$view) {\r\n        //         value = this.$view[this.lastProperty];\r\n        //     }\r\n        // }\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n//            this.saveViewInData();\r\n// >>>>>>> addOldFunctions\r\n//         } else {\r\n//             console.log('value does not match the pattern...');\r\n//         }\r\n    }\r\n\r\n    public setType(type: string): void {\r\n        let oldValue: string = this.type;\r\n        if (oldValue === type) {\r\n            return;\r\n        }\r\n        if (type === 'radio') {\r\n            this.$viewData.setValue('checked', null);\r\n        } else {\r\n            this.$viewData.removeKey('checked');\r\n        }\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\n\r\nexport class Label extends Control {\r\n    public load(data: JSON): any {\r\n        this.createControl(this.$owner, data);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('label');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr === 'textContent') {\r\n                this.$view.textContent = data['textContent'];\r\n            } else {\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Method extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.updateType(data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.updateType(data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.updateType(data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n            // e.g. setName() : string or name:string\r\n            let dataSplitted = data.split(':');\r\n\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }\r\n                else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType(dataSplitted[1].trim() || 'void');\r\n            }\r\n            // set default return type of void\r\n            else {\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = data.trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }  else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType('void');\r\n            }\r\n        }\r\n\r\n        if (Util.includes(this.$data.getValue('name'), '(') && !Util.includes(this.$data.getValue('name'), ')') === false) {\r\n            this.$data.setValue('name', this.$data.getValue('name') + '()');\r\n        }\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\nimport {Association} from '../edges';\r\nimport { GraphModel } from '..';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\n\r\nexport class Node extends DiagramElement {\r\n    public $edges: Association[] = [];\r\n    public $minWidth: number = 150;\r\n    public $minheight: number = 25;\r\n    public $defaulEdgeType: string;\r\n\r\n    constructor(data: JSON|string|Object|any) {\r\n        super();\r\n\r\n        // default size\r\n        this.withSize(this.$minWidth, this.$minheight);\r\n\r\n        if (data) {\r\n            if (data['x'] && data['y']) {\r\n                this.withPos(data['x'], data['y']);\r\n            }\r\n            if (data['width'] || data['height']) {\r\n                this.withSize(data['width'], data['height']);\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos = this.getPos();\r\n        const size = this.getSize();\r\n\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x - size.x / 2,\r\n            y: pos.y - size.y / 2,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y,\r\n            width: size.x,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        const shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'middle',\r\n            'font-family': 'Verdana',\r\n            'font-size': '14',\r\n            fill: 'black'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = this.id;\r\n\r\n        let group = this.createShape({tag: 'g', id: this.id});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public copy(): Node {\r\n        let copy: Node;\r\n        // create new id\r\n        let model = <GraphModel>this.$owner || <GraphModel>this.getRoot();\r\n        if (model) {\r\n            let type = this.property || Node.name;\r\n            let newId = model.getNewId(type);\r\n            copy = <Node>model.createElement(type, newId, null);\r\n            copy.withSize(this.getSize().x, this.getSize().y);\r\n            copy.$owner = model;\r\n        } else {\r\n            copy.id = this.id + '-copy';\r\n            copy.$owner = this.getRoot();\r\n        }\r\n        return copy;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n// EMPTY\r\n    }\r\n    public addAttribute(value: string): Attribute {\r\n        return null;\r\n    }\r\n    public getAttributes(): Attribute[] {\r\n        return null;\r\n    }\r\n    public addMethod(value: string): Method {\r\n        return null;\r\n    }\r\n    public updateLabel(newLabel: string): void {\r\n// EMPTY\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\n\r\nexport class SO extends DiagramElement {\r\n    public static create(element: Object) {\r\n        let result: SO = new SO();\r\n        for (let key in element) {\r\n            if (element.hasOwnProperty(key) === false) {\r\n                continue;\r\n            }\r\n            result.withKeyValue(key, element[key]);\r\n\r\n        }\r\n        return result;\r\n    }\r\n\r\n    public withKeyValue(key: string, value: any): SO {\r\n        if (key === 'typ') {\r\n            this.property = value;\r\n        } else if (key === 'x') {\r\n            this.withPos(value, null);\r\n        } else if (key === 'y') {\r\n            this.withPos(null, value);\r\n        } else if (key === 'width') {\r\n            this.withSize(value, null);\r\n        } else if (key === 'height') {\r\n            this.withSize(null, value);\r\n        } else {\r\n            this[key] = value;\r\n        }\r\n        return this;\r\n    }\r\n}\r\n","import {Point} from '../BaseElements';\r\nimport {Node} from './Node';\r\n\r\nexport class StereoType extends Node {\r\n\r\n    protected stereoType: string;\r\n\r\n    constructor (type: string, x: number, y: number) {\r\n        super('');\r\n        this.withPos(x, y);\r\n        this.setStereoType(type);\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        let pos: Point = this.getPos();\r\n        let size: Point = this.getSize();\r\n\r\n               // = = = STEREOTYPE = = =\r\n        let stereoType = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y - this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': 10,\r\n            'font-weight': 'bold',\r\n            fill: 'black'\r\n        });\r\n        stereoType.textContent = this.stereoType;\r\n\r\n        this.$view = stereoType;\r\n        return stereoType;\r\n    }\r\n\r\n    public setStereoType(value: string): void {\r\n        this.stereoType = '<<' + value + '>>';\r\n    }\r\n\r\n    public getStereoType(): string {\r\n        return this.stereoType;\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { SO } from './SO';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport { Util } from '../../util';\r\n\r\nexport class Symbol extends Node {\r\n    public $heightMax: number = 0;\r\n    public $heightMin: number = 0;\r\n\r\n    constructor(typ: string) {\r\n        super(typ);\r\n    }\r\n\r\n    public draw(typ?: string): SVGElement {\r\n        return SymbolLibary.draw(this);\r\n    }\r\n}\r\n\r\n// \t\t\t\t###################################################### SymbolLibary ####################################################################################\r\n// Example Items\r\n// {tag: 'path', d: ''}\r\n// {tag: 'rect', width:46, height:34}\r\n// {tag: 'ellipse', width:23, height:4}\r\n// {tag: 'line', x1:650, y1:-286, x2:650, y2:-252}\r\n// {tag: 'circle', r:5, x:12, y:0}\r\n// {tag: 'image', height: 30, width: 50, content$src: hallo}\r\n// {tag: 'text', 'text-anchor': 'left', x: '10'}\r\nexport class SymbolLibary {\r\n\r\n    public static drawSVG(node: any): SVGSVGElement {\r\n        // const lib = new SymbolLibary();\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            const parent = SO.create(node);\r\n            parent['property'] = 'SVG';\r\n            symbol = fn(parent);\r\n            // symbol = fn.apply(lib, parent);\r\n\r\n            return SymbolLibary.createGroup(parent, symbol);\r\n        }\r\n        return symbol;\r\n    }\r\n\r\n    public static draw(node: any, parent?: Object): SVGElement {\r\n        // Node is Symbol or simple Object\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            if (!(node instanceof DiagramElement)) {\r\n                node = SO.create(node);\r\n                if (!node.property) {\r\n                    node.property = 'SVG';\r\n                }\r\n            }\r\n            symbol = fn.apply(this, [node]);\r\n            if (!parent) {\r\n                return SymbolLibary.createGroup(node, symbol);\r\n            }\r\n            return SymbolLibary.createGroup(node, symbol);\r\n        } else if (node.property) {\r\n            symbol = new Symbol(node.property);\r\n            symbol.init(node);\r\n            let pos = node.getPos();\r\n            let size = node.getSize();\r\n            symbol.withPos(pos.x, pos.y);\r\n            symbol.withSize(size.x, size.y);\r\n            symbol['value'] = node['value'];\r\n            parent = node['$parent'];\r\n            return SymbolLibary.draw(symbol, parent);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public static upFirstChar(txt: string): string {\r\n        return txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase();\r\n    }\r\n\r\n    public static isSymbolName(typ: string): boolean {\r\n        let fn = SymbolLibary['draw' + SymbolLibary.upFirstChar(typ)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static isSymbol(node: Symbol) {\r\n        let fn = SymbolLibary[SymbolLibary.getName(node)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static getName(node: any): string {\r\n        if (node['type']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['type']);\r\n        }\r\n        if (node.property) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node.property);\r\n        }\r\n        if (node['src']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['src']);\r\n        }\r\n        return 'drawNode';\r\n    }\r\n\r\n    /*FIXME   public static createImage(node: Symbol, $graphModel:Node) {\r\n           let n, img: HTMLElement;\r\n           // node.$graphModel = node;\r\n           if (SymbolLibary.isSymbol(node)) {\r\n               return SymbolLibary.draw(null, node);\r\n           }\r\n           n = {tag: 'img', $graphModel: node, src: node['src']};\r\n           let size = node.getSize();\r\n           if (size.isEmpty() === false) {\r\n               n['width'] = size.x;\r\n               n['height'] = size.y;\r\n           } else {\r\n               n['xmlns'] = 'http://www.w3.org/1999/xhtml';\r\n           }\r\n           img = Util.create(n);\r\n           if (size.isEmpty()) {\r\n               $graphModel.appendImage(img);\r\n               return null;\r\n           }\r\n           return img;\r\n       }*/\r\n\r\n    public static createGroup(node: DiagramElement, group: any) {\r\n        let func, y: number, z: number, box, item: Element, transform, i, offsetX = 0, offsetY = 0;\r\n        let svg: any;\r\n        if (node.property.toUpperCase() === 'HTML') {\r\n            let so = {\r\n                tag: 'svg',\r\n                style: { left: (group.x | 0) + node.getPos().x, top: (group.y | 0) + node.getPos().y, position: 'absolute' }\r\n            };\r\n            if (node['transform']) {\r\n                so['transform'] = node['transform'];\r\n            }\r\n            svg = Util.create(so);\r\n        } else {\r\n            svg = Util.create({ tag: 'g' });\r\n            transform = 'translate(' + group.getPos().x + ' ' + group.getPos().y + ')';\r\n            if (group.scale) {\r\n                transform += ' scale(' + group.scale + ')';\r\n            }\r\n            if (group.rotate) {\r\n                transform += ' rotate(' + group.rotate + ')';\r\n            }\r\n            svg.setAttribute('transform', transform);\r\n            if (group['id']) {\r\n                svg.id = group['id'];\r\n            }\r\n        }\r\n\r\n        if (node['tooltip']) {\r\n            const tooltipTitleAttr = {\r\n                tag: 'title'\r\n            };\r\n            let tooltipTitle = Util.createShape(tooltipTitleAttr);\r\n            tooltipTitle.textContent = node['tooltip'];\r\n            svg.appendChild(tooltipTitle);\r\n        }\r\n\r\n        if (node['background']) {\r\n            const attrCircle = {\r\n                tag: 'circle',\r\n                cx: 20,\r\n                cy: 20,\r\n                r: 17,\r\n                stroke: '#888',\r\n                'stroke-width': 0,\r\n                fill: '#DDD'\r\n            };\r\n            svg.appendChild(Util.create(attrCircle));\r\n        }\r\n\r\n        for (i = 0; i < group.items.length; i += 1) {\r\n            svg.appendChild(Util.create(group.items[i]));\r\n        }\r\n        let elements = node['elements'];\r\n        Util.setSize(svg, group.width + node.getSize().x, group.height + node.getSize().y);\r\n        node['$heightMin'] = node.getSize().y;\r\n        if (elements) {\r\n            for (i = 0; i < elements.length; i += 1) {\r\n                if (!elements[i] && elements[i].length < 1) {\r\n                    elements.splice(i, 1);\r\n                    i -= 1;\r\n                }\r\n            }\r\n            box = Util.create({ tag: 'g' });\r\n            // Calculate new Height\r\n            let c: number;\r\n            z = 0;\r\n            for (c = 0; c < elements.length; c += 1) {\r\n                if (typeof elements[c] === 'string') {\r\n                    z += 1;\r\n                } else {\r\n                    z += elements[c].length;\r\n                }\r\n            }\r\n            z = z * 25 + 6;\r\n            box.appendChild(Util.create({\r\n                tag: 'rect',\r\n                rx: 0,\r\n                x: offsetX,\r\n                y: (offsetY + 28),\r\n                width: 70,\r\n                height: z,\r\n                stroke: '#000',\r\n                fill: '#fff',\r\n                opacity: '0.7'\r\n            }));\r\n            node['$heightMax'] = z + node['$heightMin'];\r\n\r\n            svg['elements'] = elements;\r\n            if (node['type'] === 'DropDown') {\r\n                svg['activ'] = Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': 60,\r\n                    'x': (10 + offsetX),\r\n                    'y': 20,\r\n                    value: node['activText']\r\n                });\r\n                svg.appendChild(svg.activ);\r\n            }\r\n\r\n            y = offsetY + 46;\r\n            // 46 -28 = 18\r\n\r\n            func = function (event: Event) {\r\n                if (svg.activ) {\r\n                    svg.activ.textContent = (<any>event.currentTarget).value;\r\n                }\r\n            };\r\n            let txt: string;\r\n            let textClass = 'SVGTEXT';\r\n            for (z = 0; z < elements.length; z += 1) {\r\n                if (typeof elements[z] === 'string') {\r\n                    txt = elements[z];\r\n                } else {\r\n                    item = this.addText(y, offsetX, box, elements[z][0], 'SVGTEXT');\r\n                    y += 26;\r\n                    for (c = 1; c < elements[z].length; c += 1) {\r\n                        item = this.addText(y, offsetX, box, '* ' + elements[z][c], 'SVGTEXTITEM');\r\n\r\n                        item['value'] = elements[z];\r\n                        if (node['action']) {\r\n                            item['onclick'] = node['action'];\r\n                        } else {\r\n                            item['onclick'] = func;\r\n                        }\r\n                        y += 26;\r\n                    }\r\n                    txt = elements[z];\r\n                    let subBox = Util.create({\r\n                        tag: 'rect',\r\n                        rx: 0,\r\n                        x: offsetX,\r\n                        y: (offsetY + 28),\r\n                        width: 60,\r\n                        height: z,\r\n                        stroke: '#000',\r\n                        fill: '#fff',\r\n                        opacity: '0.7'\r\n                    });\r\n                    continue;\r\n                }\r\n                // let txt = elements[z];\r\n                item = this.addText(y, offsetX, box, txt, textClass);\r\n\r\n                item['value'] = elements[z];\r\n                if (node['action']) {\r\n                    item['onclick'] = node['action'];\r\n                } else {\r\n                    item['onclick'] = func;\r\n                }\r\n                y += 26;\r\n            }\r\n            svg.choicebox = box;\r\n        }\r\n        svg.tool = node;\r\n        svg.onclick = function () {\r\n            if (svg.status === 'close') {\r\n                svg.open();\r\n            } else {\r\n                svg.close();\r\n            }\r\n        };\r\n        svg.close = function () {\r\n            if (svg.status === 'open' && svg.choicebox) {\r\n                this.removeChild(svg.choicebox);\r\n            }\r\n            svg.status = 'close';\r\n            svg.tool.$size.height = svg.tool.heightMin;\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x, g.tool.height + g.tool.y);\r\n            Util.setSize(svg, svg.tool.$size.x, svg.tool.$size.y);\r\n        };\r\n        svg.open = function () {\r\n            if (this.tagName === 'svg') {\r\n                return;\r\n            }\r\n            if (svg.status === 'close' && svg.choicebox) {\r\n                this.appendChild(svg.choicebox);\r\n            }\r\n            svg.status = 'open';\r\n            svg.tool.$size.height = svg.tool.heightMax;\r\n            Util.setSize(svg, svg.tool.width, svg.tool.height);\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x + 10, g.tool.height + g.tool.y + 10);\r\n        };\r\n        svg.close();\r\n        return svg;\r\n    }\r\n\r\n    public static addChild(parent: SVGElement, json: JSON | Element): void {\r\n        let item: Element;\r\n        if ((<any>json).offsetLeft) {\r\n            item = <Element>json;\r\n        } else {\r\n            item = Util.create(json);\r\n        }\r\n        item.setAttribute('class', 'draggable');\r\n        parent.appendChild(item);\r\n    }\r\n\r\n    public static all(node: any): void {\r\n        SymbolLibary.drawSmiley(node);\r\n        SymbolLibary.drawDatabase(node);\r\n        SymbolLibary.drawLetter(node);\r\n        SymbolLibary.drawMobilephone(node);\r\n        SymbolLibary.drawWall(node);\r\n        SymbolLibary.drawActor(node);\r\n        SymbolLibary.drawLamp(node);\r\n        SymbolLibary.drawArrow(node);\r\n        SymbolLibary.drawButton(node);\r\n        SymbolLibary.drawDropdown(node);\r\n        SymbolLibary.drawClassicon(node);\r\n        SymbolLibary.drawClassWithEdgeicon(node);\r\n    }\r\n\r\n    public static drawHamburger(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'circle', r: 10, fill: '#ccc', cx: 12, cy: 12, 'stroke-width': 1, stroke: 'black'},\r\n                { tag: 'path', d: 'M 8,7 H 16 M 8,12 H 16 M 8,17 H 16', stroke: 'black', fill: 'none' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawSmiley(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'path', d: 'm49.01774,25.64542a24.5001,24.5 0 1 1 -49.0001,0a24.5001,24.5 0 1 1 49.0001,0z', stroke: 'black', fill: 'none' }, { tag: 'path', d: 'm8,31.5c16,20 32,0.3 32,0.3' },\r\n                { tag: 'path', d: 'm19.15,20.32a1.74,2.52 0 1 1 -3.49,0a1.74,2.52 0 1 1 3.49,0z' },\r\n                { tag: 'path', d: 'm33,20.32a1.74,2.52 0 1 1 -3.48,0a1.74,2.52 0 1 1 3.48,0z' },\r\n                { tag: 'path', d: 'm5.57,31.65c3.39,0.91 4.03,-2.20 4.03,-2.20' },\r\n                { tag: 'path', d: 'm43,32c-3,0.91 -4,-2.20 -4.04,-2.20' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDatabase(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 40,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,-6.26 25.03,-6.26 25.03,0l0,25.82c0,6.26 -25.03,6.26 -25.03,0l0,-25.82z',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLetter(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 17,\r\n            items: [\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1,1l22,0l0,14l-22,0l0,-14z' },\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1.06,1.14l10.94,6.81l10.91,-6.91' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMobilephone(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 4.2 0.5 15.61 0c 2 0 3.7 1.65 3.7 3.7l 0 41.6c 0 2-1.65 3.7-3.7 3.7l-15.6 0c-2 0-3.7-1.6-3.7-3.7l 0-41.6c 0-2 1.6-3.7 3.7-3.7z',\r\n                    fill: 'none',\r\n                    stroke: 'black'\r\n                },\r\n                { tag: 'path', d: 'm 12.5 2.73a 0.5 0.5 0 1 1-1 0 0.5 0.5 0 1 1 1 0z' },\r\n                { tag: 'path', d: 'm 14 46a 2 2 0 1 1-4 0 2 2 0 1 1 4 0z' },\r\n                { tag: 'path', d: 'm 8 5 7 0' },\r\n                { tag: 'path', d: 'm 1.63 7.54 20.73 0 0 34-20.73 0z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawWall(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'path', d: 'm26,45.44l-5,3.56l-21,-9l0,-36.41l5,-3.56l20.96,9l-0,36.4z' },\r\n                {\r\n                    tag: 'path',\r\n                    stroke: 'white',\r\n                    d: 'm2.21,11l18.34,7.91m-14.46,-12.57l0,6.3m8.2,21.74l0,6.35m-8.6,-10l0,6.351m4.1,-10.67l0,6.3m4.8,-10.2l0,6.3m-8.87,-10.23l0,6.35m4.78,-10.22l0,6.35m-8,14.5l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m0,-13l0,34m-18.23,-41.84l18.3,8m0,0.11l5,-3.57'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawActor(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'line', stroke: '#000', x1: '12', y1: '10', x2: '12', y2: '30' },\r\n                { tag: 'circle', stroke: '#000', cy: '5', cx: '12', r: '5' },\r\n                { tag: 'line', stroke: '#000', y2: '18', x2: '25', y1: '18', x1: '0' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '5', y1: '30', x1: '12' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '20', y1: '30', x1: '12' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLamp(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 22.47 10.58c-6.57 0-11.89 5.17-11.89 11.54 0 2.35 0.74 4.54 2 6.36 2 4 4.36 5.63 4.42 10.4l 11.15 0c 0.12-4.9 2.5-6.8 4.43-10.4 1.39-1.5 1.8-4.5 1.8-6.4 0-6.4-5.3-11.5-11.9-11.5z',\r\n                    fill: 'white',\r\n                    stroke: 'black'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 40 8 0c 0.58 0 1 0.5 1 1 0 0.6-0.5 1-1 1l-8 0c-0.6 0-1-0.47-1-1 0-0.58 0.47-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 42.7 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 45.3 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                { tag: 'path', d: 'm 19.5 48c 0.37 0.8 1 1.3 1.9 1.7 0.6 0.3 1.5 0.3 2 0 0.8-0.3 1.4-0.8 1.9-1.8z' },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 6 37.5 4.2-4c 0.3-0.3 0.8-0.3 1 0 0.3 0.3 0.3 0.8 0 1.1l-4.2 4c-0.3 0.3-0.8 0.3-1.1 0-0.3-0.3-0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 39 37.56-4.15-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 38 23 5.8 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.8 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 1.3 23 6 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.9 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 34.75 11.2 4-4.1c 0.3-0.3 0.3-0.8 0-1-0.3-0.3-0.8-0.3-1 0l-4 4.1c-0.3 0.3-0.3 0.8 0 1 0.3 0.3 0.8 0.3 1 0z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 11.23 10-4-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 21.64 1.3 0 5.8c 0 0.4 0.3 0.8 0.8 0.8 0.4 0 0.8-0.3 0.8-0.8l 0-5.8c 0-0.4-0.3-0.8-0.8-0.8-0.4 0-0.8 0.3-0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 26.1 24.3c-0.5 0-1 0.2-1.3 0.4-1.1 0.6-2 3-2.27 3.5-0.26-0.69-1.14-2.9-2.2-3.5-0.7-0.4-2-0.7-2.5 0-0.6 0.8 0.2 2.2 0.9 2.9 1 0.9 3.9 0.9 3.9 0.9 0 0 0 0 0 0 0.54 0 2.8 0 3.7-0.9 0.7-0.7 1.5-2 0.9-2.9-0.2-0.3-0.7-0.4-1.2-0.4z'\r\n                },\r\n                { tag: 'path', d: 'm 22.5 28.57 0 10.7' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawStop(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 30,\r\n            height: 30,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: '#FFF',\r\n                    'stroke-width': '2',\r\n                    stroke: '#B00',\r\n                    d: 'm 6,6 a 14,14 0 1 0 0.06,-0.06 z m 0,0 20,21'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMin(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    d: 'm 0,0 19,0 0,19 -19,0 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 13,-0.04'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawArrow(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 10,\r\n            height: 9,\r\n            rotate: node['rotate'],\r\n            items: [\r\n                { tag: 'path', fill: '#000', stroke: '#000', d: 'M 0,0 10,4 0,9 z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMax(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    'stroke-dashoffset': 2,\r\n                    'stroke-dasharray': '4.8,4.8',\r\n                    d: 'm 0,0 4.91187,0 5.44643,0 9.11886,0 0,19.47716 -19.47716,0 0,-15.88809 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 6,0.006 0.02,5 0.01,-11 -0.03,6.02 c 2,-0.01 4,-0.002 6,0.01'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawButton(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight, btnValue;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        btnValue = node['value'] || '';\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: 60,\r\n            height: 28,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 8,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    filter: 'url(#drop-shadow)',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                { tag: 'text', $font: true, x: 10, y: 18, fill: 'black', value: btnValue, 'class': 'hand' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDropdown(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 0,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth - 20,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 2,\r\n                    x: btnWidth - 20,\r\n                    y: 0,\r\n                    width: 20,\r\n                    height: 28,\r\n                    stroke: '#000',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    style: 'fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1',\r\n                    d: 'm ' + (btnWidth - 15) + ',13 10,0 L ' + (btnWidth - 10) + ',20 z'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassicon(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.19999l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm25.68807,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.2l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                { tag: 'line', x1: 11, y1: 7, x2: 25, y2: 7, stroke: '#000' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassWithEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M2,10 20,10 20,35 2,35 Z M2,17 20,17 M20,10 28,5 28,9 M 28.5,4.7 24,4',\r\n                    style: 'fill:none;stroke:#000000;transform:scale(0.8);'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClass(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: '100%',\r\n            height: '100%',\r\n            items: [\r\n                { tag: 'rect', width: 50, height: 40, x: 0, y: 0, 'stroke-width': 2, stroke: 'black', fill: 'none'},\r\n                { tag: 'rect', width: 50, height: 12, x: 0, y: 18, 'stroke-width': 1, stroke: 'black', fill: 'none'},\r\n                { tag: 'text', x: 27, y: 14, 'text-anchor': 'middle', 'font-size': 11, value: 'Class'},\r\n                { tag: 'text', x: 5, y: 24, 'font-size': 5, value: '+ field: type'},\r\n                { tag: 'text', x: 5, y: 36, 'font-size': 5, value: '+ method(type)'}\r\n            ]\r\n        });\r\n    }\r\n/*\r\n<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n    <g>\r\n    <text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text>\r\n        <text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>\r\n*/\r\n\r\n    public static drawEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M10,30 30,10 M19,10 30,10 30,21',\r\n                    style: 'fill:none;stroke:#555;stroke-width:2;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawCopynode(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M5 5 L15 5 L15 20 L5 20 Z M5 10 L15 10',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M8 2 L18 2 L18 17 L8 17 Z M8 7 L18 7'\r\n                        + 'M11 4.5 L15 4.5 '\r\n                        + 'M10 10 L16 10 '\r\n                        + 'M10 13 L16 13 ',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawBasket(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M12 12 L18 12 L18 11 L22 11 L22 12 L28 12 L28 14 L27 14 L27 29 L13 29 L13 14 L12 14 Z M13 14 L27 14 M20 17 L20 26 M17 16 L17 27 M23 16 L23 27',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawPencil(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M6 20 L12 23 L33 23 L33 17 L12 17 Z M30 17 L30 23 M12 17 L12 23 M15 19 L28 19 M15 21 L28 21',\r\n                    stroke: '#000',\r\n                    'stroke-width': 1,\r\n                    fill: 'white'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    private static addText(y: number, offsetX: number, box: Element, text: string, textClass: string): Element {\r\n        let item: Element;\r\n        box.appendChild(Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'text-anchor': 'left',\r\n            width: 70,\r\n            x: 10,\r\n            y: y,\r\n            class: textClass,\r\n            value: text,\r\n            eventValue: text\r\n        }));\r\n        if (textClass === 'SVGTEXT') {\r\n            textClass = 'SVGChoiceText';\r\n        } else {\r\n            textClass = 'SVGChoice';\r\n        }\r\n\r\n        item = Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            x: offsetX,\r\n            y: y - 18,\r\n            width: 70,\r\n            height: 24,\r\n            stroke: 'none',\r\n            class: textClass,\r\n        });\r\n        item['eventValue'] = text;\r\n        box.appendChild(item);\r\n        return item;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n}\r\n","import {Control} from '../../Control';\r\nimport BridgeElement from '../../BridgeElement';\r\nimport Data from '../../Data';\r\nimport {Util} from '../../util';\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Table extends Control {\r\n    protected items: BridgeElement[] = [];\r\n    private columns: Column[] = [];\r\n    private cells: Object = {};\r\n    private $bodysection: HTMLTableSectionElement;\r\n    private $headersection: HTMLTableSectionElement;\r\n    private showedItems: Array<BridgeElement> = [];\r\n    // BridgeElements:\r\n    private itemsIds: Object = {};\r\n    private countElement: HTMLElement;\r\n    private countColumn: HTMLElement;\r\n    private countColumnPos: number;\r\n    private resultColumn: string;\r\n    private lastSearchText: string;\r\n    private searchColumns: Array<string> = [];\r\n    private searchText: Array<string> = [];\r\n    private sortColumn: Column;\r\n    private direction: number;\r\n    private moveElement: Column = null;\r\n    private isDrag: boolean = false;\r\n    private moveTimeStamp: number;\r\n    private moveX: number;\r\n    private movePos: number;\r\n    private dragColumn: Column;\r\n    private dragPos: number;\r\n    private tableOption: HTMLTableHeaderCellElement;\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    private static indexOfChild(item: BridgeElement) {\r\n        let i: number = 0;\r\n        let child: Node = item.gui;\r\n        while ((child = child.previousSibling) !== null) {\r\n            i++;\r\n        }\r\n        return i;\r\n    }\r\n\r\n    public load(data: any): void {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n            if (data.property) {\r\n                this.property = data.property;\r\n            }\r\n\r\n            if (data.searchColumns) {\r\n                let search: Array<string> = [];\r\n                if (typeof(data.searchColumns) === 'string') {\r\n                    search = data.searchColumns.split(' ');\r\n                } else {\r\n                    search = data.searchColumns;\r\n                }\r\n                for (let z: number = 0; z < search.length; z++) {\r\n                    let item = search[z].trim();\r\n                    if (item.length > 0) {\r\n                        if (this.searchColumns.indexOf(item) < 0) {\r\n                            this.searchColumns.push(item);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        if (this.$view) {\r\n            // Must be an Update\r\n            if (data['columns']) {\r\n                // It is a json must add all things and generate HTML\r\n                for (let i in data['columns']) {\r\n                    if (data['columns'].hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    let col = this.parseData(data['columns'][i]);\r\n                    this.addHeaderInfo(col);\r\n                    this.columns.push(col);\r\n                    this.tableOption.parentElement.insertBefore(col.$element, this.tableOption);\r\n                }\r\n                for (let i in this.showedItems) {\r\n                    let item: BridgeElement = this.showedItems[i];\r\n                    let cell;\r\n                    // Now Add some Children\r\n                    while (item.gui.children.length < this.columns.length) {\r\n                        cell = document.createElement('td');\r\n                        item.gui.appendChild(cell);\r\n                    }\r\n                    // Now Remove Some Children\r\n                    while (item.gui.children.length > this.columns.length) {\r\n                        item.gui.removeChild(item.gui.children[item.gui.children.length - 1]);\r\n                    }\r\n                    for (let c: number = 0; c < this.columns.length; c++) {\r\n                        let name = this.columns[c].attribute;\r\n                        // let count = this.columns.length;\r\n                        cell = item.gui.children[c];\r\n                        cell.innerHTML = item.model.getValue(name);\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n\r\n        this.$view = document.getElementById(id);\r\n        let headerrow: HTMLTableRowElement;\r\n        if (this.$view) {\r\n            if (!this.property) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('table');\r\n            this.$owner.appendChild(this);\r\n        }\r\n        if (!this.$bodysection) {\r\n            // add tbody element if missing\r\n            this.$bodysection = document.createElement('tbody');\r\n            this.$view.appendChild(this.$bodysection);\r\n        }\r\n        if (data['classname']) {\r\n            this.$view.className = data['classname'];\r\n        } else {\r\n            this.$view.className = 'mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp';\r\n        }\r\n\r\n        this.id = id;\r\n        this.$view.id = id;\r\n        this.$view.setAttribute('type', this.constructor['name'].toLowerCase());\r\n        let counter = 0;\r\n        for (let c = 0; c < this.$view.children.length; c++) {\r\n            let row: HTMLTableRowElement = <HTMLTableRowElement>this.$view.children[c];\r\n            if (row instanceof HTMLTableSectionElement) {\r\n                if (row.tagName === 'THEAD') {\r\n                    headerrow = row;\r\n                    // Its a thead\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingHeader(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                } else {\r\n                    // Its a tbody\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingData(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                }\r\n            } else {\r\n                // fallback, if there are no thead and tbody...\r\n                if (counter === 0) {\r\n                    headerrow = row;\r\n                    this.parsingHeader(row);\r\n                } else {\r\n                    this.parsingData(row);\r\n                }\r\n            }\r\n            counter++;\r\n        }\r\n        if (!headerrow || !this.$headersection) {\r\n            if (!this.$headersection) {\r\n                // find eventually existing thead\r\n                let header = this.$view.getElementsByTagName('thead');\r\n                if (header.length === 0) {\r\n                    this.$headersection = document.createElement('thead');\r\n                    this.$view.appendChild(this.$headersection);\r\n                } else {\r\n                    // take first thead element\r\n                    this.$headersection = <HTMLTableSectionElement>header.item(0);\r\n                }\r\n            }\r\n            if (!headerrow) {\r\n                headerrow = document.createElement('tr');\r\n                this.$headersection.appendChild(headerrow);\r\n            }\r\n        }\r\n\r\n        if (data['columns']) {\r\n            // It is a json must add all things and generate HTML\r\n            for (let i in data['columns']) {\r\n                if (data['columns'].hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                let col = this.parseData(data['columns'][i]);\r\n                this.addHeaderInfo(col);\r\n                this.columns.push(col);\r\n                headerrow.appendChild(col.$element);\r\n            }\r\n            this.tableOption = document.createElement('th');\r\n            this.tableOption.classList.add('tableOption');\r\n            headerrow.appendChild(this.tableOption);\r\n            let context: HTMLElement = this.addOptionItem(null, this.tableOption, true);\r\n            let contentChild: HTMLElement = this.addOptionItem('show', context, true);\r\n            // let simpleLink: HTMLElement = this.addOptionItem('show', contentChild, false);\r\n            this.addOptionItem('show', contentChild, false);\r\n        }\r\n        this.registerEvents(['mousemove', 'mousedown', 'mouseup', 'resize', 'dragstart', 'dragover', 'drop', 'dragend']);\r\n\r\n        // Check for SearchBar\r\n        // if(data[\"searchproperty\"]){\r\n        // Create Full Row\r\n        let searchBar = document.createElement('tr');\r\n        let cell = document.createElement('td');\r\n        cell.setAttribute('colspan', '' + (this.columns.length));\r\n        searchBar.appendChild(cell);\r\n\r\n        let search = document.createElement('input');\r\n        search.className = 'search';\r\n        let that = this;\r\n        search.addEventListener('keyup', function (evt) {\r\n            that.search(evt.target['value']);\r\n        });\r\n\r\n        cell.appendChild(search);\r\n        if (this.resultColumn) {\r\n            if (this.resultColumn.indexOf('#') !== 0) {\r\n                this.countElement = document.createElement('div');\r\n                searchBar.appendChild(this.countElement);\r\n            } else {\r\n                for (let z: number = 0; z < this.$headersection.children.length; z++) {\r\n                    if (this.$headersection.children[z].innerHTML === this.resultColumn) {\r\n                        this.countColumn = <HTMLElement> this.$headersection.children[z];\r\n                        this.countColumnPos = z;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        let first = this.$headersection.children.item(0);\r\n        this.$headersection.insertBefore(searchBar, first);\r\n\r\n        this.updateElement(this.property, null);\r\n\r\n        // now update those elements, that were not loaded currently\r\n    }\r\n\r\n    public tableEvent(type: string, e: Event) {\r\n        let button: number = 0;\r\n        let eventX: number = 0;\r\n        if (e instanceof MouseEvent) {\r\n            button = e.buttons;\r\n            eventX = e.pageX;\r\n        }\r\n        if (type === 'mouseup') {\r\n            this.moveElement = null;\r\n        } else if (type === 'mousedown' || type === 'resize') {\r\n            // End to Resize\r\n            this.moveElement = null;\r\n            if (button === 1) {\r\n                let c: number;\r\n                for (c = 0; c < this.columns.length; c++) {\r\n                    if (this.columns[c].$resize === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = false;\r\n                        break;\r\n                    } else if (this.columns[c].$element === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = true;\r\n                    }\r\n                }\r\n                this.moveTimeStamp = e.timeStamp;\r\n                this.moveX = eventX;\r\n            } else {\r\n                this.moveTimeStamp = 0;\r\n            }\r\n        } else if (type === 'mousemove') {\r\n            if (button === 1 && this.moveElement) {\r\n                if (this.moveTimeStamp && e.timeStamp - this.moveTimeStamp < 2000) {\r\n                    if (this.isDrag) {\r\n                        // FIXME\r\n                    } else {\r\n                        let x = eventX - this.moveX;\r\n                        let width = this.moveElement.$element.offsetWidth;\r\n                        this.moveElement.$element.width = '' + (width + x);\r\n                        e.stopPropagation();\r\n                    }\r\n                }\r\n                this.moveX = eventX;\r\n                this.moveTimeStamp = e.timeStamp;\r\n            }\r\n        } else if (this.isDrag) {\r\n            this.columnDragEvent(type, <DragEvent> e);\r\n        }\r\n    }\r\n\r\n    public parsingHeader(row: HTMLTableRowElement) {\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let column: HTMLTableHeaderCellElement = <HTMLTableHeaderCellElement>row.children[i];\r\n            let id = column.innerHTML.trim();\r\n            let col: Column = null;\r\n            for (let c in this.columns) {\r\n                if (this.columns.hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                if (this.columns[c].label === id) {\r\n                    col = this.columns[c];\r\n                    col.$element = column;\r\n                    break;\r\n                }\r\n            }\r\n            if (col === null) {\r\n                col = new Column();\r\n                col.label = id;\r\n                col.attribute = column.getAttribute('attribute');\r\n                col.$element = column;\r\n                this.columns.push(col);\r\n            }\r\n            this.addHeaderInfo(col);\r\n        }\r\n    }\r\n\r\n    public parsingData(row: HTMLTableRowElement) {\r\n        let id = row.getAttribute('id');\r\n        let item: Data = this.$owner.getItem(id);\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let cell: HTMLTableCellElement = <HTMLTableCellElement>row.children[i];\r\n            let colAttribute = this.columns[i].attribute;\r\n            if (colAttribute.indexOf('\\.') < 0) {\r\n                item[colAttribute] = cell.innerHTML.trim();\r\n            }\r\n        }\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: Object, newValue: Object) {\r\n        if (entity) {\r\n            // Check for Show\r\n            if (this.property && !entity.hasProperty(property)) {\r\n                return;\r\n            }\r\n        }\r\n        if (entity.id === undefined) {\r\n            return;\r\n        }\r\n        let item: BridgeElement = <BridgeElement>this.itemsIds[entity.id];\r\n        let row: HTMLTableRowElement;\r\n        if (!item) {\r\n            item = new BridgeElement(entity);\r\n            this.items.push(item);\r\n            this.itemsIds[entity.id] = item;\r\n        }\r\n        row = this.cells[entity.id];\r\n        if (row) {\r\n            item.gui = row;\r\n        }\r\n        if (this.searching(item) === false) {\r\n            return;\r\n        }\r\n        let cell;\r\n        let showItem = false;\r\n\r\n        if (!row) {\r\n            showItem = true;\r\n            row = document.createElement('tr');\r\n            let count = this.columns.length;\r\n            for (let i = 0; i < count; i++) {\r\n                cell = document.createElement('td');\r\n                row.appendChild(cell);\r\n            }\r\n            this.cells[entity.id] = row;\r\n            item.gui = row;\r\n        }\r\n        for (let c: number = 0; c < this.columns.length; c++) {\r\n            let name = this.columns[c].attribute;\r\n            if (name === property) {\r\n                cell = row.children[c];\r\n                cell.innerHTML = <string>newValue;\r\n            }\r\n        }\r\n        if (showItem) {\r\n            this.showItem(item, true);\r\n        }\r\n        // super.propertyChange(entity, property, newValue, oldValue);\r\n    }\r\n\r\n    public sort(column: Column) {\r\n        if (this.sortColumn === column) {\r\n            if (this.direction === 1) {\r\n                this.direction = -1;\r\n                column.$element.classList.remove('asc');\r\n                column.$element.classList.add('desc');\r\n            } else {\r\n                this.direction = 1;\r\n                column.$element.classList.remove('desc');\r\n                column.$element.classList.add('asc');\r\n            }\r\n        } else {\r\n            if (this.sortColumn !== null) {\r\n                this.sortColumn.$element.classList.remove('desc');\r\n                this.sortColumn.$element.classList.remove('asc');\r\n            }\r\n            this.sortColumn = column;\r\n            this.sortColumn.$element.classList.add('asc');\r\n            this.direction = 1;\r\n        }\r\n        let that = this;\r\n        let sort = function (a: BridgeElement, b: BridgeElement) {\r\n            return that.sorting(a, b);\r\n        };\r\n        this.showedItems.sort(sort);\r\n        let len: number = this.showedItems.length;\r\n        let body = this.$bodysection;\r\n        let i = 0;\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            if (i !== Table.indexOfChild(item)) {\r\n                break;\r\n            }\r\n            i = i + 1;\r\n        }\r\n        while (body.children.length > i) {\r\n            body.removeChild(body.children.item(body.children.length - 1));\r\n        }\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            body.appendChild(item.gui);\r\n            i = i + 1;\r\n        }\r\n\r\n        //      body.removeChild(item.gui);\r\n        //      body.remove\r\n    }\r\n\r\n    public sorting(a: BridgeElement, b: BridgeElement): number {\r\n        let path: string[] = this.sortColumn.attribute.split('.');\r\n        let itemA = a.model.prop;\r\n        let itemB = b.model.prop;\r\n        let check = this.sortColumn.attribute;\r\n        for (let p = 0; p < path.length; p++) {\r\n            check = path[p];\r\n            if (itemA[check]) {\r\n                itemA = itemA[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n            if (itemB[check]) {\r\n                itemB = itemB[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n        if (itemA !== itemB) {\r\n            if (this.direction === 1) {\r\n                return (itemA < itemB) ? -1 : 1;\r\n            }\r\n            return (itemA < itemB) ? 1 : -1;\r\n\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    // Searching\r\n    public search(origSearchText: string): void {\r\n        if (!origSearchText) {\r\n            origSearchText = '';\r\n        }\r\n        let searchText: string = origSearchText.trim().toLowerCase();\r\n        if (searchText === this.lastSearchText && searchText !== '') {\r\n            return; // <==== nothing to be done\r\n        }\r\n        let oldSearch: string = this.lastSearchText;\r\n        this.lastSearchText = searchText;\r\n\r\n        this.parseSearchArray();\r\n        if (searchText !== '' && oldSearch !== null && searchText.indexOf(oldSearch) >= 0 && searchText.indexOf('|') < 0) {\r\n            this.searchArray(this.showedItems);\r\n        } else {\r\n            this.searchSet(this.items);\r\n        }\r\n        this.refreshCounter();\r\n    }\r\n\r\n    public refreshCounter() {\r\n        if (this.countColumn) {\r\n            this.countColumn.innerHTML = this.columns[this.countColumnPos].label + ' (' + this.showedItems.length + ')';\r\n        }\r\n        // var countElement = document.getElementById('talkCount');\r\n        //  if (countElement) {\r\n        //     var txt = (this.showedItems.size() > 0 && searchText.length > 0 ) ? this.options.TEXT_SEARCHLIST : this.options.TEXT_SEARCHFULLLIST;\r\n        //     countElement.innerHTML = txt.replace(\"%LEN%\", this.root['children'].length).replace(\"%COUNT%\", this.showedItems.size()).replace(\"%SEARCH%\", origSearchText);\r\n        // }\r\n        // if (this.countColumn) {\r\n        //     this.countColu1mn.innerHTML = this.countColumn[\"label\"] + \" (\" + this.showedItems.size() + \")\";\r\n        // }\r\n    }\r\n\r\n    public parseSearchArray() {\r\n        let pos: number = 0;\r\n        let split: Array<string> = [];\r\n        let quote: boolean = false;\r\n        for (let i: number = 0; i < this.lastSearchText.length; i++) {\r\n            if ((this.lastSearchText.charAt(i) === ' ') && !quote) {\r\n                let txt = this.lastSearchText.substring(pos, i).trim();\r\n                if (txt.length > 0) {\r\n                    split.push(txt);\r\n                }\r\n                pos = i + 1;\r\n            } else if (this.lastSearchText.charAt(i) === '\\\"') {\r\n                if (quote) {\r\n                    let txt = this.lastSearchText.substring(pos, i).trim();\r\n                    if (txt.length > 0) {\r\n                        split.push(txt);\r\n                    }\r\n                    pos = i + 1;\r\n                } else {\r\n                    pos = i + 1;\r\n                }\r\n                quote = !quote;\r\n            }\r\n        }\r\n        if (pos < this.lastSearchText.length) {\r\n            split.push(this.lastSearchText.substring(pos, this.lastSearchText.length).trim());\r\n        }\r\n        this.searchText = split;\r\n        return split;\r\n    }\r\n\r\n    public searchArray(root: Array<BridgeElement>) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let i: number = 0; i < root.length; i++) {\r\n            let item: BridgeElement = root[i];\r\n            this.showItem(item, this.searching(item));\r\n        }\r\n    }\r\n\r\n    public searchSet(root: BridgeElement[]) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let item of root) {\r\n            let child: BridgeElement = <BridgeElement>item;\r\n            this.showItem(child, this.searching(child));\r\n        }\r\n    }\r\n\r\n    public showItem(item: BridgeElement, visible: boolean) {\r\n        if (visible) {\r\n            this.showedItems.push(item);\r\n            this.$bodysection.appendChild(item.gui);\r\n        } else if (item.gui && item.gui.parentElement) {\r\n            this.$bodysection.removeChild(item.gui);\r\n        }\r\n    }\r\n\r\n    public searching(item: BridgeElement): boolean {\r\n        let fullText: string = '';\r\n        for (let i: number = 0; i < this.searchColumns.length; i++) {\r\n            fullText = fullText + ' ' + item.model.getValue(this.searchColumns[i]);\r\n        }\r\n        fullText = fullText.trim().toLowerCase();\r\n        for (let z: number = 0; z < this.searchText.length; z++) {\r\n            if ('' !== this.searchText[z]) {\r\n                let orSplit: Array<string>;\r\n                if (this.searchText[z].indexOf('|') > 0) {\r\n                    orSplit = this.searchText[z].split('|');\r\n                } else {\r\n                    orSplit = [this.searchText[z]];\r\n                }\r\n                let o: number = 0;\r\n                for (; o < orSplit.length; o++) {\r\n                    let pos: number = orSplit[o].indexOf(':');\r\n                    if (orSplit[o].indexOf('#') === 0 && pos > 1) {\r\n                        // if (searchProperties.contains(propString)) {\r\n                        let value: string = orSplit[o].substring(pos + 1);\r\n                        let column: string = orSplit[o].substring(1, pos - 1);\r\n                        let dataValue: Object = item.model.getValue(column);\r\n                        if (dataValue) {\r\n                            if (dataValue.toString().toLowerCase().indexOf(value) >= 0) {\r\n                                // Search for simple Property\r\n                                break;\r\n                            }\r\n                        }\r\n                    } else if (orSplit[o].length > 1 && orSplit[o].indexOf('-') === 0) {\r\n                        if (fullText.indexOf(orSplit[o].substring(1)) < 0) {\r\n                            break;\r\n                        }\r\n                    } else if (fullText.indexOf(orSplit[o]) >= 0) {\r\n                        // his search word is found in full text\r\n                        break;\r\n                    }\r\n                }\r\n                if (o === orSplit.length) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public getColumn(): Column[] {\r\n        return this.columns;\r\n    }\r\n\r\n    public updateElement(property: string, value: string): void {\r\n        // first clear all elements inside the table:\r\n        for (let item of this.items) {\r\n            if (item instanceof BridgeElement) {\r\n                (<BridgeElement>item).model.removeListener(this);\r\n            }\r\n        }\r\n\r\n        this.items = [];\r\n        this.itemsIds = {};\r\n\r\n        // load all entitys that match the property\r\n        if (this.property !== undefined) {\r\n            let items = this.$owner.getItems();\r\n            for (let j in items) {\r\n                if (items.hasOwnProperty(j)) {\r\n                    let item = items[j];\r\n                    if (item instanceof Data) {\r\n                        if (property === j) {\r\n                            // if (property == item.property) {\r\n                            let i = new BridgeElement(<Data>item);\r\n                            this.items.push(i);\r\n                            this.itemsIds[item.id] = i;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            this.redrawAllElements();\r\n        }\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        if (this.$owner !== null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    protected redrawAllElements() {\r\n        let children: HTMLCollection = this.$bodysection.children;\r\n        // remove old children\r\n        for (let i = 0; i < children.length; i++) {\r\n            let child = children.item(i);\r\n            // remove child\r\n            this.$bodysection.removeChild(child);\r\n        }\r\n\r\n        // load new children\r\n        for (let obj of this.items) {\r\n            // register listeners\r\n            obj.model.addListener(this);\r\n            // create tr\r\n            let row = this.createRow(obj);\r\n            this.$bodysection.appendChild(row);\r\n            this.cells[obj.id] = row;\r\n        }\r\n    }\r\n\r\n    private parseData(column: any): Column {\r\n        let col = new Column();\r\n        col.label = column.label || column.id;\r\n        col.attribute = column.attribute || column.label || column.id;\r\n        col.$element = document.createElement('th');\r\n        col.$element.innerHTML = col.label;\r\n        col.$element.draggable = true;\r\n\r\n        // resize Header\r\n        col.$resize = document.createElement('div');\r\n        col.$resize.classList.add('resize');\r\n        col.$element.appendChild(col.$resize);\r\n\r\n        return col;\r\n    }\r\n\r\n    private createRow(data: BridgeElement): HTMLTableRowElement {\r\n        let tr: HTMLTableRowElement = document.createElement('tr');\r\n\r\n        for (let id of this.columns) {\r\n            let td: HTMLTableDataCellElement = document.createElement('td');\r\n            tr.appendChild(td);\r\n            td.innerHTML = data.model.getValue(id.attribute);\r\n        }\r\n        return tr;\r\n    }\r\n\r\n    private addHeaderInfo(col: Column) {\r\n        let element: HTMLTableCellElement = col.$element;\r\n        let that = this;\r\n        element.classList.add('sort');\r\n        element.addEventListener('click',\r\n            function () {\r\n                that.sort(col);\r\n            },\r\n            false);\r\n    }\r\n\r\n    private columnDragEvent(type: string, e: DragEvent) {\r\n        if (type === 'dragstart') {\r\n            // Target (this) element is the source node.\r\n            this.moveElement.$element.style.opacity = '0.4';\r\n            e.dataTransfer.effectAllowed = 'move';\r\n            e.dataTransfer.setData('text/json', JSON.stringify(Util.toJson(this.moveElement)));\r\n        } else if (type === 'dragenter') {\r\n            // TO Nothing\r\n        } else if (type === 'dragleave') {\r\n            this.moveElement.$element.classList.remove('over');\r\n        } else if (type === 'dragover') {\r\n            if (e.preventDefault) {\r\n                e.preventDefault(); // Necessary. Allows us to drop.\r\n            }\r\n            for (let c = 0; c < this.columns.length; c++) {\r\n                if (this.columns[c].$element === e.target) {\r\n                    this.dragColumn = this.columns[c];\r\n                    this.dragPos = c;\r\n                    this.columns[c].$element.classList.add('over');\r\n                } else {\r\n                    this.columns[c].$element.classList.remove('over');\r\n                }\r\n            }\r\n            if (e.target === this.tableOption) {\r\n                this.tableOption.classList.add('over');\r\n                this.dragPos = this.columns.length;\r\n            } else {\r\n                this.tableOption.classList.remove('over');\r\n            }\r\n            e.dataTransfer.dropEffect = 'move';  // See the section on the DataTransfer object.\r\n        } else if (type === 'drop') {\r\n            // this / e.target is current target element.\r\n            if (e.stopPropagation) {\r\n                e.stopPropagation(); // stops the browser from redirecting.\r\n            }\r\n            if (this.movePos === this.dragPos) {\r\n                return;\r\n            }\r\n            // movePos -> dragPos\r\n            // See the section on the DataTransfer object.\r\n            // DataModel\r\n            this.columns.splice(this.movePos, 1);\r\n            if (this.movePos >= this.dragPos) {\r\n                this.columns.splice(this.dragPos, 0, this.moveElement);\r\n            } else {\r\n                this.columns.splice(this.dragPos - 1, 0, this.moveElement);\r\n            }\r\n\r\n            // Header Line\r\n            let line: HTMLElement = this.moveElement.$element.parentElement;\r\n            line.removeChild(this.moveElement.$element);\r\n            if (this.dragPos < this.columns.length) {\r\n                line.insertBefore(this.moveElement.$element, this.dragColumn.$element);\r\n            } else {\r\n                line.insertBefore(this.moveElement.$element, this.tableOption);\r\n            }\r\n\r\n            let oldElement: Element;\r\n            let newElement: Element;\r\n\r\n            // Now all Childs\r\n            for (let i = 0; i < this.$bodysection.children.length; i++) {\r\n                // Each line\r\n                line = <HTMLElement>this.$bodysection.children.item(i);\r\n                oldElement = line.children.item(this.movePos);\r\n                newElement = line.children.item(this.dragPos);\r\n                line.removeChild(oldElement);\r\n                line.insertBefore(oldElement, newElement);\r\n            }\r\n        } else if (type === 'dragend') {\r\n            // this/e.target is the source node.\r\n            this.moveElement.$element.style.opacity = '1';\r\n            for (let i = 0; i < this.columns.length; i++) {\r\n                this.columns[i].$element.classList.remove('over');\r\n            }\r\n            this.tableOption.classList.remove('over');\r\n        }\r\n    }\r\n\r\n    private addOptionItem(label: string, parent: HTMLElement, sub: boolean): HTMLElement {\r\n        let labelControl;\r\n        if (label) {\r\n            labelControl = document.createElement('a');\r\n            labelControl.appendChild(document.createTextNode(label));\r\n            labelControl.href = 'javascript:void(0);';\r\n            parent.appendChild(labelControl);\r\n        }\r\n        if (sub) {\r\n            let context = document.createElement('div');\r\n            context.classList.add('dropdown-content');\r\n            context.style.setProperty('position', 'absolute');\r\n            parent.appendChild(context);\r\n\r\n            /* When the user clicks on the button,\r\n             toggle between hiding and showing the dropdown content */\r\n            parent.addEventListener(\r\n                'click',\r\n                function () {\r\n                    context.classList.toggle('show');\r\n                },\r\n                false);\r\n            return context;\r\n        }\r\n        return labelControl;\r\n    }\r\n\r\n    private registerEvents(events: string[]) {\r\n        let that = this;\r\n        for (let i = 0; i < events.length; i++) {\r\n            this.$view.addEventListener(events[i], function (evt) {\r\n                return that.tableEvent(events[i], evt);\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\nclass Column {\r\n    label: string;\r\n    attribute: string;\r\n    $element: HTMLTableHeaderCellElement;\r\n    $resize: HTMLDivElement;\r\n    visible: boolean;\r\n}\r\n","import { AutoComplete } from './AutoComplete';\r\nimport { BR } from './BR';\r\nimport { Div } from './Div';\r\nimport { Label } from './Label';\r\n\r\nexport * from './Node';\r\nexport * from './Class';\r\nexport * from './SO';\r\nexport * from './Symbol';\r\n\r\nexport * from './BR';\r\nexport * from './Button';\r\nexport * from './Div';\r\nexport * from './Form';\r\nexport * from './Input';\r\nexport * from './Label';\r\nexport * from './Table';\r\nexport * from './HTML';\r\nexport * from './Dice';\r\nexport * from './AutoComplete';\r\nexport * from './Attribute';\r\nexport * from './Method';\r\nexport * from './ClazzProperty';\r\n\r\nnew AutoComplete();\r\nnew BR();\r\nnew Div();\r\nnew Label();\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class AddNode implements EventHandler {\r\n\r\n    public MIN_SIZE_TO_ADD_NODE: number = 30;\r\n    public MIN_SIZE_TO_ADD_TEXT: number = 10;\r\n    private graph: Graph;\r\n    private svgRect: SVGSVGElement;\r\n    private svgGroupAddNode: SVGSVGElement;\r\n    private svgTextAddNode: SVGSVGElement;\r\n    private svgTextRectAddNode: SVGSVGElement;\r\n    private isRectDrawing: boolean;\r\n    private isDrawToLeft: boolean;\r\n    private isDrawToTop: boolean;\r\n    private isBigEnoughForAddNode: boolean;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(AddNode.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(AddNode.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!this.canHandle()) {\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element.id !== 'RootElement') {\r\n            return false;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element.id === 'RootElement') {\r\n                    this.start(event, element);\r\n\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mousemove':\r\n                this.drawRect(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.removeRect();\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.addNode();\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawRect(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isRectDrawing) {\r\n            return;\r\n        }\r\n\r\n        evt.stopPropagation();\r\n\r\n        let width = Util.getEventX(evt) - this.x;\r\n        let height = Util.getEventY(evt) - this.y;\r\n\r\n        // rectangle is in a negative area, drawn to upper case. not possibble with svg\r\n        if (width < 0) {\r\n            this.isDrawToLeft = true;\r\n            width *= -1;\r\n        } else {\r\n            this.isDrawToLeft = false;\r\n        }\r\n\r\n        if (height < 0) {\r\n            this.isDrawToTop = true;\r\n            height *= -1;\r\n        } else {\r\n            this.isDrawToTop = false;\r\n        }\r\n\r\n        if (width > this.MIN_SIZE_TO_ADD_NODE && height > this.MIN_SIZE_TO_ADD_NODE) {\r\n            this.isBigEnoughForAddNode = true;\r\n        } else {\r\n            this.isBigEnoughForAddNode = false;\r\n        }\r\n\r\n        this.graph.root.style.cursor = 'pointer';\r\n\r\n        // if line wasnt draw\r\n        if (!this.svgRect) {\r\n\r\n            let rectAddNode = Util.createShape({\r\n                tag: 'rect',\r\n                id: 'addNodeRect',\r\n                x: this.x,\r\n                y: this.y,\r\n                width: 1,\r\n                height: 1,\r\n                class: 'SVGAddNode'\r\n            });\r\n\r\n            let group = Util.createShape({ tag: 'g', id: 'groupAddNode' });\r\n            group.appendChild(rectAddNode);\r\n\r\n            this.graph.root.appendChild(group);\r\n            this.svgRect = rectAddNode;\r\n            this.svgGroupAddNode = group;\r\n        }\r\n        else {\r\n\r\n            let svgRectBBox = this.svgRect.getBBox();\r\n\r\n            // if rect is big enough, show text as helper\r\n            if ((svgRectBBox.width > this.MIN_SIZE_TO_ADD_TEXT\r\n                || svgRectBBox.height > this.MIN_SIZE_TO_ADD_TEXT) && !this.svgTextAddNode) {\r\n\r\n                let textAddNode = Util.createShape({\r\n                    tag: 'text',\r\n                    x: this.x,\r\n                    y: this.y - 5,\r\n                    'font-family': 'Verdana',\r\n                    'font-size': 12,\r\n                    fill: 'black'\r\n                });\r\n                textAddNode.textContent = 'Hold on and move to create a new class';\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n\r\n\r\n                // get correct size of text node\r\n                let sizeClientRect: ClientRect = textAddNode.getBoundingClientRect();\r\n\r\n                let rectBackgroundForText = Util.createShape({\r\n                    tag: 'rect',\r\n                    x: this.x,\r\n                    y: this.y - sizeClientRect.height,\r\n                    width: sizeClientRect.width,\r\n                    height: sizeClientRect.height,\r\n                    fill: '#DDD',\r\n                    'stroke-width': 0\r\n                });\r\n\r\n                this.svgTextRectAddNode = rectBackgroundForText;\r\n                this.svgTextAddNode = textAddNode;\r\n                this.svgGroupAddNode.appendChild(rectBackgroundForText);\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n            }\r\n\r\n            if (this.isDrawToLeft) {\r\n                this.svgRect.setAttributeNS(null, 'x', '' + Util.getEventX(evt));\r\n            }\r\n\r\n            if (this.isDrawToTop) {\r\n                this.svgRect.setAttributeNS(null, 'y', '' + Util.getEventY(evt));\r\n            }\r\n\r\n            // set width and height\r\n            this.svgRect.setAttributeNS(null, 'width', width.toString());\r\n            this.svgRect.setAttributeNS(null, 'height', height.toString());\r\n\r\n            // set color\r\n            if (this.isBigEnoughForAddNode) {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode-ready');\r\n\r\n                // draw text\r\n            }\r\n            else {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeRect(): void {\r\n        this.isRectDrawing = false;\r\n        this.isBigEnoughForAddNode = false;\r\n\r\n        this.graph.root.style.cursor = 'default';\r\n\r\n        if (this.svgGroupAddNode) {\r\n            this.graph.root.removeChild(this.svgGroupAddNode);\r\n            this.svgGroupAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgRect) {\r\n            this.svgRect = undefined;\r\n        }\r\n\r\n        if (this.svgTextAddNode) {\r\n            this.svgTextAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgTextRectAddNode) {\r\n            this.svgTextRectAddNode = undefined;\r\n        }\r\n    }\r\n\r\n    private addNode(): void {\r\n\r\n        if (!this.isBigEnoughForAddNode) {\r\n            this.removeRect();\r\n            return;\r\n        }\r\n\r\n        this.removeRect();\r\n        let node = this.graph.addElementWithValues('Class', { x: this.x, y: this.y });\r\n        this.graph.drawElement(node);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isRectDrawing) {\r\n            return;\r\n        }\r\n        this.isRectDrawing = true;\r\n\r\n        this.x = Util.getEventX(evt);\r\n        this.y = Util.getEventY(evt);\r\n    }\r\n\r\n}\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement, Point } from '../elements/BaseElements';\r\nimport { GraphModel } from '../elements/Model';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Control } from '../Control';\r\nimport { Util } from '../util';\r\n\r\nexport class Drag implements EventHandler {\r\n\r\n    private element: DiagramElement;\r\n    private svgElement: SVGSVGElement;\r\n    private dragging = false;\r\n    private reinsert = false;\r\n    private mouseOffset = new Point();\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        if (!this.canHandle()) {\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if ((!this.dragging) && (element.id !== 'RootElement')) {\r\n                    this.element = element;\r\n                    this.svgElement = <SVGSVGElement>element.$view;\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mouseup':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n\r\n                break;\r\n            case 'mousemove':\r\n                if (this.dragging) {\r\n                    this.drag(event, element);\r\n                }\r\n                break;\r\n            case 'mouseleave':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Drag.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Drag.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private reset() {\r\n        this.dragging = false;\r\n        this.svgElement.style.cursor = 'pointer';\r\n\r\n        /*  WORKAROUND\r\n            Chrome got problem with the Node.appendChild() method.\r\n            Sometimes it works, sometimes not.\r\n            So the background is, in the drag method will the current element be appended\r\n            to front of the svg root.\r\n            If this happend, the click event won't fire.\r\n            So it will be fired manually.\r\n            This problem occurs only in chrome.\r\n        */\r\n        if (Util.isChrome()) {\r\n            let clickEvt = Util.createCustomEvent('click');\r\n            this.svgElement.dispatchEvent(clickEvt);\r\n        }\r\n    }\r\n\r\n    private start(evt: Event | any, element: Control) {\r\n\r\n        this.dragging = true;\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n        this.reinsert = true;\r\n\r\n        this.svgElement.style.cursor = 'move';\r\n    }\r\n\r\n    private drag(evt: Event | any, element: DiagramElement) {\r\n\r\n        if (this.reinsert) {\r\n            if (this.element.id !== 'RootElement') {\r\n                // nesseccary to set the dragged object on top of svg children\r\n                this.graph.root.appendChild(this.svgElement);\r\n            }\r\n\r\n            let dragEvent = Util.createCustomEvent('drag');\r\n            element.$view.dispatchEvent(dragEvent);\r\n        }\r\n        this.reinsert = false;\r\n\r\n        evt.stopPropagation();\r\n\r\n        const translation = this.svgElement.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        const sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        const transX = sx + evt.clientX - this.mouseOffset.x;\r\n        const transY = sy + evt.clientY - this.mouseOffset.y;\r\n        this.svgElement.setAttributeNS(null, 'transform', 'translate(' + transX + ' ' + transY + ')');\r\n        this.element.getPos().addNum(transX - sx, transY - sy);\r\n\r\n        if (this.element instanceof Node) {\r\n            (<Node>this.element).redrawEdges();\r\n        }\r\n\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n\r\n\r\n        // resize svg root\r\n        let maxX = this.element.getPos().x + this.element.getSize().x;\r\n        let maxY = this.element.getPos().y + this.element.getSize().y;\r\n\r\n        let domRectRoot = this.graph.root.getBoundingClientRect();\r\n        if(!domRectRoot){\r\n            return;\r\n        }\r\n\r\n        if(maxX > domRectRoot.width){\r\n            this.graph.root.setAttributeNS(null, 'width', '' + maxX);\r\n        }\r\n        \r\n        if(maxY > domRectRoot.height){\r\n            this.graph.root.setAttributeNS(null, 'height', '' + maxY);\r\n        }\r\n    }\r\n}\r\n","import PropertyChangeSupport from '../PropertyChangeSupport';\r\nimport Data from '../Data';\r\nimport {Adapter} from '../Adapter';\r\nimport ClazzProperty from '../elements/nodes/ClazzProperty';\r\n\r\nexport class GraphListener implements PropertyChangeSupport {\r\n    private $owner: ClazzProperty;\r\n\r\n    constructor(owner: ClazzProperty) {\r\n        this.$owner = owner;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        let adapter = this.$owner.getRoot().getAdapter();\r\n        if (adapter) {\r\n            // messages.add(\"{\\\"class\\\":\\\"de.uniks.networkparser.test.model.House\\\",\\\"id\\\":\\\"H1\\\",\\\"rem\\\":{\\\"floor\\\":4},\\\"upd\\\":{\\\"floor\\\":42}}\");\r\n            let myId =  this.$owner.$owner.getId();\r\n            if (myId && myId.length > 0) {\r\n                let pos = myId.indexOf(':');\r\n                if (pos > 0) {\r\n                    myId = myId.substring(0, pos).trim();\r\n                }\r\n            }\r\n            let myName = this.$owner.getName();\r\n            let remJson = {};\r\n            remJson[myName] = oldValue;\r\n            let updJson = {};\r\n            updJson[myName] = newValue;\r\n            let json = {};\r\n            json['id'] = myId;\r\n            json['rem'] = remJson;\r\n            json['upd'] = updJson;\r\n            let message = JSON.stringify(json);\r\n            (<Adapter> adapter).update(message);\r\n        }\r\n    }\r\n}\r\n","import {Graph} from '../elements/';\r\nimport {EventHandler, EventBus} from '../EventBus';\r\nimport {DiagramElement} from '../elements/';\r\nimport {Util} from '../util';\r\n\r\nexport class ImportFile implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(ImportFile.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(ImportFile.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        let type: string = typeof event;\r\n        if (type !== 'DragEvent') {\r\n            return false;\r\n        }\r\n        let evt: DragEvent = <DragEvent>event;\r\n        if (evt.type === 'dragover') {\r\n            this.handleDragOver(evt);\r\n        } else if (evt.type === 'dragleave') {\r\n            if (this.graph.$view !== evt.target) {\r\n                return false;\r\n            }\r\n            this.setBoardStyle('dragleave');\r\n        } else if (evt.type === 'drop') {\r\n            this.handleLoadFile(evt);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public setBoardStyle(typ: string): boolean {\r\n        let b = this.graph.$view;\r\n        Util.removeClass(b, 'Error');\r\n        Util.removeClass(b, 'Ok');\r\n        Util.removeClass(b, 'Add');\r\n        if (typ === 'dragleave') {\r\n            if (b['errorText']) {\r\n                b.removeChild(b['errorText']);\r\n                b['errorText'] = null;\r\n            }\r\n            return true;\r\n        }\r\n        Util.addClass(b, typ);\r\n        if (typ === 'Error') {\r\n            if (!b['errorText']) {\r\n                b['errorText'] = Util.create({tag: 'div', style: 'margin-top: 30%', value: 'NO TEXTFILE'});\r\n                b.appendChild(b['errorText']);\r\n            }\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private handleLoadFile(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n\r\n        let files = evt.dataTransfer.files; // FileList object.\r\n\r\n        if (files.length > 1) {\r\n            evt.dataTransfer.dropEffect = 'none';\r\n            return;\r\n        }\r\n\r\n        // files is a FileList of File objects. List some properties.\r\n        let reader  = new FileReader();\r\n        let output = [];\r\n        let htmlResult = '';\r\n        let that = this;\r\n        for (let i = 0, f; f = files[i]; i++) {\r\n            reader.onload = function(event) {\r\n                htmlResult = event.target['result'];\r\n                console.log('fileContent: ' + htmlResult);\r\n\r\n                // CHANGE TO INTERNAL OBJECT\r\n                if (that.graph) {\r\n                    that.graph.import(htmlResult);\r\n                }\r\n            };\r\n            reader.readAsText(f);\r\n        }\r\n        this.setBoardStyle('dragleave');\r\n    }\r\n\r\n    private handleDragOver(evt: DragEvent): void {\r\n        let error: boolean = true, n: string, f;\r\n        let files = evt.dataTransfer.files;\r\n        // process all File objects\r\n        if (files && files.length > 0) {\r\n            for (let i: number = 0; i < files.length; i += 1) {\r\n                f = files[i];\r\n                if (f.type.indexOf('text') === 0) {\r\n                    error = false;\r\n                } else if (f.type === '') {\r\n                    n = f.name.toLowerCase();\r\n                    if (n.indexOf('json', n.length - 4) !== -1) {\r\n                        error = false;\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            let items = evt.dataTransfer.items;\r\n            if (items && items.length > 0) {\r\n                for (let z = 0; z < items.length; z ++) {\r\n                    if (items[z].type === '' || items[z].type === 'text/plain') {\r\n                        error = false;\r\n                    }\r\n                }\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.\r\n        if (error) {\r\n            this.dragStyler(evt, 'Error');\r\n        } else if (evt.ctrlKey) {\r\n            this.dragStyler(evt, 'Add');\r\n        } else {\r\n            this.dragStyler(evt, 'Ok');\r\n        }\r\n        /* //evt.target['className'] += ' diagramLoadFile';\r\n        '//console.log('handDragOver');*/\r\n    }\r\n\r\n    private dragStyler(event: Event, typ: string) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n        this.setBoardStyle(typ);\r\n    }\r\n\r\n    private handleDragLeave(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n        evt.dataTransfer.dropEffect = 'link'; // Explicitly show this is a copy.\r\n        evt.target['className'] = 'diagram';\r\n        console.log('handDragLeave');\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Class } from '../elements/nodes/Class';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Association } from '../elements/index';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class NewEdge implements EventHandler {\r\n    private graph: Graph;\r\n    private svgLine: SVGSVGElement;\r\n    private isEdgeDrawing: boolean;\r\n    private sourceNode: Node;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    private lastTargetNode: Node;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(NewEdge.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(NewEdge.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!((<KeyboardEvent>event).ctrlKey || EventBus.isHandlerActiveOrFree('NewEdge', true))) {\r\n            this.removeLine();\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element instanceof Node) {\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n\r\n            case 'mousemove':\r\n                this.drawEdge(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.setNewEdgeToNode(event);\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default: break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawEdge(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        let lineToX = Util.getEventX(evt);\r\n        let lineToy = Util.getEventY(evt);\r\n\r\n        let path = `M${this.x} ${this.y} L${lineToX} ${lineToy}`;\r\n        // if line wasnt draw\r\n        if (!this.svgLine) {\r\n\r\n            let attr = {\r\n                tag: 'path',\r\n                id: 'newEdgePath',\r\n                d: path,\r\n                class: 'SVGEdge'\r\n            };\r\n\r\n            let shape = Util.createShape(attr);\r\n            this.svgLine = shape;\r\n\r\n            this.graph.root.appendChild(shape);\r\n            this.graph.root.appendChild(this.sourceNode.$view);\r\n        }\r\n        else {\r\n\r\n            // set new L path\r\n            this.svgLine.setAttributeNS(null, 'd', path);\r\n\r\n            // get node from position\r\n            let targetNode = this.graph.$graphModel.getNodeByPosition(Util.getEventX(evt), Util.getEventY(evt));\r\n\r\n            // if some targetnode is available, so highlight the node\r\n            if (targetNode) {\r\n\r\n                // reset the last one\r\n                if (this.lastTargetNode && this.lastTargetNode.id !== targetNode.id) {\r\n                    this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n                }\r\n\r\n                this.lastTargetNode = targetNode;\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz-drawedge');\r\n            }\r\n            else if (this.lastTargetNode) {\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeLine(): void {\r\n        this.isEdgeDrawing = false;\r\n\r\n        if (this.svgLine) {\r\n            this.graph.root.removeChild(this.svgLine);\r\n            this.svgLine = null;\r\n        }\r\n\r\n        if (this.lastTargetNode) {\r\n            this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n        }\r\n    }\r\n\r\n    private setNewEdgeToNode(event: Event | any): void {\r\n        // get node from position\r\n        let targetNode = this.graph.$graphModel\r\n            .getNodeByPosition(Util.getEventX(event), Util.getEventY(event));\r\n\r\n        if (!targetNode) {\r\n            this.removeLine();\r\n\r\n            return;\r\n        }\r\n\r\n        this.removeLine();\r\n        let edgeType = this.sourceNode.$defaulEdgeType || 'Association';\r\n\r\n        let jsonData = {\r\n            type: edgeType,\r\n            source: this.sourceNode.id,\r\n            target: targetNode.id\r\n        };\r\n\r\n        let newEdge = this.graph.$graphModel.addEdge(<any>jsonData, true);\r\n        this.graph.drawElement(newEdge);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        this.isEdgeDrawing = true;\r\n        this.sourceNode = element as Class;\r\n\r\n        this.x = this.sourceNode.getPos().x + (this.sourceNode.getSize().x / 2);\r\n        this.y = this.sourceNode.getPos().y + (this.sourceNode.getSize().y / 2);\r\n\r\n        // TODO: get this into util or select\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Node } from '../elements/nodes';\r\nimport { Association } from '../elements/edges';\r\nimport { Util } from '../util';\r\nimport { SymbolLibary } from '../elements/nodes/Symbol';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\nimport Attribute from '../elements/nodes/Attribute';\r\n\r\nexport class Select implements EventHandler {\r\n\r\n    private deleteShape: SVGSVGElement;\r\n    private addEdgeShape: SVGSVGElement;\r\n    private copyNodeShape: SVGSVGElement;\r\n    private graph: Graph;\r\n    private padding = 5;\r\n\r\n    private lastSelectedNode: Element;\r\n    private lastSelectedEdge: Element;\r\n\r\n    private isDragged: boolean;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.deleteShape = SymbolLibary.drawSVG({ type: 'Basket', background: true, id: 'trashcan', tooltip: 'Delete class' });\r\n        this.copyNodeShape = SymbolLibary.drawSVG({ type: 'Copynode', background: true, id: 'copyNode', tooltip: 'Copy class' });\r\n        this.addEdgeShape = SymbolLibary.drawSVG({ type: 'Edgeicon', background: true, id: 'addEdge', tooltip: 'Click and drag to connect this class' });\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        let x = Util.getEventX(event);\r\n        let y = Util.getEventY(event);\r\n\r\n        event.stopPropagation();\r\n        if (event.type === 'drag') {\r\n            this.isDragged = true;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            if (element instanceof Node) {\r\n                this.lastSelectedNode = <Element>element.$view;\r\n            }\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n        }\r\n\r\n        if (event.target['id'] === 'background' || element === this.graph.$graphModel) {\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let e = <Node>element;\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.graph.root.appendChild(this.addEdgeShape);\r\n            this.graph.root.appendChild(this.copyNodeShape);\r\n            this.graph.root.appendChild(element.$view);\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'visible');\r\n\r\n            let x = (e.getPos().x + e.getSize().x) + 5;\r\n            let y = e.getPos().y;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y + this.padding})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.copyNodeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 40 + this.padding})`);\r\n            this.copyNodeShape.onclick = (evt) => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let copyClass = (element).copy();\r\n                copyClass.withPos(nextFreePosition.x, nextFreePosition.y);\r\n                this.graph.drawElement(copyClass);\r\n            };\r\n\r\n            this.addEdgeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 80 + this.padding})`);\r\n            this.addEdgeShape.onmousedown = function () {\r\n                EventBus.setActiveHandler('NewEdge');\r\n                element.$view.dispatchEvent(Util.createCustomEvent('mousedown'));\r\n            };\r\n        }\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let clazz = <Node>element;\r\n\r\n            if (Util.isChrome()) {\r\n                if (this.lastSelectedNode && element.id === this.lastSelectedNode.id && !this.isDragged) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            this.isDragged = false;\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            this.lastSelectedNode = <Element>element.$view;\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete class');\r\n\r\n            // draw textbox to edit clazz in one line\r\n            let divInlineEdit = document.createElement('div');\r\n            divInlineEdit.id = 'inlineEdit';\r\n            divInlineEdit.style.position = 'absolute';\r\n            divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n            divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n            divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n            divInlineEdit.style.zIndex = '42';\r\n\r\n            let inputText = document.createElement('input');\r\n            inputText.type = 'text';\r\n            inputText.style.width = '100%';\r\n            inputText.placeholder = 'Add properties, edit label';\r\n\r\n            divInlineEdit.appendChild(inputText);\r\n            document.body.appendChild(divInlineEdit);\r\n\r\n            inputText.addEventListener('focusout', (evt) => {\r\n\r\n                if (Util.isChrome()) {\r\n                    // only if input is empty, remove the inline edit function\r\n                    if ((!inputText.value || inputText.value.length === 0) && (!this.lastSelectedNode || element.id !== this.lastSelectedNode.id)) {\r\n                        this.removeLastInlineEdit();\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                // only if input is empty, remove the inline edit function\r\n                if ((!inputText.value || inputText.value.length === 0)) {\r\n                    this.removeLastInlineEdit();\r\n                }\r\n            });\r\n\r\n            let g = this.graph;\r\n            let propertyTypes: string[] = ['boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'short', 'String', 'void'];\r\n            inputText.addEventListener('keydown', function (evt) {\r\n\r\n                let keyCode = (<any>evt).which;\r\n                let inputValue = <any>inputText.value;\r\n\r\n                if (Util.endsWith(inputValue, ':') && !document.getElementById('selectPropertyType')) {\r\n                    let selectType = document.createElement('select');\r\n                    selectType.id = 'selectPropertyType';\r\n                    selectType.style.width = '100%';\r\n\r\n                    for (let type of propertyTypes) {\r\n                        let selectOption = document.createElement('option');\r\n                        selectOption.value = type;\r\n                        selectOption.innerHTML = type;\r\n                        selectType.appendChild(selectOption);\r\n                    }\r\n\r\n                    selectType.addEventListener('change', function (evt) {\r\n                        let inputValueSplitted = inputValue.split(':');\r\n                        let selectedPropertyType = selectType.options[selectType.selectedIndex].value;\r\n\r\n                        if (inputValueSplitted.length >= 1) {\r\n                            inputText.value = inputValueSplitted[0].trim() + ' : ' + selectedPropertyType;\r\n                            inputText.focus();\r\n                        }\r\n                    });\r\n\r\n                    divInlineEdit.appendChild(selectType);\r\n                }\r\n                else if (!Util.includes(inputValue, ':')) {\r\n                    let selectType = document.getElementById('selectPropertyType');\r\n\r\n                    if (selectType) {\r\n                        selectType.remove();\r\n                    }\r\n                }\r\n\r\n                if (keyCode !== 13) {\r\n                    return;\r\n                }\r\n\r\n                // attribute\r\n                if ((Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) === false) {\r\n                    if (Util.includes(inputValue, ':')) {\r\n                        clazz.addAttribute(inputValue.trim());\r\n                        clazz.reDraw();\r\n                    } else if (Util.includes(inputValue, '=') ) {\r\n                        let attr: Attribute = null;\r\n                        let name = inputValue.substring(0, inputValue.indexOf('=')).trim();\r\n                        for (let child of clazz.getAttributes() ) {\r\n                            if ( name === child.getName()) {\r\n                                attr = child;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (attr) {\r\n                            attr.updateValue(inputValue.substring(inputValue.indexOf('=') + 1).trim());\r\n                        }\r\n                        clazz.reDraw();\r\n                    }\r\n                }\r\n\r\n                // method\r\n                else if (Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) {\r\n                    clazz.addMethod(inputValue.trim());\r\n                    clazz.reDraw();\r\n                }\r\n                // label\r\n                else if (inputValue.trim().split(' ').length === 1 && inputValue.trim().length > 0) {\r\n                    clazz.updateLabel(inputValue.trim());\r\n                }\r\n\r\n                // reset size\r\n                divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n                divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n                divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n\r\n                inputText.value = '';\r\n\r\n                // remove combobox to select type of property\r\n                let selectType = document.getElementById('selectPropertyType');\r\n\r\n                if (selectType) {\r\n                    selectType.remove();\r\n                }\r\n\r\n                // TODO: reload propertiespanel. not working!\r\n                // event wont dispatch\r\n                // let customEvt = Util.createCustomEvent(EventBus.RELOADPROPERTIES);\r\n                // element.$view.dispatchEvent(customEvt);\r\n            });\r\n\r\n            (<any>divInlineEdit.children[0]).focus();\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Association) {\r\n            this.graph.root.appendChild(element.$view);\r\n            this.graph.root.appendChild(element.$sNode.$view);\r\n            this.graph.root.appendChild(element.$tNode.$view);\r\n\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete edge');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            let edge = <Association>element;\r\n            this.lastSelectedEdge = edge.$view;\r\n\r\n            Util.addClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Select.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Select.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private setTooltipOfShape(shape: SVGSVGElement, tooltip: string): void {\r\n        if (!shape || !shape.hasChildNodes()) {\r\n            return;\r\n        }\r\n\r\n        let titleElement = <SVGSVGElement>shape.childNodes[0];\r\n        if (!titleElement || titleElement.tagName !== 'title') {\r\n            return;\r\n        }\r\n\r\n        titleElement.textContent = tooltip;\r\n    }\r\n\r\n    private resetLastSelectedElements() {\r\n        // reset the last one\r\n        if (this.lastSelectedNode) {\r\n            Util.removeClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.lastSelectedNode = undefined;\r\n        }\r\n\r\n        if (this.lastSelectedEdge) {\r\n            Util.removeClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n            this.lastSelectedEdge = undefined;\r\n        }\r\n\r\n        this.removeLastInlineEdit();\r\n    }\r\n\r\n    private removeLastInlineEdit(): void {\r\n        // remove last inline edit of clazz\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n\r\n            // its not supported in internet explorer\r\n            // lastInlineEdit.remove();\r\n        }\r\n    }\r\n\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\n\r\nexport class Zoom implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n    }\r\n\r\n    public handle(e: any, element: DiagramElement): boolean {\r\n        let delta = e.deltaY || e.wheelDeltaY || -e.wheelDelta;\r\n        let d = 1 + (delta / 1000);\r\n\r\n        let values = this.graph.root.getAttribute('viewBox').split(' ');\r\n        const newViewBox = `${values[0]} ${values[1]} ${parseInt(values[2]) * d} ${parseInt(values[3]) * d}`;\r\n        this.graph.root.setAttribute('viewBox', newViewBox);\r\n\r\n        e.preventDefault();\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Zoom.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Zoom.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n}\r\n","export * from './Drag';\r\nexport * from './Select';\r\nexport * from './Zoom';\r\nexport * from './NewEdge';\r\nexport * from './ImportFile';\r\nexport * from './AddNode';\r\n","import { Association } from '../elements/edges';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport Layout from './Layout';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\n\r\nexport class DagreLayout implements Layout {\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        if (!window['dagre']) {\r\n            return;\r\n        }\r\n        let model = graph.$graphModel;\r\n        let g = new window['dagre'].graphlib.Graph();\r\n\r\n        g.setGraph({ marginx: 100, marginy: 20 }).setDefaultEdgeLabel(function () {\r\n            return {};\r\n        });\r\n\r\n        for (let node of model.nodes) {\r\n            g.setNode(node.id, { width: node.getSize().x, height: node.getSize().y });\r\n        }\r\n\r\n        for (let edge of model.edges) {\r\n            g.setEdge(edge.$sNode.id, edge.$tNode.id);\r\n        }\r\n\r\n        window['dagre'].layout(g);\r\n\r\n        g.nodes().forEach(function (nodeId: string) {\r\n            for (let node of model.nodes) {\r\n                if (node.id === nodeId) {\r\n                    node.withPos(g.node(nodeId).x - g.node(nodeId).width / 2, g.node(nodeId).y - g.node(nodeId).height / 2);\r\n                }\r\n            }\r\n        });\r\n        g.edges().forEach(function (e: any) {\r\n            for (let edge of model.edges) {\r\n                if (edge.$sNode.id === e.v && edge.$tNode.id === e.w) {\r\n                    let size = g.edge(e).points.length;\r\n                    edge.clearPoints();\r\n                    for (let i = 0; i < size; i++) {\r\n                        let point: SVGPoint = g.edge(e).points[i];\r\n                        edge.addPoint(point.x, point.y);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n}\r\n","import {DiagramElement} from '../elements/BaseElements';\r\nimport Layout from './Layout';\r\nimport {Graph} from '../elements/Graph';\r\nimport {Association} from '../elements/edges/Association';\r\nimport {Node} from '../elements/nodes/Node';\r\nimport {Control} from '../Control';\r\n\r\nexport class LayoutGraphMin {\r\n    public nodes: Object = {};\r\n    public edges: Array<Object> = [];\r\n    public outEdges: Object = {};\r\n    public inEdges: Object = {};\r\n    public dummyNodes: Array<LayoutGraphNode> = [];\r\n    public dummyEdges: Object = {};\r\n    public count: number = 0;\r\n    public minRank: number = Number.POSITIVE_INFINITY;\r\n    public maxRank: number = 0;\r\n    public maxHeight: number = 0;\r\n    public maxWidth: number = 0;\r\n    public ranksep: number = 0;\r\n    public edgesLabel: Array<Object> = [];\r\n\r\n    public nodeCount(): number {\r\n        return this.count;\r\n    }\r\n\r\n    public node(id: string) {\r\n        return this.nodes[id];\r\n    }\r\n\r\n    public setNode(id: string, n: LayoutGraphNode) {\r\n        if (n && !this.nodes[id]) {\r\n            this.nodes[id] = n;\r\n            this.count = this.count + 1;\r\n        } else if (!n && this.nodes[id]) {\r\n            delete this.nodes[id];\r\n        }\r\n    }\r\n}\r\n\r\nexport class LayoutGraphNode {\r\n    public id: string;\r\n    public width: number;\r\n    public height: number;\r\n    public x: number;\r\n    public y: number;\r\n    public edgeObj: LayoutGraphEdge;\r\n    public rank: number;\r\n\r\n    constructor(id: string, width: number, height: number, x: number, y: number) {\r\n        this.id = id;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n\r\nexport class LayoutGraphEdge {\r\n    public source: string;\r\n    public target: string;\r\n}\r\n\r\n// \t\t\t\t######################################################### DagreGraph #########################################################\r\nexport class DagreLayoutMin implements Layout {\r\n    public static EDGE_KEY_DELIM = '\\x01';\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        let g, layoutNode, nodes, newEdge, edges;\r\n        let i, n, x, y, sId, tId, split = DagreLayoutMin.EDGE_KEY_DELIM;\r\n        let e: Association;\r\n\r\n        nodes = node['nodes'];\r\n        edges = node['edges'];\r\n        g = new LayoutGraphMin();\r\n\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            g.setNode(n.id, new LayoutGraphNode(n.id, n.getSize().x, n.getSize().y, n.getPos().x, n.getPos().y));\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            sId = this.getNodeId(e.$sNode);\r\n            tId = this.getNodeId(e.$tNode);\r\n            if (sId > tId) {\r\n                let tmp = tId;\r\n                tId = sId;\r\n                sId = tmp;\r\n            }\r\n            let idAB = sId + split + tId + split;\r\n            let idBA = tId + split + sId + split;\r\n            if (sId !== tId && g.edgesLabel.indexOf(idAB) < 0 && g.edgesLabel.indexOf(idBA) < 0) {\r\n                newEdge = {source: sId, target: tId, minlen: 1, weight: 1};\r\n                g.edges.push(newEdge);\r\n                g.edgesLabel.push(idAB);\r\n                // In Edges\r\n                if (!g.inEdges[tId]) {\r\n                    g.inEdges[tId] = [];\r\n                }\r\n                g.inEdges[tId].push(newEdge);\r\n\r\n                // Out Edges\r\n                if (!g.outEdges[sId]) {\r\n                    g.outEdges[sId] = [];\r\n                }\r\n                g.outEdges[sId].push(newEdge);\r\n            }\r\n        }\r\n        this.layouting(g);\r\n        // Set the layouting back\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            layoutNode = g.node(n.id);\r\n            x = n.getPos().x;\r\n            y = n.getPos().y;\r\n            if (x < 1 && y < 1) {\r\n                n.withPos(Math.ceil(layoutNode.x), Math.ceil(layoutNode.y));\r\n            }\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            // OBSOLETE method:  e.calc(graph.canvas);\r\n        }\r\n        graph.draw();\r\n    }\r\n\r\n    public getNodeId(node: Control): string {\r\n        if (node.$owner) {\r\n            return this.getNodeId(node.$owner) || node.id;\r\n        }\r\n        return node.id;\r\n    }\r\n\r\n    public layouting(g: LayoutGraphMin) {\r\n        this.longestPath(g);\r\n        this.normalizeRanks(g);\r\n        this.normalizeEdge(g);\r\n        // this.setSimpleOrder(g);\r\n        this.order(g);\r\n        g.ranksep = 25;\r\n        // remove Dummy\r\n        this.removeDummy(g);\r\n        this.position(g);\r\n    }\r\n\r\n    public setSimpleOrder(g: LayoutGraphMin) {\r\n        let i, n;\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            n.order = n.rank;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Applies heuristics to minimize edge crossings in the graph and sets the best\r\n     * order solution as an order attribute on each node.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Graph must be DAG\r\n     *    2. Graph nodes must be objects with a \"rank\" attribute\r\n     *    3. Graph edges must have the \"weight\" attribute\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Graph nodes will have an \"order\" attribute based on the results of the\r\n     *       algorithm.\r\n     */\r\n    public order(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        let visited = {};\r\n        let node, n, order, i;\r\n        for (i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (n in g.nodes) {\r\n            if (visited[n]) {\r\n                continue;\r\n            }\r\n            visited[n] = true;\r\n            node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank].push(n);\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                g.nodes[layering[order][n]].order = parseInt(n);\r\n            }\r\n        }\r\n        // Fix resolve conflict\r\n        for (order in layering) {\r\n            if (layering[order].length > 1) {\r\n                for (n in layering[order]) {\r\n                    if (layering[order].hasOwnProperty(n) === false) {\r\n                        continue;\r\n                    }\r\n                    let name = layering[order][n];\r\n                    let sum = 0;\r\n                    let weight = 1;\r\n                    let edges = g.dummyEdges[name];\r\n                    if (edges) {\r\n                        for (i in edges) {\r\n                            if (edges.hasOwnProperty(i) === false) {\r\n                                continue;\r\n                            }\r\n                            let edge = edges[i];\r\n                            let nodeU = g.node(edge.target);\r\n                            sum = sum + (edge.weight * nodeU.order);\r\n                            weight = weight + edge.weight;\r\n                        }\r\n                    }\r\n                    g.node(name).barycenter = sum / weight;\r\n                    g.node(name).weight = weight;\r\n                }\r\n            } else if (layering[order].length > 0) {\r\n                for (n in layering[order]) {\r\n                    let name = layering[order][n];\r\n                    g.node(name).barycenter = 1;\r\n                    g.node(name).weight = 1;\r\n                }\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                let node = g.nodes[layering[order][n]];\r\n                node.order = parseInt(n) + node.barycenter * node.weight;\r\n                if (isNaN(node.order)) {\r\n                    console.log('ERROR');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public removeDummy(g: LayoutGraphMin) {\r\n        for (let z in g.dummyNodes) {\r\n            let node = g.dummyNodes[z];\r\n            g.setNode(node.id, null);\r\n        }\r\n        g.dummyNodes = [];\r\n        g.dummyEdges = {};\r\n    }\r\n\r\n    /*\r\n     * Breaks any long edges in the graph into short segments that span 1 layer\r\n     * each. This operation is undoable with the denormalize function.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. The input graph is a DAG.\r\n     *    2. Each node in the graph has a \"rank\" property.\r\n     *\r\n     * Post-condition:\r\n     *\r\n     *    1. All edges in the graph have a length of 1.\r\n     *    2. Dummy nodes are added where edges have been split into segments.\r\n     *    3. The graph is augmented with a \"dummyChains\" attribute which contains\r\n     *       the first dummy in each chain of dummy nodes produced.\r\n     */\r\n    public normalizeEdge(g: LayoutGraphMin): void {\r\n        let i: number = 1;\r\n        for (let id in g.edges) {\r\n            let e: LayoutGraphEdge = <LayoutGraphEdge>g.edges[id];\r\n            let v: string = e.source;\r\n            let vRank = g.node(v).rank;\r\n            const w: string = e.target;\r\n            const wRank: number = g.node(w).rank;\r\n            let name: string;\r\n\r\n            if (wRank === vRank + 1) {\r\n                continue;\r\n            }\r\n\r\n            let dummy;\r\n            for (vRank = vRank + 1; vRank < wRank; ++vRank) {\r\n                name = '_d' + e.source + e.target + (i++);\r\n                let newEdge = {source: v, target: name, minlen: 1, weight: 1};\r\n                dummy = new LayoutGraphNode(name, 0, 0, 0, 0);\r\n                dummy.edgeObj = e;\r\n                dummy.rank = vRank;\r\n                // Dummy Edges\r\n                if (!g.dummyEdges[v]) {\r\n                    g.dummyEdges[v] = [];\r\n                }\r\n                g.dummyEdges[v].push(newEdge);\r\n\r\n                g.dummyNodes.push(dummy);\r\n                g.setNode(dummy.id, dummy);\r\n                v = name;\r\n            }\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Initializes ranks for the input graph using the longest path algorithm. This\r\n     * algorithm scales well and is fast in practice, it yields rather poor\r\n     * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\r\n     * ranks wide and leaving edges longer than necessary. However, due to its\r\n     * speed, this algorithm is good for getting an initial ranking that can be fed\r\n     * into other algorithms.\r\n     *\r\n     * This algorithm does not normalize layers because it will be used by other\r\n     * algorithms in most cases. If using this algorithm directly, be sure to\r\n     * run normalize at the end.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Input graph is a DAG.\r\n     *    2. Input graph node labels can be assigned properties.\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Each node will be assign an (unnormalized) \"rank\" property.\r\n     */\r\n    public longestPath(g: LayoutGraphMin) {\r\n        let i, n, visited = [];\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            visited.push(i);\r\n            n.rank = this.findAllPaths(g, n, 0, visited);\r\n            g.minRank = Math.min(g.minRank, n.rank);\r\n        }\r\n    }\r\n\r\n    public findAllPaths(g: LayoutGraphMin, n: Node, currentCost: number, path: Array<String>) {\r\n        let min: number = 0;\r\n        let id: string;\r\n        let z: number;\r\n        let target;\r\n        if (g.outEdges[n.id]) {\r\n            for (z = 0; z < g.outEdges[n.id].length; z++) {\r\n                id = g.outEdges[n.id][z].target;\r\n                target = g.nodes[id];\r\n                if (path[id]) {\r\n                    min = Math.min(min, target.rank);\r\n                } else if (path.indexOf(id) < 0) {\r\n                    min = Math.min(min, this.findAllPaths(g, target, currentCost - 2, path));\r\n                } else {\r\n                    min = currentCost;\r\n                }\r\n            }\r\n            return min;\r\n        }\r\n        return currentCost;\r\n    }\r\n\r\n    /*\r\n     * Adjusts the ranks for all nodes in the graph such that all nodes v have\r\n     * rank(v) >= 0 and at least one node w has rank(w) = 0.\r\n     */\r\n    public normalizeRanks(g: LayoutGraphMin) {\r\n        let min = g.minRank;\r\n        let value;\r\n        g.maxRank = Number.NEGATIVE_INFINITY;\r\n        g.maxHeight = 0;\r\n        g.maxWidth = 0;\r\n        for (let i in g.nodes) {\r\n            let node = g.nodes[i];\r\n            if (node.rank !== undefined) {\r\n                node.rank -= min;\r\n                value = Math.abs(node.rank);\r\n                if (value > g.maxRank) {\r\n                    g.maxRank = value;\r\n                }\r\n                g.maxHeight = Math.max(g.maxHeight, node.height);\r\n                g.maxWidth = Math.max(g.maxWidth, node.width);\r\n            }\r\n        }\r\n    }\r\n\r\n    public position(g: LayoutGraphMin) {\r\n        this.positionY(g);\r\n        let list = this.positionX(g);\r\n        for (let i in list) {\r\n            for (let pos in list[i]) {\r\n                if (list[i].hasOwnProperty(pos) === false) {\r\n                    continue;\r\n                }\r\n                if (g.node(list[i][pos])) {\r\n                    g.node(list[i][pos]).x = parseInt(pos) * g.maxWidth;\r\n                }\r\n            }\r\n\r\n        }\r\n    }\r\n\r\n    public positionY(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        let rankSep = g.ranksep;\r\n        let prevY = 0;\r\n        for (let layer in layering) {\r\n            let maxHeight = g.maxHeight;\r\n            for (let v in layering[layer]) {\r\n                if (layering[layer].hasOwnProperty(v) === false) {\r\n                    continue;\r\n                }\r\n                let id = layering[layer][v];\r\n                g.nodes[id].y = prevY + maxHeight / 2;\r\n            }\r\n            prevY += maxHeight + rankSep;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\r\n     * function will produce a matrix with the ids of each node.\r\n     */\r\n    public buildLayerMatrix(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        for (let i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (let n in g.nodes) {\r\n            let node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank][node.order] = n;\r\n            }\r\n        }\r\n        return layering;\r\n    }\r\n\r\n    public positionX(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        return layering;\r\n    }\r\n}\r\n","import { Point } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport Layout from './Layout';\r\n\r\nexport class Random implements Layout {\r\n\r\n  public layout(graph: Graph) {\r\n\r\n    let model = graph.$graphModel;\r\n\r\n    if (model.nodes) {\r\n      for (let node of model.nodes) {\r\n        let pos: Point = node.getPos();\r\n        if (pos.x === 0 && pos.y === 0) {\r\n          let x = Util.getRandomInt(0, graph.canvasSize.width);\r\n          let y = Util.getRandomInt(0, graph.canvasSize.height);\r\n          node.withPos(x, y);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","export * from './DagreLayout';\r\nexport * from './Random';\r\nexport * from './DagreLayoutMin';\r\n\r\nimport {DagreLayout} from './DagreLayout';\r\nimport {DagreLayoutMin} from './DagreLayoutMin';\r\nimport {Random} from './Random';\r\nnew DagreLayout();\r\nnew DagreLayoutMin();\r\nnew Random();\r\n","import {VirtualKeyBoard} from './VirtualKeyBoard';\r\n\r\nexport {Point} from './elements/BaseElements';\r\nexport {Bridge, DelegateAdapter} from './Bridge';\r\nexport {Graph} from './elements/Graph';\r\nexport * from './elements/nodes';\r\nexport * from './elements/edges';\r\nexport * from './adapters';\r\nexport * from './UML';\r\nimport {Point} from './elements/BaseElements';\r\nimport {Graph} from './elements/Graph';\r\nimport {ClassEditor} from './elements/ClassEditor';\r\nimport {Bridge} from './Bridge';\r\nimport {Util} from './util';\r\nimport * as nodes  from './elements/nodes';\r\nimport * as edges from './elements/edges';\r\nimport {ScrumBoard} from './ScrumBoard';\r\n\r\nif (!window['Point']) {\r\n    window['Point'] = Point;\r\n    window['Graph'] = Graph;\r\n    window['bridge'] = new Bridge();\r\n    window['Util'] = Util;\r\n    window['Class'] = nodes.Class;\r\n    window['Association'] = edges.Association;\r\n    window['SymbolLibary'] = nodes.SymbolLibary;\r\n    window['ClassEditor'] = ClassEditor;\r\n    window['VirtualKeyBoard'] = VirtualKeyBoard;\r\n    window['ScrumBoard'] = ScrumBoard;\r\n}\r\n","'use strict';\r\nimport { CSS } from './CSS';\r\nimport { Node } from './elements/nodes/Node';\r\nimport { DiagramElement, Point } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport class Util {\r\n\r\n    public static isAutoSave: boolean;\r\n\r\n    static getRandomInt(min: number, max: number): number {\r\n        return Math.floor(Math.random() * (max - min + 1)) + min;\r\n    }\r\n\r\n    static createShape(attrs: any): SVGSVGElement {\r\n        let xmlns = attrs.xmlns || 'http://www.w3.org/2000/svg';\r\n        let shape = document.createElementNS(xmlns, attrs.tag);\r\n\r\n        for (let attr in attrs) {\r\n            if (!attrs.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr !== 'tag') {\r\n                shape.setAttribute(attr, attrs[attr]);\r\n\r\n            }\r\n        }\r\n        return <SVGSVGElement><any>shape;\r\n    }\r\n\r\n    static toPascalCase(value: string): string {\r\n        value = value.charAt(0).toUpperCase() + value.substring(1).toLowerCase();\r\n        return value;\r\n    }\r\n\r\n    static isSVG(tag: string): boolean {\r\n        let i,\r\n            list = ['svg', 'path', 'polygon', 'polyline', 'line', 'title', 'rect', 'filter', 'feGaussianBlur', 'feOffset', 'feBlend', 'linearGradient', 'stop', 'text', 'symbol', 'textPath', 'defs', 'fegaussianblur', 'feoffset', 'feblend', 'circle', 'ellipse', 'g'];\r\n        for (i = 0; i < list.length; i += 1) {\r\n            if (list[i] === tag) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    static createHTML(node: any): HTMLElement {\r\n        return <HTMLElement>this.create(node);\r\n    }\r\n    static create(node: any): Element {\r\n        let style, item, xmlns, key, tag, k;\r\n        if (document.createElementNS && (this.isSVG(node.tag) || node.xmlns)) {\r\n            if (node.xmlns) {\r\n                xmlns = node.xmlns;\r\n            } else {\r\n                xmlns = 'http://www.w3.org/2000/svg';\r\n            }\r\n            if (node.tag === 'img' && xmlns) {\r\n                item = document.createElementNS(xmlns, 'image');\r\n                item.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\r\n                item.setAttributeNS('http://www.w3.org/1999/xlink', 'href', node.src);\r\n            } else {\r\n                item = document.createElementNS(xmlns, node.tag);\r\n            }\r\n        } else {\r\n            item = document.createElement(node.tag);\r\n        }\r\n        tag = node.tag.toLowerCase();\r\n        for (key in node) {\r\n            if (!node.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            k = key.toLowerCase();\r\n            if (node[key] === null) {\r\n                continue;\r\n            }\r\n            if (k === 'tag' || k.charAt(0) === '$' || k === '$graphModel') {\r\n                continue;\r\n            }\r\n            if (k.charAt(0) === '#') {\r\n                item[k.substring(1)] = node[key];\r\n                continue;\r\n            }\r\n            if (k === 'rotate') {\r\n                item.setAttribute('transform', 'rotate(' + node[key] + ',' + node.$graphModel.x + ',' + node.$graphModel.y + ')');\r\n                continue;\r\n            }\r\n            if (k === 'value') {\r\n                if (!node[key]) {\r\n                    continue;\r\n                }\r\n                if (tag !== 'input') {\r\n                    if (tag === 'text') {// SVG\r\n                        item.appendChild(document.createTextNode(node[key]));\r\n                    } else {\r\n                        item.innerHTML = node[key];\r\n                    }\r\n                } else {\r\n                    item[key] = node[key];\r\n                }\r\n                continue;\r\n            }\r\n            if (k.indexOf('on') === 0) {\r\n                this.bind(item, k.substring(2), node[key]);\r\n                continue;\r\n            }\r\n            if (k.indexOf('-') >= 0) {\r\n                item.style[key] = node[key];\r\n            } else {\r\n                if (k === 'style' && typeof (node[key]) === 'object') {\r\n                    for (style in node[key]) {\r\n                        if (!node[key].hasOwnProperty(style)) {\r\n                            continue;\r\n                        }\r\n                        if (node[key][style]) {\r\n                            if ('transform' === style) {\r\n                                item.style.transform = node[key][style];\r\n                                item.style.msTransform = item.style.MozTransform = item.style.WebkitTransform = item.style.OTransform = node[key][style];\r\n                            } else {\r\n                                item.style[style] = node[key][style];\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    item.setAttribute(key, node[key]);\r\n                }\r\n            }\r\n        }\r\n        if (node.$parent) {\r\n            node.$parent.appendChild(item);\r\n        }\r\n        if (node.$graphModel) {\r\n            item.$graphModel = node.$graphModel;\r\n        }\r\n        return item;\r\n    }\r\n\r\n    static setSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttribute('width', value);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.setAttribute('height', value);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setAttributeSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttributeNS(null, 'width', value);\r\n        value = Util.getValue(height);\r\n        item.setAttributeNS(null, 'height', value);\r\n    }\r\n\r\n    static setStyleSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setPos(item: any, x: number, y: number): void {\r\n        if (item.x && item.x.baseVal) {\r\n            item.style.left = x + 'px';\r\n            item.style.top = y + 'px';\r\n        } else {\r\n            item.x = x;\r\n            item.y = y;\r\n        }\r\n    }\r\n\r\n    static getValue(value: string | number): number {\r\n        return parseInt(('0' + value).replace('px', ''), 10);\r\n    }\r\n\r\n    static isIE(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('.net') > -1;\r\n    }\r\n\r\n    static isEdge(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('edge') > -1;\r\n    }\r\n\r\n    static isFireFox(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n    }\r\n\r\n    static isSafari(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        return navigator.userAgent.toLowerCase().indexOf('safari') > -1 && !isEdge;\r\n    }\r\n\r\n    static isOpera(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('opera') > -1;\r\n    }\r\n\r\n    static isChrome(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        let isSafari = Util.isSafari();\r\n        return navigator.userAgent.toLowerCase().indexOf('chrome') > -1 && !isEdge && isSafari;\r\n    }\r\n\r\n    static getEventX(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetX'] : event.layerX;\r\n    }\r\n\r\n    static getEventY(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetY'] : event.layerY;\r\n    }\r\n\r\n    static getNumber(str: string): number {\r\n        return parseInt((str || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    static getStyle(styleProp: string): CSS {\r\n        let i, style, diff, current, ref, el = document.createElement('div'), css;\r\n        document.body.appendChild(el);\r\n        css = new CSS(styleProp);\r\n        ref = new CSS(styleProp, el).css;\r\n        style = window.getComputedStyle(el, null);\r\n        el.className = styleProp;\r\n        current = new CSS(styleProp, el).css;\r\n        diff = Util.getNumber(style.getPropertyValue('border-width'));\r\n        for (i in current) {\r\n            if (!current.hasOwnProperty(i)) {\r\n                continue;\r\n            }\r\n            if (i === 'width' || i === 'height') {\r\n                if (Util.getNumber(current[i]) !== 0 && Util.getNumber(current[i]) + diff * 2 !== Util.getNumber(ref[i])) {\r\n                    css.add(i, current[i]);\r\n                }\r\n            } else if (current[i] !== ref[i]) {\r\n                css.add(i, current[i]);\r\n            }\r\n        }\r\n        document.body.removeChild(el);\r\n        return css;\r\n    }\r\n\r\n    static sizeOf(item: string | any, node?: Node): ClientRect {\r\n        let board;\r\n        let rect: ClientRect;\r\n        let addBoard: boolean;\r\n        if (!item) {\r\n            return undefined;\r\n        }\r\n        if (node) {\r\n            board = node.$owner.$view;\r\n            addBoard = false;\r\n        }\r\n\r\n        if (!board) {\r\n            addBoard = true;\r\n            board = Util.createShape({ tag: 'svg', id: 'root', width: 200, height: 200 });\r\n            document.body.appendChild(board);\r\n        }\r\n        if (board.tagName === 'svg') {\r\n            if (typeof item === 'string') {\r\n                item = Util.create({ tag: 'text', $font: true, value: item });\r\n                item.setAttribute('width', '5px');\r\n            }\r\n        } else if (typeof item === 'string') {\r\n            item = document.createTextNode(item);\r\n        }\r\n        board.appendChild(item);\r\n        rect = item.getBoundingClientRect();\r\n        board.removeChild(item);\r\n\r\n        if (addBoard) {\r\n            document.body.removeChild(board);\r\n        }\r\n        return rect;\r\n    }\r\n\r\n    static getColor(style: string, defaultColor?: string) {\r\n        if (style) {\r\n            if (style.toLowerCase() === 'create') {\r\n                return '#008000';\r\n            }\r\n            if (style.toLowerCase() === 'nac') {\r\n                return '#FE3E3E';\r\n            }\r\n            if (style.indexOf('#') === 0) {\r\n                return style;\r\n            }\r\n        }\r\n        if (defaultColor) {\r\n            return defaultColor;\r\n        }\r\n        return '#000';\r\n    }\r\n\r\n    public static utf8$to$b64(str: string): string {\r\n        return window.btoa(encodeURIComponent(str));\r\n    }\r\n\r\n    public static showSVG(control: DiagramElement) {\r\n        let svg = Util.create({\r\n            tag: 'svg',\r\n            style: { left: control.getPos().x, top: control.getPos().y, position: 'absolute' }\r\n        });\r\n        let child = control.getSVG();\r\n        if (child) {\r\n            svg.appendChild(child);\r\n        }\r\n        Util.setSize(svg, control.getSize().x, control.getSize().y);\r\n        document.body.appendChild(svg);\r\n    }\r\n\r\n    public static toJson(ref: JSON | Object): Object {\r\n        let result = {};\r\n        return Util.copy(result, ref, false, false);\r\n    }\r\n\r\n    public static initControl(parent: Control, control: Control, type: string, id: string, json: JSON | Object) {\r\n        if (typeof control.init === 'function') {\r\n            control.init(parent, type, id);\r\n        }\r\n        if (typeof control.load === 'function') {\r\n            control.load(json);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * copy One Json into another\r\n     * @function\r\n     * @param ref reference Json\r\n     * @param src source Json\r\n     * @param full all attributes include privet $\r\n     * @param replace set the original reference or copy it\r\n     * @returns ref\r\n     * @name copy\r\n     */\r\n    public static copy(ref: JSON | Object, src: JSON | Object, full: boolean, replace: boolean) {\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (replace) {\r\n                        ref[i] = src[i];\r\n                        continue;\r\n                    }\r\n                    if (!ref[i]) {\r\n                        if (src[i] instanceof Array) {\r\n                            ref[i] = [];\r\n                        } else {\r\n                            ref[i] = {};\r\n                        }\r\n                    }\r\n                    Util.copy(ref[i], src[i], full, false);\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref[i] = src[i];\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    public static xmlstringify(text: string): string {\r\n        text = text.replace('<', '&lt;');\r\n        text = text.replace('>', '&gt;');\r\n        return text;\r\n    }\r\n\r\n    public static toXML(ref: JSON | Object | any, src: JSON | Object | any, full: boolean, doc: Document): any {\r\n        let name;\r\n        if (!ref) {\r\n            name = src.constructor.name;\r\n            doc = document.implementation.createDocument(null, name, null);\r\n            ref = doc.childNodes[0];\r\n        }\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (!ref.getAttribute(i)) {\r\n                        if (src[i] instanceof Array) {\r\n                            for (let c in src[i]) {\r\n                                if (!src[i].hasOwnProperty(c)) {\r\n                                    continue;\r\n                                }\r\n                                name = src[i][c].constructor.name;\r\n                                let child = doc.createElement(name);\r\n                                ref.appendChild(child);\r\n                                Util.toXML(child, src[i][c], full, doc);\r\n                            }\r\n                        } else {\r\n                            name = src[i].constructor.name;\r\n                            let child = doc.createElement(name);\r\n                            ref.appendChild(child);\r\n                            Util.toXML(child, src[i], full, doc);\r\n                        }\r\n                    } else {\r\n                        Util.toXML(ref.getAttribute(i), src[i], full, doc);\r\n                    }\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref.setAttribute(i, src[i]);\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    static Range(min: Point, max: Point, x: number, y: number) {\r\n        max.x = Math.max(max.x, x);\r\n        max.y = Math.max(max.y, y);\r\n        min.x = Math.min(min.x, x);\r\n        min.y = Math.min(min.y, y);\r\n    }\r\n\r\n    public static getPosition(m: number, n: number, entity: DiagramElement, refCenter: Point) {\r\n        let t, p = [], list, distance = [], min = 999999999, position, i, step = 15;\r\n        let pos: Point = entity.getPos();\r\n        let size: Point = entity.getSize();\r\n        list = [Point.LEFT, Point.RIGHT];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = this.getLRPosition(m, n, entity, list[i]);\r\n            if (t.y >= pos.y && t.y <= (pos.y + size.y + 1)) {\r\n                t.y += (entity['$' + list[i]] * step);\r\n                if (t.y > (pos.y + size.y)) {\r\n                    // Alternative\r\n                    t = Util.getUDPosition(m, n, entity, Point.DOWN, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        list = [Point.UP, Point.DOWN];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = Util.getUDPosition(m, n, entity, list[i]);\r\n            if (t.x >= pos.x && t.x <= (pos.x + size.x + 1)) {\r\n                t.x += (entity['$' + list[i]] * step);\r\n                if (t.x > (pos.x + size.x)) {\r\n                    // Alternative\r\n                    t = this.getLRPosition(m, n, entity, Point.RIGHT, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        for (i = 0; i < p.length; i += 1) {\r\n            if (distance[i] < min) {\r\n                min = distance[i];\r\n                position = p[i];\r\n            }\r\n        }\r\n        return position;\r\n    }\r\n\r\n    public static getUDPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let x, y: number = pos.y;\r\n        if (p === Point.DOWN) {\r\n            y += size.y;\r\n        }\r\n        x = (y - n) / m;\r\n        if (step) {\r\n            x += e['$' + p] * step;\r\n            if (x < pos.x) {\r\n                x = pos.x;\r\n            } else if (x > (pos.x + size.x)) {\r\n                x = pos.x + size.x;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static getLRPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let y: number, x: number = pos.x;\r\n        if (p === Point.RIGHT) {\r\n            x += size.x;\r\n        }\r\n        y = m * x + n;\r\n        if (step) {\r\n            y += e['$' + p] * step;\r\n            if (y < pos.y) {\r\n                y = pos.y;\r\n            } else if (y > (pos.y + size.y)) {\r\n                y = pos.y + size.y;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static hasClass(element: Element, cls: string) {\r\n        let className = element.getAttribute('class');\r\n        return className.indexOf(cls) > 0;\r\n    }\r\n    public static addClass(element: Element, cls: string) {\r\n        if (!Util.hasClass(element, cls)) {\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className + ' ' + cls);\r\n        }\r\n    }\r\n    public static removeClass(element: Element, cls: string) {\r\n        if (Util.hasClass(element, cls)) {\r\n            let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className.replace(reg, ' ').trim());\r\n        }\r\n    }\r\n\r\n    public static startsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.startsWith) {\r\n            return s.indexOf(searchS) === 0;\r\n        }\r\n\r\n        return s.startsWith(searchS);\r\n    }\r\n\r\n    public static endsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.endsWith) {\r\n            let lastIndex = s.lastIndexOf(searchS);\r\n            return lastIndex !== -1 && lastIndex === (s.length - 1);\r\n        }\r\n\r\n        return s.endsWith(searchS);\r\n    }\r\n\r\n    public static includes(s: string, searchS: string): boolean {\r\n        if (!String.prototype.includes) {\r\n            let idx = s.indexOf(searchS);\r\n            return idx > -1;\r\n        }\r\n        if (s === null) {\r\n            return false;\r\n        }\r\n\r\n        return s.includes(searchS);\r\n    }\r\n\r\n    public static isParentOfChild(parent: Element, child: Element): boolean {\r\n\r\n        if (!parent || !child) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isIE()) {\r\n            let children = parent.childNodes;\r\n            // let found = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                let childItem = children[i];\r\n                if (childItem === child) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        return parent.contains(child);\r\n    }\r\n\r\n    public static createCustomEvent(type: string, params?: any): CustomEvent {\r\n        let evt: CustomEvent;\r\n\r\n        if (typeof window['CustomEvent'] !== 'function') {\r\n            params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n            evt = document.createEvent('CustomEvent');\r\n            evt.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\r\n            return evt;\r\n        }\r\n\r\n        evt = new CustomEvent(type);\r\n\r\n        return evt;\r\n    }\r\n\r\n    public static saveToLocalStorage(model: any): boolean {\r\n        if (!this.isAutoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isLocalStorageSupported()) {\r\n            if (model) {\r\n                if (model.$isLoading) {\r\n                    return false;\r\n                }\r\n                let jsonObj = Util.toJson(model);\r\n                let data = JSON.stringify(jsonObj, null, '\\t');\r\n                localStorage.setItem('diagram', data);\r\n            } else {\r\n                localStorage.removeItem('diagram');\r\n            }\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static getDiagramFromLocalStorage(): string {\r\n        if (Util.isLocalStorageSupported()) {\r\n            return localStorage.getItem('diagram');\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    public static isLocalStorageSupported(): boolean {\r\n        if (this.isEdge()) {\r\n            return false;\r\n        }\r\n        return localStorage !== undefined;\r\n    }\r\n}\r\n"],"sourceRoot":""}
Severity: Minor
Found in doc/diagram.js.map by fixme

FIXME found
Open

{"version":3,"sources":["webpack://DiagramJS/webpack/bootstrap","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Adapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Bridge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/BridgeElement.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/CSS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Control.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Data.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventBus.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/JSEPS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Palette.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertiesPanel.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertyBinder.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/RGBColor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/SVGConverter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/ScrumBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Toolbar.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/UML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/VirtualKeyBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/JavaAdapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/BaseElements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/ClassEditor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Graph.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Model.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregate.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Association.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Composition.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Generalisation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Implements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Attribute.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/AutoComplete.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/BR.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Button.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Class.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/ClazzProperty.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Dice.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Div.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Form.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/HTML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/InfoText.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Input.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Label.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Method.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Node.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/SO.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/StereoType.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Symbol.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Table.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/AddNode.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Drag.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/GraphListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/ImportFile.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/NewEdge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Select.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Zoom.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayout.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayoutMin.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/Random.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/main.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/util.ts"],"names":[],"mappings":"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","file":"diagram.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./main.ts\");\n","export abstract class Adapter {\r\n    public id: string = null;\r\n\r\n    abstract update(evt: Object): boolean;\r\n}\r\n","'use strict';\r\n\r\nimport * as controls from './elements/nodes';\r\nimport * as adapters from './adapters';\r\nimport Data from './Data';\r\nimport {Control} from './Control';\r\nimport {Adapter} from './Adapter';\r\nimport {Graph} from './elements';\r\nimport {Util} from './util';\r\nimport {Point} from './elements';\r\n\r\nexport class Bridge extends Control {\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public static version: string = '0.42.01.1601007-1739';\r\n    private controlFactory: Object = {};\r\n    private adapterFactory: Object = {};\r\n    private controls: Object = {};\r\n    private adapters: Object = {};\r\n    private items: Object = {};\r\n    private controlNo: number = 1;\r\n    private online: boolean = true;\r\n    private language: string = navigator.language.toUpperCase();\r\n    private toolBar: HTMLElement;\r\n\r\n    constructor(viewRoot?: HTMLElement) {\r\n        super();\r\n        let i;\r\n\r\n        if (viewRoot) {\r\n            this.$view = viewRoot;\r\n        }\r\n\r\n        let keys: string[] = Object.keys(adapters);\r\n        for (i = 0; i < keys.length; i++) {\r\n            let child = adapters[keys[i]];\r\n            if (child && child.id) {\r\n                this.adapterFactory[child.id.toLowerCase()] = child;\r\n            }\r\n        }\r\n\r\n        keys = Object.keys(controls);\r\n        for (i = 0; i < keys.length; i++) {\r\n            this.addControl(controls[keys[i]]);\r\n        }\r\n        this.addControl(Graph);\r\n\r\n        let that = this;\r\n        window.addEventListener('load', function () {\r\n            let updateOnlineStatus = function updateOnlineStatus() {\r\n                that.setOnline(navigator.onLine);\r\n            };\r\n            window.addEventListener('online', updateOnlineStatus);\r\n            window.addEventListener('offline', updateOnlineStatus);\r\n        });\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public setOnline(value: boolean) {\r\n        this.online = value;\r\n        if (this.toolBar.children[0]) {\r\n            this.toolBar.children[0].className = value ? 'online' : 'offline';\r\n        }\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addToolbar(): boolean {\r\n        if (this.toolBar) {\r\n            return false;\r\n        }\r\n        this.toolBar = document.createElement('div');\r\n        this.toolBar.className = 'onlineStatus';\r\n        let child = document.createElement('div');\r\n        child.className = 'online';\r\n        this.toolBar.appendChild(child);\r\n        child = document.createElement('div');\r\n        child.className = 'lang';\r\n        child.innerHTML = this.language;\r\n        this.toolBar.appendChild(child);\r\n\r\n        let body: HTMLElement = document.getElementsByTagName('body')[0];\r\n        body.insertBefore(this.toolBar, body.firstChild);\r\n        // Refresh Online Status\r\n        this.setOnline(this.online);\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addListener = function (listener: any) {\r\n        this.listener.push(listener);\r\n    };\r\n\r\n    public addControl(control: any) {\r\n        if (control && control.name) {\r\n            this.controlFactory[control.name.toLowerCase()] = control;\r\n        }\r\n    }\r\n\r\n    public getId(): string {\r\n        return 'control' + (this.controlNo++);\r\n    }\r\n\r\n    public adapterUpdate(message: string) {\r\n        let keys: string[] = Object.keys(this.adapters);\r\n        if (keys.length > 0) {\r\n            let i;\r\n            for (i = 0; i < keys.length; i++) {\r\n                let adapterList = this.adapters[keys[i]];\r\n                if (adapterList instanceof Adapter) {\r\n                    adapterList.update(message);\r\n                } else {\r\n                    for (let adapter of adapterList) {\r\n                        adapter.update(message);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        let config = {}, className: string, id: string;\r\n        if (typeof(json) === 'string') {\r\n            // Only a String\r\n            config['id'] = '' + json;\r\n            let item = document.getElementById(config['id']);\r\n            let className: string;\r\n            if (item) {\r\n                className = item.getAttribute('class');\r\n                if (!className) {\r\n                    className = item.getAttribute('classname') || '';\r\n                }\r\n                // Found Element and now config Data element\r\n                if (item.getAttribute('property')) {\r\n                    if (this.hasItem(item.getAttribute('property'))) {\r\n                        let data = this.getItem(item.getAttribute('property'));\r\n                        for (let key in data.prop) {\r\n                            if (item.getAttribute(key)) {\r\n                                data.setValue(key, item.getAttribute(key));\r\n                            }\r\n                        }\r\n                        if (item.getAttribute('property')) {\r\n                            // TODO: FIXME!!!\r\n                            // data.property = item.getAttribute(\"property\");\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                className = '' + json;\r\n            }\r\n            className = className.toLowerCase();\r\n            config['className'] = className;\r\n        } else {\r\n            config = <JSON>json;\r\n        }\r\n        // Config validate\r\n        if (!config['id']) {\r\n            config['id'] = this.getId();\r\n        }\r\n        // Backup for Old Graph\r\n        if (!config['className'] && (config['type'] === 'clazzdiagram' || config['type'] === 'objectdiagram')) {\r\n            config['className'] = 'graph';\r\n        }\r\n\r\n        className = config['className'] || config['class'];\r\n        className = className.toLocaleLowerCase();\r\n        id = config['id'];\r\n\r\n        // Check For Control or Data\r\n        if ((config['prop'] || config['upd'] || config['rem']) && this.controls[id] === null) {\r\n            // Its Data\r\n            let newData = !this.hasItem(config['id']);\r\n            let item: Data = this.getItem(config['id']);\r\n            // TODO: FIXME!!!\r\n            // if (id && className && !item.property) {\r\n            //      item.property = className;\r\n            // }\r\n            if (newData) {\r\n                for (let i in this.controls) {\r\n                    if (this.controls.hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    this.controls[i].addItem(this, item);\r\n                }\r\n            }\r\n            // Add all Values to item\r\n            item.addProperties(config);\r\n            // Bridge.addProperties(config['prop'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return item;\r\n        }\r\n\r\n        let control;\r\n        if (this.controls[id]) {\r\n            control = this.controls[id];\r\n            control.initControl(json);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return control;\r\n        }\r\n\r\n        if (typeof(this.controlFactory[className]) === 'object' || typeof(this.controlFactory[className]) === 'function') {\r\n            let obj = this.controlFactory[className];\r\n            control = new obj(json);\r\n            Util.initControl(owner || this, control, config['property'], id, json);\r\n\r\n            if (control.id) {\r\n                this.controls[control.id] = control;\r\n            } else {\r\n                this.controls[id] = control;\r\n            }\r\n\r\n            // create DataObject and register this control as listener to it\r\n            // let obj = {id:id};\r\n            // let data: Data = this.load(obj);\r\n            // data.addListener(this);\r\n\r\n            // Try to Show\r\n            if (typeof control.getSVG === 'function' && typeof control.getSize === 'function') {\r\n                let size: Point = control.getSize();\r\n\r\n                let svg = Util.createShape({\r\n                    tag: 'svg',\r\n                    id: 'root',\r\n                    width: size.x,\r\n                    height: size.y\r\n                });\r\n\r\n                let view = control.getSVG();\r\n                svg.appendChild(view);\r\n                document.getElementsByTagName('body')[0].appendChild(svg);\r\n            }\r\n            return control;\r\n        }\r\n        return null;\r\n        // bridge.load('{class:table, columns:[{id:'firstname'}, {id:'lastname'}]}');\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n\r\n        if (this.items[id] !== undefined) {\r\n            return true;\r\n        }\r\n        id = id.split('.')[0];\r\n        return (this.items[id] !== undefined);\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return this.items;\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        let item = this.items[id];\r\n        if (!item) {\r\n            id = id.split('.')[0];\r\n            item = this.items[id];\r\n            if (!item) {\r\n                item = new Data();\r\n                item.id = id;\r\n                this.items[id] = item;\r\n            }\r\n        }\r\n        return item;\r\n    }\r\n\r\n    /**\r\n     * Method for executing user input -> Event\r\n     * @param object\r\n     * @param attribute\r\n     * @param oldValue\r\n     * @param newValue\r\n     * @returns {boolean}\r\n     */\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        alert('Bridge.setValue: oldVal:' + oldValue + ', newVal: ' +  + newValue + ', attribute: ' + attribute + ', object: ' + JSON.stringify(object));\r\n        let obj: Data;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n\r\n        } else if (object instanceof Data) {\r\n            obj = object;\r\n            id = object.id;\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = <Data>object;\r\n            id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return false;\r\n        }\r\n        if (obj) {\r\n            // Execute Update to Data\r\n            obj.setValue(attribute, newValue);\r\n            // Could be done here, but currently is done at this.execueChange..:\r\n            // obj[attribute] = value;\r\n        }\r\n\r\n        /*let tmp = {'id': id};\r\n        if (typeof(newValue) !== 'undefined' && newValue !== null) {\r\n            let upd = {};\r\n            upd[attribute] = newValue;\r\n            tmp['upd'] = upd;\r\n        }\r\n        if (typeof(oldValue) !== 'undefined' && oldValue !== null) {\r\n            let rem = {};\r\n            rem[attribute] = oldValue;\r\n            tmp['rem'] = rem;\r\n        }*/\r\n        // this.load(tmp);\r\n        return true;\r\n    }\r\n\r\n    public getValue(object: Object, attribute: string): any {\r\n        let obj: Object;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = object;\r\n            // id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return;\r\n        }\r\n        if (obj) {\r\n            if (obj.hasOwnProperty(attribute)) {\r\n                return obj[attribute];\r\n            } else if (obj instanceof Data) {\r\n                return (<Data>obj).getValue(attribute);\r\n            } else {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    public getNumber(object: Object, attribute: string, defaultValue: number = 0): number {\r\n        let res = <number>this.getValue(object, attribute);\r\n        if (typeof res === 'number') {\r\n            return res;\r\n        } else if (typeof res === 'string') {\r\n            // check whether res is a number\r\n            let value = Number(res);\r\n            if (value || value === 0) {\r\n                return value;\r\n            }\r\n        }\r\n        return defaultValue;\r\n    }\r\n\r\n    getControl(controlId: string) {\r\n        return this.controls[controlId];\r\n    }\r\n\r\n    public registerListener(eventType: string, control: Control, callBackfunction: string): Control {\r\n        if (typeof control === 'string') {\r\n            control = this.getControl(<string>control);\r\n        }\r\n        if (!control) {\r\n            return null;\r\n        }\r\n        if (eventType) {\r\n            eventType = eventType.toLowerCase();\r\n        }\r\n        control.registerListenerOnHTMLObject(eventType);\r\n        if (callBackfunction) {\r\n            let adapter: DelegateAdapter = new DelegateAdapter();\r\n            adapter.callBackfunction = callBackfunction;\r\n            adapter.id = control.getId();\r\n            this.addAdapter(adapter, eventType);\r\n        }\r\n        return control;\r\n    }\r\n\r\n    public addAdapter(adapter: Adapter | string, eventType: string): Adapter {\r\n        if (!eventType) {\r\n            eventType = '';\r\n        }\r\n        let result: Adapter;\r\n        if (adapter instanceof String) {\r\n            let obj = this.adapterFactory[adapter.toLowerCase()];\r\n            result = new obj();\r\n        } else {\r\n            result = <Adapter>adapter;\r\n        }\r\n        let handlers = this.adapters[eventType];\r\n\r\n        if (handlers === null || handlers === undefined) {\r\n            handlers = [];\r\n            this.adapters[eventType] = handlers;\r\n        }\r\n        handlers.push(result);\r\n        return result;\r\n    }\r\n\r\n    public fireEvent(evt: Event): void {\r\n        let handlers = this.adapters[''];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n        handlers = this.adapters[evt['eventType']];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport class DelegateAdapter extends Adapter {\r\n    adapter: Adapter;\r\n    callBackfunction: string;\r\n\r\n    update(evt: Event): boolean {\r\n        if (this.adapter) {\r\n            this.adapter.update(evt);\r\n            return true;\r\n        } else if (this.callBackfunction) {\r\n            return this.executeFunction(this.callBackfunction, evt);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public setAdapter(adapter: Adapter): boolean {\r\n        this.adapter = adapter;\r\n        return true;\r\n    }\r\n\r\n    private executeFunction(strValue: string, evt: Event): boolean {\r\n        let scope = window;\r\n        let scopeSplit = strValue.split('.');\r\n        for (let i = 0; i < scopeSplit.length - 1; i++) {\r\n            scope = scope[scopeSplit[i]];\r\n            if (scope === undefined) {\r\n                return false;\r\n            }\r\n        }\r\n        let fn: any = scope[scopeSplit[scopeSplit.length - 1]];\r\n        if (typeof fn === 'function') {\r\n            fn.call(scope);\r\n            return true;\r\n        } else {\r\n            window['callBack1'].update(evt);\r\n\r\n        }\r\n        return false;\r\n    }\r\n}\r\n","'use strict';\r\nimport Data from './Data';\r\n\r\nexport default class BridgeElement {\r\n    private static elementSet: BridgeElement[] = [];\r\n    public model: Data;\r\n    public id: string;\r\n    public gui: HTMLElement;\r\n\r\n    constructor(model: Data) {\r\n        this.model = model;\r\n        this.id = model.id;\r\n        BridgeElement.elementSet.push(this);\r\n    }\r\n}\r\n","import {Util} from './util';\r\n\r\n// \t\t\t\t######################################################### CSS #########################################################\r\nexport class CSS {\r\n    public css: Object;\r\n    private name: string;\r\n\r\n    constructor(name: string, item?: any) {\r\n        let i, value, border: string, prop, el;\r\n        this.name = name;\r\n        this.css = {};\r\n        if (!item) {\r\n            return;\r\n        }\r\n\r\n        el = window.getComputedStyle(item, null);\r\n        border = el.getPropertyValue('border');\r\n        for (i in el) {\r\n            prop = i;\r\n            value = el.getPropertyValue(prop);\r\n            if (value && value !== '') {\r\n                // optimize CSS\r\n                if (border) {\r\n                    if (prop === 'border-bottom' || prop === 'border-right' || prop === 'border-top' || prop === 'border-left') {\r\n                        if (value !== border) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-color' || prop === 'border-bottom-color' || prop === 'border-right-color' || prop === 'border-top-color' || prop === 'border-left-color') {\r\n                        if (border.substring(border.length - value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-width') {\r\n                        if (border.substring(0, value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else {\r\n                        this.css[prop] = value;\r\n                    }\r\n                } else {\r\n                    this.css[prop] = value;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public static getStdDef() {\r\n        let child, def = Util.create({tag: 'defs'});\r\n\r\n        child = Util.create({tag: 'filter', id: 'drop-shadow'});\r\n        child.appendChild(Util.create({tag: 'feGaussianBlur', 'in': 'SourceAlpha', result: 'blur-out', stdDeviation: 2}));\r\n        child.appendChild(Util.create({tag: 'feOffset', 'in': 'blur-out', dx: 2, dy: 2}));\r\n        child.appendChild(Util.create({tag: 'feBlend', 'in': 'SourceGraphic', mode: 'normal'}));\r\n        def.appendChild(child);\r\n        child = Util.create({tag: 'linearGradient', id: 'reflect', x1: 0, x2: 0, y1: '50%', y2: 0, spreadMethod: 'reflect'});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#aaa', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#eee', offset: '100%'}));\r\n        def.appendChild(child);\r\n\r\n        child = Util.create({tag: 'linearGradient', id: 'classelement', x1: 0, x2: '100%', y1: '100%', y2: 0});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#fff', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#d3d3d3', offset: 1}));\r\n        def.appendChild(child);\r\n\r\n        return def;\r\n    }\r\n\r\n    public static getSubstring(str: string, search: string, startChar: string, endChar: string, splitter: string): any {\r\n        let pos, end, count = 0, array = [];\r\n        pos = str.indexOf(search);\r\n        if (pos > 0) {\r\n            end = str.indexOf(startChar, pos);\r\n            pos = end + 1;\r\n            if (end > 0) {\r\n                while (end < str.length) {\r\n                    if (str.charAt(end) === startChar) {\r\n                        count += 1;\r\n                    }\r\n                    if (str.charAt(end) === endChar) {\r\n                        count -= 1;\r\n                        if (count === 0) {\r\n                            if (splitter && pos !== end) {\r\n                                array.push(str.substring(pos, end).trim());\r\n                            }\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (str.charAt(end) === splitter && count === 1) {\r\n                        array.push(str.substring(pos, end).trim());\r\n                        pos = end + 1;\r\n                    }\r\n\r\n                    end += 1;\r\n                }\r\n                if (splitter) {\r\n                    return array;\r\n                }\r\n                return str.substring(pos, end);\r\n            }\r\n            return str.substring(pos);\r\n        }\r\n        return '';\r\n    }\r\n\r\n    public static addStyle(board: SVGElement, styleName: any) {\r\n        let defs, style: any, css;\r\n        if (styleName.baseVal || styleName.baseVal === '') {\r\n            styleName = styleName.baseVal;\r\n        }\r\n        if (!styleName) {\r\n            return;\r\n        }\r\n        defs = CSS.getDefs(board);\r\n        if (defs.getElementsByTagName('style').length > 0) {\r\n            style = defs.getElementsByTagName('style')[0];\r\n        } else {\r\n            style = Util.create({tag: 'style'});\r\n            style.item = {};\r\n            defs.appendChild(style);\r\n        }\r\n        if (!style.item[styleName]) {\r\n            css = Util.getStyle(styleName);\r\n            style.item[styleName] = css;\r\n            style.innerHTML = style.innerHTML + '\\n.' + styleName + css.getSVGString(board);\r\n        }\r\n    }\r\n\r\n    public static addStyles(board: SVGElement, item: any) {\r\n        if (!item) {\r\n            return;\r\n        }\r\n        let items, i, className: any = item.className;\r\n\r\n        if (className) {\r\n            if (className.baseVal || className.baseVal === '') {\r\n                className = className.baseVal;\r\n            }\r\n        }\r\n        if (className) {\r\n            items = className.split(' ');\r\n            for (i = 0; i < items.length; i += 1) {\r\n                CSS.addStyle(board, items[i].trim());\r\n            }\r\n        }\r\n        for (i = 0; i < item.childNodes.length; i += 1) {\r\n            this.addStyles(board, item.childNodes[i]);\r\n        }\r\n    }\r\n\r\n    public static getDefs(board: SVGElement) {\r\n        let defs;\r\n        if (board.getElementsByTagName('defs').length < 1) {\r\n            defs = Util.create({tag: 'defs'});\r\n            board.insertBefore(defs, board.childNodes[0]);\r\n        } else {\r\n            defs = board.getElementsByTagName('defs')[0];\r\n        }\r\n        return defs;\r\n    }\r\n\r\n    public add(key: string, value: string) {\r\n        this.css[key] = value;\r\n    }\r\n\r\n    public get(key: string): any {\r\n        let i;\r\n        for (i in this.css) {\r\n            if (i === key) {\r\n                return this.css[key];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public getNumber(key: string) {\r\n        return parseInt((this.get(key) || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    public getSVGString(board: SVGElement) {\r\n        let str, pos, style, defs, value, filter, z;\r\n        str = '{';\r\n        for (style in this.css) {\r\n            if (!this.css.hasOwnProperty(style)) {\r\n                continue;\r\n            }\r\n            if (style === 'border') {\r\n                pos = this.css[style].indexOf(' ');\r\n                str = str + 'stroke-width: ' + this.css[style].substring(0, pos) + ';';\r\n                pos = this.css[style].indexOf(' ', pos + 1);\r\n                str = str + 'stroke:' + this.css[style].substring(pos) + ';';\r\n            } else if (style === 'background-color') {\r\n                str = str + 'fill: ' + this.css[style] + ';';\r\n            } else if (style === 'background') {\r\n                value = CSS.getSubstring(this.css[style], 'linear-gradient', '(', ')', ',');\r\n                if (value.length > 0) {\r\n                    defs = CSS.getDefs(board);\r\n                    if (value[0] === '45deg') {\r\n                        pos = 1;\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '100%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                    } else {\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '0%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                        pos = 0;\r\n                    }\r\n                    defs.appendChild(filter);\r\n                    while (pos < value.length) {\r\n                        value[pos] = value[pos].trim();\r\n                        z = value[pos].lastIndexOf(' ');\r\n                        filter.appendChild(Util.create({\r\n                            tag: 'stop',\r\n                            'offset': value[pos].substring(z + 1),\r\n                            style: {'stop-color': value[pos].substring(0, z)}\r\n                        }));\r\n                        pos += 1;\r\n                    }\r\n                    str = str + 'fill: url(#' + this.name + ');';\r\n                    continue;\r\n                }\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n                // box-shadow: inset 0 3px 4px #888;\r\n// \t\t\t\t<defs>\r\n// \t\t\t\t\t<filter id='drop-shadow'>\r\n// \t\t\t\t\t\t<feGaussianBlur in='SourceAlpha' result='blur-out' stdDeviation='2'></feGaussianBlur>\r\n// \t\t\t\t\t\t<feOffset in='blur-out' dx='2' dy='2'></feOffset>\r\n// \t\t\t\t\t\t<feBlend in='SourceGraphic' mode='normal'></feBlend>\r\n// \t\t\t\t\t</filter>\r\n// \t\t\t\t</defs>\r\n            } else {\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n            }\r\n        }\r\n        str = str + '}';\r\n        return str;\r\n    }\r\n}\r\n","import {Bridge} from './Bridge';\r\nimport Data from './Data';\r\nimport EventListener from './EventListener';\r\n\r\nexport abstract class Control {\r\n    public $owner: Control;\r\n    /**\r\n     *\r\n     */\r\n    public property: string;\r\n    public id: string;\r\n    public $view: Element;\r\n    public $viewData: Data = null;\r\n\r\n    protected $model: Data;\r\n    protected $viewListener: EventListenerOrEventListenerObject;\r\n\r\n    /**\r\n     * The properties, we want to listen to\r\n     */\r\n    // static defaultProperties: string[] = [];\r\n\r\n    // public getProperties(): string[] {\r\n    //     return this.properties;\r\n    // }\r\n\r\n    constructor() {\r\n        // e.g. this.properties.push(\"key\");\r\n        // this.properties.push(\"property\");\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data: Data = new Data();\r\n        if (oldData) {\r\n            oldData.removeListener(this);\r\n            const keys: string[] = oldData.getKeys();\r\n            for (let i = 0; i < keys.length; i++) {\r\n                let attr = keys[i];\r\n                if (this.$view) {\r\n                    if (this.$view[attr] === null) {\r\n                        continue;\r\n                    }\r\n                    data.setValue(attr, this.$view[attr]);\r\n                } else {\r\n                    data.setValue(attr, null);\r\n                }\r\n            }\r\n        }\r\n        data.addListener(this);\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     *  Set the new HTMLElement and attach listener to it.\r\n     *  Also remove Listeners from old one and return the old one, if present.\r\n     * @param element\r\n     * @returns The previous Element\r\n     */\r\n    public setView(element: Element): Element {\r\n        let oldElement: Element = null;\r\n        if (this.$view) {\r\n            oldElement = this.$view;\r\n            if (this.$viewListener) {\r\n                oldElement.removeEventListener('change', this.$viewListener);\r\n            }\r\n        }\r\n        this.$view = element;\r\n\r\n        if (this.$viewListener) {\r\n            element.addEventListener('change', this.$viewListener);\r\n        }\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n        return element;\r\n    }\r\n\r\n    public init(owner: Control, property ?: string, id ?: string): Control {\r\n        if (!this.$owner) {\r\n            this.$owner = owner;\r\n        }\r\n        if (!this.id) {\r\n            this.id = id;\r\n        }\r\n        if (!this.property) {\r\n            this.property = this.generateID(property, id);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public createEventListener(): EventListener {\r\n        return new EventListener();\r\n    }\r\n\r\n    public getRoot(): Control {\r\n        if (this.$owner) {\r\n            return this.$owner.getRoot();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return null;\r\n    }\r\n\r\n    public initControl(data: any): void {\r\n        if (this.$view === null || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (data.hasOwnProperty('prop')) {\r\n            for (let key in data.prop) {\r\n                let oldValue = this.$viewData.getValue(key);\r\n                if (this.$view) {\r\n                    this.updateElement(key, oldValue, data.prop[key]);\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        let hasRem = data.hasOwnProperty('rem');\r\n        let removed: any[] = [];\r\n        if (data.hasOwnProperty('upd')) {\r\n            for (let key in data.upd) {\r\n                let oldValue;\r\n                let newValue = data.upd[key];\r\n                let entity;\r\n                const temp = false;\r\n                if (temp) {\r\n//                if (newValue == this.getViewData().getValue(key)) {\r\n                    // new Value assertEquals old value, so we don't need to change anything..\r\n                    // delete data.rem[key];\r\n                    if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                        removed.push(data.rem[key]);\r\n                    }\r\n                    continue;\r\n                }\r\n                if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                    // if there's a rem, the oldValue from rem will be used and expected to be right..\r\n                    oldValue = data.rem[key];\r\n                    if (this.$model && this.$model.getValue(key) === oldValue) {\r\n                        entity = this.$model;\r\n//                    } else if (oldValue == this.getViewData().getValue(key)) {\r\n//                        $graphModel = this.getViewData();\r\n                    }\r\n                    delete data.rem[key];\r\n\r\n                    if (entity === null) {\r\n                        continue;\r\n                    }\r\n                }\r\n                if (entity) {\r\n                    if (!hasRem) {\r\n                        if (entity === this.$model) {\r\n                            oldValue = this.$model.getValue(key);\r\n                        } else {\r\n//                           oldValue = this.getViewData().getValue(key);\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (this.$model) {\r\n                        // try to get the oldValue directly from the $graphModel...\r\n                        oldValue = this.$model.getValue(key);\r\n                        entity = this.$model;\r\n                    }\r\n                    if (oldValue === null) {\r\n                        // if there was no data in the entity, we try to get oldValue from the $view\r\n//                        oldValue = this.getViewData().getValue(key);\r\n//                        entity = this.getViewData();\r\n                    }\r\n                }\r\n\r\n                //  || oldValue !== this.$viewData.getValue(key)\r\n                if (newValue === oldValue) {\r\n                    // no match, so update should be wrong...\r\n                    continue;\r\n                }\r\n                const viewDataOldValue = this.$viewData.getValue(key);\r\n                if (entity === this.$viewData) {\r\n\r\n                    // this.getViewData().setValue(key, newValue);\r\n                    if (this.$view) {\r\n                        this.updateElement(key, viewDataOldValue, newValue);\r\n                    }\r\n                } else {\r\n                    this.updateElement(key, viewDataOldValue, newValue);\r\n                }\r\n                this.getRoot().setValue(entity, key, newValue, oldValue);\r\n            }\r\n            // this.saveViewInData();\r\n        }\r\n        if (hasRem) {\r\n            for (let key in data.rem) {\r\n                if (removed.hasOwnProperty(key)) {\r\n                    continue;\r\n                }\r\n                let oldValue;\r\n//                    this.getViewData().getValue(key);\r\n//                if (oldValue != data.rem[key] || data.upd !== undefined && (data.upd[key] == oldValue || this.getViewData().getValue(key) == data.upd[key])) {\r\n                // if rem is invalid, or if the change is already applied, don't do anything..\r\n                //                  continue;\r\n                //            }\r\n                // delete this.$viewData.getValue(key);\r\n                // this.saveViewInData();\r\n                this.updateElement(key, null, null);\r\n                // this.$view.removeAttribute(key);\r\n                if (this.$model) {\r\n//                    this.getRoot().setValue(this.$graphModel, key, this.getViewData().getValue(key), oldValue);\r\n                }\r\n            }\r\n        }\r\n        if (this.property) {\r\n            // Add listener to Input field:\r\n            this.$view['onchange'] = ((ev: Event) => {\r\n                    this.controlChanged(ev);\r\n                }\r\n            );\r\n        }\r\n//        this.saveViewInData();\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        return null;\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n        return false;\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return new Object();\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue ?: Object): boolean {\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Is called when a object, that the Control is listening to, changes its value.\r\n     * @param entity\r\n     * @param property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        if (oldValue === newValue || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (oldValue === this.$viewData.getValue(property)) {\r\n            return;\r\n        }\r\n        // Set NewData to ViewData and Fire PC\r\n        this.$viewData.setValue(property, newValue);\r\n\r\n//\r\n//\r\n//         // if (entity == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.entity) {\r\n//                 alert(\"entity = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.entity.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.entity, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the entity is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"entity = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n// >>>>>>> addOldFunctions\r\n        if (this.$viewData) {\r\n            this.$viewData.setValue(property, newValue);\r\n        }\r\n        if (this.$model) {\r\n            this.$model.setValue(property, newValue);\r\n        }\r\n        this.updateElement(property, oldValue, newValue);\r\n    }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            // Do Nothing\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  Update GUI Element\r\n     * @param {string} property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        if (this.$view && this.$view.hasAttribute(property)) {\r\n            this.$view.setAttribute(property, newValue);\r\n        }\r\n    }\r\n\r\n//        if (oldValue == newValue) {\r\n//            return;\r\n//        }\r\n//        if (oldValue == this.$viewData.getValue(property)) {\r\n//            return;\r\n//        }\r\n//        // Set NewData to ViewData and Fire PC\r\n//        this.$viewData.setValue(property, newValue);\r\n//\r\n//\r\n//\r\n//         // if ($graphModel == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.$graphModel) {\r\n//                 alert(\"$graphModel = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.$graphModel.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.$graphModel, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the $graphModel is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"$graphModel = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n\r\n    public getId(): string {\r\n        return this.id;\r\n    }\r\n\r\n    public load(json: JSON | Object, owner ?: Control): any {\r\n        // Do Nothing\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.property || entity.hasProperty(this.property)) {\r\n                entity.addListener(this, this.property);\r\n                this.$model = entity;\r\n            }\r\n        }\r\n    }\r\n\r\n    public appendChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.appendChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].appendChild(child.$view);\r\n        }\r\n    }\r\n\r\n    public removeChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.removeChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].removeChild(child.$view);\r\n        }\r\n    }\r\n\r\n    /*\r\n     Property looks like: 't1.talk'\r\n     */\r\n    public setProperty(property: string): void {\r\n        if (!this.property) {\r\n            return;\r\n        }\r\n        let objId = property.split('.')[0];\r\n        let object = null;\r\n        if (this.$owner.hasItem(objId)) {\r\n            object = this.$owner.getItem(objId);\r\n        }\r\n\r\n        // remove listener on old object\r\n        if (this.$model) {\r\n            // this.$graphModel.removeListener(this);\r\n            this.$model.removeListener(this, this.lastProperty);\r\n        }\r\n        this.property = property;\r\n\r\n        // add listener to object..\r\n        if (object) {\r\n            object.addListener(this, this.lastProperty);\r\n            this.$model = object;\r\n            this.updateElement(this.lastProperty, this.$viewData.getValue(this.lastProperty), object.prop[this.lastProperty]);\r\n        }\r\n    }\r\n\r\n    public registerListenerOnHTMLObject(eventType: string): boolean {\r\n        return this.registerEventListener(eventType, <HTMLElement>this.$view);\r\n    }\r\n\r\n    // Normal Event HTML-Event\r\n    // Eventtype:string,\r\n    // id:string of Control\r\n    public fireEvent(evt: Event): void {\r\n        // Do Nothing\r\n    }\r\n\r\n    public isClosed(): boolean {\r\n        return this['closed'];\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        if (this.isClosed()) {\r\n            return this.$owner.getShowed();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * the id of the Data object, that contains the properties of the view\r\n     * @returns {string}\r\n     */\r\n    protected getControlDataID() {\r\n        return this.id + '_data';\r\n    }\r\n\r\n    protected generateID(property ?: string, id ?: string): string {\r\n        if (property) {\r\n            return property;\r\n        }\r\n        if (id) {\r\n            // will generate a data Object suitable for the Control..\r\n            // must be overridden, if the changeEvent shouldn't listen on value...\r\n//            return id + '.' + this.getStandardProperty();//+ \"_data\"\r\n            return id + '.' + '_data';\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected updateViewData() {\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n        const keys: string[] = this.$viewData.getKeys();\r\n        for (let i = 0; i < keys.length; i++) {\r\n            let attr = keys[i];\r\n            if (this.$view[attr] === null) {\r\n                continue;\r\n            }\r\n            this.$viewData.setValue(attr, this.$view[attr]);\r\n        }\r\n    }\r\n\r\n    protected registerEventListener(eventType: string, htmlElement: HTMLElement): boolean {\r\n        if (!htmlElement) {\r\n            return false;\r\n        }\r\n        if (htmlElement instanceof HTMLElement === false) {\r\n            return false;\r\n        }\r\n        let control = this;\r\n        let listener = (t: any) => {\r\n            t.eventType = eventType;\r\n            t.id = control.id;\r\n            control.$owner.fireEvent(t);\r\n        };\r\n        htmlElement.addEventListener(eventType, listener);\r\n        return true;\r\n    }\r\n\r\n    get lastProperty(): string {\r\n        if (!this.property) {\r\n            return '';\r\n        }\r\n        let arr: string[] = this.property.split('.');\r\n        return arr[arr.length - 1];\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\n\r\nexport default class Data {\r\n    public prop = {};\r\n    id: string;\r\n    // $listener: Control[] = [];\r\n    $listener: Object = {};\r\n\r\n    private static nullCheck(property: string): string {\r\n        if (property === undefined || property === null) {\r\n            property = '';\r\n        }\r\n        return property;\r\n    }\r\n    public getKeys(): string[] {\r\n        return Object.keys(this.prop);\r\n    }\r\n\r\n    public addProperties(values: Object) {\r\n        if (!values) {\r\n            return;\r\n        }\r\n        if (values['prop']) {\r\n            let prop = values['prop'];\r\n            for (let property in prop) {\r\n                if (prop.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (prop[property] !== null && '' !== prop[property]) {\r\n                    this.setValue(property, prop[property]);\r\n                }\r\n            }\r\n        } else {\r\n            let upd = values['upd'] || {};\r\n            let rem = values['rem'] || {};\r\n\r\n            for (let property in upd) {\r\n                if (upd.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (rem.hasOwnProperty(property) === false) {\r\n                    this.setValue(property, upd[property]);\r\n                } else {\r\n                    // if we have a rem, we wan't to check, if its a valid change (teh old value is the value in rem)\r\n                    if (this.getValue(property) === rem[property]) {\r\n                        this.setValue(property, upd[property]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getValue(attribute: string) {\r\n        return this.prop[attribute];\r\n    }\r\n\r\n    public setValue(attribute: string, newValue: any): void {\r\n        let oldValue = this.prop[attribute];\r\n        if (oldValue === newValue && newValue !== null) {\r\n            return;\r\n        }\r\n        this.prop[attribute] = newValue;\r\n        this.firePropertyChange(attribute, oldValue, newValue);\r\n    }\r\n\r\n    public addTo(attribute: string, newValue: any): boolean {\r\n        let add: boolean;\r\n        if (this.prop[attribute]) {\r\n            if (this.prop[attribute].contains(newValue) === false) {\r\n                add = true;\r\n            }\r\n        } else {\r\n            this.prop[attribute] = [];\r\n            add = true;\r\n        }\r\n        if (add) {\r\n            this.prop[attribute].push(newValue);\r\n            this.firePropertyChange(attribute, null, newValue);\r\n        }\r\n        return add;\r\n    }\r\n\r\n    public removeFrom(attribute: string, newValue: any): boolean {\r\n        if (!this.prop[attribute]) {\r\n            return true;\r\n        }\r\n        let pos: number = this.prop[attribute].indexOf(newValue);\r\n        if (pos < 0) {\r\n            return true;\r\n        }\r\n        this.prop[attribute].splice(pos, 1);\r\n        this.firePropertyChange(attribute, newValue, null);\r\n        return true;\r\n    }\r\n\r\n    public addListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(property);\r\n        if (!listeners) {\r\n            listeners = [];\r\n            this.$listener[Data.nullCheck(property)] = listeners;\r\n        }\r\n        listeners.push(control);\r\n    }\r\n\r\n    public removeListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners = this.getListeners(property);\r\n        if (listeners === null) {\r\n            return;\r\n        }\r\n        let pos = listeners.indexOf(control);\r\n        if (pos >= 0) {\r\n            listeners.splice(pos, 1);\r\n        }\r\n        if (listeners.length === 0 && Data.nullCheck(property) !== '') {\r\n            // only remove, if it's not the default listener list...\r\n            delete this.$listener[property];\r\n        }\r\n    }\r\n\r\n    public hasProperty(property: string): boolean {\r\n        return this.prop.hasOwnProperty(property);\r\n    }\r\n\r\n    public addFrom(attribute: string, oldData: Data): void {\r\n        if (oldData) {\r\n            this.setValue(attribute, oldData.getValue(attribute));\r\n        } else {\r\n            this.setValue(attribute, null);\r\n        }\r\n    }\r\n\r\n    public removeKey(key: string): any {\r\n        if (this.hasProperty(key)) {\r\n            const oldValue = this.prop[key];\r\n            delete this.prop[key];\r\n            return oldValue;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected getListeners(property: string): PropertyChangeSupport[] {\r\n        property = Data.nullCheck(property);\r\n        return this.$listener[property];\r\n    }\r\n\r\n    protected firePropertyChange(attribute: string, oldValue: Object, newValue: Object) {\r\n        attribute = Data.nullCheck(attribute);\r\n        // at first fire for the given property\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(attribute);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n        // now we need to fire the Listeners that wan't to listen to everything\r\n        listeners = this.getListeners(null);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport interface EventHandler {\r\n    canHandle(): boolean;\r\n    handle(event: Event, element: DiagramElement): boolean;\r\n    setActive(active: boolean): void;\r\n}\r\n\r\nexport class EventBus {\r\n    public static CREATE: string = 'Create';\r\n    public static EDITOR: string = 'Editor';\r\n    public static OPENPROPERTIES: string = 'openProperties';\r\n    public static RELOADPROPERTIES: string = 'reloadProperties';\r\n    public static ELEMENTMOUSEDOWN: string = 'ELEMENT:MOUSEDOWN';\r\n    public static ELEMENTMOUSEUP: string = 'ELEMENT:MOUSEUP';\r\n    public static ELEMENTMOUSELEAVE: string = 'ELEMENT:MOUSELEAVE';\r\n    public static ELEMENTMOUSEMOVE: string = 'ELEMENT:MOUSEMOVE';\r\n    public static ELEMENTMOUSEWHEEL: string = 'ELEMENT:MOUSEWHEEL';\r\n    public static ELEMENTCLICK: string = 'ELEMENT:CLICK';\r\n    public static ELEMENTDBLCLICK: string = 'ELEMENT:DBLCLICK';\r\n    public static ELEMENTDRAG: string = 'ELEMENT:DRAG';\r\n    public static ELEMENTDRAGOVER: string = 'ELEMENT:DRAGOVER';\r\n    public static ELEMENTDROP: string = 'ELEMENT:DROP';\r\n    public static ELEMENTDRAGLEAVE: string = 'ELEMENT:DRAGLEAVE';\r\n\r\n    public static EVENTS: string[] = [\r\n        EventBus.CREATE,\r\n        EventBus.EDITOR,\r\n        EventBus.OPENPROPERTIES,\r\n        EventBus.RELOADPROPERTIES,\r\n        EventBus.ELEMENTMOUSEDOWN,\r\n        EventBus.ELEMENTMOUSEUP,\r\n        EventBus.ELEMENTMOUSELEAVE,\r\n        EventBus.ELEMENTMOUSEMOVE,\r\n        EventBus.ELEMENTMOUSEWHEEL,\r\n        EventBus.ELEMENTCLICK,\r\n        EventBus.ELEMENTDRAG,\r\n        EventBus.ELEMENTDBLCLICK,\r\n        EventBus.ELEMENTDRAGOVER,\r\n        EventBus.ELEMENTDROP,\r\n        EventBus.ELEMENTDRAGLEAVE,\r\n    ];\r\n\r\n    private static handlers = {};\r\n\r\n    private static $activeHandler: string = '';\r\n\r\n    public static setActiveHandler(handler: string): void {\r\n        this.$activeHandler = handler;\r\n    }\r\n\r\n    public static isHandlerActiveOrFree(handler: string, notEmpty?: boolean): boolean {\r\n        if (notEmpty) {\r\n            return this.$activeHandler === handler;\r\n        }\r\n        return this.$activeHandler === handler || this.$activeHandler === '' || this.$activeHandler === undefined;\r\n    }\r\n\r\n    public static isAnyHandlerActive(): boolean {\r\n        return !(this.$activeHandler === '' || this.$activeHandler === undefined);\r\n    }\r\n\r\n    public static releaseActiveHandler(): void {\r\n        this.$activeHandler = '';\r\n    }\r\n\r\n    public static getActiveHandler(): string {\r\n        return this.$activeHandler;\r\n    }\r\n\r\n    static register(control: Control, view: Element) {\r\n        let events: string[];\r\n        if (typeof control['getEvents'] === 'function') {\r\n            events = control['getEvents']();\r\n        }\r\n\r\n        if (!events || !view) {\r\n            return;\r\n        }\r\n        for (let event of events) {\r\n            this.registerEvent(view, event, control);\r\n        }\r\n    }\r\n\r\n    static registerEvent(view: Element, event: string, control?: any) {\r\n        const pos: number = event.indexOf(':');\r\n        if (pos > 0) {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        } else {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        }\r\n    }\r\n\r\n    public static publish(element: DiagramElement, evt: Event) {\r\n        let handlers = EventBus.handlers[evt.type];\r\n        if (handlers) {\r\n            for (let handler of handlers) {\r\n                handler.handle(evt, element);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static subscribe(handler: EventHandler, ...eventTypes: string[]) {\r\n        for (let event of eventTypes) {\r\n            let handlers = EventBus.handlers[event];\r\n            if (handlers === null || handlers === undefined) {\r\n                handlers = [];\r\n                EventBus.handlers[event] = handlers;\r\n            }\r\n            handlers.push(handler);\r\n        }\r\n    }\r\n}\r\n","import SimpleEvent from './Event';\r\n\r\nexport default class EventListener {\r\n    private $onUpdate: Function;\r\n\r\n    get onUpdate(): Function {\r\n        return this.$onUpdate;\r\n    }\r\n\r\n    set onUpdate(value: Function) {\r\n        this.$onUpdate = value;\r\n    }\r\n\r\n    update(event: SimpleEvent) {\r\n        this.$onUpdate(event);\r\n    }\r\n}\r\n","// ################################## jsEPS ####################################################\r\nimport {SVGConverter} from './SVGConverter';\r\n\r\nexport class JSEPS {\r\n    private max: number;\r\n    private min: number;\r\n    private inverting: boolean;\r\n    private output: string[];\r\n    private font: number;\r\n\r\n    constructor(options: any) {\r\n        this.max = 0;\r\n        this.min = 999;\r\n        let hasInverting = typeof (options.inverting);\r\n        this.inverting = (options && hasInverting !== 'undefined' ? options.inverting : true);\r\n        this.output = ['%!PS-Adobe-3.0 EPSF-3.0', '1 setlinewidth'];\r\n        this.out('/FSD {findfont exch scalefont def} bind def % In the document prolog: define');\r\n        this.out('/SMS {setfont moveto show} bind def % some useful procedures');\r\n        this.out('/MS {moveto show} bind def');\r\n        this.out('/F1  10  /Helvetica  FSD % At the start of the script: set up');\r\n        this.font = 1;\r\n    }\r\n\r\n    public out(value: string) {this.output.push(value); }\r\n    public rect(x: number, y: number, width: number, height: number, style: string) {\r\n        y = y + (this.inverting ? height : 0);\r\n        if (style && style.indexOf('fill:url(#classelement);') >= 0) {\r\n            this.out('gsave 0.93 0.93 0.93 setrgbcolor newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectfill grestore');\r\n        } else {\r\n            this.out('newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectstroke');\r\n        }\r\n    }\r\n    public setFillColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public y(value: number) {this.max = Math.max(this.max, value); this.min = Math.min(this.min, value); return this.inverting ? '%y(' + value + ')' : value; }\r\n    public getType(): string {\r\n        return 'application/postscript';\r\n    }\r\n\r\n    public getData(): string {\r\n        let t, end, url, text, typ = 'application/postscript', a = document.createElement('a'), data = '', pos, i;\r\n        for (i = 0; i < this.output.length; i += 1) {\r\n            text = this.output[i];\r\n            if (this.inverting) {\r\n                while ((pos = text.indexOf('%y')) >= 0) {\r\n                    end = text.indexOf(')', pos);\r\n                    t = this.max - parseInt(text.substring(pos + 3, end), 10);\r\n                    text = text.substring(0, pos) + t + text.substring(end + 1);\r\n                }\r\n            }\r\n            data = data + text + '\\r\\n';\r\n        }\r\n        return data;\r\n    }\r\n\r\n    public setDrawColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public ellipse(cx: number, cy: number, rx: number, ry: number, colorMode: string) {/*FIXME*/}\r\n    public circle(cx: number, cy: number, r: number, colorMode: string) {/*FIXME*/}\r\n    public setTextColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public text(x: number, y: number, text: string) {this.out('(' + text.replace('&lt;', '<').replace('&gt;', '>') + ') ' + x + ' ' + this.y(y) + ' F1 SMS'); }\r\n    public lineto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' lineto'); this.out('stroke'); }\r\n    public moveto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' moveto'); }\r\n    public line(x1: number, y1: number, x2: number, y2: number) {this.out('newpath ' + x1 + ' ' + this.y(y1) + ' moveto ' + x2 + ' ' + this.y(y2) + ' lineto stroke'); }\r\n    public setLineWidth(value: string) {this.out(value + ' setlinewidth'); }\r\n    public setFont(value: string) {this.out('/F' + (this.font += 1) + ' 10 /' + value + ' FSD'); }\r\n}\r\n","import { Graph } from './elements/Graph';\r\n\r\n/*const buttons = {\r\n    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    clazz: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n};\r\n*/\r\nexport default class Palette {\r\n\r\n    private graph: Graph;\r\n    private palette: Element;\r\n    private root: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n        let div = document.createElement('div');\r\n        div.className = 'palette';\r\n        div.id = 'palette';\r\n        this.root = div;\r\n        this.palette = div;\r\n        for (let key in graph.nodeFactory) {\r\n            let element = graph.nodeFactory[key];\r\n            let control = new element();\r\n            let icon = control.getToolBarIcon();\r\n            if (icon) {\r\n                let button = <HTMLButtonElement>document.createElement('button');\r\n                button.className = 'add' + key + 'Btn';\r\n                button.innerHTML = icon.outerHTML;\r\n                button.onclick = e => {\r\n                    let nextFreePosition = this.graph.getNextFreePosition();\r\n                    // let node = this.graph.addElementWithValues(graph.nodeFactory[key], {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    let node = this.graph.addElementWithValues(key, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    this.graph.drawElement(node);\r\n                };\r\n                this.palette.appendChild(button);\r\n            }\r\n        }\r\n        // this.graph.nodeFactory\r\n//        this.addButtons();\r\n    }\r\n\r\n    public show() {\r\n        document.body.appendChild(this.root);\r\n    }\r\n\r\n    private addButtons() {\r\n        /*for (let btn in buttons) {\r\n            let button = <HTMLButtonElement>document.createElement('button');\r\n            button.className = 'add' + btn + 'Btn';\r\n            button.innerHTML = buttons[btn];\r\n            button.onclick = e => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let node = this.graph.addElementWithValues(btn, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                this.graph.drawElement(node);\r\n            };\r\n            this.palette.appendChild(button);\r\n        }*/\r\n    }\r\n}\r\n","import {Graph} from './elements/Graph';\r\nimport * as edges from './elements/edges';\r\nimport {EventBus, EventHandler} from './EventBus';\r\nimport {DiagramElement} from './elements/BaseElements';\r\nimport {Util} from './util';\r\n\r\nexport class PanelGroup implements EventHandler {\r\n    private graph: Graph;\r\n    private selectedElement: DiagramElement;\r\n    private clearPanel: Panel;\r\n    private generatePanel: Panel;\r\n    private propertiesMasterPanel: HTMLDivElement;\r\n    private propertiesContent: HTMLDivElement;\r\n    private propHeaderLabel: HTMLDivElement;\r\n    private propHeaderButton: HTMLButtonElement;\r\n    private selectedPanel: Panel;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.clearPanel = new ClearPanel(this);\r\n        this.generatePanel = new GeneratePanel(this);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        this.handleOpenProperties(event, element);\r\n\r\n        if (event.type === EventBus.RELOADPROPERTIES\r\n            && this.selectedElement && element.id === this.selectedElement.id) {\r\n            this.handleEvent(event, element);\r\n        }\r\n\r\n        // the same element was clicked. do nothing\r\n        if (this.selectedElement && this.selectedElement.id === element.id) {\r\n            return true;\r\n        }\r\n        if (element.id === 'RootElement') {\r\n            this.setActivePanel(this.clearPanel);\r\n        }\r\n        if (element.id === 'GenerateProp') {\r\n            this.setActivePanel(this.generatePanel);\r\n        }\r\n        this.selectedElement = element;\r\n\r\n        return true;\r\n    }\r\n\r\n    public getGraph(): Graph {\r\n        return this.graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(PanelGroup.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(PanelGroup.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n     public handleEvent(event: any, element: any) {\r\n        // DO NOTHING\r\n    }\r\n\r\n    public show() {\r\n        // main div to display any properties, class, edge, etc.\r\n        this.propertiesMasterPanel = document.createElement('div');\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n\r\n        this.propertiesContent = document.createElement('div');\r\n        this.propertiesContent.className = 'properties-hidden';\r\n\r\n        this.propHeaderLabel = document.createElement('div');\r\n        this.propHeaderLabel.style.display = 'inherit';\r\n        this.propHeaderLabel.style.cursor = 'pointer';\r\n        this.propHeaderLabel.onclick = e => this.toogleProperties(e);\r\n\r\n        // button to display and hide the properties of e.g. a class\r\n        this.propHeaderButton = document.createElement('button');\r\n        this.propHeaderButton.className = 'btnHideProp';\r\n        this.propHeaderButton.style.cssFloat = 'right';\r\n        this.propHeaderButton.onclick = e => this.toogleProperties(e);\r\n\r\n        let propertiesHeader = document.createElement('div');\r\n        propertiesHeader.style.display = 'inline';\r\n        propertiesHeader.appendChild(this.propHeaderLabel);\r\n        propertiesHeader.appendChild(this.propHeaderButton);\r\n\r\n        this.propertiesMasterPanel.appendChild(propertiesHeader);\r\n        this.propertiesMasterPanel.appendChild(this.propertiesContent);\r\n        document.body.appendChild(this.propertiesMasterPanel);\r\n\r\n        this.setActivePanel(this.clearPanel);\r\n    }\r\n\r\n    public setActivePanel(panel: Panel) {\r\n        this.selectedPanel = panel;\r\n        this.propHeaderLabel.innerHTML = panel.getHeaderText();\r\n        if (this.propertiesContent) {\r\n            while (this.propertiesContent.hasChildNodes()) {\r\n                this.propertiesContent.removeChild(this.propertiesContent.childNodes[0]);\r\n            }\r\n        }\r\n        panel.show();\r\n\r\n        panel.showFirstTab();\r\n        if (panel !== this.clearPanel) {\r\n            this.showProperties(null);\r\n        } else {\r\n            this.hideProperties(null);\r\n        }\r\n    }\r\n\r\n    public getProperiesContent(): HTMLDivElement {\r\n        return this.propertiesContent;\r\n    }\r\n\r\n    private handleOpenProperties(event: Event, element: DiagramElement) {\r\n        if (event.type === 'dblclick') {\r\n            this.showProperties(event);\r\n        }\r\n    }\r\n\r\n    private showProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Show\r\n        this.propHeaderButton.innerHTML = '&#8897;';\r\n        this.propHeaderButton.title = 'Hide properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel';\r\n        this.propertiesContent.className = 'properties';\r\n    }\r\n\r\n    private toogleProperties(evt: Event): void {\r\n        if (this.propHeaderButton.title === 'Show properties') {\r\n            this.showProperties(evt);\r\n        } else {\r\n            this.hideProperties(evt);\r\n        }\r\n    }\r\n\r\n    private hideProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Hide\r\n        this.propHeaderButton.innerHTML = '&#8896;';\r\n        this.propHeaderButton.title = 'Show properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n        this.propertiesContent.className = 'properties-hidden';\r\n    }\r\n}\r\n\r\nexport abstract class Panel {\r\n    protected divPropertiesPanel: HTMLDivElement;\r\n    protected divPropertiesTabbedPanel: HTMLDivElement;\r\n    protected element: any;\r\n    protected group: PanelGroup;\r\n    private panelItem: PanelItem[] = [];\r\n\r\n    constructor(group: PanelGroup, element: any) {\r\n        // get the properties content panel\r\n        this.divPropertiesPanel = document.createElement('div');\r\n        this.element = element;\r\n        this.group = group;\r\n\r\n        this.divPropertiesTabbedPanel = document.createElement('div');\r\n        this.divPropertiesTabbedPanel.className = 'tabbedpane';\r\n\r\n        // add tabbed panel\r\n        this.divPropertiesPanel.appendChild(this.divPropertiesTabbedPanel);\r\n    }\r\n\r\n    public show(): void {\r\n        let propertiesContent: HTMLDivElement = this.group.getProperiesContent();\r\n        if (this.panelItem.length > 1) {\r\n            propertiesContent.appendChild(this.getPropertiesTabbedPanel());\r\n        }\r\n\r\n        propertiesContent.appendChild(this.getPropertiesPanel());\r\n    }\r\n\r\n    public getPropertiesTabbedPanel(): HTMLDivElement {\r\n        return this.divPropertiesTabbedPanel;\r\n    }\r\n\r\n    public getPropertiesPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return '';\r\n    }\r\n\r\n    public showFirstTab(): void {\r\n        if (this.panelItem.length > 0) {\r\n            this.openTab(this.panelItem[0]);\r\n        }\r\n    }\r\n\r\n    protected createTabElement(tabText: string, tabValue: string, item: PanelItem): PanelItem {\r\n        let tabElementBtn = document.createElement('button');\r\n        tabElementBtn.className = 'tablinks';\r\n        tabElementBtn.innerText = tabText;\r\n        tabElementBtn.value = tabValue;\r\n\r\n        if (item === null) {\r\n            item = new PanelItem(this);\r\n        }\r\n        item.withButton(tabElementBtn);\r\n\r\n        tabElementBtn.onclick = () => this.openTab(item);\r\n        this.divPropertiesTabbedPanel.appendChild(tabElementBtn);\r\n        this.panelItem.push(item);\r\n        return item;\r\n    }\r\n\r\n    protected openTab(panelItem: PanelItem): void {\r\n        for (let key in this.panelItem) {\r\n            let child = this.panelItem[key];\r\n            if (child !== panelItem) {\r\n                 child.deactive();\r\n            }\r\n        }\r\n        panelItem.active();\r\n        // hide other tabcontent\r\n        if (this.divPropertiesPanel) {\r\n            while (this.divPropertiesPanel.hasChildNodes()) {\r\n                this.divPropertiesPanel.removeChild(this.divPropertiesPanel.childNodes[0]);\r\n            }\r\n        }\r\n\r\n        // ADD\r\n        if (panelItem.getContent()) {\r\n            this.divPropertiesPanel.appendChild(panelItem.getContent());\r\n        }\r\n    }\r\n}\r\n\r\nexport class GeneratePanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n\r\n        let item: PanelItem = this.createTabElement('General', 'General', null);\r\n\r\n        // Workspace and generate code stuff\r\n        let inputGenerateWorkspace: HTMLInputElement =  <HTMLInputElement> Util.createHTML({tag: 'input', id: 'workspace', type: 'text', placeholder: 'Type your Folder for generated code...', value: 'src/main/java', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Folder:', inputGenerateWorkspace);\r\n\r\n        let inputGeneratePackage: HTMLInputElement = <HTMLInputElement> Util.createHTML({tag: 'input', id: 'package', type: 'text', placeholder: 'Type your workspace for generated code...', value: '', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Package:', inputGeneratePackage);\r\n\r\n        let options = document.createElement('div');\r\n        options.style.textAlign = 'center';\r\n        options.style.margin = '3';\r\n        options.style.padding = '5';\r\n\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(options);\r\n\r\n        options.style.borderStyle = 'groove';\r\n        options.style.borderRadius = '10px';\r\n\r\n        let btnGenerate = document.createElement('button');\r\n        btnGenerate.textContent = 'Generate';\r\n        btnGenerate.title = 'Generate code into your workspace';\r\n        btnGenerate.className = 'OptionElement';\r\n\r\n        let that = this;\r\n        btnGenerate.onclick = () => {\r\n            let workspace = inputGeneratePackage.value;\r\n            if (workspace.length === 0) {\r\n                alert('No workspace set.\\nEnter first your workspace');\r\n                inputGeneratePackage.focus();\r\n                return;\r\n            }\r\n            that.group.getGraph().generate(workspace, inputGenerateWorkspace.value);\r\n        };\r\n        options.appendChild(btnGenerate);\r\n        options.appendChild(document.createElement('hr'));\r\n        options.appendChild(document.createElement('br'));\r\n\r\n        let btnAutoLayout = Util.createHTML({tag: 'button', className: 'OptionElement', value: 'Auto Layout', style: {marginRight: '10px'}, onclick: () => {\r\n                that.group.getGraph().layout();\r\n            }});\r\n\r\n        options.appendChild(btnAutoLayout);\r\n\r\n        // delete all nodes\r\n        let btnDeleteAll = document.createElement('button');\r\n        btnDeleteAll.className = 'OptionElement';\r\n        btnDeleteAll.textContent = 'Delete All';\r\n        btnDeleteAll.title = 'Delete all nodes from diagram';\r\n\r\n        btnDeleteAll.onclick = () => {\r\n            let confirmDelete = confirm('All classes will be deleted!');\r\n            if (!confirmDelete) {\r\n                return;\r\n            }\r\n            that.group.getGraph().$graphModel.removeAllElements();\r\n        };\r\n        btnDeleteAll.style.marginRight = '10px';\r\n        options.appendChild(btnDeleteAll);\r\n\r\n        // export stuff\r\n        let exportTypes: string[] = ['Export', 'HTML', 'JSON', 'PDF', 'PNG', 'SVG'];\r\n        let selectExport = document.createElement('select');\r\n\r\n        exportTypes.forEach(type => {\r\n            if (!(!window['jsPDF'] && type === 'PDF')) {\r\n                let option = document.createElement('option');\r\n                option.value = type;\r\n                option.textContent = type;\r\n                selectExport.appendChild(option);\r\n            }\r\n        });\r\n\r\n        selectExport.onchange = (evt) => {\r\n            let selectedExportType = selectExport.options[selectExport.selectedIndex].value;\r\n            selectExport.selectedIndex = 0;\r\n            that.group.getGraph().saveAs(selectedExportType);\r\n        };\r\n        selectExport.className = 'OptionElement';\r\n        options.appendChild(selectExport);\r\n        options.appendChild(document.createElement('br'));\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Properties';\r\n    }\r\n\r\n}\r\n\r\nexport class ClearPanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Select any element to see its properties';\r\n    }\r\n}\r\n\r\nexport class PanelItem {\r\n    protected panel: Panel;\r\n    protected label: string;\r\n    protected button: HTMLButtonElement;\r\n    protected content: HTMLDivElement = <HTMLDivElement>Util.create({tag: 'div', className: 'tabContent'});\r\n\r\n    constructor(panel: Panel, label?: string) {\r\n        this.panel = panel;\r\n        this.label = label;\r\n    }\r\n\r\n    public active(): void {\r\n        if (this.getButton()) {\r\n            this.getButton().className += ' active';\r\n        }\r\n    }\r\n\r\n    public deactive(): void {\r\n        if (this.getButton()) {\r\n            Util.removeClass(this.getButton(), 'active');\r\n        }\r\n    }\r\n\r\n    public withButton(button: HTMLButtonElement): PanelItem {\r\n        this.button = button;\r\n        return this;\r\n    }\r\n\r\n    public withContent(element: HTMLElement): PanelItem {\r\n        this.content.appendChild(element);\r\n        return this;\r\n    }\r\n\r\n    public withInput(labelText: string, element: HTMLElement): PanelItem {\r\n        let group: HTMLDivElement = <HTMLDivElement> Util.createHTML({tag: 'div'});\r\n        let label = Util.createHTML({tag: 'label', for: element.id, value: labelText});\r\n        group.appendChild(label);\r\n        group.appendChild(element);\r\n\r\n        this.content.appendChild(group);\r\n        return this;\r\n    }\r\n\r\n    public getButton(): HTMLButtonElement {\r\n        return this.button;\r\n    }\r\n\r\n    public getContent(): HTMLDivElement {\r\n        return this.content;\r\n    }\r\n\r\n   public getHeader(): string {\r\n        return this.label;\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\nimport Data from './Data';\r\n\r\nexport class PropertyBinder implements PropertyChangeSupport {\r\n    private propertyClass1: string;\r\n    private propertyClass2: string;\r\n    private data1: Data;\r\n    private data2: Data;\r\n    // works like a lock\r\n    private applyingChange: boolean = false;\r\n\r\n    constructor(data1: Data, data2: Data, propertyClass1: string, propertyClass2: string) {\r\n        this.data1 = data1;\r\n        this.data2 = data2;\r\n        this.propertyClass1 = propertyClass1;\r\n        this.propertyClass2 = propertyClass2;\r\n    }\r\n    static bind(data1: Data, data2: Data, property1: string, property2: string) {\r\n        if (!data1 || !data2 || !property1) {\r\n            console.error('NullValue!!');\r\n            return null;\r\n        }\r\n        const propertyBinder = new PropertyBinder(data1, data2, property1, property2);\r\n        propertyBinder.bind();\r\n        return propertyBinder;\r\n    }\r\n\r\n    propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        if (!this.applyingChange) {\r\n            this.applyingChange = true;\r\n            if (entity === this.data1) {\r\n                // fire to data2\r\n                this.data2.setValue(this.propertyClass2, newValue);\r\n            } else if (entity === this.data2) {\r\n                // fire to data1\r\n                this.data1.setValue(this.propertyClass1, newValue);\r\n            }\r\n            this.applyingChange = false;\r\n        }\r\n    }\r\n\r\n    protected bind() {\r\n        // public addListener(control: Control, property?: string)\r\n        // todo: set value immediately\r\n        this.data1.setValue(this.propertyClass1, this.data2.getValue(this.propertyClass2));\r\n\r\n        this.data1.addListener(this, this.propertyClass1);\r\n        this.data2.addListener(this, this.propertyClass2);\r\n    }\r\n\r\n    protected unbind() {\r\n        // public addListener(control: Control, property?: string)\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n    }\r\n}\r\n","// ################################## RGBColor ####################################################\r\nexport class RGBColor {\r\n    public  ok: boolean;\r\n    public r: number;\r\n    public g: number;\r\n    public b: number;\r\n\r\n    constructor(value: string) {\r\n        this.ok = false;\r\n        if (value === 'none') {\r\n            return;\r\n        }\r\n        let computedColor, div = document.createElement('div');\r\n        div.style.backgroundColor = value;\r\n        document.body.appendChild(div);\r\n        computedColor = window.getComputedStyle(div).backgroundColor;\r\n        // cleanup temporary div.\r\n        document.body.removeChild(div);\r\n        this.convert(computedColor);\r\n    }\r\n    public convert(value: any) {\r\n        let values, regex = /rgb *\\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\\)/;\r\n        values = regex.exec(value);\r\n        this.r = parseInt(values[1], 10);\r\n        this.g = parseInt(values[2], 10);\r\n        this.b = parseInt(values[3], 10);\r\n        this.ok = true;\r\n    }\r\n\r\n    public toRGB(): string {return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; }\r\n    public toHex(): string {\r\n        return '#' + (this.r + 0x10000).toString(16).substring(3).toUpperCase() + (this.g + 0x10000).toString(16).substring(3).toUpperCase() + (this.b + 0x10000).toString(16).substring(3).toUpperCase();\r\n    }\r\n}\r\n","/*\r\n NetworkParser\r\n Copyright (c) 2011 - 2014, Stefan Lindel\r\n All rights reserved.\r\n\r\n Licensed under the EUPL, Version 1.1 or (as soon they\r\n will be approved by the European Commission) subsequent\r\n versions of the EUPL (the \"Licence\");\r\n You may not use this work except in compliance with the Licence.\r\n You may obtain a copy of the Licence at:\r\n\r\n http://ec.europa.eu/idabc/eupl5\r\n\r\n Unless required by applicable law or agreed to in\r\n writing, software distributed under the Licence is\r\n distributed on an \"AS IS\" basis,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\r\n express or implied.\r\n See the Licence for the specific language governing\r\n permissions and limitations under the Licence.\r\n*/\r\nimport {RGBColor} from './RGBColor';\r\nimport {JSEPS} from \"./JSEPS\";\r\n\r\nconst epsSvgAttr = {\r\n    // allowed attributes. all others are removed from the preview.\r\n    g: ['stroke', 'fill', 'stroke-width'],\r\n    line: ['x1', 'y1', 'x2', 'y2', 'stroke', 'stroke-width'],\r\n    rect: ['x', 'y', 'width', 'height', 'stroke', 'fill', 'stroke-width'],\r\n    ellipse: ['cx', 'cy', 'rx', 'ry', 'stroke', 'fill', 'stroke-width'],\r\n    circle: ['cx', 'cy', 'r', 'stroke', 'fill', 'stroke-width'],\r\n    text: ['x', 'y', 'font-size', 'font-family', 'text-anchor', 'font-weight', 'font-style', 'fill'],\r\n    path: ['']\r\n};\r\nexport class SVGConverter {\r\n    private k: number;\r\n    private remove: boolean;\r\n    private target: any;\r\n\r\n    constructor(element: any, target: any, options: any) {\r\n        this.k = 1.0;\r\n        let hasScale = typeof (options.scale), hasRemoveInvalid = typeof (options.removeInvalid);\r\n        this.k = (options && hasScale !== 'undefined' ? options.scale : 1.0);\r\n        this.remove = (options && hasRemoveInvalid !== 'undefined' ? options.removeInvalid : false);\r\n        this.target = target;\r\n        this.parse(element);\r\n    }\r\n\r\n    public parse(element: any) {\r\n        let el, i, n, colorMode, hasFillColor, fillRGB, fillColor, strokeColor, strokeRGB, fontType, pdfFontSize, x, y,\r\n            box, xOffset;\r\n        if (!element) {\r\n            return;\r\n        }\r\n        if (typeof element === 'string') {\r\n            el = document.createElement('div');\r\n            el.innerHTML = element;\r\n            element = el.childNodes[0];\r\n        }\r\n        for (i = 0; i < element.children.length; i += 1) {\r\n            n = element.children[i];\r\n            colorMode = null;\r\n            hasFillColor = false;\r\n            if ('g,line,rect,ellipse,circle,text'.indexOf(n.tagName) >= 0) {\r\n                fillColor = n.getAttribute('fill');\r\n                if (fillColor) {\r\n                    fillRGB = new RGBColor(fillColor);\r\n                    if (fillRGB.ok) {\r\n                        hasFillColor = true;\r\n                        colorMode = 'F';\r\n                    }\r\n                }\r\n            }\r\n            if ('g,line,rect,ellipse,circle'.indexOf(n.tagName) >= 0) {\r\n                if (hasFillColor) {\r\n                    this.target.setFillColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                }\r\n                strokeColor = n.getAttribute('stroke');\r\n                if (n.hasAttribute('stroke-width')) {\r\n                    this.target.setLineWidth(this.attr(n, 'stroke-width'));\r\n                }\r\n                if (strokeColor) {\r\n                    strokeRGB = new RGBColor(strokeColor);\r\n                    if (strokeRGB.ok) {\r\n                        this.target.setDrawColor(strokeRGB.r, strokeRGB.g, strokeRGB.b);\r\n                        if (colorMode === 'F') {\r\n                            colorMode = 'FD';\r\n                        } else if (!hasFillColor) {\r\n                            colorMode = 'S';\r\n                        }\r\n                    } else {\r\n                        colorMode = null;\r\n                    }\r\n                }\r\n            }\r\n            // console.log(\"write \"+n.tagName);\r\n            switch (n.tagName.toLowerCase()) {\r\n                case 'svg':\r\n                case 'a':\r\n                case 'g':\r\n                    this.parse(n);\r\n                    break;\r\n                case 'line':\r\n                    this.target.line(this.attr(n, 'x1'), this.attr(n, 'y1'), this.attr(n, 'x2'), this.attr(n, 'y2'));\r\n                    break;\r\n                case 'rect':\r\n                    this.target.rect(this.attr(n, 'x'), this.attr(n, 'y'), this.attr(n, 'width'), this.attr(n, 'height'), n.getAttribute('style'));\r\n                    break;\r\n                case 'ellipse':\r\n                    this.target.ellipse(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'rx'), this.attr(n, 'ry'), colorMode);\r\n                    break;\r\n                case 'circle':\r\n                    this.target.circle(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'r'), colorMode);\r\n                    break;\r\n                case 'text':\r\n                    if (n.hasAttribute('font-family')) {\r\n                        switch (n.getAttribute('font-family').toLowerCase()) {\r\n                            case 'serif':\r\n                                this.target.setFont('times');\r\n                                break;\r\n                            case 'monospace':\r\n                                this.target.setFont('courier');\r\n                                break;\r\n                            default:\r\n                                n.getAttribute('font-family', 'sans-serif');\r\n                                this.target.setFont('Helvetica');\r\n                        }\r\n                    }\r\n                    if (hasFillColor) {\r\n                        this.target.setTextColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                    }\r\n                    if (this.target instanceof JSEPS) {\r\n                        this.target.text(this.attr(n, 'x'), this.attr(n, 'y'), n.innerHTML);\r\n                        break;\r\n                    }\r\n                    fontType = '';\r\n                    if (n.hasAttribute('font-weight')) {\r\n                        if (n.getAttribute('font-weight') === 'bold') {\r\n                            fontType = 'bold';\r\n                        }\r\n                    }\r\n                    if (n.hasAttribute('font-style')) {\r\n                        if (n.getAttribute('font-style') === 'italic') {\r\n                            fontType += 'italic';\r\n                        }\r\n                    }\r\n                    this.target.setFontType(fontType);\r\n                    pdfFontSize = 16;\r\n                    if (n.hasAttribute('font-size')) {\r\n                        pdfFontSize = parseInt(n.getAttribute('font-size'), 10);\r\n                    }\r\n                    box = n.getBBox();\r\n                    // FIXME: use more accurate positioning!!\r\n                    x = this.attr(n, 'x');\r\n                    y = this.attr(n, 'y');\r\n                    xOffset = 0;\r\n                    if (n.hasAttribute('text-anchor')) {\r\n                        switch (n.getAttribute('text-anchor')) {\r\n                            case 'end':\r\n                                xOffset = box.width;\r\n                                break;\r\n                            case 'middle':\r\n                                xOffset = box.width / 2;\r\n                                break;\r\n                            case 'start':\r\n                                break;\r\n                            case 'default':\r\n                                n.getAttribute('text-anchor', 'start');\r\n                                break;\r\n                        }\r\n                        x = x - (xOffset * this.k);\r\n                    }\r\n                    this.target.setFontSize(pdfFontSize).text(x, y, n.innerHTML);\r\n                    break;\r\n                default:\r\n                    if (this.remove) {\r\n                        console.log('cant translate to target:', n);\r\n                        element.removeChild(n);\r\n                        i -= 1;\r\n                    }\r\n            }\r\n        }\r\n    }\r\n\r\n    public attr(node: any, name: string) {\r\n        return this.k * parseInt(node.getAttribute(name), 10);\r\n    }\r\n}\r\n","import {Control} from './Control';\r\n\r\nexport class ScrumBoard extends Control {\r\n    public static cards = [0, 0.5, 1, 2, 3, 5, 8, 13, 20, 40, 100, '?', 'Coffee'];\r\n    private $selected: HTMLDivElement;\r\n    private $board: HTMLDivElement;\r\n\r\n    constructor() {\r\n        super();\r\n        this.redraw();\r\n    }\r\n\r\n    public redraw(): void {\r\n        if (this.$board) {\r\n            while (this.$board.children.length > 0 ) {\r\n                this.$board.removeChild(this.$board.children[0]);\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('div');\r\n            this.$selected = document.createElement('div');\r\n            this.$board = document.createElement('div');\r\n            this.$view.appendChild(this.$board);\r\n            this.$view.appendChild(this.$selected);\r\n        }\r\n        this.$view.className = 'ScrumBoard';\r\n        for ( let i = 0; i < ScrumBoard.cards.length; i++) {\r\n            let card = document.createElement('div');\r\n            card.className = 'ScrumCard';\r\n            card.innerHTML = <string>ScrumBoard.cards[i];\r\n            card['pokervalue'] = <string>ScrumBoard.cards[i];\r\n            card.onclick = e => {\r\n                this.onClick(<HTMLDivElement>e.target);\r\n            };\r\n            this.$board.appendChild(card);\r\n        }\r\n    }\r\n\r\n    public getSVG() {\r\n        this.redraw();\r\n        return this.$view;\r\n    }\r\n\r\n    public onClick(target: HTMLDivElement): void {\r\n        console.log(target['pokervalue']);\r\n\r\n        while (this.$selected.children.length > 0 ) {\r\n            this.$selected.removeChild(this.$selected.children[0]);\r\n        }\r\n        let card = document.createElement('div');\r\n        card.className = 'ScrumCard';\r\n        card['pokervalue'] = target['pokervalue'];\r\n        card.onclick = e => {\r\n            this.onShow(<HTMLDivElement>e.target);\r\n        };\r\n        this.$selected.appendChild(card);\r\n        this.$board['style']['display'] = 'none';\r\n    }\r\n\r\n    public onShow(target: HTMLDivElement): void {\r\n        target.innerHTML = target['pokervalue'];\r\n    }\r\n}\r\n","import {Graph} from './main';\r\nimport {SymbolLibary} from './elements/nodes/Symbol';\r\nimport {EventBus} from './EventBus';\r\n\r\nexport class Toolbar {\r\n\r\n    private graph: Graph;\r\n    private mainDiv: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public show(): void {\r\n        if (this.mainDiv) {\r\n            return;\r\n        }\r\n\r\n        this.mainDiv = document.createElement('div');\r\n        this.mainDiv.className = 'toolbar';\r\n\r\n        let h1Logo = document.createElement('h1');\r\n        h1Logo.className = 'logo';\r\n        h1Logo.textContent = 'DiagramJS';\r\n\r\n        let node = {type: 'Hamburger', property: 'HTML', width: 24, height: 24, id: 'GenerateProp'};\r\n        let hamburger = SymbolLibary.draw( node);\r\n        EventBus.registerEvent(hamburger, 'click', node);\r\n        this.mainDiv.appendChild(hamburger);\r\n\r\n        this.mainDiv.appendChild(h1Logo);\r\n        document.body.appendChild(this.mainDiv);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 06.03.2017.\r\n */\r\nimport Data from './Data';\r\n\r\n// export default class Data {\r\n//    public values = {};\r\n//    id: string;\r\n//    $listener: Control[] = [];\r\n//    property: string;\r\nexport namespace UML {\r\n    export class Clazz extends Data {\r\n        public static NAME: string = 'name';\r\n        public static ATTRIBUTES: string = 'attributes';\r\n        public static METHODS: string = 'methods';\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Clazz';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n\r\n        public getAttributes() {\r\n            return this.prop[Clazz.ATTRIBUTES];\r\n        }\r\n\r\n        public addToAttributes(newValue: string) {\r\n            this.addTo(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n\r\n        public removeFromAttributes(newValue: string) {\r\n            this.removeFrom(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n    }\r\n\r\n    export class Attribute extends Data {\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Attribute';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n    }\r\n\r\n    export class Methods extends Data {\r\n\r\n    }\r\n}\r\n\r\nwindow['UML'] = UML;\r\n","import {Control} from './Control';\r\n\r\nexport class VirtualKeyBoard extends Control {\r\n    constructor(data: any) {\r\n        super();\r\n        if (!data) {\r\n            data = this.getDefault();\r\n        }\r\n        let board = document.createElement('div');\r\n        this.$viewData = data;\r\n\r\n        for (let type in data) {\r\n            if (type === 'normal') {\r\n                for (let line in data[type]) {\r\n                    let lineBoard = document.createElement('div');\r\n                    lineBoard.className = 'vkLine';\r\n                    for (let key in data[type][line]) {\r\n                        let btn: HTMLButtonElement = document.createElement('button');\r\n                        let keyTag = data[type][line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                        btn.ontouchend = () => {this.action(btn); };\r\n                        btn.onclick = () => {this.action(btn); };\r\n                        lineBoard.appendChild(btn);\r\n                    }\r\n                    board.appendChild(lineBoard);\r\n                }\r\n            }\r\n        }\r\n        this.$view = board;\r\n    }\r\n\r\n    public action(btn: HTMLButtonElement) {\r\n        if (btn['key'] === '{Shift}') {\r\n            if ( btn.className === 'vkbuttonAction') {\r\n                let keys = this.$viewData['normal'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                    }\r\n                }\r\n            } else if ( btn.className === 'vkbutton') {\r\n                let keys = this.$viewData['shift'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbuttonAction');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        alert(btn);\r\n    }\r\n\r\n    public getDefault(): any {\r\n        let format = {\r\n            normal: [\r\n                ['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '?', '´', '{Bksp}'],\r\n                ['{Tab}', 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+'],\r\n                ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '#', '{enter}'],\r\n                ['{Shift}', '<', 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n// '{left}', '{up}', '{down}','{right}', '{Cancel}']\r\n            ],\r\n            shift: [\r\n                ['°', '!', '\"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '`', '{Bksp}'],\r\n                ['{Tab}', 'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', 'O', 'P', 'Ü', '*'],\r\n                ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', '\\'', '{enter}'],\r\n                ['{Shift}', '>', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n            ]\r\n        };\r\n        return format;\r\n    }\r\n\r\n    public getBoard() {\r\n        return this.$view;\r\n    }\r\n\r\n    private setButtonValue(keyTag: string, btn: HTMLButtonElement, shiftClass: string) {\r\n        btn.className = 'vkbutton';\r\n        btn['key'] = keyTag;\r\n        btn['type'] = 'normal';\r\n        if (keyTag.substring(0, 1) === '{') {\r\n            if (keyTag === '{Bksp}') {\r\n                btn.innerHTML = 'Bksp';\r\n            } else if (keyTag === '{Tab}') {\r\n                btn.innerHTML = '&#8677; Tab';\r\n            } else if (keyTag === '{enter}') {\r\n                btn.innerHTML = 'enter';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Shift}') {\r\n                btn.innerHTML = 'Shift';\r\n                btn.className = shiftClass;\r\n            } else if (keyTag === '{Accept}') {\r\n                btn.innerHTML = 'Accept';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Alt}') {\r\n                btn.innerHTML = 'Alt';\r\n            } else if (keyTag === '{Space}') {\r\n                btn.innerHTML = '&nbsp;';\r\n                btn.className = 'vkbuttonSpace';\r\n            } else if (keyTag === '{left}') {\r\n                btn.innerHTML = '&#8592';\r\n            } else if (keyTag === '{right}') {\r\n                btn.innerHTML = '&#8594;';\r\n            } else if (keyTag === '{up}') {\r\n                btn.innerHTML = '&#8593;';\r\n            } else if (keyTag === '{down}') {\r\n                btn.innerHTML = '&#8595;';\r\n            } else if (keyTag === '{Cancel}') {\r\n                btn.innerHTML = 'Cancel';\r\n                btn.className = 'vkbuttonAction';\r\n            }\r\n        } else {\r\n            btn.innerHTML = keyTag;\r\n        }\r\n    }\r\n}\r\n","import {Adapter} from '../Adapter';\r\n\r\nexport class JavaAdapter extends Adapter {\r\n    constructor() {\r\n        super();\r\n        this.id = 'JavaAdapter';\r\n    }\r\n    update(evt: Object): boolean {\r\n        if (this.isActive()) {\r\n            window['JavaBridge'].executeChange(evt);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public isActive(): boolean {\r\n        return window['JavaBridge'];\r\n    }\r\n}\r\n","export * from './JavaAdapter';\r\n","import { Util } from '../util';\r\nimport { Control } from '../Control';\r\n\r\nexport interface Size {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\ninterface GraphElement {\r\n    getSize(): Point;\r\n\r\n    getPos(): Point;\r\n\r\n    getCenter(): Point;\r\n\r\n    getSVG(): Element;\r\n\r\n    getCanvas(): Element;\r\n\r\n    getEvents(): string[];\r\n\r\n    withPos(x: number, y: number): GraphElement;\r\n\r\n    load(data: any): any;\r\n\r\n    getToolBarIcon(): Element;\r\n\r\n    loadProperties(properties: any): void;\r\n}\r\n\r\nexport abstract class DiagramElement extends Control implements GraphElement {\r\n\r\n    protected $isDraggable: boolean = true;\r\n    protected $labelHeight = 25;\r\n    protected $labelFontSize = 14;\r\n    private $pos: Point = new Point();\r\n    private $size: Point = new Point();\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getPos(): Point {\r\n        return this.$pos;\r\n    }\r\n\r\n    public getSize(): Point {\r\n        return this.$size;\r\n    }\r\n\r\n    public getCenter(): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        return new Point(pos.x + size.x / 2, pos.y + size.y / 2);\r\n    }\r\n\r\n    public getCenterPosition(p: string): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let offset = this['$' + p];\r\n        let center = this.getCenter();\r\n        if (p === Point.DOWN) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y + size.y, Point.DOWN);\r\n        }\r\n        if (p === Point.UP) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y, Point.UP);\r\n        }\r\n        if (p === Point.LEFT) {\r\n            return new Point(pos.x, Math.min(center.y + offset, pos.y + size.y), Point.LEFT);\r\n        }\r\n        if (p === Point.RIGHT) {\r\n            return new Point(pos.x + size.x, Math.min(center.y + offset, pos.y + size.y), Point.RIGHT);\r\n        }\r\n        return new Point();\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getCanvas(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return null;\r\n    }\r\n\r\n    public getAlreadyDisplayingSVG(): Element {\r\n        return document.getElementById(this.id) || this.getSVG();\r\n    }\r\n\r\n    public load(data: any) {\r\n        // Do Nothing\r\n    }\r\n\r\n    public withPos(x: number, y: number): GraphElement {\r\n        if (x && y) {\r\n            this.$pos = new Point(x, y);\r\n        } else {\r\n            if (typeof (x) !== 'undefined' && x !== null) {\r\n                this.$pos.x = x;\r\n            }\r\n            if (typeof (y) !== 'undefined' && y !== null) {\r\n                this.$pos.y = y;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public withSize(width: number, height: number): DiagramElement {\r\n        if (width && height) {\r\n            this.$size = new Point(width, height);\r\n        } else {\r\n            if (typeof (width) !== 'undefined' && width !== null) {\r\n                this.$size.x = width;\r\n            }\r\n            if (typeof (height) !== 'undefined' && height !== null) {\r\n                this.$size.y = height;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        // FIXME if (this.status === 'close') {\r\n        // if (!this.$owner.isClosed()) {\r\n        //        return this;\r\n        //    }\r\n        // }\r\n        return super.getShowed();\r\n    }\r\n\r\n    public loadProperties(properties: any) {\r\n        // DO Nothing\r\n    }\r\n\r\n    protected createShape(attrs: any): Element {\r\n        return Util.createShape(attrs);\r\n    }\r\n}\r\n\r\nexport class Point {\r\n    public static UP: string = 'UP';\r\n    public static LEFT: string = 'LEFT';\r\n    public static RIGHT: string = 'RIGHT';\r\n    public static DOWN: string = 'DOWN';\r\n    x: number = 0;\r\n    y: number = 0;\r\n\r\n    //    pos:string = '';\r\n\r\n    constructor(x?: number, y?: number, pos?: string) {\r\n        this.x = Math.ceil(x || 0);\r\n        this.y = Math.ceil(y || 0);\r\n        if (pos) {\r\n            this['pos'] = pos;\r\n        }\r\n    }\r\n\r\n    public add(pos: Point) {\r\n        this.x += pos.x;\r\n        this.y += pos.y;\r\n        return this;\r\n    }\r\n\r\n    public getPosition(): string {\r\n        if (!this['pos']) {\r\n            return '';\r\n        }\r\n        return this['pos'];\r\n    }\r\n\r\n    public addNum(x: number, y: number) {\r\n        this.x += x;\r\n        this.y += y;\r\n        return this;\r\n    }\r\n\r\n    public sum(pos: Point) {\r\n        let sum = new Point(this.x, this.y);\r\n        sum.add(pos);\r\n        return sum;\r\n    }\r\n\r\n    public center(posA: Point, posB: Point) {\r\n        let count = 0;\r\n        if (posA) {\r\n            this.x += posA.x;\r\n            this.y += posA.y;\r\n            count++;\r\n        }\r\n        if (posB) {\r\n            this.x += posB.x;\r\n            this.y += posB.y;\r\n            count++;\r\n        }\r\n        if (count > 0) {\r\n            this.x = (this.x / count);\r\n            this.y = (this.y / count);\r\n        }\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        return this.x < 1 && this.y < 1;\r\n    }\r\n\r\n    public size(posA: Point, posB: Point) {\r\n        let x1 = 0, x2 = 0, y1 = 0, y2 = 0;\r\n        if (posA) {\r\n            x1 = posA.x;\r\n            y1 = posA.y;\r\n        }\r\n        if (posB) {\r\n            x2 = posB.x;\r\n            y2 = posB.y;\r\n        }\r\n        if (x1 > x2) {\r\n            this.x = x1 - x2;\r\n        } else {\r\n            this.x = x2 - x1;\r\n        }\r\n        if (y1 > y2) {\r\n            this.y = y1 - y2;\r\n        } else {\r\n            this.y = y2 - y1;\r\n        }\r\n    }\r\n}\r\n\r\n// \t\t\t\t######################################################### Line #########################################################\r\nexport class Line extends DiagramElement {\r\n    public static FORMAT = { SOLID: 'SOLID', DOTTED: 'DOTTED', PATH: 'PATH' };\r\n    public source: Point;\r\n    public target: Point;\r\n    public color: string;\r\n    public lineType: string;\r\n    private path: string;\r\n    private angle: Number;\r\n\r\n    constructor(lineType: string) {\r\n        super();\r\n        this.lineType = lineType;\r\n    }\r\n\r\n    public getTyp(): string {\r\n        return 'SVG';\r\n    }\r\n\r\n    public getPos() {\r\n        let pos = new Point();\r\n        pos.center(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public getSize() {\r\n        let pos = new Point();\r\n        pos.size(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public withColor(color: string): Line {\r\n        this.color = color;\r\n        return this;\r\n    }\r\n\r\n    public withSize(x: number, y: number): DiagramElement {\r\n        return this;\r\n    }\r\n\r\n    public withPath(path: Array<Point>, close: boolean, angle?: any): Line {\r\n        let i: number, d: string = 'M' + path[0].x + ' ' + path[0].y;\r\n        this.lineType = Line.FORMAT.PATH; // It is a Path not a Line\r\n        for (i = 1; i < path.length; i += 1) {\r\n            d = d + 'L ' + path[i].x + ' ' + path[i].y;\r\n        }\r\n        if (close) {\r\n            d = d + ' Z';\r\n            this.target = path[0];\r\n        } else {\r\n            this.target = path[path.length - 1];\r\n        }\r\n        this.path = d;\r\n        if (angle instanceof Number) {\r\n            this.angle = angle;\r\n        } else if (angle) {\r\n            // var lineangle, start = path[0], end = path[path.length - 1];\r\n            // lineangle = Math.atan2(end.y - start.y, end.x - start.x);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): SVGGElement {\r\n        if (this.lineType === 'PATH') {\r\n            return <SVGGElement>Util.create({\r\n                tag: 'path',\r\n                'd': this.path,\r\n                'fill': this.color,\r\n                stroke: '#000',\r\n                'stroke-width': '1px'\r\n            });\r\n        }\r\n        let line: SVGGElement = <SVGGElement>Util.create({\r\n            tag: 'line',\r\n            'x1': this.source.x,\r\n            'y1': this.source.y,\r\n            'x2': this.target.x,\r\n            'y2': this.target.y,\r\n            'stroke': Util.getColor(this.color)\r\n        });\r\n        if (this.lineType && this.lineType.toLowerCase() === 'dotted') {\r\n            line.setAttribute('stroke-miterlimit', '4');\r\n            line.setAttribute('stroke-dasharray', '1,1');\r\n        }\r\n        return line;\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport Options from '../Options';\r\nimport {JavaAdapter} from '../adapters';\r\n\r\nexport class ClassEditor extends Graph {\r\n    private adapter: JavaAdapter;\r\n    constructor(json: any, options: Options) {\r\n        if (!options ) {\r\n            options = {};\r\n        }\r\n        options.canvas = options.canvas || 'canvas';\r\n        // options.origin = options.origin || new Point(150, 45);\r\n//            layout: \"DagreLayout\",\r\n        options.autoSave = options.autoSave || true;\r\n        if (!options.features) {\r\n            options.features = {\r\n                drag: true,\r\n                editor: true,\r\n                palette: true,\r\n                select: true,\r\n                zoom: true,\r\n                toolbar: true,\r\n                import: true,\r\n                properties: true,\r\n                addnode: true,\r\n                newedge: true\r\n            };\r\n        }\r\n        super(json, options);\r\n    }\r\n\r\n    public setBoardStyle(value: string) {\r\n        console.log(value);\r\n        this.importFile.setBoardStyle(value);\r\n    }\r\n\r\n    public registerListener(): void {\r\n        this.adapter = new JavaAdapter();\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return this.adapter;\r\n    }\r\n}\r\n","import * as edges from './edges';\r\nimport { Association } from './edges';\r\nimport * as nodes from './nodes';\r\nimport * as layouts from '../layouts';\r\nimport Layout from '../layouts/Layout';\r\nimport { GraphModel } from './Model';\r\nimport { Point, Size } from './BaseElements';\r\nimport { Util } from '../util';\r\nimport { Control } from '../Control';\r\nimport Data from '../Data';\r\nimport { EventBus } from '../EventBus';\r\nimport { AddNode, Drag, NewEdge, Select, Zoom } from '../handlers';\r\nimport Options from '../Options';\r\nimport { ImportFile } from '../handlers/ImportFile';\r\nimport { CSS } from '../CSS';\r\nimport { DiagramElement } from './index';\r\nimport { Toolbar } from '../Toolbar';\r\nimport {JSEPS} from '../JSEPS';\r\nimport {SVGConverter} from '../SVGConverter';\r\nimport Palette from '../Palette';\r\nimport {PanelGroup} from '../PropertiesPanel';\r\n\r\nexport class Graph extends Control {\r\n    // canvas: HTMLElement;\r\n    root: SVGElement;\r\n    $graphModel: GraphModel;\r\n    options: Options;\r\n    canvasSize: Size;\r\n    nodeFactory: Object;\r\n    edgeFactory: Object;\r\n    layoutFactory: Object;\r\n    protected importFile: ImportFile;\r\n    private currentlayout: Layout;\r\n    // private layerToolBar: SVGSVGElement;\r\n    // https://stackoverflow.com/questions/15181452/how-to-save-export-inline-svg-styled-with-css-from-browser-to-image-file\r\n    private containerElements = ['svg', 'g'];\r\n    private relevantStyles = {\r\n        'rect': ['fill', 'stroke', 'stroke-width'],\r\n        'path': ['fill', 'stroke', 'stroke-width', 'opacity'],\r\n        'circle': ['fill', 'stroke', 'stroke-width'],\r\n        'line': ['stroke', 'stroke-width'],\r\n        'text': ['fill', 'font-size', 'text-anchor', 'font-family'],\r\n        'polygon': ['stroke', 'fill']\r\n    };\r\n\r\n    constructor(json: any, options: Options) {\r\n        super();\r\n        json = json || {};\r\n        if (json['data']) {\r\n            options = json['options'];\r\n            json = json['data'];\r\n            this.id = json['id'];\r\n        }\r\n        this.options = options || {features: { drag: true}};\r\n        if (json['init']) {\r\n            return;\r\n        }\r\n        if (!this.options.origin) {\r\n            this.options.origin = new Point(150, 45);\r\n        }\r\n        if (!this.options.style) {\r\n            // Style can be classic or modern\r\n            this.options.style = 'classic';\r\n        }\r\n        if (this.options.autoSave) {\r\n            Util.isAutoSave = options.autoSave;\r\n        }\r\n\r\n        this.initFactories();\r\n        this.initCanvas();\r\n        this.initFeatures(this.options.features);\r\n\r\n        // load previous session, if user wants it\r\n        // otherwise load the json data\r\n        if (!this.lookupInLocalStorage()) {\r\n            this.load(json);\r\n        }\r\n\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    public lookupInLocalStorage(): boolean {\r\n        if (!this.options.autoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (!Util.isLocalStorageSupported()) {\r\n            return false;\r\n        }\r\n        let diagram = Util.getDiagramFromLocalStorage();\r\n        if (diagram && diagram.length > 0) {\r\n            if (confirm('Restore previous session?')) {\r\n                let jsonData: JSON = JSON.parse(diagram);\r\n                this.load(jsonData);\r\n                this.layout();\r\n                return true;\r\n            } else {\r\n                Util.saveToLocalStorage( null);\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public fitSizeOnNodes(): void {\r\n        let maxWidth: number = 0;\r\n        let maxHeight: number = 0;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            let nodePos = node.getPos();\r\n            let nodeSize = node.getSize();\r\n            let nodeWidestPosX = nodePos.x + nodeSize.x;\r\n            let nodeWidestPosY = nodePos.y + nodeSize.y;\r\n\r\n            if (nodeWidestPosX > maxWidth) {\r\n                maxWidth = nodeWidestPosX;\r\n            }\r\n\r\n            if (nodeWidestPosY > maxHeight) {\r\n                maxHeight = nodeWidestPosY;\r\n            }\r\n        }\r\n\r\n        this.root.setAttributeNS(null, 'width', '' + (maxWidth + 100));\r\n        this.root.setAttributeNS(null, 'height', '' + (maxHeight + 50));\r\n    }\r\n\r\n    public saveAs(typ: string) {\r\n        typ = typ.toLowerCase();\r\n\r\n        // shrink size of graph to minimum. only to show up nodes\r\n        const currentSize = this.getRootSize();\r\n        this.fitSizeOnNodes();\r\n\r\n        if (typ === 'svg') {\r\n            this.exportSvg();\r\n        } else if (typ === 'png') {\r\n            this.exportPng();\r\n        } else if (typ === 'html') {\r\n            this.exportHtml();\r\n\r\n        } else if (typ === 'pdf') {\r\n            this.exportPdf();\r\n            // } else if (typ === 'eps') {\r\n            // this.ExportEPS();\r\n        }\r\n        else if (typ === 'json') {\r\n            this.exportJson();\r\n        }\r\n\r\n        // set the size back to default\r\n        this.root.setAttributeNS(null, 'width', '' + currentSize.width);\r\n        this.root.setAttributeNS(null, 'height', '' + currentSize.height);\r\n    }\r\n\r\n    /**\r\n     * generates a blob file and makes it available for download.\r\n     * @param type type of file\r\n     * @param data raw data\r\n     * @param name name of download file\r\n     */\r\n    public save(type: string, data: any, name: string, context: string) {\r\n        if (window['java']) {\r\n            window['java'].export(type, data, name, context);\r\n            return;\r\n        }\r\n        let a = document.createElement('a');\r\n        a.href = window.URL.createObjectURL(new Blob([data], { type: context }));\r\n        a.download = name;\r\n        document.body.appendChild(a);\r\n        a.click();\r\n        document.body.removeChild(a);\r\n    }\r\n\r\n    /** Exports the diagram as svg. */\r\n    public exportSvg(): void {\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        this.save('svg', this.serializeXmlNode(wellFormatedSvgDom), 'class_diagram.svg', 'image/svg+xml');\r\n    }\r\n\r\n    /** Exports the diagram as html. */\r\n    public exportHtml(): void {\r\n        let htmlFacade = '<html><head><title>DiagramJS - Classdiagram</title></head><body>$content</body></html>';\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        let svgAsXml = this.serializeXmlNode(wellFormatedSvgDom);\r\n\r\n        let htmlResult = htmlFacade.replace('$content', svgAsXml);\r\n\r\n        this.save('html', htmlResult, 'class_diagram.htm', 'text/plain');\r\n    }\r\n\r\n    /** Exports the diagram as json. */\r\n    public exportJson(): void {\r\n        let type = 'text/plain';\r\n        let jsonObj = Util.toJson(this.$graphModel);\r\n        let data = JSON.stringify(jsonObj, null, '\\t');\r\n\r\n        this.save('json', data, 'class_diagram.json', type);\r\n    }\r\n\r\n    /** Exports the diagram as pdf. */\r\n    public exportPdf(): void {\r\n        if (!window['jsPDF']) {\r\n            console.log('jspdf n.a.');\r\n            return;\r\n        }\r\n        let type = 'image/svg+xml';\r\n        let converter, pdf = new window['jsPDF']('l', 'px', [this.$graphModel.getSize().x, this.$graphModel.getSize().y]);\r\n        converter = new SVGConverter(this.$view, pdf, {removeInvalid: false});\r\n        pdf.save('Download.pdf');\r\n/*        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let canvas, context, a, image = new Image();\r\n        let size = this.getRootSize();\r\n\r\n        // create the loaded img source into a canvas. to generate a picture. then place this picture in the pdf\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            let pdf = new window['jsPDF']();\r\n\r\n            pdf.addImage(canvas.toDataURL('image/jpeg'), 'jpeg', 15, 40, 180, 160);\r\n            pdf.save('class_diagram.pdf');\r\n\r\n        };\r\n\r\n        image.src = url;\r\n        */\r\n    }\r\n\r\n    public import(data: string): void {\r\n        let rootElement = this.$graphModel.$view;\r\n        while (rootElement.hasChildNodes()) {\r\n            rootElement.removeChild(rootElement.firstChild);\r\n        }\r\n\r\n        while (this.$view.hasChildNodes()) {\r\n            this.$view.removeChild(this.$view.firstChild);\r\n        }\r\n\r\n        this.clearModel();\r\n        let jsonData = JSON.parse(data);\r\n        this.load(jsonData);\r\n        this.layout();\r\n    }\r\n\r\n    public exportEPS(): void {\r\n          let converter, doc = new JSEPS({inverting: true});\r\n            converter = new SVGConverter(this.$view, doc, {removeInvalid: false});\r\n            this.save('eps', doc.getData(), 'diagram.eps', doc.getType());\r\n    }\r\n\r\n    /** Exports the diagram as png. */\r\n    public exportPng(): void {\r\n        let canvas, context, a, image = new Image();\r\n        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let typ = 'image/svg+xml';\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let size = this.getRootSize();\r\n\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            a = document.createElement('a');\r\n            a.download = 'class_diagram.png';\r\n            a.href = canvas.toDataURL('image/png');\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            document.body.removeChild(a);\r\n        };\r\n\r\n        image.src = url;\r\n\r\n    }\r\n\r\n    public getSvgWithStyleAttributes(): Node {\r\n        let oDOM = this.$graphModel.$view.cloneNode(true);\r\n        this.readElement(oDOM, this.$graphModel.$view);\r\n\r\n        return oDOM;\r\n    }\r\n\r\n    public serializeXmlNode(xmlNode: any) {\r\n        if (window['XMLSerializer'] !== undefined) {\r\n            return (new window['XMLSerializer']()).serializeToString(xmlNode);\r\n        }\r\n        if (xmlNode.xml !== undefined) {\r\n            return xmlNode.xml;\r\n        }\r\n        return xmlNode.outerHTML;\r\n    }\r\n\r\n    public getRootSize(): Size {\r\n        let width: number;\r\n        let height: number;\r\n        width = +this.root.getAttribute('width');\r\n        height = +this.root.getAttribute('height');\r\n\r\n        return { width: width, height: height };\r\n    }\r\n\r\n        // Graph.prototype.ExportEPS = function () {\r\n        //     var converter, doc = new svgConverter.jsEPS({inverting: true});\r\n        //     converter = new svgConverter(this.board, doc, {removeInvalid: false});\r\n        //     doc.save();\r\n        // };\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        this.$graphModel = new GraphModel();\r\n        this.$graphModel.init(this);\r\n        this.$graphModel.load(json);\r\n    }\r\n\r\n    public clearModel(): void {\r\n        this.$graphModel.removeAllElements();\r\n        this.clearSvgRoot();\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.layout();\r\n        return this;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        return;\r\n    }\r\n\r\n    public getNextFreePosition(): Point {\r\n\r\n        if (!this.$graphModel) {\r\n            return new Point(50, 50);\r\n        }\r\n\r\n        let point = new Point(0, 50);\r\n\r\n        let maxX = 0;\r\n        let minX = 9000;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            maxX = Math.max(maxX, node.getPos().x);\r\n            minX = Math.min(minX, node.getPos().x);\r\n        }\r\n\r\n        if (minX > 170) {\r\n            point.x = 10;\r\n        }\r\n        else {\r\n            point.x = maxX + 200;\r\n        }\r\n\r\n        return point;\r\n    }\r\n\r\n    public addElement(type: string, dontDraw?: boolean): boolean {\r\n        let success = this.$graphModel.addElement(type);\r\n        if (success === true) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return success;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues?: Object, layout?: boolean, dontDraw?: boolean): DiagramElement {\r\n        let element = this.$graphModel.addElementWithValues(type, optionalValues);\r\n        if (element && layout) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public layout(dontDraw?: boolean): Graph {\r\n        this.getLayout().layout(this, this.$graphModel);\r\n\r\n        if (dontDraw) {\r\n            return this;\r\n        }\r\n\r\n        this.draw();\r\n        return this;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTDRAGOVER, EventBus.ELEMENTDRAGLEAVE, EventBus.ELEMENTDROP];\r\n    }\r\n\r\n    public draw() {\r\n        this.clearSvgRoot();\r\n        let model = this.$graphModel;\r\n        let root = this.root;\r\n        let max: Point = new Point();\r\n        if (this.options) {\r\n            max.x = this.options.minWidth || 0;\r\n            max.y = this.options.minHeight || 0;\r\n        }\r\n\r\n        for (let node of model.nodes) {\r\n            let svg = node.getSVG();\r\n            EventBus.register(node, svg);\r\n            root.appendChild(svg);\r\n\r\n            let temp: number;\r\n            temp = node.getPos().x + node.getSize().x;\r\n            if (temp > max.x) {\r\n                max.x = temp;\r\n            }\r\n            temp = node.getPos().y + node.getSize().y;\r\n            if (temp > max.y) {\r\n                max.y = temp;\r\n            }\r\n\r\n        }\r\n        Util.setAttributeSize(this.root, max.x + 60, max.y + 40);\r\n\r\n        for (let edge of model.edges) {\r\n            let svg = edge.getSVG();\r\n            EventBus.register(edge, svg);\r\n            root.appendChild(svg);\r\n        }\r\n    }\r\n\r\n    public getNode(id: string) {\r\n        return this.$graphModel.getNodeById(id);\r\n    }\r\n\r\n    public drawElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let svg = element.getSVG();\r\n        this.root.appendChild(svg);\r\n\r\n        // actualize root width size, if neccessary\r\n        // get current width of root\r\n        let rootSize = this.getRootSize();\r\n        let newWidth = element.getPos().x + element.getSize().x + 40;\r\n        let newHeight = element.getPos().y + element.getSize().y;\r\n\r\n        if (rootSize.width < newWidth) {\r\n            this.root.setAttributeNS(null, 'width', '' + newWidth);\r\n        }\r\n\r\n        if (rootSize.height < newHeight) {\r\n            this.root.setAttributeNS(null, 'height', '' + newHeight);\r\n        }\r\n\r\n        // draw edge\r\n        if (element instanceof Association) {\r\n            let edge = <Association>element;\r\n            edge.redraw(edge.$sNode);\r\n            let srcSvg = element.$sNode.getAlreadyDisplayingSVG();\r\n            let targetSvg = element.$tNode.getAlreadyDisplayingSVG();\r\n\r\n            this.root.appendChild(srcSvg);\r\n            this.root.appendChild(targetSvg);\r\n        }\r\n\r\n        EventBus.register(element, svg);\r\n    }\r\n\r\n    public removeElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let alreadyDisplayingSvg = element.getAlreadyDisplayingSVG();\r\n        if (Util.isParentOfChild(this.root, alreadyDisplayingSvg)) {\r\n            this.root.removeChild(alreadyDisplayingSvg);\r\n        }\r\n    }\r\n\r\n    public generate(packageName: string, path?: string) {\r\n        this.$graphModel.package = packageName;\r\n        this.$graphModel.genPath = path;\r\n\r\n        let data, result = Util.toJson(this.$graphModel);\r\n        data = JSON.stringify(result, null, '\\t');\r\n        if (window['java'] && typeof window['java'].generate === 'function') {\r\n            window['java'].generate(data);\r\n        }\r\n    }\r\n// REFACTORING dd\r\n    private readElement(parent: any, origData: any): void {\r\n        let children = parent.childNodes;\r\n        let origChildDat = origData.childNodes;\r\n\r\n        for (let cd = 0; cd < children.length; cd++) {\r\n            let child = children[cd];\r\n\r\n            let tagName = child.tagName;\r\n            if (this.containerElements.indexOf(tagName) !== -1) {\r\n                this.readElement(child, origChildDat[cd]);\r\n            } else if (tagName in this.relevantStyles) {\r\n                let styleDef = window.getComputedStyle(origChildDat[cd]);\r\n\r\n                let styleString = '';\r\n                for (let st = 0; st < this.relevantStyles[tagName].length; st++) {\r\n                    styleString += this.relevantStyles[tagName][st] + ':' + styleDef.getPropertyValue(this.relevantStyles[tagName][st]) + '; ';\r\n                }\r\n\r\n                child.setAttribute('style', styleString);\r\n            }\r\n        }\r\n    }\r\n\r\n    private createPattern(): Element {\r\n        const defs = Util.createShape({ tag: 'defs' });\r\n        const pattern = Util.createShape({\r\n            tag: 'pattern',\r\n            id: 'raster',\r\n            patternUnits: 'userSpaceOnUse',\r\n            width: 40,\r\n            height: 40\r\n        });\r\n        const path = 'M0 4 L0 0 L4 0 M36 0 L40 0 L40 4 M40 36 L40 40 L36 40 M4 40 L0 40 L0 36';\r\n        const cross = Util.createShape({\r\n            tag: 'path',\r\n            d: path,\r\n            stroke: '#DDD',\r\n            'stroke-width': 1,\r\n            fill: 'none'\r\n        });\r\n\r\n        const rect = Util.createShape({\r\n            tag: 'rect',\r\n            x: 0,\r\n            y: 0,\r\n            width: 40,\r\n            height: 40,\r\n            fill: 'none'\r\n        });\r\n        pattern.appendChild(rect);\r\n        pattern.appendChild(cross);\r\n        defs.appendChild(pattern);\r\n        return defs;\r\n    }\r\n\r\n    private clearSvgRoot() {\r\n        const root = this.root;\r\n        this.$graphModel.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n        while (root.firstChild) {\r\n            root.removeChild(root.firstChild);\r\n        }\r\n\r\n        root.appendChild(this.createPattern());\r\n        let fillValue = 'none';\r\n        if (this.options.raster) {\r\n            fillValue = 'url(#raster)';\r\n        }\r\n        let background = Util.createShape({\r\n            tag: 'rect',\r\n            id: 'background',\r\n            width: 5000,\r\n            height: 5000,\r\n            x: 0,\r\n            y: 0,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: fillValue\r\n        });\r\n        root.appendChild(background);\r\n\r\n        // delete inline Edit, if exists\r\n        let inlineEdit = document.getElementById('inlineEdit');\r\n        if (inlineEdit && document.body.contains(inlineEdit)) {\r\n            document.body.removeChild(inlineEdit);\r\n        }\r\n    }\r\n\r\n    private getLayout(): Layout {\r\n        if (this.currentlayout) {\r\n            return this.currentlayout;\r\n        }\r\n\r\n        let layout = this.options.layout || '';\r\n        if (this.layoutFactory[layout]) {\r\n            this.currentlayout = new this.layoutFactory[layout]();\r\n        } else {\r\n            this.currentlayout = new layouts.DagreLayout();\r\n        }\r\n\r\n        return this.currentlayout;\r\n    }\r\n\r\n    private initFactories() {\r\n\r\n        let noder = nodes;\r\n        this.nodeFactory = {};\r\n        for (let id in noder) {\r\n            if (noder.hasOwnProperty(id) === true) {\r\n                this.nodeFactory[id] = noder[id];\r\n            }\r\n        }\r\n\r\n        let edger = edges;\r\n        this.edgeFactory = {};\r\n        for (let id in edger) {\r\n            if (edger.hasOwnProperty(id) === true) {\r\n                this.edgeFactory[id] = edger[id];\r\n            }\r\n        }\r\n\r\n        let layouter = layouts;\r\n        this.layoutFactory = {};\r\n        for (let id in layouter) {\r\n            if (layouter.hasOwnProperty(id) === true) {\r\n                this.layoutFactory[id] = layouter[id];\r\n            }\r\n        }\r\n    }\r\n\r\n    private initCanvas() {\r\n        if (this.options.canvas) {\r\n            this.$view = document.getElementById(this.options.canvas);\r\n        }\r\n        if (!this.$view) {\r\n            this.$view = document.createElement('div');\r\n            this.$view.setAttribute('class', 'diagram');\r\n            document.body.appendChild(this.$view);\r\n        }\r\n    }\r\n\r\n    private initFeatures(features: any) {\r\n\r\n        if (features) {\r\n            if (features.newedge) {\r\n                EventBus.subscribe(new NewEdge(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            this.importFile = new ImportFile(this);\r\n            if (features.import) {\r\n                EventBus.subscribe(this.importFile, 'dragover', 'dragleave', 'drop');\r\n            }\r\n            if (features.zoom) {\r\n                let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n                EventBus.subscribe(new Zoom(this), mousewheel);\r\n            }\r\n            if (features.drag) {\r\n                EventBus.subscribe(new Drag(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            if (features.select) {\r\n                EventBus.subscribe(new Select(this), 'click', 'drag');\r\n            }\r\n            if (features.palette) {\r\n                new Palette(this).show();\r\n            }\r\n            if (features.toolbar) {\r\n                new Toolbar(this).show();\r\n            }\r\n            if (features.properties) {\r\n                let propertyPanel = new PanelGroup(this);\r\n                // let dispatcher = new PropertiesDispatcher(this);\r\n                EventBus.subscribe(propertyPanel, 'dblclick', 'click', EventBus.RELOADPROPERTIES);\r\n                propertyPanel.show();\r\n            }\r\n            if (features.addnode) {\r\n                EventBus.subscribe(new AddNode(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n        }\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport {DiagramElement, Point} from './BaseElements';\r\nimport {Association} from './edges';\r\nimport {Node} from './nodes';\r\nimport {Control} from '../Control';\r\nimport {Util} from '../util';\r\nimport {EventBus} from '../EventBus';\r\n\r\nexport class GraphModel extends DiagramElement {\r\n    nodes: Node[] = [];\r\n    edges: Association[] = [];\r\n    package: string;\r\n    genPath: string;\r\n    $isLoading: boolean;\r\n\r\n    public load(data?: any) {\r\n\r\n        this.$isLoading = true;\r\n        data = data || {};\r\n        this.property = data.type || data.property || 'classdiagram';\r\n        this.id = 'RootElement';\r\n        if (data.nodes) {\r\n            for (let node of data.nodes) {\r\n                this.addNode(node);\r\n            }\r\n        }\r\n        if (data.edges) {\r\n            for (let edge of data.edges) {\r\n                this.addEdge(edge);\r\n            }\r\n        }\r\n\r\n        this.$isLoading = false;\r\n    }\r\n\r\n    public getNodeByPosition(x: number, y: number): Node {\r\n        for (let node of this.nodes) {\r\n            let posOfNode: Point = (<Node>node).getPos();\r\n            let sizeOfNode: Point = (<Node>node).getSize();\r\n\r\n            if ((posOfNode.x <= x && (posOfNode.x + sizeOfNode.x) >= x)\r\n                && (posOfNode.y <= y && (posOfNode.y + sizeOfNode.y) >= y)) {\r\n                return node;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.initCanvas();\r\n        return this;\r\n    }\r\n\r\n    public addElement(type: string): boolean {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n        if (element) {\r\n            Util.saveToLocalStorage(this);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues: Object): DiagramElement {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n\r\n        // position\r\n        if (optionalValues) {\r\n            if (optionalValues.hasOwnProperty('x') && optionalValues.hasOwnProperty('y')) {\r\n                let x = optionalValues['x'];\r\n                let y = optionalValues['y'];\r\n                element.withPos(x, y);\r\n            }\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return element;\r\n    }\r\n\r\n    public removeAllElements(): void {\r\n\r\n        let nodesLength = this.nodes.length;\r\n        for (let i = 0; i < nodesLength; i++) {\r\n            this.removeElement(this.nodes[0].id);\r\n        }\r\n\r\n        this.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n    }\r\n\r\n    public removeElement(id: string): boolean {\r\n\r\n        let element = this.getDiagramElementById(id);\r\n        if (!element) {\r\n            return false;\r\n        }\r\n\r\n        (<Graph>this.$owner).removeElement(element);\r\n\r\n        if (element instanceof Node) {\r\n\r\n            let idxOfNode = this.nodes.indexOf(element);\r\n            if (idxOfNode > -1) {\r\n                this.nodes.splice(idxOfNode, 1);\r\n            }\r\n\r\n            while (element.$edges.length > 0) {\r\n                this.removeElement(element.$edges[0].id);\r\n            }\r\n\r\n            element.$edges = [];\r\n        }\r\n        else if (element instanceof Association) {\r\n\r\n            let idxOfEdge = this.edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                this.edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from source\r\n            idxOfEdge = element.$sNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$sNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from target\r\n            idxOfEdge = element.$tNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$tNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return true;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        const size = 10;\r\n        const path = `M${-size} 0 L${+size} 0 M0 ${-size} L0 ${+size}`;\r\n\r\n        const attr = {\r\n            tag: 'path',\r\n            id: 'origin',\r\n            d: path,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: 'none'\r\n        };\r\n        let shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: 0 - size,\r\n            y: 0 - size / 1.5,\r\n            'text-anchor': 'end',\r\n            'font-family': 'Verdana',\r\n            'font-size': '9',\r\n            fill: '#999'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = '(0, 0)';\r\n\r\n        let group = this.createShape({tag: 'g'});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEUP, EventBus.ELEMENTMOUSELEAVE, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTMOUSEWHEEL, EventBus.ELEMENTCLICK, EventBus.ELEMENTDRAG];\r\n    }\r\n\r\n    public getNewId(prefix?: string): string {\r\n        let id = (prefix ? prefix.toLowerCase() + '-' : '') + Math.floor(Math.random() * 100000);\r\n        return id;\r\n    }\r\n\r\n    public getEdgeById(id: string): Association {\r\n        for (let edge of this.edges) {\r\n            if (edge.id === id) {\r\n                return edge;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    public getDiagramElementById(id: string): DiagramElement {\r\n\r\n        return this.getNodeById(id) || this.getEdgeById(id);\r\n    }\r\n\r\n    /**\r\n     * Add an edge with data in json file. Optional you can say, that the edge should have\r\n     * the points of source node and target node.\r\n     * @param edge information about edge in json\r\n     * @param withPosOfNodes optional. set points to line of source and target node\r\n     */\r\n    public addEdge(edge: any, withPosOfNodes?: boolean): Association {\r\n\r\n        // lookup in factoryedges and check if the edge type realy exists\r\n        if (edge && edge.type) {\r\n            const graph = (<Graph>this.$owner);\r\n            let typeExists = false;\r\n            for (let edgeType in graph.edgeFactory) {\r\n                if (edgeType === edge.type) {\r\n                    typeExists = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!typeExists) {\r\n                edge.type = 'Association';\r\n            }\r\n        }\r\n\r\n        let type = edge.type || 'Association';\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n\r\n        let newEdge = <Association>this.createElement(type, id, edge);\r\n        newEdge.type = type;\r\n\r\n        let source: Node;\r\n        let sourceAsString: string = edge.source.id || edge.source;\r\n        if (sourceAsString) {\r\n            source = this.getNodeById(sourceAsString);\r\n            if (!source) {\r\n                let nodeID = edge.source;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                source = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                source.init(this);\r\n            }\r\n        }\r\n\r\n        let target: Node;\r\n        let targetAsString: string = edge.target.id || edge.target;\r\n        if (targetAsString) {\r\n            target = this.getNodeById(targetAsString);\r\n            if (!target) {\r\n                let nodeID = edge.target;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                target = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                target.init(this);\r\n            }\r\n        }\r\n\r\n        newEdge.withItem(source, target);\r\n\r\n        if (withPosOfNodes) {\r\n            let srcX = source.getPos().x + (source.getSize().x / 2);\r\n            let srcY = source.getPos().y + (source.getSize().y / 2);\r\n\r\n            let targetX = target.getPos().x + (target.getSize().x / 2);\r\n            let targetY = target.getPos().y + (target.getSize().y / 2);\r\n\r\n            newEdge.addPoint(srcX, srcY);\r\n            newEdge.addPoint(targetX, targetY);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public createElement(type: string, id: string, data: Object): DiagramElement {\r\n        const graph = <Graph>this.$owner;\r\n        let element: DiagramElement;\r\n        if (graph.nodeFactory[type]) {\r\n            element = new graph.nodeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.nodes.push(<Node>element);\r\n        }\r\n        if (graph.edgeFactory[type]) {\r\n            element = new graph.edgeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.edges.push(<Association>element);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public getNodeById(id: string): Node {\r\n        for (let node of this.nodes) {\r\n            if (node.id === id) {\r\n                return node;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    private initCanvas() {\r\n        const graph = <Graph>this.$owner;\r\n        graph.canvasSize = {width: graph.$view.clientWidth, height: graph.$view.clientHeight};\r\n        graph.root = Util.createShape({\r\n            tag: 'svg',\r\n            id: 'root',\r\n            width: graph.canvasSize.width,\r\n            height: graph.canvasSize.height\r\n            // FIXME,viewBox: `${this.$graph.options.origin.x * -1} ${this.$graph.options.origin.y * -1} ${this.$graph.canvasSize.width} ${this.$graph.canvasSize.height}`\r\n        });\r\n        this.$view = graph.root;\r\n        graph.$view.appendChild(graph.root);\r\n\r\n        let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    private addNode(node: Node): Node {\r\n        let type = node['type'] || node.property || 'Node';\r\n        type = Util.toPascalCase(type);\r\n        let id = node['id'] || node['name'] || this.getNewId(type);\r\n\r\n        return <Node>this.createElement(type, id, node);\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction } from './index';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\n\r\nexport abstract class Aggregate extends Association {\r\n\r\n    protected $diamond: Element;\r\n\r\n    public getSVG(): Element {\r\n\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled diamond\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n        };\r\n\r\n        this.$diamond = this.createShape(attr);\r\n\r\n        group.appendChild(this.$diamond);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint: Point = this.$points[0];\r\n        let direction: Direction = Direction.Down;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if (this.$sNode.id === startNode.id || this.$points.length == 2) {\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$diamond.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint: Point, direction: Direction): string {\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                path = `M${startX} ${startY} L${startX + 6} ${startY + 10} L${startX} ${startY + 20} L${startX - 6} ${startY + 10} Z`;\r\n                startPoint.y = startPoint.y+20;\r\n                break;\r\n            case Direction.Right:\r\n                path = `M${startX} ${startY} L${startX - 10} ${startY + 6} L${startX - 20} ${startY} L${startX - 10} ${startY - 6} Z`;\r\n                startPoint.x = startPoint.x-20;\r\n                break;\r\n            case Direction.Left:\r\n                path = `M${startX} ${startY} L${startX + 10} ${startY - 6} L${startX + 20} ${startY} L${startX + 10} ${startY + 6} Z`;\r\n                startPoint.x = startPoint.x+20;\r\n                break;\r\n            case Direction.Down:\r\n                path = `M${startX} ${startY} L${startX - 6} ${startY - 10} L${startX} ${startY - 20} L${startX + 6} ${startY - 10} Z`;\r\n                startPoint.y = startPoint.y-20;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Aggregation extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'white');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { DiagramElement, Line, Point } from '../BaseElements';\r\nimport { Node } from '../nodes';\r\nimport { InfoText } from '../nodes/InfoText';\r\nimport { Util } from '../../util';\r\nimport { EventBus } from '../../EventBus';\r\nimport * as edges from '../edges';\r\nimport { Graph } from '../Graph';\r\n\r\nexport const enum Direction {\r\n    Up, Down, Left, Right\r\n}\r\n\r\nexport class Association extends DiagramElement {\r\n    public source: string;\r\n    public target: string;\r\n    public type: string;\r\n    public $sNode: Node;\r\n    public $tNode: Node;\r\n    public lineStyle: string;\r\n    public $points: Point[] = [];\r\n    public $pathSvg: Element;\r\n    public $pathWideSvg: Element;\r\n    public info: InfoText;\r\n    public sourceInfo: InfoText;\r\n    public targetInfo: InfoText;\r\n    $m: number;\r\n    $n: number;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super();\r\n\r\n        this.withData(data);\r\n    }\r\n\r\n    public withData(data: JSON | string | Object | any): Association {\r\n\r\n        if (!data) {\r\n            return this;\r\n        }\r\n        let srcInfo;\r\n        let trgInfo;\r\n\r\n        if (data.source && typeof data.source !== 'string') {\r\n            srcInfo = data.source;\r\n        }\r\n        else if (data.sourceInfo && typeof data.sourceInfo !== 'string') {\r\n            srcInfo = data.sourceInfo;\r\n        }\r\n\r\n        if (srcInfo) {\r\n            this.sourceInfo = new InfoText(srcInfo);\r\n            this.sourceInfo.$owner = this;\r\n        }\r\n\r\n        if (data.target && typeof data.target !== 'string') {\r\n            trgInfo = data.target;\r\n        }\r\n        else if (data.targetInfo && typeof data.targetInfo !== 'string') {\r\n            trgInfo = data.targetInfo;\r\n        }\r\n\r\n        if (trgInfo) {\r\n            this.targetInfo = new InfoText(trgInfo);\r\n            this.targetInfo.$owner = this;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    public updateSrcCardinality(cardinality: string): void {\r\n        this.sourceInfo = this.updateCardinality(this.$sNode, this.sourceInfo, cardinality);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetCardinality(cardinality: string): void {\r\n        this.targetInfo = this.updateCardinality(this.$tNode, this.targetInfo, cardinality);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateSrcProperty(property: string): void {\r\n        this.sourceInfo = this.updateProperty(this.$sNode, this.sourceInfo, property);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetProperty(property: string): void {\r\n        this.targetInfo = this.updateProperty(this.$tNode, this.targetInfo, property);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public withItem(source: Node, target: Node): Association {\r\n        source.$edges.push(this);\r\n        target.$edges.push(this);\r\n        this.$sNode = source;\r\n        this.$tNode = target;\r\n        this.source = source.id;\r\n        this.target = target.id;\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let group = Util.createShape({ tag: 'g', id: this.id, class: 'SVGEdge' });\r\n\r\n        let path: string = this.getPath();\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'none'\r\n        };\r\n        let pathLine = this.createShape(attr);\r\n\r\n        //attr['style'] = 'stroke-width:20;opacity:0;width:20;height:20';\r\n        let extendedPathLine = Util.createShape(attr);\r\n\r\n        group.appendChild(extendedPathLine);\r\n        group.appendChild(pathLine);\r\n\r\n        if (this.sourceInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.sourceInfo.getSVG());\r\n        }\r\n        if (this.targetInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.targetInfo.getSVG());\r\n        }\r\n\r\n        this.$pathWideSvg = extendedPathLine;\r\n        this.$pathSvg = pathLine;\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.EDITOR, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    public convertEdge(type: string, newId: string, redraw?: boolean): Association {\r\n        if (!edges[type]) {\r\n            return this;\r\n        }\r\n\r\n        let newEdge: Association = new edges[type]();\r\n        newEdge.withItem(this.$sNode, this.$tNode);\r\n        newEdge.id = newId;\r\n        newEdge.type = type;\r\n        newEdge.lineStyle = this.lineStyle;\r\n        newEdge.$owner = this.$owner;\r\n\r\n        if (this.sourceInfo) {\r\n            newEdge.sourceInfo = new InfoText({ property: this.sourceInfo.property, cardinality: this.sourceInfo.cardinality });\r\n            newEdge.sourceInfo.$owner = newEdge;\r\n        }\r\n\r\n        if (this.targetInfo) {\r\n            newEdge.targetInfo = new InfoText({ property: this.targetInfo.property, cardinality: this.targetInfo.cardinality });\r\n            newEdge.targetInfo.$owner = newEdge;\r\n        }\r\n\r\n        this.$points.forEach(point => {\r\n            newEdge.addPoint(point.x, point.y);\r\n        });\r\n\r\n        let graph = <Graph>this.getRoot();\r\n        if (!graph) {\r\n            return this;\r\n        }\r\n\r\n        // update model. insert the edge exact on the same index, like the old edge\r\n        let idx = graph.$graphModel.edges.indexOf(this);\r\n        graph.$graphModel.removeElement(this.id);\r\n        if (idx > -1) {\r\n            graph.$graphModel.edges.splice(idx, 0, newEdge);\r\n        }\r\n        else {\r\n            graph.$graphModel.edges.push(newEdge);\r\n        }\r\n\r\n        if (!redraw) {\r\n            return newEdge;\r\n        }\r\n\r\n        let svgRoot: Element;\r\n        if (graph) {\r\n            svgRoot = graph.root;\r\n        }\r\n        else {\r\n            svgRoot = document.getElementById('root');\r\n        }\r\n        let newEdgeSvg = newEdge.getSVG();\r\n\r\n        // update graph\r\n        graph.removeElement(this);\r\n        svgRoot.appendChild(newEdgeSvg);\r\n\r\n        // redraw the edge from both sides to get the correct display\r\n        // if the type is edge, so the path can be redraw.\r\n        // if not, so the inherited class redraw the path with his own logic\r\n\r\n        let dontDrawPath: boolean = (type !== 'Edge');\r\n        newEdge.redraw(newEdge.$sNode, dontDrawPath);\r\n        newEdge.redraw(newEdge.$tNode, dontDrawPath);\r\n\r\n        EventBus.register(newEdge, newEdgeSvg);\r\n\r\n        this.sourceInfo = undefined;\r\n        this.targetInfo = undefined;\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n        // redraw the first point\r\n        // check which point is the near to startnode\r\n        let endPoint: Point;\r\n        let recalcPoint: Point;\r\n        let endPointIdx: number;\r\n\r\n        if (this.$sNode.id === startNode.id) {\r\n            recalcPoint = this.$points[0];\r\n            endPointIdx = 1;\r\n        } else if (this.$tNode.id === startNode.id) {\r\n            recalcPoint = this.$points[this.$points.length - 1];\r\n            endPointIdx = this.$points.length - 2;\r\n        }\r\n\r\n        endPoint = this.$points[endPointIdx];\r\n\r\n        // calculate and set new position of point to redraw\r\n        this.calcIntersection(startNode, recalcPoint, endPoint);\r\n\r\n        // remove the 2nd point next to startnode, if the node was dragged upper the point\r\n        if (this.$points.length > 2 && this.$tNode.id === startNode.id && endPoint.y > (startNode.getPos().y + (startNode.getSize().y / 2))) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$tNode.id === startNode.id && this.$points.length === 2) {\r\n            this.calcIntersection(this.$sNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (this.$points.length > 2 && this.$sNode.id === startNode.id && (startNode.getPos().y + (startNode.getSize().y / 2) > endPoint.y)) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$sNode.id === startNode.id && this.$points.length === 2) {\r\n\r\n            this.calcIntersection(this.$tNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (!dontDrawPoints) {\r\n            this.redrawPointsAndInfo();\r\n        }\r\n    }\r\n\r\n    public getPath(): string {\r\n\r\n        if (this.$points.length === 0) {\r\n            return '';\r\n        }\r\n\r\n        let path: string = 'M';\r\n        for (let i = 0; i < this.$points.length; i++) {\r\n            let point: Point = this.$points[i];\r\n            if (i > 0) {\r\n                path += 'L';\r\n            }\r\n            path += Math.floor(point.x) + ' ' + Math.floor(point.y) + ' ';\r\n        }\r\n\r\n        return path;\r\n    }\r\n    public calcInfoPosNew(infoTxt: InfoText, node: Node): Point {\r\n\r\n        if (!infoTxt || !node) {\r\n            return null;\r\n        }\r\n\r\n        // 1. step: get direction\r\n        let startPoint: Point;\r\n        let nextToStartPoint: Point;\r\n        if (this.$sNode.id === node.id) {\r\n            startPoint = this.$points[0];\r\n            nextToStartPoint = this.$points[1];\r\n        }\r\n        else if (this.$tNode.id === node.id) {\r\n            startPoint = this.$points[this.$points.length - 1];\r\n            nextToStartPoint = this.$points[this.$points.length - 2];\r\n        }\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(node, startPoint);\r\n\r\n        let x: number;\r\n        let y: number;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                break;\r\n            case Direction.Right:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x - (infoTxt.getSize().x) - 5;\r\n                break;\r\n            case Direction.Left:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x + 5;\r\n                break;\r\n            case Direction.Down:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        // assign calculated position to infotext\r\n        return new Point(x, y);\r\n    }\r\n\r\n    public clearPoints(): any {\r\n        this.$points = [];\r\n        this.$points = [];\r\n    }\r\n\r\n    public addPoint(x: number, y: number): Point[] {\r\n        this.$points.push(new Point(x, y));\r\n\r\n        return this.$points;\r\n    }\r\n\r\n    protected redrawPointsAndInfo(): void {\r\n        // redraw the edge with the new position\r\n        let path: string = this.getPath();\r\n        this.$pathSvg.setAttributeNS(null, 'd', path);\r\n        this.$pathWideSvg.setAttributeNS(null, 'd', path);\r\n\r\n        this.redrawSourceInfo();\r\n        this.redrawTargetInfo();\r\n    }\r\n\r\n    protected redrawSourceInfo() {\r\n        if (this.sourceInfo) {\r\n            let newPosOfSrc = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.redrawFromEdge(newPosOfSrc);\r\n        }\r\n    }\r\n\r\n    protected redrawTargetInfo() {\r\n        if (this.targetInfo) {\r\n            let newPosOfTarget = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.redrawFromEdge(newPosOfTarget);\r\n        }\r\n    }\r\n\r\n    protected getDirectionOfPointToNode(node: Node, pointNearNode: Point): Direction {\r\n        /*\r\n            Example to calculate the direction of nearest point to Node\r\n\r\n            node\r\n         x1_ _ _ _\r\n          |       |\r\n          |       |. pointNearNode\r\n          |       |\r\n          |_ _ _ x2\r\n\r\n          the calculation would return Direction.Left\r\n        */\r\n\r\n        let x1: Point = node.getPos();\r\n        let x2: Point = new Point((x1.x + node.getSize().x), (x1.y + node.getSize().y));\r\n        let direction: Direction = Direction.Down;\r\n\r\n        if (x1.y >= pointNearNode.y) {\r\n            direction = Direction.Down;\r\n        }\r\n        if (x2.y <= pointNearNode.y) {\r\n            direction = Direction.Up;\r\n        }\r\n        if (x1.x >= pointNearNode.x) {\r\n            direction = Direction.Right;\r\n        }\r\n        if (x2.x <= pointNearNode.x) {\r\n            direction = Direction.Left;\r\n        }\r\n\r\n        return direction;\r\n    }\r\n\r\n    private updateCardinality(node: Node, infoText: InfoText, cardinality: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'cardinality': cardinality });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.cardinality = cardinality;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateCardinality(cardinality);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private updateProperty(node: Node, infoText: InfoText, property: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'property': property });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.property = property;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateProperty(property);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private calcIntersection(startNode: Node, recalcPoint: Point, endPoint: Point): Point {\r\n\r\n        // https://www.mathelounge.de/21534/schnittpunkt-einer-linie-mit-den-randern-eines-rechtecks\r\n        let h = startNode.getSize().y;\r\n        let w = startNode.getSize().x;\r\n\r\n        let x1: number = startNode.getPos().x + (w / 2);\r\n        let y1: number = startNode.getPos().y + (h / 2);\r\n\r\n        let x2: number = endPoint.x;\r\n        let y2: number = endPoint.y;\r\n\r\n        let newX: number = recalcPoint.x;\r\n        let newY: number = recalcPoint.y;\r\n\r\n        if (x2 > x1) {\r\n            newX = x1 + (w / 2);\r\n        }\r\n        else if (x2 < x1) {\r\n            newX = x1 - (w / 2);\r\n        }\r\n        else {\r\n            newX = x1;\r\n        }\r\n\r\n        if ((x2 - x1) !== 0) {\r\n            newY = ((y2 - y1) / (x2 - x1) * (newX - x1)) + y1;\r\n        }\r\n        else {\r\n            if (y1 > y2) {\r\n                newY = startNode.getPos().y;\r\n            }\r\n            else {\r\n                newY = startNode.getPos().y + h;\r\n            }\r\n        }\r\n\r\n        // if the statement is not true, so the intersection is at the horizontal line\r\n        if (!((y1 - (h / 2) <= newY) && newY <= y1 + (h / 2))) {\r\n\r\n            if (y2 > y1) {\r\n                newY = y1 + (h / 2);\r\n            }\r\n            else {\r\n                newY = y1 - (h / 2);\r\n            }\r\n\r\n            if ((x2 - x1) !== 0) {\r\n                let tmp = ((y2 - y1) / (x2 - x1));\r\n                newX = (newY + (tmp * x1) - y1) / tmp;\r\n            }\r\n            else {\r\n                newX = x1;\r\n            }\r\n        }\r\n\r\n        recalcPoint.x = Math.ceil(newX);\r\n        recalcPoint.y = Math.ceil(newY);\r\n\r\n        return null;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Composition extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'black');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { Association } from './Association';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\nimport { Direction } from '../index';\r\n\r\nexport class Generalisation extends Association {\r\n\r\n    public $TARGET_ELEMENT_HEIGHT : number = 12;\r\n    protected $targetElement: Element;\r\n\r\n    public getSVG(): Element {\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction : Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled arrow\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'white'\r\n          };\r\n\r\n        this.$targetElement = this.createShape(attr);\r\n\r\n        group.appendChild(this.$targetElement);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean) : void {\r\n\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint : Point = this.$points[0];\r\n        let direction : Direction = Direction.Up;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if(this.$sNode.id === startNode.id || this.$points.length == 2){\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$targetElement.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint : Point, direction : Direction) : string{\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch(direction){\r\n            case Direction.Up:\r\n            path = `M${startX} ${startY+3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y+12;\r\n            break;\r\n            case Direction.Right:\r\n            path = `M${startX-3} ${startY} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x-12;\r\n            break;\r\n            case Direction.Left:\r\n            path = `M${startX+3} ${startY} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x+12;\r\n            break;\r\n            case Direction.Down:\r\n            path = `M${startX} ${startY-3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y-12;\r\n            break;\r\n            default :\r\n            break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n\r\n}\r\n","import { Generalisation } from './Generalisation';\r\n\r\nexport class Implements extends Generalisation {\r\n\r\n    public getSVG(): Element {\r\n        let group = super.getSVG();\r\n\r\n        this.$pathSvg.setAttributeNS(null, 'stroke-dasharray', '3, 3');\r\n\r\n        return group;\r\n    }\r\n}\r\n","export * from './Association';\r\nexport * from './Aggregate';\r\nexport * from './Aggregation';\r\nexport * from './Composition';\r\nexport * from './Generalisation';\r\nexport * from './Implements';","export * from './edges';\r\nexport * from './nodes';\r\nexport * from './BaseElements';\r\nexport * from './Graph';\r\nexport * from './Model';\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Attribute extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 28.06.2017.\r\n */\r\nimport {Control} from \"../../Control\";\r\n\r\nexport class AutoComplete extends Control {\r\n    private $inputField:HTMLInputElement;\r\n    private $dataList:HTMLDataListElement;\r\n    private $selected:HTMLSelectElement;\r\n    private $items:HTMLDivElement;\r\n    private isMultiple:boolean;\r\n\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        let div:HTMLDivElement = document.createElement('div');\r\n        this.$view = div;\r\n        this.$inputField = document.createElement('input');\r\n        this.$dataList = document.createElement(\"datalist\");\r\n        this.$dataList.id = \"data_\"+this.id;\r\n        this.$inputField.setAttribute(\"list\", \"data_\"+this.id);\r\n        if(data[\"value\"]) {\r\n            let values = data[\"value\"];\r\n            this.isMultiple = data[\"multiple\"] != null;\r\n            let option:HTMLOptionElement;\r\n            if(this.isMultiple) {\r\n                this.$selected = document.createElement(\"select\");\r\n                this.$selected.className = \"hide\";\r\n                this.$selected.multiple = true;\r\n\r\n                this.$selected.id = this.id;\r\n                this.$items = document.createElement(\"div\");\r\n                this.$items.className = \"selectedList\";\r\n                div.appendChild(this.$items);\r\n                this.$inputField.className = \"selectedInput\";\r\n                div.appendChild(this.$selected);\r\n                this.$view[\"style\"].setProperty(\"float\", \"left\");\r\n                let that = this;\r\n                this.$inputField.oninput = function(){that.onChange();}\r\n            } else {\r\n                this.$inputField.id = this.id;\r\n            }\r\n            for (let attr in values) {\r\n                if (!values.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                option = document.createElement(\"option\");\r\n                option.value = values[attr];\r\n                this.$dataList.appendChild(option);\r\n                if(this.isMultiple) {\r\n                    option = document.createElement(\"option\");\r\n                    option.value = values[attr];\r\n                    option.innerHTML = values[attr];\r\n                    this.$selected.appendChild(option);\r\n                }\r\n        }\r\n\r\n            div.appendChild(this.$inputField);\r\n            div.appendChild(this.$dataList);\r\n        }\r\n\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n            if(this.isMultiple) {\r\n                div.appendChild(this.$selected);\r\n            }\r\n        }\r\n\r\n        parent.appendChild(this);\r\n    }\r\n\r\n    public onChange() : void {\r\n        let textValue:string = this.$inputField.value;\r\n        if(textValue.length<1) {\r\n            return;\r\n        }\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == textValue) {\r\n                if(item.selected == false) {\r\n                    item.selected = true;\r\n                    item.defaultSelected = true;\r\n                    let test = document.createElement(\"li\");\r\n                    let that = this;\r\n                    test.onclick = function() {that.onDelete(item.value, test);};\r\n                    test.className = \"selectedItem\";\r\n                    test.innerHTML = item.value;\r\n                    this.$items.appendChild(test);\r\n                    this.$inputField.value = \"\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n    public onDelete(value:string, selectedItem:HTMLLIElement) : void {\r\n        this.$items.removeChild(selectedItem);\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == value ) {\r\n                if(item.selected) {\r\n                    item.selected = false;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","import {Control} from '../../Control';\r\n\r\nexport class BR extends Control {\r\n    public load(json: JSON): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('br');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            this.$view.setAttribute(attr, data[attr]);\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\nexport class Button extends Control {\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        this.$view = document.createElement('button');\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\nimport { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\nimport { Size } from '../index';\r\nimport ClazzProperty from './ClazzProperty';\r\nimport {SymbolLibary} from './Symbol';\r\nimport {StereoType} from './StereoType';\r\nimport {GraphListener} from '../../handlers/GraphListener';\r\n\r\nexport class Class extends Node {\r\n    public attributes: Attribute[] = [];\r\n    public methods: Method[] = [];\r\n    public modifier: string;\r\n    public stereoType: string;\r\n\r\n    protected $attrHeight = 25;\r\n    protected $attrFontSize = 12;\r\n    protected $labelView: Element;\r\n\r\n    constructor(json: JSON | string | Object | any) {\r\n        super(json);\r\n        return this;\r\n    }\r\n\r\n    public load(json?: any) {\r\n        if (!json) {\r\n            json = {};\r\n        }\r\n        let y = this.$labelHeight;\r\n        let labelObj = json.name || json.id || ('New ' + this.property);\r\n\r\n        let width: number = 150;\r\n        width = Math.max(width, Util.sizeOf(labelObj).width + 60);\r\n\r\n        if (json['attributes']) {\r\n            for (let attr of json['attributes']) {\r\n\r\n                let attrObj = new Attribute(attr);\r\n                attrObj.$owner = this;\r\n                this.attributes.push(attrObj);\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(attrObj.toString()).width);\r\n                let listener = new GraphListener(attrObj);\r\n                attrObj.$data.addListener(listener);\r\n            }\r\n        }\r\n        if (json['stereotype']) {\r\n            this.stereoType = json['stereotype'];\r\n        }\r\n        if (json['methods']) {\r\n            for (let method of json['methods']) {\r\n\r\n                let methodObj = new Method(method);\r\n                methodObj.$owner = this;\r\n                this.methods.push(methodObj);\r\n\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(methodObj.toString()).width);\r\n            }\r\n            y += this.$attrHeight;\r\n        }\r\n        this.withSize(width, y);\r\n    }\r\n\r\n    public getAttributes(): Attribute[] {\r\n        return this.attributes;\r\n    }\r\n\r\n    public getMethods(): Method[] {\r\n        return this.methods;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        let icon = SymbolLibary.draw({type: 'Class', property: 'HTML', width: '50', height: '50', transform: 'translate(-26,-21)'});\r\n        return icon;\r\n        // let group = this.createShape(\r\n//    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n//    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos: Point = this.getPos();\r\n        const size: Point = this.getSize();\r\n\r\n        let group = this.createShape({ tag: 'g', id: this.id, class: 'SVGClazz', transform: 'translate(0 0)' });\r\n\r\n        if (this.stereoType) {\r\n            let type = new StereoType(this.stereoType, pos.x, pos.y);\r\n            group.appendChild(type.getSVG());\r\n        }\r\n\r\n        // Full Shape\r\n        let options = null;\r\n        let style;\r\n        let clazzName;\r\n        if (this.$owner['options']) {\r\n            let options = this.$owner['options'];\r\n            if (options) {\r\n                style = options.style;\r\n            }\r\n        }\r\n        // = = = Background = = =\r\n        if (style === 'modern') {\r\n            clazzName = 'ClazzHeader';\r\n        }\r\n        clazzName = 'ClazzHeader';\r\n        const nodeShape = this.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            height: size.y,\r\n            width: size.x,\r\n            rx: 5,\r\n            ry: 5,\r\n            fill: 'none',\r\n            stroke: 'black',\r\n            'stroke-width': 1\r\n        });\r\n        if (clazzName) {\r\n            nodeShape.setAttribute('className', clazzName);\r\n            let styleHeader = Util.getStyle('ClazzHeader');\r\n            // headerHeight = styleHeader.getNumber('height');\r\n        }\r\n\r\n        // = = = LABEL = = =\r\n        let label = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y + this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': this.$labelFontSize,\r\n            fill: 'black'\r\n        });\r\n        label.textContent = this.id;\r\n        this.$labelView = label;\r\n\r\n        group.appendChild(nodeShape);\r\n        group.appendChild(label);\r\n\r\n        // = = = ATTRIBUTES = = =\r\n        if (this.attributes.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorLabelAttr = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight,\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight,\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorLabelAttr);\r\n\r\n            let groupOfAttributes = this.createShape({ tag: 'g', id: (this.id + 'Attributes') });\r\n            groupOfAttributes.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzAttribute');\r\n            group.appendChild(groupOfAttributes);\r\n\r\n            let y = pos.y + this.$labelHeight + this.$attrHeight / 2;\r\n            for (let attr of this.attributes) {\r\n\r\n                let attrSvg = attr.getSVG();\r\n                attr.$owner = this;\r\n\r\n                attrSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                attrSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfAttributes.appendChild(attrSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        // = = = METHODS = = =\r\n        let height = this.attributes.length * this.$attrHeight;\r\n        let y = pos.y + this.$labelHeight + height + this.$attrHeight / 2;\r\n        if (this.methods.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorAttrMethods = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorAttrMethods);\r\n\r\n            let groupOfMethods = this.createShape({ tag: 'g', id: (this.id + 'Methods') });\r\n            groupOfMethods.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzMethod');\r\n            group.appendChild(groupOfMethods);\r\n\r\n            y += this.$attrHeight / 2;\r\n            for (let method of this.methods) {\r\n\r\n                let methodSvg = method.getSVG();\r\n                method.$owner = this;\r\n\r\n                methodSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                methodSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfMethods.appendChild(methodSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        this.$view = group;\r\n        return group;\r\n    }\r\n\r\n    public copy(): Class {\r\n        let copy: Class;\r\n        copy = <Class>super.copy();\r\n\r\n        // copy label\r\n        copy.id = this.id + 'Copy';\r\n\r\n        // copy attributes\r\n        this.attributes.forEach(attr => {\r\n            copy.attributes.push(new Attribute(attr.toString()));\r\n        });\r\n        // copy methods\r\n        this.methods.forEach(method => {\r\n            copy.methods.push(new Method(method.toString()));\r\n        });\r\n        copy.reCalcSize();\r\n\r\n        return copy;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTCLICK,\r\n                EventBus.ELEMENTDRAG, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES, EventBus.RELOADPROPERTIES];\r\n    }\r\n\r\n    public addProperty(value: string, type: string): any {\r\n        if (!this[type] || !value || value.length === 0) {\r\n            return;\r\n        }\r\n\r\n        let extractedValue;\r\n        if (type === 'attributes') {\r\n            extractedValue = new Attribute(value);\r\n        }\r\n        else if (type === 'methods') {\r\n            extractedValue = new Method(value);\r\n        }\r\n\r\n        for (let valueOfType of this[type]) {\r\n            if (valueOfType.toString() === extractedValue.toString()) {\r\n                alert(extractedValue.toString() + ' already exists.');\r\n                extractedValue = undefined;\r\n                return;\r\n            }\r\n        }\r\n\r\n        this[type].push(extractedValue);\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        return extractedValue;\r\n    }\r\n\r\n    public addAttribute(value: string): Attribute {\r\n        return this.addProperty(value, 'attributes');\r\n    }\r\n\r\n    public addAttributeObj(attr: Attribute): Attribute[] {\r\n        this.attributes.push(attr);\r\n        return this.getAttributes();\r\n    }\r\n\r\n    public addMethodObj(method: Method): Method[] {\r\n        this.methods.push(method);\r\n        return this.getMethods();\r\n    }\r\n\r\n    public addMethod(value: string): Method {\r\n        return this.addProperty(value, 'methods');\r\n    }\r\n\r\n    public removeAttribute(attr: Attribute): void {\r\n        let idx = this.attributes.indexOf(attr);\r\n        this.attributes.splice(idx, 1);\r\n    }\r\n\r\n    public removeMethod(method: Method): void {\r\n        let idx = this.methods.indexOf(method);\r\n        this.methods.splice(idx, 1);\r\n    }\r\n\r\n    public removeProperty(property: ClazzProperty): void {\r\n\r\n        if (property instanceof Attribute) {\r\n            this.removeAttribute(<Attribute>property);\r\n        }\r\n\r\n        if (property instanceof Method) {\r\n            this.removeMethod(<Method>property);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n        let hasSizeChanged: [boolean, Size] = this.hasSizeChanged();\r\n\r\n        if (drawOnlyIfSizeChanged) {\r\n            if (!hasSizeChanged[0]) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n\r\n        // redraw only this clazz\r\n        this.$owner.$view.removeChild(this.$view);\r\n        let newSvg = this.getSVG();\r\n        this.$owner.$view.appendChild(newSvg);\r\n        this.$view = newSvg;\r\n        EventBus.register(this, newSvg);\r\n\r\n        this.redrawEdges();\r\n    }\r\n\r\n    public hasSizeChanged(): [boolean, Size] {\r\n        let oldSize = { width: this.getSize().x, height: this.getSize().y };\r\n        let newSize = this.reCalcSize();\r\n\r\n        // size doenst changed, so nothing to redraw\r\n        if (oldSize.width === newSize.width && oldSize.height === newSize.height) {\r\n            return [false, newSize];\r\n        }\r\n\r\n        return [true, newSize];\r\n    }\r\n\r\n    public updateLabel(newLabel: string): void {\r\n        if (this.$labelView) {\r\n            this.$labelView.textContent = newLabel;\r\n        }\r\n\r\n        // update label in all edges\r\n        this.$edges.forEach(edge => {\r\n            if (this.id === edge.$sNode.id) {\r\n                edge.source = newLabel;\r\n            }\r\n            else if (this.id === edge.$tNode.id) {\r\n                edge.target = newLabel;\r\n            }\r\n        });\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        this.reDraw(true);\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.modifier = modifier;\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reCalcSize(): Size {\r\n        // label\r\n        let newWidth = 150;\r\n        newWidth = Math.max(newWidth, Util.sizeOf(this.id).width + 30);\r\n\r\n        // attributes\r\n        this.attributes.forEach(attrEl => {\r\n\r\n            let widthOfAttr;\r\n            if (attrEl.$view) {\r\n                widthOfAttr = attrEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfAttr = Util.sizeOf(attrEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfAttr + 15);\r\n        });\r\n\r\n        // methods\r\n        this.methods.forEach(methodEl => {\r\n            let widthOfMethod;\r\n            if (methodEl.$view) {\r\n                widthOfMethod = methodEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfMethod = Util.sizeOf(methodEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfMethod + 15);\r\n        });\r\n\r\n        // TODO: height has to be calculated by font-size\r\n        this.getSize().x = newWidth;\r\n        this.getSize().y = this.$labelHeight + ((this.attributes.length + this.methods.length) * this.$attrHeight)\r\n            + this.$attrHeight;\r\n\r\n        let newSize = { width: newWidth, height: this.getSize().y };\r\n\r\n        return newSize;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    private getModernStyle(): Element {\r\n        let width, height, id, size, z, item, rect, g, board, styleHeader, headerHeight, x, y;\r\n        board = this.getRoot()['board'];\r\n        styleHeader = Util.getStyle('ClazzHeader');\r\n        headerHeight = styleHeader.getNumber('height');\r\n        width = 0;\r\n        height = 10 + headerHeight;\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].getType().toLowerCase() === 'objectdiagram') {\r\n            id = this.id.charAt(0).toLowerCase() + this.id.slice(1);\r\n            item = 'Object';\r\n        } else {\r\n            id = this.id;\r\n            item = 'Class';\r\n            if (this['counter']) {\r\n                id += ' (' + this['counter'] + ')';\r\n            }\r\n        }\r\n        g = Util.create({tag: 'g', model: this});\r\n        size = Util.sizeOf(id, this);\r\n        width = Math.max(width, size.width);\r\n        if (this.attributes && this.attributes.length > 0) {\r\n            height = height + this.attributes.length * 25;\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.attributes[z], this).width);\r\n            }\r\n        } else {\r\n            height += 20;\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            height = height + this.methods.length * 25;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.methods[z], this).width);\r\n            }\r\n        }\r\n        width += 20;\r\n\r\n        let pos = this.getPos();\r\n        y = pos.y;\r\n        x = pos.x;\r\n\r\n        rect = {\r\n            tag: 'rect',\r\n            'width': width,\r\n            'height': height,\r\n            'x': x,\r\n            'y': y,\r\n            'class': item + ' draggable',\r\n            'fill': 'none'\r\n        };\r\n        g.appendChild(Util.create(rect));\r\n        g.appendChild(Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            'x': x,\r\n            'y': y,\r\n            height: headerHeight,\r\n            'width': width,\r\n            'class': 'ClazzHeader'\r\n        }));\r\n\r\n        item = Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'class': 'InfoText',\r\n            'text-anchor': 'right',\r\n            'x': x + width / 2 - size.width / 2,\r\n            'y': y + (headerHeight / 2) + (size.height / 2),\r\n            'width': size.width\r\n        });\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].type.toLowerCase() === 'objectdiagram') {\r\n            item.setAttribute('text-decoration', 'underline');\r\n        }\r\n        item.appendChild(document.createTextNode(id));\r\n\r\n        g.appendChild(item);\r\n        g.appendChild(Util.create({\r\n            tag: 'line',\r\n            x1: x,\r\n            y1: y + headerHeight,\r\n            x2: x + width,\r\n            y2: y + headerHeight,\r\n            stroke: '#000'\r\n        }));\r\n        y += headerHeight + 20;\r\n\r\n        if (this.attributes) {\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': (x + 10),\r\n                    'y': y,\r\n                    value: this.attributes[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n            if (this.attributes.length > 0) {\r\n                y -= 10;\r\n            }\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            g.appendChild(Util.create({tag: 'line', x1: x, y1: y, x2: x + width, y2: y, stroke: '#000'}));\r\n            y += 20;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': x + 10,\r\n                    'y': y,\r\n                    value: this.methods[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n        }\r\n        return g;\r\n    }\r\n}\r\n","import {Util} from '../../util';\r\nimport {DiagramElement} from '../BaseElements';\r\nimport Data from '../../Data';\r\n\r\nexport default class ClazzProperty extends DiagramElement {\r\n\r\n    // Public (+)\r\n    // Private (-)\r\n    // Protected (#)\r\n    // Package (~)\r\n\r\n    public $data = new Data();\r\n//    public modifier: string = '+';\r\n//    public name: string;\r\n//    public type: string;\r\n//    public value: string;\r\n\r\n    constructor(data: any | JSON) {\r\n        super();\r\n        this.$data.setValue('modifier', '+');\r\n        this.$data.setValue('name', null);\r\n        this.$data.setValue('type', null);\r\n        this.$data.setValue('value', null);\r\n        this.extractData(data);\r\n    }\r\n\r\n    public update(data: any | JSON): void {\r\n        this.extractData(data);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.$data.setValue('modifier', modifier);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateType(type: string): void {\r\n        this.$data.setValue('type', type);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateValue(value: string): void {\r\n        this.$data.setValue('value', value);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateName(name: string): void {\r\n        this.$data.setValue('name', name);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public getName(): string {\r\n        return this.$data.getValue('name');\r\n    }\r\n\r\n    public getModifier(): string {\r\n        return this.$data.getValue('modifier');\r\n    }\r\n\r\n    public getType(): string {\r\n        return this.$data.getValue('type');\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let attrText = {\r\n            tag: 'text',\r\n            'text-anchor': 'start',\r\n            'alignment-baseline': 'middle',\r\n        };\r\n\r\n        let attrSvg = Util.createShape(attrText);\r\n        attrSvg.textContent = this.toString();\r\n\r\n        this.$view = attrSvg;\r\n\r\n        return attrSvg;\r\n    }\r\n\r\n    public toString(): string {\r\n        let value = this.$data.getValue('value');\r\n        let result = this.$data.getValue('modifier') + ' ';\r\n        result += this.$data.getValue('name') + ' : ';\r\n        result += this.$data.getValue('type');\r\n        if (value && value.length > 0) {\r\n            result += ' = ' + this.$data.getValue('value');\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.$data.setValue('type', data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.$data.setValue('name', data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.$data.setValue('modifier', data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n\r\n            // e.g. name : string or name:string\r\n            let dataSplitted = data.split(':');\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                let name;\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.$data.setValue('modifier', firstChar);\r\n                    name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                }\r\n                else {\r\n                    name = modifierAndNameSplitted;\r\n                }\r\n                // delete whitespaces in name\r\n                name = name.replace(/ /g, '_');\r\n\r\n                this.$data.setValue('name', name);\r\n                let type = dataSplitted[1].trim() || 'String';\r\n\r\n                // if the type was entered with a small begin letter\r\n                if (type.toLowerCase() === 'string') {\r\n                    type = 'String';\r\n                }\r\n                // delete whitespaces in type\r\n                type = type.replace(/ /g, '_');\r\n                this.$data.setValue('type',  type);\r\n            } else {\r\n                dataSplitted = data.split('=');\r\n                if (dataSplitted && dataSplitted.length === 2) {\r\n                    // modifer (and or) name\r\n                    let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                    // first char is +, - or #\r\n                    let firstChar = modifierAndNameSplitted[0];\r\n                    let name;\r\n                    if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                        this.$data.setValue('modifier', firstChar);\r\n                        name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                    }\r\n                    else {\r\n                        name = modifierAndNameSplitted;\r\n                    }\r\n                    // delete whitespaces in name\r\n                    name = name.replace(/ /g, '_');\r\n\r\n                    this.$data.setValue('name', name);\r\n                    let value = dataSplitted[1].trim() || '\"\"';\r\n                    this.$data.setValue('value', value);\r\n                    this.$data.setValue('type', typeof value);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected updateTextOfView() {\r\n        if (this.$view) {\r\n            this.$view.textContent = this.toString();\r\n        }\r\n        if (this.$owner) {\r\n            Util.saveToLocalStorage(this.$owner.$owner);\r\n        }\r\n    }\r\n}\r\n","import {Node} from \"./Node\";\r\n/**\r\n * Created by Stefan on 29.03.2017.\r\n */\r\n\r\nexport class Dice extends Node {\r\n    private value: number;\r\n    private max: number = 6;\r\n    private $animation: SVGElement;\r\n    private $zoom: number = 0.6;\r\n    private $border: number = 0.2;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super(data);\r\n        this.withSize(100, 100);\r\n    }\r\n\r\n    public setNumber(number: number) {\r\n        this.value = number;\r\n        this.refresh();\r\n    }\r\n\r\n    public refresh() {\r\n        if (this.$view) {\r\n            this.reset();\r\n            let group = this.createPointValue();\r\n            if (group) {\r\n                this.$view.appendChild(group);\r\n            }\r\n        }\r\n    }\r\n\r\n    public reset() {\r\n        if (this.$view) {\r\n            while (this.$view.children.length > 1) {\r\n                if(this.$view.children.item(this.$view.children.length - 1).tagName!== \"animateTransform\") {\r\n                    console.log(this.$view.children.item(this.$view.children.length - 1));\r\n                    this.$view.removeChild(this.$view.children.item(this.$view.children.length - 1));\r\n                }else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let dice: SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x + size.x * this.$border,\r\n            y: pos.y + size.y * this.$border,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y * this.$zoom,\r\n            width: size.x * this.$zoom,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        dice.appendChild(this.createShape(attr));\r\n\r\n        let group = this.createPointValue();\r\n        if (group) {\r\n            dice.appendChild(group);\r\n        }\r\n\r\n        this.$view = dice;\r\n        return dice;\r\n    }\r\n\r\n    public animationTimeout(newValues: number[]) {\r\n        if(newValues.length>0) {\r\n            let newValue = newValues.shift();\r\n            this.setNumber(newValue);\r\n            let that=this;\r\n            setTimeout(function() {that.animationTimeout(newValues)}, 100);\r\n        }\r\n    }\r\n\r\n    public roll() {\r\n        this.startAnimation();\r\n        let values:number[]=[];\r\n        let i:number;\r\n        for(i=1;i<this.max;i++) {\r\n            values.push(i);\r\n        }\r\n        for(i=this.max;i>0;i--) {\r\n            values.push(i);\r\n        }\r\n        let that=this;\r\n        values.push( Math.floor(Math.random() * this.max)+1 );\r\n        setTimeout(function() {that.animationTimeout(values)}, 100);\r\n    }\r\n    public startAnimation() {\r\n        if(this.$animation) {\r\n            return;\r\n        }\r\n        let center = this.getPos().x+this.getSize().x /2;\r\n        const attr = {\r\n            tag: 'animateTransform',\r\n            attributeType: \"xml\",\r\n            attributeName:\"transform\",\r\n            type:\"rotate\",\r\n            dur: \"1s\",\r\n            repeatCount:\"1\",\r\n            from:\"0 \"+center+\" \"+center,\r\n            to:\"360 \"+center+\" \"+center\r\n        };\r\n        this.$animation = <SVGElement>this.createShape(attr);\r\n        this.$view.appendChild(this.$animation);\r\n    }\r\n\r\n    public stopAnimation() {\r\n        if(this.$animation) {\r\n            this.$view.removeChild(this.$animation);\r\n            this.$animation = null;\r\n        }\r\n    }\r\n\r\n    public createPointValue() :SVGElement {\r\n        if (this.value == 1) {\r\n           return this.getCircle(2, 2);\r\n        } else if (this.value == 2) {\r\n            return this.getCircle(1, 1, 3, 3);\r\n        } else if (this.value == 3) {\r\n            return this.getCircle(1, 1, 2, 2, 3, 3);\r\n        } else if (this.value == 4) {\r\n            return this.getCircle(1, 1, 1, 3, 3, 1, 3, 3);\r\n        } else if (this.value == 5) {\r\n            return this.getCircle(1, 1, 1, 3, 2, 2, 3, 1, 3, 3);\r\n        } else if (this.value == 6) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 7) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 2, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 8) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 9) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private getCircle(...values:number[]) : SVGElement {\r\n        if (values.length % 2 > 0) {\r\n            return null;\r\n        }\r\n        let size = this.getSize();\r\n        let pos = this.getPos();\r\n        //FIXME let group:SVGElement = <SVGElement>this.createShape({tag: 'g', transform: 'translate(0 0)', height: size.y, width: size.x});\r\n        let group:SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n\r\n\r\n        for (let i: number = 0; i < values.length; i += 2) {\r\n            group.appendChild(this.createCircle(values[i], values[i + 1]));\r\n        }\r\n        return group;\r\n    }\r\n    private createCircle(x:number, y:number) : SVGElement {\r\n        let size = this.getSize();\r\n        let radius = size.x / 10*this.$zoom;\r\n        let border = size.y*this.$border;\r\n        let zoom = size.y*this.$zoom;\r\n        const attr = {\r\n            tag: 'circle',\r\n            r : radius,\r\n            cx: (size.x*this.$zoom * x) / 4 + border,\r\n            cy: (size.y*this.$zoom * y) / 4 + border,\r\n            stroke:\"black\",\r\n            \"stroke-width\":\"3\",\r\n            fill:\"red\",\r\n            style: 'fill:black;stroke:black;stroke-width:2'\r\n        };\r\n        return <SVGElement>this.createShape(attr);\r\n    }\r\n}","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\n\r\nexport class Div extends Control {\r\n    private className: string;\r\n\r\n    public load(data:JSON|any): any {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = <string>data;\r\n        } else {\r\n            id = data.id;\r\n            this.className = data.class;\r\n            this.property = data.property;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let div: HTMLElement = document.getElementById(id);\r\n\r\n        if (!this.property) {\r\n            // if(inputField){\r\n            // TODO disuss how to decide, which property we should listen on...\r\n            // this.property = id;\r\n            this.property = div.getAttribute('Property');\r\n            // }\r\n        }\r\n\r\n        if (div instanceof HTMLDivElement) {\r\n            this.$view = div;\r\n        } else {\r\n            if (!div) {\r\n                this.$view = document.createElement('div');\r\n                this.$view.setAttribute('id', this.id);\r\n                this.$view.setAttribute('property', this.property);\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists+\r\n        if (data.hasOwnProperty('property')) {\r\n            this.setProperty(data['property']);\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        this.$model = entity;\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.className || entity.hasProperty(this.className)) {\r\n                if (entity.id === this.property.split('.')[0]) {\r\n                    entity.addListener(this, this.className);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        this.$view.innerHTML = <string>newValue;\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Form extends Control {\r\n    // private applyingChange: boolean = false;\r\n    private children: Object = {};\r\n    // private property: string = \"\";\r\n\r\n    /**\r\n     * Data should look like the following json:\r\n     *\r\n     * <pre>{\r\n     *      id: \"t1\",\r\n     *      control: \"form\",\r\n     *      elements: [\r\n     *          {id: \"inputField1\", property: \"talk\"},\r\n     *          {id: \"inputField2\", property: \"room\"}\r\n     *      ]\r\n     * }</pre>\r\n     * @param data\r\n     */\r\n    public load(data: any) {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let form: HTMLElement = document.getElementById(id);\r\n\r\n        if (form instanceof HTMLFormElement) {\r\n            this.$view = form;\r\n            if (this.$view.hasAttribute('property')) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            if (!form) {\r\n                this.$view = document.createElement('form');\r\n                this.$view.setAttribute('id', this.id);\r\n\r\n                if (data.hasOwnProperty('property')) {\r\n                    this.property = data['property'];\r\n                }\r\n\r\n                // add all the attributes to the form element\r\n                for (let attr in data) {\r\n                    if (data.hasOwnProperty(attr) === false) {\r\n                        continue;\r\n                    }\r\n                    if (attr === 'elements') {\r\n                        continue;\r\n                    }\r\n                    this.$view.setAttribute(attr, data[attr]);\r\n                }\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists\r\n        let objId = this.property;\r\n        let hasItem = this.$owner.hasItem(objId);\r\n        if (hasItem) {\r\n            let item = this.$owner.getItem(objId);\r\n            item.addListener(this);\r\n            this.$model = item;\r\n        }\r\n\r\n        // now create all the sub input controls\r\n        for (let field of data.elements) {\r\n            // this.createField(field);\r\n            if (field.hasOwnProperty('property')) {\r\n                let property = field['property'];\r\n                property = this.property + '.' + property;\r\n                field['property'] = property;\r\n            }\r\n            if (!field.hasOwnProperty('class')) {\r\n                field['class'] = 'input';\r\n            }\r\n\r\n            // let the Bridge load the subControl\r\n            let control: Control = this.$owner.load(field, this);\r\n\r\n            // add subControl to children\r\n            this.children[control.getId()] = control;\r\n        }\r\n\r\n    }\r\n\r\n    public setProperty(id: string): void {\r\n        this.property = id;\r\n        let keys: string[] = Object.keys(this.children);\r\n        for (let k = 0; k < keys.length; k++) {\r\n            let key = keys[k];\r\n            let childControl = this.children[key];\r\n            // only set Property, if there is a Property defined before\r\n            if (childControl.property) {\r\n                childControl.setProperty(this.property + '.' + childControl.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object,  oldValue?: Object): boolean {\r\n        if (this.$owner != null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    /**\r\n     * Here we create the form elements and put all the attributes to them in order for the Control only having to load\r\n     * the data were appending here. Alternative would be loading with the bridge and afterwards setting\r\n     * the owner to the form instead of the body..\r\n     * @param field\r\n     */\r\n    /*private createField(field: Object) {\r\n     let control = 'input';\r\n     if (field.hasOwnProperty('class')) {\r\n     control = field['class'];\r\n     }\r\n     let input = document.createElement(control);\r\n     input.setAttribute('class', control);\r\n     let id: string;\r\n     if (!field.hasOwnProperty('id')) {\r\n     // TODO: not the best solution for generating unique id's for forms...\r\n     id = this.$owner.getId();\r\n     field['id'] = id;\r\n     }\r\n     if (field.hasOwnProperty('property')) {\r\n     let property = field['property'];\r\n     property = this.id + '.' + property;\r\n     input.setAttribute('property', property);\r\n     }\r\n     for (let attr in field) {\r\n     if (attr === 'property' || attr === 'class' || !field.hasOwnProperty(attr)) {\r\n     continue;\r\n     }\r\n     input.setAttribute(attr, field[attr]);\r\n     }\r\n\r\n     this.$viewElement.appendChild(input);\r\n\r\n     let newcontrol: Control = this.$owner.load(field['id']);\r\n     this.children[newcontrol.getId()] = newcontrol;\r\n     }*/\r\n}\r\n","/**\r\n * Created by Stefan on 01.03.2017.\r\n */\r\nimport {Control} from '../../Control';\r\n\r\nexport class HTML extends Control {\r\n    constructor(data: JSON|Object|any) {\r\n        super();\r\n\r\n        let id: string;\r\n        let tag: string;\r\n\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            data = {};\r\n        } else if (data) {\r\n            id = data.id;\r\n        }\r\n        if (id) {\r\n            this.id = id;\r\n            this.$view = document.getElementById(id);\r\n        }\r\n        if (!this.$view) {\r\n            if (data) {\r\n                tag = data['tag'] || 'div';\r\n            } else {\r\n                tag = 'div';\r\n            }\r\n            this.$view = document.createElement(tag);\r\n            let parent = document.getElementsByTagName('body')[0];\r\n            parent.appendChild(this.$view);\r\n        }\r\n        if (!parent) {\r\n            return;\r\n        }\r\n        this.writeAttribute(data, this.$view);\r\n    }\r\n\r\n    private writeAttribute(properties: Object, entity?: any) {\r\n        let lowKey;\r\n        if (!entity) {\r\n            lowKey = properties['tag'] || 'div';\r\n            entity = document.createElement(lowKey);\r\n        }\r\n        for (let key in properties) {\r\n            if (!properties.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            lowKey = key.toLowerCase();\r\n            if (properties[key] === null) {\r\n                entity.setAttribute(key, '');\r\n                continue;\r\n            }\r\n\r\n            if (lowKey === 'tag' || lowKey.charAt(0) === '$' || lowKey === '$graphModel' || lowKey === 'class') {\r\n                continue;\r\n            }\r\n            if (lowKey === 'children') {\r\n                if (Array.isArray(properties[key])) {\r\n                    for (let item in properties[key]) {\r\n                        if (properties[key].hasOwnProperty(item) === false) {\r\n                            continue;\r\n                        }\r\n                        let child = this.writeAttribute(item);\r\n                        if (child) {\r\n                            entity.appendChild(child);\r\n                        }\r\n                    }\r\n                } else {\r\n                    let child = this.writeAttribute(properties[key]);\r\n                    if (child) {\r\n                        entity.appendChild(child);\r\n                    }\r\n                }\r\n                continue;\r\n            }\r\n            entity[key] = properties[key];\r\n        }\r\n        return entity;\r\n    }\r\n}\r\n","import { Point } from '../BaseElements';\r\nimport { Util } from '../../util';\r\nimport { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\n\r\nexport class InfoText extends Node {\r\n\r\n    public cardinality: string = '';\r\n    private $heightOfOneTextItem: number;\r\n    private $cardinalitySvg: Element;\r\n    private $propertySvg: Element;\r\n    private $rectBackground: Element;\r\n\r\n    constructor(info: any) {\r\n        super(info);\r\n        if (typeof (info) === 'string') {\r\n            this.id = info;\r\n        } else {\r\n            if (info.property) {\r\n                this.property = info.property;\r\n            }\r\n            if (info.cardinality) {\r\n                this.cardinality = info.cardinality;\r\n            }\r\n        }\r\n        this.$isDraggable = true;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n    }\r\n\r\n    public updateCardinality(cardinality: string): void {\r\n        this.cardinality = cardinality;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (this.$rectBackground) {\r\n            this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n            this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n        }\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((cardinality.length === 0 && this.property.length > 0) || !this.$cardinalitySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$cardinalitySvg) {\r\n            this.$cardinalitySvg.textContent = cardinality;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.property.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    public updateProperty(property: string): void {\r\n        this.property = property;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((property.length === 0 && this.cardinality.length > 0) || !this.$propertySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$propertySvg) {\r\n            this.$propertySvg.textContent = property;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.cardinality.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos: Point = this.getPos();\r\n        let group = Util.create({ tag: 'g', class: 'SVGEdgeInfo', transform: 'translate(0, 0)' });\r\n\r\n        // append rect as background for text items\r\n        this.$rectBackground = Util.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y - this.$heightOfOneTextItem + 3,\r\n            width: this.getSize().x,\r\n            height: this.getSize().y,\r\n            fill: '#DDD',\r\n            'stroke-width': 0,\r\n            rx: '5',\r\n            ry: '5'\r\n        });\r\n        group.appendChild(this.$rectBackground);\r\n\r\n        let y = pos.y;\r\n        if (this.property) {\r\n            // property\r\n            this.$propertySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$propertySvg.textContent = this.property;\r\n            group.appendChild(this.$propertySvg);\r\n\r\n            y += this.$heightOfOneTextItem;\r\n        }\r\n\r\n        // cardinality\r\n        if (this.cardinality) {\r\n            this.$cardinalitySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$cardinalitySvg.textContent = this.cardinality;\r\n            group.appendChild(this.$cardinalitySvg);\r\n        }\r\n\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        let cardinalityAvailable = this.cardinality && this.cardinality.length > 0;\r\n        let propertyAvailable = this.property && this.property.length > 0;\r\n\r\n        return !propertyAvailable && !cardinalityAvailable;\r\n    }\r\n\r\n    public redrawFromEdge(newPos: Point): void {\r\n\r\n        if (!newPos) {\r\n            return;\r\n        }\r\n\r\n        let oldPos = this.getPos();\r\n\r\n        // get difference between new and the old position\r\n        let diffPos = new Point();\r\n        diffPos.x = newPos.x - oldPos.x;\r\n        diffPos.y = newPos.y - oldPos.y;\r\n\r\n        // get translate information\r\n        let translation = this.$view.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        let sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        // set new traslation values\r\n        let newTransX = (sx + diffPos.x);\r\n        let newTransY = (sy + diffPos.y);\r\n        this.$view.setAttributeNS(null, 'transform', 'translate(' + newTransX + ' ' + newTransY + ')');\r\n\r\n        // set new position of svg\r\n        this.getPos().x = newPos.x;\r\n        this.getPos().y = newPos.y;\r\n    }\r\n\r\n    public getText(): string {\r\n        let infoTxt: string = '';\r\n\r\n        if (this.property) {\r\n            infoTxt = this.property;\r\n        }\r\n        if (this.cardinality) {\r\n            if (infoTxt.length > 0) {\r\n                infoTxt += '\\n';\r\n            }\r\n            infoTxt += this.cardinality;\r\n        }\r\n\r\n        return infoTxt;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    private calcSize(): Point {\r\n        let text: string = this.getText();\r\n        let items: Array<string> = text.split('\\n');\r\n\r\n        let maxSize = new Point(0, 0);\r\n        if (text.length === 0) {\r\n            return maxSize;\r\n        }\r\n\r\n        for (let i = 0; i < items.length; i += 1) {\r\n            // calculate size\r\n            let sizeOfText: ClientRect = Util.sizeOf(items[i]);\r\n            maxSize.x = Math.max(maxSize.x, sizeOfText.width);\r\n            maxSize.y += sizeOfText.height;\r\n\r\n            this.$heightOfOneTextItem = sizeOfText.height;\r\n        }\r\n\r\n        return maxSize;\r\n    }\r\n    private resetAllSvgElements() {\r\n        this.$cardinalitySvg = undefined;\r\n        this.$view = undefined;\r\n        this.$propertySvg = undefined;\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\nimport {PropertyBinder} from '../../PropertyBinder';\r\n\r\nexport class Input extends Control {\r\n    private type: string;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data = super.initViewDataProperties(oldData);\r\n        if ('checkbox' === this.type || 'radio' === this.type) {\r\n            data.addFrom('checked', oldData);\r\n        }\r\n        data.addFrom('value', oldData);\r\n        data.addFrom('type', oldData);\r\n        return data;\r\n    }\r\n\r\n    public load(data: any) {\r\n        let id: string;\r\n        let inputField: HTMLElement;\r\n        let useData: boolean;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            useData = true;\r\n        } else {\r\n            id = data.id;\r\n            if (data.type) {\r\n                this.setType(data['type']);\r\n            } else {\r\n                this.setType('text');\r\n            }\r\n            if (data.hasOwnProperty('property')) {\r\n                this.setProperty(data['property']);\r\n            }\r\n            useData = false;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n\r\n        inputField = document.getElementById(id);\r\n\r\n        if (useData) {\r\n            if (inputField) {\r\n                // TODO disuss how to decide, which property we should listen on...\r\n                // this.property = id;\r\n                if (inputField.hasAttribute('Property')) {\r\n                    this.setProperty(inputField.getAttribute('Property'));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (inputField instanceof HTMLInputElement) {\r\n            this.setView(inputField);\r\n            this.type = inputField.type;\r\n            // useData = false;\r\n        } else {\r\n            if (!inputField) {\r\n                this.setView(document.createElement('input'));\r\n                this.$viewData = this.initViewDataProperties(this.$viewData);\r\n                // append viewListener\r\n                // this.$view.addEventListener('change', this.$viewListener);\r\n                if (typeof(data) !== 'string') {\r\n                    for (let attr in data) {\r\n                        if (data.hasOwnProperty(attr) === false) {\r\n                            continue;\r\n                        }\r\n                        // this.$view[attr] = data[attr];\r\n                        this.$viewData.setValue(attr, data[attr]);\r\n                    }\r\n                } else {\r\n                    if (this.type) {\r\n                        this.$view.setAttribute('type', this.type);\r\n                    }\r\n                    if (data.hasOwnProperty('class')) {\r\n                        this.$view.setAttribute('class', data['class']);\r\n                    }\r\n                    this.$view.setAttribute('id', this.id);\r\n                    this.$view.setAttribute('property', this.property);\r\n                }\r\n\r\n                if (data.value) {\r\n                    // if theres a value at the control, we want to change the model to the new value\r\n                    if (this.$model) {\r\n                        this.$model.setValue(this.lastProperty, data.value);\r\n                    }\r\n                }\r\n                if (this.$model) {\r\n                    PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                }\r\n\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (this.property && entity) {\r\n            if (entity.id === this.property.split('.')[0]) {\r\n                this.$model = entity;\r\n                PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                // entity.addListener(this, this.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n    // TODO FIXME protected updateElement(property: string, value: string) {\r\n    //     if (this.$view instanceof HTMLInputElement) {\r\n    //         if (value != null) {\r\n    //             if(property == this.lastProperty) {\r\n    //                 (<HTMLInputElement>this.$view)[this.getStandardProperty()] = value;\r\n    //             } else {\r\n    //                 // this.getRoot().setValue(this, property, value, (<HTMLInputElement>this.$view)[property]);\r\n    //                 (<HTMLInputElement>this.$view)[property] = value;\r\n    //             }\r\n    //         } else {\r\n    //             delete (<HTMLInputElement>this.$view)[property];\r\n    //         }\r\n    //     }\r\n    // }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            super.controlChanged(ev);\r\n        }\r\n// <<<<<<< HEAD\r\n//             let newVal = element[this.getStandardProperty()];\r\n//             if (this.isKeyOnly()) {\r\n//                 // we expect, element[this.lastProperty] to be boolean:\r\n//                 if (!newVal) {\r\n//                     newVal = null;\r\n//                 }\r\n//             } else {\r\n//             }\r\n        // let $graphModel;\r\n        // let value;\r\n        /*if (this.$graphModel) {\r\n            $graphModel = this.$graphModel;\r\n            value = this.$graphModel.getValue(this.lastProperty);\r\n        } else {\r\n            $graphModel = this;\r\n            if (this.$view) {\r\n                value = this.$view[this.lastProperty];\r\n            }\r\n        }*/\r\n        // this.$model.setValue(this.lastProperty, newVal);\r\n        // this.propertyChange(this.$graphModel,this.lastProperty, this.$graphModel.getValue(this.lastProperty), newVal);\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n// =======\r\n        // let newVal = element[this.lastProperty];\r\n        // if (this.isKeyOnly()) {\r\n        //     // we expect, element[this.lastProperty] to be boolean:\r\n        //     if (!newVal) {\r\n        //         newVal = null;\r\n        //     }\r\n        // } else {\r\n        // }\r\n        // let $graphModel;\r\n        // let value;\r\n\r\n        // $graphModel = this.getViewData();\r\n        // if (this.$graphModel) {\r\n        //     $graphModel = this.$graphModel;\r\n        //     value = this.$graphModel.getValue(this.lastProperty);\r\n        // } else {\r\n        //     $graphModel = this;\r\n        //     if (this.$view) {\r\n        //         value = this.$view[this.lastProperty];\r\n        //     }\r\n        // }\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n//            this.saveViewInData();\r\n// >>>>>>> addOldFunctions\r\n//         } else {\r\n//             console.log('value does not match the pattern...');\r\n//         }\r\n    }\r\n\r\n    public setType(type: string): void {\r\n        let oldValue: string = this.type;\r\n        if (oldValue === type) {\r\n            return;\r\n        }\r\n        if (type === 'radio') {\r\n            this.$viewData.setValue('checked', null);\r\n        } else {\r\n            this.$viewData.removeKey('checked');\r\n        }\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\n\r\nexport class Label extends Control {\r\n    public load(data: JSON): any {\r\n        this.createControl(this.$owner, data);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('label');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr === 'textContent') {\r\n                this.$view.textContent = data['textContent'];\r\n            } else {\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Method extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.updateType(data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.updateType(data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.updateType(data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n            // e.g. setName() : string or name:string\r\n            let dataSplitted = data.split(':');\r\n\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }\r\n                else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType(dataSplitted[1].trim() || 'void');\r\n            }\r\n            // set default return type of void\r\n            else {\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = data.trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }  else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType('void');\r\n            }\r\n        }\r\n\r\n        if (Util.includes(this.$data.getValue('name'), '(') && !Util.includes(this.$data.getValue('name'), ')') === false) {\r\n            this.$data.setValue('name', this.$data.getValue('name') + '()');\r\n        }\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\nimport {Association} from '../edges';\r\nimport { GraphModel } from '..';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\n\r\nexport class Node extends DiagramElement {\r\n    public $edges: Association[] = [];\r\n    public $minWidth: number = 150;\r\n    public $minheight: number = 25;\r\n    public $defaulEdgeType: string;\r\n\r\n    constructor(data: JSON|string|Object|any) {\r\n        super();\r\n\r\n        // default size\r\n        this.withSize(this.$minWidth, this.$minheight);\r\n\r\n        if (data) {\r\n            if (data['x'] && data['y']) {\r\n                this.withPos(data['x'], data['y']);\r\n            }\r\n            if (data['width'] || data['height']) {\r\n                this.withSize(data['width'], data['height']);\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos = this.getPos();\r\n        const size = this.getSize();\r\n\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x - size.x / 2,\r\n            y: pos.y - size.y / 2,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y,\r\n            width: size.x,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        const shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'middle',\r\n            'font-family': 'Verdana',\r\n            'font-size': '14',\r\n            fill: 'black'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = this.id;\r\n\r\n        let group = this.createShape({tag: 'g', id: this.id});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public copy(): Node {\r\n        let copy: Node;\r\n        // create new id\r\n        let model = <GraphModel>this.$owner || <GraphModel>this.getRoot();\r\n        if (model) {\r\n            let type = this.property || Node.name;\r\n            let newId = model.getNewId(type);\r\n            copy = <Node>model.createElement(type, newId, null);\r\n            copy.withSize(this.getSize().x, this.getSize().y);\r\n            copy.$owner = model;\r\n        } else {\r\n            copy.id = this.id + '-copy';\r\n            copy.$owner = this.getRoot();\r\n        }\r\n        return copy;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n// EMPTY\r\n    }\r\n    public addAttribute(value: string): Attribute {\r\n        return null;\r\n    }\r\n    public getAttributes(): Attribute[] {\r\n        return null;\r\n    }\r\n    public addMethod(value: string): Method {\r\n        return null;\r\n    }\r\n    public updateLabel(newLabel: string): void {\r\n// EMPTY\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\n\r\nexport class SO extends DiagramElement {\r\n    public static create(element: Object) {\r\n        let result: SO = new SO();\r\n        for (let key in element) {\r\n            if (element.hasOwnProperty(key) === false) {\r\n                continue;\r\n            }\r\n            result.withKeyValue(key, element[key]);\r\n\r\n        }\r\n        return result;\r\n    }\r\n\r\n    public withKeyValue(key: string, value: any): SO {\r\n        if (key === 'typ') {\r\n            this.property = value;\r\n        } else if (key === 'x') {\r\n            this.withPos(value, null);\r\n        } else if (key === 'y') {\r\n            this.withPos(null, value);\r\n        } else if (key === 'width') {\r\n            this.withSize(value, null);\r\n        } else if (key === 'height') {\r\n            this.withSize(null, value);\r\n        } else {\r\n            this[key] = value;\r\n        }\r\n        return this;\r\n    }\r\n}\r\n","import {Point} from '../BaseElements';\r\nimport {Node} from './Node';\r\n\r\nexport class StereoType extends Node {\r\n\r\n    protected stereoType: string;\r\n\r\n    constructor (type: string, x: number, y: number) {\r\n        super('');\r\n        this.withPos(x, y);\r\n        this.setStereoType(type);\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        let pos: Point = this.getPos();\r\n        let size: Point = this.getSize();\r\n\r\n               // = = = STEREOTYPE = = =\r\n        let stereoType = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y - this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': 10,\r\n            'font-weight': 'bold',\r\n            fill: 'black'\r\n        });\r\n        stereoType.textContent = this.stereoType;\r\n\r\n        this.$view = stereoType;\r\n        return stereoType;\r\n    }\r\n\r\n    public setStereoType(value: string): void {\r\n        this.stereoType = '<<' + value + '>>';\r\n    }\r\n\r\n    public getStereoType(): string {\r\n        return this.stereoType;\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { SO } from './SO';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport { Util } from '../../util';\r\n\r\nexport class Symbol extends Node {\r\n    public $heightMax: number = 0;\r\n    public $heightMin: number = 0;\r\n\r\n    constructor(typ: string) {\r\n        super(typ);\r\n    }\r\n\r\n    public draw(typ?: string): SVGElement {\r\n        return SymbolLibary.draw(this);\r\n    }\r\n}\r\n\r\n// \t\t\t\t###################################################### SymbolLibary ####################################################################################\r\n// Example Items\r\n// {tag: 'path', d: ''}\r\n// {tag: 'rect', width:46, height:34}\r\n// {tag: 'ellipse', width:23, height:4}\r\n// {tag: 'line', x1:650, y1:-286, x2:650, y2:-252}\r\n// {tag: 'circle', r:5, x:12, y:0}\r\n// {tag: 'image', height: 30, width: 50, content$src: hallo}\r\n// {tag: 'text', 'text-anchor': 'left', x: '10'}\r\nexport class SymbolLibary {\r\n\r\n    public static drawSVG(node: any): SVGSVGElement {\r\n        // const lib = new SymbolLibary();\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            const parent = SO.create(node);\r\n            parent['property'] = 'SVG';\r\n            symbol = fn(parent);\r\n            // symbol = fn.apply(lib, parent);\r\n\r\n            return SymbolLibary.createGroup(parent, symbol);\r\n        }\r\n        return symbol;\r\n    }\r\n\r\n    public static draw(node: any, parent?: Object): SVGElement {\r\n        // Node is Symbol or simple Object\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            if (!(node instanceof DiagramElement)) {\r\n                node = SO.create(node);\r\n                if (!node.property) {\r\n                    node.property = 'SVG';\r\n                }\r\n            }\r\n            symbol = fn.apply(this, [node]);\r\n            if (!parent) {\r\n                return SymbolLibary.createGroup(node, symbol);\r\n            }\r\n            return SymbolLibary.createGroup(node, symbol);\r\n        } else if (node.property) {\r\n            symbol = new Symbol(node.property);\r\n            symbol.init(node);\r\n            let pos = node.getPos();\r\n            let size = node.getSize();\r\n            symbol.withPos(pos.x, pos.y);\r\n            symbol.withSize(size.x, size.y);\r\n            symbol['value'] = node['value'];\r\n            parent = node['$parent'];\r\n            return SymbolLibary.draw(symbol, parent);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public static upFirstChar(txt: string): string {\r\n        return txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase();\r\n    }\r\n\r\n    public static isSymbolName(typ: string): boolean {\r\n        let fn = SymbolLibary['draw' + SymbolLibary.upFirstChar(typ)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static isSymbol(node: Symbol) {\r\n        let fn = SymbolLibary[SymbolLibary.getName(node)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static getName(node: any): string {\r\n        if (node['type']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['type']);\r\n        }\r\n        if (node.property) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node.property);\r\n        }\r\n        if (node['src']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['src']);\r\n        }\r\n        return 'drawNode';\r\n    }\r\n\r\n    /*FIXME   public static createImage(node: Symbol, $graphModel:Node) {\r\n           let n, img: HTMLElement;\r\n           // node.$graphModel = node;\r\n           if (SymbolLibary.isSymbol(node)) {\r\n               return SymbolLibary.draw(null, node);\r\n           }\r\n           n = {tag: 'img', $graphModel: node, src: node['src']};\r\n           let size = node.getSize();\r\n           if (size.isEmpty() === false) {\r\n               n['width'] = size.x;\r\n               n['height'] = size.y;\r\n           } else {\r\n               n['xmlns'] = 'http://www.w3.org/1999/xhtml';\r\n           }\r\n           img = Util.create(n);\r\n           if (size.isEmpty()) {\r\n               $graphModel.appendImage(img);\r\n               return null;\r\n           }\r\n           return img;\r\n       }*/\r\n\r\n    public static createGroup(node: DiagramElement, group: any) {\r\n        let func, y: number, z: number, box, item: Element, transform, i, offsetX = 0, offsetY = 0;\r\n        let svg: any;\r\n        if (node.property.toUpperCase() === 'HTML') {\r\n            let so = {\r\n                tag: 'svg',\r\n                style: { left: (group.x | 0) + node.getPos().x, top: (group.y | 0) + node.getPos().y, position: 'absolute' }\r\n            };\r\n            if (node['transform']) {\r\n                so['transform'] = node['transform'];\r\n            }\r\n            svg = Util.create(so);\r\n        } else {\r\n            svg = Util.create({ tag: 'g' });\r\n            transform = 'translate(' + group.getPos().x + ' ' + group.getPos().y + ')';\r\n            if (group.scale) {\r\n                transform += ' scale(' + group.scale + ')';\r\n            }\r\n            if (group.rotate) {\r\n                transform += ' rotate(' + group.rotate + ')';\r\n            }\r\n            svg.setAttribute('transform', transform);\r\n            if (group['id']) {\r\n                svg.id = group['id'];\r\n            }\r\n        }\r\n\r\n        if (node['tooltip']) {\r\n            const tooltipTitleAttr = {\r\n                tag: 'title'\r\n            };\r\n            let tooltipTitle = Util.createShape(tooltipTitleAttr);\r\n            tooltipTitle.textContent = node['tooltip'];\r\n            svg.appendChild(tooltipTitle);\r\n        }\r\n\r\n        if (node['background']) {\r\n            const attrCircle = {\r\n                tag: 'circle',\r\n                cx: 20,\r\n                cy: 20,\r\n                r: 17,\r\n                stroke: '#888',\r\n                'stroke-width': 0,\r\n                fill: '#DDD'\r\n            };\r\n            svg.appendChild(Util.create(attrCircle));\r\n        }\r\n\r\n        for (i = 0; i < group.items.length; i += 1) {\r\n            svg.appendChild(Util.create(group.items[i]));\r\n        }\r\n        let elements = node['elements'];\r\n        Util.setSize(svg, group.width + node.getSize().x, group.height + node.getSize().y);\r\n        node['$heightMin'] = node.getSize().y;\r\n        if (elements) {\r\n            for (i = 0; i < elements.length; i += 1) {\r\n                if (!elements[i] && elements[i].length < 1) {\r\n                    elements.splice(i, 1);\r\n                    i -= 1;\r\n                }\r\n            }\r\n            box = Util.create({ tag: 'g' });\r\n            // Calculate new Height\r\n            let c: number;\r\n            z = 0;\r\n            for (c = 0; c < elements.length; c += 1) {\r\n                if (typeof elements[c] === 'string') {\r\n                    z += 1;\r\n                } else {\r\n                    z += elements[c].length;\r\n                }\r\n            }\r\n            z = z * 25 + 6;\r\n            box.appendChild(Util.create({\r\n                tag: 'rect',\r\n                rx: 0,\r\n                x: offsetX,\r\n                y: (offsetY + 28),\r\n                width: 70,\r\n                height: z,\r\n                stroke: '#000',\r\n                fill: '#fff',\r\n                opacity: '0.7'\r\n            }));\r\n            node['$heightMax'] = z + node['$heightMin'];\r\n\r\n            svg['elements'] = elements;\r\n            if (node['type'] === 'DropDown') {\r\n                svg['activ'] = Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': 60,\r\n                    'x': (10 + offsetX),\r\n                    'y': 20,\r\n                    value: node['activText']\r\n                });\r\n                svg.appendChild(svg.activ);\r\n            }\r\n\r\n            y = offsetY + 46;\r\n            // 46 -28 = 18\r\n\r\n            func = function (event: Event) {\r\n                if (svg.activ) {\r\n                    svg.activ.textContent = (<any>event.currentTarget).value;\r\n                }\r\n            };\r\n            let txt: string;\r\n            let textClass = 'SVGTEXT';\r\n            for (z = 0; z < elements.length; z += 1) {\r\n                if (typeof elements[z] === 'string') {\r\n                    txt = elements[z];\r\n                } else {\r\n                    item = this.addText(y, offsetX, box, elements[z][0], 'SVGTEXT');\r\n                    y += 26;\r\n                    for (c = 1; c < elements[z].length; c += 1) {\r\n                        item = this.addText(y, offsetX, box, '* ' + elements[z][c], 'SVGTEXTITEM');\r\n\r\n                        item['value'] = elements[z];\r\n                        if (node['action']) {\r\n                            item['onclick'] = node['action'];\r\n                        } else {\r\n                            item['onclick'] = func;\r\n                        }\r\n                        y += 26;\r\n                    }\r\n                    txt = elements[z];\r\n                    let subBox = Util.create({\r\n                        tag: 'rect',\r\n                        rx: 0,\r\n                        x: offsetX,\r\n                        y: (offsetY + 28),\r\n                        width: 60,\r\n                        height: z,\r\n                        stroke: '#000',\r\n                        fill: '#fff',\r\n                        opacity: '0.7'\r\n                    });\r\n                    continue;\r\n                }\r\n                // let txt = elements[z];\r\n                item = this.addText(y, offsetX, box, txt, textClass);\r\n\r\n                item['value'] = elements[z];\r\n                if (node['action']) {\r\n                    item['onclick'] = node['action'];\r\n                } else {\r\n                    item['onclick'] = func;\r\n                }\r\n                y += 26;\r\n            }\r\n            svg.choicebox = box;\r\n        }\r\n        svg.tool = node;\r\n        svg.onclick = function () {\r\n            if (svg.status === 'close') {\r\n                svg.open();\r\n            } else {\r\n                svg.close();\r\n            }\r\n        };\r\n        svg.close = function () {\r\n            if (svg.status === 'open' && svg.choicebox) {\r\n                this.removeChild(svg.choicebox);\r\n            }\r\n            svg.status = 'close';\r\n            svg.tool.$size.height = svg.tool.heightMin;\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x, g.tool.height + g.tool.y);\r\n            Util.setSize(svg, svg.tool.$size.x, svg.tool.$size.y);\r\n        };\r\n        svg.open = function () {\r\n            if (this.tagName === 'svg') {\r\n                return;\r\n            }\r\n            if (svg.status === 'close' && svg.choicebox) {\r\n                this.appendChild(svg.choicebox);\r\n            }\r\n            svg.status = 'open';\r\n            svg.tool.$size.height = svg.tool.heightMax;\r\n            Util.setSize(svg, svg.tool.width, svg.tool.height);\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x + 10, g.tool.height + g.tool.y + 10);\r\n        };\r\n        svg.close();\r\n        return svg;\r\n    }\r\n\r\n    public static addChild(parent: SVGElement, json: JSON | Element): void {\r\n        let item: Element;\r\n        if ((<any>json).offsetLeft) {\r\n            item = <Element>json;\r\n        } else {\r\n            item = Util.create(json);\r\n        }\r\n        item.setAttribute('class', 'draggable');\r\n        parent.appendChild(item);\r\n    }\r\n\r\n    public static all(node: any): void {\r\n        SymbolLibary.drawSmiley(node);\r\n        SymbolLibary.drawDatabase(node);\r\n        SymbolLibary.drawLetter(node);\r\n        SymbolLibary.drawMobilephone(node);\r\n        SymbolLibary.drawWall(node);\r\n        SymbolLibary.drawActor(node);\r\n        SymbolLibary.drawLamp(node);\r\n        SymbolLibary.drawArrow(node);\r\n        SymbolLibary.drawButton(node);\r\n        SymbolLibary.drawDropdown(node);\r\n        SymbolLibary.drawClassicon(node);\r\n        SymbolLibary.drawClassWithEdgeicon(node);\r\n    }\r\n\r\n    public static drawHamburger(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'circle', r: 10, fill: '#ccc', cx: 12, cy: 12, 'stroke-width': 1, stroke: 'black'},\r\n                { tag: 'path', d: 'M 8,7 H 16 M 8,12 H 16 M 8,17 H 16', stroke: 'black', fill: 'none' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawSmiley(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'path', d: 'm49.01774,25.64542a24.5001,24.5 0 1 1 -49.0001,0a24.5001,24.5 0 1 1 49.0001,0z', stroke: 'black', fill: 'none' }, { tag: 'path', d: 'm8,31.5c16,20 32,0.3 32,0.3' },\r\n                { tag: 'path', d: 'm19.15,20.32a1.74,2.52 0 1 1 -3.49,0a1.74,2.52 0 1 1 3.49,0z' },\r\n                { tag: 'path', d: 'm33,20.32a1.74,2.52 0 1 1 -3.48,0a1.74,2.52 0 1 1 3.48,0z' },\r\n                { tag: 'path', d: 'm5.57,31.65c3.39,0.91 4.03,-2.20 4.03,-2.20' },\r\n                { tag: 'path', d: 'm43,32c-3,0.91 -4,-2.20 -4.04,-2.20' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDatabase(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 40,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,-6.26 25.03,-6.26 25.03,0l0,25.82c0,6.26 -25.03,6.26 -25.03,0l0,-25.82z',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLetter(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 17,\r\n            items: [\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1,1l22,0l0,14l-22,0l0,-14z' },\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1.06,1.14l10.94,6.81l10.91,-6.91' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMobilephone(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 4.2 0.5 15.61 0c 2 0 3.7 1.65 3.7 3.7l 0 41.6c 0 2-1.65 3.7-3.7 3.7l-15.6 0c-2 0-3.7-1.6-3.7-3.7l 0-41.6c 0-2 1.6-3.7 3.7-3.7z',\r\n                    fill: 'none',\r\n                    stroke: 'black'\r\n                },\r\n                { tag: 'path', d: 'm 12.5 2.73a 0.5 0.5 0 1 1-1 0 0.5 0.5 0 1 1 1 0z' },\r\n                { tag: 'path', d: 'm 14 46a 2 2 0 1 1-4 0 2 2 0 1 1 4 0z' },\r\n                { tag: 'path', d: 'm 8 5 7 0' },\r\n                { tag: 'path', d: 'm 1.63 7.54 20.73 0 0 34-20.73 0z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawWall(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'path', d: 'm26,45.44l-5,3.56l-21,-9l0,-36.41l5,-3.56l20.96,9l-0,36.4z' },\r\n                {\r\n                    tag: 'path',\r\n                    stroke: 'white',\r\n                    d: 'm2.21,11l18.34,7.91m-14.46,-12.57l0,6.3m8.2,21.74l0,6.35m-8.6,-10l0,6.351m4.1,-10.67l0,6.3m4.8,-10.2l0,6.3m-8.87,-10.23l0,6.35m4.78,-10.22l0,6.35m-8,14.5l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m0,-13l0,34m-18.23,-41.84l18.3,8m0,0.11l5,-3.57'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawActor(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'line', stroke: '#000', x1: '12', y1: '10', x2: '12', y2: '30' },\r\n                { tag: 'circle', stroke: '#000', cy: '5', cx: '12', r: '5' },\r\n                { tag: 'line', stroke: '#000', y2: '18', x2: '25', y1: '18', x1: '0' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '5', y1: '30', x1: '12' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '20', y1: '30', x1: '12' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLamp(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 22.47 10.58c-6.57 0-11.89 5.17-11.89 11.54 0 2.35 0.74 4.54 2 6.36 2 4 4.36 5.63 4.42 10.4l 11.15 0c 0.12-4.9 2.5-6.8 4.43-10.4 1.39-1.5 1.8-4.5 1.8-6.4 0-6.4-5.3-11.5-11.9-11.5z',\r\n                    fill: 'white',\r\n                    stroke: 'black'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 40 8 0c 0.58 0 1 0.5 1 1 0 0.6-0.5 1-1 1l-8 0c-0.6 0-1-0.47-1-1 0-0.58 0.47-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 42.7 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 45.3 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                { tag: 'path', d: 'm 19.5 48c 0.37 0.8 1 1.3 1.9 1.7 0.6 0.3 1.5 0.3 2 0 0.8-0.3 1.4-0.8 1.9-1.8z' },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 6 37.5 4.2-4c 0.3-0.3 0.8-0.3 1 0 0.3 0.3 0.3 0.8 0 1.1l-4.2 4c-0.3 0.3-0.8 0.3-1.1 0-0.3-0.3-0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 39 37.56-4.15-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 38 23 5.8 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.8 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 1.3 23 6 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.9 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 34.75 11.2 4-4.1c 0.3-0.3 0.3-0.8 0-1-0.3-0.3-0.8-0.3-1 0l-4 4.1c-0.3 0.3-0.3 0.8 0 1 0.3 0.3 0.8 0.3 1 0z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 11.23 10-4-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 21.64 1.3 0 5.8c 0 0.4 0.3 0.8 0.8 0.8 0.4 0 0.8-0.3 0.8-0.8l 0-5.8c 0-0.4-0.3-0.8-0.8-0.8-0.4 0-0.8 0.3-0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 26.1 24.3c-0.5 0-1 0.2-1.3 0.4-1.1 0.6-2 3-2.27 3.5-0.26-0.69-1.14-2.9-2.2-3.5-0.7-0.4-2-0.7-2.5 0-0.6 0.8 0.2 2.2 0.9 2.9 1 0.9 3.9 0.9 3.9 0.9 0 0 0 0 0 0 0.54 0 2.8 0 3.7-0.9 0.7-0.7 1.5-2 0.9-2.9-0.2-0.3-0.7-0.4-1.2-0.4z'\r\n                },\r\n                { tag: 'path', d: 'm 22.5 28.57 0 10.7' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawStop(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 30,\r\n            height: 30,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: '#FFF',\r\n                    'stroke-width': '2',\r\n                    stroke: '#B00',\r\n                    d: 'm 6,6 a 14,14 0 1 0 0.06,-0.06 z m 0,0 20,21'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMin(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    d: 'm 0,0 19,0 0,19 -19,0 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 13,-0.04'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawArrow(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 10,\r\n            height: 9,\r\n            rotate: node['rotate'],\r\n            items: [\r\n                { tag: 'path', fill: '#000', stroke: '#000', d: 'M 0,0 10,4 0,9 z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMax(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    'stroke-dashoffset': 2,\r\n                    'stroke-dasharray': '4.8,4.8',\r\n                    d: 'm 0,0 4.91187,0 5.44643,0 9.11886,0 0,19.47716 -19.47716,0 0,-15.88809 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 6,0.006 0.02,5 0.01,-11 -0.03,6.02 c 2,-0.01 4,-0.002 6,0.01'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawButton(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight, btnValue;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        btnValue = node['value'] || '';\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: 60,\r\n            height: 28,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 8,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    filter: 'url(#drop-shadow)',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                { tag: 'text', $font: true, x: 10, y: 18, fill: 'black', value: btnValue, 'class': 'hand' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDropdown(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 0,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth - 20,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 2,\r\n                    x: btnWidth - 20,\r\n                    y: 0,\r\n                    width: 20,\r\n                    height: 28,\r\n                    stroke: '#000',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    style: 'fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1',\r\n                    d: 'm ' + (btnWidth - 15) + ',13 10,0 L ' + (btnWidth - 10) + ',20 z'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassicon(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.19999l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm25.68807,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.2l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                { tag: 'line', x1: 11, y1: 7, x2: 25, y2: 7, stroke: '#000' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassWithEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M2,10 20,10 20,35 2,35 Z M2,17 20,17 M20,10 28,5 28,9 M 28.5,4.7 24,4',\r\n                    style: 'fill:none;stroke:#000000;transform:scale(0.8);'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClass(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: '100%',\r\n            height: '100%',\r\n            items: [\r\n                { tag: 'rect', width: 50, height: 40, x: 0, y: 0, 'stroke-width': 2, stroke: 'black', fill: 'none'},\r\n                { tag: 'rect', width: 50, height: 12, x: 0, y: 18, 'stroke-width': 1, stroke: 'black', fill: 'none'},\r\n                { tag: 'text', x: 27, y: 14, 'text-anchor': 'middle', 'font-size': 11, value: 'Class'},\r\n                { tag: 'text', x: 5, y: 24, 'font-size': 5, value: '+ field: type'},\r\n                { tag: 'text', x: 5, y: 36, 'font-size': 5, value: '+ method(type)'}\r\n            ]\r\n        });\r\n    }\r\n/*\r\n<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n    <g>\r\n    <text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text>\r\n        <text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>\r\n*/\r\n\r\n    public static drawEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M10,30 30,10 M19,10 30,10 30,21',\r\n                    style: 'fill:none;stroke:#555;stroke-width:2;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawCopynode(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M5 5 L15 5 L15 20 L5 20 Z M5 10 L15 10',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M8 2 L18 2 L18 17 L8 17 Z M8 7 L18 7'\r\n                        + 'M11 4.5 L15 4.5 '\r\n                        + 'M10 10 L16 10 '\r\n                        + 'M10 13 L16 13 ',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawBasket(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M12 12 L18 12 L18 11 L22 11 L22 12 L28 12 L28 14 L27 14 L27 29 L13 29 L13 14 L12 14 Z M13 14 L27 14 M20 17 L20 26 M17 16 L17 27 M23 16 L23 27',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawPencil(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M6 20 L12 23 L33 23 L33 17 L12 17 Z M30 17 L30 23 M12 17 L12 23 M15 19 L28 19 M15 21 L28 21',\r\n                    stroke: '#000',\r\n                    'stroke-width': 1,\r\n                    fill: 'white'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    private static addText(y: number, offsetX: number, box: Element, text: string, textClass: string): Element {\r\n        let item: Element;\r\n        box.appendChild(Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'text-anchor': 'left',\r\n            width: 70,\r\n            x: 10,\r\n            y: y,\r\n            class: textClass,\r\n            value: text,\r\n            eventValue: text\r\n        }));\r\n        if (textClass === 'SVGTEXT') {\r\n            textClass = 'SVGChoiceText';\r\n        } else {\r\n            textClass = 'SVGChoice';\r\n        }\r\n\r\n        item = Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            x: offsetX,\r\n            y: y - 18,\r\n            width: 70,\r\n            height: 24,\r\n            stroke: 'none',\r\n            class: textClass,\r\n        });\r\n        item['eventValue'] = text;\r\n        box.appendChild(item);\r\n        return item;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n}\r\n","import {Control} from '../../Control';\r\nimport BridgeElement from '../../BridgeElement';\r\nimport Data from '../../Data';\r\nimport {Util} from '../../util';\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Table extends Control {\r\n    protected items: BridgeElement[] = [];\r\n    private columns: Column[] = [];\r\n    private cells: Object = {};\r\n    private $bodysection: HTMLTableSectionElement;\r\n    private $headersection: HTMLTableSectionElement;\r\n    private showedItems: Array<BridgeElement> = [];\r\n    // BridgeElements:\r\n    private itemsIds: Object = {};\r\n    private countElement: HTMLElement;\r\n    private countColumn: HTMLElement;\r\n    private countColumnPos: number;\r\n    private resultColumn: string;\r\n    private lastSearchText: string;\r\n    private searchColumns: Array<string> = [];\r\n    private searchText: Array<string> = [];\r\n    private sortColumn: Column;\r\n    private direction: number;\r\n    private moveElement: Column = null;\r\n    private isDrag: boolean = false;\r\n    private moveTimeStamp: number;\r\n    private moveX: number;\r\n    private movePos: number;\r\n    private dragColumn: Column;\r\n    private dragPos: number;\r\n    private tableOption: HTMLTableHeaderCellElement;\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    private static indexOfChild(item: BridgeElement) {\r\n        let i: number = 0;\r\n        let child: Node = item.gui;\r\n        while ((child = child.previousSibling) !== null) {\r\n            i++;\r\n        }\r\n        return i;\r\n    }\r\n\r\n    public load(data: any): void {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n            if (data.property) {\r\n                this.property = data.property;\r\n            }\r\n\r\n            if (data.searchColumns) {\r\n                let search: Array<string> = [];\r\n                if (typeof(data.searchColumns) === 'string') {\r\n                    search = data.searchColumns.split(' ');\r\n                } else {\r\n                    search = data.searchColumns;\r\n                }\r\n                for (let z: number = 0; z < search.length; z++) {\r\n                    let item = search[z].trim();\r\n                    if (item.length > 0) {\r\n                        if (this.searchColumns.indexOf(item) < 0) {\r\n                            this.searchColumns.push(item);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        if (this.$view) {\r\n            // Must be an Update\r\n            if (data['columns']) {\r\n                // It is a json must add all things and generate HTML\r\n                for (let i in data['columns']) {\r\n                    if (data['columns'].hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    let col = this.parseData(data['columns'][i]);\r\n                    this.addHeaderInfo(col);\r\n                    this.columns.push(col);\r\n                    this.tableOption.parentElement.insertBefore(col.$element, this.tableOption);\r\n                }\r\n                for (let i in this.showedItems) {\r\n                    let item: BridgeElement = this.showedItems[i];\r\n                    let cell;\r\n                    // Now Add some Children\r\n                    while (item.gui.children.length < this.columns.length) {\r\n                        cell = document.createElement('td');\r\n                        item.gui.appendChild(cell);\r\n                    }\r\n                    // Now Remove Some Children\r\n                    while (item.gui.children.length > this.columns.length) {\r\n                        item.gui.removeChild(item.gui.children[item.gui.children.length - 1]);\r\n                    }\r\n                    for (let c: number = 0; c < this.columns.length; c++) {\r\n                        let name = this.columns[c].attribute;\r\n                        // let count = this.columns.length;\r\n                        cell = item.gui.children[c];\r\n                        cell.innerHTML = item.model.getValue(name);\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n\r\n        this.$view = document.getElementById(id);\r\n        let headerrow: HTMLTableRowElement;\r\n        if (this.$view) {\r\n            if (!this.property) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('table');\r\n            this.$owner.appendChild(this);\r\n        }\r\n        if (!this.$bodysection) {\r\n            // add tbody element if missing\r\n            this.$bodysection = document.createElement('tbody');\r\n            this.$view.appendChild(this.$bodysection);\r\n        }\r\n        if (data['classname']) {\r\n            this.$view.className = data['classname'];\r\n        } else {\r\n            this.$view.className = 'mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp';\r\n        }\r\n\r\n        this.id = id;\r\n        this.$view.id = id;\r\n        this.$view.setAttribute('type', this.constructor['name'].toLowerCase());\r\n        let counter = 0;\r\n        for (let c = 0; c < this.$view.children.length; c++) {\r\n            let row: HTMLTableRowElement = <HTMLTableRowElement>this.$view.children[c];\r\n            if (row instanceof HTMLTableSectionElement) {\r\n                if (row.tagName === 'THEAD') {\r\n                    headerrow = row;\r\n                    // Its a thead\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingHeader(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                } else {\r\n                    // Its a tbody\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingData(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                }\r\n            } else {\r\n                // fallback, if there are no thead and tbody...\r\n                if (counter === 0) {\r\n                    headerrow = row;\r\n                    this.parsingHeader(row);\r\n                } else {\r\n                    this.parsingData(row);\r\n                }\r\n            }\r\n            counter++;\r\n        }\r\n        if (!headerrow || !this.$headersection) {\r\n            if (!this.$headersection) {\r\n                // find eventually existing thead\r\n                let header = this.$view.getElementsByTagName('thead');\r\n                if (header.length === 0) {\r\n                    this.$headersection = document.createElement('thead');\r\n                    this.$view.appendChild(this.$headersection);\r\n                } else {\r\n                    // take first thead element\r\n                    this.$headersection = <HTMLTableSectionElement>header.item(0);\r\n                }\r\n            }\r\n            if (!headerrow) {\r\n                headerrow = document.createElement('tr');\r\n                this.$headersection.appendChild(headerrow);\r\n            }\r\n        }\r\n\r\n        if (data['columns']) {\r\n            // It is a json must add all things and generate HTML\r\n            for (let i in data['columns']) {\r\n                if (data['columns'].hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                let col = this.parseData(data['columns'][i]);\r\n                this.addHeaderInfo(col);\r\n                this.columns.push(col);\r\n                headerrow.appendChild(col.$element);\r\n            }\r\n            this.tableOption = document.createElement('th');\r\n            this.tableOption.classList.add('tableOption');\r\n            headerrow.appendChild(this.tableOption);\r\n            let context: HTMLElement = this.addOptionItem(null, this.tableOption, true);\r\n            let contentChild: HTMLElement = this.addOptionItem('show', context, true);\r\n            // let simpleLink: HTMLElement = this.addOptionItem('show', contentChild, false);\r\n            this.addOptionItem('show', contentChild, false);\r\n        }\r\n        this.registerEvents(['mousemove', 'mousedown', 'mouseup', 'resize', 'dragstart', 'dragover', 'drop', 'dragend']);\r\n\r\n        // Check for SearchBar\r\n        // if(data[\"searchproperty\"]){\r\n        // Create Full Row\r\n        let searchBar = document.createElement('tr');\r\n        let cell = document.createElement('td');\r\n        cell.setAttribute('colspan', '' + (this.columns.length));\r\n        searchBar.appendChild(cell);\r\n\r\n        let search = document.createElement('input');\r\n        search.className = 'search';\r\n        let that = this;\r\n        search.addEventListener('keyup', function (evt) {\r\n            that.search(evt.target['value']);\r\n        });\r\n\r\n        cell.appendChild(search);\r\n        if (this.resultColumn) {\r\n            if (this.resultColumn.indexOf('#') !== 0) {\r\n                this.countElement = document.createElement('div');\r\n                searchBar.appendChild(this.countElement);\r\n            } else {\r\n                for (let z: number = 0; z < this.$headersection.children.length; z++) {\r\n                    if (this.$headersection.children[z].innerHTML === this.resultColumn) {\r\n                        this.countColumn = <HTMLElement> this.$headersection.children[z];\r\n                        this.countColumnPos = z;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        let first = this.$headersection.children.item(0);\r\n        this.$headersection.insertBefore(searchBar, first);\r\n\r\n        this.updateElement(this.property, null);\r\n\r\n        // now update those elements, that were not loaded currently\r\n    }\r\n\r\n    public tableEvent(type: string, e: Event) {\r\n        let button: number = 0;\r\n        let eventX: number = 0;\r\n        if (e instanceof MouseEvent) {\r\n            button = e.buttons;\r\n            eventX = e.pageX;\r\n        }\r\n        if (type === 'mouseup') {\r\n            this.moveElement = null;\r\n        } else if (type === 'mousedown' || type === 'resize') {\r\n            // End to Resize\r\n            this.moveElement = null;\r\n            if (button === 1) {\r\n                let c: number;\r\n                for (c = 0; c < this.columns.length; c++) {\r\n                    if (this.columns[c].$resize === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = false;\r\n                        break;\r\n                    } else if (this.columns[c].$element === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = true;\r\n                    }\r\n                }\r\n                this.moveTimeStamp = e.timeStamp;\r\n                this.moveX = eventX;\r\n            } else {\r\n                this.moveTimeStamp = 0;\r\n            }\r\n        } else if (type === 'mousemove') {\r\n            if (button === 1 && this.moveElement) {\r\n                if (this.moveTimeStamp && e.timeStamp - this.moveTimeStamp < 2000) {\r\n                    if (this.isDrag) {\r\n                        // FIXME\r\n                    } else {\r\n                        let x = eventX - this.moveX;\r\n                        let width = this.moveElement.$element.offsetWidth;\r\n                        this.moveElement.$element.width = '' + (width + x);\r\n                        e.stopPropagation();\r\n                    }\r\n                }\r\n                this.moveX = eventX;\r\n                this.moveTimeStamp = e.timeStamp;\r\n            }\r\n        } else if (this.isDrag) {\r\n            this.columnDragEvent(type, <DragEvent> e);\r\n        }\r\n    }\r\n\r\n    public parsingHeader(row: HTMLTableRowElement) {\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let column: HTMLTableHeaderCellElement = <HTMLTableHeaderCellElement>row.children[i];\r\n            let id = column.innerHTML.trim();\r\n            let col: Column = null;\r\n            for (let c in this.columns) {\r\n                if (this.columns.hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                if (this.columns[c].label === id) {\r\n                    col = this.columns[c];\r\n                    col.$element = column;\r\n                    break;\r\n                }\r\n            }\r\n            if (col === null) {\r\n                col = new Column();\r\n                col.label = id;\r\n                col.attribute = column.getAttribute('attribute');\r\n                col.$element = column;\r\n                this.columns.push(col);\r\n            }\r\n            this.addHeaderInfo(col);\r\n        }\r\n    }\r\n\r\n    public parsingData(row: HTMLTableRowElement) {\r\n        let id = row.getAttribute('id');\r\n        let item: Data = this.$owner.getItem(id);\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let cell: HTMLTableCellElement = <HTMLTableCellElement>row.children[i];\r\n            let colAttribute = this.columns[i].attribute;\r\n            if (colAttribute.indexOf('\\.') < 0) {\r\n                item[colAttribute] = cell.innerHTML.trim();\r\n            }\r\n        }\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: Object, newValue: Object) {\r\n        if (entity) {\r\n            // Check for Show\r\n            if (this.property && !entity.hasProperty(property)) {\r\n                return;\r\n            }\r\n        }\r\n        if (entity.id === undefined) {\r\n            return;\r\n        }\r\n        let item: BridgeElement = <BridgeElement>this.itemsIds[entity.id];\r\n        let row: HTMLTableRowElement;\r\n        if (!item) {\r\n            item = new BridgeElement(entity);\r\n            this.items.push(item);\r\n            this.itemsIds[entity.id] = item;\r\n        }\r\n        row = this.cells[entity.id];\r\n        if (row) {\r\n            item.gui = row;\r\n        }\r\n        if (this.searching(item) === false) {\r\n            return;\r\n        }\r\n        let cell;\r\n        let showItem = false;\r\n\r\n        if (!row) {\r\n            showItem = true;\r\n            row = document.createElement('tr');\r\n            let count = this.columns.length;\r\n            for (let i = 0; i < count; i++) {\r\n                cell = document.createElement('td');\r\n                row.appendChild(cell);\r\n            }\r\n            this.cells[entity.id] = row;\r\n            item.gui = row;\r\n        }\r\n        for (let c: number = 0; c < this.columns.length; c++) {\r\n            let name = this.columns[c].attribute;\r\n            if (name === property) {\r\n                cell = row.children[c];\r\n                cell.innerHTML = <string>newValue;\r\n            }\r\n        }\r\n        if (showItem) {\r\n            this.showItem(item, true);\r\n        }\r\n        // super.propertyChange(entity, property, newValue, oldValue);\r\n    }\r\n\r\n    public sort(column: Column) {\r\n        if (this.sortColumn === column) {\r\n            if (this.direction === 1) {\r\n                this.direction = -1;\r\n                column.$element.classList.remove('asc');\r\n                column.$element.classList.add('desc');\r\n            } else {\r\n                this.direction = 1;\r\n                column.$element.classList.remove('desc');\r\n                column.$element.classList.add('asc');\r\n            }\r\n        } else {\r\n            if (this.sortColumn !== null) {\r\n                this.sortColumn.$element.classList.remove('desc');\r\n                this.sortColumn.$element.classList.remove('asc');\r\n            }\r\n            this.sortColumn = column;\r\n            this.sortColumn.$element.classList.add('asc');\r\n            this.direction = 1;\r\n        }\r\n        let that = this;\r\n        let sort = function (a: BridgeElement, b: BridgeElement) {\r\n            return that.sorting(a, b);\r\n        };\r\n        this.showedItems.sort(sort);\r\n        let len: number = this.showedItems.length;\r\n        let body = this.$bodysection;\r\n        let i = 0;\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            if (i !== Table.indexOfChild(item)) {\r\n                break;\r\n            }\r\n            i = i + 1;\r\n        }\r\n        while (body.children.length > i) {\r\n            body.removeChild(body.children.item(body.children.length - 1));\r\n        }\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            body.appendChild(item.gui);\r\n            i = i + 1;\r\n        }\r\n\r\n        //      body.removeChild(item.gui);\r\n        //      body.remove\r\n    }\r\n\r\n    public sorting(a: BridgeElement, b: BridgeElement): number {\r\n        let path: string[] = this.sortColumn.attribute.split('.');\r\n        let itemA = a.model.prop;\r\n        let itemB = b.model.prop;\r\n        let check = this.sortColumn.attribute;\r\n        for (let p = 0; p < path.length; p++) {\r\n            check = path[p];\r\n            if (itemA[check]) {\r\n                itemA = itemA[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n            if (itemB[check]) {\r\n                itemB = itemB[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n        if (itemA !== itemB) {\r\n            if (this.direction === 1) {\r\n                return (itemA < itemB) ? -1 : 1;\r\n            }\r\n            return (itemA < itemB) ? 1 : -1;\r\n\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    // Searching\r\n    public search(origSearchText: string): void {\r\n        if (!origSearchText) {\r\n            origSearchText = '';\r\n        }\r\n        let searchText: string = origSearchText.trim().toLowerCase();\r\n        if (searchText === this.lastSearchText && searchText !== '') {\r\n            return; // <==== nothing to be done\r\n        }\r\n        let oldSearch: string = this.lastSearchText;\r\n        this.lastSearchText = searchText;\r\n\r\n        this.parseSearchArray();\r\n        if (searchText !== '' && oldSearch !== null && searchText.indexOf(oldSearch) >= 0 && searchText.indexOf('|') < 0) {\r\n            this.searchArray(this.showedItems);\r\n        } else {\r\n            this.searchSet(this.items);\r\n        }\r\n        this.refreshCounter();\r\n    }\r\n\r\n    public refreshCounter() {\r\n        if (this.countColumn) {\r\n            this.countColumn.innerHTML = this.columns[this.countColumnPos].label + ' (' + this.showedItems.length + ')';\r\n        }\r\n        // var countElement = document.getElementById('talkCount');\r\n        //  if (countElement) {\r\n        //     var txt = (this.showedItems.size() > 0 && searchText.length > 0 ) ? this.options.TEXT_SEARCHLIST : this.options.TEXT_SEARCHFULLLIST;\r\n        //     countElement.innerHTML = txt.replace(\"%LEN%\", this.root['children'].length).replace(\"%COUNT%\", this.showedItems.size()).replace(\"%SEARCH%\", origSearchText);\r\n        // }\r\n        // if (this.countColumn) {\r\n        //     this.countColu1mn.innerHTML = this.countColumn[\"label\"] + \" (\" + this.showedItems.size() + \")\";\r\n        // }\r\n    }\r\n\r\n    public parseSearchArray() {\r\n        let pos: number = 0;\r\n        let split: Array<string> = [];\r\n        let quote: boolean = false;\r\n        for (let i: number = 0; i < this.lastSearchText.length; i++) {\r\n            if ((this.lastSearchText.charAt(i) === ' ') && !quote) {\r\n                let txt = this.lastSearchText.substring(pos, i).trim();\r\n                if (txt.length > 0) {\r\n                    split.push(txt);\r\n                }\r\n                pos = i + 1;\r\n            } else if (this.lastSearchText.charAt(i) === '\\\"') {\r\n                if (quote) {\r\n                    let txt = this.lastSearchText.substring(pos, i).trim();\r\n                    if (txt.length > 0) {\r\n                        split.push(txt);\r\n                    }\r\n                    pos = i + 1;\r\n                } else {\r\n                    pos = i + 1;\r\n                }\r\n                quote = !quote;\r\n            }\r\n        }\r\n        if (pos < this.lastSearchText.length) {\r\n            split.push(this.lastSearchText.substring(pos, this.lastSearchText.length).trim());\r\n        }\r\n        this.searchText = split;\r\n        return split;\r\n    }\r\n\r\n    public searchArray(root: Array<BridgeElement>) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let i: number = 0; i < root.length; i++) {\r\n            let item: BridgeElement = root[i];\r\n            this.showItem(item, this.searching(item));\r\n        }\r\n    }\r\n\r\n    public searchSet(root: BridgeElement[]) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let item of root) {\r\n            let child: BridgeElement = <BridgeElement>item;\r\n            this.showItem(child, this.searching(child));\r\n        }\r\n    }\r\n\r\n    public showItem(item: BridgeElement, visible: boolean) {\r\n        if (visible) {\r\n            this.showedItems.push(item);\r\n            this.$bodysection.appendChild(item.gui);\r\n        } else if (item.gui && item.gui.parentElement) {\r\n            this.$bodysection.removeChild(item.gui);\r\n        }\r\n    }\r\n\r\n    public searching(item: BridgeElement): boolean {\r\n        let fullText: string = '';\r\n        for (let i: number = 0; i < this.searchColumns.length; i++) {\r\n            fullText = fullText + ' ' + item.model.getValue(this.searchColumns[i]);\r\n        }\r\n        fullText = fullText.trim().toLowerCase();\r\n        for (let z: number = 0; z < this.searchText.length; z++) {\r\n            if ('' !== this.searchText[z]) {\r\n                let orSplit: Array<string>;\r\n                if (this.searchText[z].indexOf('|') > 0) {\r\n                    orSplit = this.searchText[z].split('|');\r\n                } else {\r\n                    orSplit = [this.searchText[z]];\r\n                }\r\n                let o: number = 0;\r\n                for (; o < orSplit.length; o++) {\r\n                    let pos: number = orSplit[o].indexOf(':');\r\n                    if (orSplit[o].indexOf('#') === 0 && pos > 1) {\r\n                        // if (searchProperties.contains(propString)) {\r\n                        let value: string = orSplit[o].substring(pos + 1);\r\n                        let column: string = orSplit[o].substring(1, pos - 1);\r\n                        let dataValue: Object = item.model.getValue(column);\r\n                        if (dataValue) {\r\n                            if (dataValue.toString().toLowerCase().indexOf(value) >= 0) {\r\n                                // Search for simple Property\r\n                                break;\r\n                            }\r\n                        }\r\n                    } else if (orSplit[o].length > 1 && orSplit[o].indexOf('-') === 0) {\r\n                        if (fullText.indexOf(orSplit[o].substring(1)) < 0) {\r\n                            break;\r\n                        }\r\n                    } else if (fullText.indexOf(orSplit[o]) >= 0) {\r\n                        // his search word is found in full text\r\n                        break;\r\n                    }\r\n                }\r\n                if (o === orSplit.length) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public getColumn(): Column[] {\r\n        return this.columns;\r\n    }\r\n\r\n    public updateElement(property: string, value: string): void {\r\n        // first clear all elements inside the table:\r\n        for (let item of this.items) {\r\n            if (item instanceof BridgeElement) {\r\n                (<BridgeElement>item).model.removeListener(this);\r\n            }\r\n        }\r\n\r\n        this.items = [];\r\n        this.itemsIds = {};\r\n\r\n        // load all entitys that match the property\r\n        if (this.property !== undefined) {\r\n            let items = this.$owner.getItems();\r\n            for (let j in items) {\r\n                if (items.hasOwnProperty(j)) {\r\n                    let item = items[j];\r\n                    if (item instanceof Data) {\r\n                        if (property === j) {\r\n                            // if (property == item.property) {\r\n                            let i = new BridgeElement(<Data>item);\r\n                            this.items.push(i);\r\n                            this.itemsIds[item.id] = i;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            this.redrawAllElements();\r\n        }\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        if (this.$owner !== null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    protected redrawAllElements() {\r\n        let children: HTMLCollection = this.$bodysection.children;\r\n        // remove old children\r\n        for (let i = 0; i < children.length; i++) {\r\n            let child = children.item(i);\r\n            // remove child\r\n            this.$bodysection.removeChild(child);\r\n        }\r\n\r\n        // load new children\r\n        for (let obj of this.items) {\r\n            // register listeners\r\n            obj.model.addListener(this);\r\n            // create tr\r\n            let row = this.createRow(obj);\r\n            this.$bodysection.appendChild(row);\r\n            this.cells[obj.id] = row;\r\n        }\r\n    }\r\n\r\n    private parseData(column: any): Column {\r\n        let col = new Column();\r\n        col.label = column.label || column.id;\r\n        col.attribute = column.attribute || column.label || column.id;\r\n        col.$element = document.createElement('th');\r\n        col.$element.innerHTML = col.label;\r\n        col.$element.draggable = true;\r\n\r\n        // resize Header\r\n        col.$resize = document.createElement('div');\r\n        col.$resize.classList.add('resize');\r\n        col.$element.appendChild(col.$resize);\r\n\r\n        return col;\r\n    }\r\n\r\n    private createRow(data: BridgeElement): HTMLTableRowElement {\r\n        let tr: HTMLTableRowElement = document.createElement('tr');\r\n\r\n        for (let id of this.columns) {\r\n            let td: HTMLTableDataCellElement = document.createElement('td');\r\n            tr.appendChild(td);\r\n            td.innerHTML = data.model.getValue(id.attribute);\r\n        }\r\n        return tr;\r\n    }\r\n\r\n    private addHeaderInfo(col: Column) {\r\n        let element: HTMLTableCellElement = col.$element;\r\n        let that = this;\r\n        element.classList.add('sort');\r\n        element.addEventListener('click',\r\n            function () {\r\n                that.sort(col);\r\n            },\r\n            false);\r\n    }\r\n\r\n    private columnDragEvent(type: string, e: DragEvent) {\r\n        if (type === 'dragstart') {\r\n            // Target (this) element is the source node.\r\n            this.moveElement.$element.style.opacity = '0.4';\r\n            e.dataTransfer.effectAllowed = 'move';\r\n            e.dataTransfer.setData('text/json', JSON.stringify(Util.toJson(this.moveElement)));\r\n        } else if (type === 'dragenter') {\r\n            // TO Nothing\r\n        } else if (type === 'dragleave') {\r\n            this.moveElement.$element.classList.remove('over');\r\n        } else if (type === 'dragover') {\r\n            if (e.preventDefault) {\r\n                e.preventDefault(); // Necessary. Allows us to drop.\r\n            }\r\n            for (let c = 0; c < this.columns.length; c++) {\r\n                if (this.columns[c].$element === e.target) {\r\n                    this.dragColumn = this.columns[c];\r\n                    this.dragPos = c;\r\n                    this.columns[c].$element.classList.add('over');\r\n                } else {\r\n                    this.columns[c].$element.classList.remove('over');\r\n                }\r\n            }\r\n            if (e.target === this.tableOption) {\r\n                this.tableOption.classList.add('over');\r\n                this.dragPos = this.columns.length;\r\n            } else {\r\n                this.tableOption.classList.remove('over');\r\n            }\r\n            e.dataTransfer.dropEffect = 'move';  // See the section on the DataTransfer object.\r\n        } else if (type === 'drop') {\r\n            // this / e.target is current target element.\r\n            if (e.stopPropagation) {\r\n                e.stopPropagation(); // stops the browser from redirecting.\r\n            }\r\n            if (this.movePos === this.dragPos) {\r\n                return;\r\n            }\r\n            // movePos -> dragPos\r\n            // See the section on the DataTransfer object.\r\n            // DataModel\r\n            this.columns.splice(this.movePos, 1);\r\n            if (this.movePos >= this.dragPos) {\r\n                this.columns.splice(this.dragPos, 0, this.moveElement);\r\n            } else {\r\n                this.columns.splice(this.dragPos - 1, 0, this.moveElement);\r\n            }\r\n\r\n            // Header Line\r\n            let line: HTMLElement = this.moveElement.$element.parentElement;\r\n            line.removeChild(this.moveElement.$element);\r\n            if (this.dragPos < this.columns.length) {\r\n                line.insertBefore(this.moveElement.$element, this.dragColumn.$element);\r\n            } else {\r\n                line.insertBefore(this.moveElement.$element, this.tableOption);\r\n            }\r\n\r\n            let oldElement: Element;\r\n            let newElement: Element;\r\n\r\n            // Now all Childs\r\n            for (let i = 0; i < this.$bodysection.children.length; i++) {\r\n                // Each line\r\n                line = <HTMLElement>this.$bodysection.children.item(i);\r\n                oldElement = line.children.item(this.movePos);\r\n                newElement = line.children.item(this.dragPos);\r\n                line.removeChild(oldElement);\r\n                line.insertBefore(oldElement, newElement);\r\n            }\r\n        } else if (type === 'dragend') {\r\n            // this/e.target is the source node.\r\n            this.moveElement.$element.style.opacity = '1';\r\n            for (let i = 0; i < this.columns.length; i++) {\r\n                this.columns[i].$element.classList.remove('over');\r\n            }\r\n            this.tableOption.classList.remove('over');\r\n        }\r\n    }\r\n\r\n    private addOptionItem(label: string, parent: HTMLElement, sub: boolean): HTMLElement {\r\n        let labelControl;\r\n        if (label) {\r\n            labelControl = document.createElement('a');\r\n            labelControl.appendChild(document.createTextNode(label));\r\n            labelControl.href = 'javascript:void(0);';\r\n            parent.appendChild(labelControl);\r\n        }\r\n        if (sub) {\r\n            let context = document.createElement('div');\r\n            context.classList.add('dropdown-content');\r\n            context.style.setProperty('position', 'absolute');\r\n            parent.appendChild(context);\r\n\r\n            /* When the user clicks on the button,\r\n             toggle between hiding and showing the dropdown content */\r\n            parent.addEventListener(\r\n                'click',\r\n                function () {\r\n                    context.classList.toggle('show');\r\n                },\r\n                false);\r\n            return context;\r\n        }\r\n        return labelControl;\r\n    }\r\n\r\n    private registerEvents(events: string[]) {\r\n        let that = this;\r\n        for (let i = 0; i < events.length; i++) {\r\n            this.$view.addEventListener(events[i], function (evt) {\r\n                return that.tableEvent(events[i], evt);\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\nclass Column {\r\n    label: string;\r\n    attribute: string;\r\n    $element: HTMLTableHeaderCellElement;\r\n    $resize: HTMLDivElement;\r\n    visible: boolean;\r\n}\r\n","import { AutoComplete } from './AutoComplete';\r\nimport { BR } from './BR';\r\nimport { Div } from './Div';\r\nimport { Label } from './Label';\r\n\r\nexport * from './Node';\r\nexport * from './Class';\r\nexport * from './SO';\r\nexport * from './Symbol';\r\n\r\nexport * from './BR';\r\nexport * from './Button';\r\nexport * from './Div';\r\nexport * from './Form';\r\nexport * from './Input';\r\nexport * from './Label';\r\nexport * from './Table';\r\nexport * from './HTML';\r\nexport * from './Dice';\r\nexport * from './AutoComplete';\r\nexport * from './Attribute';\r\nexport * from './Method';\r\nexport * from './ClazzProperty';\r\n\r\nnew AutoComplete();\r\nnew BR();\r\nnew Div();\r\nnew Label();\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class AddNode implements EventHandler {\r\n\r\n    public MIN_SIZE_TO_ADD_NODE: number = 30;\r\n    public MIN_SIZE_TO_ADD_TEXT: number = 10;\r\n    private graph: Graph;\r\n    private svgRect: SVGSVGElement;\r\n    private svgGroupAddNode: SVGSVGElement;\r\n    private svgTextAddNode: SVGSVGElement;\r\n    private svgTextRectAddNode: SVGSVGElement;\r\n    private isRectDrawing: boolean;\r\n    private isDrawToLeft: boolean;\r\n    private isDrawToTop: boolean;\r\n    private isBigEnoughForAddNode: boolean;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(AddNode.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(AddNode.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!this.canHandle()) {\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element.id !== 'RootElement') {\r\n            return false;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element.id === 'RootElement') {\r\n                    this.start(event, element);\r\n\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mousemove':\r\n                this.drawRect(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.removeRect();\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.addNode();\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawRect(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isRectDrawing) {\r\n            return;\r\n        }\r\n\r\n        evt.stopPropagation();\r\n\r\n        let width = Util.getEventX(evt) - this.x;\r\n        let height = Util.getEventY(evt) - this.y;\r\n\r\n        // rectangle is in a negative area, drawn to upper case. not possibble with svg\r\n        if (width < 0) {\r\n            this.isDrawToLeft = true;\r\n            width *= -1;\r\n        } else {\r\n            this.isDrawToLeft = false;\r\n        }\r\n\r\n        if (height < 0) {\r\n            this.isDrawToTop = true;\r\n            height *= -1;\r\n        } else {\r\n            this.isDrawToTop = false;\r\n        }\r\n\r\n        if (width > this.MIN_SIZE_TO_ADD_NODE && height > this.MIN_SIZE_TO_ADD_NODE) {\r\n            this.isBigEnoughForAddNode = true;\r\n        } else {\r\n            this.isBigEnoughForAddNode = false;\r\n        }\r\n\r\n        this.graph.root.style.cursor = 'pointer';\r\n\r\n        // if line wasnt draw\r\n        if (!this.svgRect) {\r\n\r\n            let rectAddNode = Util.createShape({\r\n                tag: 'rect',\r\n                id: 'addNodeRect',\r\n                x: this.x,\r\n                y: this.y,\r\n                width: 1,\r\n                height: 1,\r\n                class: 'SVGAddNode'\r\n            });\r\n\r\n            let group = Util.createShape({ tag: 'g', id: 'groupAddNode' });\r\n            group.appendChild(rectAddNode);\r\n\r\n            this.graph.root.appendChild(group);\r\n            this.svgRect = rectAddNode;\r\n            this.svgGroupAddNode = group;\r\n        }\r\n        else {\r\n\r\n            let svgRectBBox = this.svgRect.getBBox();\r\n\r\n            // if rect is big enough, show text as helper\r\n            if ((svgRectBBox.width > this.MIN_SIZE_TO_ADD_TEXT\r\n                || svgRectBBox.height > this.MIN_SIZE_TO_ADD_TEXT) && !this.svgTextAddNode) {\r\n\r\n                let textAddNode = Util.createShape({\r\n                    tag: 'text',\r\n                    x: this.x,\r\n                    y: this.y - 5,\r\n                    'font-family': 'Verdana',\r\n                    'font-size': 12,\r\n                    fill: 'black'\r\n                });\r\n                textAddNode.textContent = 'Hold on and move to create a new class';\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n\r\n\r\n                // get correct size of text node\r\n                let sizeClientRect: ClientRect = textAddNode.getBoundingClientRect();\r\n\r\n                let rectBackgroundForText = Util.createShape({\r\n                    tag: 'rect',\r\n                    x: this.x,\r\n                    y: this.y - sizeClientRect.height,\r\n                    width: sizeClientRect.width,\r\n                    height: sizeClientRect.height,\r\n                    fill: '#DDD',\r\n                    'stroke-width': 0\r\n                });\r\n\r\n                this.svgTextRectAddNode = rectBackgroundForText;\r\n                this.svgTextAddNode = textAddNode;\r\n                this.svgGroupAddNode.appendChild(rectBackgroundForText);\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n            }\r\n\r\n            if (this.isDrawToLeft) {\r\n                this.svgRect.setAttributeNS(null, 'x', '' + Util.getEventX(evt));\r\n            }\r\n\r\n            if (this.isDrawToTop) {\r\n                this.svgRect.setAttributeNS(null, 'y', '' + Util.getEventY(evt));\r\n            }\r\n\r\n            // set width and height\r\n            this.svgRect.setAttributeNS(null, 'width', width.toString());\r\n            this.svgRect.setAttributeNS(null, 'height', height.toString());\r\n\r\n            // set color\r\n            if (this.isBigEnoughForAddNode) {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode-ready');\r\n\r\n                // draw text\r\n            }\r\n            else {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeRect(): void {\r\n        this.isRectDrawing = false;\r\n        this.isBigEnoughForAddNode = false;\r\n\r\n        this.graph.root.style.cursor = 'default';\r\n\r\n        if (this.svgGroupAddNode) {\r\n            this.graph.root.removeChild(this.svgGroupAddNode);\r\n            this.svgGroupAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgRect) {\r\n            this.svgRect = undefined;\r\n        }\r\n\r\n        if (this.svgTextAddNode) {\r\n            this.svgTextAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgTextRectAddNode) {\r\n            this.svgTextRectAddNode = undefined;\r\n        }\r\n    }\r\n\r\n    private addNode(): void {\r\n\r\n        if (!this.isBigEnoughForAddNode) {\r\n            this.removeRect();\r\n            return;\r\n        }\r\n\r\n        this.removeRect();\r\n        let node = this.graph.addElementWithValues('Class', { x: this.x, y: this.y });\r\n        this.graph.drawElement(node);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isRectDrawing) {\r\n            return;\r\n        }\r\n        this.isRectDrawing = true;\r\n\r\n        this.x = Util.getEventX(evt);\r\n        this.y = Util.getEventY(evt);\r\n    }\r\n\r\n}\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement, Point } from '../elements/BaseElements';\r\nimport { GraphModel } from '../elements/Model';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Control } from '../Control';\r\nimport { Util } from '../util';\r\n\r\nexport class Drag implements EventHandler {\r\n\r\n    private element: DiagramElement;\r\n    private svgElement: SVGSVGElement;\r\n    private dragging = false;\r\n    private reinsert = false;\r\n    private mouseOffset = new Point();\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        if (!this.canHandle()) {\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if ((!this.dragging) && (element.id !== 'RootElement')) {\r\n                    this.element = element;\r\n                    this.svgElement = <SVGSVGElement>element.$view;\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mouseup':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n\r\n                break;\r\n            case 'mousemove':\r\n                if (this.dragging) {\r\n                    this.drag(event, element);\r\n                }\r\n                break;\r\n            case 'mouseleave':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Drag.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Drag.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private reset() {\r\n        this.dragging = false;\r\n        this.svgElement.style.cursor = 'pointer';\r\n\r\n        /*  WORKAROUND\r\n            Chrome got problem with the Node.appendChild() method.\r\n            Sometimes it works, sometimes not.\r\n            So the background is, in the drag method will the current element be appended\r\n            to front of the svg root.\r\n            If this happend, the click event won't fire.\r\n            So it will be fired manually.\r\n            This problem occurs only in chrome.\r\n        */\r\n        if (Util.isChrome()) {\r\n            let clickEvt = Util.createCustomEvent('click');\r\n            this.svgElement.dispatchEvent(clickEvt);\r\n        }\r\n    }\r\n\r\n    private start(evt: Event | any, element: Control) {\r\n\r\n        this.dragging = true;\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n        this.reinsert = true;\r\n\r\n        this.svgElement.style.cursor = 'move';\r\n    }\r\n\r\n    private drag(evt: Event | any, element: DiagramElement) {\r\n\r\n        if (this.reinsert) {\r\n            if (this.element.id !== 'RootElement') {\r\n                // nesseccary to set the dragged object on top of svg children\r\n                this.graph.root.appendChild(this.svgElement);\r\n            }\r\n\r\n            let dragEvent = Util.createCustomEvent('drag');\r\n            element.$view.dispatchEvent(dragEvent);\r\n        }\r\n        this.reinsert = false;\r\n\r\n        evt.stopPropagation();\r\n\r\n        const translation = this.svgElement.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        const sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        const transX = sx + evt.clientX - this.mouseOffset.x;\r\n        const transY = sy + evt.clientY - this.mouseOffset.y;\r\n        this.svgElement.setAttributeNS(null, 'transform', 'translate(' + transX + ' ' + transY + ')');\r\n        this.element.getPos().addNum(transX - sx, transY - sy);\r\n\r\n        if (this.element instanceof Node) {\r\n            (<Node>this.element).redrawEdges();\r\n        }\r\n\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n\r\n\r\n        // resize svg root\r\n        let maxX = this.element.getPos().x + this.element.getSize().x;\r\n        let maxY = this.element.getPos().y + this.element.getSize().y;\r\n\r\n        let domRectRoot = this.graph.root.getBoundingClientRect();\r\n        if(!domRectRoot){\r\n            return;\r\n        }\r\n\r\n        if(maxX > domRectRoot.width){\r\n            this.graph.root.setAttributeNS(null, 'width', '' + maxX);\r\n        }\r\n        \r\n        if(maxY > domRectRoot.height){\r\n            this.graph.root.setAttributeNS(null, 'height', '' + maxY);\r\n        }\r\n    }\r\n}\r\n","import PropertyChangeSupport from '../PropertyChangeSupport';\r\nimport Data from '../Data';\r\nimport {Adapter} from '../Adapter';\r\nimport ClazzProperty from '../elements/nodes/ClazzProperty';\r\n\r\nexport class GraphListener implements PropertyChangeSupport {\r\n    private $owner: ClazzProperty;\r\n\r\n    constructor(owner: ClazzProperty) {\r\n        this.$owner = owner;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        let adapter = this.$owner.getRoot().getAdapter();\r\n        if (adapter) {\r\n            // messages.add(\"{\\\"class\\\":\\\"de.uniks.networkparser.test.model.House\\\",\\\"id\\\":\\\"H1\\\",\\\"rem\\\":{\\\"floor\\\":4},\\\"upd\\\":{\\\"floor\\\":42}}\");\r\n            let myId =  this.$owner.$owner.getId();\r\n            if (myId && myId.length > 0) {\r\n                let pos = myId.indexOf(':');\r\n                if (pos > 0) {\r\n                    myId = myId.substring(0, pos).trim();\r\n                }\r\n            }\r\n            let myName = this.$owner.getName();\r\n            let remJson = {};\r\n            remJson[myName] = oldValue;\r\n            let updJson = {};\r\n            updJson[myName] = newValue;\r\n            let json = {};\r\n            json['id'] = myId;\r\n            json['rem'] = remJson;\r\n            json['upd'] = updJson;\r\n            let message = JSON.stringify(json);\r\n            (<Adapter> adapter).update(message);\r\n        }\r\n    }\r\n}\r\n","import {Graph} from '../elements/';\r\nimport {EventHandler, EventBus} from '../EventBus';\r\nimport {DiagramElement} from '../elements/';\r\nimport {Util} from '../util';\r\n\r\nexport class ImportFile implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(ImportFile.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(ImportFile.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        let type: string = typeof event;\r\n        if (type !== 'DragEvent') {\r\n            return false;\r\n        }\r\n        let evt: DragEvent = <DragEvent>event;\r\n        if (evt.type === 'dragover') {\r\n            this.handleDragOver(evt);\r\n        } else if (evt.type === 'dragleave') {\r\n            if (this.graph.$view !== evt.target) {\r\n                return false;\r\n            }\r\n            this.setBoardStyle('dragleave');\r\n        } else if (evt.type === 'drop') {\r\n            this.handleLoadFile(evt);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public setBoardStyle(typ: string): boolean {\r\n        let b = this.graph.$view;\r\n        Util.removeClass(b, 'Error');\r\n        Util.removeClass(b, 'Ok');\r\n        Util.removeClass(b, 'Add');\r\n        if (typ === 'dragleave') {\r\n            if (b['errorText']) {\r\n                b.removeChild(b['errorText']);\r\n                b['errorText'] = null;\r\n            }\r\n            return true;\r\n        }\r\n        Util.addClass(b, typ);\r\n        if (typ === 'Error') {\r\n            if (!b['errorText']) {\r\n                b['errorText'] = Util.create({tag: 'div', style: 'margin-top: 30%', value: 'NO TEXTFILE'});\r\n                b.appendChild(b['errorText']);\r\n            }\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private handleLoadFile(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n\r\n        let files = evt.dataTransfer.files; // FileList object.\r\n\r\n        if (files.length > 1) {\r\n            evt.dataTransfer.dropEffect = 'none';\r\n            return;\r\n        }\r\n\r\n        // files is a FileList of File objects. List some properties.\r\n        let reader  = new FileReader();\r\n        let output = [];\r\n        let htmlResult = '';\r\n        let that = this;\r\n        for (let i = 0, f; f = files[i]; i++) {\r\n            reader.onload = function(event) {\r\n                htmlResult = event.target['result'];\r\n                console.log('fileContent: ' + htmlResult);\r\n\r\n                // CHANGE TO INTERNAL OBJECT\r\n                if (that.graph) {\r\n                    that.graph.import(htmlResult);\r\n                }\r\n            };\r\n            reader.readAsText(f);\r\n        }\r\n        this.setBoardStyle('dragleave');\r\n    }\r\n\r\n    private handleDragOver(evt: DragEvent): void {\r\n        let error: boolean = true, n: string, f;\r\n        let files = evt.dataTransfer.files;\r\n        // process all File objects\r\n        if (files && files.length > 0) {\r\n            for (let i: number = 0; i < files.length; i += 1) {\r\n                f = files[i];\r\n                if (f.type.indexOf('text') === 0) {\r\n                    error = false;\r\n                } else if (f.type === '') {\r\n                    n = f.name.toLowerCase();\r\n                    if (n.indexOf('json', n.length - 4) !== -1) {\r\n                        error = false;\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            let items = evt.dataTransfer.items;\r\n            if (items && items.length > 0) {\r\n                for (let z = 0; z < items.length; z ++) {\r\n                    if (items[z].type === '' || items[z].type === 'text/plain') {\r\n                        error = false;\r\n                    }\r\n                }\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.\r\n        if (error) {\r\n            this.dragStyler(evt, 'Error');\r\n        } else if (evt.ctrlKey) {\r\n            this.dragStyler(evt, 'Add');\r\n        } else {\r\n            this.dragStyler(evt, 'Ok');\r\n        }\r\n        /* //evt.target['className'] += ' diagramLoadFile';\r\n        '//console.log('handDragOver');*/\r\n    }\r\n\r\n    private dragStyler(event: Event, typ: string) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n        this.setBoardStyle(typ);\r\n    }\r\n\r\n    private handleDragLeave(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n        evt.dataTransfer.dropEffect = 'link'; // Explicitly show this is a copy.\r\n        evt.target['className'] = 'diagram';\r\n        console.log('handDragLeave');\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Class } from '../elements/nodes/Class';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Association } from '../elements/index';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class NewEdge implements EventHandler {\r\n    private graph: Graph;\r\n    private svgLine: SVGSVGElement;\r\n    private isEdgeDrawing: boolean;\r\n    private sourceNode: Node;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    private lastTargetNode: Node;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(NewEdge.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(NewEdge.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!((<KeyboardEvent>event).ctrlKey || EventBus.isHandlerActiveOrFree('NewEdge', true))) {\r\n            this.removeLine();\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element instanceof Node) {\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n\r\n            case 'mousemove':\r\n                this.drawEdge(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.setNewEdgeToNode(event);\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default: break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawEdge(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        let lineToX = Util.getEventX(evt);\r\n        let lineToy = Util.getEventY(evt);\r\n\r\n        let path = `M${this.x} ${this.y} L${lineToX} ${lineToy}`;\r\n        // if line wasnt draw\r\n        if (!this.svgLine) {\r\n\r\n            let attr = {\r\n                tag: 'path',\r\n                id: 'newEdgePath',\r\n                d: path,\r\n                class: 'SVGEdge'\r\n            };\r\n\r\n            let shape = Util.createShape(attr);\r\n            this.svgLine = shape;\r\n\r\n            this.graph.root.appendChild(shape);\r\n            this.graph.root.appendChild(this.sourceNode.$view);\r\n        }\r\n        else {\r\n\r\n            // set new L path\r\n            this.svgLine.setAttributeNS(null, 'd', path);\r\n\r\n            // get node from position\r\n            let targetNode = this.graph.$graphModel.getNodeByPosition(Util.getEventX(evt), Util.getEventY(evt));\r\n\r\n            // if some targetnode is available, so highlight the node\r\n            if (targetNode) {\r\n\r\n                // reset the last one\r\n                if (this.lastTargetNode && this.lastTargetNode.id !== targetNode.id) {\r\n                    this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n                }\r\n\r\n                this.lastTargetNode = targetNode;\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz-drawedge');\r\n            }\r\n            else if (this.lastTargetNode) {\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeLine(): void {\r\n        this.isEdgeDrawing = false;\r\n\r\n        if (this.svgLine) {\r\n            this.graph.root.removeChild(this.svgLine);\r\n            this.svgLine = null;\r\n        }\r\n\r\n        if (this.lastTargetNode) {\r\n            this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n        }\r\n    }\r\n\r\n    private setNewEdgeToNode(event: Event | any): void {\r\n        // get node from position\r\n        let targetNode = this.graph.$graphModel\r\n            .getNodeByPosition(Util.getEventX(event), Util.getEventY(event));\r\n\r\n        if (!targetNode) {\r\n            this.removeLine();\r\n\r\n            return;\r\n        }\r\n\r\n        this.removeLine();\r\n        let edgeType = this.sourceNode.$defaulEdgeType || 'Association';\r\n\r\n        let jsonData = {\r\n            type: edgeType,\r\n            source: this.sourceNode.id,\r\n            target: targetNode.id\r\n        };\r\n\r\n        let newEdge = this.graph.$graphModel.addEdge(<any>jsonData, true);\r\n        this.graph.drawElement(newEdge);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        this.isEdgeDrawing = true;\r\n        this.sourceNode = element as Class;\r\n\r\n        this.x = this.sourceNode.getPos().x + (this.sourceNode.getSize().x / 2);\r\n        this.y = this.sourceNode.getPos().y + (this.sourceNode.getSize().y / 2);\r\n\r\n        // TODO: get this into util or select\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Node } from '../elements/nodes';\r\nimport { Association } from '../elements/edges';\r\nimport { Util } from '../util';\r\nimport { SymbolLibary } from '../elements/nodes/Symbol';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\nimport Attribute from '../elements/nodes/Attribute';\r\n\r\nexport class Select implements EventHandler {\r\n\r\n    private deleteShape: SVGSVGElement;\r\n    private addEdgeShape: SVGSVGElement;\r\n    private copyNodeShape: SVGSVGElement;\r\n    private graph: Graph;\r\n    private padding = 5;\r\n\r\n    private lastSelectedNode: Element;\r\n    private lastSelectedEdge: Element;\r\n\r\n    private isDragged: boolean;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.deleteShape = SymbolLibary.drawSVG({ type: 'Basket', background: true, id: 'trashcan', tooltip: 'Delete class' });\r\n        this.copyNodeShape = SymbolLibary.drawSVG({ type: 'Copynode', background: true, id: 'copyNode', tooltip: 'Copy class' });\r\n        this.addEdgeShape = SymbolLibary.drawSVG({ type: 'Edgeicon', background: true, id: 'addEdge', tooltip: 'Click and drag to connect this class' });\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        let x = Util.getEventX(event);\r\n        let y = Util.getEventY(event);\r\n\r\n        event.stopPropagation();\r\n        if (event.type === 'drag') {\r\n            this.isDragged = true;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            if (element instanceof Node) {\r\n                this.lastSelectedNode = <Element>element.$view;\r\n            }\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n        }\r\n\r\n        if (event.target['id'] === 'background' || element === this.graph.$graphModel) {\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let e = <Node>element;\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.graph.root.appendChild(this.addEdgeShape);\r\n            this.graph.root.appendChild(this.copyNodeShape);\r\n            this.graph.root.appendChild(element.$view);\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'visible');\r\n\r\n            let x = (e.getPos().x + e.getSize().x) + 5;\r\n            let y = e.getPos().y;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y + this.padding})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.copyNodeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 40 + this.padding})`);\r\n            this.copyNodeShape.onclick = (evt) => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let copyClass = (element).copy();\r\n                copyClass.withPos(nextFreePosition.x, nextFreePosition.y);\r\n                this.graph.drawElement(copyClass);\r\n            };\r\n\r\n            this.addEdgeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 80 + this.padding})`);\r\n            this.addEdgeShape.onmousedown = function () {\r\n                EventBus.setActiveHandler('NewEdge');\r\n                element.$view.dispatchEvent(Util.createCustomEvent('mousedown'));\r\n            };\r\n        }\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let clazz = <Node>element;\r\n\r\n            if (Util.isChrome()) {\r\n                if (this.lastSelectedNode && element.id === this.lastSelectedNode.id && !this.isDragged) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            this.isDragged = false;\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            this.lastSelectedNode = <Element>element.$view;\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete class');\r\n\r\n            // draw textbox to edit clazz in one line\r\n            let divInlineEdit = document.createElement('div');\r\n            divInlineEdit.id = 'inlineEdit';\r\n            divInlineEdit.style.position = 'absolute';\r\n            divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n            divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n            divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n            divInlineEdit.style.zIndex = '42';\r\n\r\n            let inputText = document.createElement('input');\r\n            inputText.type = 'text';\r\n            inputText.style.width = '100%';\r\n            inputText.placeholder = 'Add properties, edit label';\r\n\r\n            divInlineEdit.appendChild(inputText);\r\n            document.body.appendChild(divInlineEdit);\r\n\r\n            inputText.addEventListener('focusout', (evt) => {\r\n\r\n                if (Util.isChrome()) {\r\n                    // only if input is empty, remove the inline edit function\r\n                    if ((!inputText.value || inputText.value.length === 0) && (!this.lastSelectedNode || element.id !== this.lastSelectedNode.id)) {\r\n                        this.removeLastInlineEdit();\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                // only if input is empty, remove the inline edit function\r\n                if ((!inputText.value || inputText.value.length === 0)) {\r\n                    this.removeLastInlineEdit();\r\n                }\r\n            });\r\n\r\n            let g = this.graph;\r\n            let propertyTypes: string[] = ['boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'short', 'String', 'void'];\r\n            inputText.addEventListener('keydown', function (evt) {\r\n\r\n                let keyCode = (<any>evt).which;\r\n                let inputValue = <any>inputText.value;\r\n\r\n                if (Util.endsWith(inputValue, ':') && !document.getElementById('selectPropertyType')) {\r\n                    let selectType = document.createElement('select');\r\n                    selectType.id = 'selectPropertyType';\r\n                    selectType.style.width = '100%';\r\n\r\n                    for (let type of propertyTypes) {\r\n                        let selectOption = document.createElement('option');\r\n                        selectOption.value = type;\r\n                        selectOption.innerHTML = type;\r\n                        selectType.appendChild(selectOption);\r\n                    }\r\n\r\n                    selectType.addEventListener('change', function (evt) {\r\n                        let inputValueSplitted = inputValue.split(':');\r\n                        let selectedPropertyType = selectType.options[selectType.selectedIndex].value;\r\n\r\n                        if (inputValueSplitted.length >= 1) {\r\n                            inputText.value = inputValueSplitted[0].trim() + ' : ' + selectedPropertyType;\r\n                            inputText.focus();\r\n                        }\r\n                    });\r\n\r\n                    divInlineEdit.appendChild(selectType);\r\n                }\r\n                else if (!Util.includes(inputValue, ':')) {\r\n                    let selectType = document.getElementById('selectPropertyType');\r\n\r\n                    if (selectType) {\r\n                        selectType.remove();\r\n                    }\r\n                }\r\n\r\n                if (keyCode !== 13) {\r\n                    return;\r\n                }\r\n\r\n                // attribute\r\n                if ((Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) === false) {\r\n                    if (Util.includes(inputValue, ':')) {\r\n                        clazz.addAttribute(inputValue.trim());\r\n                        clazz.reDraw();\r\n                    } else if (Util.includes(inputValue, '=') ) {\r\n                        let attr: Attribute = null;\r\n                        let name = inputValue.substring(0, inputValue.indexOf('=')).trim();\r\n                        for (let child of clazz.getAttributes() ) {\r\n                            if ( name === child.getName()) {\r\n                                attr = child;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (attr) {\r\n                            attr.updateValue(inputValue.substring(inputValue.indexOf('=') + 1).trim());\r\n                        }\r\n                        clazz.reDraw();\r\n                    }\r\n                }\r\n\r\n                // method\r\n                else if (Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) {\r\n                    clazz.addMethod(inputValue.trim());\r\n                    clazz.reDraw();\r\n                }\r\n                // label\r\n                else if (inputValue.trim().split(' ').length === 1 && inputValue.trim().length > 0) {\r\n                    clazz.updateLabel(inputValue.trim());\r\n                }\r\n\r\n                // reset size\r\n                divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n                divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n                divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n\r\n                inputText.value = '';\r\n\r\n                // remove combobox to select type of property\r\n                let selectType = document.getElementById('selectPropertyType');\r\n\r\n                if (selectType) {\r\n                    selectType.remove();\r\n                }\r\n\r\n                // TODO: reload propertiespanel. not working!\r\n                // event wont dispatch\r\n                // let customEvt = Util.createCustomEvent(EventBus.RELOADPROPERTIES);\r\n                // element.$view.dispatchEvent(customEvt);\r\n            });\r\n\r\n            (<any>divInlineEdit.children[0]).focus();\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Association) {\r\n            this.graph.root.appendChild(element.$view);\r\n            this.graph.root.appendChild(element.$sNode.$view);\r\n            this.graph.root.appendChild(element.$tNode.$view);\r\n\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete edge');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            let edge = <Association>element;\r\n            this.lastSelectedEdge = edge.$view;\r\n\r\n            Util.addClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Select.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Select.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private setTooltipOfShape(shape: SVGSVGElement, tooltip: string): void {\r\n        if (!shape || !shape.hasChildNodes()) {\r\n            return;\r\n        }\r\n\r\n        let titleElement = <SVGSVGElement>shape.childNodes[0];\r\n        if (!titleElement || titleElement.tagName !== 'title') {\r\n            return;\r\n        }\r\n\r\n        titleElement.textContent = tooltip;\r\n    }\r\n\r\n    private resetLastSelectedElements() {\r\n        // reset the last one\r\n        if (this.lastSelectedNode) {\r\n            Util.removeClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.lastSelectedNode = undefined;\r\n        }\r\n\r\n        if (this.lastSelectedEdge) {\r\n            Util.removeClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n            this.lastSelectedEdge = undefined;\r\n        }\r\n\r\n        this.removeLastInlineEdit();\r\n    }\r\n\r\n    private removeLastInlineEdit(): void {\r\n        // remove last inline edit of clazz\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n\r\n            // its not supported in internet explorer\r\n            // lastInlineEdit.remove();\r\n        }\r\n    }\r\n\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\n\r\nexport class Zoom implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n    }\r\n\r\n    public handle(e: any, element: DiagramElement): boolean {\r\n        let delta = e.deltaY || e.wheelDeltaY || -e.wheelDelta;\r\n        let d = 1 + (delta / 1000);\r\n\r\n        let values = this.graph.root.getAttribute('viewBox').split(' ');\r\n        const newViewBox = `${values[0]} ${values[1]} ${parseInt(values[2]) * d} ${parseInt(values[3]) * d}`;\r\n        this.graph.root.setAttribute('viewBox', newViewBox);\r\n\r\n        e.preventDefault();\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Zoom.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Zoom.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n}\r\n","export * from './Drag';\r\nexport * from './Select';\r\nexport * from './Zoom';\r\nexport * from './NewEdge';\r\nexport * from './ImportFile';\r\nexport * from './AddNode';\r\n","import { Association } from '../elements/edges';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport Layout from './Layout';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\n\r\nexport class DagreLayout implements Layout {\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        if (!window['dagre']) {\r\n            return;\r\n        }\r\n        let model = graph.$graphModel;\r\n        let g = new window['dagre'].graphlib.Graph();\r\n\r\n        g.setGraph({ marginx: 100, marginy: 20 }).setDefaultEdgeLabel(function () {\r\n            return {};\r\n        });\r\n\r\n        for (let node of model.nodes) {\r\n            g.setNode(node.id, { width: node.getSize().x, height: node.getSize().y });\r\n        }\r\n\r\n        for (let edge of model.edges) {\r\n            g.setEdge(edge.$sNode.id, edge.$tNode.id);\r\n        }\r\n\r\n        window['dagre'].layout(g);\r\n\r\n        g.nodes().forEach(function (nodeId: string) {\r\n            for (let node of model.nodes) {\r\n                if (node.id === nodeId) {\r\n                    node.withPos(g.node(nodeId).x - g.node(nodeId).width / 2, g.node(nodeId).y - g.node(nodeId).height / 2);\r\n                }\r\n            }\r\n        });\r\n        g.edges().forEach(function (e: any) {\r\n            for (let edge of model.edges) {\r\n                if (edge.$sNode.id === e.v && edge.$tNode.id === e.w) {\r\n                    let size = g.edge(e).points.length;\r\n                    edge.clearPoints();\r\n                    for (let i = 0; i < size; i++) {\r\n                        let point: SVGPoint = g.edge(e).points[i];\r\n                        edge.addPoint(point.x, point.y);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n}\r\n","import {DiagramElement} from '../elements/BaseElements';\r\nimport Layout from './Layout';\r\nimport {Graph} from '../elements/Graph';\r\nimport {Association} from '../elements/edges/Association';\r\nimport {Node} from '../elements/nodes/Node';\r\nimport {Control} from '../Control';\r\n\r\nexport class LayoutGraphMin {\r\n    public nodes: Object = {};\r\n    public edges: Array<Object> = [];\r\n    public outEdges: Object = {};\r\n    public inEdges: Object = {};\r\n    public dummyNodes: Array<LayoutGraphNode> = [];\r\n    public dummyEdges: Object = {};\r\n    public count: number = 0;\r\n    public minRank: number = Number.POSITIVE_INFINITY;\r\n    public maxRank: number = 0;\r\n    public maxHeight: number = 0;\r\n    public maxWidth: number = 0;\r\n    public ranksep: number = 0;\r\n    public edgesLabel: Array<Object> = [];\r\n\r\n    public nodeCount(): number {\r\n        return this.count;\r\n    }\r\n\r\n    public node(id: string) {\r\n        return this.nodes[id];\r\n    }\r\n\r\n    public setNode(id: string, n: LayoutGraphNode) {\r\n        if (n && !this.nodes[id]) {\r\n            this.nodes[id] = n;\r\n            this.count = this.count + 1;\r\n        } else if (!n && this.nodes[id]) {\r\n            delete this.nodes[id];\r\n        }\r\n    }\r\n}\r\n\r\nexport class LayoutGraphNode {\r\n    public id: string;\r\n    public width: number;\r\n    public height: number;\r\n    public x: number;\r\n    public y: number;\r\n    public edgeObj: LayoutGraphEdge;\r\n    public rank: number;\r\n\r\n    constructor(id: string, width: number, height: number, x: number, y: number) {\r\n        this.id = id;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n\r\nexport class LayoutGraphEdge {\r\n    public source: string;\r\n    public target: string;\r\n}\r\n\r\n// \t\t\t\t######################################################### DagreGraph #########################################################\r\nexport class DagreLayoutMin implements Layout {\r\n    public static EDGE_KEY_DELIM = '\\x01';\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        let g, layoutNode, nodes, newEdge, edges;\r\n        let i, n, x, y, sId, tId, split = DagreLayoutMin.EDGE_KEY_DELIM;\r\n        let e: Association;\r\n\r\n        nodes = node['nodes'];\r\n        edges = node['edges'];\r\n        g = new LayoutGraphMin();\r\n\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            g.setNode(n.id, new LayoutGraphNode(n.id, n.getSize().x, n.getSize().y, n.getPos().x, n.getPos().y));\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            sId = this.getNodeId(e.$sNode);\r\n            tId = this.getNodeId(e.$tNode);\r\n            if (sId > tId) {\r\n                let tmp = tId;\r\n                tId = sId;\r\n                sId = tmp;\r\n            }\r\n            let idAB = sId + split + tId + split;\r\n            let idBA = tId + split + sId + split;\r\n            if (sId !== tId && g.edgesLabel.indexOf(idAB) < 0 && g.edgesLabel.indexOf(idBA) < 0) {\r\n                newEdge = {source: sId, target: tId, minlen: 1, weight: 1};\r\n                g.edges.push(newEdge);\r\n                g.edgesLabel.push(idAB);\r\n                // In Edges\r\n                if (!g.inEdges[tId]) {\r\n                    g.inEdges[tId] = [];\r\n                }\r\n                g.inEdges[tId].push(newEdge);\r\n\r\n                // Out Edges\r\n                if (!g.outEdges[sId]) {\r\n                    g.outEdges[sId] = [];\r\n                }\r\n                g.outEdges[sId].push(newEdge);\r\n            }\r\n        }\r\n        this.layouting(g);\r\n        // Set the layouting back\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            layoutNode = g.node(n.id);\r\n            x = n.getPos().x;\r\n            y = n.getPos().y;\r\n            if (x < 1 && y < 1) {\r\n                n.withPos(Math.ceil(layoutNode.x), Math.ceil(layoutNode.y));\r\n            }\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            // OBSOLETE method:  e.calc(graph.canvas);\r\n        }\r\n        graph.draw();\r\n    }\r\n\r\n    public getNodeId(node: Control): string {\r\n        if (node.$owner) {\r\n            return this.getNodeId(node.$owner) || node.id;\r\n        }\r\n        return node.id;\r\n    }\r\n\r\n    public layouting(g: LayoutGraphMin) {\r\n        this.longestPath(g);\r\n        this.normalizeRanks(g);\r\n        this.normalizeEdge(g);\r\n        // this.setSimpleOrder(g);\r\n        this.order(g);\r\n        g.ranksep = 25;\r\n        // remove Dummy\r\n        this.removeDummy(g);\r\n        this.position(g);\r\n    }\r\n\r\n    public setSimpleOrder(g: LayoutGraphMin) {\r\n        let i, n;\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            n.order = n.rank;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Applies heuristics to minimize edge crossings in the graph and sets the best\r\n     * order solution as an order attribute on each node.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Graph must be DAG\r\n     *    2. Graph nodes must be objects with a \"rank\" attribute\r\n     *    3. Graph edges must have the \"weight\" attribute\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Graph nodes will have an \"order\" attribute based on the results of the\r\n     *       algorithm.\r\n     */\r\n    public order(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        let visited = {};\r\n        let node, n, order, i;\r\n        for (i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (n in g.nodes) {\r\n            if (visited[n]) {\r\n                continue;\r\n            }\r\n            visited[n] = true;\r\n            node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank].push(n);\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                g.nodes[layering[order][n]].order = parseInt(n);\r\n            }\r\n        }\r\n        // Fix resolve conflict\r\n        for (order in layering) {\r\n            if (layering[order].length > 1) {\r\n                for (n in layering[order]) {\r\n                    if (layering[order].hasOwnProperty(n) === false) {\r\n                        continue;\r\n                    }\r\n                    let name = layering[order][n];\r\n                    let sum = 0;\r\n                    let weight = 1;\r\n                    let edges = g.dummyEdges[name];\r\n                    if (edges) {\r\n                        for (i in edges) {\r\n                            if (edges.hasOwnProperty(i) === false) {\r\n                                continue;\r\n                            }\r\n                            let edge = edges[i];\r\n                            let nodeU = g.node(edge.target);\r\n                            sum = sum + (edge.weight * nodeU.order);\r\n                            weight = weight + edge.weight;\r\n                        }\r\n                    }\r\n                    g.node(name).barycenter = sum / weight;\r\n                    g.node(name).weight = weight;\r\n                }\r\n            } else if (layering[order].length > 0) {\r\n                for (n in layering[order]) {\r\n                    let name = layering[order][n];\r\n                    g.node(name).barycenter = 1;\r\n                    g.node(name).weight = 1;\r\n                }\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                let node = g.nodes[layering[order][n]];\r\n                node.order = parseInt(n) + node.barycenter * node.weight;\r\n                if (isNaN(node.order)) {\r\n                    console.log('ERROR');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public removeDummy(g: LayoutGraphMin) {\r\n        for (let z in g.dummyNodes) {\r\n            let node = g.dummyNodes[z];\r\n            g.setNode(node.id, null);\r\n        }\r\n        g.dummyNodes = [];\r\n        g.dummyEdges = {};\r\n    }\r\n\r\n    /*\r\n     * Breaks any long edges in the graph into short segments that span 1 layer\r\n     * each. This operation is undoable with the denormalize function.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. The input graph is a DAG.\r\n     *    2. Each node in the graph has a \"rank\" property.\r\n     *\r\n     * Post-condition:\r\n     *\r\n     *    1. All edges in the graph have a length of 1.\r\n     *    2. Dummy nodes are added where edges have been split into segments.\r\n     *    3. The graph is augmented with a \"dummyChains\" attribute which contains\r\n     *       the first dummy in each chain of dummy nodes produced.\r\n     */\r\n    public normalizeEdge(g: LayoutGraphMin): void {\r\n        let i: number = 1;\r\n        for (let id in g.edges) {\r\n            let e: LayoutGraphEdge = <LayoutGraphEdge>g.edges[id];\r\n            let v: string = e.source;\r\n            let vRank = g.node(v).rank;\r\n            const w: string = e.target;\r\n            const wRank: number = g.node(w).rank;\r\n            let name: string;\r\n\r\n            if (wRank === vRank + 1) {\r\n                continue;\r\n            }\r\n\r\n            let dummy;\r\n            for (vRank = vRank + 1; vRank < wRank; ++vRank) {\r\n                name = '_d' + e.source + e.target + (i++);\r\n                let newEdge = {source: v, target: name, minlen: 1, weight: 1};\r\n                dummy = new LayoutGraphNode(name, 0, 0, 0, 0);\r\n                dummy.edgeObj = e;\r\n                dummy.rank = vRank;\r\n                // Dummy Edges\r\n                if (!g.dummyEdges[v]) {\r\n                    g.dummyEdges[v] = [];\r\n                }\r\n                g.dummyEdges[v].push(newEdge);\r\n\r\n                g.dummyNodes.push(dummy);\r\n                g.setNode(dummy.id, dummy);\r\n                v = name;\r\n            }\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Initializes ranks for the input graph using the longest path algorithm. This\r\n     * algorithm scales well and is fast in practice, it yields rather poor\r\n     * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\r\n     * ranks wide and leaving edges longer than necessary. However, due to its\r\n     * speed, this algorithm is good for getting an initial ranking that can be fed\r\n     * into other algorithms.\r\n     *\r\n     * This algorithm does not normalize layers because it will be used by other\r\n     * algorithms in most cases. If using this algorithm directly, be sure to\r\n     * run normalize at the end.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Input graph is a DAG.\r\n     *    2. Input graph node labels can be assigned properties.\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Each node will be assign an (unnormalized) \"rank\" property.\r\n     */\r\n    public longestPath(g: LayoutGraphMin) {\r\n        let i, n, visited = [];\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            visited.push(i);\r\n            n.rank = this.findAllPaths(g, n, 0, visited);\r\n            g.minRank = Math.min(g.minRank, n.rank);\r\n        }\r\n    }\r\n\r\n    public findAllPaths(g: LayoutGraphMin, n: Node, currentCost: number, path: Array<String>) {\r\n        let min: number = 0;\r\n        let id: string;\r\n        let z: number;\r\n        let target;\r\n        if (g.outEdges[n.id]) {\r\n            for (z = 0; z < g.outEdges[n.id].length; z++) {\r\n                id = g.outEdges[n.id][z].target;\r\n                target = g.nodes[id];\r\n                if (path[id]) {\r\n                    min = Math.min(min, target.rank);\r\n                } else if (path.indexOf(id) < 0) {\r\n                    min = Math.min(min, this.findAllPaths(g, target, currentCost - 2, path));\r\n                } else {\r\n                    min = currentCost;\r\n                }\r\n            }\r\n            return min;\r\n        }\r\n        return currentCost;\r\n    }\r\n\r\n    /*\r\n     * Adjusts the ranks for all nodes in the graph such that all nodes v have\r\n     * rank(v) >= 0 and at least one node w has rank(w) = 0.\r\n     */\r\n    public normalizeRanks(g: LayoutGraphMin) {\r\n        let min = g.minRank;\r\n        let value;\r\n        g.maxRank = Number.NEGATIVE_INFINITY;\r\n        g.maxHeight = 0;\r\n        g.maxWidth = 0;\r\n        for (let i in g.nodes) {\r\n            let node = g.nodes[i];\r\n            if (node.rank !== undefined) {\r\n                node.rank -= min;\r\n                value = Math.abs(node.rank);\r\n                if (value > g.maxRank) {\r\n                    g.maxRank = value;\r\n                }\r\n                g.maxHeight = Math.max(g.maxHeight, node.height);\r\n                g.maxWidth = Math.max(g.maxWidth, node.width);\r\n            }\r\n        }\r\n    }\r\n\r\n    public position(g: LayoutGraphMin) {\r\n        this.positionY(g);\r\n        let list = this.positionX(g);\r\n        for (let i in list) {\r\n            for (let pos in list[i]) {\r\n                if (list[i].hasOwnProperty(pos) === false) {\r\n                    continue;\r\n                }\r\n                if (g.node(list[i][pos])) {\r\n                    g.node(list[i][pos]).x = parseInt(pos) * g.maxWidth;\r\n                }\r\n            }\r\n\r\n        }\r\n    }\r\n\r\n    public positionY(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        let rankSep = g.ranksep;\r\n        let prevY = 0;\r\n        for (let layer in layering) {\r\n            let maxHeight = g.maxHeight;\r\n            for (let v in layering[layer]) {\r\n                if (layering[layer].hasOwnProperty(v) === false) {\r\n                    continue;\r\n                }\r\n                let id = layering[layer][v];\r\n                g.nodes[id].y = prevY + maxHeight / 2;\r\n            }\r\n            prevY += maxHeight + rankSep;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\r\n     * function will produce a matrix with the ids of each node.\r\n     */\r\n    public buildLayerMatrix(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        for (let i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (let n in g.nodes) {\r\n            let node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank][node.order] = n;\r\n            }\r\n        }\r\n        return layering;\r\n    }\r\n\r\n    public positionX(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        return layering;\r\n    }\r\n}\r\n","import { Point } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport Layout from './Layout';\r\n\r\nexport class Random implements Layout {\r\n\r\n  public layout(graph: Graph) {\r\n\r\n    let model = graph.$graphModel;\r\n\r\n    if (model.nodes) {\r\n      for (let node of model.nodes) {\r\n        let pos: Point = node.getPos();\r\n        if (pos.x === 0 && pos.y === 0) {\r\n          let x = Util.getRandomInt(0, graph.canvasSize.width);\r\n          let y = Util.getRandomInt(0, graph.canvasSize.height);\r\n          node.withPos(x, y);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","export * from './DagreLayout';\r\nexport * from './Random';\r\nexport * from './DagreLayoutMin';\r\n\r\nimport {DagreLayout} from './DagreLayout';\r\nimport {DagreLayoutMin} from './DagreLayoutMin';\r\nimport {Random} from './Random';\r\nnew DagreLayout();\r\nnew DagreLayoutMin();\r\nnew Random();\r\n","import {VirtualKeyBoard} from './VirtualKeyBoard';\r\n\r\nexport {Point} from './elements/BaseElements';\r\nexport {Bridge, DelegateAdapter} from './Bridge';\r\nexport {Graph} from './elements/Graph';\r\nexport * from './elements/nodes';\r\nexport * from './elements/edges';\r\nexport * from './adapters';\r\nexport * from './UML';\r\nimport {Point} from './elements/BaseElements';\r\nimport {Graph} from './elements/Graph';\r\nimport {ClassEditor} from './elements/ClassEditor';\r\nimport {Bridge} from './Bridge';\r\nimport {Util} from './util';\r\nimport * as nodes  from './elements/nodes';\r\nimport * as edges from './elements/edges';\r\nimport {ScrumBoard} from './ScrumBoard';\r\n\r\nif (!window['Point']) {\r\n    window['Point'] = Point;\r\n    window['Graph'] = Graph;\r\n    window['bridge'] = new Bridge();\r\n    window['Util'] = Util;\r\n    window['Class'] = nodes.Class;\r\n    window['Association'] = edges.Association;\r\n    window['SymbolLibary'] = nodes.SymbolLibary;\r\n    window['ClassEditor'] = ClassEditor;\r\n    window['VirtualKeyBoard'] = VirtualKeyBoard;\r\n    window['ScrumBoard'] = ScrumBoard;\r\n}\r\n","'use strict';\r\nimport { CSS } from './CSS';\r\nimport { Node } from './elements/nodes/Node';\r\nimport { DiagramElement, Point } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport class Util {\r\n\r\n    public static isAutoSave: boolean;\r\n\r\n    static getRandomInt(min: number, max: number): number {\r\n        return Math.floor(Math.random() * (max - min + 1)) + min;\r\n    }\r\n\r\n    static createShape(attrs: any): SVGSVGElement {\r\n        let xmlns = attrs.xmlns || 'http://www.w3.org/2000/svg';\r\n        let shape = document.createElementNS(xmlns, attrs.tag);\r\n\r\n        for (let attr in attrs) {\r\n            if (!attrs.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr !== 'tag') {\r\n                shape.setAttribute(attr, attrs[attr]);\r\n\r\n            }\r\n        }\r\n        return <SVGSVGElement><any>shape;\r\n    }\r\n\r\n    static toPascalCase(value: string): string {\r\n        value = value.charAt(0).toUpperCase() + value.substring(1).toLowerCase();\r\n        return value;\r\n    }\r\n\r\n    static isSVG(tag: string): boolean {\r\n        let i,\r\n            list = ['svg', 'path', 'polygon', 'polyline', 'line', 'title', 'rect', 'filter', 'feGaussianBlur', 'feOffset', 'feBlend', 'linearGradient', 'stop', 'text', 'symbol', 'textPath', 'defs', 'fegaussianblur', 'feoffset', 'feblend', 'circle', 'ellipse', 'g'];\r\n        for (i = 0; i < list.length; i += 1) {\r\n            if (list[i] === tag) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    static createHTML(node: any): HTMLElement {\r\n        return <HTMLElement>this.create(node);\r\n    }\r\n    static create(node: any): Element {\r\n        let style, item, xmlns, key, tag, k;\r\n        if (document.createElementNS && (this.isSVG(node.tag) || node.xmlns)) {\r\n            if (node.xmlns) {\r\n                xmlns = node.xmlns;\r\n            } else {\r\n                xmlns = 'http://www.w3.org/2000/svg';\r\n            }\r\n            if (node.tag === 'img' && xmlns) {\r\n                item = document.createElementNS(xmlns, 'image');\r\n                item.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\r\n                item.setAttributeNS('http://www.w3.org/1999/xlink', 'href', node.src);\r\n            } else {\r\n                item = document.createElementNS(xmlns, node.tag);\r\n            }\r\n        } else {\r\n            item = document.createElement(node.tag);\r\n        }\r\n        tag = node.tag.toLowerCase();\r\n        for (key in node) {\r\n            if (!node.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            k = key.toLowerCase();\r\n            if (node[key] === null) {\r\n                continue;\r\n            }\r\n            if (k === 'tag' || k.charAt(0) === '$' || k === '$graphModel') {\r\n                continue;\r\n            }\r\n            if (k.charAt(0) === '#') {\r\n                item[k.substring(1)] = node[key];\r\n                continue;\r\n            }\r\n            if (k === 'rotate') {\r\n                item.setAttribute('transform', 'rotate(' + node[key] + ',' + node.$graphModel.x + ',' + node.$graphModel.y + ')');\r\n                continue;\r\n            }\r\n            if (k === 'value') {\r\n                if (!node[key]) {\r\n                    continue;\r\n                }\r\n                if (tag !== 'input') {\r\n                    if (tag === 'text') {// SVG\r\n                        item.appendChild(document.createTextNode(node[key]));\r\n                    } else {\r\n                        item.innerHTML = node[key];\r\n                    }\r\n                } else {\r\n                    item[key] = node[key];\r\n                }\r\n                continue;\r\n            }\r\n            if (k.indexOf('on') === 0) {\r\n                this.bind(item, k.substring(2), node[key]);\r\n                continue;\r\n            }\r\n            if (k.indexOf('-') >= 0) {\r\n                item.style[key] = node[key];\r\n            } else {\r\n                if (k === 'style' && typeof (node[key]) === 'object') {\r\n                    for (style in node[key]) {\r\n                        if (!node[key].hasOwnProperty(style)) {\r\n                            continue;\r\n                        }\r\n                        if (node[key][style]) {\r\n                            if ('transform' === style) {\r\n                                item.style.transform = node[key][style];\r\n                                item.style.msTransform = item.style.MozTransform = item.style.WebkitTransform = item.style.OTransform = node[key][style];\r\n                            } else {\r\n                                item.style[style] = node[key][style];\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    item.setAttribute(key, node[key]);\r\n                }\r\n            }\r\n        }\r\n        if (node.$parent) {\r\n            node.$parent.appendChild(item);\r\n        }\r\n        if (node.$graphModel) {\r\n            item.$graphModel = node.$graphModel;\r\n        }\r\n        return item;\r\n    }\r\n\r\n    static setSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttribute('width', value);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.setAttribute('height', value);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setAttributeSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttributeNS(null, 'width', value);\r\n        value = Util.getValue(height);\r\n        item.setAttributeNS(null, 'height', value);\r\n    }\r\n\r\n    static setStyleSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setPos(item: any, x: number, y: number): void {\r\n        if (item.x && item.x.baseVal) {\r\n            item.style.left = x + 'px';\r\n            item.style.top = y + 'px';\r\n        } else {\r\n            item.x = x;\r\n            item.y = y;\r\n        }\r\n    }\r\n\r\n    static getValue(value: string | number): number {\r\n        return parseInt(('0' + value).replace('px', ''), 10);\r\n    }\r\n\r\n    static isIE(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('.net') > -1;\r\n    }\r\n\r\n    static isEdge(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('edge') > -1;\r\n    }\r\n\r\n    static isFireFox(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n    }\r\n\r\n    static isSafari(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        return navigator.userAgent.toLowerCase().indexOf('safari') > -1 && !isEdge;\r\n    }\r\n\r\n    static isOpera(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('opera') > -1;\r\n    }\r\n\r\n    static isChrome(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        let isSafari = Util.isSafari();\r\n        return navigator.userAgent.toLowerCase().indexOf('chrome') > -1 && !isEdge && isSafari;\r\n    }\r\n\r\n    static getEventX(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetX'] : event.layerX;\r\n    }\r\n\r\n    static getEventY(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetY'] : event.layerY;\r\n    }\r\n\r\n    static getNumber(str: string): number {\r\n        return parseInt((str || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    static getStyle(styleProp: string): CSS {\r\n        let i, style, diff, current, ref, el = document.createElement('div'), css;\r\n        document.body.appendChild(el);\r\n        css = new CSS(styleProp);\r\n        ref = new CSS(styleProp, el).css;\r\n        style = window.getComputedStyle(el, null);\r\n        el.className = styleProp;\r\n        current = new CSS(styleProp, el).css;\r\n        diff = Util.getNumber(style.getPropertyValue('border-width'));\r\n        for (i in current) {\r\n            if (!current.hasOwnProperty(i)) {\r\n                continue;\r\n            }\r\n            if (i === 'width' || i === 'height') {\r\n                if (Util.getNumber(current[i]) !== 0 && Util.getNumber(current[i]) + diff * 2 !== Util.getNumber(ref[i])) {\r\n                    css.add(i, current[i]);\r\n                }\r\n            } else if (current[i] !== ref[i]) {\r\n                css.add(i, current[i]);\r\n            }\r\n        }\r\n        document.body.removeChild(el);\r\n        return css;\r\n    }\r\n\r\n    static sizeOf(item: string | any, node?: Node): ClientRect {\r\n        let board;\r\n        let rect: ClientRect;\r\n        let addBoard: boolean;\r\n        if (!item) {\r\n            return undefined;\r\n        }\r\n        if (node) {\r\n            board = node.$owner.$view;\r\n            addBoard = false;\r\n        }\r\n\r\n        if (!board) {\r\n            addBoard = true;\r\n            board = Util.createShape({ tag: 'svg', id: 'root', width: 200, height: 200 });\r\n            document.body.appendChild(board);\r\n        }\r\n        if (board.tagName === 'svg') {\r\n            if (typeof item === 'string') {\r\n                item = Util.create({ tag: 'text', $font: true, value: item });\r\n                item.setAttribute('width', '5px');\r\n            }\r\n        } else if (typeof item === 'string') {\r\n            item = document.createTextNode(item);\r\n        }\r\n        board.appendChild(item);\r\n        rect = item.getBoundingClientRect();\r\n        board.removeChild(item);\r\n\r\n        if (addBoard) {\r\n            document.body.removeChild(board);\r\n        }\r\n        return rect;\r\n    }\r\n\r\n    static getColor(style: string, defaultColor?: string) {\r\n        if (style) {\r\n            if (style.toLowerCase() === 'create') {\r\n                return '#008000';\r\n            }\r\n            if (style.toLowerCase() === 'nac') {\r\n                return '#FE3E3E';\r\n            }\r\n            if (style.indexOf('#') === 0) {\r\n                return style;\r\n            }\r\n        }\r\n        if (defaultColor) {\r\n            return defaultColor;\r\n        }\r\n        return '#000';\r\n    }\r\n\r\n    public static utf8$to$b64(str: string): string {\r\n        return window.btoa(encodeURIComponent(str));\r\n    }\r\n\r\n    public static showSVG(control: DiagramElement) {\r\n        let svg = Util.create({\r\n            tag: 'svg',\r\n            style: { left: control.getPos().x, top: control.getPos().y, position: 'absolute' }\r\n        });\r\n        let child = control.getSVG();\r\n        if (child) {\r\n            svg.appendChild(child);\r\n        }\r\n        Util.setSize(svg, control.getSize().x, control.getSize().y);\r\n        document.body.appendChild(svg);\r\n    }\r\n\r\n    public static toJson(ref: JSON | Object): Object {\r\n        let result = {};\r\n        return Util.copy(result, ref, false, false);\r\n    }\r\n\r\n    public static initControl(parent: Control, control: Control, type: string, id: string, json: JSON | Object) {\r\n        if (typeof control.init === 'function') {\r\n            control.init(parent, type, id);\r\n        }\r\n        if (typeof control.load === 'function') {\r\n            control.load(json);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * copy One Json into another\r\n     * @function\r\n     * @param ref reference Json\r\n     * @param src source Json\r\n     * @param full all attributes include privet $\r\n     * @param replace set the original reference or copy it\r\n     * @returns ref\r\n     * @name copy\r\n     */\r\n    public static copy(ref: JSON | Object, src: JSON | Object, full: boolean, replace: boolean) {\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (replace) {\r\n                        ref[i] = src[i];\r\n                        continue;\r\n                    }\r\n                    if (!ref[i]) {\r\n                        if (src[i] instanceof Array) {\r\n                            ref[i] = [];\r\n                        } else {\r\n                            ref[i] = {};\r\n                        }\r\n                    }\r\n                    Util.copy(ref[i], src[i], full, false);\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref[i] = src[i];\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    public static xmlstringify(text: string): string {\r\n        text = text.replace('<', '&lt;');\r\n        text = text.replace('>', '&gt;');\r\n        return text;\r\n    }\r\n\r\n    public static toXML(ref: JSON | Object | any, src: JSON | Object | any, full: boolean, doc: Document): any {\r\n        let name;\r\n        if (!ref) {\r\n            name = src.constructor.name;\r\n            doc = document.implementation.createDocument(null, name, null);\r\n            ref = doc.childNodes[0];\r\n        }\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (!ref.getAttribute(i)) {\r\n                        if (src[i] instanceof Array) {\r\n                            for (let c in src[i]) {\r\n                                if (!src[i].hasOwnProperty(c)) {\r\n                                    continue;\r\n                                }\r\n                                name = src[i][c].constructor.name;\r\n                                let child = doc.createElement(name);\r\n                                ref.appendChild(child);\r\n                                Util.toXML(child, src[i][c], full, doc);\r\n                            }\r\n                        } else {\r\n                            name = src[i].constructor.name;\r\n                            let child = doc.createElement(name);\r\n                            ref.appendChild(child);\r\n                            Util.toXML(child, src[i], full, doc);\r\n                        }\r\n                    } else {\r\n                        Util.toXML(ref.getAttribute(i), src[i], full, doc);\r\n                    }\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref.setAttribute(i, src[i]);\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    static Range(min: Point, max: Point, x: number, y: number) {\r\n        max.x = Math.max(max.x, x);\r\n        max.y = Math.max(max.y, y);\r\n        min.x = Math.min(min.x, x);\r\n        min.y = Math.min(min.y, y);\r\n    }\r\n\r\n    public static getPosition(m: number, n: number, entity: DiagramElement, refCenter: Point) {\r\n        let t, p = [], list, distance = [], min = 999999999, position, i, step = 15;\r\n        let pos: Point = entity.getPos();\r\n        let size: Point = entity.getSize();\r\n        list = [Point.LEFT, Point.RIGHT];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = this.getLRPosition(m, n, entity, list[i]);\r\n            if (t.y >= pos.y && t.y <= (pos.y + size.y + 1)) {\r\n                t.y += (entity['$' + list[i]] * step);\r\n                if (t.y > (pos.y + size.y)) {\r\n                    // Alternative\r\n                    t = Util.getUDPosition(m, n, entity, Point.DOWN, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        list = [Point.UP, Point.DOWN];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = Util.getUDPosition(m, n, entity, list[i]);\r\n            if (t.x >= pos.x && t.x <= (pos.x + size.x + 1)) {\r\n                t.x += (entity['$' + list[i]] * step);\r\n                if (t.x > (pos.x + size.x)) {\r\n                    // Alternative\r\n                    t = this.getLRPosition(m, n, entity, Point.RIGHT, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        for (i = 0; i < p.length; i += 1) {\r\n            if (distance[i] < min) {\r\n                min = distance[i];\r\n                position = p[i];\r\n            }\r\n        }\r\n        return position;\r\n    }\r\n\r\n    public static getUDPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let x, y: number = pos.y;\r\n        if (p === Point.DOWN) {\r\n            y += size.y;\r\n        }\r\n        x = (y - n) / m;\r\n        if (step) {\r\n            x += e['$' + p] * step;\r\n            if (x < pos.x) {\r\n                x = pos.x;\r\n            } else if (x > (pos.x + size.x)) {\r\n                x = pos.x + size.x;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static getLRPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let y: number, x: number = pos.x;\r\n        if (p === Point.RIGHT) {\r\n            x += size.x;\r\n        }\r\n        y = m * x + n;\r\n        if (step) {\r\n            y += e['$' + p] * step;\r\n            if (y < pos.y) {\r\n                y = pos.y;\r\n            } else if (y > (pos.y + size.y)) {\r\n                y = pos.y + size.y;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static hasClass(element: Element, cls: string) {\r\n        let className = element.getAttribute('class');\r\n        return className.indexOf(cls) > 0;\r\n    }\r\n    public static addClass(element: Element, cls: string) {\r\n        if (!Util.hasClass(element, cls)) {\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className + ' ' + cls);\r\n        }\r\n    }\r\n    public static removeClass(element: Element, cls: string) {\r\n        if (Util.hasClass(element, cls)) {\r\n            let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className.replace(reg, ' ').trim());\r\n        }\r\n    }\r\n\r\n    public static startsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.startsWith) {\r\n            return s.indexOf(searchS) === 0;\r\n        }\r\n\r\n        return s.startsWith(searchS);\r\n    }\r\n\r\n    public static endsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.endsWith) {\r\n            let lastIndex = s.lastIndexOf(searchS);\r\n            return lastIndex !== -1 && lastIndex === (s.length - 1);\r\n        }\r\n\r\n        return s.endsWith(searchS);\r\n    }\r\n\r\n    public static includes(s: string, searchS: string): boolean {\r\n        if (!String.prototype.includes) {\r\n            let idx = s.indexOf(searchS);\r\n            return idx > -1;\r\n        }\r\n        if (s === null) {\r\n            return false;\r\n        }\r\n\r\n        return s.includes(searchS);\r\n    }\r\n\r\n    public static isParentOfChild(parent: Element, child: Element): boolean {\r\n\r\n        if (!parent || !child) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isIE()) {\r\n            let children = parent.childNodes;\r\n            // let found = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                let childItem = children[i];\r\n                if (childItem === child) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        return parent.contains(child);\r\n    }\r\n\r\n    public static createCustomEvent(type: string, params?: any): CustomEvent {\r\n        let evt: CustomEvent;\r\n\r\n        if (typeof window['CustomEvent'] !== 'function') {\r\n            params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n            evt = document.createEvent('CustomEvent');\r\n            evt.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\r\n            return evt;\r\n        }\r\n\r\n        evt = new CustomEvent(type);\r\n\r\n        return evt;\r\n    }\r\n\r\n    public static saveToLocalStorage(model: any): boolean {\r\n        if (!this.isAutoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isLocalStorageSupported()) {\r\n            if (model) {\r\n                if (model.$isLoading) {\r\n                    return false;\r\n                }\r\n                let jsonObj = Util.toJson(model);\r\n                let data = JSON.stringify(jsonObj, null, '\\t');\r\n                localStorage.setItem('diagram', data);\r\n            } else {\r\n                localStorage.removeItem('diagram');\r\n            }\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static getDiagramFromLocalStorage(): string {\r\n        if (Util.isLocalStorageSupported()) {\r\n            return localStorage.getItem('diagram');\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    public static isLocalStorageSupported(): boolean {\r\n        if (this.isEdge()) {\r\n            return false;\r\n        }\r\n        return localStorage !== undefined;\r\n    }\r\n}\r\n"],"sourceRoot":""}
Severity: Minor
Found in doc/diagram.js.map by fixme

FIXME found
Open

{"version":3,"sources":["webpack://DiagramJS/webpack/bootstrap","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Adapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Bridge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/BridgeElement.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/CSS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Control.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Data.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventBus.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/JSEPS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Palette.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertiesPanel.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertyBinder.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/RGBColor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/SVGConverter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/ScrumBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Toolbar.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/UML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/VirtualKeyBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/JavaAdapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/BaseElements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/ClassEditor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Graph.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Model.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregate.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Association.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Composition.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Generalisation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Implements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Attribute.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/AutoComplete.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/BR.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Button.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Class.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/ClazzProperty.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Dice.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Div.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Form.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/HTML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/InfoText.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Input.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Label.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Method.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Node.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/SO.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/StereoType.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Symbol.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Table.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/AddNode.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Drag.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/GraphListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/ImportFile.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/NewEdge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Select.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Zoom.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayout.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayoutMin.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/Random.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/main.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/util.ts"],"names":[],"mappings":"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","file":"diagram.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./main.ts\");\n","export abstract class Adapter {\r\n    public id: string = null;\r\n\r\n    abstract update(evt: Object): boolean;\r\n}\r\n","'use strict';\r\n\r\nimport * as controls from './elements/nodes';\r\nimport * as adapters from './adapters';\r\nimport Data from './Data';\r\nimport {Control} from './Control';\r\nimport {Adapter} from './Adapter';\r\nimport {Graph} from './elements';\r\nimport {Util} from './util';\r\nimport {Point} from './elements';\r\n\r\nexport class Bridge extends Control {\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public static version: string = '0.42.01.1601007-1739';\r\n    private controlFactory: Object = {};\r\n    private adapterFactory: Object = {};\r\n    private controls: Object = {};\r\n    private adapters: Object = {};\r\n    private items: Object = {};\r\n    private controlNo: number = 1;\r\n    private online: boolean = true;\r\n    private language: string = navigator.language.toUpperCase();\r\n    private toolBar: HTMLElement;\r\n\r\n    constructor(viewRoot?: HTMLElement) {\r\n        super();\r\n        let i;\r\n\r\n        if (viewRoot) {\r\n            this.$view = viewRoot;\r\n        }\r\n\r\n        let keys: string[] = Object.keys(adapters);\r\n        for (i = 0; i < keys.length; i++) {\r\n            let child = adapters[keys[i]];\r\n            if (child && child.id) {\r\n                this.adapterFactory[child.id.toLowerCase()] = child;\r\n            }\r\n        }\r\n\r\n        keys = Object.keys(controls);\r\n        for (i = 0; i < keys.length; i++) {\r\n            this.addControl(controls[keys[i]]);\r\n        }\r\n        this.addControl(Graph);\r\n\r\n        let that = this;\r\n        window.addEventListener('load', function () {\r\n            let updateOnlineStatus = function updateOnlineStatus() {\r\n                that.setOnline(navigator.onLine);\r\n            };\r\n            window.addEventListener('online', updateOnlineStatus);\r\n            window.addEventListener('offline', updateOnlineStatus);\r\n        });\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public setOnline(value: boolean) {\r\n        this.online = value;\r\n        if (this.toolBar.children[0]) {\r\n            this.toolBar.children[0].className = value ? 'online' : 'offline';\r\n        }\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addToolbar(): boolean {\r\n        if (this.toolBar) {\r\n            return false;\r\n        }\r\n        this.toolBar = document.createElement('div');\r\n        this.toolBar.className = 'onlineStatus';\r\n        let child = document.createElement('div');\r\n        child.className = 'online';\r\n        this.toolBar.appendChild(child);\r\n        child = document.createElement('div');\r\n        child.className = 'lang';\r\n        child.innerHTML = this.language;\r\n        this.toolBar.appendChild(child);\r\n\r\n        let body: HTMLElement = document.getElementsByTagName('body')[0];\r\n        body.insertBefore(this.toolBar, body.firstChild);\r\n        // Refresh Online Status\r\n        this.setOnline(this.online);\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addListener = function (listener: any) {\r\n        this.listener.push(listener);\r\n    };\r\n\r\n    public addControl(control: any) {\r\n        if (control && control.name) {\r\n            this.controlFactory[control.name.toLowerCase()] = control;\r\n        }\r\n    }\r\n\r\n    public getId(): string {\r\n        return 'control' + (this.controlNo++);\r\n    }\r\n\r\n    public adapterUpdate(message: string) {\r\n        let keys: string[] = Object.keys(this.adapters);\r\n        if (keys.length > 0) {\r\n            let i;\r\n            for (i = 0; i < keys.length; i++) {\r\n                let adapterList = this.adapters[keys[i]];\r\n                if (adapterList instanceof Adapter) {\r\n                    adapterList.update(message);\r\n                } else {\r\n                    for (let adapter of adapterList) {\r\n                        adapter.update(message);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        let config = {}, className: string, id: string;\r\n        if (typeof(json) === 'string') {\r\n            // Only a String\r\n            config['id'] = '' + json;\r\n            let item = document.getElementById(config['id']);\r\n            let className: string;\r\n            if (item) {\r\n                className = item.getAttribute('class');\r\n                if (!className) {\r\n                    className = item.getAttribute('classname') || '';\r\n                }\r\n                // Found Element and now config Data element\r\n                if (item.getAttribute('property')) {\r\n                    if (this.hasItem(item.getAttribute('property'))) {\r\n                        let data = this.getItem(item.getAttribute('property'));\r\n                        for (let key in data.prop) {\r\n                            if (item.getAttribute(key)) {\r\n                                data.setValue(key, item.getAttribute(key));\r\n                            }\r\n                        }\r\n                        if (item.getAttribute('property')) {\r\n                            // TODO: FIXME!!!\r\n                            // data.property = item.getAttribute(\"property\");\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                className = '' + json;\r\n            }\r\n            className = className.toLowerCase();\r\n            config['className'] = className;\r\n        } else {\r\n            config = <JSON>json;\r\n        }\r\n        // Config validate\r\n        if (!config['id']) {\r\n            config['id'] = this.getId();\r\n        }\r\n        // Backup for Old Graph\r\n        if (!config['className'] && (config['type'] === 'clazzdiagram' || config['type'] === 'objectdiagram')) {\r\n            config['className'] = 'graph';\r\n        }\r\n\r\n        className = config['className'] || config['class'];\r\n        className = className.toLocaleLowerCase();\r\n        id = config['id'];\r\n\r\n        // Check For Control or Data\r\n        if ((config['prop'] || config['upd'] || config['rem']) && this.controls[id] === null) {\r\n            // Its Data\r\n            let newData = !this.hasItem(config['id']);\r\n            let item: Data = this.getItem(config['id']);\r\n            // TODO: FIXME!!!\r\n            // if (id && className && !item.property) {\r\n            //      item.property = className;\r\n            // }\r\n            if (newData) {\r\n                for (let i in this.controls) {\r\n                    if (this.controls.hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    this.controls[i].addItem(this, item);\r\n                }\r\n            }\r\n            // Add all Values to item\r\n            item.addProperties(config);\r\n            // Bridge.addProperties(config['prop'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return item;\r\n        }\r\n\r\n        let control;\r\n        if (this.controls[id]) {\r\n            control = this.controls[id];\r\n            control.initControl(json);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return control;\r\n        }\r\n\r\n        if (typeof(this.controlFactory[className]) === 'object' || typeof(this.controlFactory[className]) === 'function') {\r\n            let obj = this.controlFactory[className];\r\n            control = new obj(json);\r\n            Util.initControl(owner || this, control, config['property'], id, json);\r\n\r\n            if (control.id) {\r\n                this.controls[control.id] = control;\r\n            } else {\r\n                this.controls[id] = control;\r\n            }\r\n\r\n            // create DataObject and register this control as listener to it\r\n            // let obj = {id:id};\r\n            // let data: Data = this.load(obj);\r\n            // data.addListener(this);\r\n\r\n            // Try to Show\r\n            if (typeof control.getSVG === 'function' && typeof control.getSize === 'function') {\r\n                let size: Point = control.getSize();\r\n\r\n                let svg = Util.createShape({\r\n                    tag: 'svg',\r\n                    id: 'root',\r\n                    width: size.x,\r\n                    height: size.y\r\n                });\r\n\r\n                let view = control.getSVG();\r\n                svg.appendChild(view);\r\n                document.getElementsByTagName('body')[0].appendChild(svg);\r\n            }\r\n            return control;\r\n        }\r\n        return null;\r\n        // bridge.load('{class:table, columns:[{id:'firstname'}, {id:'lastname'}]}');\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n\r\n        if (this.items[id] !== undefined) {\r\n            return true;\r\n        }\r\n        id = id.split('.')[0];\r\n        return (this.items[id] !== undefined);\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return this.items;\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        let item = this.items[id];\r\n        if (!item) {\r\n            id = id.split('.')[0];\r\n            item = this.items[id];\r\n            if (!item) {\r\n                item = new Data();\r\n                item.id = id;\r\n                this.items[id] = item;\r\n            }\r\n        }\r\n        return item;\r\n    }\r\n\r\n    /**\r\n     * Method for executing user input -> Event\r\n     * @param object\r\n     * @param attribute\r\n     * @param oldValue\r\n     * @param newValue\r\n     * @returns {boolean}\r\n     */\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        alert('Bridge.setValue: oldVal:' + oldValue + ', newVal: ' +  + newValue + ', attribute: ' + attribute + ', object: ' + JSON.stringify(object));\r\n        let obj: Data;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n\r\n        } else if (object instanceof Data) {\r\n            obj = object;\r\n            id = object.id;\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = <Data>object;\r\n            id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return false;\r\n        }\r\n        if (obj) {\r\n            // Execute Update to Data\r\n            obj.setValue(attribute, newValue);\r\n            // Could be done here, but currently is done at this.execueChange..:\r\n            // obj[attribute] = value;\r\n        }\r\n\r\n        /*let tmp = {'id': id};\r\n        if (typeof(newValue) !== 'undefined' && newValue !== null) {\r\n            let upd = {};\r\n            upd[attribute] = newValue;\r\n            tmp['upd'] = upd;\r\n        }\r\n        if (typeof(oldValue) !== 'undefined' && oldValue !== null) {\r\n            let rem = {};\r\n            rem[attribute] = oldValue;\r\n            tmp['rem'] = rem;\r\n        }*/\r\n        // this.load(tmp);\r\n        return true;\r\n    }\r\n\r\n    public getValue(object: Object, attribute: string): any {\r\n        let obj: Object;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = object;\r\n            // id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return;\r\n        }\r\n        if (obj) {\r\n            if (obj.hasOwnProperty(attribute)) {\r\n                return obj[attribute];\r\n            } else if (obj instanceof Data) {\r\n                return (<Data>obj).getValue(attribute);\r\n            } else {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    public getNumber(object: Object, attribute: string, defaultValue: number = 0): number {\r\n        let res = <number>this.getValue(object, attribute);\r\n        if (typeof res === 'number') {\r\n            return res;\r\n        } else if (typeof res === 'string') {\r\n            // check whether res is a number\r\n            let value = Number(res);\r\n            if (value || value === 0) {\r\n                return value;\r\n            }\r\n        }\r\n        return defaultValue;\r\n    }\r\n\r\n    getControl(controlId: string) {\r\n        return this.controls[controlId];\r\n    }\r\n\r\n    public registerListener(eventType: string, control: Control, callBackfunction: string): Control {\r\n        if (typeof control === 'string') {\r\n            control = this.getControl(<string>control);\r\n        }\r\n        if (!control) {\r\n            return null;\r\n        }\r\n        if (eventType) {\r\n            eventType = eventType.toLowerCase();\r\n        }\r\n        control.registerListenerOnHTMLObject(eventType);\r\n        if (callBackfunction) {\r\n            let adapter: DelegateAdapter = new DelegateAdapter();\r\n            adapter.callBackfunction = callBackfunction;\r\n            adapter.id = control.getId();\r\n            this.addAdapter(adapter, eventType);\r\n        }\r\n        return control;\r\n    }\r\n\r\n    public addAdapter(adapter: Adapter | string, eventType: string): Adapter {\r\n        if (!eventType) {\r\n            eventType = '';\r\n        }\r\n        let result: Adapter;\r\n        if (adapter instanceof String) {\r\n            let obj = this.adapterFactory[adapter.toLowerCase()];\r\n            result = new obj();\r\n        } else {\r\n            result = <Adapter>adapter;\r\n        }\r\n        let handlers = this.adapters[eventType];\r\n\r\n        if (handlers === null || handlers === undefined) {\r\n            handlers = [];\r\n            this.adapters[eventType] = handlers;\r\n        }\r\n        handlers.push(result);\r\n        return result;\r\n    }\r\n\r\n    public fireEvent(evt: Event): void {\r\n        let handlers = this.adapters[''];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n        handlers = this.adapters[evt['eventType']];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport class DelegateAdapter extends Adapter {\r\n    adapter: Adapter;\r\n    callBackfunction: string;\r\n\r\n    update(evt: Event): boolean {\r\n        if (this.adapter) {\r\n            this.adapter.update(evt);\r\n            return true;\r\n        } else if (this.callBackfunction) {\r\n            return this.executeFunction(this.callBackfunction, evt);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public setAdapter(adapter: Adapter): boolean {\r\n        this.adapter = adapter;\r\n        return true;\r\n    }\r\n\r\n    private executeFunction(strValue: string, evt: Event): boolean {\r\n        let scope = window;\r\n        let scopeSplit = strValue.split('.');\r\n        for (let i = 0; i < scopeSplit.length - 1; i++) {\r\n            scope = scope[scopeSplit[i]];\r\n            if (scope === undefined) {\r\n                return false;\r\n            }\r\n        }\r\n        let fn: any = scope[scopeSplit[scopeSplit.length - 1]];\r\n        if (typeof fn === 'function') {\r\n            fn.call(scope);\r\n            return true;\r\n        } else {\r\n            window['callBack1'].update(evt);\r\n\r\n        }\r\n        return false;\r\n    }\r\n}\r\n","'use strict';\r\nimport Data from './Data';\r\n\r\nexport default class BridgeElement {\r\n    private static elementSet: BridgeElement[] = [];\r\n    public model: Data;\r\n    public id: string;\r\n    public gui: HTMLElement;\r\n\r\n    constructor(model: Data) {\r\n        this.model = model;\r\n        this.id = model.id;\r\n        BridgeElement.elementSet.push(this);\r\n    }\r\n}\r\n","import {Util} from './util';\r\n\r\n// \t\t\t\t######################################################### CSS #########################################################\r\nexport class CSS {\r\n    public css: Object;\r\n    private name: string;\r\n\r\n    constructor(name: string, item?: any) {\r\n        let i, value, border: string, prop, el;\r\n        this.name = name;\r\n        this.css = {};\r\n        if (!item) {\r\n            return;\r\n        }\r\n\r\n        el = window.getComputedStyle(item, null);\r\n        border = el.getPropertyValue('border');\r\n        for (i in el) {\r\n            prop = i;\r\n            value = el.getPropertyValue(prop);\r\n            if (value && value !== '') {\r\n                // optimize CSS\r\n                if (border) {\r\n                    if (prop === 'border-bottom' || prop === 'border-right' || prop === 'border-top' || prop === 'border-left') {\r\n                        if (value !== border) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-color' || prop === 'border-bottom-color' || prop === 'border-right-color' || prop === 'border-top-color' || prop === 'border-left-color') {\r\n                        if (border.substring(border.length - value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-width') {\r\n                        if (border.substring(0, value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else {\r\n                        this.css[prop] = value;\r\n                    }\r\n                } else {\r\n                    this.css[prop] = value;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public static getStdDef() {\r\n        let child, def = Util.create({tag: 'defs'});\r\n\r\n        child = Util.create({tag: 'filter', id: 'drop-shadow'});\r\n        child.appendChild(Util.create({tag: 'feGaussianBlur', 'in': 'SourceAlpha', result: 'blur-out', stdDeviation: 2}));\r\n        child.appendChild(Util.create({tag: 'feOffset', 'in': 'blur-out', dx: 2, dy: 2}));\r\n        child.appendChild(Util.create({tag: 'feBlend', 'in': 'SourceGraphic', mode: 'normal'}));\r\n        def.appendChild(child);\r\n        child = Util.create({tag: 'linearGradient', id: 'reflect', x1: 0, x2: 0, y1: '50%', y2: 0, spreadMethod: 'reflect'});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#aaa', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#eee', offset: '100%'}));\r\n        def.appendChild(child);\r\n\r\n        child = Util.create({tag: 'linearGradient', id: 'classelement', x1: 0, x2: '100%', y1: '100%', y2: 0});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#fff', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#d3d3d3', offset: 1}));\r\n        def.appendChild(child);\r\n\r\n        return def;\r\n    }\r\n\r\n    public static getSubstring(str: string, search: string, startChar: string, endChar: string, splitter: string): any {\r\n        let pos, end, count = 0, array = [];\r\n        pos = str.indexOf(search);\r\n        if (pos > 0) {\r\n            end = str.indexOf(startChar, pos);\r\n            pos = end + 1;\r\n            if (end > 0) {\r\n                while (end < str.length) {\r\n                    if (str.charAt(end) === startChar) {\r\n                        count += 1;\r\n                    }\r\n                    if (str.charAt(end) === endChar) {\r\n                        count -= 1;\r\n                        if (count === 0) {\r\n                            if (splitter && pos !== end) {\r\n                                array.push(str.substring(pos, end).trim());\r\n                            }\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (str.charAt(end) === splitter && count === 1) {\r\n                        array.push(str.substring(pos, end).trim());\r\n                        pos = end + 1;\r\n                    }\r\n\r\n                    end += 1;\r\n                }\r\n                if (splitter) {\r\n                    return array;\r\n                }\r\n                return str.substring(pos, end);\r\n            }\r\n            return str.substring(pos);\r\n        }\r\n        return '';\r\n    }\r\n\r\n    public static addStyle(board: SVGElement, styleName: any) {\r\n        let defs, style: any, css;\r\n        if (styleName.baseVal || styleName.baseVal === '') {\r\n            styleName = styleName.baseVal;\r\n        }\r\n        if (!styleName) {\r\n            return;\r\n        }\r\n        defs = CSS.getDefs(board);\r\n        if (defs.getElementsByTagName('style').length > 0) {\r\n            style = defs.getElementsByTagName('style')[0];\r\n        } else {\r\n            style = Util.create({tag: 'style'});\r\n            style.item = {};\r\n            defs.appendChild(style);\r\n        }\r\n        if (!style.item[styleName]) {\r\n            css = Util.getStyle(styleName);\r\n            style.item[styleName] = css;\r\n            style.innerHTML = style.innerHTML + '\\n.' + styleName + css.getSVGString(board);\r\n        }\r\n    }\r\n\r\n    public static addStyles(board: SVGElement, item: any) {\r\n        if (!item) {\r\n            return;\r\n        }\r\n        let items, i, className: any = item.className;\r\n\r\n        if (className) {\r\n            if (className.baseVal || className.baseVal === '') {\r\n                className = className.baseVal;\r\n            }\r\n        }\r\n        if (className) {\r\n            items = className.split(' ');\r\n            for (i = 0; i < items.length; i += 1) {\r\n                CSS.addStyle(board, items[i].trim());\r\n            }\r\n        }\r\n        for (i = 0; i < item.childNodes.length; i += 1) {\r\n            this.addStyles(board, item.childNodes[i]);\r\n        }\r\n    }\r\n\r\n    public static getDefs(board: SVGElement) {\r\n        let defs;\r\n        if (board.getElementsByTagName('defs').length < 1) {\r\n            defs = Util.create({tag: 'defs'});\r\n            board.insertBefore(defs, board.childNodes[0]);\r\n        } else {\r\n            defs = board.getElementsByTagName('defs')[0];\r\n        }\r\n        return defs;\r\n    }\r\n\r\n    public add(key: string, value: string) {\r\n        this.css[key] = value;\r\n    }\r\n\r\n    public get(key: string): any {\r\n        let i;\r\n        for (i in this.css) {\r\n            if (i === key) {\r\n                return this.css[key];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public getNumber(key: string) {\r\n        return parseInt((this.get(key) || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    public getSVGString(board: SVGElement) {\r\n        let str, pos, style, defs, value, filter, z;\r\n        str = '{';\r\n        for (style in this.css) {\r\n            if (!this.css.hasOwnProperty(style)) {\r\n                continue;\r\n            }\r\n            if (style === 'border') {\r\n                pos = this.css[style].indexOf(' ');\r\n                str = str + 'stroke-width: ' + this.css[style].substring(0, pos) + ';';\r\n                pos = this.css[style].indexOf(' ', pos + 1);\r\n                str = str + 'stroke:' + this.css[style].substring(pos) + ';';\r\n            } else if (style === 'background-color') {\r\n                str = str + 'fill: ' + this.css[style] + ';';\r\n            } else if (style === 'background') {\r\n                value = CSS.getSubstring(this.css[style], 'linear-gradient', '(', ')', ',');\r\n                if (value.length > 0) {\r\n                    defs = CSS.getDefs(board);\r\n                    if (value[0] === '45deg') {\r\n                        pos = 1;\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '100%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                    } else {\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '0%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                        pos = 0;\r\n                    }\r\n                    defs.appendChild(filter);\r\n                    while (pos < value.length) {\r\n                        value[pos] = value[pos].trim();\r\n                        z = value[pos].lastIndexOf(' ');\r\n                        filter.appendChild(Util.create({\r\n                            tag: 'stop',\r\n                            'offset': value[pos].substring(z + 1),\r\n                            style: {'stop-color': value[pos].substring(0, z)}\r\n                        }));\r\n                        pos += 1;\r\n                    }\r\n                    str = str + 'fill: url(#' + this.name + ');';\r\n                    continue;\r\n                }\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n                // box-shadow: inset 0 3px 4px #888;\r\n// \t\t\t\t<defs>\r\n// \t\t\t\t\t<filter id='drop-shadow'>\r\n// \t\t\t\t\t\t<feGaussianBlur in='SourceAlpha' result='blur-out' stdDeviation='2'></feGaussianBlur>\r\n// \t\t\t\t\t\t<feOffset in='blur-out' dx='2' dy='2'></feOffset>\r\n// \t\t\t\t\t\t<feBlend in='SourceGraphic' mode='normal'></feBlend>\r\n// \t\t\t\t\t</filter>\r\n// \t\t\t\t</defs>\r\n            } else {\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n            }\r\n        }\r\n        str = str + '}';\r\n        return str;\r\n    }\r\n}\r\n","import {Bridge} from './Bridge';\r\nimport Data from './Data';\r\nimport EventListener from './EventListener';\r\n\r\nexport abstract class Control {\r\n    public $owner: Control;\r\n    /**\r\n     *\r\n     */\r\n    public property: string;\r\n    public id: string;\r\n    public $view: Element;\r\n    public $viewData: Data = null;\r\n\r\n    protected $model: Data;\r\n    protected $viewListener: EventListenerOrEventListenerObject;\r\n\r\n    /**\r\n     * The properties, we want to listen to\r\n     */\r\n    // static defaultProperties: string[] = [];\r\n\r\n    // public getProperties(): string[] {\r\n    //     return this.properties;\r\n    // }\r\n\r\n    constructor() {\r\n        // e.g. this.properties.push(\"key\");\r\n        // this.properties.push(\"property\");\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data: Data = new Data();\r\n        if (oldData) {\r\n            oldData.removeListener(this);\r\n            const keys: string[] = oldData.getKeys();\r\n            for (let i = 0; i < keys.length; i++) {\r\n                let attr = keys[i];\r\n                if (this.$view) {\r\n                    if (this.$view[attr] === null) {\r\n                        continue;\r\n                    }\r\n                    data.setValue(attr, this.$view[attr]);\r\n                } else {\r\n                    data.setValue(attr, null);\r\n                }\r\n            }\r\n        }\r\n        data.addListener(this);\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     *  Set the new HTMLElement and attach listener to it.\r\n     *  Also remove Listeners from old one and return the old one, if present.\r\n     * @param element\r\n     * @returns The previous Element\r\n     */\r\n    public setView(element: Element): Element {\r\n        let oldElement: Element = null;\r\n        if (this.$view) {\r\n            oldElement = this.$view;\r\n            if (this.$viewListener) {\r\n                oldElement.removeEventListener('change', this.$viewListener);\r\n            }\r\n        }\r\n        this.$view = element;\r\n\r\n        if (this.$viewListener) {\r\n            element.addEventListener('change', this.$viewListener);\r\n        }\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n        return element;\r\n    }\r\n\r\n    public init(owner: Control, property ?: string, id ?: string): Control {\r\n        if (!this.$owner) {\r\n            this.$owner = owner;\r\n        }\r\n        if (!this.id) {\r\n            this.id = id;\r\n        }\r\n        if (!this.property) {\r\n            this.property = this.generateID(property, id);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public createEventListener(): EventListener {\r\n        return new EventListener();\r\n    }\r\n\r\n    public getRoot(): Control {\r\n        if (this.$owner) {\r\n            return this.$owner.getRoot();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return null;\r\n    }\r\n\r\n    public initControl(data: any): void {\r\n        if (this.$view === null || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (data.hasOwnProperty('prop')) {\r\n            for (let key in data.prop) {\r\n                let oldValue = this.$viewData.getValue(key);\r\n                if (this.$view) {\r\n                    this.updateElement(key, oldValue, data.prop[key]);\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        let hasRem = data.hasOwnProperty('rem');\r\n        let removed: any[] = [];\r\n        if (data.hasOwnProperty('upd')) {\r\n            for (let key in data.upd) {\r\n                let oldValue;\r\n                let newValue = data.upd[key];\r\n                let entity;\r\n                const temp = false;\r\n                if (temp) {\r\n//                if (newValue == this.getViewData().getValue(key)) {\r\n                    // new Value assertEquals old value, so we don't need to change anything..\r\n                    // delete data.rem[key];\r\n                    if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                        removed.push(data.rem[key]);\r\n                    }\r\n                    continue;\r\n                }\r\n                if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                    // if there's a rem, the oldValue from rem will be used and expected to be right..\r\n                    oldValue = data.rem[key];\r\n                    if (this.$model && this.$model.getValue(key) === oldValue) {\r\n                        entity = this.$model;\r\n//                    } else if (oldValue == this.getViewData().getValue(key)) {\r\n//                        $graphModel = this.getViewData();\r\n                    }\r\n                    delete data.rem[key];\r\n\r\n                    if (entity === null) {\r\n                        continue;\r\n                    }\r\n                }\r\n                if (entity) {\r\n                    if (!hasRem) {\r\n                        if (entity === this.$model) {\r\n                            oldValue = this.$model.getValue(key);\r\n                        } else {\r\n//                           oldValue = this.getViewData().getValue(key);\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (this.$model) {\r\n                        // try to get the oldValue directly from the $graphModel...\r\n                        oldValue = this.$model.getValue(key);\r\n                        entity = this.$model;\r\n                    }\r\n                    if (oldValue === null) {\r\n                        // if there was no data in the entity, we try to get oldValue from the $view\r\n//                        oldValue = this.getViewData().getValue(key);\r\n//                        entity = this.getViewData();\r\n                    }\r\n                }\r\n\r\n                //  || oldValue !== this.$viewData.getValue(key)\r\n                if (newValue === oldValue) {\r\n                    // no match, so update should be wrong...\r\n                    continue;\r\n                }\r\n                const viewDataOldValue = this.$viewData.getValue(key);\r\n                if (entity === this.$viewData) {\r\n\r\n                    // this.getViewData().setValue(key, newValue);\r\n                    if (this.$view) {\r\n                        this.updateElement(key, viewDataOldValue, newValue);\r\n                    }\r\n                } else {\r\n                    this.updateElement(key, viewDataOldValue, newValue);\r\n                }\r\n                this.getRoot().setValue(entity, key, newValue, oldValue);\r\n            }\r\n            // this.saveViewInData();\r\n        }\r\n        if (hasRem) {\r\n            for (let key in data.rem) {\r\n                if (removed.hasOwnProperty(key)) {\r\n                    continue;\r\n                }\r\n                let oldValue;\r\n//                    this.getViewData().getValue(key);\r\n//                if (oldValue != data.rem[key] || data.upd !== undefined && (data.upd[key] == oldValue || this.getViewData().getValue(key) == data.upd[key])) {\r\n                // if rem is invalid, or if the change is already applied, don't do anything..\r\n                //                  continue;\r\n                //            }\r\n                // delete this.$viewData.getValue(key);\r\n                // this.saveViewInData();\r\n                this.updateElement(key, null, null);\r\n                // this.$view.removeAttribute(key);\r\n                if (this.$model) {\r\n//                    this.getRoot().setValue(this.$graphModel, key, this.getViewData().getValue(key), oldValue);\r\n                }\r\n            }\r\n        }\r\n        if (this.property) {\r\n            // Add listener to Input field:\r\n            this.$view['onchange'] = ((ev: Event) => {\r\n                    this.controlChanged(ev);\r\n                }\r\n            );\r\n        }\r\n//        this.saveViewInData();\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        return null;\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n        return false;\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return new Object();\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue ?: Object): boolean {\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Is called when a object, that the Control is listening to, changes its value.\r\n     * @param entity\r\n     * @param property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        if (oldValue === newValue || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (oldValue === this.$viewData.getValue(property)) {\r\n            return;\r\n        }\r\n        // Set NewData to ViewData and Fire PC\r\n        this.$viewData.setValue(property, newValue);\r\n\r\n//\r\n//\r\n//         // if (entity == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.entity) {\r\n//                 alert(\"entity = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.entity.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.entity, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the entity is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"entity = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n// >>>>>>> addOldFunctions\r\n        if (this.$viewData) {\r\n            this.$viewData.setValue(property, newValue);\r\n        }\r\n        if (this.$model) {\r\n            this.$model.setValue(property, newValue);\r\n        }\r\n        this.updateElement(property, oldValue, newValue);\r\n    }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            // Do Nothing\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  Update GUI Element\r\n     * @param {string} property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        if (this.$view && this.$view.hasAttribute(property)) {\r\n            this.$view.setAttribute(property, newValue);\r\n        }\r\n    }\r\n\r\n//        if (oldValue == newValue) {\r\n//            return;\r\n//        }\r\n//        if (oldValue == this.$viewData.getValue(property)) {\r\n//            return;\r\n//        }\r\n//        // Set NewData to ViewData and Fire PC\r\n//        this.$viewData.setValue(property, newValue);\r\n//\r\n//\r\n//\r\n//         // if ($graphModel == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.$graphModel) {\r\n//                 alert(\"$graphModel = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.$graphModel.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.$graphModel, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the $graphModel is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"$graphModel = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n\r\n    public getId(): string {\r\n        return this.id;\r\n    }\r\n\r\n    public load(json: JSON | Object, owner ?: Control): any {\r\n        // Do Nothing\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.property || entity.hasProperty(this.property)) {\r\n                entity.addListener(this, this.property);\r\n                this.$model = entity;\r\n            }\r\n        }\r\n    }\r\n\r\n    public appendChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.appendChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].appendChild(child.$view);\r\n        }\r\n    }\r\n\r\n    public removeChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.removeChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].removeChild(child.$view);\r\n        }\r\n    }\r\n\r\n    /*\r\n     Property looks like: 't1.talk'\r\n     */\r\n    public setProperty(property: string): void {\r\n        if (!this.property) {\r\n            return;\r\n        }\r\n        let objId = property.split('.')[0];\r\n        let object = null;\r\n        if (this.$owner.hasItem(objId)) {\r\n            object = this.$owner.getItem(objId);\r\n        }\r\n\r\n        // remove listener on old object\r\n        if (this.$model) {\r\n            // this.$graphModel.removeListener(this);\r\n            this.$model.removeListener(this, this.lastProperty);\r\n        }\r\n        this.property = property;\r\n\r\n        // add listener to object..\r\n        if (object) {\r\n            object.addListener(this, this.lastProperty);\r\n            this.$model = object;\r\n            this.updateElement(this.lastProperty, this.$viewData.getValue(this.lastProperty), object.prop[this.lastProperty]);\r\n        }\r\n    }\r\n\r\n    public registerListenerOnHTMLObject(eventType: string): boolean {\r\n        return this.registerEventListener(eventType, <HTMLElement>this.$view);\r\n    }\r\n\r\n    // Normal Event HTML-Event\r\n    // Eventtype:string,\r\n    // id:string of Control\r\n    public fireEvent(evt: Event): void {\r\n        // Do Nothing\r\n    }\r\n\r\n    public isClosed(): boolean {\r\n        return this['closed'];\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        if (this.isClosed()) {\r\n            return this.$owner.getShowed();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * the id of the Data object, that contains the properties of the view\r\n     * @returns {string}\r\n     */\r\n    protected getControlDataID() {\r\n        return this.id + '_data';\r\n    }\r\n\r\n    protected generateID(property ?: string, id ?: string): string {\r\n        if (property) {\r\n            return property;\r\n        }\r\n        if (id) {\r\n            // will generate a data Object suitable for the Control..\r\n            // must be overridden, if the changeEvent shouldn't listen on value...\r\n//            return id + '.' + this.getStandardProperty();//+ \"_data\"\r\n            return id + '.' + '_data';\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected updateViewData() {\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n        const keys: string[] = this.$viewData.getKeys();\r\n        for (let i = 0; i < keys.length; i++) {\r\n            let attr = keys[i];\r\n            if (this.$view[attr] === null) {\r\n                continue;\r\n            }\r\n            this.$viewData.setValue(attr, this.$view[attr]);\r\n        }\r\n    }\r\n\r\n    protected registerEventListener(eventType: string, htmlElement: HTMLElement): boolean {\r\n        if (!htmlElement) {\r\n            return false;\r\n        }\r\n        if (htmlElement instanceof HTMLElement === false) {\r\n            return false;\r\n        }\r\n        let control = this;\r\n        let listener = (t: any) => {\r\n            t.eventType = eventType;\r\n            t.id = control.id;\r\n            control.$owner.fireEvent(t);\r\n        };\r\n        htmlElement.addEventListener(eventType, listener);\r\n        return true;\r\n    }\r\n\r\n    get lastProperty(): string {\r\n        if (!this.property) {\r\n            return '';\r\n        }\r\n        let arr: string[] = this.property.split('.');\r\n        return arr[arr.length - 1];\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\n\r\nexport default class Data {\r\n    public prop = {};\r\n    id: string;\r\n    // $listener: Control[] = [];\r\n    $listener: Object = {};\r\n\r\n    private static nullCheck(property: string): string {\r\n        if (property === undefined || property === null) {\r\n            property = '';\r\n        }\r\n        return property;\r\n    }\r\n    public getKeys(): string[] {\r\n        return Object.keys(this.prop);\r\n    }\r\n\r\n    public addProperties(values: Object) {\r\n        if (!values) {\r\n            return;\r\n        }\r\n        if (values['prop']) {\r\n            let prop = values['prop'];\r\n            for (let property in prop) {\r\n                if (prop.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (prop[property] !== null && '' !== prop[property]) {\r\n                    this.setValue(property, prop[property]);\r\n                }\r\n            }\r\n        } else {\r\n            let upd = values['upd'] || {};\r\n            let rem = values['rem'] || {};\r\n\r\n            for (let property in upd) {\r\n                if (upd.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (rem.hasOwnProperty(property) === false) {\r\n                    this.setValue(property, upd[property]);\r\n                } else {\r\n                    // if we have a rem, we wan't to check, if its a valid change (teh old value is the value in rem)\r\n                    if (this.getValue(property) === rem[property]) {\r\n                        this.setValue(property, upd[property]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getValue(attribute: string) {\r\n        return this.prop[attribute];\r\n    }\r\n\r\n    public setValue(attribute: string, newValue: any): void {\r\n        let oldValue = this.prop[attribute];\r\n        if (oldValue === newValue && newValue !== null) {\r\n            return;\r\n        }\r\n        this.prop[attribute] = newValue;\r\n        this.firePropertyChange(attribute, oldValue, newValue);\r\n    }\r\n\r\n    public addTo(attribute: string, newValue: any): boolean {\r\n        let add: boolean;\r\n        if (this.prop[attribute]) {\r\n            if (this.prop[attribute].contains(newValue) === false) {\r\n                add = true;\r\n            }\r\n        } else {\r\n            this.prop[attribute] = [];\r\n            add = true;\r\n        }\r\n        if (add) {\r\n            this.prop[attribute].push(newValue);\r\n            this.firePropertyChange(attribute, null, newValue);\r\n        }\r\n        return add;\r\n    }\r\n\r\n    public removeFrom(attribute: string, newValue: any): boolean {\r\n        if (!this.prop[attribute]) {\r\n            return true;\r\n        }\r\n        let pos: number = this.prop[attribute].indexOf(newValue);\r\n        if (pos < 0) {\r\n            return true;\r\n        }\r\n        this.prop[attribute].splice(pos, 1);\r\n        this.firePropertyChange(attribute, newValue, null);\r\n        return true;\r\n    }\r\n\r\n    public addListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(property);\r\n        if (!listeners) {\r\n            listeners = [];\r\n            this.$listener[Data.nullCheck(property)] = listeners;\r\n        }\r\n        listeners.push(control);\r\n    }\r\n\r\n    public removeListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners = this.getListeners(property);\r\n        if (listeners === null) {\r\n            return;\r\n        }\r\n        let pos = listeners.indexOf(control);\r\n        if (pos >= 0) {\r\n            listeners.splice(pos, 1);\r\n        }\r\n        if (listeners.length === 0 && Data.nullCheck(property) !== '') {\r\n            // only remove, if it's not the default listener list...\r\n            delete this.$listener[property];\r\n        }\r\n    }\r\n\r\n    public hasProperty(property: string): boolean {\r\n        return this.prop.hasOwnProperty(property);\r\n    }\r\n\r\n    public addFrom(attribute: string, oldData: Data): void {\r\n        if (oldData) {\r\n            this.setValue(attribute, oldData.getValue(attribute));\r\n        } else {\r\n            this.setValue(attribute, null);\r\n        }\r\n    }\r\n\r\n    public removeKey(key: string): any {\r\n        if (this.hasProperty(key)) {\r\n            const oldValue = this.prop[key];\r\n            delete this.prop[key];\r\n            return oldValue;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected getListeners(property: string): PropertyChangeSupport[] {\r\n        property = Data.nullCheck(property);\r\n        return this.$listener[property];\r\n    }\r\n\r\n    protected firePropertyChange(attribute: string, oldValue: Object, newValue: Object) {\r\n        attribute = Data.nullCheck(attribute);\r\n        // at first fire for the given property\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(attribute);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n        // now we need to fire the Listeners that wan't to listen to everything\r\n        listeners = this.getListeners(null);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport interface EventHandler {\r\n    canHandle(): boolean;\r\n    handle(event: Event, element: DiagramElement): boolean;\r\n    setActive(active: boolean): void;\r\n}\r\n\r\nexport class EventBus {\r\n    public static CREATE: string = 'Create';\r\n    public static EDITOR: string = 'Editor';\r\n    public static OPENPROPERTIES: string = 'openProperties';\r\n    public static RELOADPROPERTIES: string = 'reloadProperties';\r\n    public static ELEMENTMOUSEDOWN: string = 'ELEMENT:MOUSEDOWN';\r\n    public static ELEMENTMOUSEUP: string = 'ELEMENT:MOUSEUP';\r\n    public static ELEMENTMOUSELEAVE: string = 'ELEMENT:MOUSELEAVE';\r\n    public static ELEMENTMOUSEMOVE: string = 'ELEMENT:MOUSEMOVE';\r\n    public static ELEMENTMOUSEWHEEL: string = 'ELEMENT:MOUSEWHEEL';\r\n    public static ELEMENTCLICK: string = 'ELEMENT:CLICK';\r\n    public static ELEMENTDBLCLICK: string = 'ELEMENT:DBLCLICK';\r\n    public static ELEMENTDRAG: string = 'ELEMENT:DRAG';\r\n    public static ELEMENTDRAGOVER: string = 'ELEMENT:DRAGOVER';\r\n    public static ELEMENTDROP: string = 'ELEMENT:DROP';\r\n    public static ELEMENTDRAGLEAVE: string = 'ELEMENT:DRAGLEAVE';\r\n\r\n    public static EVENTS: string[] = [\r\n        EventBus.CREATE,\r\n        EventBus.EDITOR,\r\n        EventBus.OPENPROPERTIES,\r\n        EventBus.RELOADPROPERTIES,\r\n        EventBus.ELEMENTMOUSEDOWN,\r\n        EventBus.ELEMENTMOUSEUP,\r\n        EventBus.ELEMENTMOUSELEAVE,\r\n        EventBus.ELEMENTMOUSEMOVE,\r\n        EventBus.ELEMENTMOUSEWHEEL,\r\n        EventBus.ELEMENTCLICK,\r\n        EventBus.ELEMENTDRAG,\r\n        EventBus.ELEMENTDBLCLICK,\r\n        EventBus.ELEMENTDRAGOVER,\r\n        EventBus.ELEMENTDROP,\r\n        EventBus.ELEMENTDRAGLEAVE,\r\n    ];\r\n\r\n    private static handlers = {};\r\n\r\n    private static $activeHandler: string = '';\r\n\r\n    public static setActiveHandler(handler: string): void {\r\n        this.$activeHandler = handler;\r\n    }\r\n\r\n    public static isHandlerActiveOrFree(handler: string, notEmpty?: boolean): boolean {\r\n        if (notEmpty) {\r\n            return this.$activeHandler === handler;\r\n        }\r\n        return this.$activeHandler === handler || this.$activeHandler === '' || this.$activeHandler === undefined;\r\n    }\r\n\r\n    public static isAnyHandlerActive(): boolean {\r\n        return !(this.$activeHandler === '' || this.$activeHandler === undefined);\r\n    }\r\n\r\n    public static releaseActiveHandler(): void {\r\n        this.$activeHandler = '';\r\n    }\r\n\r\n    public static getActiveHandler(): string {\r\n        return this.$activeHandler;\r\n    }\r\n\r\n    static register(control: Control, view: Element) {\r\n        let events: string[];\r\n        if (typeof control['getEvents'] === 'function') {\r\n            events = control['getEvents']();\r\n        }\r\n\r\n        if (!events || !view) {\r\n            return;\r\n        }\r\n        for (let event of events) {\r\n            this.registerEvent(view, event, control);\r\n        }\r\n    }\r\n\r\n    static registerEvent(view: Element, event: string, control?: any) {\r\n        const pos: number = event.indexOf(':');\r\n        if (pos > 0) {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        } else {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        }\r\n    }\r\n\r\n    public static publish(element: DiagramElement, evt: Event) {\r\n        let handlers = EventBus.handlers[evt.type];\r\n        if (handlers) {\r\n            for (let handler of handlers) {\r\n                handler.handle(evt, element);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static subscribe(handler: EventHandler, ...eventTypes: string[]) {\r\n        for (let event of eventTypes) {\r\n            let handlers = EventBus.handlers[event];\r\n            if (handlers === null || handlers === undefined) {\r\n                handlers = [];\r\n                EventBus.handlers[event] = handlers;\r\n            }\r\n            handlers.push(handler);\r\n        }\r\n    }\r\n}\r\n","import SimpleEvent from './Event';\r\n\r\nexport default class EventListener {\r\n    private $onUpdate: Function;\r\n\r\n    get onUpdate(): Function {\r\n        return this.$onUpdate;\r\n    }\r\n\r\n    set onUpdate(value: Function) {\r\n        this.$onUpdate = value;\r\n    }\r\n\r\n    update(event: SimpleEvent) {\r\n        this.$onUpdate(event);\r\n    }\r\n}\r\n","// ################################## jsEPS ####################################################\r\nimport {SVGConverter} from './SVGConverter';\r\n\r\nexport class JSEPS {\r\n    private max: number;\r\n    private min: number;\r\n    private inverting: boolean;\r\n    private output: string[];\r\n    private font: number;\r\n\r\n    constructor(options: any) {\r\n        this.max = 0;\r\n        this.min = 999;\r\n        let hasInverting = typeof (options.inverting);\r\n        this.inverting = (options && hasInverting !== 'undefined' ? options.inverting : true);\r\n        this.output = ['%!PS-Adobe-3.0 EPSF-3.0', '1 setlinewidth'];\r\n        this.out('/FSD {findfont exch scalefont def} bind def % In the document prolog: define');\r\n        this.out('/SMS {setfont moveto show} bind def % some useful procedures');\r\n        this.out('/MS {moveto show} bind def');\r\n        this.out('/F1  10  /Helvetica  FSD % At the start of the script: set up');\r\n        this.font = 1;\r\n    }\r\n\r\n    public out(value: string) {this.output.push(value); }\r\n    public rect(x: number, y: number, width: number, height: number, style: string) {\r\n        y = y + (this.inverting ? height : 0);\r\n        if (style && style.indexOf('fill:url(#classelement);') >= 0) {\r\n            this.out('gsave 0.93 0.93 0.93 setrgbcolor newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectfill grestore');\r\n        } else {\r\n            this.out('newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectstroke');\r\n        }\r\n    }\r\n    public setFillColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public y(value: number) {this.max = Math.max(this.max, value); this.min = Math.min(this.min, value); return this.inverting ? '%y(' + value + ')' : value; }\r\n    public getType(): string {\r\n        return 'application/postscript';\r\n    }\r\n\r\n    public getData(): string {\r\n        let t, end, url, text, typ = 'application/postscript', a = document.createElement('a'), data = '', pos, i;\r\n        for (i = 0; i < this.output.length; i += 1) {\r\n            text = this.output[i];\r\n            if (this.inverting) {\r\n                while ((pos = text.indexOf('%y')) >= 0) {\r\n                    end = text.indexOf(')', pos);\r\n                    t = this.max - parseInt(text.substring(pos + 3, end), 10);\r\n                    text = text.substring(0, pos) + t + text.substring(end + 1);\r\n                }\r\n            }\r\n            data = data + text + '\\r\\n';\r\n        }\r\n        return data;\r\n    }\r\n\r\n    public setDrawColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public ellipse(cx: number, cy: number, rx: number, ry: number, colorMode: string) {/*FIXME*/}\r\n    public circle(cx: number, cy: number, r: number, colorMode: string) {/*FIXME*/}\r\n    public setTextColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public text(x: number, y: number, text: string) {this.out('(' + text.replace('&lt;', '<').replace('&gt;', '>') + ') ' + x + ' ' + this.y(y) + ' F1 SMS'); }\r\n    public lineto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' lineto'); this.out('stroke'); }\r\n    public moveto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' moveto'); }\r\n    public line(x1: number, y1: number, x2: number, y2: number) {this.out('newpath ' + x1 + ' ' + this.y(y1) + ' moveto ' + x2 + ' ' + this.y(y2) + ' lineto stroke'); }\r\n    public setLineWidth(value: string) {this.out(value + ' setlinewidth'); }\r\n    public setFont(value: string) {this.out('/F' + (this.font += 1) + ' 10 /' + value + ' FSD'); }\r\n}\r\n","import { Graph } from './elements/Graph';\r\n\r\n/*const buttons = {\r\n    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    clazz: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n};\r\n*/\r\nexport default class Palette {\r\n\r\n    private graph: Graph;\r\n    private palette: Element;\r\n    private root: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n        let div = document.createElement('div');\r\n        div.className = 'palette';\r\n        div.id = 'palette';\r\n        this.root = div;\r\n        this.palette = div;\r\n        for (let key in graph.nodeFactory) {\r\n            let element = graph.nodeFactory[key];\r\n            let control = new element();\r\n            let icon = control.getToolBarIcon();\r\n            if (icon) {\r\n                let button = <HTMLButtonElement>document.createElement('button');\r\n                button.className = 'add' + key + 'Btn';\r\n                button.innerHTML = icon.outerHTML;\r\n                button.onclick = e => {\r\n                    let nextFreePosition = this.graph.getNextFreePosition();\r\n                    // let node = this.graph.addElementWithValues(graph.nodeFactory[key], {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    let node = this.graph.addElementWithValues(key, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    this.graph.drawElement(node);\r\n                };\r\n                this.palette.appendChild(button);\r\n            }\r\n        }\r\n        // this.graph.nodeFactory\r\n//        this.addButtons();\r\n    }\r\n\r\n    public show() {\r\n        document.body.appendChild(this.root);\r\n    }\r\n\r\n    private addButtons() {\r\n        /*for (let btn in buttons) {\r\n            let button = <HTMLButtonElement>document.createElement('button');\r\n            button.className = 'add' + btn + 'Btn';\r\n            button.innerHTML = buttons[btn];\r\n            button.onclick = e => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let node = this.graph.addElementWithValues(btn, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                this.graph.drawElement(node);\r\n            };\r\n            this.palette.appendChild(button);\r\n        }*/\r\n    }\r\n}\r\n","import {Graph} from './elements/Graph';\r\nimport * as edges from './elements/edges';\r\nimport {EventBus, EventHandler} from './EventBus';\r\nimport {DiagramElement} from './elements/BaseElements';\r\nimport {Util} from './util';\r\n\r\nexport class PanelGroup implements EventHandler {\r\n    private graph: Graph;\r\n    private selectedElement: DiagramElement;\r\n    private clearPanel: Panel;\r\n    private generatePanel: Panel;\r\n    private propertiesMasterPanel: HTMLDivElement;\r\n    private propertiesContent: HTMLDivElement;\r\n    private propHeaderLabel: HTMLDivElement;\r\n    private propHeaderButton: HTMLButtonElement;\r\n    private selectedPanel: Panel;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.clearPanel = new ClearPanel(this);\r\n        this.generatePanel = new GeneratePanel(this);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        this.handleOpenProperties(event, element);\r\n\r\n        if (event.type === EventBus.RELOADPROPERTIES\r\n            && this.selectedElement && element.id === this.selectedElement.id) {\r\n            this.handleEvent(event, element);\r\n        }\r\n\r\n        // the same element was clicked. do nothing\r\n        if (this.selectedElement && this.selectedElement.id === element.id) {\r\n            return true;\r\n        }\r\n        if (element.id === 'RootElement') {\r\n            this.setActivePanel(this.clearPanel);\r\n        }\r\n        if (element.id === 'GenerateProp') {\r\n            this.setActivePanel(this.generatePanel);\r\n        }\r\n        this.selectedElement = element;\r\n\r\n        return true;\r\n    }\r\n\r\n    public getGraph(): Graph {\r\n        return this.graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(PanelGroup.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(PanelGroup.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n     public handleEvent(event: any, element: any) {\r\n        // DO NOTHING\r\n    }\r\n\r\n    public show() {\r\n        // main div to display any properties, class, edge, etc.\r\n        this.propertiesMasterPanel = document.createElement('div');\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n\r\n        this.propertiesContent = document.createElement('div');\r\n        this.propertiesContent.className = 'properties-hidden';\r\n\r\n        this.propHeaderLabel = document.createElement('div');\r\n        this.propHeaderLabel.style.display = 'inherit';\r\n        this.propHeaderLabel.style.cursor = 'pointer';\r\n        this.propHeaderLabel.onclick = e => this.toogleProperties(e);\r\n\r\n        // button to display and hide the properties of e.g. a class\r\n        this.propHeaderButton = document.createElement('button');\r\n        this.propHeaderButton.className = 'btnHideProp';\r\n        this.propHeaderButton.style.cssFloat = 'right';\r\n        this.propHeaderButton.onclick = e => this.toogleProperties(e);\r\n\r\n        let propertiesHeader = document.createElement('div');\r\n        propertiesHeader.style.display = 'inline';\r\n        propertiesHeader.appendChild(this.propHeaderLabel);\r\n        propertiesHeader.appendChild(this.propHeaderButton);\r\n\r\n        this.propertiesMasterPanel.appendChild(propertiesHeader);\r\n        this.propertiesMasterPanel.appendChild(this.propertiesContent);\r\n        document.body.appendChild(this.propertiesMasterPanel);\r\n\r\n        this.setActivePanel(this.clearPanel);\r\n    }\r\n\r\n    public setActivePanel(panel: Panel) {\r\n        this.selectedPanel = panel;\r\n        this.propHeaderLabel.innerHTML = panel.getHeaderText();\r\n        if (this.propertiesContent) {\r\n            while (this.propertiesContent.hasChildNodes()) {\r\n                this.propertiesContent.removeChild(this.propertiesContent.childNodes[0]);\r\n            }\r\n        }\r\n        panel.show();\r\n\r\n        panel.showFirstTab();\r\n        if (panel !== this.clearPanel) {\r\n            this.showProperties(null);\r\n        } else {\r\n            this.hideProperties(null);\r\n        }\r\n    }\r\n\r\n    public getProperiesContent(): HTMLDivElement {\r\n        return this.propertiesContent;\r\n    }\r\n\r\n    private handleOpenProperties(event: Event, element: DiagramElement) {\r\n        if (event.type === 'dblclick') {\r\n            this.showProperties(event);\r\n        }\r\n    }\r\n\r\n    private showProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Show\r\n        this.propHeaderButton.innerHTML = '&#8897;';\r\n        this.propHeaderButton.title = 'Hide properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel';\r\n        this.propertiesContent.className = 'properties';\r\n    }\r\n\r\n    private toogleProperties(evt: Event): void {\r\n        if (this.propHeaderButton.title === 'Show properties') {\r\n            this.showProperties(evt);\r\n        } else {\r\n            this.hideProperties(evt);\r\n        }\r\n    }\r\n\r\n    private hideProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Hide\r\n        this.propHeaderButton.innerHTML = '&#8896;';\r\n        this.propHeaderButton.title = 'Show properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n        this.propertiesContent.className = 'properties-hidden';\r\n    }\r\n}\r\n\r\nexport abstract class Panel {\r\n    protected divPropertiesPanel: HTMLDivElement;\r\n    protected divPropertiesTabbedPanel: HTMLDivElement;\r\n    protected element: any;\r\n    protected group: PanelGroup;\r\n    private panelItem: PanelItem[] = [];\r\n\r\n    constructor(group: PanelGroup, element: any) {\r\n        // get the properties content panel\r\n        this.divPropertiesPanel = document.createElement('div');\r\n        this.element = element;\r\n        this.group = group;\r\n\r\n        this.divPropertiesTabbedPanel = document.createElement('div');\r\n        this.divPropertiesTabbedPanel.className = 'tabbedpane';\r\n\r\n        // add tabbed panel\r\n        this.divPropertiesPanel.appendChild(this.divPropertiesTabbedPanel);\r\n    }\r\n\r\n    public show(): void {\r\n        let propertiesContent: HTMLDivElement = this.group.getProperiesContent();\r\n        if (this.panelItem.length > 1) {\r\n            propertiesContent.appendChild(this.getPropertiesTabbedPanel());\r\n        }\r\n\r\n        propertiesContent.appendChild(this.getPropertiesPanel());\r\n    }\r\n\r\n    public getPropertiesTabbedPanel(): HTMLDivElement {\r\n        return this.divPropertiesTabbedPanel;\r\n    }\r\n\r\n    public getPropertiesPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return '';\r\n    }\r\n\r\n    public showFirstTab(): void {\r\n        if (this.panelItem.length > 0) {\r\n            this.openTab(this.panelItem[0]);\r\n        }\r\n    }\r\n\r\n    protected createTabElement(tabText: string, tabValue: string, item: PanelItem): PanelItem {\r\n        let tabElementBtn = document.createElement('button');\r\n        tabElementBtn.className = 'tablinks';\r\n        tabElementBtn.innerText = tabText;\r\n        tabElementBtn.value = tabValue;\r\n\r\n        if (item === null) {\r\n            item = new PanelItem(this);\r\n        }\r\n        item.withButton(tabElementBtn);\r\n\r\n        tabElementBtn.onclick = () => this.openTab(item);\r\n        this.divPropertiesTabbedPanel.appendChild(tabElementBtn);\r\n        this.panelItem.push(item);\r\n        return item;\r\n    }\r\n\r\n    protected openTab(panelItem: PanelItem): void {\r\n        for (let key in this.panelItem) {\r\n            let child = this.panelItem[key];\r\n            if (child !== panelItem) {\r\n                 child.deactive();\r\n            }\r\n        }\r\n        panelItem.active();\r\n        // hide other tabcontent\r\n        if (this.divPropertiesPanel) {\r\n            while (this.divPropertiesPanel.hasChildNodes()) {\r\n                this.divPropertiesPanel.removeChild(this.divPropertiesPanel.childNodes[0]);\r\n            }\r\n        }\r\n\r\n        // ADD\r\n        if (panelItem.getContent()) {\r\n            this.divPropertiesPanel.appendChild(panelItem.getContent());\r\n        }\r\n    }\r\n}\r\n\r\nexport class GeneratePanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n\r\n        let item: PanelItem = this.createTabElement('General', 'General', null);\r\n\r\n        // Workspace and generate code stuff\r\n        let inputGenerateWorkspace: HTMLInputElement =  <HTMLInputElement> Util.createHTML({tag: 'input', id: 'workspace', type: 'text', placeholder: 'Type your Folder for generated code...', value: 'src/main/java', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Folder:', inputGenerateWorkspace);\r\n\r\n        let inputGeneratePackage: HTMLInputElement = <HTMLInputElement> Util.createHTML({tag: 'input', id: 'package', type: 'text', placeholder: 'Type your workspace for generated code...', value: '', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Package:', inputGeneratePackage);\r\n\r\n        let options = document.createElement('div');\r\n        options.style.textAlign = 'center';\r\n        options.style.margin = '3';\r\n        options.style.padding = '5';\r\n\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(options);\r\n\r\n        options.style.borderStyle = 'groove';\r\n        options.style.borderRadius = '10px';\r\n\r\n        let btnGenerate = document.createElement('button');\r\n        btnGenerate.textContent = 'Generate';\r\n        btnGenerate.title = 'Generate code into your workspace';\r\n        btnGenerate.className = 'OptionElement';\r\n\r\n        let that = this;\r\n        btnGenerate.onclick = () => {\r\n            let workspace = inputGeneratePackage.value;\r\n            if (workspace.length === 0) {\r\n                alert('No workspace set.\\nEnter first your workspace');\r\n                inputGeneratePackage.focus();\r\n                return;\r\n            }\r\n            that.group.getGraph().generate(workspace, inputGenerateWorkspace.value);\r\n        };\r\n        options.appendChild(btnGenerate);\r\n        options.appendChild(document.createElement('hr'));\r\n        options.appendChild(document.createElement('br'));\r\n\r\n        let btnAutoLayout = Util.createHTML({tag: 'button', className: 'OptionElement', value: 'Auto Layout', style: {marginRight: '10px'}, onclick: () => {\r\n                that.group.getGraph().layout();\r\n            }});\r\n\r\n        options.appendChild(btnAutoLayout);\r\n\r\n        // delete all nodes\r\n        let btnDeleteAll = document.createElement('button');\r\n        btnDeleteAll.className = 'OptionElement';\r\n        btnDeleteAll.textContent = 'Delete All';\r\n        btnDeleteAll.title = 'Delete all nodes from diagram';\r\n\r\n        btnDeleteAll.onclick = () => {\r\n            let confirmDelete = confirm('All classes will be deleted!');\r\n            if (!confirmDelete) {\r\n                return;\r\n            }\r\n            that.group.getGraph().$graphModel.removeAllElements();\r\n        };\r\n        btnDeleteAll.style.marginRight = '10px';\r\n        options.appendChild(btnDeleteAll);\r\n\r\n        // export stuff\r\n        let exportTypes: string[] = ['Export', 'HTML', 'JSON', 'PDF', 'PNG', 'SVG'];\r\n        let selectExport = document.createElement('select');\r\n\r\n        exportTypes.forEach(type => {\r\n            if (!(!window['jsPDF'] && type === 'PDF')) {\r\n                let option = document.createElement('option');\r\n                option.value = type;\r\n                option.textContent = type;\r\n                selectExport.appendChild(option);\r\n            }\r\n        });\r\n\r\n        selectExport.onchange = (evt) => {\r\n            let selectedExportType = selectExport.options[selectExport.selectedIndex].value;\r\n            selectExport.selectedIndex = 0;\r\n            that.group.getGraph().saveAs(selectedExportType);\r\n        };\r\n        selectExport.className = 'OptionElement';\r\n        options.appendChild(selectExport);\r\n        options.appendChild(document.createElement('br'));\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Properties';\r\n    }\r\n\r\n}\r\n\r\nexport class ClearPanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Select any element to see its properties';\r\n    }\r\n}\r\n\r\nexport class PanelItem {\r\n    protected panel: Panel;\r\n    protected label: string;\r\n    protected button: HTMLButtonElement;\r\n    protected content: HTMLDivElement = <HTMLDivElement>Util.create({tag: 'div', className: 'tabContent'});\r\n\r\n    constructor(panel: Panel, label?: string) {\r\n        this.panel = panel;\r\n        this.label = label;\r\n    }\r\n\r\n    public active(): void {\r\n        if (this.getButton()) {\r\n            this.getButton().className += ' active';\r\n        }\r\n    }\r\n\r\n    public deactive(): void {\r\n        if (this.getButton()) {\r\n            Util.removeClass(this.getButton(), 'active');\r\n        }\r\n    }\r\n\r\n    public withButton(button: HTMLButtonElement): PanelItem {\r\n        this.button = button;\r\n        return this;\r\n    }\r\n\r\n    public withContent(element: HTMLElement): PanelItem {\r\n        this.content.appendChild(element);\r\n        return this;\r\n    }\r\n\r\n    public withInput(labelText: string, element: HTMLElement): PanelItem {\r\n        let group: HTMLDivElement = <HTMLDivElement> Util.createHTML({tag: 'div'});\r\n        let label = Util.createHTML({tag: 'label', for: element.id, value: labelText});\r\n        group.appendChild(label);\r\n        group.appendChild(element);\r\n\r\n        this.content.appendChild(group);\r\n        return this;\r\n    }\r\n\r\n    public getButton(): HTMLButtonElement {\r\n        return this.button;\r\n    }\r\n\r\n    public getContent(): HTMLDivElement {\r\n        return this.content;\r\n    }\r\n\r\n   public getHeader(): string {\r\n        return this.label;\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\nimport Data from './Data';\r\n\r\nexport class PropertyBinder implements PropertyChangeSupport {\r\n    private propertyClass1: string;\r\n    private propertyClass2: string;\r\n    private data1: Data;\r\n    private data2: Data;\r\n    // works like a lock\r\n    private applyingChange: boolean = false;\r\n\r\n    constructor(data1: Data, data2: Data, propertyClass1: string, propertyClass2: string) {\r\n        this.data1 = data1;\r\n        this.data2 = data2;\r\n        this.propertyClass1 = propertyClass1;\r\n        this.propertyClass2 = propertyClass2;\r\n    }\r\n    static bind(data1: Data, data2: Data, property1: string, property2: string) {\r\n        if (!data1 || !data2 || !property1) {\r\n            console.error('NullValue!!');\r\n            return null;\r\n        }\r\n        const propertyBinder = new PropertyBinder(data1, data2, property1, property2);\r\n        propertyBinder.bind();\r\n        return propertyBinder;\r\n    }\r\n\r\n    propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        if (!this.applyingChange) {\r\n            this.applyingChange = true;\r\n            if (entity === this.data1) {\r\n                // fire to data2\r\n                this.data2.setValue(this.propertyClass2, newValue);\r\n            } else if (entity === this.data2) {\r\n                // fire to data1\r\n                this.data1.setValue(this.propertyClass1, newValue);\r\n            }\r\n            this.applyingChange = false;\r\n        }\r\n    }\r\n\r\n    protected bind() {\r\n        // public addListener(control: Control, property?: string)\r\n        // todo: set value immediately\r\n        this.data1.setValue(this.propertyClass1, this.data2.getValue(this.propertyClass2));\r\n\r\n        this.data1.addListener(this, this.propertyClass1);\r\n        this.data2.addListener(this, this.propertyClass2);\r\n    }\r\n\r\n    protected unbind() {\r\n        // public addListener(control: Control, property?: string)\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n    }\r\n}\r\n","// ################################## RGBColor ####################################################\r\nexport class RGBColor {\r\n    public  ok: boolean;\r\n    public r: number;\r\n    public g: number;\r\n    public b: number;\r\n\r\n    constructor(value: string) {\r\n        this.ok = false;\r\n        if (value === 'none') {\r\n            return;\r\n        }\r\n        let computedColor, div = document.createElement('div');\r\n        div.style.backgroundColor = value;\r\n        document.body.appendChild(div);\r\n        computedColor = window.getComputedStyle(div).backgroundColor;\r\n        // cleanup temporary div.\r\n        document.body.removeChild(div);\r\n        this.convert(computedColor);\r\n    }\r\n    public convert(value: any) {\r\n        let values, regex = /rgb *\\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\\)/;\r\n        values = regex.exec(value);\r\n        this.r = parseInt(values[1], 10);\r\n        this.g = parseInt(values[2], 10);\r\n        this.b = parseInt(values[3], 10);\r\n        this.ok = true;\r\n    }\r\n\r\n    public toRGB(): string {return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; }\r\n    public toHex(): string {\r\n        return '#' + (this.r + 0x10000).toString(16).substring(3).toUpperCase() + (this.g + 0x10000).toString(16).substring(3).toUpperCase() + (this.b + 0x10000).toString(16).substring(3).toUpperCase();\r\n    }\r\n}\r\n","/*\r\n NetworkParser\r\n Copyright (c) 2011 - 2014, Stefan Lindel\r\n All rights reserved.\r\n\r\n Licensed under the EUPL, Version 1.1 or (as soon they\r\n will be approved by the European Commission) subsequent\r\n versions of the EUPL (the \"Licence\");\r\n You may not use this work except in compliance with the Licence.\r\n You may obtain a copy of the Licence at:\r\n\r\n http://ec.europa.eu/idabc/eupl5\r\n\r\n Unless required by applicable law or agreed to in\r\n writing, software distributed under the Licence is\r\n distributed on an \"AS IS\" basis,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\r\n express or implied.\r\n See the Licence for the specific language governing\r\n permissions and limitations under the Licence.\r\n*/\r\nimport {RGBColor} from './RGBColor';\r\nimport {JSEPS} from \"./JSEPS\";\r\n\r\nconst epsSvgAttr = {\r\n    // allowed attributes. all others are removed from the preview.\r\n    g: ['stroke', 'fill', 'stroke-width'],\r\n    line: ['x1', 'y1', 'x2', 'y2', 'stroke', 'stroke-width'],\r\n    rect: ['x', 'y', 'width', 'height', 'stroke', 'fill', 'stroke-width'],\r\n    ellipse: ['cx', 'cy', 'rx', 'ry', 'stroke', 'fill', 'stroke-width'],\r\n    circle: ['cx', 'cy', 'r', 'stroke', 'fill', 'stroke-width'],\r\n    text: ['x', 'y', 'font-size', 'font-family', 'text-anchor', 'font-weight', 'font-style', 'fill'],\r\n    path: ['']\r\n};\r\nexport class SVGConverter {\r\n    private k: number;\r\n    private remove: boolean;\r\n    private target: any;\r\n\r\n    constructor(element: any, target: any, options: any) {\r\n        this.k = 1.0;\r\n        let hasScale = typeof (options.scale), hasRemoveInvalid = typeof (options.removeInvalid);\r\n        this.k = (options && hasScale !== 'undefined' ? options.scale : 1.0);\r\n        this.remove = (options && hasRemoveInvalid !== 'undefined' ? options.removeInvalid : false);\r\n        this.target = target;\r\n        this.parse(element);\r\n    }\r\n\r\n    public parse(element: any) {\r\n        let el, i, n, colorMode, hasFillColor, fillRGB, fillColor, strokeColor, strokeRGB, fontType, pdfFontSize, x, y,\r\n            box, xOffset;\r\n        if (!element) {\r\n            return;\r\n        }\r\n        if (typeof element === 'string') {\r\n            el = document.createElement('div');\r\n            el.innerHTML = element;\r\n            element = el.childNodes[0];\r\n        }\r\n        for (i = 0; i < element.children.length; i += 1) {\r\n            n = element.children[i];\r\n            colorMode = null;\r\n            hasFillColor = false;\r\n            if ('g,line,rect,ellipse,circle,text'.indexOf(n.tagName) >= 0) {\r\n                fillColor = n.getAttribute('fill');\r\n                if (fillColor) {\r\n                    fillRGB = new RGBColor(fillColor);\r\n                    if (fillRGB.ok) {\r\n                        hasFillColor = true;\r\n                        colorMode = 'F';\r\n                    }\r\n                }\r\n            }\r\n            if ('g,line,rect,ellipse,circle'.indexOf(n.tagName) >= 0) {\r\n                if (hasFillColor) {\r\n                    this.target.setFillColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                }\r\n                strokeColor = n.getAttribute('stroke');\r\n                if (n.hasAttribute('stroke-width')) {\r\n                    this.target.setLineWidth(this.attr(n, 'stroke-width'));\r\n                }\r\n                if (strokeColor) {\r\n                    strokeRGB = new RGBColor(strokeColor);\r\n                    if (strokeRGB.ok) {\r\n                        this.target.setDrawColor(strokeRGB.r, strokeRGB.g, strokeRGB.b);\r\n                        if (colorMode === 'F') {\r\n                            colorMode = 'FD';\r\n                        } else if (!hasFillColor) {\r\n                            colorMode = 'S';\r\n                        }\r\n                    } else {\r\n                        colorMode = null;\r\n                    }\r\n                }\r\n            }\r\n            // console.log(\"write \"+n.tagName);\r\n            switch (n.tagName.toLowerCase()) {\r\n                case 'svg':\r\n                case 'a':\r\n                case 'g':\r\n                    this.parse(n);\r\n                    break;\r\n                case 'line':\r\n                    this.target.line(this.attr(n, 'x1'), this.attr(n, 'y1'), this.attr(n, 'x2'), this.attr(n, 'y2'));\r\n                    break;\r\n                case 'rect':\r\n                    this.target.rect(this.attr(n, 'x'), this.attr(n, 'y'), this.attr(n, 'width'), this.attr(n, 'height'), n.getAttribute('style'));\r\n                    break;\r\n                case 'ellipse':\r\n                    this.target.ellipse(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'rx'), this.attr(n, 'ry'), colorMode);\r\n                    break;\r\n                case 'circle':\r\n                    this.target.circle(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'r'), colorMode);\r\n                    break;\r\n                case 'text':\r\n                    if (n.hasAttribute('font-family')) {\r\n                        switch (n.getAttribute('font-family').toLowerCase()) {\r\n                            case 'serif':\r\n                                this.target.setFont('times');\r\n                                break;\r\n                            case 'monospace':\r\n                                this.target.setFont('courier');\r\n                                break;\r\n                            default:\r\n                                n.getAttribute('font-family', 'sans-serif');\r\n                                this.target.setFont('Helvetica');\r\n                        }\r\n                    }\r\n                    if (hasFillColor) {\r\n                        this.target.setTextColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                    }\r\n                    if (this.target instanceof JSEPS) {\r\n                        this.target.text(this.attr(n, 'x'), this.attr(n, 'y'), n.innerHTML);\r\n                        break;\r\n                    }\r\n                    fontType = '';\r\n                    if (n.hasAttribute('font-weight')) {\r\n                        if (n.getAttribute('font-weight') === 'bold') {\r\n                            fontType = 'bold';\r\n                        }\r\n                    }\r\n                    if (n.hasAttribute('font-style')) {\r\n                        if (n.getAttribute('font-style') === 'italic') {\r\n                            fontType += 'italic';\r\n                        }\r\n                    }\r\n                    this.target.setFontType(fontType);\r\n                    pdfFontSize = 16;\r\n                    if (n.hasAttribute('font-size')) {\r\n                        pdfFontSize = parseInt(n.getAttribute('font-size'), 10);\r\n                    }\r\n                    box = n.getBBox();\r\n                    // FIXME: use more accurate positioning!!\r\n                    x = this.attr(n, 'x');\r\n                    y = this.attr(n, 'y');\r\n                    xOffset = 0;\r\n                    if (n.hasAttribute('text-anchor')) {\r\n                        switch (n.getAttribute('text-anchor')) {\r\n                            case 'end':\r\n                                xOffset = box.width;\r\n                                break;\r\n                            case 'middle':\r\n                                xOffset = box.width / 2;\r\n                                break;\r\n                            case 'start':\r\n                                break;\r\n                            case 'default':\r\n                                n.getAttribute('text-anchor', 'start');\r\n                                break;\r\n                        }\r\n                        x = x - (xOffset * this.k);\r\n                    }\r\n                    this.target.setFontSize(pdfFontSize).text(x, y, n.innerHTML);\r\n                    break;\r\n                default:\r\n                    if (this.remove) {\r\n                        console.log('cant translate to target:', n);\r\n                        element.removeChild(n);\r\n                        i -= 1;\r\n                    }\r\n            }\r\n        }\r\n    }\r\n\r\n    public attr(node: any, name: string) {\r\n        return this.k * parseInt(node.getAttribute(name), 10);\r\n    }\r\n}\r\n","import {Control} from './Control';\r\n\r\nexport class ScrumBoard extends Control {\r\n    public static cards = [0, 0.5, 1, 2, 3, 5, 8, 13, 20, 40, 100, '?', 'Coffee'];\r\n    private $selected: HTMLDivElement;\r\n    private $board: HTMLDivElement;\r\n\r\n    constructor() {\r\n        super();\r\n        this.redraw();\r\n    }\r\n\r\n    public redraw(): void {\r\n        if (this.$board) {\r\n            while (this.$board.children.length > 0 ) {\r\n                this.$board.removeChild(this.$board.children[0]);\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('div');\r\n            this.$selected = document.createElement('div');\r\n            this.$board = document.createElement('div');\r\n            this.$view.appendChild(this.$board);\r\n            this.$view.appendChild(this.$selected);\r\n        }\r\n        this.$view.className = 'ScrumBoard';\r\n        for ( let i = 0; i < ScrumBoard.cards.length; i++) {\r\n            let card = document.createElement('div');\r\n            card.className = 'ScrumCard';\r\n            card.innerHTML = <string>ScrumBoard.cards[i];\r\n            card['pokervalue'] = <string>ScrumBoard.cards[i];\r\n            card.onclick = e => {\r\n                this.onClick(<HTMLDivElement>e.target);\r\n            };\r\n            this.$board.appendChild(card);\r\n        }\r\n    }\r\n\r\n    public getSVG() {\r\n        this.redraw();\r\n        return this.$view;\r\n    }\r\n\r\n    public onClick(target: HTMLDivElement): void {\r\n        console.log(target['pokervalue']);\r\n\r\n        while (this.$selected.children.length > 0 ) {\r\n            this.$selected.removeChild(this.$selected.children[0]);\r\n        }\r\n        let card = document.createElement('div');\r\n        card.className = 'ScrumCard';\r\n        card['pokervalue'] = target['pokervalue'];\r\n        card.onclick = e => {\r\n            this.onShow(<HTMLDivElement>e.target);\r\n        };\r\n        this.$selected.appendChild(card);\r\n        this.$board['style']['display'] = 'none';\r\n    }\r\n\r\n    public onShow(target: HTMLDivElement): void {\r\n        target.innerHTML = target['pokervalue'];\r\n    }\r\n}\r\n","import {Graph} from './main';\r\nimport {SymbolLibary} from './elements/nodes/Symbol';\r\nimport {EventBus} from './EventBus';\r\n\r\nexport class Toolbar {\r\n\r\n    private graph: Graph;\r\n    private mainDiv: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public show(): void {\r\n        if (this.mainDiv) {\r\n            return;\r\n        }\r\n\r\n        this.mainDiv = document.createElement('div');\r\n        this.mainDiv.className = 'toolbar';\r\n\r\n        let h1Logo = document.createElement('h1');\r\n        h1Logo.className = 'logo';\r\n        h1Logo.textContent = 'DiagramJS';\r\n\r\n        let node = {type: 'Hamburger', property: 'HTML', width: 24, height: 24, id: 'GenerateProp'};\r\n        let hamburger = SymbolLibary.draw( node);\r\n        EventBus.registerEvent(hamburger, 'click', node);\r\n        this.mainDiv.appendChild(hamburger);\r\n\r\n        this.mainDiv.appendChild(h1Logo);\r\n        document.body.appendChild(this.mainDiv);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 06.03.2017.\r\n */\r\nimport Data from './Data';\r\n\r\n// export default class Data {\r\n//    public values = {};\r\n//    id: string;\r\n//    $listener: Control[] = [];\r\n//    property: string;\r\nexport namespace UML {\r\n    export class Clazz extends Data {\r\n        public static NAME: string = 'name';\r\n        public static ATTRIBUTES: string = 'attributes';\r\n        public static METHODS: string = 'methods';\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Clazz';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n\r\n        public getAttributes() {\r\n            return this.prop[Clazz.ATTRIBUTES];\r\n        }\r\n\r\n        public addToAttributes(newValue: string) {\r\n            this.addTo(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n\r\n        public removeFromAttributes(newValue: string) {\r\n            this.removeFrom(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n    }\r\n\r\n    export class Attribute extends Data {\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Attribute';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n    }\r\n\r\n    export class Methods extends Data {\r\n\r\n    }\r\n}\r\n\r\nwindow['UML'] = UML;\r\n","import {Control} from './Control';\r\n\r\nexport class VirtualKeyBoard extends Control {\r\n    constructor(data: any) {\r\n        super();\r\n        if (!data) {\r\n            data = this.getDefault();\r\n        }\r\n        let board = document.createElement('div');\r\n        this.$viewData = data;\r\n\r\n        for (let type in data) {\r\n            if (type === 'normal') {\r\n                for (let line in data[type]) {\r\n                    let lineBoard = document.createElement('div');\r\n                    lineBoard.className = 'vkLine';\r\n                    for (let key in data[type][line]) {\r\n                        let btn: HTMLButtonElement = document.createElement('button');\r\n                        let keyTag = data[type][line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                        btn.ontouchend = () => {this.action(btn); };\r\n                        btn.onclick = () => {this.action(btn); };\r\n                        lineBoard.appendChild(btn);\r\n                    }\r\n                    board.appendChild(lineBoard);\r\n                }\r\n            }\r\n        }\r\n        this.$view = board;\r\n    }\r\n\r\n    public action(btn: HTMLButtonElement) {\r\n        if (btn['key'] === '{Shift}') {\r\n            if ( btn.className === 'vkbuttonAction') {\r\n                let keys = this.$viewData['normal'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                    }\r\n                }\r\n            } else if ( btn.className === 'vkbutton') {\r\n                let keys = this.$viewData['shift'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbuttonAction');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        alert(btn);\r\n    }\r\n\r\n    public getDefault(): any {\r\n        let format = {\r\n            normal: [\r\n                ['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '?', '´', '{Bksp}'],\r\n                ['{Tab}', 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+'],\r\n                ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '#', '{enter}'],\r\n                ['{Shift}', '<', 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n// '{left}', '{up}', '{down}','{right}', '{Cancel}']\r\n            ],\r\n            shift: [\r\n                ['°', '!', '\"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '`', '{Bksp}'],\r\n                ['{Tab}', 'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', 'O', 'P', 'Ü', '*'],\r\n                ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', '\\'', '{enter}'],\r\n                ['{Shift}', '>', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n            ]\r\n        };\r\n        return format;\r\n    }\r\n\r\n    public getBoard() {\r\n        return this.$view;\r\n    }\r\n\r\n    private setButtonValue(keyTag: string, btn: HTMLButtonElement, shiftClass: string) {\r\n        btn.className = 'vkbutton';\r\n        btn['key'] = keyTag;\r\n        btn['type'] = 'normal';\r\n        if (keyTag.substring(0, 1) === '{') {\r\n            if (keyTag === '{Bksp}') {\r\n                btn.innerHTML = 'Bksp';\r\n            } else if (keyTag === '{Tab}') {\r\n                btn.innerHTML = '&#8677; Tab';\r\n            } else if (keyTag === '{enter}') {\r\n                btn.innerHTML = 'enter';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Shift}') {\r\n                btn.innerHTML = 'Shift';\r\n                btn.className = shiftClass;\r\n            } else if (keyTag === '{Accept}') {\r\n                btn.innerHTML = 'Accept';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Alt}') {\r\n                btn.innerHTML = 'Alt';\r\n            } else if (keyTag === '{Space}') {\r\n                btn.innerHTML = '&nbsp;';\r\n                btn.className = 'vkbuttonSpace';\r\n            } else if (keyTag === '{left}') {\r\n                btn.innerHTML = '&#8592';\r\n            } else if (keyTag === '{right}') {\r\n                btn.innerHTML = '&#8594;';\r\n            } else if (keyTag === '{up}') {\r\n                btn.innerHTML = '&#8593;';\r\n            } else if (keyTag === '{down}') {\r\n                btn.innerHTML = '&#8595;';\r\n            } else if (keyTag === '{Cancel}') {\r\n                btn.innerHTML = 'Cancel';\r\n                btn.className = 'vkbuttonAction';\r\n            }\r\n        } else {\r\n            btn.innerHTML = keyTag;\r\n        }\r\n    }\r\n}\r\n","import {Adapter} from '../Adapter';\r\n\r\nexport class JavaAdapter extends Adapter {\r\n    constructor() {\r\n        super();\r\n        this.id = 'JavaAdapter';\r\n    }\r\n    update(evt: Object): boolean {\r\n        if (this.isActive()) {\r\n            window['JavaBridge'].executeChange(evt);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public isActive(): boolean {\r\n        return window['JavaBridge'];\r\n    }\r\n}\r\n","export * from './JavaAdapter';\r\n","import { Util } from '../util';\r\nimport { Control } from '../Control';\r\n\r\nexport interface Size {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\ninterface GraphElement {\r\n    getSize(): Point;\r\n\r\n    getPos(): Point;\r\n\r\n    getCenter(): Point;\r\n\r\n    getSVG(): Element;\r\n\r\n    getCanvas(): Element;\r\n\r\n    getEvents(): string[];\r\n\r\n    withPos(x: number, y: number): GraphElement;\r\n\r\n    load(data: any): any;\r\n\r\n    getToolBarIcon(): Element;\r\n\r\n    loadProperties(properties: any): void;\r\n}\r\n\r\nexport abstract class DiagramElement extends Control implements GraphElement {\r\n\r\n    protected $isDraggable: boolean = true;\r\n    protected $labelHeight = 25;\r\n    protected $labelFontSize = 14;\r\n    private $pos: Point = new Point();\r\n    private $size: Point = new Point();\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getPos(): Point {\r\n        return this.$pos;\r\n    }\r\n\r\n    public getSize(): Point {\r\n        return this.$size;\r\n    }\r\n\r\n    public getCenter(): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        return new Point(pos.x + size.x / 2, pos.y + size.y / 2);\r\n    }\r\n\r\n    public getCenterPosition(p: string): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let offset = this['$' + p];\r\n        let center = this.getCenter();\r\n        if (p === Point.DOWN) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y + size.y, Point.DOWN);\r\n        }\r\n        if (p === Point.UP) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y, Point.UP);\r\n        }\r\n        if (p === Point.LEFT) {\r\n            return new Point(pos.x, Math.min(center.y + offset, pos.y + size.y), Point.LEFT);\r\n        }\r\n        if (p === Point.RIGHT) {\r\n            return new Point(pos.x + size.x, Math.min(center.y + offset, pos.y + size.y), Point.RIGHT);\r\n        }\r\n        return new Point();\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getCanvas(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return null;\r\n    }\r\n\r\n    public getAlreadyDisplayingSVG(): Element {\r\n        return document.getElementById(this.id) || this.getSVG();\r\n    }\r\n\r\n    public load(data: any) {\r\n        // Do Nothing\r\n    }\r\n\r\n    public withPos(x: number, y: number): GraphElement {\r\n        if (x && y) {\r\n            this.$pos = new Point(x, y);\r\n        } else {\r\n            if (typeof (x) !== 'undefined' && x !== null) {\r\n                this.$pos.x = x;\r\n            }\r\n            if (typeof (y) !== 'undefined' && y !== null) {\r\n                this.$pos.y = y;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public withSize(width: number, height: number): DiagramElement {\r\n        if (width && height) {\r\n            this.$size = new Point(width, height);\r\n        } else {\r\n            if (typeof (width) !== 'undefined' && width !== null) {\r\n                this.$size.x = width;\r\n            }\r\n            if (typeof (height) !== 'undefined' && height !== null) {\r\n                this.$size.y = height;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        // FIXME if (this.status === 'close') {\r\n        // if (!this.$owner.isClosed()) {\r\n        //        return this;\r\n        //    }\r\n        // }\r\n        return super.getShowed();\r\n    }\r\n\r\n    public loadProperties(properties: any) {\r\n        // DO Nothing\r\n    }\r\n\r\n    protected createShape(attrs: any): Element {\r\n        return Util.createShape(attrs);\r\n    }\r\n}\r\n\r\nexport class Point {\r\n    public static UP: string = 'UP';\r\n    public static LEFT: string = 'LEFT';\r\n    public static RIGHT: string = 'RIGHT';\r\n    public static DOWN: string = 'DOWN';\r\n    x: number = 0;\r\n    y: number = 0;\r\n\r\n    //    pos:string = '';\r\n\r\n    constructor(x?: number, y?: number, pos?: string) {\r\n        this.x = Math.ceil(x || 0);\r\n        this.y = Math.ceil(y || 0);\r\n        if (pos) {\r\n            this['pos'] = pos;\r\n        }\r\n    }\r\n\r\n    public add(pos: Point) {\r\n        this.x += pos.x;\r\n        this.y += pos.y;\r\n        return this;\r\n    }\r\n\r\n    public getPosition(): string {\r\n        if (!this['pos']) {\r\n            return '';\r\n        }\r\n        return this['pos'];\r\n    }\r\n\r\n    public addNum(x: number, y: number) {\r\n        this.x += x;\r\n        this.y += y;\r\n        return this;\r\n    }\r\n\r\n    public sum(pos: Point) {\r\n        let sum = new Point(this.x, this.y);\r\n        sum.add(pos);\r\n        return sum;\r\n    }\r\n\r\n    public center(posA: Point, posB: Point) {\r\n        let count = 0;\r\n        if (posA) {\r\n            this.x += posA.x;\r\n            this.y += posA.y;\r\n            count++;\r\n        }\r\n        if (posB) {\r\n            this.x += posB.x;\r\n            this.y += posB.y;\r\n            count++;\r\n        }\r\n        if (count > 0) {\r\n            this.x = (this.x / count);\r\n            this.y = (this.y / count);\r\n        }\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        return this.x < 1 && this.y < 1;\r\n    }\r\n\r\n    public size(posA: Point, posB: Point) {\r\n        let x1 = 0, x2 = 0, y1 = 0, y2 = 0;\r\n        if (posA) {\r\n            x1 = posA.x;\r\n            y1 = posA.y;\r\n        }\r\n        if (posB) {\r\n            x2 = posB.x;\r\n            y2 = posB.y;\r\n        }\r\n        if (x1 > x2) {\r\n            this.x = x1 - x2;\r\n        } else {\r\n            this.x = x2 - x1;\r\n        }\r\n        if (y1 > y2) {\r\n            this.y = y1 - y2;\r\n        } else {\r\n            this.y = y2 - y1;\r\n        }\r\n    }\r\n}\r\n\r\n// \t\t\t\t######################################################### Line #########################################################\r\nexport class Line extends DiagramElement {\r\n    public static FORMAT = { SOLID: 'SOLID', DOTTED: 'DOTTED', PATH: 'PATH' };\r\n    public source: Point;\r\n    public target: Point;\r\n    public color: string;\r\n    public lineType: string;\r\n    private path: string;\r\n    private angle: Number;\r\n\r\n    constructor(lineType: string) {\r\n        super();\r\n        this.lineType = lineType;\r\n    }\r\n\r\n    public getTyp(): string {\r\n        return 'SVG';\r\n    }\r\n\r\n    public getPos() {\r\n        let pos = new Point();\r\n        pos.center(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public getSize() {\r\n        let pos = new Point();\r\n        pos.size(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public withColor(color: string): Line {\r\n        this.color = color;\r\n        return this;\r\n    }\r\n\r\n    public withSize(x: number, y: number): DiagramElement {\r\n        return this;\r\n    }\r\n\r\n    public withPath(path: Array<Point>, close: boolean, angle?: any): Line {\r\n        let i: number, d: string = 'M' + path[0].x + ' ' + path[0].y;\r\n        this.lineType = Line.FORMAT.PATH; // It is a Path not a Line\r\n        for (i = 1; i < path.length; i += 1) {\r\n            d = d + 'L ' + path[i].x + ' ' + path[i].y;\r\n        }\r\n        if (close) {\r\n            d = d + ' Z';\r\n            this.target = path[0];\r\n        } else {\r\n            this.target = path[path.length - 1];\r\n        }\r\n        this.path = d;\r\n        if (angle instanceof Number) {\r\n            this.angle = angle;\r\n        } else if (angle) {\r\n            // var lineangle, start = path[0], end = path[path.length - 1];\r\n            // lineangle = Math.atan2(end.y - start.y, end.x - start.x);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): SVGGElement {\r\n        if (this.lineType === 'PATH') {\r\n            return <SVGGElement>Util.create({\r\n                tag: 'path',\r\n                'd': this.path,\r\n                'fill': this.color,\r\n                stroke: '#000',\r\n                'stroke-width': '1px'\r\n            });\r\n        }\r\n        let line: SVGGElement = <SVGGElement>Util.create({\r\n            tag: 'line',\r\n            'x1': this.source.x,\r\n            'y1': this.source.y,\r\n            'x2': this.target.x,\r\n            'y2': this.target.y,\r\n            'stroke': Util.getColor(this.color)\r\n        });\r\n        if (this.lineType && this.lineType.toLowerCase() === 'dotted') {\r\n            line.setAttribute('stroke-miterlimit', '4');\r\n            line.setAttribute('stroke-dasharray', '1,1');\r\n        }\r\n        return line;\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport Options from '../Options';\r\nimport {JavaAdapter} from '../adapters';\r\n\r\nexport class ClassEditor extends Graph {\r\n    private adapter: JavaAdapter;\r\n    constructor(json: any, options: Options) {\r\n        if (!options ) {\r\n            options = {};\r\n        }\r\n        options.canvas = options.canvas || 'canvas';\r\n        // options.origin = options.origin || new Point(150, 45);\r\n//            layout: \"DagreLayout\",\r\n        options.autoSave = options.autoSave || true;\r\n        if (!options.features) {\r\n            options.features = {\r\n                drag: true,\r\n                editor: true,\r\n                palette: true,\r\n                select: true,\r\n                zoom: true,\r\n                toolbar: true,\r\n                import: true,\r\n                properties: true,\r\n                addnode: true,\r\n                newedge: true\r\n            };\r\n        }\r\n        super(json, options);\r\n    }\r\n\r\n    public setBoardStyle(value: string) {\r\n        console.log(value);\r\n        this.importFile.setBoardStyle(value);\r\n    }\r\n\r\n    public registerListener(): void {\r\n        this.adapter = new JavaAdapter();\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return this.adapter;\r\n    }\r\n}\r\n","import * as edges from './edges';\r\nimport { Association } from './edges';\r\nimport * as nodes from './nodes';\r\nimport * as layouts from '../layouts';\r\nimport Layout from '../layouts/Layout';\r\nimport { GraphModel } from './Model';\r\nimport { Point, Size } from './BaseElements';\r\nimport { Util } from '../util';\r\nimport { Control } from '../Control';\r\nimport Data from '../Data';\r\nimport { EventBus } from '../EventBus';\r\nimport { AddNode, Drag, NewEdge, Select, Zoom } from '../handlers';\r\nimport Options from '../Options';\r\nimport { ImportFile } from '../handlers/ImportFile';\r\nimport { CSS } from '../CSS';\r\nimport { DiagramElement } from './index';\r\nimport { Toolbar } from '../Toolbar';\r\nimport {JSEPS} from '../JSEPS';\r\nimport {SVGConverter} from '../SVGConverter';\r\nimport Palette from '../Palette';\r\nimport {PanelGroup} from '../PropertiesPanel';\r\n\r\nexport class Graph extends Control {\r\n    // canvas: HTMLElement;\r\n    root: SVGElement;\r\n    $graphModel: GraphModel;\r\n    options: Options;\r\n    canvasSize: Size;\r\n    nodeFactory: Object;\r\n    edgeFactory: Object;\r\n    layoutFactory: Object;\r\n    protected importFile: ImportFile;\r\n    private currentlayout: Layout;\r\n    // private layerToolBar: SVGSVGElement;\r\n    // https://stackoverflow.com/questions/15181452/how-to-save-export-inline-svg-styled-with-css-from-browser-to-image-file\r\n    private containerElements = ['svg', 'g'];\r\n    private relevantStyles = {\r\n        'rect': ['fill', 'stroke', 'stroke-width'],\r\n        'path': ['fill', 'stroke', 'stroke-width', 'opacity'],\r\n        'circle': ['fill', 'stroke', 'stroke-width'],\r\n        'line': ['stroke', 'stroke-width'],\r\n        'text': ['fill', 'font-size', 'text-anchor', 'font-family'],\r\n        'polygon': ['stroke', 'fill']\r\n    };\r\n\r\n    constructor(json: any, options: Options) {\r\n        super();\r\n        json = json || {};\r\n        if (json['data']) {\r\n            options = json['options'];\r\n            json = json['data'];\r\n            this.id = json['id'];\r\n        }\r\n        this.options = options || {features: { drag: true}};\r\n        if (json['init']) {\r\n            return;\r\n        }\r\n        if (!this.options.origin) {\r\n            this.options.origin = new Point(150, 45);\r\n        }\r\n        if (!this.options.style) {\r\n            // Style can be classic or modern\r\n            this.options.style = 'classic';\r\n        }\r\n        if (this.options.autoSave) {\r\n            Util.isAutoSave = options.autoSave;\r\n        }\r\n\r\n        this.initFactories();\r\n        this.initCanvas();\r\n        this.initFeatures(this.options.features);\r\n\r\n        // load previous session, if user wants it\r\n        // otherwise load the json data\r\n        if (!this.lookupInLocalStorage()) {\r\n            this.load(json);\r\n        }\r\n\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    public lookupInLocalStorage(): boolean {\r\n        if (!this.options.autoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (!Util.isLocalStorageSupported()) {\r\n            return false;\r\n        }\r\n        let diagram = Util.getDiagramFromLocalStorage();\r\n        if (diagram && diagram.length > 0) {\r\n            if (confirm('Restore previous session?')) {\r\n                let jsonData: JSON = JSON.parse(diagram);\r\n                this.load(jsonData);\r\n                this.layout();\r\n                return true;\r\n            } else {\r\n                Util.saveToLocalStorage( null);\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public fitSizeOnNodes(): void {\r\n        let maxWidth: number = 0;\r\n        let maxHeight: number = 0;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            let nodePos = node.getPos();\r\n            let nodeSize = node.getSize();\r\n            let nodeWidestPosX = nodePos.x + nodeSize.x;\r\n            let nodeWidestPosY = nodePos.y + nodeSize.y;\r\n\r\n            if (nodeWidestPosX > maxWidth) {\r\n                maxWidth = nodeWidestPosX;\r\n            }\r\n\r\n            if (nodeWidestPosY > maxHeight) {\r\n                maxHeight = nodeWidestPosY;\r\n            }\r\n        }\r\n\r\n        this.root.setAttributeNS(null, 'width', '' + (maxWidth + 100));\r\n        this.root.setAttributeNS(null, 'height', '' + (maxHeight + 50));\r\n    }\r\n\r\n    public saveAs(typ: string) {\r\n        typ = typ.toLowerCase();\r\n\r\n        // shrink size of graph to minimum. only to show up nodes\r\n        const currentSize = this.getRootSize();\r\n        this.fitSizeOnNodes();\r\n\r\n        if (typ === 'svg') {\r\n            this.exportSvg();\r\n        } else if (typ === 'png') {\r\n            this.exportPng();\r\n        } else if (typ === 'html') {\r\n            this.exportHtml();\r\n\r\n        } else if (typ === 'pdf') {\r\n            this.exportPdf();\r\n            // } else if (typ === 'eps') {\r\n            // this.ExportEPS();\r\n        }\r\n        else if (typ === 'json') {\r\n            this.exportJson();\r\n        }\r\n\r\n        // set the size back to default\r\n        this.root.setAttributeNS(null, 'width', '' + currentSize.width);\r\n        this.root.setAttributeNS(null, 'height', '' + currentSize.height);\r\n    }\r\n\r\n    /**\r\n     * generates a blob file and makes it available for download.\r\n     * @param type type of file\r\n     * @param data raw data\r\n     * @param name name of download file\r\n     */\r\n    public save(type: string, data: any, name: string, context: string) {\r\n        if (window['java']) {\r\n            window['java'].export(type, data, name, context);\r\n            return;\r\n        }\r\n        let a = document.createElement('a');\r\n        a.href = window.URL.createObjectURL(new Blob([data], { type: context }));\r\n        a.download = name;\r\n        document.body.appendChild(a);\r\n        a.click();\r\n        document.body.removeChild(a);\r\n    }\r\n\r\n    /** Exports the diagram as svg. */\r\n    public exportSvg(): void {\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        this.save('svg', this.serializeXmlNode(wellFormatedSvgDom), 'class_diagram.svg', 'image/svg+xml');\r\n    }\r\n\r\n    /** Exports the diagram as html. */\r\n    public exportHtml(): void {\r\n        let htmlFacade = '<html><head><title>DiagramJS - Classdiagram</title></head><body>$content</body></html>';\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        let svgAsXml = this.serializeXmlNode(wellFormatedSvgDom);\r\n\r\n        let htmlResult = htmlFacade.replace('$content', svgAsXml);\r\n\r\n        this.save('html', htmlResult, 'class_diagram.htm', 'text/plain');\r\n    }\r\n\r\n    /** Exports the diagram as json. */\r\n    public exportJson(): void {\r\n        let type = 'text/plain';\r\n        let jsonObj = Util.toJson(this.$graphModel);\r\n        let data = JSON.stringify(jsonObj, null, '\\t');\r\n\r\n        this.save('json', data, 'class_diagram.json', type);\r\n    }\r\n\r\n    /** Exports the diagram as pdf. */\r\n    public exportPdf(): void {\r\n        if (!window['jsPDF']) {\r\n            console.log('jspdf n.a.');\r\n            return;\r\n        }\r\n        let type = 'image/svg+xml';\r\n        let converter, pdf = new window['jsPDF']('l', 'px', [this.$graphModel.getSize().x, this.$graphModel.getSize().y]);\r\n        converter = new SVGConverter(this.$view, pdf, {removeInvalid: false});\r\n        pdf.save('Download.pdf');\r\n/*        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let canvas, context, a, image = new Image();\r\n        let size = this.getRootSize();\r\n\r\n        // create the loaded img source into a canvas. to generate a picture. then place this picture in the pdf\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            let pdf = new window['jsPDF']();\r\n\r\n            pdf.addImage(canvas.toDataURL('image/jpeg'), 'jpeg', 15, 40, 180, 160);\r\n            pdf.save('class_diagram.pdf');\r\n\r\n        };\r\n\r\n        image.src = url;\r\n        */\r\n    }\r\n\r\n    public import(data: string): void {\r\n        let rootElement = this.$graphModel.$view;\r\n        while (rootElement.hasChildNodes()) {\r\n            rootElement.removeChild(rootElement.firstChild);\r\n        }\r\n\r\n        while (this.$view.hasChildNodes()) {\r\n            this.$view.removeChild(this.$view.firstChild);\r\n        }\r\n\r\n        this.clearModel();\r\n        let jsonData = JSON.parse(data);\r\n        this.load(jsonData);\r\n        this.layout();\r\n    }\r\n\r\n    public exportEPS(): void {\r\n          let converter, doc = new JSEPS({inverting: true});\r\n            converter = new SVGConverter(this.$view, doc, {removeInvalid: false});\r\n            this.save('eps', doc.getData(), 'diagram.eps', doc.getType());\r\n    }\r\n\r\n    /** Exports the diagram as png. */\r\n    public exportPng(): void {\r\n        let canvas, context, a, image = new Image();\r\n        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let typ = 'image/svg+xml';\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let size = this.getRootSize();\r\n\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            a = document.createElement('a');\r\n            a.download = 'class_diagram.png';\r\n            a.href = canvas.toDataURL('image/png');\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            document.body.removeChild(a);\r\n        };\r\n\r\n        image.src = url;\r\n\r\n    }\r\n\r\n    public getSvgWithStyleAttributes(): Node {\r\n        let oDOM = this.$graphModel.$view.cloneNode(true);\r\n        this.readElement(oDOM, this.$graphModel.$view);\r\n\r\n        return oDOM;\r\n    }\r\n\r\n    public serializeXmlNode(xmlNode: any) {\r\n        if (window['XMLSerializer'] !== undefined) {\r\n            return (new window['XMLSerializer']()).serializeToString(xmlNode);\r\n        }\r\n        if (xmlNode.xml !== undefined) {\r\n            return xmlNode.xml;\r\n        }\r\n        return xmlNode.outerHTML;\r\n    }\r\n\r\n    public getRootSize(): Size {\r\n        let width: number;\r\n        let height: number;\r\n        width = +this.root.getAttribute('width');\r\n        height = +this.root.getAttribute('height');\r\n\r\n        return { width: width, height: height };\r\n    }\r\n\r\n        // Graph.prototype.ExportEPS = function () {\r\n        //     var converter, doc = new svgConverter.jsEPS({inverting: true});\r\n        //     converter = new svgConverter(this.board, doc, {removeInvalid: false});\r\n        //     doc.save();\r\n        // };\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        this.$graphModel = new GraphModel();\r\n        this.$graphModel.init(this);\r\n        this.$graphModel.load(json);\r\n    }\r\n\r\n    public clearModel(): void {\r\n        this.$graphModel.removeAllElements();\r\n        this.clearSvgRoot();\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.layout();\r\n        return this;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        return;\r\n    }\r\n\r\n    public getNextFreePosition(): Point {\r\n\r\n        if (!this.$graphModel) {\r\n            return new Point(50, 50);\r\n        }\r\n\r\n        let point = new Point(0, 50);\r\n\r\n        let maxX = 0;\r\n        let minX = 9000;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            maxX = Math.max(maxX, node.getPos().x);\r\n            minX = Math.min(minX, node.getPos().x);\r\n        }\r\n\r\n        if (minX > 170) {\r\n            point.x = 10;\r\n        }\r\n        else {\r\n            point.x = maxX + 200;\r\n        }\r\n\r\n        return point;\r\n    }\r\n\r\n    public addElement(type: string, dontDraw?: boolean): boolean {\r\n        let success = this.$graphModel.addElement(type);\r\n        if (success === true) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return success;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues?: Object, layout?: boolean, dontDraw?: boolean): DiagramElement {\r\n        let element = this.$graphModel.addElementWithValues(type, optionalValues);\r\n        if (element && layout) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public layout(dontDraw?: boolean): Graph {\r\n        this.getLayout().layout(this, this.$graphModel);\r\n\r\n        if (dontDraw) {\r\n            return this;\r\n        }\r\n\r\n        this.draw();\r\n        return this;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTDRAGOVER, EventBus.ELEMENTDRAGLEAVE, EventBus.ELEMENTDROP];\r\n    }\r\n\r\n    public draw() {\r\n        this.clearSvgRoot();\r\n        let model = this.$graphModel;\r\n        let root = this.root;\r\n        let max: Point = new Point();\r\n        if (this.options) {\r\n            max.x = this.options.minWidth || 0;\r\n            max.y = this.options.minHeight || 0;\r\n        }\r\n\r\n        for (let node of model.nodes) {\r\n            let svg = node.getSVG();\r\n            EventBus.register(node, svg);\r\n            root.appendChild(svg);\r\n\r\n            let temp: number;\r\n            temp = node.getPos().x + node.getSize().x;\r\n            if (temp > max.x) {\r\n                max.x = temp;\r\n            }\r\n            temp = node.getPos().y + node.getSize().y;\r\n            if (temp > max.y) {\r\n                max.y = temp;\r\n            }\r\n\r\n        }\r\n        Util.setAttributeSize(this.root, max.x + 60, max.y + 40);\r\n\r\n        for (let edge of model.edges) {\r\n            let svg = edge.getSVG();\r\n            EventBus.register(edge, svg);\r\n            root.appendChild(svg);\r\n        }\r\n    }\r\n\r\n    public getNode(id: string) {\r\n        return this.$graphModel.getNodeById(id);\r\n    }\r\n\r\n    public drawElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let svg = element.getSVG();\r\n        this.root.appendChild(svg);\r\n\r\n        // actualize root width size, if neccessary\r\n        // get current width of root\r\n        let rootSize = this.getRootSize();\r\n        let newWidth = element.getPos().x + element.getSize().x + 40;\r\n        let newHeight = element.getPos().y + element.getSize().y;\r\n\r\n        if (rootSize.width < newWidth) {\r\n            this.root.setAttributeNS(null, 'width', '' + newWidth);\r\n        }\r\n\r\n        if (rootSize.height < newHeight) {\r\n            this.root.setAttributeNS(null, 'height', '' + newHeight);\r\n        }\r\n\r\n        // draw edge\r\n        if (element instanceof Association) {\r\n            let edge = <Association>element;\r\n            edge.redraw(edge.$sNode);\r\n            let srcSvg = element.$sNode.getAlreadyDisplayingSVG();\r\n            let targetSvg = element.$tNode.getAlreadyDisplayingSVG();\r\n\r\n            this.root.appendChild(srcSvg);\r\n            this.root.appendChild(targetSvg);\r\n        }\r\n\r\n        EventBus.register(element, svg);\r\n    }\r\n\r\n    public removeElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let alreadyDisplayingSvg = element.getAlreadyDisplayingSVG();\r\n        if (Util.isParentOfChild(this.root, alreadyDisplayingSvg)) {\r\n            this.root.removeChild(alreadyDisplayingSvg);\r\n        }\r\n    }\r\n\r\n    public generate(packageName: string, path?: string) {\r\n        this.$graphModel.package = packageName;\r\n        this.$graphModel.genPath = path;\r\n\r\n        let data, result = Util.toJson(this.$graphModel);\r\n        data = JSON.stringify(result, null, '\\t');\r\n        if (window['java'] && typeof window['java'].generate === 'function') {\r\n            window['java'].generate(data);\r\n        }\r\n    }\r\n// REFACTORING dd\r\n    private readElement(parent: any, origData: any): void {\r\n        let children = parent.childNodes;\r\n        let origChildDat = origData.childNodes;\r\n\r\n        for (let cd = 0; cd < children.length; cd++) {\r\n            let child = children[cd];\r\n\r\n            let tagName = child.tagName;\r\n            if (this.containerElements.indexOf(tagName) !== -1) {\r\n                this.readElement(child, origChildDat[cd]);\r\n            } else if (tagName in this.relevantStyles) {\r\n                let styleDef = window.getComputedStyle(origChildDat[cd]);\r\n\r\n                let styleString = '';\r\n                for (let st = 0; st < this.relevantStyles[tagName].length; st++) {\r\n                    styleString += this.relevantStyles[tagName][st] + ':' + styleDef.getPropertyValue(this.relevantStyles[tagName][st]) + '; ';\r\n                }\r\n\r\n                child.setAttribute('style', styleString);\r\n            }\r\n        }\r\n    }\r\n\r\n    private createPattern(): Element {\r\n        const defs = Util.createShape({ tag: 'defs' });\r\n        const pattern = Util.createShape({\r\n            tag: 'pattern',\r\n            id: 'raster',\r\n            patternUnits: 'userSpaceOnUse',\r\n            width: 40,\r\n            height: 40\r\n        });\r\n        const path = 'M0 4 L0 0 L4 0 M36 0 L40 0 L40 4 M40 36 L40 40 L36 40 M4 40 L0 40 L0 36';\r\n        const cross = Util.createShape({\r\n            tag: 'path',\r\n            d: path,\r\n            stroke: '#DDD',\r\n            'stroke-width': 1,\r\n            fill: 'none'\r\n        });\r\n\r\n        const rect = Util.createShape({\r\n            tag: 'rect',\r\n            x: 0,\r\n            y: 0,\r\n            width: 40,\r\n            height: 40,\r\n            fill: 'none'\r\n        });\r\n        pattern.appendChild(rect);\r\n        pattern.appendChild(cross);\r\n        defs.appendChild(pattern);\r\n        return defs;\r\n    }\r\n\r\n    private clearSvgRoot() {\r\n        const root = this.root;\r\n        this.$graphModel.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n        while (root.firstChild) {\r\n            root.removeChild(root.firstChild);\r\n        }\r\n\r\n        root.appendChild(this.createPattern());\r\n        let fillValue = 'none';\r\n        if (this.options.raster) {\r\n            fillValue = 'url(#raster)';\r\n        }\r\n        let background = Util.createShape({\r\n            tag: 'rect',\r\n            id: 'background',\r\n            width: 5000,\r\n            height: 5000,\r\n            x: 0,\r\n            y: 0,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: fillValue\r\n        });\r\n        root.appendChild(background);\r\n\r\n        // delete inline Edit, if exists\r\n        let inlineEdit = document.getElementById('inlineEdit');\r\n        if (inlineEdit && document.body.contains(inlineEdit)) {\r\n            document.body.removeChild(inlineEdit);\r\n        }\r\n    }\r\n\r\n    private getLayout(): Layout {\r\n        if (this.currentlayout) {\r\n            return this.currentlayout;\r\n        }\r\n\r\n        let layout = this.options.layout || '';\r\n        if (this.layoutFactory[layout]) {\r\n            this.currentlayout = new this.layoutFactory[layout]();\r\n        } else {\r\n            this.currentlayout = new layouts.DagreLayout();\r\n        }\r\n\r\n        return this.currentlayout;\r\n    }\r\n\r\n    private initFactories() {\r\n\r\n        let noder = nodes;\r\n        this.nodeFactory = {};\r\n        for (let id in noder) {\r\n            if (noder.hasOwnProperty(id) === true) {\r\n                this.nodeFactory[id] = noder[id];\r\n            }\r\n        }\r\n\r\n        let edger = edges;\r\n        this.edgeFactory = {};\r\n        for (let id in edger) {\r\n            if (edger.hasOwnProperty(id) === true) {\r\n                this.edgeFactory[id] = edger[id];\r\n            }\r\n        }\r\n\r\n        let layouter = layouts;\r\n        this.layoutFactory = {};\r\n        for (let id in layouter) {\r\n            if (layouter.hasOwnProperty(id) === true) {\r\n                this.layoutFactory[id] = layouter[id];\r\n            }\r\n        }\r\n    }\r\n\r\n    private initCanvas() {\r\n        if (this.options.canvas) {\r\n            this.$view = document.getElementById(this.options.canvas);\r\n        }\r\n        if (!this.$view) {\r\n            this.$view = document.createElement('div');\r\n            this.$view.setAttribute('class', 'diagram');\r\n            document.body.appendChild(this.$view);\r\n        }\r\n    }\r\n\r\n    private initFeatures(features: any) {\r\n\r\n        if (features) {\r\n            if (features.newedge) {\r\n                EventBus.subscribe(new NewEdge(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            this.importFile = new ImportFile(this);\r\n            if (features.import) {\r\n                EventBus.subscribe(this.importFile, 'dragover', 'dragleave', 'drop');\r\n            }\r\n            if (features.zoom) {\r\n                let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n                EventBus.subscribe(new Zoom(this), mousewheel);\r\n            }\r\n            if (features.drag) {\r\n                EventBus.subscribe(new Drag(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            if (features.select) {\r\n                EventBus.subscribe(new Select(this), 'click', 'drag');\r\n            }\r\n            if (features.palette) {\r\n                new Palette(this).show();\r\n            }\r\n            if (features.toolbar) {\r\n                new Toolbar(this).show();\r\n            }\r\n            if (features.properties) {\r\n                let propertyPanel = new PanelGroup(this);\r\n                // let dispatcher = new PropertiesDispatcher(this);\r\n                EventBus.subscribe(propertyPanel, 'dblclick', 'click', EventBus.RELOADPROPERTIES);\r\n                propertyPanel.show();\r\n            }\r\n            if (features.addnode) {\r\n                EventBus.subscribe(new AddNode(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n        }\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport {DiagramElement, Point} from './BaseElements';\r\nimport {Association} from './edges';\r\nimport {Node} from './nodes';\r\nimport {Control} from '../Control';\r\nimport {Util} from '../util';\r\nimport {EventBus} from '../EventBus';\r\n\r\nexport class GraphModel extends DiagramElement {\r\n    nodes: Node[] = [];\r\n    edges: Association[] = [];\r\n    package: string;\r\n    genPath: string;\r\n    $isLoading: boolean;\r\n\r\n    public load(data?: any) {\r\n\r\n        this.$isLoading = true;\r\n        data = data || {};\r\n        this.property = data.type || data.property || 'classdiagram';\r\n        this.id = 'RootElement';\r\n        if (data.nodes) {\r\n            for (let node of data.nodes) {\r\n                this.addNode(node);\r\n            }\r\n        }\r\n        if (data.edges) {\r\n            for (let edge of data.edges) {\r\n                this.addEdge(edge);\r\n            }\r\n        }\r\n\r\n        this.$isLoading = false;\r\n    }\r\n\r\n    public getNodeByPosition(x: number, y: number): Node {\r\n        for (let node of this.nodes) {\r\n            let posOfNode: Point = (<Node>node).getPos();\r\n            let sizeOfNode: Point = (<Node>node).getSize();\r\n\r\n            if ((posOfNode.x <= x && (posOfNode.x + sizeOfNode.x) >= x)\r\n                && (posOfNode.y <= y && (posOfNode.y + sizeOfNode.y) >= y)) {\r\n                return node;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.initCanvas();\r\n        return this;\r\n    }\r\n\r\n    public addElement(type: string): boolean {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n        if (element) {\r\n            Util.saveToLocalStorage(this);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues: Object): DiagramElement {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n\r\n        // position\r\n        if (optionalValues) {\r\n            if (optionalValues.hasOwnProperty('x') && optionalValues.hasOwnProperty('y')) {\r\n                let x = optionalValues['x'];\r\n                let y = optionalValues['y'];\r\n                element.withPos(x, y);\r\n            }\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return element;\r\n    }\r\n\r\n    public removeAllElements(): void {\r\n\r\n        let nodesLength = this.nodes.length;\r\n        for (let i = 0; i < nodesLength; i++) {\r\n            this.removeElement(this.nodes[0].id);\r\n        }\r\n\r\n        this.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n    }\r\n\r\n    public removeElement(id: string): boolean {\r\n\r\n        let element = this.getDiagramElementById(id);\r\n        if (!element) {\r\n            return false;\r\n        }\r\n\r\n        (<Graph>this.$owner).removeElement(element);\r\n\r\n        if (element instanceof Node) {\r\n\r\n            let idxOfNode = this.nodes.indexOf(element);\r\n            if (idxOfNode > -1) {\r\n                this.nodes.splice(idxOfNode, 1);\r\n            }\r\n\r\n            while (element.$edges.length > 0) {\r\n                this.removeElement(element.$edges[0].id);\r\n            }\r\n\r\n            element.$edges = [];\r\n        }\r\n        else if (element instanceof Association) {\r\n\r\n            let idxOfEdge = this.edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                this.edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from source\r\n            idxOfEdge = element.$sNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$sNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from target\r\n            idxOfEdge = element.$tNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$tNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return true;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        const size = 10;\r\n        const path = `M${-size} 0 L${+size} 0 M0 ${-size} L0 ${+size}`;\r\n\r\n        const attr = {\r\n            tag: 'path',\r\n            id: 'origin',\r\n            d: path,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: 'none'\r\n        };\r\n        let shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: 0 - size,\r\n            y: 0 - size / 1.5,\r\n            'text-anchor': 'end',\r\n            'font-family': 'Verdana',\r\n            'font-size': '9',\r\n            fill: '#999'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = '(0, 0)';\r\n\r\n        let group = this.createShape({tag: 'g'});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEUP, EventBus.ELEMENTMOUSELEAVE, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTMOUSEWHEEL, EventBus.ELEMENTCLICK, EventBus.ELEMENTDRAG];\r\n    }\r\n\r\n    public getNewId(prefix?: string): string {\r\n        let id = (prefix ? prefix.toLowerCase() + '-' : '') + Math.floor(Math.random() * 100000);\r\n        return id;\r\n    }\r\n\r\n    public getEdgeById(id: string): Association {\r\n        for (let edge of this.edges) {\r\n            if (edge.id === id) {\r\n                return edge;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    public getDiagramElementById(id: string): DiagramElement {\r\n\r\n        return this.getNodeById(id) || this.getEdgeById(id);\r\n    }\r\n\r\n    /**\r\n     * Add an edge with data in json file. Optional you can say, that the edge should have\r\n     * the points of source node and target node.\r\n     * @param edge information about edge in json\r\n     * @param withPosOfNodes optional. set points to line of source and target node\r\n     */\r\n    public addEdge(edge: any, withPosOfNodes?: boolean): Association {\r\n\r\n        // lookup in factoryedges and check if the edge type realy exists\r\n        if (edge && edge.type) {\r\n            const graph = (<Graph>this.$owner);\r\n            let typeExists = false;\r\n            for (let edgeType in graph.edgeFactory) {\r\n                if (edgeType === edge.type) {\r\n                    typeExists = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!typeExists) {\r\n                edge.type = 'Association';\r\n            }\r\n        }\r\n\r\n        let type = edge.type || 'Association';\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n\r\n        let newEdge = <Association>this.createElement(type, id, edge);\r\n        newEdge.type = type;\r\n\r\n        let source: Node;\r\n        let sourceAsString: string = edge.source.id || edge.source;\r\n        if (sourceAsString) {\r\n            source = this.getNodeById(sourceAsString);\r\n            if (!source) {\r\n                let nodeID = edge.source;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                source = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                source.init(this);\r\n            }\r\n        }\r\n\r\n        let target: Node;\r\n        let targetAsString: string = edge.target.id || edge.target;\r\n        if (targetAsString) {\r\n            target = this.getNodeById(targetAsString);\r\n            if (!target) {\r\n                let nodeID = edge.target;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                target = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                target.init(this);\r\n            }\r\n        }\r\n\r\n        newEdge.withItem(source, target);\r\n\r\n        if (withPosOfNodes) {\r\n            let srcX = source.getPos().x + (source.getSize().x / 2);\r\n            let srcY = source.getPos().y + (source.getSize().y / 2);\r\n\r\n            let targetX = target.getPos().x + (target.getSize().x / 2);\r\n            let targetY = target.getPos().y + (target.getSize().y / 2);\r\n\r\n            newEdge.addPoint(srcX, srcY);\r\n            newEdge.addPoint(targetX, targetY);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public createElement(type: string, id: string, data: Object): DiagramElement {\r\n        const graph = <Graph>this.$owner;\r\n        let element: DiagramElement;\r\n        if (graph.nodeFactory[type]) {\r\n            element = new graph.nodeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.nodes.push(<Node>element);\r\n        }\r\n        if (graph.edgeFactory[type]) {\r\n            element = new graph.edgeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.edges.push(<Association>element);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public getNodeById(id: string): Node {\r\n        for (let node of this.nodes) {\r\n            if (node.id === id) {\r\n                return node;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    private initCanvas() {\r\n        const graph = <Graph>this.$owner;\r\n        graph.canvasSize = {width: graph.$view.clientWidth, height: graph.$view.clientHeight};\r\n        graph.root = Util.createShape({\r\n            tag: 'svg',\r\n            id: 'root',\r\n            width: graph.canvasSize.width,\r\n            height: graph.canvasSize.height\r\n            // FIXME,viewBox: `${this.$graph.options.origin.x * -1} ${this.$graph.options.origin.y * -1} ${this.$graph.canvasSize.width} ${this.$graph.canvasSize.height}`\r\n        });\r\n        this.$view = graph.root;\r\n        graph.$view.appendChild(graph.root);\r\n\r\n        let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    private addNode(node: Node): Node {\r\n        let type = node['type'] || node.property || 'Node';\r\n        type = Util.toPascalCase(type);\r\n        let id = node['id'] || node['name'] || this.getNewId(type);\r\n\r\n        return <Node>this.createElement(type, id, node);\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction } from './index';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\n\r\nexport abstract class Aggregate extends Association {\r\n\r\n    protected $diamond: Element;\r\n\r\n    public getSVG(): Element {\r\n\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled diamond\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n        };\r\n\r\n        this.$diamond = this.createShape(attr);\r\n\r\n        group.appendChild(this.$diamond);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint: Point = this.$points[0];\r\n        let direction: Direction = Direction.Down;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if (this.$sNode.id === startNode.id || this.$points.length == 2) {\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$diamond.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint: Point, direction: Direction): string {\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                path = `M${startX} ${startY} L${startX + 6} ${startY + 10} L${startX} ${startY + 20} L${startX - 6} ${startY + 10} Z`;\r\n                startPoint.y = startPoint.y+20;\r\n                break;\r\n            case Direction.Right:\r\n                path = `M${startX} ${startY} L${startX - 10} ${startY + 6} L${startX - 20} ${startY} L${startX - 10} ${startY - 6} Z`;\r\n                startPoint.x = startPoint.x-20;\r\n                break;\r\n            case Direction.Left:\r\n                path = `M${startX} ${startY} L${startX + 10} ${startY - 6} L${startX + 20} ${startY} L${startX + 10} ${startY + 6} Z`;\r\n                startPoint.x = startPoint.x+20;\r\n                break;\r\n            case Direction.Down:\r\n                path = `M${startX} ${startY} L${startX - 6} ${startY - 10} L${startX} ${startY - 20} L${startX + 6} ${startY - 10} Z`;\r\n                startPoint.y = startPoint.y-20;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Aggregation extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'white');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { DiagramElement, Line, Point } from '../BaseElements';\r\nimport { Node } from '../nodes';\r\nimport { InfoText } from '../nodes/InfoText';\r\nimport { Util } from '../../util';\r\nimport { EventBus } from '../../EventBus';\r\nimport * as edges from '../edges';\r\nimport { Graph } from '../Graph';\r\n\r\nexport const enum Direction {\r\n    Up, Down, Left, Right\r\n}\r\n\r\nexport class Association extends DiagramElement {\r\n    public source: string;\r\n    public target: string;\r\n    public type: string;\r\n    public $sNode: Node;\r\n    public $tNode: Node;\r\n    public lineStyle: string;\r\n    public $points: Point[] = [];\r\n    public $pathSvg: Element;\r\n    public $pathWideSvg: Element;\r\n    public info: InfoText;\r\n    public sourceInfo: InfoText;\r\n    public targetInfo: InfoText;\r\n    $m: number;\r\n    $n: number;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super();\r\n\r\n        this.withData(data);\r\n    }\r\n\r\n    public withData(data: JSON | string | Object | any): Association {\r\n\r\n        if (!data) {\r\n            return this;\r\n        }\r\n        let srcInfo;\r\n        let trgInfo;\r\n\r\n        if (data.source && typeof data.source !== 'string') {\r\n            srcInfo = data.source;\r\n        }\r\n        else if (data.sourceInfo && typeof data.sourceInfo !== 'string') {\r\n            srcInfo = data.sourceInfo;\r\n        }\r\n\r\n        if (srcInfo) {\r\n            this.sourceInfo = new InfoText(srcInfo);\r\n            this.sourceInfo.$owner = this;\r\n        }\r\n\r\n        if (data.target && typeof data.target !== 'string') {\r\n            trgInfo = data.target;\r\n        }\r\n        else if (data.targetInfo && typeof data.targetInfo !== 'string') {\r\n            trgInfo = data.targetInfo;\r\n        }\r\n\r\n        if (trgInfo) {\r\n            this.targetInfo = new InfoText(trgInfo);\r\n            this.targetInfo.$owner = this;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    public updateSrcCardinality(cardinality: string): void {\r\n        this.sourceInfo = this.updateCardinality(this.$sNode, this.sourceInfo, cardinality);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetCardinality(cardinality: string): void {\r\n        this.targetInfo = this.updateCardinality(this.$tNode, this.targetInfo, cardinality);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateSrcProperty(property: string): void {\r\n        this.sourceInfo = this.updateProperty(this.$sNode, this.sourceInfo, property);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetProperty(property: string): void {\r\n        this.targetInfo = this.updateProperty(this.$tNode, this.targetInfo, property);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public withItem(source: Node, target: Node): Association {\r\n        source.$edges.push(this);\r\n        target.$edges.push(this);\r\n        this.$sNode = source;\r\n        this.$tNode = target;\r\n        this.source = source.id;\r\n        this.target = target.id;\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let group = Util.createShape({ tag: 'g', id: this.id, class: 'SVGEdge' });\r\n\r\n        let path: string = this.getPath();\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'none'\r\n        };\r\n        let pathLine = this.createShape(attr);\r\n\r\n        //attr['style'] = 'stroke-width:20;opacity:0;width:20;height:20';\r\n        let extendedPathLine = Util.createShape(attr);\r\n\r\n        group.appendChild(extendedPathLine);\r\n        group.appendChild(pathLine);\r\n\r\n        if (this.sourceInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.sourceInfo.getSVG());\r\n        }\r\n        if (this.targetInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.targetInfo.getSVG());\r\n        }\r\n\r\n        this.$pathWideSvg = extendedPathLine;\r\n        this.$pathSvg = pathLine;\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.EDITOR, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    public convertEdge(type: string, newId: string, redraw?: boolean): Association {\r\n        if (!edges[type]) {\r\n            return this;\r\n        }\r\n\r\n        let newEdge: Association = new edges[type]();\r\n        newEdge.withItem(this.$sNode, this.$tNode);\r\n        newEdge.id = newId;\r\n        newEdge.type = type;\r\n        newEdge.lineStyle = this.lineStyle;\r\n        newEdge.$owner = this.$owner;\r\n\r\n        if (this.sourceInfo) {\r\n            newEdge.sourceInfo = new InfoText({ property: this.sourceInfo.property, cardinality: this.sourceInfo.cardinality });\r\n            newEdge.sourceInfo.$owner = newEdge;\r\n        }\r\n\r\n        if (this.targetInfo) {\r\n            newEdge.targetInfo = new InfoText({ property: this.targetInfo.property, cardinality: this.targetInfo.cardinality });\r\n            newEdge.targetInfo.$owner = newEdge;\r\n        }\r\n\r\n        this.$points.forEach(point => {\r\n            newEdge.addPoint(point.x, point.y);\r\n        });\r\n\r\n        let graph = <Graph>this.getRoot();\r\n        if (!graph) {\r\n            return this;\r\n        }\r\n\r\n        // update model. insert the edge exact on the same index, like the old edge\r\n        let idx = graph.$graphModel.edges.indexOf(this);\r\n        graph.$graphModel.removeElement(this.id);\r\n        if (idx > -1) {\r\n            graph.$graphModel.edges.splice(idx, 0, newEdge);\r\n        }\r\n        else {\r\n            graph.$graphModel.edges.push(newEdge);\r\n        }\r\n\r\n        if (!redraw) {\r\n            return newEdge;\r\n        }\r\n\r\n        let svgRoot: Element;\r\n        if (graph) {\r\n            svgRoot = graph.root;\r\n        }\r\n        else {\r\n            svgRoot = document.getElementById('root');\r\n        }\r\n        let newEdgeSvg = newEdge.getSVG();\r\n\r\n        // update graph\r\n        graph.removeElement(this);\r\n        svgRoot.appendChild(newEdgeSvg);\r\n\r\n        // redraw the edge from both sides to get the correct display\r\n        // if the type is edge, so the path can be redraw.\r\n        // if not, so the inherited class redraw the path with his own logic\r\n\r\n        let dontDrawPath: boolean = (type !== 'Edge');\r\n        newEdge.redraw(newEdge.$sNode, dontDrawPath);\r\n        newEdge.redraw(newEdge.$tNode, dontDrawPath);\r\n\r\n        EventBus.register(newEdge, newEdgeSvg);\r\n\r\n        this.sourceInfo = undefined;\r\n        this.targetInfo = undefined;\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n        // redraw the first point\r\n        // check which point is the near to startnode\r\n        let endPoint: Point;\r\n        let recalcPoint: Point;\r\n        let endPointIdx: number;\r\n\r\n        if (this.$sNode.id === startNode.id) {\r\n            recalcPoint = this.$points[0];\r\n            endPointIdx = 1;\r\n        } else if (this.$tNode.id === startNode.id) {\r\n            recalcPoint = this.$points[this.$points.length - 1];\r\n            endPointIdx = this.$points.length - 2;\r\n        }\r\n\r\n        endPoint = this.$points[endPointIdx];\r\n\r\n        // calculate and set new position of point to redraw\r\n        this.calcIntersection(startNode, recalcPoint, endPoint);\r\n\r\n        // remove the 2nd point next to startnode, if the node was dragged upper the point\r\n        if (this.$points.length > 2 && this.$tNode.id === startNode.id && endPoint.y > (startNode.getPos().y + (startNode.getSize().y / 2))) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$tNode.id === startNode.id && this.$points.length === 2) {\r\n            this.calcIntersection(this.$sNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (this.$points.length > 2 && this.$sNode.id === startNode.id && (startNode.getPos().y + (startNode.getSize().y / 2) > endPoint.y)) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$sNode.id === startNode.id && this.$points.length === 2) {\r\n\r\n            this.calcIntersection(this.$tNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (!dontDrawPoints) {\r\n            this.redrawPointsAndInfo();\r\n        }\r\n    }\r\n\r\n    public getPath(): string {\r\n\r\n        if (this.$points.length === 0) {\r\n            return '';\r\n        }\r\n\r\n        let path: string = 'M';\r\n        for (let i = 0; i < this.$points.length; i++) {\r\n            let point: Point = this.$points[i];\r\n            if (i > 0) {\r\n                path += 'L';\r\n            }\r\n            path += Math.floor(point.x) + ' ' + Math.floor(point.y) + ' ';\r\n        }\r\n\r\n        return path;\r\n    }\r\n    public calcInfoPosNew(infoTxt: InfoText, node: Node): Point {\r\n\r\n        if (!infoTxt || !node) {\r\n            return null;\r\n        }\r\n\r\n        // 1. step: get direction\r\n        let startPoint: Point;\r\n        let nextToStartPoint: Point;\r\n        if (this.$sNode.id === node.id) {\r\n            startPoint = this.$points[0];\r\n            nextToStartPoint = this.$points[1];\r\n        }\r\n        else if (this.$tNode.id === node.id) {\r\n            startPoint = this.$points[this.$points.length - 1];\r\n            nextToStartPoint = this.$points[this.$points.length - 2];\r\n        }\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(node, startPoint);\r\n\r\n        let x: number;\r\n        let y: number;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                break;\r\n            case Direction.Right:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x - (infoTxt.getSize().x) - 5;\r\n                break;\r\n            case Direction.Left:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x + 5;\r\n                break;\r\n            case Direction.Down:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        // assign calculated position to infotext\r\n        return new Point(x, y);\r\n    }\r\n\r\n    public clearPoints(): any {\r\n        this.$points = [];\r\n        this.$points = [];\r\n    }\r\n\r\n    public addPoint(x: number, y: number): Point[] {\r\n        this.$points.push(new Point(x, y));\r\n\r\n        return this.$points;\r\n    }\r\n\r\n    protected redrawPointsAndInfo(): void {\r\n        // redraw the edge with the new position\r\n        let path: string = this.getPath();\r\n        this.$pathSvg.setAttributeNS(null, 'd', path);\r\n        this.$pathWideSvg.setAttributeNS(null, 'd', path);\r\n\r\n        this.redrawSourceInfo();\r\n        this.redrawTargetInfo();\r\n    }\r\n\r\n    protected redrawSourceInfo() {\r\n        if (this.sourceInfo) {\r\n            let newPosOfSrc = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.redrawFromEdge(newPosOfSrc);\r\n        }\r\n    }\r\n\r\n    protected redrawTargetInfo() {\r\n        if (this.targetInfo) {\r\n            let newPosOfTarget = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.redrawFromEdge(newPosOfTarget);\r\n        }\r\n    }\r\n\r\n    protected getDirectionOfPointToNode(node: Node, pointNearNode: Point): Direction {\r\n        /*\r\n            Example to calculate the direction of nearest point to Node\r\n\r\n            node\r\n         x1_ _ _ _\r\n          |       |\r\n          |       |. pointNearNode\r\n          |       |\r\n          |_ _ _ x2\r\n\r\n          the calculation would return Direction.Left\r\n        */\r\n\r\n        let x1: Point = node.getPos();\r\n        let x2: Point = new Point((x1.x + node.getSize().x), (x1.y + node.getSize().y));\r\n        let direction: Direction = Direction.Down;\r\n\r\n        if (x1.y >= pointNearNode.y) {\r\n            direction = Direction.Down;\r\n        }\r\n        if (x2.y <= pointNearNode.y) {\r\n            direction = Direction.Up;\r\n        }\r\n        if (x1.x >= pointNearNode.x) {\r\n            direction = Direction.Right;\r\n        }\r\n        if (x2.x <= pointNearNode.x) {\r\n            direction = Direction.Left;\r\n        }\r\n\r\n        return direction;\r\n    }\r\n\r\n    private updateCardinality(node: Node, infoText: InfoText, cardinality: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'cardinality': cardinality });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.cardinality = cardinality;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateCardinality(cardinality);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private updateProperty(node: Node, infoText: InfoText, property: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'property': property });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.property = property;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateProperty(property);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private calcIntersection(startNode: Node, recalcPoint: Point, endPoint: Point): Point {\r\n\r\n        // https://www.mathelounge.de/21534/schnittpunkt-einer-linie-mit-den-randern-eines-rechtecks\r\n        let h = startNode.getSize().y;\r\n        let w = startNode.getSize().x;\r\n\r\n        let x1: number = startNode.getPos().x + (w / 2);\r\n        let y1: number = startNode.getPos().y + (h / 2);\r\n\r\n        let x2: number = endPoint.x;\r\n        let y2: number = endPoint.y;\r\n\r\n        let newX: number = recalcPoint.x;\r\n        let newY: number = recalcPoint.y;\r\n\r\n        if (x2 > x1) {\r\n            newX = x1 + (w / 2);\r\n        }\r\n        else if (x2 < x1) {\r\n            newX = x1 - (w / 2);\r\n        }\r\n        else {\r\n            newX = x1;\r\n        }\r\n\r\n        if ((x2 - x1) !== 0) {\r\n            newY = ((y2 - y1) / (x2 - x1) * (newX - x1)) + y1;\r\n        }\r\n        else {\r\n            if (y1 > y2) {\r\n                newY = startNode.getPos().y;\r\n            }\r\n            else {\r\n                newY = startNode.getPos().y + h;\r\n            }\r\n        }\r\n\r\n        // if the statement is not true, so the intersection is at the horizontal line\r\n        if (!((y1 - (h / 2) <= newY) && newY <= y1 + (h / 2))) {\r\n\r\n            if (y2 > y1) {\r\n                newY = y1 + (h / 2);\r\n            }\r\n            else {\r\n                newY = y1 - (h / 2);\r\n            }\r\n\r\n            if ((x2 - x1) !== 0) {\r\n                let tmp = ((y2 - y1) / (x2 - x1));\r\n                newX = (newY + (tmp * x1) - y1) / tmp;\r\n            }\r\n            else {\r\n                newX = x1;\r\n            }\r\n        }\r\n\r\n        recalcPoint.x = Math.ceil(newX);\r\n        recalcPoint.y = Math.ceil(newY);\r\n\r\n        return null;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Composition extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'black');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { Association } from './Association';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\nimport { Direction } from '../index';\r\n\r\nexport class Generalisation extends Association {\r\n\r\n    public $TARGET_ELEMENT_HEIGHT : number = 12;\r\n    protected $targetElement: Element;\r\n\r\n    public getSVG(): Element {\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction : Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled arrow\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'white'\r\n          };\r\n\r\n        this.$targetElement = this.createShape(attr);\r\n\r\n        group.appendChild(this.$targetElement);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean) : void {\r\n\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint : Point = this.$points[0];\r\n        let direction : Direction = Direction.Up;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if(this.$sNode.id === startNode.id || this.$points.length == 2){\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$targetElement.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint : Point, direction : Direction) : string{\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch(direction){\r\n            case Direction.Up:\r\n            path = `M${startX} ${startY+3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y+12;\r\n            break;\r\n            case Direction.Right:\r\n            path = `M${startX-3} ${startY} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x-12;\r\n            break;\r\n            case Direction.Left:\r\n            path = `M${startX+3} ${startY} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x+12;\r\n            break;\r\n            case Direction.Down:\r\n            path = `M${startX} ${startY-3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y-12;\r\n            break;\r\n            default :\r\n            break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n\r\n}\r\n","import { Generalisation } from './Generalisation';\r\n\r\nexport class Implements extends Generalisation {\r\n\r\n    public getSVG(): Element {\r\n        let group = super.getSVG();\r\n\r\n        this.$pathSvg.setAttributeNS(null, 'stroke-dasharray', '3, 3');\r\n\r\n        return group;\r\n    }\r\n}\r\n","export * from './Association';\r\nexport * from './Aggregate';\r\nexport * from './Aggregation';\r\nexport * from './Composition';\r\nexport * from './Generalisation';\r\nexport * from './Implements';","export * from './edges';\r\nexport * from './nodes';\r\nexport * from './BaseElements';\r\nexport * from './Graph';\r\nexport * from './Model';\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Attribute extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 28.06.2017.\r\n */\r\nimport {Control} from \"../../Control\";\r\n\r\nexport class AutoComplete extends Control {\r\n    private $inputField:HTMLInputElement;\r\n    private $dataList:HTMLDataListElement;\r\n    private $selected:HTMLSelectElement;\r\n    private $items:HTMLDivElement;\r\n    private isMultiple:boolean;\r\n\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        let div:HTMLDivElement = document.createElement('div');\r\n        this.$view = div;\r\n        this.$inputField = document.createElement('input');\r\n        this.$dataList = document.createElement(\"datalist\");\r\n        this.$dataList.id = \"data_\"+this.id;\r\n        this.$inputField.setAttribute(\"list\", \"data_\"+this.id);\r\n        if(data[\"value\"]) {\r\n            let values = data[\"value\"];\r\n            this.isMultiple = data[\"multiple\"] != null;\r\n            let option:HTMLOptionElement;\r\n            if(this.isMultiple) {\r\n                this.$selected = document.createElement(\"select\");\r\n                this.$selected.className = \"hide\";\r\n                this.$selected.multiple = true;\r\n\r\n                this.$selected.id = this.id;\r\n                this.$items = document.createElement(\"div\");\r\n                this.$items.className = \"selectedList\";\r\n                div.appendChild(this.$items);\r\n                this.$inputField.className = \"selectedInput\";\r\n                div.appendChild(this.$selected);\r\n                this.$view[\"style\"].setProperty(\"float\", \"left\");\r\n                let that = this;\r\n                this.$inputField.oninput = function(){that.onChange();}\r\n            } else {\r\n                this.$inputField.id = this.id;\r\n            }\r\n            for (let attr in values) {\r\n                if (!values.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                option = document.createElement(\"option\");\r\n                option.value = values[attr];\r\n                this.$dataList.appendChild(option);\r\n                if(this.isMultiple) {\r\n                    option = document.createElement(\"option\");\r\n                    option.value = values[attr];\r\n                    option.innerHTML = values[attr];\r\n                    this.$selected.appendChild(option);\r\n                }\r\n        }\r\n\r\n            div.appendChild(this.$inputField);\r\n            div.appendChild(this.$dataList);\r\n        }\r\n\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n            if(this.isMultiple) {\r\n                div.appendChild(this.$selected);\r\n            }\r\n        }\r\n\r\n        parent.appendChild(this);\r\n    }\r\n\r\n    public onChange() : void {\r\n        let textValue:string = this.$inputField.value;\r\n        if(textValue.length<1) {\r\n            return;\r\n        }\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == textValue) {\r\n                if(item.selected == false) {\r\n                    item.selected = true;\r\n                    item.defaultSelected = true;\r\n                    let test = document.createElement(\"li\");\r\n                    let that = this;\r\n                    test.onclick = function() {that.onDelete(item.value, test);};\r\n                    test.className = \"selectedItem\";\r\n                    test.innerHTML = item.value;\r\n                    this.$items.appendChild(test);\r\n                    this.$inputField.value = \"\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n    public onDelete(value:string, selectedItem:HTMLLIElement) : void {\r\n        this.$items.removeChild(selectedItem);\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == value ) {\r\n                if(item.selected) {\r\n                    item.selected = false;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","import {Control} from '../../Control';\r\n\r\nexport class BR extends Control {\r\n    public load(json: JSON): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('br');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            this.$view.setAttribute(attr, data[attr]);\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\nexport class Button extends Control {\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        this.$view = document.createElement('button');\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\nimport { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\nimport { Size } from '../index';\r\nimport ClazzProperty from './ClazzProperty';\r\nimport {SymbolLibary} from './Symbol';\r\nimport {StereoType} from './StereoType';\r\nimport {GraphListener} from '../../handlers/GraphListener';\r\n\r\nexport class Class extends Node {\r\n    public attributes: Attribute[] = [];\r\n    public methods: Method[] = [];\r\n    public modifier: string;\r\n    public stereoType: string;\r\n\r\n    protected $attrHeight = 25;\r\n    protected $attrFontSize = 12;\r\n    protected $labelView: Element;\r\n\r\n    constructor(json: JSON | string | Object | any) {\r\n        super(json);\r\n        return this;\r\n    }\r\n\r\n    public load(json?: any) {\r\n        if (!json) {\r\n            json = {};\r\n        }\r\n        let y = this.$labelHeight;\r\n        let labelObj = json.name || json.id || ('New ' + this.property);\r\n\r\n        let width: number = 150;\r\n        width = Math.max(width, Util.sizeOf(labelObj).width + 60);\r\n\r\n        if (json['attributes']) {\r\n            for (let attr of json['attributes']) {\r\n\r\n                let attrObj = new Attribute(attr);\r\n                attrObj.$owner = this;\r\n                this.attributes.push(attrObj);\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(attrObj.toString()).width);\r\n                let listener = new GraphListener(attrObj);\r\n                attrObj.$data.addListener(listener);\r\n            }\r\n        }\r\n        if (json['stereotype']) {\r\n            this.stereoType = json['stereotype'];\r\n        }\r\n        if (json['methods']) {\r\n            for (let method of json['methods']) {\r\n\r\n                let methodObj = new Method(method);\r\n                methodObj.$owner = this;\r\n                this.methods.push(methodObj);\r\n\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(methodObj.toString()).width);\r\n            }\r\n            y += this.$attrHeight;\r\n        }\r\n        this.withSize(width, y);\r\n    }\r\n\r\n    public getAttributes(): Attribute[] {\r\n        return this.attributes;\r\n    }\r\n\r\n    public getMethods(): Method[] {\r\n        return this.methods;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        let icon = SymbolLibary.draw({type: 'Class', property: 'HTML', width: '50', height: '50', transform: 'translate(-26,-21)'});\r\n        return icon;\r\n        // let group = this.createShape(\r\n//    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n//    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos: Point = this.getPos();\r\n        const size: Point = this.getSize();\r\n\r\n        let group = this.createShape({ tag: 'g', id: this.id, class: 'SVGClazz', transform: 'translate(0 0)' });\r\n\r\n        if (this.stereoType) {\r\n            let type = new StereoType(this.stereoType, pos.x, pos.y);\r\n            group.appendChild(type.getSVG());\r\n        }\r\n\r\n        // Full Shape\r\n        let options = null;\r\n        let style;\r\n        let clazzName;\r\n        if (this.$owner['options']) {\r\n            let options = this.$owner['options'];\r\n            if (options) {\r\n                style = options.style;\r\n            }\r\n        }\r\n        // = = = Background = = =\r\n        if (style === 'modern') {\r\n            clazzName = 'ClazzHeader';\r\n        }\r\n        clazzName = 'ClazzHeader';\r\n        const nodeShape = this.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            height: size.y,\r\n            width: size.x,\r\n            rx: 5,\r\n            ry: 5,\r\n            fill: 'none',\r\n            stroke: 'black',\r\n            'stroke-width': 1\r\n        });\r\n        if (clazzName) {\r\n            nodeShape.setAttribute('className', clazzName);\r\n            let styleHeader = Util.getStyle('ClazzHeader');\r\n            // headerHeight = styleHeader.getNumber('height');\r\n        }\r\n\r\n        // = = = LABEL = = =\r\n        let label = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y + this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': this.$labelFontSize,\r\n            fill: 'black'\r\n        });\r\n        label.textContent = this.id;\r\n        this.$labelView = label;\r\n\r\n        group.appendChild(nodeShape);\r\n        group.appendChild(label);\r\n\r\n        // = = = ATTRIBUTES = = =\r\n        if (this.attributes.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorLabelAttr = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight,\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight,\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorLabelAttr);\r\n\r\n            let groupOfAttributes = this.createShape({ tag: 'g', id: (this.id + 'Attributes') });\r\n            groupOfAttributes.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzAttribute');\r\n            group.appendChild(groupOfAttributes);\r\n\r\n            let y = pos.y + this.$labelHeight + this.$attrHeight / 2;\r\n            for (let attr of this.attributes) {\r\n\r\n                let attrSvg = attr.getSVG();\r\n                attr.$owner = this;\r\n\r\n                attrSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                attrSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfAttributes.appendChild(attrSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        // = = = METHODS = = =\r\n        let height = this.attributes.length * this.$attrHeight;\r\n        let y = pos.y + this.$labelHeight + height + this.$attrHeight / 2;\r\n        if (this.methods.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorAttrMethods = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorAttrMethods);\r\n\r\n            let groupOfMethods = this.createShape({ tag: 'g', id: (this.id + 'Methods') });\r\n            groupOfMethods.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzMethod');\r\n            group.appendChild(groupOfMethods);\r\n\r\n            y += this.$attrHeight / 2;\r\n            for (let method of this.methods) {\r\n\r\n                let methodSvg = method.getSVG();\r\n                method.$owner = this;\r\n\r\n                methodSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                methodSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfMethods.appendChild(methodSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        this.$view = group;\r\n        return group;\r\n    }\r\n\r\n    public copy(): Class {\r\n        let copy: Class;\r\n        copy = <Class>super.copy();\r\n\r\n        // copy label\r\n        copy.id = this.id + 'Copy';\r\n\r\n        // copy attributes\r\n        this.attributes.forEach(attr => {\r\n            copy.attributes.push(new Attribute(attr.toString()));\r\n        });\r\n        // copy methods\r\n        this.methods.forEach(method => {\r\n            copy.methods.push(new Method(method.toString()));\r\n        });\r\n        copy.reCalcSize();\r\n\r\n        return copy;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTCLICK,\r\n                EventBus.ELEMENTDRAG, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES, EventBus.RELOADPROPERTIES];\r\n    }\r\n\r\n    public addProperty(value: string, type: string): any {\r\n        if (!this[type] || !value || value.length === 0) {\r\n            return;\r\n        }\r\n\r\n        let extractedValue;\r\n        if (type === 'attributes') {\r\n            extractedValue = new Attribute(value);\r\n        }\r\n        else if (type === 'methods') {\r\n            extractedValue = new Method(value);\r\n        }\r\n\r\n        for (let valueOfType of this[type]) {\r\n            if (valueOfType.toString() === extractedValue.toString()) {\r\n                alert(extractedValue.toString() + ' already exists.');\r\n                extractedValue = undefined;\r\n                return;\r\n            }\r\n        }\r\n\r\n        this[type].push(extractedValue);\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        return extractedValue;\r\n    }\r\n\r\n    public addAttribute(value: string): Attribute {\r\n        return this.addProperty(value, 'attributes');\r\n    }\r\n\r\n    public addAttributeObj(attr: Attribute): Attribute[] {\r\n        this.attributes.push(attr);\r\n        return this.getAttributes();\r\n    }\r\n\r\n    public addMethodObj(method: Method): Method[] {\r\n        this.methods.push(method);\r\n        return this.getMethods();\r\n    }\r\n\r\n    public addMethod(value: string): Method {\r\n        return this.addProperty(value, 'methods');\r\n    }\r\n\r\n    public removeAttribute(attr: Attribute): void {\r\n        let idx = this.attributes.indexOf(attr);\r\n        this.attributes.splice(idx, 1);\r\n    }\r\n\r\n    public removeMethod(method: Method): void {\r\n        let idx = this.methods.indexOf(method);\r\n        this.methods.splice(idx, 1);\r\n    }\r\n\r\n    public removeProperty(property: ClazzProperty): void {\r\n\r\n        if (property instanceof Attribute) {\r\n            this.removeAttribute(<Attribute>property);\r\n        }\r\n\r\n        if (property instanceof Method) {\r\n            this.removeMethod(<Method>property);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n        let hasSizeChanged: [boolean, Size] = this.hasSizeChanged();\r\n\r\n        if (drawOnlyIfSizeChanged) {\r\n            if (!hasSizeChanged[0]) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n\r\n        // redraw only this clazz\r\n        this.$owner.$view.removeChild(this.$view);\r\n        let newSvg = this.getSVG();\r\n        this.$owner.$view.appendChild(newSvg);\r\n        this.$view = newSvg;\r\n        EventBus.register(this, newSvg);\r\n\r\n        this.redrawEdges();\r\n    }\r\n\r\n    public hasSizeChanged(): [boolean, Size] {\r\n        let oldSize = { width: this.getSize().x, height: this.getSize().y };\r\n        let newSize = this.reCalcSize();\r\n\r\n        // size doenst changed, so nothing to redraw\r\n        if (oldSize.width === newSize.width && oldSize.height === newSize.height) {\r\n            return [false, newSize];\r\n        }\r\n\r\n        return [true, newSize];\r\n    }\r\n\r\n    public updateLabel(newLabel: string): void {\r\n        if (this.$labelView) {\r\n            this.$labelView.textContent = newLabel;\r\n        }\r\n\r\n        // update label in all edges\r\n        this.$edges.forEach(edge => {\r\n            if (this.id === edge.$sNode.id) {\r\n                edge.source = newLabel;\r\n            }\r\n            else if (this.id === edge.$tNode.id) {\r\n                edge.target = newLabel;\r\n            }\r\n        });\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        this.reDraw(true);\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.modifier = modifier;\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reCalcSize(): Size {\r\n        // label\r\n        let newWidth = 150;\r\n        newWidth = Math.max(newWidth, Util.sizeOf(this.id).width + 30);\r\n\r\n        // attributes\r\n        this.attributes.forEach(attrEl => {\r\n\r\n            let widthOfAttr;\r\n            if (attrEl.$view) {\r\n                widthOfAttr = attrEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfAttr = Util.sizeOf(attrEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfAttr + 15);\r\n        });\r\n\r\n        // methods\r\n        this.methods.forEach(methodEl => {\r\n            let widthOfMethod;\r\n            if (methodEl.$view) {\r\n                widthOfMethod = methodEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfMethod = Util.sizeOf(methodEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfMethod + 15);\r\n        });\r\n\r\n        // TODO: height has to be calculated by font-size\r\n        this.getSize().x = newWidth;\r\n        this.getSize().y = this.$labelHeight + ((this.attributes.length + this.methods.length) * this.$attrHeight)\r\n            + this.$attrHeight;\r\n\r\n        let newSize = { width: newWidth, height: this.getSize().y };\r\n\r\n        return newSize;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    private getModernStyle(): Element {\r\n        let width, height, id, size, z, item, rect, g, board, styleHeader, headerHeight, x, y;\r\n        board = this.getRoot()['board'];\r\n        styleHeader = Util.getStyle('ClazzHeader');\r\n        headerHeight = styleHeader.getNumber('height');\r\n        width = 0;\r\n        height = 10 + headerHeight;\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].getType().toLowerCase() === 'objectdiagram') {\r\n            id = this.id.charAt(0).toLowerCase() + this.id.slice(1);\r\n            item = 'Object';\r\n        } else {\r\n            id = this.id;\r\n            item = 'Class';\r\n            if (this['counter']) {\r\n                id += ' (' + this['counter'] + ')';\r\n            }\r\n        }\r\n        g = Util.create({tag: 'g', model: this});\r\n        size = Util.sizeOf(id, this);\r\n        width = Math.max(width, size.width);\r\n        if (this.attributes && this.attributes.length > 0) {\r\n            height = height + this.attributes.length * 25;\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.attributes[z], this).width);\r\n            }\r\n        } else {\r\n            height += 20;\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            height = height + this.methods.length * 25;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.methods[z], this).width);\r\n            }\r\n        }\r\n        width += 20;\r\n\r\n        let pos = this.getPos();\r\n        y = pos.y;\r\n        x = pos.x;\r\n\r\n        rect = {\r\n            tag: 'rect',\r\n            'width': width,\r\n            'height': height,\r\n            'x': x,\r\n            'y': y,\r\n            'class': item + ' draggable',\r\n            'fill': 'none'\r\n        };\r\n        g.appendChild(Util.create(rect));\r\n        g.appendChild(Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            'x': x,\r\n            'y': y,\r\n            height: headerHeight,\r\n            'width': width,\r\n            'class': 'ClazzHeader'\r\n        }));\r\n\r\n        item = Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'class': 'InfoText',\r\n            'text-anchor': 'right',\r\n            'x': x + width / 2 - size.width / 2,\r\n            'y': y + (headerHeight / 2) + (size.height / 2),\r\n            'width': size.width\r\n        });\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].type.toLowerCase() === 'objectdiagram') {\r\n            item.setAttribute('text-decoration', 'underline');\r\n        }\r\n        item.appendChild(document.createTextNode(id));\r\n\r\n        g.appendChild(item);\r\n        g.appendChild(Util.create({\r\n            tag: 'line',\r\n            x1: x,\r\n            y1: y + headerHeight,\r\n            x2: x + width,\r\n            y2: y + headerHeight,\r\n            stroke: '#000'\r\n        }));\r\n        y += headerHeight + 20;\r\n\r\n        if (this.attributes) {\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': (x + 10),\r\n                    'y': y,\r\n                    value: this.attributes[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n            if (this.attributes.length > 0) {\r\n                y -= 10;\r\n            }\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            g.appendChild(Util.create({tag: 'line', x1: x, y1: y, x2: x + width, y2: y, stroke: '#000'}));\r\n            y += 20;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': x + 10,\r\n                    'y': y,\r\n                    value: this.methods[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n        }\r\n        return g;\r\n    }\r\n}\r\n","import {Util} from '../../util';\r\nimport {DiagramElement} from '../BaseElements';\r\nimport Data from '../../Data';\r\n\r\nexport default class ClazzProperty extends DiagramElement {\r\n\r\n    // Public (+)\r\n    // Private (-)\r\n    // Protected (#)\r\n    // Package (~)\r\n\r\n    public $data = new Data();\r\n//    public modifier: string = '+';\r\n//    public name: string;\r\n//    public type: string;\r\n//    public value: string;\r\n\r\n    constructor(data: any | JSON) {\r\n        super();\r\n        this.$data.setValue('modifier', '+');\r\n        this.$data.setValue('name', null);\r\n        this.$data.setValue('type', null);\r\n        this.$data.setValue('value', null);\r\n        this.extractData(data);\r\n    }\r\n\r\n    public update(data: any | JSON): void {\r\n        this.extractData(data);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.$data.setValue('modifier', modifier);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateType(type: string): void {\r\n        this.$data.setValue('type', type);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateValue(value: string): void {\r\n        this.$data.setValue('value', value);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateName(name: string): void {\r\n        this.$data.setValue('name', name);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public getName(): string {\r\n        return this.$data.getValue('name');\r\n    }\r\n\r\n    public getModifier(): string {\r\n        return this.$data.getValue('modifier');\r\n    }\r\n\r\n    public getType(): string {\r\n        return this.$data.getValue('type');\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let attrText = {\r\n            tag: 'text',\r\n            'text-anchor': 'start',\r\n            'alignment-baseline': 'middle',\r\n        };\r\n\r\n        let attrSvg = Util.createShape(attrText);\r\n        attrSvg.textContent = this.toString();\r\n\r\n        this.$view = attrSvg;\r\n\r\n        return attrSvg;\r\n    }\r\n\r\n    public toString(): string {\r\n        let value = this.$data.getValue('value');\r\n        let result = this.$data.getValue('modifier') + ' ';\r\n        result += this.$data.getValue('name') + ' : ';\r\n        result += this.$data.getValue('type');\r\n        if (value && value.length > 0) {\r\n            result += ' = ' + this.$data.getValue('value');\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.$data.setValue('type', data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.$data.setValue('name', data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.$data.setValue('modifier', data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n\r\n            // e.g. name : string or name:string\r\n            let dataSplitted = data.split(':');\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                let name;\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.$data.setValue('modifier', firstChar);\r\n                    name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                }\r\n                else {\r\n                    name = modifierAndNameSplitted;\r\n                }\r\n                // delete whitespaces in name\r\n                name = name.replace(/ /g, '_');\r\n\r\n                this.$data.setValue('name', name);\r\n                let type = dataSplitted[1].trim() || 'String';\r\n\r\n                // if the type was entered with a small begin letter\r\n                if (type.toLowerCase() === 'string') {\r\n                    type = 'String';\r\n                }\r\n                // delete whitespaces in type\r\n                type = type.replace(/ /g, '_');\r\n                this.$data.setValue('type',  type);\r\n            } else {\r\n                dataSplitted = data.split('=');\r\n                if (dataSplitted && dataSplitted.length === 2) {\r\n                    // modifer (and or) name\r\n                    let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                    // first char is +, - or #\r\n                    let firstChar = modifierAndNameSplitted[0];\r\n                    let name;\r\n                    if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                        this.$data.setValue('modifier', firstChar);\r\n                        name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                    }\r\n                    else {\r\n                        name = modifierAndNameSplitted;\r\n                    }\r\n                    // delete whitespaces in name\r\n                    name = name.replace(/ /g, '_');\r\n\r\n                    this.$data.setValue('name', name);\r\n                    let value = dataSplitted[1].trim() || '\"\"';\r\n                    this.$data.setValue('value', value);\r\n                    this.$data.setValue('type', typeof value);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected updateTextOfView() {\r\n        if (this.$view) {\r\n            this.$view.textContent = this.toString();\r\n        }\r\n        if (this.$owner) {\r\n            Util.saveToLocalStorage(this.$owner.$owner);\r\n        }\r\n    }\r\n}\r\n","import {Node} from \"./Node\";\r\n/**\r\n * Created by Stefan on 29.03.2017.\r\n */\r\n\r\nexport class Dice extends Node {\r\n    private value: number;\r\n    private max: number = 6;\r\n    private $animation: SVGElement;\r\n    private $zoom: number = 0.6;\r\n    private $border: number = 0.2;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super(data);\r\n        this.withSize(100, 100);\r\n    }\r\n\r\n    public setNumber(number: number) {\r\n        this.value = number;\r\n        this.refresh();\r\n    }\r\n\r\n    public refresh() {\r\n        if (this.$view) {\r\n            this.reset();\r\n            let group = this.createPointValue();\r\n            if (group) {\r\n                this.$view.appendChild(group);\r\n            }\r\n        }\r\n    }\r\n\r\n    public reset() {\r\n        if (this.$view) {\r\n            while (this.$view.children.length > 1) {\r\n                if(this.$view.children.item(this.$view.children.length - 1).tagName!== \"animateTransform\") {\r\n                    console.log(this.$view.children.item(this.$view.children.length - 1));\r\n                    this.$view.removeChild(this.$view.children.item(this.$view.children.length - 1));\r\n                }else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let dice: SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x + size.x * this.$border,\r\n            y: pos.y + size.y * this.$border,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y * this.$zoom,\r\n            width: size.x * this.$zoom,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        dice.appendChild(this.createShape(attr));\r\n\r\n        let group = this.createPointValue();\r\n        if (group) {\r\n            dice.appendChild(group);\r\n        }\r\n\r\n        this.$view = dice;\r\n        return dice;\r\n    }\r\n\r\n    public animationTimeout(newValues: number[]) {\r\n        if(newValues.length>0) {\r\n            let newValue = newValues.shift();\r\n            this.setNumber(newValue);\r\n            let that=this;\r\n            setTimeout(function() {that.animationTimeout(newValues)}, 100);\r\n        }\r\n    }\r\n\r\n    public roll() {\r\n        this.startAnimation();\r\n        let values:number[]=[];\r\n        let i:number;\r\n        for(i=1;i<this.max;i++) {\r\n            values.push(i);\r\n        }\r\n        for(i=this.max;i>0;i--) {\r\n            values.push(i);\r\n        }\r\n        let that=this;\r\n        values.push( Math.floor(Math.random() * this.max)+1 );\r\n        setTimeout(function() {that.animationTimeout(values)}, 100);\r\n    }\r\n    public startAnimation() {\r\n        if(this.$animation) {\r\n            return;\r\n        }\r\n        let center = this.getPos().x+this.getSize().x /2;\r\n        const attr = {\r\n            tag: 'animateTransform',\r\n            attributeType: \"xml\",\r\n            attributeName:\"transform\",\r\n            type:\"rotate\",\r\n            dur: \"1s\",\r\n            repeatCount:\"1\",\r\n            from:\"0 \"+center+\" \"+center,\r\n            to:\"360 \"+center+\" \"+center\r\n        };\r\n        this.$animation = <SVGElement>this.createShape(attr);\r\n        this.$view.appendChild(this.$animation);\r\n    }\r\n\r\n    public stopAnimation() {\r\n        if(this.$animation) {\r\n            this.$view.removeChild(this.$animation);\r\n            this.$animation = null;\r\n        }\r\n    }\r\n\r\n    public createPointValue() :SVGElement {\r\n        if (this.value == 1) {\r\n           return this.getCircle(2, 2);\r\n        } else if (this.value == 2) {\r\n            return this.getCircle(1, 1, 3, 3);\r\n        } else if (this.value == 3) {\r\n            return this.getCircle(1, 1, 2, 2, 3, 3);\r\n        } else if (this.value == 4) {\r\n            return this.getCircle(1, 1, 1, 3, 3, 1, 3, 3);\r\n        } else if (this.value == 5) {\r\n            return this.getCircle(1, 1, 1, 3, 2, 2, 3, 1, 3, 3);\r\n        } else if (this.value == 6) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 7) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 2, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 8) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 9) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private getCircle(...values:number[]) : SVGElement {\r\n        if (values.length % 2 > 0) {\r\n            return null;\r\n        }\r\n        let size = this.getSize();\r\n        let pos = this.getPos();\r\n        //FIXME let group:SVGElement = <SVGElement>this.createShape({tag: 'g', transform: 'translate(0 0)', height: size.y, width: size.x});\r\n        let group:SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n\r\n\r\n        for (let i: number = 0; i < values.length; i += 2) {\r\n            group.appendChild(this.createCircle(values[i], values[i + 1]));\r\n        }\r\n        return group;\r\n    }\r\n    private createCircle(x:number, y:number) : SVGElement {\r\n        let size = this.getSize();\r\n        let radius = size.x / 10*this.$zoom;\r\n        let border = size.y*this.$border;\r\n        let zoom = size.y*this.$zoom;\r\n        const attr = {\r\n            tag: 'circle',\r\n            r : radius,\r\n            cx: (size.x*this.$zoom * x) / 4 + border,\r\n            cy: (size.y*this.$zoom * y) / 4 + border,\r\n            stroke:\"black\",\r\n            \"stroke-width\":\"3\",\r\n            fill:\"red\",\r\n            style: 'fill:black;stroke:black;stroke-width:2'\r\n        };\r\n        return <SVGElement>this.createShape(attr);\r\n    }\r\n}","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\n\r\nexport class Div extends Control {\r\n    private className: string;\r\n\r\n    public load(data:JSON|any): any {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = <string>data;\r\n        } else {\r\n            id = data.id;\r\n            this.className = data.class;\r\n            this.property = data.property;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let div: HTMLElement = document.getElementById(id);\r\n\r\n        if (!this.property) {\r\n            // if(inputField){\r\n            // TODO disuss how to decide, which property we should listen on...\r\n            // this.property = id;\r\n            this.property = div.getAttribute('Property');\r\n            // }\r\n        }\r\n\r\n        if (div instanceof HTMLDivElement) {\r\n            this.$view = div;\r\n        } else {\r\n            if (!div) {\r\n                this.$view = document.createElement('div');\r\n                this.$view.setAttribute('id', this.id);\r\n                this.$view.setAttribute('property', this.property);\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists+\r\n        if (data.hasOwnProperty('property')) {\r\n            this.setProperty(data['property']);\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        this.$model = entity;\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.className || entity.hasProperty(this.className)) {\r\n                if (entity.id === this.property.split('.')[0]) {\r\n                    entity.addListener(this, this.className);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        this.$view.innerHTML = <string>newValue;\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Form extends Control {\r\n    // private applyingChange: boolean = false;\r\n    private children: Object = {};\r\n    // private property: string = \"\";\r\n\r\n    /**\r\n     * Data should look like the following json:\r\n     *\r\n     * <pre>{\r\n     *      id: \"t1\",\r\n     *      control: \"form\",\r\n     *      elements: [\r\n     *          {id: \"inputField1\", property: \"talk\"},\r\n     *          {id: \"inputField2\", property: \"room\"}\r\n     *      ]\r\n     * }</pre>\r\n     * @param data\r\n     */\r\n    public load(data: any) {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let form: HTMLElement = document.getElementById(id);\r\n\r\n        if (form instanceof HTMLFormElement) {\r\n            this.$view = form;\r\n            if (this.$view.hasAttribute('property')) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            if (!form) {\r\n                this.$view = document.createElement('form');\r\n                this.$view.setAttribute('id', this.id);\r\n\r\n                if (data.hasOwnProperty('property')) {\r\n                    this.property = data['property'];\r\n                }\r\n\r\n                // add all the attributes to the form element\r\n                for (let attr in data) {\r\n                    if (data.hasOwnProperty(attr) === false) {\r\n                        continue;\r\n                    }\r\n                    if (attr === 'elements') {\r\n                        continue;\r\n                    }\r\n                    this.$view.setAttribute(attr, data[attr]);\r\n                }\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists\r\n        let objId = this.property;\r\n        let hasItem = this.$owner.hasItem(objId);\r\n        if (hasItem) {\r\n            let item = this.$owner.getItem(objId);\r\n            item.addListener(this);\r\n            this.$model = item;\r\n        }\r\n\r\n        // now create all the sub input controls\r\n        for (let field of data.elements) {\r\n            // this.createField(field);\r\n            if (field.hasOwnProperty('property')) {\r\n                let property = field['property'];\r\n                property = this.property + '.' + property;\r\n                field['property'] = property;\r\n            }\r\n            if (!field.hasOwnProperty('class')) {\r\n                field['class'] = 'input';\r\n            }\r\n\r\n            // let the Bridge load the subControl\r\n            let control: Control = this.$owner.load(field, this);\r\n\r\n            // add subControl to children\r\n            this.children[control.getId()] = control;\r\n        }\r\n\r\n    }\r\n\r\n    public setProperty(id: string): void {\r\n        this.property = id;\r\n        let keys: string[] = Object.keys(this.children);\r\n        for (let k = 0; k < keys.length; k++) {\r\n            let key = keys[k];\r\n            let childControl = this.children[key];\r\n            // only set Property, if there is a Property defined before\r\n            if (childControl.property) {\r\n                childControl.setProperty(this.property + '.' + childControl.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object,  oldValue?: Object): boolean {\r\n        if (this.$owner != null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    /**\r\n     * Here we create the form elements and put all the attributes to them in order for the Control only having to load\r\n     * the data were appending here. Alternative would be loading with the bridge and afterwards setting\r\n     * the owner to the form instead of the body..\r\n     * @param field\r\n     */\r\n    /*private createField(field: Object) {\r\n     let control = 'input';\r\n     if (field.hasOwnProperty('class')) {\r\n     control = field['class'];\r\n     }\r\n     let input = document.createElement(control);\r\n     input.setAttribute('class', control);\r\n     let id: string;\r\n     if (!field.hasOwnProperty('id')) {\r\n     // TODO: not the best solution for generating unique id's for forms...\r\n     id = this.$owner.getId();\r\n     field['id'] = id;\r\n     }\r\n     if (field.hasOwnProperty('property')) {\r\n     let property = field['property'];\r\n     property = this.id + '.' + property;\r\n     input.setAttribute('property', property);\r\n     }\r\n     for (let attr in field) {\r\n     if (attr === 'property' || attr === 'class' || !field.hasOwnProperty(attr)) {\r\n     continue;\r\n     }\r\n     input.setAttribute(attr, field[attr]);\r\n     }\r\n\r\n     this.$viewElement.appendChild(input);\r\n\r\n     let newcontrol: Control = this.$owner.load(field['id']);\r\n     this.children[newcontrol.getId()] = newcontrol;\r\n     }*/\r\n}\r\n","/**\r\n * Created by Stefan on 01.03.2017.\r\n */\r\nimport {Control} from '../../Control';\r\n\r\nexport class HTML extends Control {\r\n    constructor(data: JSON|Object|any) {\r\n        super();\r\n\r\n        let id: string;\r\n        let tag: string;\r\n\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            data = {};\r\n        } else if (data) {\r\n            id = data.id;\r\n        }\r\n        if (id) {\r\n            this.id = id;\r\n            this.$view = document.getElementById(id);\r\n        }\r\n        if (!this.$view) {\r\n            if (data) {\r\n                tag = data['tag'] || 'div';\r\n            } else {\r\n                tag = 'div';\r\n            }\r\n            this.$view = document.createElement(tag);\r\n            let parent = document.getElementsByTagName('body')[0];\r\n            parent.appendChild(this.$view);\r\n        }\r\n        if (!parent) {\r\n            return;\r\n        }\r\n        this.writeAttribute(data, this.$view);\r\n    }\r\n\r\n    private writeAttribute(properties: Object, entity?: any) {\r\n        let lowKey;\r\n        if (!entity) {\r\n            lowKey = properties['tag'] || 'div';\r\n            entity = document.createElement(lowKey);\r\n        }\r\n        for (let key in properties) {\r\n            if (!properties.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            lowKey = key.toLowerCase();\r\n            if (properties[key] === null) {\r\n                entity.setAttribute(key, '');\r\n                continue;\r\n            }\r\n\r\n            if (lowKey === 'tag' || lowKey.charAt(0) === '$' || lowKey === '$graphModel' || lowKey === 'class') {\r\n                continue;\r\n            }\r\n            if (lowKey === 'children') {\r\n                if (Array.isArray(properties[key])) {\r\n                    for (let item in properties[key]) {\r\n                        if (properties[key].hasOwnProperty(item) === false) {\r\n                            continue;\r\n                        }\r\n                        let child = this.writeAttribute(item);\r\n                        if (child) {\r\n                            entity.appendChild(child);\r\n                        }\r\n                    }\r\n                } else {\r\n                    let child = this.writeAttribute(properties[key]);\r\n                    if (child) {\r\n                        entity.appendChild(child);\r\n                    }\r\n                }\r\n                continue;\r\n            }\r\n            entity[key] = properties[key];\r\n        }\r\n        return entity;\r\n    }\r\n}\r\n","import { Point } from '../BaseElements';\r\nimport { Util } from '../../util';\r\nimport { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\n\r\nexport class InfoText extends Node {\r\n\r\n    public cardinality: string = '';\r\n    private $heightOfOneTextItem: number;\r\n    private $cardinalitySvg: Element;\r\n    private $propertySvg: Element;\r\n    private $rectBackground: Element;\r\n\r\n    constructor(info: any) {\r\n        super(info);\r\n        if (typeof (info) === 'string') {\r\n            this.id = info;\r\n        } else {\r\n            if (info.property) {\r\n                this.property = info.property;\r\n            }\r\n            if (info.cardinality) {\r\n                this.cardinality = info.cardinality;\r\n            }\r\n        }\r\n        this.$isDraggable = true;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n    }\r\n\r\n    public updateCardinality(cardinality: string): void {\r\n        this.cardinality = cardinality;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (this.$rectBackground) {\r\n            this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n            this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n        }\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((cardinality.length === 0 && this.property.length > 0) || !this.$cardinalitySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$cardinalitySvg) {\r\n            this.$cardinalitySvg.textContent = cardinality;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.property.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    public updateProperty(property: string): void {\r\n        this.property = property;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((property.length === 0 && this.cardinality.length > 0) || !this.$propertySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$propertySvg) {\r\n            this.$propertySvg.textContent = property;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.cardinality.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos: Point = this.getPos();\r\n        let group = Util.create({ tag: 'g', class: 'SVGEdgeInfo', transform: 'translate(0, 0)' });\r\n\r\n        // append rect as background for text items\r\n        this.$rectBackground = Util.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y - this.$heightOfOneTextItem + 3,\r\n            width: this.getSize().x,\r\n            height: this.getSize().y,\r\n            fill: '#DDD',\r\n            'stroke-width': 0,\r\n            rx: '5',\r\n            ry: '5'\r\n        });\r\n        group.appendChild(this.$rectBackground);\r\n\r\n        let y = pos.y;\r\n        if (this.property) {\r\n            // property\r\n            this.$propertySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$propertySvg.textContent = this.property;\r\n            group.appendChild(this.$propertySvg);\r\n\r\n            y += this.$heightOfOneTextItem;\r\n        }\r\n\r\n        // cardinality\r\n        if (this.cardinality) {\r\n            this.$cardinalitySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$cardinalitySvg.textContent = this.cardinality;\r\n            group.appendChild(this.$cardinalitySvg);\r\n        }\r\n\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        let cardinalityAvailable = this.cardinality && this.cardinality.length > 0;\r\n        let propertyAvailable = this.property && this.property.length > 0;\r\n\r\n        return !propertyAvailable && !cardinalityAvailable;\r\n    }\r\n\r\n    public redrawFromEdge(newPos: Point): void {\r\n\r\n        if (!newPos) {\r\n            return;\r\n        }\r\n\r\n        let oldPos = this.getPos();\r\n\r\n        // get difference between new and the old position\r\n        let diffPos = new Point();\r\n        diffPos.x = newPos.x - oldPos.x;\r\n        diffPos.y = newPos.y - oldPos.y;\r\n\r\n        // get translate information\r\n        let translation = this.$view.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        let sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        // set new traslation values\r\n        let newTransX = (sx + diffPos.x);\r\n        let newTransY = (sy + diffPos.y);\r\n        this.$view.setAttributeNS(null, 'transform', 'translate(' + newTransX + ' ' + newTransY + ')');\r\n\r\n        // set new position of svg\r\n        this.getPos().x = newPos.x;\r\n        this.getPos().y = newPos.y;\r\n    }\r\n\r\n    public getText(): string {\r\n        let infoTxt: string = '';\r\n\r\n        if (this.property) {\r\n            infoTxt = this.property;\r\n        }\r\n        if (this.cardinality) {\r\n            if (infoTxt.length > 0) {\r\n                infoTxt += '\\n';\r\n            }\r\n            infoTxt += this.cardinality;\r\n        }\r\n\r\n        return infoTxt;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    private calcSize(): Point {\r\n        let text: string = this.getText();\r\n        let items: Array<string> = text.split('\\n');\r\n\r\n        let maxSize = new Point(0, 0);\r\n        if (text.length === 0) {\r\n            return maxSize;\r\n        }\r\n\r\n        for (let i = 0; i < items.length; i += 1) {\r\n            // calculate size\r\n            let sizeOfText: ClientRect = Util.sizeOf(items[i]);\r\n            maxSize.x = Math.max(maxSize.x, sizeOfText.width);\r\n            maxSize.y += sizeOfText.height;\r\n\r\n            this.$heightOfOneTextItem = sizeOfText.height;\r\n        }\r\n\r\n        return maxSize;\r\n    }\r\n    private resetAllSvgElements() {\r\n        this.$cardinalitySvg = undefined;\r\n        this.$view = undefined;\r\n        this.$propertySvg = undefined;\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\nimport {PropertyBinder} from '../../PropertyBinder';\r\n\r\nexport class Input extends Control {\r\n    private type: string;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data = super.initViewDataProperties(oldData);\r\n        if ('checkbox' === this.type || 'radio' === this.type) {\r\n            data.addFrom('checked', oldData);\r\n        }\r\n        data.addFrom('value', oldData);\r\n        data.addFrom('type', oldData);\r\n        return data;\r\n    }\r\n\r\n    public load(data: any) {\r\n        let id: string;\r\n        let inputField: HTMLElement;\r\n        let useData: boolean;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            useData = true;\r\n        } else {\r\n            id = data.id;\r\n            if (data.type) {\r\n                this.setType(data['type']);\r\n            } else {\r\n                this.setType('text');\r\n            }\r\n            if (data.hasOwnProperty('property')) {\r\n                this.setProperty(data['property']);\r\n            }\r\n            useData = false;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n\r\n        inputField = document.getElementById(id);\r\n\r\n        if (useData) {\r\n            if (inputField) {\r\n                // TODO disuss how to decide, which property we should listen on...\r\n                // this.property = id;\r\n                if (inputField.hasAttribute('Property')) {\r\n                    this.setProperty(inputField.getAttribute('Property'));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (inputField instanceof HTMLInputElement) {\r\n            this.setView(inputField);\r\n            this.type = inputField.type;\r\n            // useData = false;\r\n        } else {\r\n            if (!inputField) {\r\n                this.setView(document.createElement('input'));\r\n                this.$viewData = this.initViewDataProperties(this.$viewData);\r\n                // append viewListener\r\n                // this.$view.addEventListener('change', this.$viewListener);\r\n                if (typeof(data) !== 'string') {\r\n                    for (let attr in data) {\r\n                        if (data.hasOwnProperty(attr) === false) {\r\n                            continue;\r\n                        }\r\n                        // this.$view[attr] = data[attr];\r\n                        this.$viewData.setValue(attr, data[attr]);\r\n                    }\r\n                } else {\r\n                    if (this.type) {\r\n                        this.$view.setAttribute('type', this.type);\r\n                    }\r\n                    if (data.hasOwnProperty('class')) {\r\n                        this.$view.setAttribute('class', data['class']);\r\n                    }\r\n                    this.$view.setAttribute('id', this.id);\r\n                    this.$view.setAttribute('property', this.property);\r\n                }\r\n\r\n                if (data.value) {\r\n                    // if theres a value at the control, we want to change the model to the new value\r\n                    if (this.$model) {\r\n                        this.$model.setValue(this.lastProperty, data.value);\r\n                    }\r\n                }\r\n                if (this.$model) {\r\n                    PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                }\r\n\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (this.property && entity) {\r\n            if (entity.id === this.property.split('.')[0]) {\r\n                this.$model = entity;\r\n                PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                // entity.addListener(this, this.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n    // TODO FIXME protected updateElement(property: string, value: string) {\r\n    //     if (this.$view instanceof HTMLInputElement) {\r\n    //         if (value != null) {\r\n    //             if(property == this.lastProperty) {\r\n    //                 (<HTMLInputElement>this.$view)[this.getStandardProperty()] = value;\r\n    //             } else {\r\n    //                 // this.getRoot().setValue(this, property, value, (<HTMLInputElement>this.$view)[property]);\r\n    //                 (<HTMLInputElement>this.$view)[property] = value;\r\n    //             }\r\n    //         } else {\r\n    //             delete (<HTMLInputElement>this.$view)[property];\r\n    //         }\r\n    //     }\r\n    // }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            super.controlChanged(ev);\r\n        }\r\n// <<<<<<< HEAD\r\n//             let newVal = element[this.getStandardProperty()];\r\n//             if (this.isKeyOnly()) {\r\n//                 // we expect, element[this.lastProperty] to be boolean:\r\n//                 if (!newVal) {\r\n//                     newVal = null;\r\n//                 }\r\n//             } else {\r\n//             }\r\n        // let $graphModel;\r\n        // let value;\r\n        /*if (this.$graphModel) {\r\n            $graphModel = this.$graphModel;\r\n            value = this.$graphModel.getValue(this.lastProperty);\r\n        } else {\r\n            $graphModel = this;\r\n            if (this.$view) {\r\n                value = this.$view[this.lastProperty];\r\n            }\r\n        }*/\r\n        // this.$model.setValue(this.lastProperty, newVal);\r\n        // this.propertyChange(this.$graphModel,this.lastProperty, this.$graphModel.getValue(this.lastProperty), newVal);\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n// =======\r\n        // let newVal = element[this.lastProperty];\r\n        // if (this.isKeyOnly()) {\r\n        //     // we expect, element[this.lastProperty] to be boolean:\r\n        //     if (!newVal) {\r\n        //         newVal = null;\r\n        //     }\r\n        // } else {\r\n        // }\r\n        // let $graphModel;\r\n        // let value;\r\n\r\n        // $graphModel = this.getViewData();\r\n        // if (this.$graphModel) {\r\n        //     $graphModel = this.$graphModel;\r\n        //     value = this.$graphModel.getValue(this.lastProperty);\r\n        // } else {\r\n        //     $graphModel = this;\r\n        //     if (this.$view) {\r\n        //         value = this.$view[this.lastProperty];\r\n        //     }\r\n        // }\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n//            this.saveViewInData();\r\n// >>>>>>> addOldFunctions\r\n//         } else {\r\n//             console.log('value does not match the pattern...');\r\n//         }\r\n    }\r\n\r\n    public setType(type: string): void {\r\n        let oldValue: string = this.type;\r\n        if (oldValue === type) {\r\n            return;\r\n        }\r\n        if (type === 'radio') {\r\n            this.$viewData.setValue('checked', null);\r\n        } else {\r\n            this.$viewData.removeKey('checked');\r\n        }\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\n\r\nexport class Label extends Control {\r\n    public load(data: JSON): any {\r\n        this.createControl(this.$owner, data);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('label');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr === 'textContent') {\r\n                this.$view.textContent = data['textContent'];\r\n            } else {\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Method extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.updateType(data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.updateType(data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.updateType(data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n            // e.g. setName() : string or name:string\r\n            let dataSplitted = data.split(':');\r\n\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }\r\n                else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType(dataSplitted[1].trim() || 'void');\r\n            }\r\n            // set default return type of void\r\n            else {\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = data.trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }  else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType('void');\r\n            }\r\n        }\r\n\r\n        if (Util.includes(this.$data.getValue('name'), '(') && !Util.includes(this.$data.getValue('name'), ')') === false) {\r\n            this.$data.setValue('name', this.$data.getValue('name') + '()');\r\n        }\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\nimport {Association} from '../edges';\r\nimport { GraphModel } from '..';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\n\r\nexport class Node extends DiagramElement {\r\n    public $edges: Association[] = [];\r\n    public $minWidth: number = 150;\r\n    public $minheight: number = 25;\r\n    public $defaulEdgeType: string;\r\n\r\n    constructor(data: JSON|string|Object|any) {\r\n        super();\r\n\r\n        // default size\r\n        this.withSize(this.$minWidth, this.$minheight);\r\n\r\n        if (data) {\r\n            if (data['x'] && data['y']) {\r\n                this.withPos(data['x'], data['y']);\r\n            }\r\n            if (data['width'] || data['height']) {\r\n                this.withSize(data['width'], data['height']);\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos = this.getPos();\r\n        const size = this.getSize();\r\n\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x - size.x / 2,\r\n            y: pos.y - size.y / 2,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y,\r\n            width: size.x,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        const shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'middle',\r\n            'font-family': 'Verdana',\r\n            'font-size': '14',\r\n            fill: 'black'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = this.id;\r\n\r\n        let group = this.createShape({tag: 'g', id: this.id});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public copy(): Node {\r\n        let copy: Node;\r\n        // create new id\r\n        let model = <GraphModel>this.$owner || <GraphModel>this.getRoot();\r\n        if (model) {\r\n            let type = this.property || Node.name;\r\n            let newId = model.getNewId(type);\r\n            copy = <Node>model.createElement(type, newId, null);\r\n            copy.withSize(this.getSize().x, this.getSize().y);\r\n            copy.$owner = model;\r\n        } else {\r\n            copy.id = this.id + '-copy';\r\n            copy.$owner = this.getRoot();\r\n        }\r\n        return copy;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n// EMPTY\r\n    }\r\n    public addAttribute(value: string): Attribute {\r\n        return null;\r\n    }\r\n    public getAttributes(): Attribute[] {\r\n        return null;\r\n    }\r\n    public addMethod(value: string): Method {\r\n        return null;\r\n    }\r\n    public updateLabel(newLabel: string): void {\r\n// EMPTY\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\n\r\nexport class SO extends DiagramElement {\r\n    public static create(element: Object) {\r\n        let result: SO = new SO();\r\n        for (let key in element) {\r\n            if (element.hasOwnProperty(key) === false) {\r\n                continue;\r\n            }\r\n            result.withKeyValue(key, element[key]);\r\n\r\n        }\r\n        return result;\r\n    }\r\n\r\n    public withKeyValue(key: string, value: any): SO {\r\n        if (key === 'typ') {\r\n            this.property = value;\r\n        } else if (key === 'x') {\r\n            this.withPos(value, null);\r\n        } else if (key === 'y') {\r\n            this.withPos(null, value);\r\n        } else if (key === 'width') {\r\n            this.withSize(value, null);\r\n        } else if (key === 'height') {\r\n            this.withSize(null, value);\r\n        } else {\r\n            this[key] = value;\r\n        }\r\n        return this;\r\n    }\r\n}\r\n","import {Point} from '../BaseElements';\r\nimport {Node} from './Node';\r\n\r\nexport class StereoType extends Node {\r\n\r\n    protected stereoType: string;\r\n\r\n    constructor (type: string, x: number, y: number) {\r\n        super('');\r\n        this.withPos(x, y);\r\n        this.setStereoType(type);\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        let pos: Point = this.getPos();\r\n        let size: Point = this.getSize();\r\n\r\n               // = = = STEREOTYPE = = =\r\n        let stereoType = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y - this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': 10,\r\n            'font-weight': 'bold',\r\n            fill: 'black'\r\n        });\r\n        stereoType.textContent = this.stereoType;\r\n\r\n        this.$view = stereoType;\r\n        return stereoType;\r\n    }\r\n\r\n    public setStereoType(value: string): void {\r\n        this.stereoType = '<<' + value + '>>';\r\n    }\r\n\r\n    public getStereoType(): string {\r\n        return this.stereoType;\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { SO } from './SO';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport { Util } from '../../util';\r\n\r\nexport class Symbol extends Node {\r\n    public $heightMax: number = 0;\r\n    public $heightMin: number = 0;\r\n\r\n    constructor(typ: string) {\r\n        super(typ);\r\n    }\r\n\r\n    public draw(typ?: string): SVGElement {\r\n        return SymbolLibary.draw(this);\r\n    }\r\n}\r\n\r\n// \t\t\t\t###################################################### SymbolLibary ####################################################################################\r\n// Example Items\r\n// {tag: 'path', d: ''}\r\n// {tag: 'rect', width:46, height:34}\r\n// {tag: 'ellipse', width:23, height:4}\r\n// {tag: 'line', x1:650, y1:-286, x2:650, y2:-252}\r\n// {tag: 'circle', r:5, x:12, y:0}\r\n// {tag: 'image', height: 30, width: 50, content$src: hallo}\r\n// {tag: 'text', 'text-anchor': 'left', x: '10'}\r\nexport class SymbolLibary {\r\n\r\n    public static drawSVG(node: any): SVGSVGElement {\r\n        // const lib = new SymbolLibary();\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            const parent = SO.create(node);\r\n            parent['property'] = 'SVG';\r\n            symbol = fn(parent);\r\n            // symbol = fn.apply(lib, parent);\r\n\r\n            return SymbolLibary.createGroup(parent, symbol);\r\n        }\r\n        return symbol;\r\n    }\r\n\r\n    public static draw(node: any, parent?: Object): SVGElement {\r\n        // Node is Symbol or simple Object\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            if (!(node instanceof DiagramElement)) {\r\n                node = SO.create(node);\r\n                if (!node.property) {\r\n                    node.property = 'SVG';\r\n                }\r\n            }\r\n            symbol = fn.apply(this, [node]);\r\n            if (!parent) {\r\n                return SymbolLibary.createGroup(node, symbol);\r\n            }\r\n            return SymbolLibary.createGroup(node, symbol);\r\n        } else if (node.property) {\r\n            symbol = new Symbol(node.property);\r\n            symbol.init(node);\r\n            let pos = node.getPos();\r\n            let size = node.getSize();\r\n            symbol.withPos(pos.x, pos.y);\r\n            symbol.withSize(size.x, size.y);\r\n            symbol['value'] = node['value'];\r\n            parent = node['$parent'];\r\n            return SymbolLibary.draw(symbol, parent);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public static upFirstChar(txt: string): string {\r\n        return txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase();\r\n    }\r\n\r\n    public static isSymbolName(typ: string): boolean {\r\n        let fn = SymbolLibary['draw' + SymbolLibary.upFirstChar(typ)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static isSymbol(node: Symbol) {\r\n        let fn = SymbolLibary[SymbolLibary.getName(node)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static getName(node: any): string {\r\n        if (node['type']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['type']);\r\n        }\r\n        if (node.property) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node.property);\r\n        }\r\n        if (node['src']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['src']);\r\n        }\r\n        return 'drawNode';\r\n    }\r\n\r\n    /*FIXME   public static createImage(node: Symbol, $graphModel:Node) {\r\n           let n, img: HTMLElement;\r\n           // node.$graphModel = node;\r\n           if (SymbolLibary.isSymbol(node)) {\r\n               return SymbolLibary.draw(null, node);\r\n           }\r\n           n = {tag: 'img', $graphModel: node, src: node['src']};\r\n           let size = node.getSize();\r\n           if (size.isEmpty() === false) {\r\n               n['width'] = size.x;\r\n               n['height'] = size.y;\r\n           } else {\r\n               n['xmlns'] = 'http://www.w3.org/1999/xhtml';\r\n           }\r\n           img = Util.create(n);\r\n           if (size.isEmpty()) {\r\n               $graphModel.appendImage(img);\r\n               return null;\r\n           }\r\n           return img;\r\n       }*/\r\n\r\n    public static createGroup(node: DiagramElement, group: any) {\r\n        let func, y: number, z: number, box, item: Element, transform, i, offsetX = 0, offsetY = 0;\r\n        let svg: any;\r\n        if (node.property.toUpperCase() === 'HTML') {\r\n            let so = {\r\n                tag: 'svg',\r\n                style: { left: (group.x | 0) + node.getPos().x, top: (group.y | 0) + node.getPos().y, position: 'absolute' }\r\n            };\r\n            if (node['transform']) {\r\n                so['transform'] = node['transform'];\r\n            }\r\n            svg = Util.create(so);\r\n        } else {\r\n            svg = Util.create({ tag: 'g' });\r\n            transform = 'translate(' + group.getPos().x + ' ' + group.getPos().y + ')';\r\n            if (group.scale) {\r\n                transform += ' scale(' + group.scale + ')';\r\n            }\r\n            if (group.rotate) {\r\n                transform += ' rotate(' + group.rotate + ')';\r\n            }\r\n            svg.setAttribute('transform', transform);\r\n            if (group['id']) {\r\n                svg.id = group['id'];\r\n            }\r\n        }\r\n\r\n        if (node['tooltip']) {\r\n            const tooltipTitleAttr = {\r\n                tag: 'title'\r\n            };\r\n            let tooltipTitle = Util.createShape(tooltipTitleAttr);\r\n            tooltipTitle.textContent = node['tooltip'];\r\n            svg.appendChild(tooltipTitle);\r\n        }\r\n\r\n        if (node['background']) {\r\n            const attrCircle = {\r\n                tag: 'circle',\r\n                cx: 20,\r\n                cy: 20,\r\n                r: 17,\r\n                stroke: '#888',\r\n                'stroke-width': 0,\r\n                fill: '#DDD'\r\n            };\r\n            svg.appendChild(Util.create(attrCircle));\r\n        }\r\n\r\n        for (i = 0; i < group.items.length; i += 1) {\r\n            svg.appendChild(Util.create(group.items[i]));\r\n        }\r\n        let elements = node['elements'];\r\n        Util.setSize(svg, group.width + node.getSize().x, group.height + node.getSize().y);\r\n        node['$heightMin'] = node.getSize().y;\r\n        if (elements) {\r\n            for (i = 0; i < elements.length; i += 1) {\r\n                if (!elements[i] && elements[i].length < 1) {\r\n                    elements.splice(i, 1);\r\n                    i -= 1;\r\n                }\r\n            }\r\n            box = Util.create({ tag: 'g' });\r\n            // Calculate new Height\r\n            let c: number;\r\n            z = 0;\r\n            for (c = 0; c < elements.length; c += 1) {\r\n                if (typeof elements[c] === 'string') {\r\n                    z += 1;\r\n                } else {\r\n                    z += elements[c].length;\r\n                }\r\n            }\r\n            z = z * 25 + 6;\r\n            box.appendChild(Util.create({\r\n                tag: 'rect',\r\n                rx: 0,\r\n                x: offsetX,\r\n                y: (offsetY + 28),\r\n                width: 70,\r\n                height: z,\r\n                stroke: '#000',\r\n                fill: '#fff',\r\n                opacity: '0.7'\r\n            }));\r\n            node['$heightMax'] = z + node['$heightMin'];\r\n\r\n            svg['elements'] = elements;\r\n            if (node['type'] === 'DropDown') {\r\n                svg['activ'] = Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': 60,\r\n                    'x': (10 + offsetX),\r\n                    'y': 20,\r\n                    value: node['activText']\r\n                });\r\n                svg.appendChild(svg.activ);\r\n            }\r\n\r\n            y = offsetY + 46;\r\n            // 46 -28 = 18\r\n\r\n            func = function (event: Event) {\r\n                if (svg.activ) {\r\n                    svg.activ.textContent = (<any>event.currentTarget).value;\r\n                }\r\n            };\r\n            let txt: string;\r\n            let textClass = 'SVGTEXT';\r\n            for (z = 0; z < elements.length; z += 1) {\r\n                if (typeof elements[z] === 'string') {\r\n                    txt = elements[z];\r\n                } else {\r\n                    item = this.addText(y, offsetX, box, elements[z][0], 'SVGTEXT');\r\n                    y += 26;\r\n                    for (c = 1; c < elements[z].length; c += 1) {\r\n                        item = this.addText(y, offsetX, box, '* ' + elements[z][c], 'SVGTEXTITEM');\r\n\r\n                        item['value'] = elements[z];\r\n                        if (node['action']) {\r\n                            item['onclick'] = node['action'];\r\n                        } else {\r\n                            item['onclick'] = func;\r\n                        }\r\n                        y += 26;\r\n                    }\r\n                    txt = elements[z];\r\n                    let subBox = Util.create({\r\n                        tag: 'rect',\r\n                        rx: 0,\r\n                        x: offsetX,\r\n                        y: (offsetY + 28),\r\n                        width: 60,\r\n                        height: z,\r\n                        stroke: '#000',\r\n                        fill: '#fff',\r\n                        opacity: '0.7'\r\n                    });\r\n                    continue;\r\n                }\r\n                // let txt = elements[z];\r\n                item = this.addText(y, offsetX, box, txt, textClass);\r\n\r\n                item['value'] = elements[z];\r\n                if (node['action']) {\r\n                    item['onclick'] = node['action'];\r\n                } else {\r\n                    item['onclick'] = func;\r\n                }\r\n                y += 26;\r\n            }\r\n            svg.choicebox = box;\r\n        }\r\n        svg.tool = node;\r\n        svg.onclick = function () {\r\n            if (svg.status === 'close') {\r\n                svg.open();\r\n            } else {\r\n                svg.close();\r\n            }\r\n        };\r\n        svg.close = function () {\r\n            if (svg.status === 'open' && svg.choicebox) {\r\n                this.removeChild(svg.choicebox);\r\n            }\r\n            svg.status = 'close';\r\n            svg.tool.$size.height = svg.tool.heightMin;\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x, g.tool.height + g.tool.y);\r\n            Util.setSize(svg, svg.tool.$size.x, svg.tool.$size.y);\r\n        };\r\n        svg.open = function () {\r\n            if (this.tagName === 'svg') {\r\n                return;\r\n            }\r\n            if (svg.status === 'close' && svg.choicebox) {\r\n                this.appendChild(svg.choicebox);\r\n            }\r\n            svg.status = 'open';\r\n            svg.tool.$size.height = svg.tool.heightMax;\r\n            Util.setSize(svg, svg.tool.width, svg.tool.height);\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x + 10, g.tool.height + g.tool.y + 10);\r\n        };\r\n        svg.close();\r\n        return svg;\r\n    }\r\n\r\n    public static addChild(parent: SVGElement, json: JSON | Element): void {\r\n        let item: Element;\r\n        if ((<any>json).offsetLeft) {\r\n            item = <Element>json;\r\n        } else {\r\n            item = Util.create(json);\r\n        }\r\n        item.setAttribute('class', 'draggable');\r\n        parent.appendChild(item);\r\n    }\r\n\r\n    public static all(node: any): void {\r\n        SymbolLibary.drawSmiley(node);\r\n        SymbolLibary.drawDatabase(node);\r\n        SymbolLibary.drawLetter(node);\r\n        SymbolLibary.drawMobilephone(node);\r\n        SymbolLibary.drawWall(node);\r\n        SymbolLibary.drawActor(node);\r\n        SymbolLibary.drawLamp(node);\r\n        SymbolLibary.drawArrow(node);\r\n        SymbolLibary.drawButton(node);\r\n        SymbolLibary.drawDropdown(node);\r\n        SymbolLibary.drawClassicon(node);\r\n        SymbolLibary.drawClassWithEdgeicon(node);\r\n    }\r\n\r\n    public static drawHamburger(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'circle', r: 10, fill: '#ccc', cx: 12, cy: 12, 'stroke-width': 1, stroke: 'black'},\r\n                { tag: 'path', d: 'M 8,7 H 16 M 8,12 H 16 M 8,17 H 16', stroke: 'black', fill: 'none' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawSmiley(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'path', d: 'm49.01774,25.64542a24.5001,24.5 0 1 1 -49.0001,0a24.5001,24.5 0 1 1 49.0001,0z', stroke: 'black', fill: 'none' }, { tag: 'path', d: 'm8,31.5c16,20 32,0.3 32,0.3' },\r\n                { tag: 'path', d: 'm19.15,20.32a1.74,2.52 0 1 1 -3.49,0a1.74,2.52 0 1 1 3.49,0z' },\r\n                { tag: 'path', d: 'm33,20.32a1.74,2.52 0 1 1 -3.48,0a1.74,2.52 0 1 1 3.48,0z' },\r\n                { tag: 'path', d: 'm5.57,31.65c3.39,0.91 4.03,-2.20 4.03,-2.20' },\r\n                { tag: 'path', d: 'm43,32c-3,0.91 -4,-2.20 -4.04,-2.20' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDatabase(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 40,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,-6.26 25.03,-6.26 25.03,0l0,25.82c0,6.26 -25.03,6.26 -25.03,0l0,-25.82z',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLetter(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 17,\r\n            items: [\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1,1l22,0l0,14l-22,0l0,-14z' },\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1.06,1.14l10.94,6.81l10.91,-6.91' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMobilephone(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 4.2 0.5 15.61 0c 2 0 3.7 1.65 3.7 3.7l 0 41.6c 0 2-1.65 3.7-3.7 3.7l-15.6 0c-2 0-3.7-1.6-3.7-3.7l 0-41.6c 0-2 1.6-3.7 3.7-3.7z',\r\n                    fill: 'none',\r\n                    stroke: 'black'\r\n                },\r\n                { tag: 'path', d: 'm 12.5 2.73a 0.5 0.5 0 1 1-1 0 0.5 0.5 0 1 1 1 0z' },\r\n                { tag: 'path', d: 'm 14 46a 2 2 0 1 1-4 0 2 2 0 1 1 4 0z' },\r\n                { tag: 'path', d: 'm 8 5 7 0' },\r\n                { tag: 'path', d: 'm 1.63 7.54 20.73 0 0 34-20.73 0z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawWall(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'path', d: 'm26,45.44l-5,3.56l-21,-9l0,-36.41l5,-3.56l20.96,9l-0,36.4z' },\r\n                {\r\n                    tag: 'path',\r\n                    stroke: 'white',\r\n                    d: 'm2.21,11l18.34,7.91m-14.46,-12.57l0,6.3m8.2,21.74l0,6.35m-8.6,-10l0,6.351m4.1,-10.67l0,6.3m4.8,-10.2l0,6.3m-8.87,-10.23l0,6.35m4.78,-10.22l0,6.35m-8,14.5l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m0,-13l0,34m-18.23,-41.84l18.3,8m0,0.11l5,-3.57'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawActor(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'line', stroke: '#000', x1: '12', y1: '10', x2: '12', y2: '30' },\r\n                { tag: 'circle', stroke: '#000', cy: '5', cx: '12', r: '5' },\r\n                { tag: 'line', stroke: '#000', y2: '18', x2: '25', y1: '18', x1: '0' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '5', y1: '30', x1: '12' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '20', y1: '30', x1: '12' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLamp(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 22.47 10.58c-6.57 0-11.89 5.17-11.89 11.54 0 2.35 0.74 4.54 2 6.36 2 4 4.36 5.63 4.42 10.4l 11.15 0c 0.12-4.9 2.5-6.8 4.43-10.4 1.39-1.5 1.8-4.5 1.8-6.4 0-6.4-5.3-11.5-11.9-11.5z',\r\n                    fill: 'white',\r\n                    stroke: 'black'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 40 8 0c 0.58 0 1 0.5 1 1 0 0.6-0.5 1-1 1l-8 0c-0.6 0-1-0.47-1-1 0-0.58 0.47-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 42.7 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 45.3 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                { tag: 'path', d: 'm 19.5 48c 0.37 0.8 1 1.3 1.9 1.7 0.6 0.3 1.5 0.3 2 0 0.8-0.3 1.4-0.8 1.9-1.8z' },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 6 37.5 4.2-4c 0.3-0.3 0.8-0.3 1 0 0.3 0.3 0.3 0.8 0 1.1l-4.2 4c-0.3 0.3-0.8 0.3-1.1 0-0.3-0.3-0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 39 37.56-4.15-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 38 23 5.8 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.8 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 1.3 23 6 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.9 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 34.75 11.2 4-4.1c 0.3-0.3 0.3-0.8 0-1-0.3-0.3-0.8-0.3-1 0l-4 4.1c-0.3 0.3-0.3 0.8 0 1 0.3 0.3 0.8 0.3 1 0z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 11.23 10-4-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 21.64 1.3 0 5.8c 0 0.4 0.3 0.8 0.8 0.8 0.4 0 0.8-0.3 0.8-0.8l 0-5.8c 0-0.4-0.3-0.8-0.8-0.8-0.4 0-0.8 0.3-0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 26.1 24.3c-0.5 0-1 0.2-1.3 0.4-1.1 0.6-2 3-2.27 3.5-0.26-0.69-1.14-2.9-2.2-3.5-0.7-0.4-2-0.7-2.5 0-0.6 0.8 0.2 2.2 0.9 2.9 1 0.9 3.9 0.9 3.9 0.9 0 0 0 0 0 0 0.54 0 2.8 0 3.7-0.9 0.7-0.7 1.5-2 0.9-2.9-0.2-0.3-0.7-0.4-1.2-0.4z'\r\n                },\r\n                { tag: 'path', d: 'm 22.5 28.57 0 10.7' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawStop(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 30,\r\n            height: 30,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: '#FFF',\r\n                    'stroke-width': '2',\r\n                    stroke: '#B00',\r\n                    d: 'm 6,6 a 14,14 0 1 0 0.06,-0.06 z m 0,0 20,21'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMin(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    d: 'm 0,0 19,0 0,19 -19,0 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 13,-0.04'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawArrow(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 10,\r\n            height: 9,\r\n            rotate: node['rotate'],\r\n            items: [\r\n                { tag: 'path', fill: '#000', stroke: '#000', d: 'M 0,0 10,4 0,9 z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMax(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    'stroke-dashoffset': 2,\r\n                    'stroke-dasharray': '4.8,4.8',\r\n                    d: 'm 0,0 4.91187,0 5.44643,0 9.11886,0 0,19.47716 -19.47716,0 0,-15.88809 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 6,0.006 0.02,5 0.01,-11 -0.03,6.02 c 2,-0.01 4,-0.002 6,0.01'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawButton(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight, btnValue;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        btnValue = node['value'] || '';\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: 60,\r\n            height: 28,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 8,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    filter: 'url(#drop-shadow)',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                { tag: 'text', $font: true, x: 10, y: 18, fill: 'black', value: btnValue, 'class': 'hand' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDropdown(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 0,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth - 20,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 2,\r\n                    x: btnWidth - 20,\r\n                    y: 0,\r\n                    width: 20,\r\n                    height: 28,\r\n                    stroke: '#000',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    style: 'fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1',\r\n                    d: 'm ' + (btnWidth - 15) + ',13 10,0 L ' + (btnWidth - 10) + ',20 z'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassicon(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.19999l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm25.68807,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.2l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                { tag: 'line', x1: 11, y1: 7, x2: 25, y2: 7, stroke: '#000' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassWithEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M2,10 20,10 20,35 2,35 Z M2,17 20,17 M20,10 28,5 28,9 M 28.5,4.7 24,4',\r\n                    style: 'fill:none;stroke:#000000;transform:scale(0.8);'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClass(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: '100%',\r\n            height: '100%',\r\n            items: [\r\n                { tag: 'rect', width: 50, height: 40, x: 0, y: 0, 'stroke-width': 2, stroke: 'black', fill: 'none'},\r\n                { tag: 'rect', width: 50, height: 12, x: 0, y: 18, 'stroke-width': 1, stroke: 'black', fill: 'none'},\r\n                { tag: 'text', x: 27, y: 14, 'text-anchor': 'middle', 'font-size': 11, value: 'Class'},\r\n                { tag: 'text', x: 5, y: 24, 'font-size': 5, value: '+ field: type'},\r\n                { tag: 'text', x: 5, y: 36, 'font-size': 5, value: '+ method(type)'}\r\n            ]\r\n        });\r\n    }\r\n/*\r\n<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n    <g>\r\n    <text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text>\r\n        <text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>\r\n*/\r\n\r\n    public static drawEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M10,30 30,10 M19,10 30,10 30,21',\r\n                    style: 'fill:none;stroke:#555;stroke-width:2;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawCopynode(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M5 5 L15 5 L15 20 L5 20 Z M5 10 L15 10',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M8 2 L18 2 L18 17 L8 17 Z M8 7 L18 7'\r\n                        + 'M11 4.5 L15 4.5 '\r\n                        + 'M10 10 L16 10 '\r\n                        + 'M10 13 L16 13 ',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawBasket(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M12 12 L18 12 L18 11 L22 11 L22 12 L28 12 L28 14 L27 14 L27 29 L13 29 L13 14 L12 14 Z M13 14 L27 14 M20 17 L20 26 M17 16 L17 27 M23 16 L23 27',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawPencil(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M6 20 L12 23 L33 23 L33 17 L12 17 Z M30 17 L30 23 M12 17 L12 23 M15 19 L28 19 M15 21 L28 21',\r\n                    stroke: '#000',\r\n                    'stroke-width': 1,\r\n                    fill: 'white'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    private static addText(y: number, offsetX: number, box: Element, text: string, textClass: string): Element {\r\n        let item: Element;\r\n        box.appendChild(Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'text-anchor': 'left',\r\n            width: 70,\r\n            x: 10,\r\n            y: y,\r\n            class: textClass,\r\n            value: text,\r\n            eventValue: text\r\n        }));\r\n        if (textClass === 'SVGTEXT') {\r\n            textClass = 'SVGChoiceText';\r\n        } else {\r\n            textClass = 'SVGChoice';\r\n        }\r\n\r\n        item = Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            x: offsetX,\r\n            y: y - 18,\r\n            width: 70,\r\n            height: 24,\r\n            stroke: 'none',\r\n            class: textClass,\r\n        });\r\n        item['eventValue'] = text;\r\n        box.appendChild(item);\r\n        return item;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n}\r\n","import {Control} from '../../Control';\r\nimport BridgeElement from '../../BridgeElement';\r\nimport Data from '../../Data';\r\nimport {Util} from '../../util';\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Table extends Control {\r\n    protected items: BridgeElement[] = [];\r\n    private columns: Column[] = [];\r\n    private cells: Object = {};\r\n    private $bodysection: HTMLTableSectionElement;\r\n    private $headersection: HTMLTableSectionElement;\r\n    private showedItems: Array<BridgeElement> = [];\r\n    // BridgeElements:\r\n    private itemsIds: Object = {};\r\n    private countElement: HTMLElement;\r\n    private countColumn: HTMLElement;\r\n    private countColumnPos: number;\r\n    private resultColumn: string;\r\n    private lastSearchText: string;\r\n    private searchColumns: Array<string> = [];\r\n    private searchText: Array<string> = [];\r\n    private sortColumn: Column;\r\n    private direction: number;\r\n    private moveElement: Column = null;\r\n    private isDrag: boolean = false;\r\n    private moveTimeStamp: number;\r\n    private moveX: number;\r\n    private movePos: number;\r\n    private dragColumn: Column;\r\n    private dragPos: number;\r\n    private tableOption: HTMLTableHeaderCellElement;\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    private static indexOfChild(item: BridgeElement) {\r\n        let i: number = 0;\r\n        let child: Node = item.gui;\r\n        while ((child = child.previousSibling) !== null) {\r\n            i++;\r\n        }\r\n        return i;\r\n    }\r\n\r\n    public load(data: any): void {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n            if (data.property) {\r\n                this.property = data.property;\r\n            }\r\n\r\n            if (data.searchColumns) {\r\n                let search: Array<string> = [];\r\n                if (typeof(data.searchColumns) === 'string') {\r\n                    search = data.searchColumns.split(' ');\r\n                } else {\r\n                    search = data.searchColumns;\r\n                }\r\n                for (let z: number = 0; z < search.length; z++) {\r\n                    let item = search[z].trim();\r\n                    if (item.length > 0) {\r\n                        if (this.searchColumns.indexOf(item) < 0) {\r\n                            this.searchColumns.push(item);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        if (this.$view) {\r\n            // Must be an Update\r\n            if (data['columns']) {\r\n                // It is a json must add all things and generate HTML\r\n                for (let i in data['columns']) {\r\n                    if (data['columns'].hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    let col = this.parseData(data['columns'][i]);\r\n                    this.addHeaderInfo(col);\r\n                    this.columns.push(col);\r\n                    this.tableOption.parentElement.insertBefore(col.$element, this.tableOption);\r\n                }\r\n                for (let i in this.showedItems) {\r\n                    let item: BridgeElement = this.showedItems[i];\r\n                    let cell;\r\n                    // Now Add some Children\r\n                    while (item.gui.children.length < this.columns.length) {\r\n                        cell = document.createElement('td');\r\n                        item.gui.appendChild(cell);\r\n                    }\r\n                    // Now Remove Some Children\r\n                    while (item.gui.children.length > this.columns.length) {\r\n                        item.gui.removeChild(item.gui.children[item.gui.children.length - 1]);\r\n                    }\r\n                    for (let c: number = 0; c < this.columns.length; c++) {\r\n                        let name = this.columns[c].attribute;\r\n                        // let count = this.columns.length;\r\n                        cell = item.gui.children[c];\r\n                        cell.innerHTML = item.model.getValue(name);\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n\r\n        this.$view = document.getElementById(id);\r\n        let headerrow: HTMLTableRowElement;\r\n        if (this.$view) {\r\n            if (!this.property) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('table');\r\n            this.$owner.appendChild(this);\r\n        }\r\n        if (!this.$bodysection) {\r\n            // add tbody element if missing\r\n            this.$bodysection = document.createElement('tbody');\r\n            this.$view.appendChild(this.$bodysection);\r\n        }\r\n        if (data['classname']) {\r\n            this.$view.className = data['classname'];\r\n        } else {\r\n            this.$view.className = 'mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp';\r\n        }\r\n\r\n        this.id = id;\r\n        this.$view.id = id;\r\n        this.$view.setAttribute('type', this.constructor['name'].toLowerCase());\r\n        let counter = 0;\r\n        for (let c = 0; c < this.$view.children.length; c++) {\r\n            let row: HTMLTableRowElement = <HTMLTableRowElement>this.$view.children[c];\r\n            if (row instanceof HTMLTableSectionElement) {\r\n                if (row.tagName === 'THEAD') {\r\n                    headerrow = row;\r\n                    // Its a thead\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingHeader(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                } else {\r\n                    // Its a tbody\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingData(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                }\r\n            } else {\r\n                // fallback, if there are no thead and tbody...\r\n                if (counter === 0) {\r\n                    headerrow = row;\r\n                    this.parsingHeader(row);\r\n                } else {\r\n                    this.parsingData(row);\r\n                }\r\n            }\r\n            counter++;\r\n        }\r\n        if (!headerrow || !this.$headersection) {\r\n            if (!this.$headersection) {\r\n                // find eventually existing thead\r\n                let header = this.$view.getElementsByTagName('thead');\r\n                if (header.length === 0) {\r\n                    this.$headersection = document.createElement('thead');\r\n                    this.$view.appendChild(this.$headersection);\r\n                } else {\r\n                    // take first thead element\r\n                    this.$headersection = <HTMLTableSectionElement>header.item(0);\r\n                }\r\n            }\r\n            if (!headerrow) {\r\n                headerrow = document.createElement('tr');\r\n                this.$headersection.appendChild(headerrow);\r\n            }\r\n        }\r\n\r\n        if (data['columns']) {\r\n            // It is a json must add all things and generate HTML\r\n            for (let i in data['columns']) {\r\n                if (data['columns'].hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                let col = this.parseData(data['columns'][i]);\r\n                this.addHeaderInfo(col);\r\n                this.columns.push(col);\r\n                headerrow.appendChild(col.$element);\r\n            }\r\n            this.tableOption = document.createElement('th');\r\n            this.tableOption.classList.add('tableOption');\r\n            headerrow.appendChild(this.tableOption);\r\n            let context: HTMLElement = this.addOptionItem(null, this.tableOption, true);\r\n            let contentChild: HTMLElement = this.addOptionItem('show', context, true);\r\n            // let simpleLink: HTMLElement = this.addOptionItem('show', contentChild, false);\r\n            this.addOptionItem('show', contentChild, false);\r\n        }\r\n        this.registerEvents(['mousemove', 'mousedown', 'mouseup', 'resize', 'dragstart', 'dragover', 'drop', 'dragend']);\r\n\r\n        // Check for SearchBar\r\n        // if(data[\"searchproperty\"]){\r\n        // Create Full Row\r\n        let searchBar = document.createElement('tr');\r\n        let cell = document.createElement('td');\r\n        cell.setAttribute('colspan', '' + (this.columns.length));\r\n        searchBar.appendChild(cell);\r\n\r\n        let search = document.createElement('input');\r\n        search.className = 'search';\r\n        let that = this;\r\n        search.addEventListener('keyup', function (evt) {\r\n            that.search(evt.target['value']);\r\n        });\r\n\r\n        cell.appendChild(search);\r\n        if (this.resultColumn) {\r\n            if (this.resultColumn.indexOf('#') !== 0) {\r\n                this.countElement = document.createElement('div');\r\n                searchBar.appendChild(this.countElement);\r\n            } else {\r\n                for (let z: number = 0; z < this.$headersection.children.length; z++) {\r\n                    if (this.$headersection.children[z].innerHTML === this.resultColumn) {\r\n                        this.countColumn = <HTMLElement> this.$headersection.children[z];\r\n                        this.countColumnPos = z;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        let first = this.$headersection.children.item(0);\r\n        this.$headersection.insertBefore(searchBar, first);\r\n\r\n        this.updateElement(this.property, null);\r\n\r\n        // now update those elements, that were not loaded currently\r\n    }\r\n\r\n    public tableEvent(type: string, e: Event) {\r\n        let button: number = 0;\r\n        let eventX: number = 0;\r\n        if (e instanceof MouseEvent) {\r\n            button = e.buttons;\r\n            eventX = e.pageX;\r\n        }\r\n        if (type === 'mouseup') {\r\n            this.moveElement = null;\r\n        } else if (type === 'mousedown' || type === 'resize') {\r\n            // End to Resize\r\n            this.moveElement = null;\r\n            if (button === 1) {\r\n                let c: number;\r\n                for (c = 0; c < this.columns.length; c++) {\r\n                    if (this.columns[c].$resize === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = false;\r\n                        break;\r\n                    } else if (this.columns[c].$element === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = true;\r\n                    }\r\n                }\r\n                this.moveTimeStamp = e.timeStamp;\r\n                this.moveX = eventX;\r\n            } else {\r\n                this.moveTimeStamp = 0;\r\n            }\r\n        } else if (type === 'mousemove') {\r\n            if (button === 1 && this.moveElement) {\r\n                if (this.moveTimeStamp && e.timeStamp - this.moveTimeStamp < 2000) {\r\n                    if (this.isDrag) {\r\n                        // FIXME\r\n                    } else {\r\n                        let x = eventX - this.moveX;\r\n                        let width = this.moveElement.$element.offsetWidth;\r\n                        this.moveElement.$element.width = '' + (width + x);\r\n                        e.stopPropagation();\r\n                    }\r\n                }\r\n                this.moveX = eventX;\r\n                this.moveTimeStamp = e.timeStamp;\r\n            }\r\n        } else if (this.isDrag) {\r\n            this.columnDragEvent(type, <DragEvent> e);\r\n        }\r\n    }\r\n\r\n    public parsingHeader(row: HTMLTableRowElement) {\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let column: HTMLTableHeaderCellElement = <HTMLTableHeaderCellElement>row.children[i];\r\n            let id = column.innerHTML.trim();\r\n            let col: Column = null;\r\n            for (let c in this.columns) {\r\n                if (this.columns.hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                if (this.columns[c].label === id) {\r\n                    col = this.columns[c];\r\n                    col.$element = column;\r\n                    break;\r\n                }\r\n            }\r\n            if (col === null) {\r\n                col = new Column();\r\n                col.label = id;\r\n                col.attribute = column.getAttribute('attribute');\r\n                col.$element = column;\r\n                this.columns.push(col);\r\n            }\r\n            this.addHeaderInfo(col);\r\n        }\r\n    }\r\n\r\n    public parsingData(row: HTMLTableRowElement) {\r\n        let id = row.getAttribute('id');\r\n        let item: Data = this.$owner.getItem(id);\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let cell: HTMLTableCellElement = <HTMLTableCellElement>row.children[i];\r\n            let colAttribute = this.columns[i].attribute;\r\n            if (colAttribute.indexOf('\\.') < 0) {\r\n                item[colAttribute] = cell.innerHTML.trim();\r\n            }\r\n        }\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: Object, newValue: Object) {\r\n        if (entity) {\r\n            // Check for Show\r\n            if (this.property && !entity.hasProperty(property)) {\r\n                return;\r\n            }\r\n        }\r\n        if (entity.id === undefined) {\r\n            return;\r\n        }\r\n        let item: BridgeElement = <BridgeElement>this.itemsIds[entity.id];\r\n        let row: HTMLTableRowElement;\r\n        if (!item) {\r\n            item = new BridgeElement(entity);\r\n            this.items.push(item);\r\n            this.itemsIds[entity.id] = item;\r\n        }\r\n        row = this.cells[entity.id];\r\n        if (row) {\r\n            item.gui = row;\r\n        }\r\n        if (this.searching(item) === false) {\r\n            return;\r\n        }\r\n        let cell;\r\n        let showItem = false;\r\n\r\n        if (!row) {\r\n            showItem = true;\r\n            row = document.createElement('tr');\r\n            let count = this.columns.length;\r\n            for (let i = 0; i < count; i++) {\r\n                cell = document.createElement('td');\r\n                row.appendChild(cell);\r\n            }\r\n            this.cells[entity.id] = row;\r\n            item.gui = row;\r\n        }\r\n        for (let c: number = 0; c < this.columns.length; c++) {\r\n            let name = this.columns[c].attribute;\r\n            if (name === property) {\r\n                cell = row.children[c];\r\n                cell.innerHTML = <string>newValue;\r\n            }\r\n        }\r\n        if (showItem) {\r\n            this.showItem(item, true);\r\n        }\r\n        // super.propertyChange(entity, property, newValue, oldValue);\r\n    }\r\n\r\n    public sort(column: Column) {\r\n        if (this.sortColumn === column) {\r\n            if (this.direction === 1) {\r\n                this.direction = -1;\r\n                column.$element.classList.remove('asc');\r\n                column.$element.classList.add('desc');\r\n            } else {\r\n                this.direction = 1;\r\n                column.$element.classList.remove('desc');\r\n                column.$element.classList.add('asc');\r\n            }\r\n        } else {\r\n            if (this.sortColumn !== null) {\r\n                this.sortColumn.$element.classList.remove('desc');\r\n                this.sortColumn.$element.classList.remove('asc');\r\n            }\r\n            this.sortColumn = column;\r\n            this.sortColumn.$element.classList.add('asc');\r\n            this.direction = 1;\r\n        }\r\n        let that = this;\r\n        let sort = function (a: BridgeElement, b: BridgeElement) {\r\n            return that.sorting(a, b);\r\n        };\r\n        this.showedItems.sort(sort);\r\n        let len: number = this.showedItems.length;\r\n        let body = this.$bodysection;\r\n        let i = 0;\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            if (i !== Table.indexOfChild(item)) {\r\n                break;\r\n            }\r\n            i = i + 1;\r\n        }\r\n        while (body.children.length > i) {\r\n            body.removeChild(body.children.item(body.children.length - 1));\r\n        }\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            body.appendChild(item.gui);\r\n            i = i + 1;\r\n        }\r\n\r\n        //      body.removeChild(item.gui);\r\n        //      body.remove\r\n    }\r\n\r\n    public sorting(a: BridgeElement, b: BridgeElement): number {\r\n        let path: string[] = this.sortColumn.attribute.split('.');\r\n        let itemA = a.model.prop;\r\n        let itemB = b.model.prop;\r\n        let check = this.sortColumn.attribute;\r\n        for (let p = 0; p < path.length; p++) {\r\n            check = path[p];\r\n            if (itemA[check]) {\r\n                itemA = itemA[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n            if (itemB[check]) {\r\n                itemB = itemB[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n        if (itemA !== itemB) {\r\n            if (this.direction === 1) {\r\n                return (itemA < itemB) ? -1 : 1;\r\n            }\r\n            return (itemA < itemB) ? 1 : -1;\r\n\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    // Searching\r\n    public search(origSearchText: string): void {\r\n        if (!origSearchText) {\r\n            origSearchText = '';\r\n        }\r\n        let searchText: string = origSearchText.trim().toLowerCase();\r\n        if (searchText === this.lastSearchText && searchText !== '') {\r\n            return; // <==== nothing to be done\r\n        }\r\n        let oldSearch: string = this.lastSearchText;\r\n        this.lastSearchText = searchText;\r\n\r\n        this.parseSearchArray();\r\n        if (searchText !== '' && oldSearch !== null && searchText.indexOf(oldSearch) >= 0 && searchText.indexOf('|') < 0) {\r\n            this.searchArray(this.showedItems);\r\n        } else {\r\n            this.searchSet(this.items);\r\n        }\r\n        this.refreshCounter();\r\n    }\r\n\r\n    public refreshCounter() {\r\n        if (this.countColumn) {\r\n            this.countColumn.innerHTML = this.columns[this.countColumnPos].label + ' (' + this.showedItems.length + ')';\r\n        }\r\n        // var countElement = document.getElementById('talkCount');\r\n        //  if (countElement) {\r\n        //     var txt = (this.showedItems.size() > 0 && searchText.length > 0 ) ? this.options.TEXT_SEARCHLIST : this.options.TEXT_SEARCHFULLLIST;\r\n        //     countElement.innerHTML = txt.replace(\"%LEN%\", this.root['children'].length).replace(\"%COUNT%\", this.showedItems.size()).replace(\"%SEARCH%\", origSearchText);\r\n        // }\r\n        // if (this.countColumn) {\r\n        //     this.countColu1mn.innerHTML = this.countColumn[\"label\"] + \" (\" + this.showedItems.size() + \")\";\r\n        // }\r\n    }\r\n\r\n    public parseSearchArray() {\r\n        let pos: number = 0;\r\n        let split: Array<string> = [];\r\n        let quote: boolean = false;\r\n        for (let i: number = 0; i < this.lastSearchText.length; i++) {\r\n            if ((this.lastSearchText.charAt(i) === ' ') && !quote) {\r\n                let txt = this.lastSearchText.substring(pos, i).trim();\r\n                if (txt.length > 0) {\r\n                    split.push(txt);\r\n                }\r\n                pos = i + 1;\r\n            } else if (this.lastSearchText.charAt(i) === '\\\"') {\r\n                if (quote) {\r\n                    let txt = this.lastSearchText.substring(pos, i).trim();\r\n                    if (txt.length > 0) {\r\n                        split.push(txt);\r\n                    }\r\n                    pos = i + 1;\r\n                } else {\r\n                    pos = i + 1;\r\n                }\r\n                quote = !quote;\r\n            }\r\n        }\r\n        if (pos < this.lastSearchText.length) {\r\n            split.push(this.lastSearchText.substring(pos, this.lastSearchText.length).trim());\r\n        }\r\n        this.searchText = split;\r\n        return split;\r\n    }\r\n\r\n    public searchArray(root: Array<BridgeElement>) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let i: number = 0; i < root.length; i++) {\r\n            let item: BridgeElement = root[i];\r\n            this.showItem(item, this.searching(item));\r\n        }\r\n    }\r\n\r\n    public searchSet(root: BridgeElement[]) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let item of root) {\r\n            let child: BridgeElement = <BridgeElement>item;\r\n            this.showItem(child, this.searching(child));\r\n        }\r\n    }\r\n\r\n    public showItem(item: BridgeElement, visible: boolean) {\r\n        if (visible) {\r\n            this.showedItems.push(item);\r\n            this.$bodysection.appendChild(item.gui);\r\n        } else if (item.gui && item.gui.parentElement) {\r\n            this.$bodysection.removeChild(item.gui);\r\n        }\r\n    }\r\n\r\n    public searching(item: BridgeElement): boolean {\r\n        let fullText: string = '';\r\n        for (let i: number = 0; i < this.searchColumns.length; i++) {\r\n            fullText = fullText + ' ' + item.model.getValue(this.searchColumns[i]);\r\n        }\r\n        fullText = fullText.trim().toLowerCase();\r\n        for (let z: number = 0; z < this.searchText.length; z++) {\r\n            if ('' !== this.searchText[z]) {\r\n                let orSplit: Array<string>;\r\n                if (this.searchText[z].indexOf('|') > 0) {\r\n                    orSplit = this.searchText[z].split('|');\r\n                } else {\r\n                    orSplit = [this.searchText[z]];\r\n                }\r\n                let o: number = 0;\r\n                for (; o < orSplit.length; o++) {\r\n                    let pos: number = orSplit[o].indexOf(':');\r\n                    if (orSplit[o].indexOf('#') === 0 && pos > 1) {\r\n                        // if (searchProperties.contains(propString)) {\r\n                        let value: string = orSplit[o].substring(pos + 1);\r\n                        let column: string = orSplit[o].substring(1, pos - 1);\r\n                        let dataValue: Object = item.model.getValue(column);\r\n                        if (dataValue) {\r\n                            if (dataValue.toString().toLowerCase().indexOf(value) >= 0) {\r\n                                // Search for simple Property\r\n                                break;\r\n                            }\r\n                        }\r\n                    } else if (orSplit[o].length > 1 && orSplit[o].indexOf('-') === 0) {\r\n                        if (fullText.indexOf(orSplit[o].substring(1)) < 0) {\r\n                            break;\r\n                        }\r\n                    } else if (fullText.indexOf(orSplit[o]) >= 0) {\r\n                        // his search word is found in full text\r\n                        break;\r\n                    }\r\n                }\r\n                if (o === orSplit.length) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public getColumn(): Column[] {\r\n        return this.columns;\r\n    }\r\n\r\n    public updateElement(property: string, value: string): void {\r\n        // first clear all elements inside the table:\r\n        for (let item of this.items) {\r\n            if (item instanceof BridgeElement) {\r\n                (<BridgeElement>item).model.removeListener(this);\r\n            }\r\n        }\r\n\r\n        this.items = [];\r\n        this.itemsIds = {};\r\n\r\n        // load all entitys that match the property\r\n        if (this.property !== undefined) {\r\n            let items = this.$owner.getItems();\r\n            for (let j in items) {\r\n                if (items.hasOwnProperty(j)) {\r\n                    let item = items[j];\r\n                    if (item instanceof Data) {\r\n                        if (property === j) {\r\n                            // if (property == item.property) {\r\n                            let i = new BridgeElement(<Data>item);\r\n                            this.items.push(i);\r\n                            this.itemsIds[item.id] = i;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            this.redrawAllElements();\r\n        }\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        if (this.$owner !== null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    protected redrawAllElements() {\r\n        let children: HTMLCollection = this.$bodysection.children;\r\n        // remove old children\r\n        for (let i = 0; i < children.length; i++) {\r\n            let child = children.item(i);\r\n            // remove child\r\n            this.$bodysection.removeChild(child);\r\n        }\r\n\r\n        // load new children\r\n        for (let obj of this.items) {\r\n            // register listeners\r\n            obj.model.addListener(this);\r\n            // create tr\r\n            let row = this.createRow(obj);\r\n            this.$bodysection.appendChild(row);\r\n            this.cells[obj.id] = row;\r\n        }\r\n    }\r\n\r\n    private parseData(column: any): Column {\r\n        let col = new Column();\r\n        col.label = column.label || column.id;\r\n        col.attribute = column.attribute || column.label || column.id;\r\n        col.$element = document.createElement('th');\r\n        col.$element.innerHTML = col.label;\r\n        col.$element.draggable = true;\r\n\r\n        // resize Header\r\n        col.$resize = document.createElement('div');\r\n        col.$resize.classList.add('resize');\r\n        col.$element.appendChild(col.$resize);\r\n\r\n        return col;\r\n    }\r\n\r\n    private createRow(data: BridgeElement): HTMLTableRowElement {\r\n        let tr: HTMLTableRowElement = document.createElement('tr');\r\n\r\n        for (let id of this.columns) {\r\n            let td: HTMLTableDataCellElement = document.createElement('td');\r\n            tr.appendChild(td);\r\n            td.innerHTML = data.model.getValue(id.attribute);\r\n        }\r\n        return tr;\r\n    }\r\n\r\n    private addHeaderInfo(col: Column) {\r\n        let element: HTMLTableCellElement = col.$element;\r\n        let that = this;\r\n        element.classList.add('sort');\r\n        element.addEventListener('click',\r\n            function () {\r\n                that.sort(col);\r\n            },\r\n            false);\r\n    }\r\n\r\n    private columnDragEvent(type: string, e: DragEvent) {\r\n        if (type === 'dragstart') {\r\n            // Target (this) element is the source node.\r\n            this.moveElement.$element.style.opacity = '0.4';\r\n            e.dataTransfer.effectAllowed = 'move';\r\n            e.dataTransfer.setData('text/json', JSON.stringify(Util.toJson(this.moveElement)));\r\n        } else if (type === 'dragenter') {\r\n            // TO Nothing\r\n        } else if (type === 'dragleave') {\r\n            this.moveElement.$element.classList.remove('over');\r\n        } else if (type === 'dragover') {\r\n            if (e.preventDefault) {\r\n                e.preventDefault(); // Necessary. Allows us to drop.\r\n            }\r\n            for (let c = 0; c < this.columns.length; c++) {\r\n                if (this.columns[c].$element === e.target) {\r\n                    this.dragColumn = this.columns[c];\r\n                    this.dragPos = c;\r\n                    this.columns[c].$element.classList.add('over');\r\n                } else {\r\n                    this.columns[c].$element.classList.remove('over');\r\n                }\r\n            }\r\n            if (e.target === this.tableOption) {\r\n                this.tableOption.classList.add('over');\r\n                this.dragPos = this.columns.length;\r\n            } else {\r\n                this.tableOption.classList.remove('over');\r\n            }\r\n            e.dataTransfer.dropEffect = 'move';  // See the section on the DataTransfer object.\r\n        } else if (type === 'drop') {\r\n            // this / e.target is current target element.\r\n            if (e.stopPropagation) {\r\n                e.stopPropagation(); // stops the browser from redirecting.\r\n            }\r\n            if (this.movePos === this.dragPos) {\r\n                return;\r\n            }\r\n            // movePos -> dragPos\r\n            // See the section on the DataTransfer object.\r\n            // DataModel\r\n            this.columns.splice(this.movePos, 1);\r\n            if (this.movePos >= this.dragPos) {\r\n                this.columns.splice(this.dragPos, 0, this.moveElement);\r\n            } else {\r\n                this.columns.splice(this.dragPos - 1, 0, this.moveElement);\r\n            }\r\n\r\n            // Header Line\r\n            let line: HTMLElement = this.moveElement.$element.parentElement;\r\n            line.removeChild(this.moveElement.$element);\r\n            if (this.dragPos < this.columns.length) {\r\n                line.insertBefore(this.moveElement.$element, this.dragColumn.$element);\r\n            } else {\r\n                line.insertBefore(this.moveElement.$element, this.tableOption);\r\n            }\r\n\r\n            let oldElement: Element;\r\n            let newElement: Element;\r\n\r\n            // Now all Childs\r\n            for (let i = 0; i < this.$bodysection.children.length; i++) {\r\n                // Each line\r\n                line = <HTMLElement>this.$bodysection.children.item(i);\r\n                oldElement = line.children.item(this.movePos);\r\n                newElement = line.children.item(this.dragPos);\r\n                line.removeChild(oldElement);\r\n                line.insertBefore(oldElement, newElement);\r\n            }\r\n        } else if (type === 'dragend') {\r\n            // this/e.target is the source node.\r\n            this.moveElement.$element.style.opacity = '1';\r\n            for (let i = 0; i < this.columns.length; i++) {\r\n                this.columns[i].$element.classList.remove('over');\r\n            }\r\n            this.tableOption.classList.remove('over');\r\n        }\r\n    }\r\n\r\n    private addOptionItem(label: string, parent: HTMLElement, sub: boolean): HTMLElement {\r\n        let labelControl;\r\n        if (label) {\r\n            labelControl = document.createElement('a');\r\n            labelControl.appendChild(document.createTextNode(label));\r\n            labelControl.href = 'javascript:void(0);';\r\n            parent.appendChild(labelControl);\r\n        }\r\n        if (sub) {\r\n            let context = document.createElement('div');\r\n            context.classList.add('dropdown-content');\r\n            context.style.setProperty('position', 'absolute');\r\n            parent.appendChild(context);\r\n\r\n            /* When the user clicks on the button,\r\n             toggle between hiding and showing the dropdown content */\r\n            parent.addEventListener(\r\n                'click',\r\n                function () {\r\n                    context.classList.toggle('show');\r\n                },\r\n                false);\r\n            return context;\r\n        }\r\n        return labelControl;\r\n    }\r\n\r\n    private registerEvents(events: string[]) {\r\n        let that = this;\r\n        for (let i = 0; i < events.length; i++) {\r\n            this.$view.addEventListener(events[i], function (evt) {\r\n                return that.tableEvent(events[i], evt);\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\nclass Column {\r\n    label: string;\r\n    attribute: string;\r\n    $element: HTMLTableHeaderCellElement;\r\n    $resize: HTMLDivElement;\r\n    visible: boolean;\r\n}\r\n","import { AutoComplete } from './AutoComplete';\r\nimport { BR } from './BR';\r\nimport { Div } from './Div';\r\nimport { Label } from './Label';\r\n\r\nexport * from './Node';\r\nexport * from './Class';\r\nexport * from './SO';\r\nexport * from './Symbol';\r\n\r\nexport * from './BR';\r\nexport * from './Button';\r\nexport * from './Div';\r\nexport * from './Form';\r\nexport * from './Input';\r\nexport * from './Label';\r\nexport * from './Table';\r\nexport * from './HTML';\r\nexport * from './Dice';\r\nexport * from './AutoComplete';\r\nexport * from './Attribute';\r\nexport * from './Method';\r\nexport * from './ClazzProperty';\r\n\r\nnew AutoComplete();\r\nnew BR();\r\nnew Div();\r\nnew Label();\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class AddNode implements EventHandler {\r\n\r\n    public MIN_SIZE_TO_ADD_NODE: number = 30;\r\n    public MIN_SIZE_TO_ADD_TEXT: number = 10;\r\n    private graph: Graph;\r\n    private svgRect: SVGSVGElement;\r\n    private svgGroupAddNode: SVGSVGElement;\r\n    private svgTextAddNode: SVGSVGElement;\r\n    private svgTextRectAddNode: SVGSVGElement;\r\n    private isRectDrawing: boolean;\r\n    private isDrawToLeft: boolean;\r\n    private isDrawToTop: boolean;\r\n    private isBigEnoughForAddNode: boolean;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(AddNode.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(AddNode.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!this.canHandle()) {\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element.id !== 'RootElement') {\r\n            return false;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element.id === 'RootElement') {\r\n                    this.start(event, element);\r\n\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mousemove':\r\n                this.drawRect(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.removeRect();\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.addNode();\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawRect(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isRectDrawing) {\r\n            return;\r\n        }\r\n\r\n        evt.stopPropagation();\r\n\r\n        let width = Util.getEventX(evt) - this.x;\r\n        let height = Util.getEventY(evt) - this.y;\r\n\r\n        // rectangle is in a negative area, drawn to upper case. not possibble with svg\r\n        if (width < 0) {\r\n            this.isDrawToLeft = true;\r\n            width *= -1;\r\n        } else {\r\n            this.isDrawToLeft = false;\r\n        }\r\n\r\n        if (height < 0) {\r\n            this.isDrawToTop = true;\r\n            height *= -1;\r\n        } else {\r\n            this.isDrawToTop = false;\r\n        }\r\n\r\n        if (width > this.MIN_SIZE_TO_ADD_NODE && height > this.MIN_SIZE_TO_ADD_NODE) {\r\n            this.isBigEnoughForAddNode = true;\r\n        } else {\r\n            this.isBigEnoughForAddNode = false;\r\n        }\r\n\r\n        this.graph.root.style.cursor = 'pointer';\r\n\r\n        // if line wasnt draw\r\n        if (!this.svgRect) {\r\n\r\n            let rectAddNode = Util.createShape({\r\n                tag: 'rect',\r\n                id: 'addNodeRect',\r\n                x: this.x,\r\n                y: this.y,\r\n                width: 1,\r\n                height: 1,\r\n                class: 'SVGAddNode'\r\n            });\r\n\r\n            let group = Util.createShape({ tag: 'g', id: 'groupAddNode' });\r\n            group.appendChild(rectAddNode);\r\n\r\n            this.graph.root.appendChild(group);\r\n            this.svgRect = rectAddNode;\r\n            this.svgGroupAddNode = group;\r\n        }\r\n        else {\r\n\r\n            let svgRectBBox = this.svgRect.getBBox();\r\n\r\n            // if rect is big enough, show text as helper\r\n            if ((svgRectBBox.width > this.MIN_SIZE_TO_ADD_TEXT\r\n                || svgRectBBox.height > this.MIN_SIZE_TO_ADD_TEXT) && !this.svgTextAddNode) {\r\n\r\n                let textAddNode = Util.createShape({\r\n                    tag: 'text',\r\n                    x: this.x,\r\n                    y: this.y - 5,\r\n                    'font-family': 'Verdana',\r\n                    'font-size': 12,\r\n                    fill: 'black'\r\n                });\r\n                textAddNode.textContent = 'Hold on and move to create a new class';\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n\r\n\r\n                // get correct size of text node\r\n                let sizeClientRect: ClientRect = textAddNode.getBoundingClientRect();\r\n\r\n                let rectBackgroundForText = Util.createShape({\r\n                    tag: 'rect',\r\n                    x: this.x,\r\n                    y: this.y - sizeClientRect.height,\r\n                    width: sizeClientRect.width,\r\n                    height: sizeClientRect.height,\r\n                    fill: '#DDD',\r\n                    'stroke-width': 0\r\n                });\r\n\r\n                this.svgTextRectAddNode = rectBackgroundForText;\r\n                this.svgTextAddNode = textAddNode;\r\n                this.svgGroupAddNode.appendChild(rectBackgroundForText);\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n            }\r\n\r\n            if (this.isDrawToLeft) {\r\n                this.svgRect.setAttributeNS(null, 'x', '' + Util.getEventX(evt));\r\n            }\r\n\r\n            if (this.isDrawToTop) {\r\n                this.svgRect.setAttributeNS(null, 'y', '' + Util.getEventY(evt));\r\n            }\r\n\r\n            // set width and height\r\n            this.svgRect.setAttributeNS(null, 'width', width.toString());\r\n            this.svgRect.setAttributeNS(null, 'height', height.toString());\r\n\r\n            // set color\r\n            if (this.isBigEnoughForAddNode) {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode-ready');\r\n\r\n                // draw text\r\n            }\r\n            else {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeRect(): void {\r\n        this.isRectDrawing = false;\r\n        this.isBigEnoughForAddNode = false;\r\n\r\n        this.graph.root.style.cursor = 'default';\r\n\r\n        if (this.svgGroupAddNode) {\r\n            this.graph.root.removeChild(this.svgGroupAddNode);\r\n            this.svgGroupAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgRect) {\r\n            this.svgRect = undefined;\r\n        }\r\n\r\n        if (this.svgTextAddNode) {\r\n            this.svgTextAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgTextRectAddNode) {\r\n            this.svgTextRectAddNode = undefined;\r\n        }\r\n    }\r\n\r\n    private addNode(): void {\r\n\r\n        if (!this.isBigEnoughForAddNode) {\r\n            this.removeRect();\r\n            return;\r\n        }\r\n\r\n        this.removeRect();\r\n        let node = this.graph.addElementWithValues('Class', { x: this.x, y: this.y });\r\n        this.graph.drawElement(node);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isRectDrawing) {\r\n            return;\r\n        }\r\n        this.isRectDrawing = true;\r\n\r\n        this.x = Util.getEventX(evt);\r\n        this.y = Util.getEventY(evt);\r\n    }\r\n\r\n}\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement, Point } from '../elements/BaseElements';\r\nimport { GraphModel } from '../elements/Model';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Control } from '../Control';\r\nimport { Util } from '../util';\r\n\r\nexport class Drag implements EventHandler {\r\n\r\n    private element: DiagramElement;\r\n    private svgElement: SVGSVGElement;\r\n    private dragging = false;\r\n    private reinsert = false;\r\n    private mouseOffset = new Point();\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        if (!this.canHandle()) {\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if ((!this.dragging) && (element.id !== 'RootElement')) {\r\n                    this.element = element;\r\n                    this.svgElement = <SVGSVGElement>element.$view;\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mouseup':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n\r\n                break;\r\n            case 'mousemove':\r\n                if (this.dragging) {\r\n                    this.drag(event, element);\r\n                }\r\n                break;\r\n            case 'mouseleave':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Drag.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Drag.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private reset() {\r\n        this.dragging = false;\r\n        this.svgElement.style.cursor = 'pointer';\r\n\r\n        /*  WORKAROUND\r\n            Chrome got problem with the Node.appendChild() method.\r\n            Sometimes it works, sometimes not.\r\n            So the background is, in the drag method will the current element be appended\r\n            to front of the svg root.\r\n            If this happend, the click event won't fire.\r\n            So it will be fired manually.\r\n            This problem occurs only in chrome.\r\n        */\r\n        if (Util.isChrome()) {\r\n            let clickEvt = Util.createCustomEvent('click');\r\n            this.svgElement.dispatchEvent(clickEvt);\r\n        }\r\n    }\r\n\r\n    private start(evt: Event | any, element: Control) {\r\n\r\n        this.dragging = true;\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n        this.reinsert = true;\r\n\r\n        this.svgElement.style.cursor = 'move';\r\n    }\r\n\r\n    private drag(evt: Event | any, element: DiagramElement) {\r\n\r\n        if (this.reinsert) {\r\n            if (this.element.id !== 'RootElement') {\r\n                // nesseccary to set the dragged object on top of svg children\r\n                this.graph.root.appendChild(this.svgElement);\r\n            }\r\n\r\n            let dragEvent = Util.createCustomEvent('drag');\r\n            element.$view.dispatchEvent(dragEvent);\r\n        }\r\n        this.reinsert = false;\r\n\r\n        evt.stopPropagation();\r\n\r\n        const translation = this.svgElement.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        const sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        const transX = sx + evt.clientX - this.mouseOffset.x;\r\n        const transY = sy + evt.clientY - this.mouseOffset.y;\r\n        this.svgElement.setAttributeNS(null, 'transform', 'translate(' + transX + ' ' + transY + ')');\r\n        this.element.getPos().addNum(transX - sx, transY - sy);\r\n\r\n        if (this.element instanceof Node) {\r\n            (<Node>this.element).redrawEdges();\r\n        }\r\n\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n\r\n\r\n        // resize svg root\r\n        let maxX = this.element.getPos().x + this.element.getSize().x;\r\n        let maxY = this.element.getPos().y + this.element.getSize().y;\r\n\r\n        let domRectRoot = this.graph.root.getBoundingClientRect();\r\n        if(!domRectRoot){\r\n            return;\r\n        }\r\n\r\n        if(maxX > domRectRoot.width){\r\n            this.graph.root.setAttributeNS(null, 'width', '' + maxX);\r\n        }\r\n        \r\n        if(maxY > domRectRoot.height){\r\n            this.graph.root.setAttributeNS(null, 'height', '' + maxY);\r\n        }\r\n    }\r\n}\r\n","import PropertyChangeSupport from '../PropertyChangeSupport';\r\nimport Data from '../Data';\r\nimport {Adapter} from '../Adapter';\r\nimport ClazzProperty from '../elements/nodes/ClazzProperty';\r\n\r\nexport class GraphListener implements PropertyChangeSupport {\r\n    private $owner: ClazzProperty;\r\n\r\n    constructor(owner: ClazzProperty) {\r\n        this.$owner = owner;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        let adapter = this.$owner.getRoot().getAdapter();\r\n        if (adapter) {\r\n            // messages.add(\"{\\\"class\\\":\\\"de.uniks.networkparser.test.model.House\\\",\\\"id\\\":\\\"H1\\\",\\\"rem\\\":{\\\"floor\\\":4},\\\"upd\\\":{\\\"floor\\\":42}}\");\r\n            let myId =  this.$owner.$owner.getId();\r\n            if (myId && myId.length > 0) {\r\n                let pos = myId.indexOf(':');\r\n                if (pos > 0) {\r\n                    myId = myId.substring(0, pos).trim();\r\n                }\r\n            }\r\n            let myName = this.$owner.getName();\r\n            let remJson = {};\r\n            remJson[myName] = oldValue;\r\n            let updJson = {};\r\n            updJson[myName] = newValue;\r\n            let json = {};\r\n            json['id'] = myId;\r\n            json['rem'] = remJson;\r\n            json['upd'] = updJson;\r\n            let message = JSON.stringify(json);\r\n            (<Adapter> adapter).update(message);\r\n        }\r\n    }\r\n}\r\n","import {Graph} from '../elements/';\r\nimport {EventHandler, EventBus} from '../EventBus';\r\nimport {DiagramElement} from '../elements/';\r\nimport {Util} from '../util';\r\n\r\nexport class ImportFile implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(ImportFile.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(ImportFile.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        let type: string = typeof event;\r\n        if (type !== 'DragEvent') {\r\n            return false;\r\n        }\r\n        let evt: DragEvent = <DragEvent>event;\r\n        if (evt.type === 'dragover') {\r\n            this.handleDragOver(evt);\r\n        } else if (evt.type === 'dragleave') {\r\n            if (this.graph.$view !== evt.target) {\r\n                return false;\r\n            }\r\n            this.setBoardStyle('dragleave');\r\n        } else if (evt.type === 'drop') {\r\n            this.handleLoadFile(evt);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public setBoardStyle(typ: string): boolean {\r\n        let b = this.graph.$view;\r\n        Util.removeClass(b, 'Error');\r\n        Util.removeClass(b, 'Ok');\r\n        Util.removeClass(b, 'Add');\r\n        if (typ === 'dragleave') {\r\n            if (b['errorText']) {\r\n                b.removeChild(b['errorText']);\r\n                b['errorText'] = null;\r\n            }\r\n            return true;\r\n        }\r\n        Util.addClass(b, typ);\r\n        if (typ === 'Error') {\r\n            if (!b['errorText']) {\r\n                b['errorText'] = Util.create({tag: 'div', style: 'margin-top: 30%', value: 'NO TEXTFILE'});\r\n                b.appendChild(b['errorText']);\r\n            }\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private handleLoadFile(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n\r\n        let files = evt.dataTransfer.files; // FileList object.\r\n\r\n        if (files.length > 1) {\r\n            evt.dataTransfer.dropEffect = 'none';\r\n            return;\r\n        }\r\n\r\n        // files is a FileList of File objects. List some properties.\r\n        let reader  = new FileReader();\r\n        let output = [];\r\n        let htmlResult = '';\r\n        let that = this;\r\n        for (let i = 0, f; f = files[i]; i++) {\r\n            reader.onload = function(event) {\r\n                htmlResult = event.target['result'];\r\n                console.log('fileContent: ' + htmlResult);\r\n\r\n                // CHANGE TO INTERNAL OBJECT\r\n                if (that.graph) {\r\n                    that.graph.import(htmlResult);\r\n                }\r\n            };\r\n            reader.readAsText(f);\r\n        }\r\n        this.setBoardStyle('dragleave');\r\n    }\r\n\r\n    private handleDragOver(evt: DragEvent): void {\r\n        let error: boolean = true, n: string, f;\r\n        let files = evt.dataTransfer.files;\r\n        // process all File objects\r\n        if (files && files.length > 0) {\r\n            for (let i: number = 0; i < files.length; i += 1) {\r\n                f = files[i];\r\n                if (f.type.indexOf('text') === 0) {\r\n                    error = false;\r\n                } else if (f.type === '') {\r\n                    n = f.name.toLowerCase();\r\n                    if (n.indexOf('json', n.length - 4) !== -1) {\r\n                        error = false;\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            let items = evt.dataTransfer.items;\r\n            if (items && items.length > 0) {\r\n                for (let z = 0; z < items.length; z ++) {\r\n                    if (items[z].type === '' || items[z].type === 'text/plain') {\r\n                        error = false;\r\n                    }\r\n                }\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.\r\n        if (error) {\r\n            this.dragStyler(evt, 'Error');\r\n        } else if (evt.ctrlKey) {\r\n            this.dragStyler(evt, 'Add');\r\n        } else {\r\n            this.dragStyler(evt, 'Ok');\r\n        }\r\n        /* //evt.target['className'] += ' diagramLoadFile';\r\n        '//console.log('handDragOver');*/\r\n    }\r\n\r\n    private dragStyler(event: Event, typ: string) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n        this.setBoardStyle(typ);\r\n    }\r\n\r\n    private handleDragLeave(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n        evt.dataTransfer.dropEffect = 'link'; // Explicitly show this is a copy.\r\n        evt.target['className'] = 'diagram';\r\n        console.log('handDragLeave');\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Class } from '../elements/nodes/Class';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Association } from '../elements/index';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class NewEdge implements EventHandler {\r\n    private graph: Graph;\r\n    private svgLine: SVGSVGElement;\r\n    private isEdgeDrawing: boolean;\r\n    private sourceNode: Node;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    private lastTargetNode: Node;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(NewEdge.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(NewEdge.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!((<KeyboardEvent>event).ctrlKey || EventBus.isHandlerActiveOrFree('NewEdge', true))) {\r\n            this.removeLine();\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element instanceof Node) {\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n\r\n            case 'mousemove':\r\n                this.drawEdge(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.setNewEdgeToNode(event);\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default: break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawEdge(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        let lineToX = Util.getEventX(evt);\r\n        let lineToy = Util.getEventY(evt);\r\n\r\n        let path = `M${this.x} ${this.y} L${lineToX} ${lineToy}`;\r\n        // if line wasnt draw\r\n        if (!this.svgLine) {\r\n\r\n            let attr = {\r\n                tag: 'path',\r\n                id: 'newEdgePath',\r\n                d: path,\r\n                class: 'SVGEdge'\r\n            };\r\n\r\n            let shape = Util.createShape(attr);\r\n            this.svgLine = shape;\r\n\r\n            this.graph.root.appendChild(shape);\r\n            this.graph.root.appendChild(this.sourceNode.$view);\r\n        }\r\n        else {\r\n\r\n            // set new L path\r\n            this.svgLine.setAttributeNS(null, 'd', path);\r\n\r\n            // get node from position\r\n            let targetNode = this.graph.$graphModel.getNodeByPosition(Util.getEventX(evt), Util.getEventY(evt));\r\n\r\n            // if some targetnode is available, so highlight the node\r\n            if (targetNode) {\r\n\r\n                // reset the last one\r\n                if (this.lastTargetNode && this.lastTargetNode.id !== targetNode.id) {\r\n                    this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n                }\r\n\r\n                this.lastTargetNode = targetNode;\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz-drawedge');\r\n            }\r\n            else if (this.lastTargetNode) {\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeLine(): void {\r\n        this.isEdgeDrawing = false;\r\n\r\n        if (this.svgLine) {\r\n            this.graph.root.removeChild(this.svgLine);\r\n            this.svgLine = null;\r\n        }\r\n\r\n        if (this.lastTargetNode) {\r\n            this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n        }\r\n    }\r\n\r\n    private setNewEdgeToNode(event: Event | any): void {\r\n        // get node from position\r\n        let targetNode = this.graph.$graphModel\r\n            .getNodeByPosition(Util.getEventX(event), Util.getEventY(event));\r\n\r\n        if (!targetNode) {\r\n            this.removeLine();\r\n\r\n            return;\r\n        }\r\n\r\n        this.removeLine();\r\n        let edgeType = this.sourceNode.$defaulEdgeType || 'Association';\r\n\r\n        let jsonData = {\r\n            type: edgeType,\r\n            source: this.sourceNode.id,\r\n            target: targetNode.id\r\n        };\r\n\r\n        let newEdge = this.graph.$graphModel.addEdge(<any>jsonData, true);\r\n        this.graph.drawElement(newEdge);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        this.isEdgeDrawing = true;\r\n        this.sourceNode = element as Class;\r\n\r\n        this.x = this.sourceNode.getPos().x + (this.sourceNode.getSize().x / 2);\r\n        this.y = this.sourceNode.getPos().y + (this.sourceNode.getSize().y / 2);\r\n\r\n        // TODO: get this into util or select\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Node } from '../elements/nodes';\r\nimport { Association } from '../elements/edges';\r\nimport { Util } from '../util';\r\nimport { SymbolLibary } from '../elements/nodes/Symbol';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\nimport Attribute from '../elements/nodes/Attribute';\r\n\r\nexport class Select implements EventHandler {\r\n\r\n    private deleteShape: SVGSVGElement;\r\n    private addEdgeShape: SVGSVGElement;\r\n    private copyNodeShape: SVGSVGElement;\r\n    private graph: Graph;\r\n    private padding = 5;\r\n\r\n    private lastSelectedNode: Element;\r\n    private lastSelectedEdge: Element;\r\n\r\n    private isDragged: boolean;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.deleteShape = SymbolLibary.drawSVG({ type: 'Basket', background: true, id: 'trashcan', tooltip: 'Delete class' });\r\n        this.copyNodeShape = SymbolLibary.drawSVG({ type: 'Copynode', background: true, id: 'copyNode', tooltip: 'Copy class' });\r\n        this.addEdgeShape = SymbolLibary.drawSVG({ type: 'Edgeicon', background: true, id: 'addEdge', tooltip: 'Click and drag to connect this class' });\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        let x = Util.getEventX(event);\r\n        let y = Util.getEventY(event);\r\n\r\n        event.stopPropagation();\r\n        if (event.type === 'drag') {\r\n            this.isDragged = true;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            if (element instanceof Node) {\r\n                this.lastSelectedNode = <Element>element.$view;\r\n            }\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n        }\r\n\r\n        if (event.target['id'] === 'background' || element === this.graph.$graphModel) {\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let e = <Node>element;\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.graph.root.appendChild(this.addEdgeShape);\r\n            this.graph.root.appendChild(this.copyNodeShape);\r\n            this.graph.root.appendChild(element.$view);\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'visible');\r\n\r\n            let x = (e.getPos().x + e.getSize().x) + 5;\r\n            let y = e.getPos().y;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y + this.padding})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.copyNodeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 40 + this.padding})`);\r\n            this.copyNodeShape.onclick = (evt) => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let copyClass = (element).copy();\r\n                copyClass.withPos(nextFreePosition.x, nextFreePosition.y);\r\n                this.graph.drawElement(copyClass);\r\n            };\r\n\r\n            this.addEdgeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 80 + this.padding})`);\r\n            this.addEdgeShape.onmousedown = function () {\r\n                EventBus.setActiveHandler('NewEdge');\r\n                element.$view.dispatchEvent(Util.createCustomEvent('mousedown'));\r\n            };\r\n        }\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let clazz = <Node>element;\r\n\r\n            if (Util.isChrome()) {\r\n                if (this.lastSelectedNode && element.id === this.lastSelectedNode.id && !this.isDragged) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            this.isDragged = false;\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            this.lastSelectedNode = <Element>element.$view;\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete class');\r\n\r\n            // draw textbox to edit clazz in one line\r\n            let divInlineEdit = document.createElement('div');\r\n            divInlineEdit.id = 'inlineEdit';\r\n            divInlineEdit.style.position = 'absolute';\r\n            divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n            divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n            divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n            divInlineEdit.style.zIndex = '42';\r\n\r\n            let inputText = document.createElement('input');\r\n            inputText.type = 'text';\r\n            inputText.style.width = '100%';\r\n            inputText.placeholder = 'Add properties, edit label';\r\n\r\n            divInlineEdit.appendChild(inputText);\r\n            document.body.appendChild(divInlineEdit);\r\n\r\n            inputText.addEventListener('focusout', (evt) => {\r\n\r\n                if (Util.isChrome()) {\r\n                    // only if input is empty, remove the inline edit function\r\n                    if ((!inputText.value || inputText.value.length === 0) && (!this.lastSelectedNode || element.id !== this.lastSelectedNode.id)) {\r\n                        this.removeLastInlineEdit();\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                // only if input is empty, remove the inline edit function\r\n                if ((!inputText.value || inputText.value.length === 0)) {\r\n                    this.removeLastInlineEdit();\r\n                }\r\n            });\r\n\r\n            let g = this.graph;\r\n            let propertyTypes: string[] = ['boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'short', 'String', 'void'];\r\n            inputText.addEventListener('keydown', function (evt) {\r\n\r\n                let keyCode = (<any>evt).which;\r\n                let inputValue = <any>inputText.value;\r\n\r\n                if (Util.endsWith(inputValue, ':') && !document.getElementById('selectPropertyType')) {\r\n                    let selectType = document.createElement('select');\r\n                    selectType.id = 'selectPropertyType';\r\n                    selectType.style.width = '100%';\r\n\r\n                    for (let type of propertyTypes) {\r\n                        let selectOption = document.createElement('option');\r\n                        selectOption.value = type;\r\n                        selectOption.innerHTML = type;\r\n                        selectType.appendChild(selectOption);\r\n                    }\r\n\r\n                    selectType.addEventListener('change', function (evt) {\r\n                        let inputValueSplitted = inputValue.split(':');\r\n                        let selectedPropertyType = selectType.options[selectType.selectedIndex].value;\r\n\r\n                        if (inputValueSplitted.length >= 1) {\r\n                            inputText.value = inputValueSplitted[0].trim() + ' : ' + selectedPropertyType;\r\n                            inputText.focus();\r\n                        }\r\n                    });\r\n\r\n                    divInlineEdit.appendChild(selectType);\r\n                }\r\n                else if (!Util.includes(inputValue, ':')) {\r\n                    let selectType = document.getElementById('selectPropertyType');\r\n\r\n                    if (selectType) {\r\n                        selectType.remove();\r\n                    }\r\n                }\r\n\r\n                if (keyCode !== 13) {\r\n                    return;\r\n                }\r\n\r\n                // attribute\r\n                if ((Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) === false) {\r\n                    if (Util.includes(inputValue, ':')) {\r\n                        clazz.addAttribute(inputValue.trim());\r\n                        clazz.reDraw();\r\n                    } else if (Util.includes(inputValue, '=') ) {\r\n                        let attr: Attribute = null;\r\n                        let name = inputValue.substring(0, inputValue.indexOf('=')).trim();\r\n                        for (let child of clazz.getAttributes() ) {\r\n                            if ( name === child.getName()) {\r\n                                attr = child;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (attr) {\r\n                            attr.updateValue(inputValue.substring(inputValue.indexOf('=') + 1).trim());\r\n                        }\r\n                        clazz.reDraw();\r\n                    }\r\n                }\r\n\r\n                // method\r\n                else if (Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) {\r\n                    clazz.addMethod(inputValue.trim());\r\n                    clazz.reDraw();\r\n                }\r\n                // label\r\n                else if (inputValue.trim().split(' ').length === 1 && inputValue.trim().length > 0) {\r\n                    clazz.updateLabel(inputValue.trim());\r\n                }\r\n\r\n                // reset size\r\n                divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n                divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n                divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n\r\n                inputText.value = '';\r\n\r\n                // remove combobox to select type of property\r\n                let selectType = document.getElementById('selectPropertyType');\r\n\r\n                if (selectType) {\r\n                    selectType.remove();\r\n                }\r\n\r\n                // TODO: reload propertiespanel. not working!\r\n                // event wont dispatch\r\n                // let customEvt = Util.createCustomEvent(EventBus.RELOADPROPERTIES);\r\n                // element.$view.dispatchEvent(customEvt);\r\n            });\r\n\r\n            (<any>divInlineEdit.children[0]).focus();\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Association) {\r\n            this.graph.root.appendChild(element.$view);\r\n            this.graph.root.appendChild(element.$sNode.$view);\r\n            this.graph.root.appendChild(element.$tNode.$view);\r\n\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete edge');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            let edge = <Association>element;\r\n            this.lastSelectedEdge = edge.$view;\r\n\r\n            Util.addClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Select.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Select.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private setTooltipOfShape(shape: SVGSVGElement, tooltip: string): void {\r\n        if (!shape || !shape.hasChildNodes()) {\r\n            return;\r\n        }\r\n\r\n        let titleElement = <SVGSVGElement>shape.childNodes[0];\r\n        if (!titleElement || titleElement.tagName !== 'title') {\r\n            return;\r\n        }\r\n\r\n        titleElement.textContent = tooltip;\r\n    }\r\n\r\n    private resetLastSelectedElements() {\r\n        // reset the last one\r\n        if (this.lastSelectedNode) {\r\n            Util.removeClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.lastSelectedNode = undefined;\r\n        }\r\n\r\n        if (this.lastSelectedEdge) {\r\n            Util.removeClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n            this.lastSelectedEdge = undefined;\r\n        }\r\n\r\n        this.removeLastInlineEdit();\r\n    }\r\n\r\n    private removeLastInlineEdit(): void {\r\n        // remove last inline edit of clazz\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n\r\n            // its not supported in internet explorer\r\n            // lastInlineEdit.remove();\r\n        }\r\n    }\r\n\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\n\r\nexport class Zoom implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n    }\r\n\r\n    public handle(e: any, element: DiagramElement): boolean {\r\n        let delta = e.deltaY || e.wheelDeltaY || -e.wheelDelta;\r\n        let d = 1 + (delta / 1000);\r\n\r\n        let values = this.graph.root.getAttribute('viewBox').split(' ');\r\n        const newViewBox = `${values[0]} ${values[1]} ${parseInt(values[2]) * d} ${parseInt(values[3]) * d}`;\r\n        this.graph.root.setAttribute('viewBox', newViewBox);\r\n\r\n        e.preventDefault();\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Zoom.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Zoom.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n}\r\n","export * from './Drag';\r\nexport * from './Select';\r\nexport * from './Zoom';\r\nexport * from './NewEdge';\r\nexport * from './ImportFile';\r\nexport * from './AddNode';\r\n","import { Association } from '../elements/edges';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport Layout from './Layout';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\n\r\nexport class DagreLayout implements Layout {\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        if (!window['dagre']) {\r\n            return;\r\n        }\r\n        let model = graph.$graphModel;\r\n        let g = new window['dagre'].graphlib.Graph();\r\n\r\n        g.setGraph({ marginx: 100, marginy: 20 }).setDefaultEdgeLabel(function () {\r\n            return {};\r\n        });\r\n\r\n        for (let node of model.nodes) {\r\n            g.setNode(node.id, { width: node.getSize().x, height: node.getSize().y });\r\n        }\r\n\r\n        for (let edge of model.edges) {\r\n            g.setEdge(edge.$sNode.id, edge.$tNode.id);\r\n        }\r\n\r\n        window['dagre'].layout(g);\r\n\r\n        g.nodes().forEach(function (nodeId: string) {\r\n            for (let node of model.nodes) {\r\n                if (node.id === nodeId) {\r\n                    node.withPos(g.node(nodeId).x - g.node(nodeId).width / 2, g.node(nodeId).y - g.node(nodeId).height / 2);\r\n                }\r\n            }\r\n        });\r\n        g.edges().forEach(function (e: any) {\r\n            for (let edge of model.edges) {\r\n                if (edge.$sNode.id === e.v && edge.$tNode.id === e.w) {\r\n                    let size = g.edge(e).points.length;\r\n                    edge.clearPoints();\r\n                    for (let i = 0; i < size; i++) {\r\n                        let point: SVGPoint = g.edge(e).points[i];\r\n                        edge.addPoint(point.x, point.y);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n}\r\n","import {DiagramElement} from '../elements/BaseElements';\r\nimport Layout from './Layout';\r\nimport {Graph} from '../elements/Graph';\r\nimport {Association} from '../elements/edges/Association';\r\nimport {Node} from '../elements/nodes/Node';\r\nimport {Control} from '../Control';\r\n\r\nexport class LayoutGraphMin {\r\n    public nodes: Object = {};\r\n    public edges: Array<Object> = [];\r\n    public outEdges: Object = {};\r\n    public inEdges: Object = {};\r\n    public dummyNodes: Array<LayoutGraphNode> = [];\r\n    public dummyEdges: Object = {};\r\n    public count: number = 0;\r\n    public minRank: number = Number.POSITIVE_INFINITY;\r\n    public maxRank: number = 0;\r\n    public maxHeight: number = 0;\r\n    public maxWidth: number = 0;\r\n    public ranksep: number = 0;\r\n    public edgesLabel: Array<Object> = [];\r\n\r\n    public nodeCount(): number {\r\n        return this.count;\r\n    }\r\n\r\n    public node(id: string) {\r\n        return this.nodes[id];\r\n    }\r\n\r\n    public setNode(id: string, n: LayoutGraphNode) {\r\n        if (n && !this.nodes[id]) {\r\n            this.nodes[id] = n;\r\n            this.count = this.count + 1;\r\n        } else if (!n && this.nodes[id]) {\r\n            delete this.nodes[id];\r\n        }\r\n    }\r\n}\r\n\r\nexport class LayoutGraphNode {\r\n    public id: string;\r\n    public width: number;\r\n    public height: number;\r\n    public x: number;\r\n    public y: number;\r\n    public edgeObj: LayoutGraphEdge;\r\n    public rank: number;\r\n\r\n    constructor(id: string, width: number, height: number, x: number, y: number) {\r\n        this.id = id;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n\r\nexport class LayoutGraphEdge {\r\n    public source: string;\r\n    public target: string;\r\n}\r\n\r\n// \t\t\t\t######################################################### DagreGraph #########################################################\r\nexport class DagreLayoutMin implements Layout {\r\n    public static EDGE_KEY_DELIM = '\\x01';\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        let g, layoutNode, nodes, newEdge, edges;\r\n        let i, n, x, y, sId, tId, split = DagreLayoutMin.EDGE_KEY_DELIM;\r\n        let e: Association;\r\n\r\n        nodes = node['nodes'];\r\n        edges = node['edges'];\r\n        g = new LayoutGraphMin();\r\n\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            g.setNode(n.id, new LayoutGraphNode(n.id, n.getSize().x, n.getSize().y, n.getPos().x, n.getPos().y));\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            sId = this.getNodeId(e.$sNode);\r\n            tId = this.getNodeId(e.$tNode);\r\n            if (sId > tId) {\r\n                let tmp = tId;\r\n                tId = sId;\r\n                sId = tmp;\r\n            }\r\n            let idAB = sId + split + tId + split;\r\n            let idBA = tId + split + sId + split;\r\n            if (sId !== tId && g.edgesLabel.indexOf(idAB) < 0 && g.edgesLabel.indexOf(idBA) < 0) {\r\n                newEdge = {source: sId, target: tId, minlen: 1, weight: 1};\r\n                g.edges.push(newEdge);\r\n                g.edgesLabel.push(idAB);\r\n                // In Edges\r\n                if (!g.inEdges[tId]) {\r\n                    g.inEdges[tId] = [];\r\n                }\r\n                g.inEdges[tId].push(newEdge);\r\n\r\n                // Out Edges\r\n                if (!g.outEdges[sId]) {\r\n                    g.outEdges[sId] = [];\r\n                }\r\n                g.outEdges[sId].push(newEdge);\r\n            }\r\n        }\r\n        this.layouting(g);\r\n        // Set the layouting back\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            layoutNode = g.node(n.id);\r\n            x = n.getPos().x;\r\n            y = n.getPos().y;\r\n            if (x < 1 && y < 1) {\r\n                n.withPos(Math.ceil(layoutNode.x), Math.ceil(layoutNode.y));\r\n            }\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            // OBSOLETE method:  e.calc(graph.canvas);\r\n        }\r\n        graph.draw();\r\n    }\r\n\r\n    public getNodeId(node: Control): string {\r\n        if (node.$owner) {\r\n            return this.getNodeId(node.$owner) || node.id;\r\n        }\r\n        return node.id;\r\n    }\r\n\r\n    public layouting(g: LayoutGraphMin) {\r\n        this.longestPath(g);\r\n        this.normalizeRanks(g);\r\n        this.normalizeEdge(g);\r\n        // this.setSimpleOrder(g);\r\n        this.order(g);\r\n        g.ranksep = 25;\r\n        // remove Dummy\r\n        this.removeDummy(g);\r\n        this.position(g);\r\n    }\r\n\r\n    public setSimpleOrder(g: LayoutGraphMin) {\r\n        let i, n;\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            n.order = n.rank;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Applies heuristics to minimize edge crossings in the graph and sets the best\r\n     * order solution as an order attribute on each node.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Graph must be DAG\r\n     *    2. Graph nodes must be objects with a \"rank\" attribute\r\n     *    3. Graph edges must have the \"weight\" attribute\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Graph nodes will have an \"order\" attribute based on the results of the\r\n     *       algorithm.\r\n     */\r\n    public order(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        let visited = {};\r\n        let node, n, order, i;\r\n        for (i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (n in g.nodes) {\r\n            if (visited[n]) {\r\n                continue;\r\n            }\r\n            visited[n] = true;\r\n            node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank].push(n);\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                g.nodes[layering[order][n]].order = parseInt(n);\r\n            }\r\n        }\r\n        // Fix resolve conflict\r\n        for (order in layering) {\r\n            if (layering[order].length > 1) {\r\n                for (n in layering[order]) {\r\n                    if (layering[order].hasOwnProperty(n) === false) {\r\n                        continue;\r\n                    }\r\n                    let name = layering[order][n];\r\n                    let sum = 0;\r\n                    let weight = 1;\r\n                    let edges = g.dummyEdges[name];\r\n                    if (edges) {\r\n                        for (i in edges) {\r\n                            if (edges.hasOwnProperty(i) === false) {\r\n                                continue;\r\n                            }\r\n                            let edge = edges[i];\r\n                            let nodeU = g.node(edge.target);\r\n                            sum = sum + (edge.weight * nodeU.order);\r\n                            weight = weight + edge.weight;\r\n                        }\r\n                    }\r\n                    g.node(name).barycenter = sum / weight;\r\n                    g.node(name).weight = weight;\r\n                }\r\n            } else if (layering[order].length > 0) {\r\n                for (n in layering[order]) {\r\n                    let name = layering[order][n];\r\n                    g.node(name).barycenter = 1;\r\n                    g.node(name).weight = 1;\r\n                }\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                let node = g.nodes[layering[order][n]];\r\n                node.order = parseInt(n) + node.barycenter * node.weight;\r\n                if (isNaN(node.order)) {\r\n                    console.log('ERROR');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public removeDummy(g: LayoutGraphMin) {\r\n        for (let z in g.dummyNodes) {\r\n            let node = g.dummyNodes[z];\r\n            g.setNode(node.id, null);\r\n        }\r\n        g.dummyNodes = [];\r\n        g.dummyEdges = {};\r\n    }\r\n\r\n    /*\r\n     * Breaks any long edges in the graph into short segments that span 1 layer\r\n     * each. This operation is undoable with the denormalize function.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. The input graph is a DAG.\r\n     *    2. Each node in the graph has a \"rank\" property.\r\n     *\r\n     * Post-condition:\r\n     *\r\n     *    1. All edges in the graph have a length of 1.\r\n     *    2. Dummy nodes are added where edges have been split into segments.\r\n     *    3. The graph is augmented with a \"dummyChains\" attribute which contains\r\n     *       the first dummy in each chain of dummy nodes produced.\r\n     */\r\n    public normalizeEdge(g: LayoutGraphMin): void {\r\n        let i: number = 1;\r\n        for (let id in g.edges) {\r\n            let e: LayoutGraphEdge = <LayoutGraphEdge>g.edges[id];\r\n            let v: string = e.source;\r\n            let vRank = g.node(v).rank;\r\n            const w: string = e.target;\r\n            const wRank: number = g.node(w).rank;\r\n            let name: string;\r\n\r\n            if (wRank === vRank + 1) {\r\n                continue;\r\n            }\r\n\r\n            let dummy;\r\n            for (vRank = vRank + 1; vRank < wRank; ++vRank) {\r\n                name = '_d' + e.source + e.target + (i++);\r\n                let newEdge = {source: v, target: name, minlen: 1, weight: 1};\r\n                dummy = new LayoutGraphNode(name, 0, 0, 0, 0);\r\n                dummy.edgeObj = e;\r\n                dummy.rank = vRank;\r\n                // Dummy Edges\r\n                if (!g.dummyEdges[v]) {\r\n                    g.dummyEdges[v] = [];\r\n                }\r\n                g.dummyEdges[v].push(newEdge);\r\n\r\n                g.dummyNodes.push(dummy);\r\n                g.setNode(dummy.id, dummy);\r\n                v = name;\r\n            }\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Initializes ranks for the input graph using the longest path algorithm. This\r\n     * algorithm scales well and is fast in practice, it yields rather poor\r\n     * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\r\n     * ranks wide and leaving edges longer than necessary. However, due to its\r\n     * speed, this algorithm is good for getting an initial ranking that can be fed\r\n     * into other algorithms.\r\n     *\r\n     * This algorithm does not normalize layers because it will be used by other\r\n     * algorithms in most cases. If using this algorithm directly, be sure to\r\n     * run normalize at the end.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Input graph is a DAG.\r\n     *    2. Input graph node labels can be assigned properties.\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Each node will be assign an (unnormalized) \"rank\" property.\r\n     */\r\n    public longestPath(g: LayoutGraphMin) {\r\n        let i, n, visited = [];\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            visited.push(i);\r\n            n.rank = this.findAllPaths(g, n, 0, visited);\r\n            g.minRank = Math.min(g.minRank, n.rank);\r\n        }\r\n    }\r\n\r\n    public findAllPaths(g: LayoutGraphMin, n: Node, currentCost: number, path: Array<String>) {\r\n        let min: number = 0;\r\n        let id: string;\r\n        let z: number;\r\n        let target;\r\n        if (g.outEdges[n.id]) {\r\n            for (z = 0; z < g.outEdges[n.id].length; z++) {\r\n                id = g.outEdges[n.id][z].target;\r\n                target = g.nodes[id];\r\n                if (path[id]) {\r\n                    min = Math.min(min, target.rank);\r\n                } else if (path.indexOf(id) < 0) {\r\n                    min = Math.min(min, this.findAllPaths(g, target, currentCost - 2, path));\r\n                } else {\r\n                    min = currentCost;\r\n                }\r\n            }\r\n            return min;\r\n        }\r\n        return currentCost;\r\n    }\r\n\r\n    /*\r\n     * Adjusts the ranks for all nodes in the graph such that all nodes v have\r\n     * rank(v) >= 0 and at least one node w has rank(w) = 0.\r\n     */\r\n    public normalizeRanks(g: LayoutGraphMin) {\r\n        let min = g.minRank;\r\n        let value;\r\n        g.maxRank = Number.NEGATIVE_INFINITY;\r\n        g.maxHeight = 0;\r\n        g.maxWidth = 0;\r\n        for (let i in g.nodes) {\r\n            let node = g.nodes[i];\r\n            if (node.rank !== undefined) {\r\n                node.rank -= min;\r\n                value = Math.abs(node.rank);\r\n                if (value > g.maxRank) {\r\n                    g.maxRank = value;\r\n                }\r\n                g.maxHeight = Math.max(g.maxHeight, node.height);\r\n                g.maxWidth = Math.max(g.maxWidth, node.width);\r\n            }\r\n        }\r\n    }\r\n\r\n    public position(g: LayoutGraphMin) {\r\n        this.positionY(g);\r\n        let list = this.positionX(g);\r\n        for (let i in list) {\r\n            for (let pos in list[i]) {\r\n                if (list[i].hasOwnProperty(pos) === false) {\r\n                    continue;\r\n                }\r\n                if (g.node(list[i][pos])) {\r\n                    g.node(list[i][pos]).x = parseInt(pos) * g.maxWidth;\r\n                }\r\n            }\r\n\r\n        }\r\n    }\r\n\r\n    public positionY(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        let rankSep = g.ranksep;\r\n        let prevY = 0;\r\n        for (let layer in layering) {\r\n            let maxHeight = g.maxHeight;\r\n            for (let v in layering[layer]) {\r\n                if (layering[layer].hasOwnProperty(v) === false) {\r\n                    continue;\r\n                }\r\n                let id = layering[layer][v];\r\n                g.nodes[id].y = prevY + maxHeight / 2;\r\n            }\r\n            prevY += maxHeight + rankSep;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\r\n     * function will produce a matrix with the ids of each node.\r\n     */\r\n    public buildLayerMatrix(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        for (let i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (let n in g.nodes) {\r\n            let node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank][node.order] = n;\r\n            }\r\n        }\r\n        return layering;\r\n    }\r\n\r\n    public positionX(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        return layering;\r\n    }\r\n}\r\n","import { Point } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport Layout from './Layout';\r\n\r\nexport class Random implements Layout {\r\n\r\n  public layout(graph: Graph) {\r\n\r\n    let model = graph.$graphModel;\r\n\r\n    if (model.nodes) {\r\n      for (let node of model.nodes) {\r\n        let pos: Point = node.getPos();\r\n        if (pos.x === 0 && pos.y === 0) {\r\n          let x = Util.getRandomInt(0, graph.canvasSize.width);\r\n          let y = Util.getRandomInt(0, graph.canvasSize.height);\r\n          node.withPos(x, y);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","export * from './DagreLayout';\r\nexport * from './Random';\r\nexport * from './DagreLayoutMin';\r\n\r\nimport {DagreLayout} from './DagreLayout';\r\nimport {DagreLayoutMin} from './DagreLayoutMin';\r\nimport {Random} from './Random';\r\nnew DagreLayout();\r\nnew DagreLayoutMin();\r\nnew Random();\r\n","import {VirtualKeyBoard} from './VirtualKeyBoard';\r\n\r\nexport {Point} from './elements/BaseElements';\r\nexport {Bridge, DelegateAdapter} from './Bridge';\r\nexport {Graph} from './elements/Graph';\r\nexport * from './elements/nodes';\r\nexport * from './elements/edges';\r\nexport * from './adapters';\r\nexport * from './UML';\r\nimport {Point} from './elements/BaseElements';\r\nimport {Graph} from './elements/Graph';\r\nimport {ClassEditor} from './elements/ClassEditor';\r\nimport {Bridge} from './Bridge';\r\nimport {Util} from './util';\r\nimport * as nodes  from './elements/nodes';\r\nimport * as edges from './elements/edges';\r\nimport {ScrumBoard} from './ScrumBoard';\r\n\r\nif (!window['Point']) {\r\n    window['Point'] = Point;\r\n    window['Graph'] = Graph;\r\n    window['bridge'] = new Bridge();\r\n    window['Util'] = Util;\r\n    window['Class'] = nodes.Class;\r\n    window['Association'] = edges.Association;\r\n    window['SymbolLibary'] = nodes.SymbolLibary;\r\n    window['ClassEditor'] = ClassEditor;\r\n    window['VirtualKeyBoard'] = VirtualKeyBoard;\r\n    window['ScrumBoard'] = ScrumBoard;\r\n}\r\n","'use strict';\r\nimport { CSS } from './CSS';\r\nimport { Node } from './elements/nodes/Node';\r\nimport { DiagramElement, Point } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport class Util {\r\n\r\n    public static isAutoSave: boolean;\r\n\r\n    static getRandomInt(min: number, max: number): number {\r\n        return Math.floor(Math.random() * (max - min + 1)) + min;\r\n    }\r\n\r\n    static createShape(attrs: any): SVGSVGElement {\r\n        let xmlns = attrs.xmlns || 'http://www.w3.org/2000/svg';\r\n        let shape = document.createElementNS(xmlns, attrs.tag);\r\n\r\n        for (let attr in attrs) {\r\n            if (!attrs.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr !== 'tag') {\r\n                shape.setAttribute(attr, attrs[attr]);\r\n\r\n            }\r\n        }\r\n        return <SVGSVGElement><any>shape;\r\n    }\r\n\r\n    static toPascalCase(value: string): string {\r\n        value = value.charAt(0).toUpperCase() + value.substring(1).toLowerCase();\r\n        return value;\r\n    }\r\n\r\n    static isSVG(tag: string): boolean {\r\n        let i,\r\n            list = ['svg', 'path', 'polygon', 'polyline', 'line', 'title', 'rect', 'filter', 'feGaussianBlur', 'feOffset', 'feBlend', 'linearGradient', 'stop', 'text', 'symbol', 'textPath', 'defs', 'fegaussianblur', 'feoffset', 'feblend', 'circle', 'ellipse', 'g'];\r\n        for (i = 0; i < list.length; i += 1) {\r\n            if (list[i] === tag) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    static createHTML(node: any): HTMLElement {\r\n        return <HTMLElement>this.create(node);\r\n    }\r\n    static create(node: any): Element {\r\n        let style, item, xmlns, key, tag, k;\r\n        if (document.createElementNS && (this.isSVG(node.tag) || node.xmlns)) {\r\n            if (node.xmlns) {\r\n                xmlns = node.xmlns;\r\n            } else {\r\n                xmlns = 'http://www.w3.org/2000/svg';\r\n            }\r\n            if (node.tag === 'img' && xmlns) {\r\n                item = document.createElementNS(xmlns, 'image');\r\n                item.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\r\n                item.setAttributeNS('http://www.w3.org/1999/xlink', 'href', node.src);\r\n            } else {\r\n                item = document.createElementNS(xmlns, node.tag);\r\n            }\r\n        } else {\r\n            item = document.createElement(node.tag);\r\n        }\r\n        tag = node.tag.toLowerCase();\r\n        for (key in node) {\r\n            if (!node.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            k = key.toLowerCase();\r\n            if (node[key] === null) {\r\n                continue;\r\n            }\r\n            if (k === 'tag' || k.charAt(0) === '$' || k === '$graphModel') {\r\n                continue;\r\n            }\r\n            if (k.charAt(0) === '#') {\r\n                item[k.substring(1)] = node[key];\r\n                continue;\r\n            }\r\n            if (k === 'rotate') {\r\n                item.setAttribute('transform', 'rotate(' + node[key] + ',' + node.$graphModel.x + ',' + node.$graphModel.y + ')');\r\n                continue;\r\n            }\r\n            if (k === 'value') {\r\n                if (!node[key]) {\r\n                    continue;\r\n                }\r\n                if (tag !== 'input') {\r\n                    if (tag === 'text') {// SVG\r\n                        item.appendChild(document.createTextNode(node[key]));\r\n                    } else {\r\n                        item.innerHTML = node[key];\r\n                    }\r\n                } else {\r\n                    item[key] = node[key];\r\n                }\r\n                continue;\r\n            }\r\n            if (k.indexOf('on') === 0) {\r\n                this.bind(item, k.substring(2), node[key]);\r\n                continue;\r\n            }\r\n            if (k.indexOf('-') >= 0) {\r\n                item.style[key] = node[key];\r\n            } else {\r\n                if (k === 'style' && typeof (node[key]) === 'object') {\r\n                    for (style in node[key]) {\r\n                        if (!node[key].hasOwnProperty(style)) {\r\n                            continue;\r\n                        }\r\n                        if (node[key][style]) {\r\n                            if ('transform' === style) {\r\n                                item.style.transform = node[key][style];\r\n                                item.style.msTransform = item.style.MozTransform = item.style.WebkitTransform = item.style.OTransform = node[key][style];\r\n                            } else {\r\n                                item.style[style] = node[key][style];\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    item.setAttribute(key, node[key]);\r\n                }\r\n            }\r\n        }\r\n        if (node.$parent) {\r\n            node.$parent.appendChild(item);\r\n        }\r\n        if (node.$graphModel) {\r\n            item.$graphModel = node.$graphModel;\r\n        }\r\n        return item;\r\n    }\r\n\r\n    static setSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttribute('width', value);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.setAttribute('height', value);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setAttributeSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttributeNS(null, 'width', value);\r\n        value = Util.getValue(height);\r\n        item.setAttributeNS(null, 'height', value);\r\n    }\r\n\r\n    static setStyleSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setPos(item: any, x: number, y: number): void {\r\n        if (item.x && item.x.baseVal) {\r\n            item.style.left = x + 'px';\r\n            item.style.top = y + 'px';\r\n        } else {\r\n            item.x = x;\r\n            item.y = y;\r\n        }\r\n    }\r\n\r\n    static getValue(value: string | number): number {\r\n        return parseInt(('0' + value).replace('px', ''), 10);\r\n    }\r\n\r\n    static isIE(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('.net') > -1;\r\n    }\r\n\r\n    static isEdge(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('edge') > -1;\r\n    }\r\n\r\n    static isFireFox(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n    }\r\n\r\n    static isSafari(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        return navigator.userAgent.toLowerCase().indexOf('safari') > -1 && !isEdge;\r\n    }\r\n\r\n    static isOpera(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('opera') > -1;\r\n    }\r\n\r\n    static isChrome(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        let isSafari = Util.isSafari();\r\n        return navigator.userAgent.toLowerCase().indexOf('chrome') > -1 && !isEdge && isSafari;\r\n    }\r\n\r\n    static getEventX(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetX'] : event.layerX;\r\n    }\r\n\r\n    static getEventY(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetY'] : event.layerY;\r\n    }\r\n\r\n    static getNumber(str: string): number {\r\n        return parseInt((str || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    static getStyle(styleProp: string): CSS {\r\n        let i, style, diff, current, ref, el = document.createElement('div'), css;\r\n        document.body.appendChild(el);\r\n        css = new CSS(styleProp);\r\n        ref = new CSS(styleProp, el).css;\r\n        style = window.getComputedStyle(el, null);\r\n        el.className = styleProp;\r\n        current = new CSS(styleProp, el).css;\r\n        diff = Util.getNumber(style.getPropertyValue('border-width'));\r\n        for (i in current) {\r\n            if (!current.hasOwnProperty(i)) {\r\n                continue;\r\n            }\r\n            if (i === 'width' || i === 'height') {\r\n                if (Util.getNumber(current[i]) !== 0 && Util.getNumber(current[i]) + diff * 2 !== Util.getNumber(ref[i])) {\r\n                    css.add(i, current[i]);\r\n                }\r\n            } else if (current[i] !== ref[i]) {\r\n                css.add(i, current[i]);\r\n            }\r\n        }\r\n        document.body.removeChild(el);\r\n        return css;\r\n    }\r\n\r\n    static sizeOf(item: string | any, node?: Node): ClientRect {\r\n        let board;\r\n        let rect: ClientRect;\r\n        let addBoard: boolean;\r\n        if (!item) {\r\n            return undefined;\r\n        }\r\n        if (node) {\r\n            board = node.$owner.$view;\r\n            addBoard = false;\r\n        }\r\n\r\n        if (!board) {\r\n            addBoard = true;\r\n            board = Util.createShape({ tag: 'svg', id: 'root', width: 200, height: 200 });\r\n            document.body.appendChild(board);\r\n        }\r\n        if (board.tagName === 'svg') {\r\n            if (typeof item === 'string') {\r\n                item = Util.create({ tag: 'text', $font: true, value: item });\r\n                item.setAttribute('width', '5px');\r\n            }\r\n        } else if (typeof item === 'string') {\r\n            item = document.createTextNode(item);\r\n        }\r\n        board.appendChild(item);\r\n        rect = item.getBoundingClientRect();\r\n        board.removeChild(item);\r\n\r\n        if (addBoard) {\r\n            document.body.removeChild(board);\r\n        }\r\n        return rect;\r\n    }\r\n\r\n    static getColor(style: string, defaultColor?: string) {\r\n        if (style) {\r\n            if (style.toLowerCase() === 'create') {\r\n                return '#008000';\r\n            }\r\n            if (style.toLowerCase() === 'nac') {\r\n                return '#FE3E3E';\r\n            }\r\n            if (style.indexOf('#') === 0) {\r\n                return style;\r\n            }\r\n        }\r\n        if (defaultColor) {\r\n            return defaultColor;\r\n        }\r\n        return '#000';\r\n    }\r\n\r\n    public static utf8$to$b64(str: string): string {\r\n        return window.btoa(encodeURIComponent(str));\r\n    }\r\n\r\n    public static showSVG(control: DiagramElement) {\r\n        let svg = Util.create({\r\n            tag: 'svg',\r\n            style: { left: control.getPos().x, top: control.getPos().y, position: 'absolute' }\r\n        });\r\n        let child = control.getSVG();\r\n        if (child) {\r\n            svg.appendChild(child);\r\n        }\r\n        Util.setSize(svg, control.getSize().x, control.getSize().y);\r\n        document.body.appendChild(svg);\r\n    }\r\n\r\n    public static toJson(ref: JSON | Object): Object {\r\n        let result = {};\r\n        return Util.copy(result, ref, false, false);\r\n    }\r\n\r\n    public static initControl(parent: Control, control: Control, type: string, id: string, json: JSON | Object) {\r\n        if (typeof control.init === 'function') {\r\n            control.init(parent, type, id);\r\n        }\r\n        if (typeof control.load === 'function') {\r\n            control.load(json);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * copy One Json into another\r\n     * @function\r\n     * @param ref reference Json\r\n     * @param src source Json\r\n     * @param full all attributes include privet $\r\n     * @param replace set the original reference or copy it\r\n     * @returns ref\r\n     * @name copy\r\n     */\r\n    public static copy(ref: JSON | Object, src: JSON | Object, full: boolean, replace: boolean) {\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (replace) {\r\n                        ref[i] = src[i];\r\n                        continue;\r\n                    }\r\n                    if (!ref[i]) {\r\n                        if (src[i] instanceof Array) {\r\n                            ref[i] = [];\r\n                        } else {\r\n                            ref[i] = {};\r\n                        }\r\n                    }\r\n                    Util.copy(ref[i], src[i], full, false);\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref[i] = src[i];\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    public static xmlstringify(text: string): string {\r\n        text = text.replace('<', '&lt;');\r\n        text = text.replace('>', '&gt;');\r\n        return text;\r\n    }\r\n\r\n    public static toXML(ref: JSON | Object | any, src: JSON | Object | any, full: boolean, doc: Document): any {\r\n        let name;\r\n        if (!ref) {\r\n            name = src.constructor.name;\r\n            doc = document.implementation.createDocument(null, name, null);\r\n            ref = doc.childNodes[0];\r\n        }\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (!ref.getAttribute(i)) {\r\n                        if (src[i] instanceof Array) {\r\n                            for (let c in src[i]) {\r\n                                if (!src[i].hasOwnProperty(c)) {\r\n                                    continue;\r\n                                }\r\n                                name = src[i][c].constructor.name;\r\n                                let child = doc.createElement(name);\r\n                                ref.appendChild(child);\r\n                                Util.toXML(child, src[i][c], full, doc);\r\n                            }\r\n                        } else {\r\n                            name = src[i].constructor.name;\r\n                            let child = doc.createElement(name);\r\n                            ref.appendChild(child);\r\n                            Util.toXML(child, src[i], full, doc);\r\n                        }\r\n                    } else {\r\n                        Util.toXML(ref.getAttribute(i), src[i], full, doc);\r\n                    }\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref.setAttribute(i, src[i]);\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    static Range(min: Point, max: Point, x: number, y: number) {\r\n        max.x = Math.max(max.x, x);\r\n        max.y = Math.max(max.y, y);\r\n        min.x = Math.min(min.x, x);\r\n        min.y = Math.min(min.y, y);\r\n    }\r\n\r\n    public static getPosition(m: number, n: number, entity: DiagramElement, refCenter: Point) {\r\n        let t, p = [], list, distance = [], min = 999999999, position, i, step = 15;\r\n        let pos: Point = entity.getPos();\r\n        let size: Point = entity.getSize();\r\n        list = [Point.LEFT, Point.RIGHT];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = this.getLRPosition(m, n, entity, list[i]);\r\n            if (t.y >= pos.y && t.y <= (pos.y + size.y + 1)) {\r\n                t.y += (entity['$' + list[i]] * step);\r\n                if (t.y > (pos.y + size.y)) {\r\n                    // Alternative\r\n                    t = Util.getUDPosition(m, n, entity, Point.DOWN, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        list = [Point.UP, Point.DOWN];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = Util.getUDPosition(m, n, entity, list[i]);\r\n            if (t.x >= pos.x && t.x <= (pos.x + size.x + 1)) {\r\n                t.x += (entity['$' + list[i]] * step);\r\n                if (t.x > (pos.x + size.x)) {\r\n                    // Alternative\r\n                    t = this.getLRPosition(m, n, entity, Point.RIGHT, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        for (i = 0; i < p.length; i += 1) {\r\n            if (distance[i] < min) {\r\n                min = distance[i];\r\n                position = p[i];\r\n            }\r\n        }\r\n        return position;\r\n    }\r\n\r\n    public static getUDPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let x, y: number = pos.y;\r\n        if (p === Point.DOWN) {\r\n            y += size.y;\r\n        }\r\n        x = (y - n) / m;\r\n        if (step) {\r\n            x += e['$' + p] * step;\r\n            if (x < pos.x) {\r\n                x = pos.x;\r\n            } else if (x > (pos.x + size.x)) {\r\n                x = pos.x + size.x;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static getLRPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let y: number, x: number = pos.x;\r\n        if (p === Point.RIGHT) {\r\n            x += size.x;\r\n        }\r\n        y = m * x + n;\r\n        if (step) {\r\n            y += e['$' + p] * step;\r\n            if (y < pos.y) {\r\n                y = pos.y;\r\n            } else if (y > (pos.y + size.y)) {\r\n                y = pos.y + size.y;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static hasClass(element: Element, cls: string) {\r\n        let className = element.getAttribute('class');\r\n        return className.indexOf(cls) > 0;\r\n    }\r\n    public static addClass(element: Element, cls: string) {\r\n        if (!Util.hasClass(element, cls)) {\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className + ' ' + cls);\r\n        }\r\n    }\r\n    public static removeClass(element: Element, cls: string) {\r\n        if (Util.hasClass(element, cls)) {\r\n            let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className.replace(reg, ' ').trim());\r\n        }\r\n    }\r\n\r\n    public static startsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.startsWith) {\r\n            return s.indexOf(searchS) === 0;\r\n        }\r\n\r\n        return s.startsWith(searchS);\r\n    }\r\n\r\n    public static endsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.endsWith) {\r\n            let lastIndex = s.lastIndexOf(searchS);\r\n            return lastIndex !== -1 && lastIndex === (s.length - 1);\r\n        }\r\n\r\n        return s.endsWith(searchS);\r\n    }\r\n\r\n    public static includes(s: string, searchS: string): boolean {\r\n        if (!String.prototype.includes) {\r\n            let idx = s.indexOf(searchS);\r\n            return idx > -1;\r\n        }\r\n        if (s === null) {\r\n            return false;\r\n        }\r\n\r\n        return s.includes(searchS);\r\n    }\r\n\r\n    public static isParentOfChild(parent: Element, child: Element): boolean {\r\n\r\n        if (!parent || !child) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isIE()) {\r\n            let children = parent.childNodes;\r\n            // let found = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                let childItem = children[i];\r\n                if (childItem === child) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        return parent.contains(child);\r\n    }\r\n\r\n    public static createCustomEvent(type: string, params?: any): CustomEvent {\r\n        let evt: CustomEvent;\r\n\r\n        if (typeof window['CustomEvent'] !== 'function') {\r\n            params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n            evt = document.createEvent('CustomEvent');\r\n            evt.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\r\n            return evt;\r\n        }\r\n\r\n        evt = new CustomEvent(type);\r\n\r\n        return evt;\r\n    }\r\n\r\n    public static saveToLocalStorage(model: any): boolean {\r\n        if (!this.isAutoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isLocalStorageSupported()) {\r\n            if (model) {\r\n                if (model.$isLoading) {\r\n                    return false;\r\n                }\r\n                let jsonObj = Util.toJson(model);\r\n                let data = JSON.stringify(jsonObj, null, '\\t');\r\n                localStorage.setItem('diagram', data);\r\n            } else {\r\n                localStorage.removeItem('diagram');\r\n            }\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static getDiagramFromLocalStorage(): string {\r\n        if (Util.isLocalStorageSupported()) {\r\n            return localStorage.getItem('diagram');\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    public static isLocalStorageSupported(): boolean {\r\n        if (this.isEdge()) {\r\n            return false;\r\n        }\r\n        return localStorage !== undefined;\r\n    }\r\n}\r\n"],"sourceRoot":""}
Severity: Minor
Found in doc/diagram.js.map by fixme

TODO found
Open

{"version":3,"sources":["webpack://DiagramJS/webpack/bootstrap","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Adapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Bridge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/BridgeElement.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/CSS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Control.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Data.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventBus.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/JSEPS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Palette.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertiesPanel.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertyBinder.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/RGBColor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/SVGConverter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/ScrumBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Toolbar.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/UML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/VirtualKeyBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/JavaAdapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/BaseElements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/ClassEditor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Graph.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Model.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregate.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Association.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Composition.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Generalisation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Implements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Attribute.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/AutoComplete.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/BR.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Button.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Class.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/ClazzProperty.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Dice.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Div.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Form.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/HTML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/InfoText.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Input.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Label.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Method.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Node.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/SO.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/StereoType.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Symbol.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Table.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/AddNode.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Drag.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/GraphListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/ImportFile.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/NewEdge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Select.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Zoom.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayout.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayoutMin.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/Random.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/main.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/util.ts"],"names":[],"mappings":"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","file":"diagram.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./main.ts\");\n","export abstract class Adapter {\r\n    public id: string = null;\r\n\r\n    abstract update(evt: Object): boolean;\r\n}\r\n","'use strict';\r\n\r\nimport * as controls from './elements/nodes';\r\nimport * as adapters from './adapters';\r\nimport Data from './Data';\r\nimport {Control} from './Control';\r\nimport {Adapter} from './Adapter';\r\nimport {Graph} from './elements';\r\nimport {Util} from './util';\r\nimport {Point} from './elements';\r\n\r\nexport class Bridge extends Control {\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public static version: string = '0.42.01.1601007-1739';\r\n    private controlFactory: Object = {};\r\n    private adapterFactory: Object = {};\r\n    private controls: Object = {};\r\n    private adapters: Object = {};\r\n    private items: Object = {};\r\n    private controlNo: number = 1;\r\n    private online: boolean = true;\r\n    private language: string = navigator.language.toUpperCase();\r\n    private toolBar: HTMLElement;\r\n\r\n    constructor(viewRoot?: HTMLElement) {\r\n        super();\r\n        let i;\r\n\r\n        if (viewRoot) {\r\n            this.$view = viewRoot;\r\n        }\r\n\r\n        let keys: string[] = Object.keys(adapters);\r\n        for (i = 0; i < keys.length; i++) {\r\n            let child = adapters[keys[i]];\r\n            if (child && child.id) {\r\n                this.adapterFactory[child.id.toLowerCase()] = child;\r\n            }\r\n        }\r\n\r\n        keys = Object.keys(controls);\r\n        for (i = 0; i < keys.length; i++) {\r\n            this.addControl(controls[keys[i]]);\r\n        }\r\n        this.addControl(Graph);\r\n\r\n        let that = this;\r\n        window.addEventListener('load', function () {\r\n            let updateOnlineStatus = function updateOnlineStatus() {\r\n                that.setOnline(navigator.onLine);\r\n            };\r\n            window.addEventListener('online', updateOnlineStatus);\r\n            window.addEventListener('offline', updateOnlineStatus);\r\n        });\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public setOnline(value: boolean) {\r\n        this.online = value;\r\n        if (this.toolBar.children[0]) {\r\n            this.toolBar.children[0].className = value ? 'online' : 'offline';\r\n        }\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addToolbar(): boolean {\r\n        if (this.toolBar) {\r\n            return false;\r\n        }\r\n        this.toolBar = document.createElement('div');\r\n        this.toolBar.className = 'onlineStatus';\r\n        let child = document.createElement('div');\r\n        child.className = 'online';\r\n        this.toolBar.appendChild(child);\r\n        child = document.createElement('div');\r\n        child.className = 'lang';\r\n        child.innerHTML = this.language;\r\n        this.toolBar.appendChild(child);\r\n\r\n        let body: HTMLElement = document.getElementsByTagName('body')[0];\r\n        body.insertBefore(this.toolBar, body.firstChild);\r\n        // Refresh Online Status\r\n        this.setOnline(this.online);\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addListener = function (listener: any) {\r\n        this.listener.push(listener);\r\n    };\r\n\r\n    public addControl(control: any) {\r\n        if (control && control.name) {\r\n            this.controlFactory[control.name.toLowerCase()] = control;\r\n        }\r\n    }\r\n\r\n    public getId(): string {\r\n        return 'control' + (this.controlNo++);\r\n    }\r\n\r\n    public adapterUpdate(message: string) {\r\n        let keys: string[] = Object.keys(this.adapters);\r\n        if (keys.length > 0) {\r\n            let i;\r\n            for (i = 0; i < keys.length; i++) {\r\n                let adapterList = this.adapters[keys[i]];\r\n                if (adapterList instanceof Adapter) {\r\n                    adapterList.update(message);\r\n                } else {\r\n                    for (let adapter of adapterList) {\r\n                        adapter.update(message);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        let config = {}, className: string, id: string;\r\n        if (typeof(json) === 'string') {\r\n            // Only a String\r\n            config['id'] = '' + json;\r\n            let item = document.getElementById(config['id']);\r\n            let className: string;\r\n            if (item) {\r\n                className = item.getAttribute('class');\r\n                if (!className) {\r\n                    className = item.getAttribute('classname') || '';\r\n                }\r\n                // Found Element and now config Data element\r\n                if (item.getAttribute('property')) {\r\n                    if (this.hasItem(item.getAttribute('property'))) {\r\n                        let data = this.getItem(item.getAttribute('property'));\r\n                        for (let key in data.prop) {\r\n                            if (item.getAttribute(key)) {\r\n                                data.setValue(key, item.getAttribute(key));\r\n                            }\r\n                        }\r\n                        if (item.getAttribute('property')) {\r\n                            // TODO: FIXME!!!\r\n                            // data.property = item.getAttribute(\"property\");\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                className = '' + json;\r\n            }\r\n            className = className.toLowerCase();\r\n            config['className'] = className;\r\n        } else {\r\n            config = <JSON>json;\r\n        }\r\n        // Config validate\r\n        if (!config['id']) {\r\n            config['id'] = this.getId();\r\n        }\r\n        // Backup for Old Graph\r\n        if (!config['className'] && (config['type'] === 'clazzdiagram' || config['type'] === 'objectdiagram')) {\r\n            config['className'] = 'graph';\r\n        }\r\n\r\n        className = config['className'] || config['class'];\r\n        className = className.toLocaleLowerCase();\r\n        id = config['id'];\r\n\r\n        // Check For Control or Data\r\n        if ((config['prop'] || config['upd'] || config['rem']) && this.controls[id] === null) {\r\n            // Its Data\r\n            let newData = !this.hasItem(config['id']);\r\n            let item: Data = this.getItem(config['id']);\r\n            // TODO: FIXME!!!\r\n            // if (id && className && !item.property) {\r\n            //      item.property = className;\r\n            // }\r\n            if (newData) {\r\n                for (let i in this.controls) {\r\n                    if (this.controls.hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    this.controls[i].addItem(this, item);\r\n                }\r\n            }\r\n            // Add all Values to item\r\n            item.addProperties(config);\r\n            // Bridge.addProperties(config['prop'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return item;\r\n        }\r\n\r\n        let control;\r\n        if (this.controls[id]) {\r\n            control = this.controls[id];\r\n            control.initControl(json);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return control;\r\n        }\r\n\r\n        if (typeof(this.controlFactory[className]) === 'object' || typeof(this.controlFactory[className]) === 'function') {\r\n            let obj = this.controlFactory[className];\r\n            control = new obj(json);\r\n            Util.initControl(owner || this, control, config['property'], id, json);\r\n\r\n            if (control.id) {\r\n                this.controls[control.id] = control;\r\n            } else {\r\n                this.controls[id] = control;\r\n            }\r\n\r\n            // create DataObject and register this control as listener to it\r\n            // let obj = {id:id};\r\n            // let data: Data = this.load(obj);\r\n            // data.addListener(this);\r\n\r\n            // Try to Show\r\n            if (typeof control.getSVG === 'function' && typeof control.getSize === 'function') {\r\n                let size: Point = control.getSize();\r\n\r\n                let svg = Util.createShape({\r\n                    tag: 'svg',\r\n                    id: 'root',\r\n                    width: size.x,\r\n                    height: size.y\r\n                });\r\n\r\n                let view = control.getSVG();\r\n                svg.appendChild(view);\r\n                document.getElementsByTagName('body')[0].appendChild(svg);\r\n            }\r\n            return control;\r\n        }\r\n        return null;\r\n        // bridge.load('{class:table, columns:[{id:'firstname'}, {id:'lastname'}]}');\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n\r\n        if (this.items[id] !== undefined) {\r\n            return true;\r\n        }\r\n        id = id.split('.')[0];\r\n        return (this.items[id] !== undefined);\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return this.items;\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        let item = this.items[id];\r\n        if (!item) {\r\n            id = id.split('.')[0];\r\n            item = this.items[id];\r\n            if (!item) {\r\n                item = new Data();\r\n                item.id = id;\r\n                this.items[id] = item;\r\n            }\r\n        }\r\n        return item;\r\n    }\r\n\r\n    /**\r\n     * Method for executing user input -> Event\r\n     * @param object\r\n     * @param attribute\r\n     * @param oldValue\r\n     * @param newValue\r\n     * @returns {boolean}\r\n     */\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        alert('Bridge.setValue: oldVal:' + oldValue + ', newVal: ' +  + newValue + ', attribute: ' + attribute + ', object: ' + JSON.stringify(object));\r\n        let obj: Data;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n\r\n        } else if (object instanceof Data) {\r\n            obj = object;\r\n            id = object.id;\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = <Data>object;\r\n            id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return false;\r\n        }\r\n        if (obj) {\r\n            // Execute Update to Data\r\n            obj.setValue(attribute, newValue);\r\n            // Could be done here, but currently is done at this.execueChange..:\r\n            // obj[attribute] = value;\r\n        }\r\n\r\n        /*let tmp = {'id': id};\r\n        if (typeof(newValue) !== 'undefined' && newValue !== null) {\r\n            let upd = {};\r\n            upd[attribute] = newValue;\r\n            tmp['upd'] = upd;\r\n        }\r\n        if (typeof(oldValue) !== 'undefined' && oldValue !== null) {\r\n            let rem = {};\r\n            rem[attribute] = oldValue;\r\n            tmp['rem'] = rem;\r\n        }*/\r\n        // this.load(tmp);\r\n        return true;\r\n    }\r\n\r\n    public getValue(object: Object, attribute: string): any {\r\n        let obj: Object;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = object;\r\n            // id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return;\r\n        }\r\n        if (obj) {\r\n            if (obj.hasOwnProperty(attribute)) {\r\n                return obj[attribute];\r\n            } else if (obj instanceof Data) {\r\n                return (<Data>obj).getValue(attribute);\r\n            } else {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    public getNumber(object: Object, attribute: string, defaultValue: number = 0): number {\r\n        let res = <number>this.getValue(object, attribute);\r\n        if (typeof res === 'number') {\r\n            return res;\r\n        } else if (typeof res === 'string') {\r\n            // check whether res is a number\r\n            let value = Number(res);\r\n            if (value || value === 0) {\r\n                return value;\r\n            }\r\n        }\r\n        return defaultValue;\r\n    }\r\n\r\n    getControl(controlId: string) {\r\n        return this.controls[controlId];\r\n    }\r\n\r\n    public registerListener(eventType: string, control: Control, callBackfunction: string): Control {\r\n        if (typeof control === 'string') {\r\n            control = this.getControl(<string>control);\r\n        }\r\n        if (!control) {\r\n            return null;\r\n        }\r\n        if (eventType) {\r\n            eventType = eventType.toLowerCase();\r\n        }\r\n        control.registerListenerOnHTMLObject(eventType);\r\n        if (callBackfunction) {\r\n            let adapter: DelegateAdapter = new DelegateAdapter();\r\n            adapter.callBackfunction = callBackfunction;\r\n            adapter.id = control.getId();\r\n            this.addAdapter(adapter, eventType);\r\n        }\r\n        return control;\r\n    }\r\n\r\n    public addAdapter(adapter: Adapter | string, eventType: string): Adapter {\r\n        if (!eventType) {\r\n            eventType = '';\r\n        }\r\n        let result: Adapter;\r\n        if (adapter instanceof String) {\r\n            let obj = this.adapterFactory[adapter.toLowerCase()];\r\n            result = new obj();\r\n        } else {\r\n            result = <Adapter>adapter;\r\n        }\r\n        let handlers = this.adapters[eventType];\r\n\r\n        if (handlers === null || handlers === undefined) {\r\n            handlers = [];\r\n            this.adapters[eventType] = handlers;\r\n        }\r\n        handlers.push(result);\r\n        return result;\r\n    }\r\n\r\n    public fireEvent(evt: Event): void {\r\n        let handlers = this.adapters[''];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n        handlers = this.adapters[evt['eventType']];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport class DelegateAdapter extends Adapter {\r\n    adapter: Adapter;\r\n    callBackfunction: string;\r\n\r\n    update(evt: Event): boolean {\r\n        if (this.adapter) {\r\n            this.adapter.update(evt);\r\n            return true;\r\n        } else if (this.callBackfunction) {\r\n            return this.executeFunction(this.callBackfunction, evt);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public setAdapter(adapter: Adapter): boolean {\r\n        this.adapter = adapter;\r\n        return true;\r\n    }\r\n\r\n    private executeFunction(strValue: string, evt: Event): boolean {\r\n        let scope = window;\r\n        let scopeSplit = strValue.split('.');\r\n        for (let i = 0; i < scopeSplit.length - 1; i++) {\r\n            scope = scope[scopeSplit[i]];\r\n            if (scope === undefined) {\r\n                return false;\r\n            }\r\n        }\r\n        let fn: any = scope[scopeSplit[scopeSplit.length - 1]];\r\n        if (typeof fn === 'function') {\r\n            fn.call(scope);\r\n            return true;\r\n        } else {\r\n            window['callBack1'].update(evt);\r\n\r\n        }\r\n        return false;\r\n    }\r\n}\r\n","'use strict';\r\nimport Data from './Data';\r\n\r\nexport default class BridgeElement {\r\n    private static elementSet: BridgeElement[] = [];\r\n    public model: Data;\r\n    public id: string;\r\n    public gui: HTMLElement;\r\n\r\n    constructor(model: Data) {\r\n        this.model = model;\r\n        this.id = model.id;\r\n        BridgeElement.elementSet.push(this);\r\n    }\r\n}\r\n","import {Util} from './util';\r\n\r\n// \t\t\t\t######################################################### CSS #########################################################\r\nexport class CSS {\r\n    public css: Object;\r\n    private name: string;\r\n\r\n    constructor(name: string, item?: any) {\r\n        let i, value, border: string, prop, el;\r\n        this.name = name;\r\n        this.css = {};\r\n        if (!item) {\r\n            return;\r\n        }\r\n\r\n        el = window.getComputedStyle(item, null);\r\n        border = el.getPropertyValue('border');\r\n        for (i in el) {\r\n            prop = i;\r\n            value = el.getPropertyValue(prop);\r\n            if (value && value !== '') {\r\n                // optimize CSS\r\n                if (border) {\r\n                    if (prop === 'border-bottom' || prop === 'border-right' || prop === 'border-top' || prop === 'border-left') {\r\n                        if (value !== border) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-color' || prop === 'border-bottom-color' || prop === 'border-right-color' || prop === 'border-top-color' || prop === 'border-left-color') {\r\n                        if (border.substring(border.length - value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-width') {\r\n                        if (border.substring(0, value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else {\r\n                        this.css[prop] = value;\r\n                    }\r\n                } else {\r\n                    this.css[prop] = value;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public static getStdDef() {\r\n        let child, def = Util.create({tag: 'defs'});\r\n\r\n        child = Util.create({tag: 'filter', id: 'drop-shadow'});\r\n        child.appendChild(Util.create({tag: 'feGaussianBlur', 'in': 'SourceAlpha', result: 'blur-out', stdDeviation: 2}));\r\n        child.appendChild(Util.create({tag: 'feOffset', 'in': 'blur-out', dx: 2, dy: 2}));\r\n        child.appendChild(Util.create({tag: 'feBlend', 'in': 'SourceGraphic', mode: 'normal'}));\r\n        def.appendChild(child);\r\n        child = Util.create({tag: 'linearGradient', id: 'reflect', x1: 0, x2: 0, y1: '50%', y2: 0, spreadMethod: 'reflect'});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#aaa', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#eee', offset: '100%'}));\r\n        def.appendChild(child);\r\n\r\n        child = Util.create({tag: 'linearGradient', id: 'classelement', x1: 0, x2: '100%', y1: '100%', y2: 0});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#fff', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#d3d3d3', offset: 1}));\r\n        def.appendChild(child);\r\n\r\n        return def;\r\n    }\r\n\r\n    public static getSubstring(str: string, search: string, startChar: string, endChar: string, splitter: string): any {\r\n        let pos, end, count = 0, array = [];\r\n        pos = str.indexOf(search);\r\n        if (pos > 0) {\r\n            end = str.indexOf(startChar, pos);\r\n            pos = end + 1;\r\n            if (end > 0) {\r\n                while (end < str.length) {\r\n                    if (str.charAt(end) === startChar) {\r\n                        count += 1;\r\n                    }\r\n                    if (str.charAt(end) === endChar) {\r\n                        count -= 1;\r\n                        if (count === 0) {\r\n                            if (splitter && pos !== end) {\r\n                                array.push(str.substring(pos, end).trim());\r\n                            }\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (str.charAt(end) === splitter && count === 1) {\r\n                        array.push(str.substring(pos, end).trim());\r\n                        pos = end + 1;\r\n                    }\r\n\r\n                    end += 1;\r\n                }\r\n                if (splitter) {\r\n                    return array;\r\n                }\r\n                return str.substring(pos, end);\r\n            }\r\n            return str.substring(pos);\r\n        }\r\n        return '';\r\n    }\r\n\r\n    public static addStyle(board: SVGElement, styleName: any) {\r\n        let defs, style: any, css;\r\n        if (styleName.baseVal || styleName.baseVal === '') {\r\n            styleName = styleName.baseVal;\r\n        }\r\n        if (!styleName) {\r\n            return;\r\n        }\r\n        defs = CSS.getDefs(board);\r\n        if (defs.getElementsByTagName('style').length > 0) {\r\n            style = defs.getElementsByTagName('style')[0];\r\n        } else {\r\n            style = Util.create({tag: 'style'});\r\n            style.item = {};\r\n            defs.appendChild(style);\r\n        }\r\n        if (!style.item[styleName]) {\r\n            css = Util.getStyle(styleName);\r\n            style.item[styleName] = css;\r\n            style.innerHTML = style.innerHTML + '\\n.' + styleName + css.getSVGString(board);\r\n        }\r\n    }\r\n\r\n    public static addStyles(board: SVGElement, item: any) {\r\n        if (!item) {\r\n            return;\r\n        }\r\n        let items, i, className: any = item.className;\r\n\r\n        if (className) {\r\n            if (className.baseVal || className.baseVal === '') {\r\n                className = className.baseVal;\r\n            }\r\n        }\r\n        if (className) {\r\n            items = className.split(' ');\r\n            for (i = 0; i < items.length; i += 1) {\r\n                CSS.addStyle(board, items[i].trim());\r\n            }\r\n        }\r\n        for (i = 0; i < item.childNodes.length; i += 1) {\r\n            this.addStyles(board, item.childNodes[i]);\r\n        }\r\n    }\r\n\r\n    public static getDefs(board: SVGElement) {\r\n        let defs;\r\n        if (board.getElementsByTagName('defs').length < 1) {\r\n            defs = Util.create({tag: 'defs'});\r\n            board.insertBefore(defs, board.childNodes[0]);\r\n        } else {\r\n            defs = board.getElementsByTagName('defs')[0];\r\n        }\r\n        return defs;\r\n    }\r\n\r\n    public add(key: string, value: string) {\r\n        this.css[key] = value;\r\n    }\r\n\r\n    public get(key: string): any {\r\n        let i;\r\n        for (i in this.css) {\r\n            if (i === key) {\r\n                return this.css[key];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public getNumber(key: string) {\r\n        return parseInt((this.get(key) || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    public getSVGString(board: SVGElement) {\r\n        let str, pos, style, defs, value, filter, z;\r\n        str = '{';\r\n        for (style in this.css) {\r\n            if (!this.css.hasOwnProperty(style)) {\r\n                continue;\r\n            }\r\n            if (style === 'border') {\r\n                pos = this.css[style].indexOf(' ');\r\n                str = str + 'stroke-width: ' + this.css[style].substring(0, pos) + ';';\r\n                pos = this.css[style].indexOf(' ', pos + 1);\r\n                str = str + 'stroke:' + this.css[style].substring(pos) + ';';\r\n            } else if (style === 'background-color') {\r\n                str = str + 'fill: ' + this.css[style] + ';';\r\n            } else if (style === 'background') {\r\n                value = CSS.getSubstring(this.css[style], 'linear-gradient', '(', ')', ',');\r\n                if (value.length > 0) {\r\n                    defs = CSS.getDefs(board);\r\n                    if (value[0] === '45deg') {\r\n                        pos = 1;\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '100%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                    } else {\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '0%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                        pos = 0;\r\n                    }\r\n                    defs.appendChild(filter);\r\n                    while (pos < value.length) {\r\n                        value[pos] = value[pos].trim();\r\n                        z = value[pos].lastIndexOf(' ');\r\n                        filter.appendChild(Util.create({\r\n                            tag: 'stop',\r\n                            'offset': value[pos].substring(z + 1),\r\n                            style: {'stop-color': value[pos].substring(0, z)}\r\n                        }));\r\n                        pos += 1;\r\n                    }\r\n                    str = str + 'fill: url(#' + this.name + ');';\r\n                    continue;\r\n                }\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n                // box-shadow: inset 0 3px 4px #888;\r\n// \t\t\t\t<defs>\r\n// \t\t\t\t\t<filter id='drop-shadow'>\r\n// \t\t\t\t\t\t<feGaussianBlur in='SourceAlpha' result='blur-out' stdDeviation='2'></feGaussianBlur>\r\n// \t\t\t\t\t\t<feOffset in='blur-out' dx='2' dy='2'></feOffset>\r\n// \t\t\t\t\t\t<feBlend in='SourceGraphic' mode='normal'></feBlend>\r\n// \t\t\t\t\t</filter>\r\n// \t\t\t\t</defs>\r\n            } else {\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n            }\r\n        }\r\n        str = str + '}';\r\n        return str;\r\n    }\r\n}\r\n","import {Bridge} from './Bridge';\r\nimport Data from './Data';\r\nimport EventListener from './EventListener';\r\n\r\nexport abstract class Control {\r\n    public $owner: Control;\r\n    /**\r\n     *\r\n     */\r\n    public property: string;\r\n    public id: string;\r\n    public $view: Element;\r\n    public $viewData: Data = null;\r\n\r\n    protected $model: Data;\r\n    protected $viewListener: EventListenerOrEventListenerObject;\r\n\r\n    /**\r\n     * The properties, we want to listen to\r\n     */\r\n    // static defaultProperties: string[] = [];\r\n\r\n    // public getProperties(): string[] {\r\n    //     return this.properties;\r\n    // }\r\n\r\n    constructor() {\r\n        // e.g. this.properties.push(\"key\");\r\n        // this.properties.push(\"property\");\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data: Data = new Data();\r\n        if (oldData) {\r\n            oldData.removeListener(this);\r\n            const keys: string[] = oldData.getKeys();\r\n            for (let i = 0; i < keys.length; i++) {\r\n                let attr = keys[i];\r\n                if (this.$view) {\r\n                    if (this.$view[attr] === null) {\r\n                        continue;\r\n                    }\r\n                    data.setValue(attr, this.$view[attr]);\r\n                } else {\r\n                    data.setValue(attr, null);\r\n                }\r\n            }\r\n        }\r\n        data.addListener(this);\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     *  Set the new HTMLElement and attach listener to it.\r\n     *  Also remove Listeners from old one and return the old one, if present.\r\n     * @param element\r\n     * @returns The previous Element\r\n     */\r\n    public setView(element: Element): Element {\r\n        let oldElement: Element = null;\r\n        if (this.$view) {\r\n            oldElement = this.$view;\r\n            if (this.$viewListener) {\r\n                oldElement.removeEventListener('change', this.$viewListener);\r\n            }\r\n        }\r\n        this.$view = element;\r\n\r\n        if (this.$viewListener) {\r\n            element.addEventListener('change', this.$viewListener);\r\n        }\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n        return element;\r\n    }\r\n\r\n    public init(owner: Control, property ?: string, id ?: string): Control {\r\n        if (!this.$owner) {\r\n            this.$owner = owner;\r\n        }\r\n        if (!this.id) {\r\n            this.id = id;\r\n        }\r\n        if (!this.property) {\r\n            this.property = this.generateID(property, id);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public createEventListener(): EventListener {\r\n        return new EventListener();\r\n    }\r\n\r\n    public getRoot(): Control {\r\n        if (this.$owner) {\r\n            return this.$owner.getRoot();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return null;\r\n    }\r\n\r\n    public initControl(data: any): void {\r\n        if (this.$view === null || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (data.hasOwnProperty('prop')) {\r\n            for (let key in data.prop) {\r\n                let oldValue = this.$viewData.getValue(key);\r\n                if (this.$view) {\r\n                    this.updateElement(key, oldValue, data.prop[key]);\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        let hasRem = data.hasOwnProperty('rem');\r\n        let removed: any[] = [];\r\n        if (data.hasOwnProperty('upd')) {\r\n            for (let key in data.upd) {\r\n                let oldValue;\r\n                let newValue = data.upd[key];\r\n                let entity;\r\n                const temp = false;\r\n                if (temp) {\r\n//                if (newValue == this.getViewData().getValue(key)) {\r\n                    // new Value assertEquals old value, so we don't need to change anything..\r\n                    // delete data.rem[key];\r\n                    if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                        removed.push(data.rem[key]);\r\n                    }\r\n                    continue;\r\n                }\r\n                if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                    // if there's a rem, the oldValue from rem will be used and expected to be right..\r\n                    oldValue = data.rem[key];\r\n                    if (this.$model && this.$model.getValue(key) === oldValue) {\r\n                        entity = this.$model;\r\n//                    } else if (oldValue == this.getViewData().getValue(key)) {\r\n//                        $graphModel = this.getViewData();\r\n                    }\r\n                    delete data.rem[key];\r\n\r\n                    if (entity === null) {\r\n                        continue;\r\n                    }\r\n                }\r\n                if (entity) {\r\n                    if (!hasRem) {\r\n                        if (entity === this.$model) {\r\n                            oldValue = this.$model.getValue(key);\r\n                        } else {\r\n//                           oldValue = this.getViewData().getValue(key);\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (this.$model) {\r\n                        // try to get the oldValue directly from the $graphModel...\r\n                        oldValue = this.$model.getValue(key);\r\n                        entity = this.$model;\r\n                    }\r\n                    if (oldValue === null) {\r\n                        // if there was no data in the entity, we try to get oldValue from the $view\r\n//                        oldValue = this.getViewData().getValue(key);\r\n//                        entity = this.getViewData();\r\n                    }\r\n                }\r\n\r\n                //  || oldValue !== this.$viewData.getValue(key)\r\n                if (newValue === oldValue) {\r\n                    // no match, so update should be wrong...\r\n                    continue;\r\n                }\r\n                const viewDataOldValue = this.$viewData.getValue(key);\r\n                if (entity === this.$viewData) {\r\n\r\n                    // this.getViewData().setValue(key, newValue);\r\n                    if (this.$view) {\r\n                        this.updateElement(key, viewDataOldValue, newValue);\r\n                    }\r\n                } else {\r\n                    this.updateElement(key, viewDataOldValue, newValue);\r\n                }\r\n                this.getRoot().setValue(entity, key, newValue, oldValue);\r\n            }\r\n            // this.saveViewInData();\r\n        }\r\n        if (hasRem) {\r\n            for (let key in data.rem) {\r\n                if (removed.hasOwnProperty(key)) {\r\n                    continue;\r\n                }\r\n                let oldValue;\r\n//                    this.getViewData().getValue(key);\r\n//                if (oldValue != data.rem[key] || data.upd !== undefined && (data.upd[key] == oldValue || this.getViewData().getValue(key) == data.upd[key])) {\r\n                // if rem is invalid, or if the change is already applied, don't do anything..\r\n                //                  continue;\r\n                //            }\r\n                // delete this.$viewData.getValue(key);\r\n                // this.saveViewInData();\r\n                this.updateElement(key, null, null);\r\n                // this.$view.removeAttribute(key);\r\n                if (this.$model) {\r\n//                    this.getRoot().setValue(this.$graphModel, key, this.getViewData().getValue(key), oldValue);\r\n                }\r\n            }\r\n        }\r\n        if (this.property) {\r\n            // Add listener to Input field:\r\n            this.$view['onchange'] = ((ev: Event) => {\r\n                    this.controlChanged(ev);\r\n                }\r\n            );\r\n        }\r\n//        this.saveViewInData();\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        return null;\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n        return false;\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return new Object();\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue ?: Object): boolean {\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Is called when a object, that the Control is listening to, changes its value.\r\n     * @param entity\r\n     * @param property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        if (oldValue === newValue || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (oldValue === this.$viewData.getValue(property)) {\r\n            return;\r\n        }\r\n        // Set NewData to ViewData and Fire PC\r\n        this.$viewData.setValue(property, newValue);\r\n\r\n//\r\n//\r\n//         // if (entity == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.entity) {\r\n//                 alert(\"entity = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.entity.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.entity, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the entity is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"entity = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n// >>>>>>> addOldFunctions\r\n        if (this.$viewData) {\r\n            this.$viewData.setValue(property, newValue);\r\n        }\r\n        if (this.$model) {\r\n            this.$model.setValue(property, newValue);\r\n        }\r\n        this.updateElement(property, oldValue, newValue);\r\n    }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            // Do Nothing\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  Update GUI Element\r\n     * @param {string} property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        if (this.$view && this.$view.hasAttribute(property)) {\r\n            this.$view.setAttribute(property, newValue);\r\n        }\r\n    }\r\n\r\n//        if (oldValue == newValue) {\r\n//            return;\r\n//        }\r\n//        if (oldValue == this.$viewData.getValue(property)) {\r\n//            return;\r\n//        }\r\n//        // Set NewData to ViewData and Fire PC\r\n//        this.$viewData.setValue(property, newValue);\r\n//\r\n//\r\n//\r\n//         // if ($graphModel == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.$graphModel) {\r\n//                 alert(\"$graphModel = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.$graphModel.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.$graphModel, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the $graphModel is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"$graphModel = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n\r\n    public getId(): string {\r\n        return this.id;\r\n    }\r\n\r\n    public load(json: JSON | Object, owner ?: Control): any {\r\n        // Do Nothing\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.property || entity.hasProperty(this.property)) {\r\n                entity.addListener(this, this.property);\r\n                this.$model = entity;\r\n            }\r\n        }\r\n    }\r\n\r\n    public appendChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.appendChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].appendChild(child.$view);\r\n        }\r\n    }\r\n\r\n    public removeChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.removeChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].removeChild(child.$view);\r\n        }\r\n    }\r\n\r\n    /*\r\n     Property looks like: 't1.talk'\r\n     */\r\n    public setProperty(property: string): void {\r\n        if (!this.property) {\r\n            return;\r\n        }\r\n        let objId = property.split('.')[0];\r\n        let object = null;\r\n        if (this.$owner.hasItem(objId)) {\r\n            object = this.$owner.getItem(objId);\r\n        }\r\n\r\n        // remove listener on old object\r\n        if (this.$model) {\r\n            // this.$graphModel.removeListener(this);\r\n            this.$model.removeListener(this, this.lastProperty);\r\n        }\r\n        this.property = property;\r\n\r\n        // add listener to object..\r\n        if (object) {\r\n            object.addListener(this, this.lastProperty);\r\n            this.$model = object;\r\n            this.updateElement(this.lastProperty, this.$viewData.getValue(this.lastProperty), object.prop[this.lastProperty]);\r\n        }\r\n    }\r\n\r\n    public registerListenerOnHTMLObject(eventType: string): boolean {\r\n        return this.registerEventListener(eventType, <HTMLElement>this.$view);\r\n    }\r\n\r\n    // Normal Event HTML-Event\r\n    // Eventtype:string,\r\n    // id:string of Control\r\n    public fireEvent(evt: Event): void {\r\n        // Do Nothing\r\n    }\r\n\r\n    public isClosed(): boolean {\r\n        return this['closed'];\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        if (this.isClosed()) {\r\n            return this.$owner.getShowed();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * the id of the Data object, that contains the properties of the view\r\n     * @returns {string}\r\n     */\r\n    protected getControlDataID() {\r\n        return this.id + '_data';\r\n    }\r\n\r\n    protected generateID(property ?: string, id ?: string): string {\r\n        if (property) {\r\n            return property;\r\n        }\r\n        if (id) {\r\n            // will generate a data Object suitable for the Control..\r\n            // must be overridden, if the changeEvent shouldn't listen on value...\r\n//            return id + '.' + this.getStandardProperty();//+ \"_data\"\r\n            return id + '.' + '_data';\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected updateViewData() {\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n        const keys: string[] = this.$viewData.getKeys();\r\n        for (let i = 0; i < keys.length; i++) {\r\n            let attr = keys[i];\r\n            if (this.$view[attr] === null) {\r\n                continue;\r\n            }\r\n            this.$viewData.setValue(attr, this.$view[attr]);\r\n        }\r\n    }\r\n\r\n    protected registerEventListener(eventType: string, htmlElement: HTMLElement): boolean {\r\n        if (!htmlElement) {\r\n            return false;\r\n        }\r\n        if (htmlElement instanceof HTMLElement === false) {\r\n            return false;\r\n        }\r\n        let control = this;\r\n        let listener = (t: any) => {\r\n            t.eventType = eventType;\r\n            t.id = control.id;\r\n            control.$owner.fireEvent(t);\r\n        };\r\n        htmlElement.addEventListener(eventType, listener);\r\n        return true;\r\n    }\r\n\r\n    get lastProperty(): string {\r\n        if (!this.property) {\r\n            return '';\r\n        }\r\n        let arr: string[] = this.property.split('.');\r\n        return arr[arr.length - 1];\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\n\r\nexport default class Data {\r\n    public prop = {};\r\n    id: string;\r\n    // $listener: Control[] = [];\r\n    $listener: Object = {};\r\n\r\n    private static nullCheck(property: string): string {\r\n        if (property === undefined || property === null) {\r\n            property = '';\r\n        }\r\n        return property;\r\n    }\r\n    public getKeys(): string[] {\r\n        return Object.keys(this.prop);\r\n    }\r\n\r\n    public addProperties(values: Object) {\r\n        if (!values) {\r\n            return;\r\n        }\r\n        if (values['prop']) {\r\n            let prop = values['prop'];\r\n            for (let property in prop) {\r\n                if (prop.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (prop[property] !== null && '' !== prop[property]) {\r\n                    this.setValue(property, prop[property]);\r\n                }\r\n            }\r\n        } else {\r\n            let upd = values['upd'] || {};\r\n            let rem = values['rem'] || {};\r\n\r\n            for (let property in upd) {\r\n                if (upd.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (rem.hasOwnProperty(property) === false) {\r\n                    this.setValue(property, upd[property]);\r\n                } else {\r\n                    // if we have a rem, we wan't to check, if its a valid change (teh old value is the value in rem)\r\n                    if (this.getValue(property) === rem[property]) {\r\n                        this.setValue(property, upd[property]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getValue(attribute: string) {\r\n        return this.prop[attribute];\r\n    }\r\n\r\n    public setValue(attribute: string, newValue: any): void {\r\n        let oldValue = this.prop[attribute];\r\n        if (oldValue === newValue && newValue !== null) {\r\n            return;\r\n        }\r\n        this.prop[attribute] = newValue;\r\n        this.firePropertyChange(attribute, oldValue, newValue);\r\n    }\r\n\r\n    public addTo(attribute: string, newValue: any): boolean {\r\n        let add: boolean;\r\n        if (this.prop[attribute]) {\r\n            if (this.prop[attribute].contains(newValue) === false) {\r\n                add = true;\r\n            }\r\n        } else {\r\n            this.prop[attribute] = [];\r\n            add = true;\r\n        }\r\n        if (add) {\r\n            this.prop[attribute].push(newValue);\r\n            this.firePropertyChange(attribute, null, newValue);\r\n        }\r\n        return add;\r\n    }\r\n\r\n    public removeFrom(attribute: string, newValue: any): boolean {\r\n        if (!this.prop[attribute]) {\r\n            return true;\r\n        }\r\n        let pos: number = this.prop[attribute].indexOf(newValue);\r\n        if (pos < 0) {\r\n            return true;\r\n        }\r\n        this.prop[attribute].splice(pos, 1);\r\n        this.firePropertyChange(attribute, newValue, null);\r\n        return true;\r\n    }\r\n\r\n    public addListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(property);\r\n        if (!listeners) {\r\n            listeners = [];\r\n            this.$listener[Data.nullCheck(property)] = listeners;\r\n        }\r\n        listeners.push(control);\r\n    }\r\n\r\n    public removeListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners = this.getListeners(property);\r\n        if (listeners === null) {\r\n            return;\r\n        }\r\n        let pos = listeners.indexOf(control);\r\n        if (pos >= 0) {\r\n            listeners.splice(pos, 1);\r\n        }\r\n        if (listeners.length === 0 && Data.nullCheck(property) !== '') {\r\n            // only remove, if it's not the default listener list...\r\n            delete this.$listener[property];\r\n        }\r\n    }\r\n\r\n    public hasProperty(property: string): boolean {\r\n        return this.prop.hasOwnProperty(property);\r\n    }\r\n\r\n    public addFrom(attribute: string, oldData: Data): void {\r\n        if (oldData) {\r\n            this.setValue(attribute, oldData.getValue(attribute));\r\n        } else {\r\n            this.setValue(attribute, null);\r\n        }\r\n    }\r\n\r\n    public removeKey(key: string): any {\r\n        if (this.hasProperty(key)) {\r\n            const oldValue = this.prop[key];\r\n            delete this.prop[key];\r\n            return oldValue;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected getListeners(property: string): PropertyChangeSupport[] {\r\n        property = Data.nullCheck(property);\r\n        return this.$listener[property];\r\n    }\r\n\r\n    protected firePropertyChange(attribute: string, oldValue: Object, newValue: Object) {\r\n        attribute = Data.nullCheck(attribute);\r\n        // at first fire for the given property\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(attribute);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n        // now we need to fire the Listeners that wan't to listen to everything\r\n        listeners = this.getListeners(null);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport interface EventHandler {\r\n    canHandle(): boolean;\r\n    handle(event: Event, element: DiagramElement): boolean;\r\n    setActive(active: boolean): void;\r\n}\r\n\r\nexport class EventBus {\r\n    public static CREATE: string = 'Create';\r\n    public static EDITOR: string = 'Editor';\r\n    public static OPENPROPERTIES: string = 'openProperties';\r\n    public static RELOADPROPERTIES: string = 'reloadProperties';\r\n    public static ELEMENTMOUSEDOWN: string = 'ELEMENT:MOUSEDOWN';\r\n    public static ELEMENTMOUSEUP: string = 'ELEMENT:MOUSEUP';\r\n    public static ELEMENTMOUSELEAVE: string = 'ELEMENT:MOUSELEAVE';\r\n    public static ELEMENTMOUSEMOVE: string = 'ELEMENT:MOUSEMOVE';\r\n    public static ELEMENTMOUSEWHEEL: string = 'ELEMENT:MOUSEWHEEL';\r\n    public static ELEMENTCLICK: string = 'ELEMENT:CLICK';\r\n    public static ELEMENTDBLCLICK: string = 'ELEMENT:DBLCLICK';\r\n    public static ELEMENTDRAG: string = 'ELEMENT:DRAG';\r\n    public static ELEMENTDRAGOVER: string = 'ELEMENT:DRAGOVER';\r\n    public static ELEMENTDROP: string = 'ELEMENT:DROP';\r\n    public static ELEMENTDRAGLEAVE: string = 'ELEMENT:DRAGLEAVE';\r\n\r\n    public static EVENTS: string[] = [\r\n        EventBus.CREATE,\r\n        EventBus.EDITOR,\r\n        EventBus.OPENPROPERTIES,\r\n        EventBus.RELOADPROPERTIES,\r\n        EventBus.ELEMENTMOUSEDOWN,\r\n        EventBus.ELEMENTMOUSEUP,\r\n        EventBus.ELEMENTMOUSELEAVE,\r\n        EventBus.ELEMENTMOUSEMOVE,\r\n        EventBus.ELEMENTMOUSEWHEEL,\r\n        EventBus.ELEMENTCLICK,\r\n        EventBus.ELEMENTDRAG,\r\n        EventBus.ELEMENTDBLCLICK,\r\n        EventBus.ELEMENTDRAGOVER,\r\n        EventBus.ELEMENTDROP,\r\n        EventBus.ELEMENTDRAGLEAVE,\r\n    ];\r\n\r\n    private static handlers = {};\r\n\r\n    private static $activeHandler: string = '';\r\n\r\n    public static setActiveHandler(handler: string): void {\r\n        this.$activeHandler = handler;\r\n    }\r\n\r\n    public static isHandlerActiveOrFree(handler: string, notEmpty?: boolean): boolean {\r\n        if (notEmpty) {\r\n            return this.$activeHandler === handler;\r\n        }\r\n        return this.$activeHandler === handler || this.$activeHandler === '' || this.$activeHandler === undefined;\r\n    }\r\n\r\n    public static isAnyHandlerActive(): boolean {\r\n        return !(this.$activeHandler === '' || this.$activeHandler === undefined);\r\n    }\r\n\r\n    public static releaseActiveHandler(): void {\r\n        this.$activeHandler = '';\r\n    }\r\n\r\n    public static getActiveHandler(): string {\r\n        return this.$activeHandler;\r\n    }\r\n\r\n    static register(control: Control, view: Element) {\r\n        let events: string[];\r\n        if (typeof control['getEvents'] === 'function') {\r\n            events = control['getEvents']();\r\n        }\r\n\r\n        if (!events || !view) {\r\n            return;\r\n        }\r\n        for (let event of events) {\r\n            this.registerEvent(view, event, control);\r\n        }\r\n    }\r\n\r\n    static registerEvent(view: Element, event: string, control?: any) {\r\n        const pos: number = event.indexOf(':');\r\n        if (pos > 0) {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        } else {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        }\r\n    }\r\n\r\n    public static publish(element: DiagramElement, evt: Event) {\r\n        let handlers = EventBus.handlers[evt.type];\r\n        if (handlers) {\r\n            for (let handler of handlers) {\r\n                handler.handle(evt, element);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static subscribe(handler: EventHandler, ...eventTypes: string[]) {\r\n        for (let event of eventTypes) {\r\n            let handlers = EventBus.handlers[event];\r\n            if (handlers === null || handlers === undefined) {\r\n                handlers = [];\r\n                EventBus.handlers[event] = handlers;\r\n            }\r\n            handlers.push(handler);\r\n        }\r\n    }\r\n}\r\n","import SimpleEvent from './Event';\r\n\r\nexport default class EventListener {\r\n    private $onUpdate: Function;\r\n\r\n    get onUpdate(): Function {\r\n        return this.$onUpdate;\r\n    }\r\n\r\n    set onUpdate(value: Function) {\r\n        this.$onUpdate = value;\r\n    }\r\n\r\n    update(event: SimpleEvent) {\r\n        this.$onUpdate(event);\r\n    }\r\n}\r\n","// ################################## jsEPS ####################################################\r\nimport {SVGConverter} from './SVGConverter';\r\n\r\nexport class JSEPS {\r\n    private max: number;\r\n    private min: number;\r\n    private inverting: boolean;\r\n    private output: string[];\r\n    private font: number;\r\n\r\n    constructor(options: any) {\r\n        this.max = 0;\r\n        this.min = 999;\r\n        let hasInverting = typeof (options.inverting);\r\n        this.inverting = (options && hasInverting !== 'undefined' ? options.inverting : true);\r\n        this.output = ['%!PS-Adobe-3.0 EPSF-3.0', '1 setlinewidth'];\r\n        this.out('/FSD {findfont exch scalefont def} bind def % In the document prolog: define');\r\n        this.out('/SMS {setfont moveto show} bind def % some useful procedures');\r\n        this.out('/MS {moveto show} bind def');\r\n        this.out('/F1  10  /Helvetica  FSD % At the start of the script: set up');\r\n        this.font = 1;\r\n    }\r\n\r\n    public out(value: string) {this.output.push(value); }\r\n    public rect(x: number, y: number, width: number, height: number, style: string) {\r\n        y = y + (this.inverting ? height : 0);\r\n        if (style && style.indexOf('fill:url(#classelement);') >= 0) {\r\n            this.out('gsave 0.93 0.93 0.93 setrgbcolor newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectfill grestore');\r\n        } else {\r\n            this.out('newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectstroke');\r\n        }\r\n    }\r\n    public setFillColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public y(value: number) {this.max = Math.max(this.max, value); this.min = Math.min(this.min, value); return this.inverting ? '%y(' + value + ')' : value; }\r\n    public getType(): string {\r\n        return 'application/postscript';\r\n    }\r\n\r\n    public getData(): string {\r\n        let t, end, url, text, typ = 'application/postscript', a = document.createElement('a'), data = '', pos, i;\r\n        for (i = 0; i < this.output.length; i += 1) {\r\n            text = this.output[i];\r\n            if (this.inverting) {\r\n                while ((pos = text.indexOf('%y')) >= 0) {\r\n                    end = text.indexOf(')', pos);\r\n                    t = this.max - parseInt(text.substring(pos + 3, end), 10);\r\n                    text = text.substring(0, pos) + t + text.substring(end + 1);\r\n                }\r\n            }\r\n            data = data + text + '\\r\\n';\r\n        }\r\n        return data;\r\n    }\r\n\r\n    public setDrawColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public ellipse(cx: number, cy: number, rx: number, ry: number, colorMode: string) {/*FIXME*/}\r\n    public circle(cx: number, cy: number, r: number, colorMode: string) {/*FIXME*/}\r\n    public setTextColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public text(x: number, y: number, text: string) {this.out('(' + text.replace('&lt;', '<').replace('&gt;', '>') + ') ' + x + ' ' + this.y(y) + ' F1 SMS'); }\r\n    public lineto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' lineto'); this.out('stroke'); }\r\n    public moveto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' moveto'); }\r\n    public line(x1: number, y1: number, x2: number, y2: number) {this.out('newpath ' + x1 + ' ' + this.y(y1) + ' moveto ' + x2 + ' ' + this.y(y2) + ' lineto stroke'); }\r\n    public setLineWidth(value: string) {this.out(value + ' setlinewidth'); }\r\n    public setFont(value: string) {this.out('/F' + (this.font += 1) + ' 10 /' + value + ' FSD'); }\r\n}\r\n","import { Graph } from './elements/Graph';\r\n\r\n/*const buttons = {\r\n    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    clazz: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n};\r\n*/\r\nexport default class Palette {\r\n\r\n    private graph: Graph;\r\n    private palette: Element;\r\n    private root: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n        let div = document.createElement('div');\r\n        div.className = 'palette';\r\n        div.id = 'palette';\r\n        this.root = div;\r\n        this.palette = div;\r\n        for (let key in graph.nodeFactory) {\r\n            let element = graph.nodeFactory[key];\r\n            let control = new element();\r\n            let icon = control.getToolBarIcon();\r\n            if (icon) {\r\n                let button = <HTMLButtonElement>document.createElement('button');\r\n                button.className = 'add' + key + 'Btn';\r\n                button.innerHTML = icon.outerHTML;\r\n                button.onclick = e => {\r\n                    let nextFreePosition = this.graph.getNextFreePosition();\r\n                    // let node = this.graph.addElementWithValues(graph.nodeFactory[key], {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    let node = this.graph.addElementWithValues(key, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    this.graph.drawElement(node);\r\n                };\r\n                this.palette.appendChild(button);\r\n            }\r\n        }\r\n        // this.graph.nodeFactory\r\n//        this.addButtons();\r\n    }\r\n\r\n    public show() {\r\n        document.body.appendChild(this.root);\r\n    }\r\n\r\n    private addButtons() {\r\n        /*for (let btn in buttons) {\r\n            let button = <HTMLButtonElement>document.createElement('button');\r\n            button.className = 'add' + btn + 'Btn';\r\n            button.innerHTML = buttons[btn];\r\n            button.onclick = e => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let node = this.graph.addElementWithValues(btn, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                this.graph.drawElement(node);\r\n            };\r\n            this.palette.appendChild(button);\r\n        }*/\r\n    }\r\n}\r\n","import {Graph} from './elements/Graph';\r\nimport * as edges from './elements/edges';\r\nimport {EventBus, EventHandler} from './EventBus';\r\nimport {DiagramElement} from './elements/BaseElements';\r\nimport {Util} from './util';\r\n\r\nexport class PanelGroup implements EventHandler {\r\n    private graph: Graph;\r\n    private selectedElement: DiagramElement;\r\n    private clearPanel: Panel;\r\n    private generatePanel: Panel;\r\n    private propertiesMasterPanel: HTMLDivElement;\r\n    private propertiesContent: HTMLDivElement;\r\n    private propHeaderLabel: HTMLDivElement;\r\n    private propHeaderButton: HTMLButtonElement;\r\n    private selectedPanel: Panel;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.clearPanel = new ClearPanel(this);\r\n        this.generatePanel = new GeneratePanel(this);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        this.handleOpenProperties(event, element);\r\n\r\n        if (event.type === EventBus.RELOADPROPERTIES\r\n            && this.selectedElement && element.id === this.selectedElement.id) {\r\n            this.handleEvent(event, element);\r\n        }\r\n\r\n        // the same element was clicked. do nothing\r\n        if (this.selectedElement && this.selectedElement.id === element.id) {\r\n            return true;\r\n        }\r\n        if (element.id === 'RootElement') {\r\n            this.setActivePanel(this.clearPanel);\r\n        }\r\n        if (element.id === 'GenerateProp') {\r\n            this.setActivePanel(this.generatePanel);\r\n        }\r\n        this.selectedElement = element;\r\n\r\n        return true;\r\n    }\r\n\r\n    public getGraph(): Graph {\r\n        return this.graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(PanelGroup.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(PanelGroup.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n     public handleEvent(event: any, element: any) {\r\n        // DO NOTHING\r\n    }\r\n\r\n    public show() {\r\n        // main div to display any properties, class, edge, etc.\r\n        this.propertiesMasterPanel = document.createElement('div');\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n\r\n        this.propertiesContent = document.createElement('div');\r\n        this.propertiesContent.className = 'properties-hidden';\r\n\r\n        this.propHeaderLabel = document.createElement('div');\r\n        this.propHeaderLabel.style.display = 'inherit';\r\n        this.propHeaderLabel.style.cursor = 'pointer';\r\n        this.propHeaderLabel.onclick = e => this.toogleProperties(e);\r\n\r\n        // button to display and hide the properties of e.g. a class\r\n        this.propHeaderButton = document.createElement('button');\r\n        this.propHeaderButton.className = 'btnHideProp';\r\n        this.propHeaderButton.style.cssFloat = 'right';\r\n        this.propHeaderButton.onclick = e => this.toogleProperties(e);\r\n\r\n        let propertiesHeader = document.createElement('div');\r\n        propertiesHeader.style.display = 'inline';\r\n        propertiesHeader.appendChild(this.propHeaderLabel);\r\n        propertiesHeader.appendChild(this.propHeaderButton);\r\n\r\n        this.propertiesMasterPanel.appendChild(propertiesHeader);\r\n        this.propertiesMasterPanel.appendChild(this.propertiesContent);\r\n        document.body.appendChild(this.propertiesMasterPanel);\r\n\r\n        this.setActivePanel(this.clearPanel);\r\n    }\r\n\r\n    public setActivePanel(panel: Panel) {\r\n        this.selectedPanel = panel;\r\n        this.propHeaderLabel.innerHTML = panel.getHeaderText();\r\n        if (this.propertiesContent) {\r\n            while (this.propertiesContent.hasChildNodes()) {\r\n                this.propertiesContent.removeChild(this.propertiesContent.childNodes[0]);\r\n            }\r\n        }\r\n        panel.show();\r\n\r\n        panel.showFirstTab();\r\n        if (panel !== this.clearPanel) {\r\n            this.showProperties(null);\r\n        } else {\r\n            this.hideProperties(null);\r\n        }\r\n    }\r\n\r\n    public getProperiesContent(): HTMLDivElement {\r\n        return this.propertiesContent;\r\n    }\r\n\r\n    private handleOpenProperties(event: Event, element: DiagramElement) {\r\n        if (event.type === 'dblclick') {\r\n            this.showProperties(event);\r\n        }\r\n    }\r\n\r\n    private showProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Show\r\n        this.propHeaderButton.innerHTML = '&#8897;';\r\n        this.propHeaderButton.title = 'Hide properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel';\r\n        this.propertiesContent.className = 'properties';\r\n    }\r\n\r\n    private toogleProperties(evt: Event): void {\r\n        if (this.propHeaderButton.title === 'Show properties') {\r\n            this.showProperties(evt);\r\n        } else {\r\n            this.hideProperties(evt);\r\n        }\r\n    }\r\n\r\n    private hideProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Hide\r\n        this.propHeaderButton.innerHTML = '&#8896;';\r\n        this.propHeaderButton.title = 'Show properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n        this.propertiesContent.className = 'properties-hidden';\r\n    }\r\n}\r\n\r\nexport abstract class Panel {\r\n    protected divPropertiesPanel: HTMLDivElement;\r\n    protected divPropertiesTabbedPanel: HTMLDivElement;\r\n    protected element: any;\r\n    protected group: PanelGroup;\r\n    private panelItem: PanelItem[] = [];\r\n\r\n    constructor(group: PanelGroup, element: any) {\r\n        // get the properties content panel\r\n        this.divPropertiesPanel = document.createElement('div');\r\n        this.element = element;\r\n        this.group = group;\r\n\r\n        this.divPropertiesTabbedPanel = document.createElement('div');\r\n        this.divPropertiesTabbedPanel.className = 'tabbedpane';\r\n\r\n        // add tabbed panel\r\n        this.divPropertiesPanel.appendChild(this.divPropertiesTabbedPanel);\r\n    }\r\n\r\n    public show(): void {\r\n        let propertiesContent: HTMLDivElement = this.group.getProperiesContent();\r\n        if (this.panelItem.length > 1) {\r\n            propertiesContent.appendChild(this.getPropertiesTabbedPanel());\r\n        }\r\n\r\n        propertiesContent.appendChild(this.getPropertiesPanel());\r\n    }\r\n\r\n    public getPropertiesTabbedPanel(): HTMLDivElement {\r\n        return this.divPropertiesTabbedPanel;\r\n    }\r\n\r\n    public getPropertiesPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return '';\r\n    }\r\n\r\n    public showFirstTab(): void {\r\n        if (this.panelItem.length > 0) {\r\n            this.openTab(this.panelItem[0]);\r\n        }\r\n    }\r\n\r\n    protected createTabElement(tabText: string, tabValue: string, item: PanelItem): PanelItem {\r\n        let tabElementBtn = document.createElement('button');\r\n        tabElementBtn.className = 'tablinks';\r\n        tabElementBtn.innerText = tabText;\r\n        tabElementBtn.value = tabValue;\r\n\r\n        if (item === null) {\r\n            item = new PanelItem(this);\r\n        }\r\n        item.withButton(tabElementBtn);\r\n\r\n        tabElementBtn.onclick = () => this.openTab(item);\r\n        this.divPropertiesTabbedPanel.appendChild(tabElementBtn);\r\n        this.panelItem.push(item);\r\n        return item;\r\n    }\r\n\r\n    protected openTab(panelItem: PanelItem): void {\r\n        for (let key in this.panelItem) {\r\n            let child = this.panelItem[key];\r\n            if (child !== panelItem) {\r\n                 child.deactive();\r\n            }\r\n        }\r\n        panelItem.active();\r\n        // hide other tabcontent\r\n        if (this.divPropertiesPanel) {\r\n            while (this.divPropertiesPanel.hasChildNodes()) {\r\n                this.divPropertiesPanel.removeChild(this.divPropertiesPanel.childNodes[0]);\r\n            }\r\n        }\r\n\r\n        // ADD\r\n        if (panelItem.getContent()) {\r\n            this.divPropertiesPanel.appendChild(panelItem.getContent());\r\n        }\r\n    }\r\n}\r\n\r\nexport class GeneratePanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n\r\n        let item: PanelItem = this.createTabElement('General', 'General', null);\r\n\r\n        // Workspace and generate code stuff\r\n        let inputGenerateWorkspace: HTMLInputElement =  <HTMLInputElement> Util.createHTML({tag: 'input', id: 'workspace', type: 'text', placeholder: 'Type your Folder for generated code...', value: 'src/main/java', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Folder:', inputGenerateWorkspace);\r\n\r\n        let inputGeneratePackage: HTMLInputElement = <HTMLInputElement> Util.createHTML({tag: 'input', id: 'package', type: 'text', placeholder: 'Type your workspace for generated code...', value: '', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Package:', inputGeneratePackage);\r\n\r\n        let options = document.createElement('div');\r\n        options.style.textAlign = 'center';\r\n        options.style.margin = '3';\r\n        options.style.padding = '5';\r\n\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(options);\r\n\r\n        options.style.borderStyle = 'groove';\r\n        options.style.borderRadius = '10px';\r\n\r\n        let btnGenerate = document.createElement('button');\r\n        btnGenerate.textContent = 'Generate';\r\n        btnGenerate.title = 'Generate code into your workspace';\r\n        btnGenerate.className = 'OptionElement';\r\n\r\n        let that = this;\r\n        btnGenerate.onclick = () => {\r\n            let workspace = inputGeneratePackage.value;\r\n            if (workspace.length === 0) {\r\n                alert('No workspace set.\\nEnter first your workspace');\r\n                inputGeneratePackage.focus();\r\n                return;\r\n            }\r\n            that.group.getGraph().generate(workspace, inputGenerateWorkspace.value);\r\n        };\r\n        options.appendChild(btnGenerate);\r\n        options.appendChild(document.createElement('hr'));\r\n        options.appendChild(document.createElement('br'));\r\n\r\n        let btnAutoLayout = Util.createHTML({tag: 'button', className: 'OptionElement', value: 'Auto Layout', style: {marginRight: '10px'}, onclick: () => {\r\n                that.group.getGraph().layout();\r\n            }});\r\n\r\n        options.appendChild(btnAutoLayout);\r\n\r\n        // delete all nodes\r\n        let btnDeleteAll = document.createElement('button');\r\n        btnDeleteAll.className = 'OptionElement';\r\n        btnDeleteAll.textContent = 'Delete All';\r\n        btnDeleteAll.title = 'Delete all nodes from diagram';\r\n\r\n        btnDeleteAll.onclick = () => {\r\n            let confirmDelete = confirm('All classes will be deleted!');\r\n            if (!confirmDelete) {\r\n                return;\r\n            }\r\n            that.group.getGraph().$graphModel.removeAllElements();\r\n        };\r\n        btnDeleteAll.style.marginRight = '10px';\r\n        options.appendChild(btnDeleteAll);\r\n\r\n        // export stuff\r\n        let exportTypes: string[] = ['Export', 'HTML', 'JSON', 'PDF', 'PNG', 'SVG'];\r\n        let selectExport = document.createElement('select');\r\n\r\n        exportTypes.forEach(type => {\r\n            if (!(!window['jsPDF'] && type === 'PDF')) {\r\n                let option = document.createElement('option');\r\n                option.value = type;\r\n                option.textContent = type;\r\n                selectExport.appendChild(option);\r\n            }\r\n        });\r\n\r\n        selectExport.onchange = (evt) => {\r\n            let selectedExportType = selectExport.options[selectExport.selectedIndex].value;\r\n            selectExport.selectedIndex = 0;\r\n            that.group.getGraph().saveAs(selectedExportType);\r\n        };\r\n        selectExport.className = 'OptionElement';\r\n        options.appendChild(selectExport);\r\n        options.appendChild(document.createElement('br'));\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Properties';\r\n    }\r\n\r\n}\r\n\r\nexport class ClearPanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Select any element to see its properties';\r\n    }\r\n}\r\n\r\nexport class PanelItem {\r\n    protected panel: Panel;\r\n    protected label: string;\r\n    protected button: HTMLButtonElement;\r\n    protected content: HTMLDivElement = <HTMLDivElement>Util.create({tag: 'div', className: 'tabContent'});\r\n\r\n    constructor(panel: Panel, label?: string) {\r\n        this.panel = panel;\r\n        this.label = label;\r\n    }\r\n\r\n    public active(): void {\r\n        if (this.getButton()) {\r\n            this.getButton().className += ' active';\r\n        }\r\n    }\r\n\r\n    public deactive(): void {\r\n        if (this.getButton()) {\r\n            Util.removeClass(this.getButton(), 'active');\r\n        }\r\n    }\r\n\r\n    public withButton(button: HTMLButtonElement): PanelItem {\r\n        this.button = button;\r\n        return this;\r\n    }\r\n\r\n    public withContent(element: HTMLElement): PanelItem {\r\n        this.content.appendChild(element);\r\n        return this;\r\n    }\r\n\r\n    public withInput(labelText: string, element: HTMLElement): PanelItem {\r\n        let group: HTMLDivElement = <HTMLDivElement> Util.createHTML({tag: 'div'});\r\n        let label = Util.createHTML({tag: 'label', for: element.id, value: labelText});\r\n        group.appendChild(label);\r\n        group.appendChild(element);\r\n\r\n        this.content.appendChild(group);\r\n        return this;\r\n    }\r\n\r\n    public getButton(): HTMLButtonElement {\r\n        return this.button;\r\n    }\r\n\r\n    public getContent(): HTMLDivElement {\r\n        return this.content;\r\n    }\r\n\r\n   public getHeader(): string {\r\n        return this.label;\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\nimport Data from './Data';\r\n\r\nexport class PropertyBinder implements PropertyChangeSupport {\r\n    private propertyClass1: string;\r\n    private propertyClass2: string;\r\n    private data1: Data;\r\n    private data2: Data;\r\n    // works like a lock\r\n    private applyingChange: boolean = false;\r\n\r\n    constructor(data1: Data, data2: Data, propertyClass1: string, propertyClass2: string) {\r\n        this.data1 = data1;\r\n        this.data2 = data2;\r\n        this.propertyClass1 = propertyClass1;\r\n        this.propertyClass2 = propertyClass2;\r\n    }\r\n    static bind(data1: Data, data2: Data, property1: string, property2: string) {\r\n        if (!data1 || !data2 || !property1) {\r\n            console.error('NullValue!!');\r\n            return null;\r\n        }\r\n        const propertyBinder = new PropertyBinder(data1, data2, property1, property2);\r\n        propertyBinder.bind();\r\n        return propertyBinder;\r\n    }\r\n\r\n    propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        if (!this.applyingChange) {\r\n            this.applyingChange = true;\r\n            if (entity === this.data1) {\r\n                // fire to data2\r\n                this.data2.setValue(this.propertyClass2, newValue);\r\n            } else if (entity === this.data2) {\r\n                // fire to data1\r\n                this.data1.setValue(this.propertyClass1, newValue);\r\n            }\r\n            this.applyingChange = false;\r\n        }\r\n    }\r\n\r\n    protected bind() {\r\n        // public addListener(control: Control, property?: string)\r\n        // todo: set value immediately\r\n        this.data1.setValue(this.propertyClass1, this.data2.getValue(this.propertyClass2));\r\n\r\n        this.data1.addListener(this, this.propertyClass1);\r\n        this.data2.addListener(this, this.propertyClass2);\r\n    }\r\n\r\n    protected unbind() {\r\n        // public addListener(control: Control, property?: string)\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n    }\r\n}\r\n","// ################################## RGBColor ####################################################\r\nexport class RGBColor {\r\n    public  ok: boolean;\r\n    public r: number;\r\n    public g: number;\r\n    public b: number;\r\n\r\n    constructor(value: string) {\r\n        this.ok = false;\r\n        if (value === 'none') {\r\n            return;\r\n        }\r\n        let computedColor, div = document.createElement('div');\r\n        div.style.backgroundColor = value;\r\n        document.body.appendChild(div);\r\n        computedColor = window.getComputedStyle(div).backgroundColor;\r\n        // cleanup temporary div.\r\n        document.body.removeChild(div);\r\n        this.convert(computedColor);\r\n    }\r\n    public convert(value: any) {\r\n        let values, regex = /rgb *\\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\\)/;\r\n        values = regex.exec(value);\r\n        this.r = parseInt(values[1], 10);\r\n        this.g = parseInt(values[2], 10);\r\n        this.b = parseInt(values[3], 10);\r\n        this.ok = true;\r\n    }\r\n\r\n    public toRGB(): string {return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; }\r\n    public toHex(): string {\r\n        return '#' + (this.r + 0x10000).toString(16).substring(3).toUpperCase() + (this.g + 0x10000).toString(16).substring(3).toUpperCase() + (this.b + 0x10000).toString(16).substring(3).toUpperCase();\r\n    }\r\n}\r\n","/*\r\n NetworkParser\r\n Copyright (c) 2011 - 2014, Stefan Lindel\r\n All rights reserved.\r\n\r\n Licensed under the EUPL, Version 1.1 or (as soon they\r\n will be approved by the European Commission) subsequent\r\n versions of the EUPL (the \"Licence\");\r\n You may not use this work except in compliance with the Licence.\r\n You may obtain a copy of the Licence at:\r\n\r\n http://ec.europa.eu/idabc/eupl5\r\n\r\n Unless required by applicable law or agreed to in\r\n writing, software distributed under the Licence is\r\n distributed on an \"AS IS\" basis,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\r\n express or implied.\r\n See the Licence for the specific language governing\r\n permissions and limitations under the Licence.\r\n*/\r\nimport {RGBColor} from './RGBColor';\r\nimport {JSEPS} from \"./JSEPS\";\r\n\r\nconst epsSvgAttr = {\r\n    // allowed attributes. all others are removed from the preview.\r\n    g: ['stroke', 'fill', 'stroke-width'],\r\n    line: ['x1', 'y1', 'x2', 'y2', 'stroke', 'stroke-width'],\r\n    rect: ['x', 'y', 'width', 'height', 'stroke', 'fill', 'stroke-width'],\r\n    ellipse: ['cx', 'cy', 'rx', 'ry', 'stroke', 'fill', 'stroke-width'],\r\n    circle: ['cx', 'cy', 'r', 'stroke', 'fill', 'stroke-width'],\r\n    text: ['x', 'y', 'font-size', 'font-family', 'text-anchor', 'font-weight', 'font-style', 'fill'],\r\n    path: ['']\r\n};\r\nexport class SVGConverter {\r\n    private k: number;\r\n    private remove: boolean;\r\n    private target: any;\r\n\r\n    constructor(element: any, target: any, options: any) {\r\n        this.k = 1.0;\r\n        let hasScale = typeof (options.scale), hasRemoveInvalid = typeof (options.removeInvalid);\r\n        this.k = (options && hasScale !== 'undefined' ? options.scale : 1.0);\r\n        this.remove = (options && hasRemoveInvalid !== 'undefined' ? options.removeInvalid : false);\r\n        this.target = target;\r\n        this.parse(element);\r\n    }\r\n\r\n    public parse(element: any) {\r\n        let el, i, n, colorMode, hasFillColor, fillRGB, fillColor, strokeColor, strokeRGB, fontType, pdfFontSize, x, y,\r\n            box, xOffset;\r\n        if (!element) {\r\n            return;\r\n        }\r\n        if (typeof element === 'string') {\r\n            el = document.createElement('div');\r\n            el.innerHTML = element;\r\n            element = el.childNodes[0];\r\n        }\r\n        for (i = 0; i < element.children.length; i += 1) {\r\n            n = element.children[i];\r\n            colorMode = null;\r\n            hasFillColor = false;\r\n            if ('g,line,rect,ellipse,circle,text'.indexOf(n.tagName) >= 0) {\r\n                fillColor = n.getAttribute('fill');\r\n                if (fillColor) {\r\n                    fillRGB = new RGBColor(fillColor);\r\n                    if (fillRGB.ok) {\r\n                        hasFillColor = true;\r\n                        colorMode = 'F';\r\n                    }\r\n                }\r\n            }\r\n            if ('g,line,rect,ellipse,circle'.indexOf(n.tagName) >= 0) {\r\n                if (hasFillColor) {\r\n                    this.target.setFillColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                }\r\n                strokeColor = n.getAttribute('stroke');\r\n                if (n.hasAttribute('stroke-width')) {\r\n                    this.target.setLineWidth(this.attr(n, 'stroke-width'));\r\n                }\r\n                if (strokeColor) {\r\n                    strokeRGB = new RGBColor(strokeColor);\r\n                    if (strokeRGB.ok) {\r\n                        this.target.setDrawColor(strokeRGB.r, strokeRGB.g, strokeRGB.b);\r\n                        if (colorMode === 'F') {\r\n                            colorMode = 'FD';\r\n                        } else if (!hasFillColor) {\r\n                            colorMode = 'S';\r\n                        }\r\n                    } else {\r\n                        colorMode = null;\r\n                    }\r\n                }\r\n            }\r\n            // console.log(\"write \"+n.tagName);\r\n            switch (n.tagName.toLowerCase()) {\r\n                case 'svg':\r\n                case 'a':\r\n                case 'g':\r\n                    this.parse(n);\r\n                    break;\r\n                case 'line':\r\n                    this.target.line(this.attr(n, 'x1'), this.attr(n, 'y1'), this.attr(n, 'x2'), this.attr(n, 'y2'));\r\n                    break;\r\n                case 'rect':\r\n                    this.target.rect(this.attr(n, 'x'), this.attr(n, 'y'), this.attr(n, 'width'), this.attr(n, 'height'), n.getAttribute('style'));\r\n                    break;\r\n                case 'ellipse':\r\n                    this.target.ellipse(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'rx'), this.attr(n, 'ry'), colorMode);\r\n                    break;\r\n                case 'circle':\r\n                    this.target.circle(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'r'), colorMode);\r\n                    break;\r\n                case 'text':\r\n                    if (n.hasAttribute('font-family')) {\r\n                        switch (n.getAttribute('font-family').toLowerCase()) {\r\n                            case 'serif':\r\n                                this.target.setFont('times');\r\n                                break;\r\n                            case 'monospace':\r\n                                this.target.setFont('courier');\r\n                                break;\r\n                            default:\r\n                                n.getAttribute('font-family', 'sans-serif');\r\n                                this.target.setFont('Helvetica');\r\n                        }\r\n                    }\r\n                    if (hasFillColor) {\r\n                        this.target.setTextColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                    }\r\n                    if (this.target instanceof JSEPS) {\r\n                        this.target.text(this.attr(n, 'x'), this.attr(n, 'y'), n.innerHTML);\r\n                        break;\r\n                    }\r\n                    fontType = '';\r\n                    if (n.hasAttribute('font-weight')) {\r\n                        if (n.getAttribute('font-weight') === 'bold') {\r\n                            fontType = 'bold';\r\n                        }\r\n                    }\r\n                    if (n.hasAttribute('font-style')) {\r\n                        if (n.getAttribute('font-style') === 'italic') {\r\n                            fontType += 'italic';\r\n                        }\r\n                    }\r\n                    this.target.setFontType(fontType);\r\n                    pdfFontSize = 16;\r\n                    if (n.hasAttribute('font-size')) {\r\n                        pdfFontSize = parseInt(n.getAttribute('font-size'), 10);\r\n                    }\r\n                    box = n.getBBox();\r\n                    // FIXME: use more accurate positioning!!\r\n                    x = this.attr(n, 'x');\r\n                    y = this.attr(n, 'y');\r\n                    xOffset = 0;\r\n                    if (n.hasAttribute('text-anchor')) {\r\n                        switch (n.getAttribute('text-anchor')) {\r\n                            case 'end':\r\n                                xOffset = box.width;\r\n                                break;\r\n                            case 'middle':\r\n                                xOffset = box.width / 2;\r\n                                break;\r\n                            case 'start':\r\n                                break;\r\n                            case 'default':\r\n                                n.getAttribute('text-anchor', 'start');\r\n                                break;\r\n                        }\r\n                        x = x - (xOffset * this.k);\r\n                    }\r\n                    this.target.setFontSize(pdfFontSize).text(x, y, n.innerHTML);\r\n                    break;\r\n                default:\r\n                    if (this.remove) {\r\n                        console.log('cant translate to target:', n);\r\n                        element.removeChild(n);\r\n                        i -= 1;\r\n                    }\r\n            }\r\n        }\r\n    }\r\n\r\n    public attr(node: any, name: string) {\r\n        return this.k * parseInt(node.getAttribute(name), 10);\r\n    }\r\n}\r\n","import {Control} from './Control';\r\n\r\nexport class ScrumBoard extends Control {\r\n    public static cards = [0, 0.5, 1, 2, 3, 5, 8, 13, 20, 40, 100, '?', 'Coffee'];\r\n    private $selected: HTMLDivElement;\r\n    private $board: HTMLDivElement;\r\n\r\n    constructor() {\r\n        super();\r\n        this.redraw();\r\n    }\r\n\r\n    public redraw(): void {\r\n        if (this.$board) {\r\n            while (this.$board.children.length > 0 ) {\r\n                this.$board.removeChild(this.$board.children[0]);\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('div');\r\n            this.$selected = document.createElement('div');\r\n            this.$board = document.createElement('div');\r\n            this.$view.appendChild(this.$board);\r\n            this.$view.appendChild(this.$selected);\r\n        }\r\n        this.$view.className = 'ScrumBoard';\r\n        for ( let i = 0; i < ScrumBoard.cards.length; i++) {\r\n            let card = document.createElement('div');\r\n            card.className = 'ScrumCard';\r\n            card.innerHTML = <string>ScrumBoard.cards[i];\r\n            card['pokervalue'] = <string>ScrumBoard.cards[i];\r\n            card.onclick = e => {\r\n                this.onClick(<HTMLDivElement>e.target);\r\n            };\r\n            this.$board.appendChild(card);\r\n        }\r\n    }\r\n\r\n    public getSVG() {\r\n        this.redraw();\r\n        return this.$view;\r\n    }\r\n\r\n    public onClick(target: HTMLDivElement): void {\r\n        console.log(target['pokervalue']);\r\n\r\n        while (this.$selected.children.length > 0 ) {\r\n            this.$selected.removeChild(this.$selected.children[0]);\r\n        }\r\n        let card = document.createElement('div');\r\n        card.className = 'ScrumCard';\r\n        card['pokervalue'] = target['pokervalue'];\r\n        card.onclick = e => {\r\n            this.onShow(<HTMLDivElement>e.target);\r\n        };\r\n        this.$selected.appendChild(card);\r\n        this.$board['style']['display'] = 'none';\r\n    }\r\n\r\n    public onShow(target: HTMLDivElement): void {\r\n        target.innerHTML = target['pokervalue'];\r\n    }\r\n}\r\n","import {Graph} from './main';\r\nimport {SymbolLibary} from './elements/nodes/Symbol';\r\nimport {EventBus} from './EventBus';\r\n\r\nexport class Toolbar {\r\n\r\n    private graph: Graph;\r\n    private mainDiv: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public show(): void {\r\n        if (this.mainDiv) {\r\n            return;\r\n        }\r\n\r\n        this.mainDiv = document.createElement('div');\r\n        this.mainDiv.className = 'toolbar';\r\n\r\n        let h1Logo = document.createElement('h1');\r\n        h1Logo.className = 'logo';\r\n        h1Logo.textContent = 'DiagramJS';\r\n\r\n        let node = {type: 'Hamburger', property: 'HTML', width: 24, height: 24, id: 'GenerateProp'};\r\n        let hamburger = SymbolLibary.draw( node);\r\n        EventBus.registerEvent(hamburger, 'click', node);\r\n        this.mainDiv.appendChild(hamburger);\r\n\r\n        this.mainDiv.appendChild(h1Logo);\r\n        document.body.appendChild(this.mainDiv);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 06.03.2017.\r\n */\r\nimport Data from './Data';\r\n\r\n// export default class Data {\r\n//    public values = {};\r\n//    id: string;\r\n//    $listener: Control[] = [];\r\n//    property: string;\r\nexport namespace UML {\r\n    export class Clazz extends Data {\r\n        public static NAME: string = 'name';\r\n        public static ATTRIBUTES: string = 'attributes';\r\n        public static METHODS: string = 'methods';\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Clazz';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n\r\n        public getAttributes() {\r\n            return this.prop[Clazz.ATTRIBUTES];\r\n        }\r\n\r\n        public addToAttributes(newValue: string) {\r\n            this.addTo(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n\r\n        public removeFromAttributes(newValue: string) {\r\n            this.removeFrom(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n    }\r\n\r\n    export class Attribute extends Data {\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Attribute';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n    }\r\n\r\n    export class Methods extends Data {\r\n\r\n    }\r\n}\r\n\r\nwindow['UML'] = UML;\r\n","import {Control} from './Control';\r\n\r\nexport class VirtualKeyBoard extends Control {\r\n    constructor(data: any) {\r\n        super();\r\n        if (!data) {\r\n            data = this.getDefault();\r\n        }\r\n        let board = document.createElement('div');\r\n        this.$viewData = data;\r\n\r\n        for (let type in data) {\r\n            if (type === 'normal') {\r\n                for (let line in data[type]) {\r\n                    let lineBoard = document.createElement('div');\r\n                    lineBoard.className = 'vkLine';\r\n                    for (let key in data[type][line]) {\r\n                        let btn: HTMLButtonElement = document.createElement('button');\r\n                        let keyTag = data[type][line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                        btn.ontouchend = () => {this.action(btn); };\r\n                        btn.onclick = () => {this.action(btn); };\r\n                        lineBoard.appendChild(btn);\r\n                    }\r\n                    board.appendChild(lineBoard);\r\n                }\r\n            }\r\n        }\r\n        this.$view = board;\r\n    }\r\n\r\n    public action(btn: HTMLButtonElement) {\r\n        if (btn['key'] === '{Shift}') {\r\n            if ( btn.className === 'vkbuttonAction') {\r\n                let keys = this.$viewData['normal'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                    }\r\n                }\r\n            } else if ( btn.className === 'vkbutton') {\r\n                let keys = this.$viewData['shift'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbuttonAction');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        alert(btn);\r\n    }\r\n\r\n    public getDefault(): any {\r\n        let format = {\r\n            normal: [\r\n                ['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '?', '´', '{Bksp}'],\r\n                ['{Tab}', 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+'],\r\n                ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '#', '{enter}'],\r\n                ['{Shift}', '<', 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n// '{left}', '{up}', '{down}','{right}', '{Cancel}']\r\n            ],\r\n            shift: [\r\n                ['°', '!', '\"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '`', '{Bksp}'],\r\n                ['{Tab}', 'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', 'O', 'P', 'Ü', '*'],\r\n                ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', '\\'', '{enter}'],\r\n                ['{Shift}', '>', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n            ]\r\n        };\r\n        return format;\r\n    }\r\n\r\n    public getBoard() {\r\n        return this.$view;\r\n    }\r\n\r\n    private setButtonValue(keyTag: string, btn: HTMLButtonElement, shiftClass: string) {\r\n        btn.className = 'vkbutton';\r\n        btn['key'] = keyTag;\r\n        btn['type'] = 'normal';\r\n        if (keyTag.substring(0, 1) === '{') {\r\n            if (keyTag === '{Bksp}') {\r\n                btn.innerHTML = 'Bksp';\r\n            } else if (keyTag === '{Tab}') {\r\n                btn.innerHTML = '&#8677; Tab';\r\n            } else if (keyTag === '{enter}') {\r\n                btn.innerHTML = 'enter';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Shift}') {\r\n                btn.innerHTML = 'Shift';\r\n                btn.className = shiftClass;\r\n            } else if (keyTag === '{Accept}') {\r\n                btn.innerHTML = 'Accept';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Alt}') {\r\n                btn.innerHTML = 'Alt';\r\n            } else if (keyTag === '{Space}') {\r\n                btn.innerHTML = '&nbsp;';\r\n                btn.className = 'vkbuttonSpace';\r\n            } else if (keyTag === '{left}') {\r\n                btn.innerHTML = '&#8592';\r\n            } else if (keyTag === '{right}') {\r\n                btn.innerHTML = '&#8594;';\r\n            } else if (keyTag === '{up}') {\r\n                btn.innerHTML = '&#8593;';\r\n            } else if (keyTag === '{down}') {\r\n                btn.innerHTML = '&#8595;';\r\n            } else if (keyTag === '{Cancel}') {\r\n                btn.innerHTML = 'Cancel';\r\n                btn.className = 'vkbuttonAction';\r\n            }\r\n        } else {\r\n            btn.innerHTML = keyTag;\r\n        }\r\n    }\r\n}\r\n","import {Adapter} from '../Adapter';\r\n\r\nexport class JavaAdapter extends Adapter {\r\n    constructor() {\r\n        super();\r\n        this.id = 'JavaAdapter';\r\n    }\r\n    update(evt: Object): boolean {\r\n        if (this.isActive()) {\r\n            window['JavaBridge'].executeChange(evt);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public isActive(): boolean {\r\n        return window['JavaBridge'];\r\n    }\r\n}\r\n","export * from './JavaAdapter';\r\n","import { Util } from '../util';\r\nimport { Control } from '../Control';\r\n\r\nexport interface Size {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\ninterface GraphElement {\r\n    getSize(): Point;\r\n\r\n    getPos(): Point;\r\n\r\n    getCenter(): Point;\r\n\r\n    getSVG(): Element;\r\n\r\n    getCanvas(): Element;\r\n\r\n    getEvents(): string[];\r\n\r\n    withPos(x: number, y: number): GraphElement;\r\n\r\n    load(data: any): any;\r\n\r\n    getToolBarIcon(): Element;\r\n\r\n    loadProperties(properties: any): void;\r\n}\r\n\r\nexport abstract class DiagramElement extends Control implements GraphElement {\r\n\r\n    protected $isDraggable: boolean = true;\r\n    protected $labelHeight = 25;\r\n    protected $labelFontSize = 14;\r\n    private $pos: Point = new Point();\r\n    private $size: Point = new Point();\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getPos(): Point {\r\n        return this.$pos;\r\n    }\r\n\r\n    public getSize(): Point {\r\n        return this.$size;\r\n    }\r\n\r\n    public getCenter(): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        return new Point(pos.x + size.x / 2, pos.y + size.y / 2);\r\n    }\r\n\r\n    public getCenterPosition(p: string): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let offset = this['$' + p];\r\n        let center = this.getCenter();\r\n        if (p === Point.DOWN) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y + size.y, Point.DOWN);\r\n        }\r\n        if (p === Point.UP) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y, Point.UP);\r\n        }\r\n        if (p === Point.LEFT) {\r\n            return new Point(pos.x, Math.min(center.y + offset, pos.y + size.y), Point.LEFT);\r\n        }\r\n        if (p === Point.RIGHT) {\r\n            return new Point(pos.x + size.x, Math.min(center.y + offset, pos.y + size.y), Point.RIGHT);\r\n        }\r\n        return new Point();\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getCanvas(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return null;\r\n    }\r\n\r\n    public getAlreadyDisplayingSVG(): Element {\r\n        return document.getElementById(this.id) || this.getSVG();\r\n    }\r\n\r\n    public load(data: any) {\r\n        // Do Nothing\r\n    }\r\n\r\n    public withPos(x: number, y: number): GraphElement {\r\n        if (x && y) {\r\n            this.$pos = new Point(x, y);\r\n        } else {\r\n            if (typeof (x) !== 'undefined' && x !== null) {\r\n                this.$pos.x = x;\r\n            }\r\n            if (typeof (y) !== 'undefined' && y !== null) {\r\n                this.$pos.y = y;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public withSize(width: number, height: number): DiagramElement {\r\n        if (width && height) {\r\n            this.$size = new Point(width, height);\r\n        } else {\r\n            if (typeof (width) !== 'undefined' && width !== null) {\r\n                this.$size.x = width;\r\n            }\r\n            if (typeof (height) !== 'undefined' && height !== null) {\r\n                this.$size.y = height;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        // FIXME if (this.status === 'close') {\r\n        // if (!this.$owner.isClosed()) {\r\n        //        return this;\r\n        //    }\r\n        // }\r\n        return super.getShowed();\r\n    }\r\n\r\n    public loadProperties(properties: any) {\r\n        // DO Nothing\r\n    }\r\n\r\n    protected createShape(attrs: any): Element {\r\n        return Util.createShape(attrs);\r\n    }\r\n}\r\n\r\nexport class Point {\r\n    public static UP: string = 'UP';\r\n    public static LEFT: string = 'LEFT';\r\n    public static RIGHT: string = 'RIGHT';\r\n    public static DOWN: string = 'DOWN';\r\n    x: number = 0;\r\n    y: number = 0;\r\n\r\n    //    pos:string = '';\r\n\r\n    constructor(x?: number, y?: number, pos?: string) {\r\n        this.x = Math.ceil(x || 0);\r\n        this.y = Math.ceil(y || 0);\r\n        if (pos) {\r\n            this['pos'] = pos;\r\n        }\r\n    }\r\n\r\n    public add(pos: Point) {\r\n        this.x += pos.x;\r\n        this.y += pos.y;\r\n        return this;\r\n    }\r\n\r\n    public getPosition(): string {\r\n        if (!this['pos']) {\r\n            return '';\r\n        }\r\n        return this['pos'];\r\n    }\r\n\r\n    public addNum(x: number, y: number) {\r\n        this.x += x;\r\n        this.y += y;\r\n        return this;\r\n    }\r\n\r\n    public sum(pos: Point) {\r\n        let sum = new Point(this.x, this.y);\r\n        sum.add(pos);\r\n        return sum;\r\n    }\r\n\r\n    public center(posA: Point, posB: Point) {\r\n        let count = 0;\r\n        if (posA) {\r\n            this.x += posA.x;\r\n            this.y += posA.y;\r\n            count++;\r\n        }\r\n        if (posB) {\r\n            this.x += posB.x;\r\n            this.y += posB.y;\r\n            count++;\r\n        }\r\n        if (count > 0) {\r\n            this.x = (this.x / count);\r\n            this.y = (this.y / count);\r\n        }\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        return this.x < 1 && this.y < 1;\r\n    }\r\n\r\n    public size(posA: Point, posB: Point) {\r\n        let x1 = 0, x2 = 0, y1 = 0, y2 = 0;\r\n        if (posA) {\r\n            x1 = posA.x;\r\n            y1 = posA.y;\r\n        }\r\n        if (posB) {\r\n            x2 = posB.x;\r\n            y2 = posB.y;\r\n        }\r\n        if (x1 > x2) {\r\n            this.x = x1 - x2;\r\n        } else {\r\n            this.x = x2 - x1;\r\n        }\r\n        if (y1 > y2) {\r\n            this.y = y1 - y2;\r\n        } else {\r\n            this.y = y2 - y1;\r\n        }\r\n    }\r\n}\r\n\r\n// \t\t\t\t######################################################### Line #########################################################\r\nexport class Line extends DiagramElement {\r\n    public static FORMAT = { SOLID: 'SOLID', DOTTED: 'DOTTED', PATH: 'PATH' };\r\n    public source: Point;\r\n    public target: Point;\r\n    public color: string;\r\n    public lineType: string;\r\n    private path: string;\r\n    private angle: Number;\r\n\r\n    constructor(lineType: string) {\r\n        super();\r\n        this.lineType = lineType;\r\n    }\r\n\r\n    public getTyp(): string {\r\n        return 'SVG';\r\n    }\r\n\r\n    public getPos() {\r\n        let pos = new Point();\r\n        pos.center(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public getSize() {\r\n        let pos = new Point();\r\n        pos.size(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public withColor(color: string): Line {\r\n        this.color = color;\r\n        return this;\r\n    }\r\n\r\n    public withSize(x: number, y: number): DiagramElement {\r\n        return this;\r\n    }\r\n\r\n    public withPath(path: Array<Point>, close: boolean, angle?: any): Line {\r\n        let i: number, d: string = 'M' + path[0].x + ' ' + path[0].y;\r\n        this.lineType = Line.FORMAT.PATH; // It is a Path not a Line\r\n        for (i = 1; i < path.length; i += 1) {\r\n            d = d + 'L ' + path[i].x + ' ' + path[i].y;\r\n        }\r\n        if (close) {\r\n            d = d + ' Z';\r\n            this.target = path[0];\r\n        } else {\r\n            this.target = path[path.length - 1];\r\n        }\r\n        this.path = d;\r\n        if (angle instanceof Number) {\r\n            this.angle = angle;\r\n        } else if (angle) {\r\n            // var lineangle, start = path[0], end = path[path.length - 1];\r\n            // lineangle = Math.atan2(end.y - start.y, end.x - start.x);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): SVGGElement {\r\n        if (this.lineType === 'PATH') {\r\n            return <SVGGElement>Util.create({\r\n                tag: 'path',\r\n                'd': this.path,\r\n                'fill': this.color,\r\n                stroke: '#000',\r\n                'stroke-width': '1px'\r\n            });\r\n        }\r\n        let line: SVGGElement = <SVGGElement>Util.create({\r\n            tag: 'line',\r\n            'x1': this.source.x,\r\n            'y1': this.source.y,\r\n            'x2': this.target.x,\r\n            'y2': this.target.y,\r\n            'stroke': Util.getColor(this.color)\r\n        });\r\n        if (this.lineType && this.lineType.toLowerCase() === 'dotted') {\r\n            line.setAttribute('stroke-miterlimit', '4');\r\n            line.setAttribute('stroke-dasharray', '1,1');\r\n        }\r\n        return line;\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport Options from '../Options';\r\nimport {JavaAdapter} from '../adapters';\r\n\r\nexport class ClassEditor extends Graph {\r\n    private adapter: JavaAdapter;\r\n    constructor(json: any, options: Options) {\r\n        if (!options ) {\r\n            options = {};\r\n        }\r\n        options.canvas = options.canvas || 'canvas';\r\n        // options.origin = options.origin || new Point(150, 45);\r\n//            layout: \"DagreLayout\",\r\n        options.autoSave = options.autoSave || true;\r\n        if (!options.features) {\r\n            options.features = {\r\n                drag: true,\r\n                editor: true,\r\n                palette: true,\r\n                select: true,\r\n                zoom: true,\r\n                toolbar: true,\r\n                import: true,\r\n                properties: true,\r\n                addnode: true,\r\n                newedge: true\r\n            };\r\n        }\r\n        super(json, options);\r\n    }\r\n\r\n    public setBoardStyle(value: string) {\r\n        console.log(value);\r\n        this.importFile.setBoardStyle(value);\r\n    }\r\n\r\n    public registerListener(): void {\r\n        this.adapter = new JavaAdapter();\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return this.adapter;\r\n    }\r\n}\r\n","import * as edges from './edges';\r\nimport { Association } from './edges';\r\nimport * as nodes from './nodes';\r\nimport * as layouts from '../layouts';\r\nimport Layout from '../layouts/Layout';\r\nimport { GraphModel } from './Model';\r\nimport { Point, Size } from './BaseElements';\r\nimport { Util } from '../util';\r\nimport { Control } from '../Control';\r\nimport Data from '../Data';\r\nimport { EventBus } from '../EventBus';\r\nimport { AddNode, Drag, NewEdge, Select, Zoom } from '../handlers';\r\nimport Options from '../Options';\r\nimport { ImportFile } from '../handlers/ImportFile';\r\nimport { CSS } from '../CSS';\r\nimport { DiagramElement } from './index';\r\nimport { Toolbar } from '../Toolbar';\r\nimport {JSEPS} from '../JSEPS';\r\nimport {SVGConverter} from '../SVGConverter';\r\nimport Palette from '../Palette';\r\nimport {PanelGroup} from '../PropertiesPanel';\r\n\r\nexport class Graph extends Control {\r\n    // canvas: HTMLElement;\r\n    root: SVGElement;\r\n    $graphModel: GraphModel;\r\n    options: Options;\r\n    canvasSize: Size;\r\n    nodeFactory: Object;\r\n    edgeFactory: Object;\r\n    layoutFactory: Object;\r\n    protected importFile: ImportFile;\r\n    private currentlayout: Layout;\r\n    // private layerToolBar: SVGSVGElement;\r\n    // https://stackoverflow.com/questions/15181452/how-to-save-export-inline-svg-styled-with-css-from-browser-to-image-file\r\n    private containerElements = ['svg', 'g'];\r\n    private relevantStyles = {\r\n        'rect': ['fill', 'stroke', 'stroke-width'],\r\n        'path': ['fill', 'stroke', 'stroke-width', 'opacity'],\r\n        'circle': ['fill', 'stroke', 'stroke-width'],\r\n        'line': ['stroke', 'stroke-width'],\r\n        'text': ['fill', 'font-size', 'text-anchor', 'font-family'],\r\n        'polygon': ['stroke', 'fill']\r\n    };\r\n\r\n    constructor(json: any, options: Options) {\r\n        super();\r\n        json = json || {};\r\n        if (json['data']) {\r\n            options = json['options'];\r\n            json = json['data'];\r\n            this.id = json['id'];\r\n        }\r\n        this.options = options || {features: { drag: true}};\r\n        if (json['init']) {\r\n            return;\r\n        }\r\n        if (!this.options.origin) {\r\n            this.options.origin = new Point(150, 45);\r\n        }\r\n        if (!this.options.style) {\r\n            // Style can be classic or modern\r\n            this.options.style = 'classic';\r\n        }\r\n        if (this.options.autoSave) {\r\n            Util.isAutoSave = options.autoSave;\r\n        }\r\n\r\n        this.initFactories();\r\n        this.initCanvas();\r\n        this.initFeatures(this.options.features);\r\n\r\n        // load previous session, if user wants it\r\n        // otherwise load the json data\r\n        if (!this.lookupInLocalStorage()) {\r\n            this.load(json);\r\n        }\r\n\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    public lookupInLocalStorage(): boolean {\r\n        if (!this.options.autoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (!Util.isLocalStorageSupported()) {\r\n            return false;\r\n        }\r\n        let diagram = Util.getDiagramFromLocalStorage();\r\n        if (diagram && diagram.length > 0) {\r\n            if (confirm('Restore previous session?')) {\r\n                let jsonData: JSON = JSON.parse(diagram);\r\n                this.load(jsonData);\r\n                this.layout();\r\n                return true;\r\n            } else {\r\n                Util.saveToLocalStorage( null);\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public fitSizeOnNodes(): void {\r\n        let maxWidth: number = 0;\r\n        let maxHeight: number = 0;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            let nodePos = node.getPos();\r\n            let nodeSize = node.getSize();\r\n            let nodeWidestPosX = nodePos.x + nodeSize.x;\r\n            let nodeWidestPosY = nodePos.y + nodeSize.y;\r\n\r\n            if (nodeWidestPosX > maxWidth) {\r\n                maxWidth = nodeWidestPosX;\r\n            }\r\n\r\n            if (nodeWidestPosY > maxHeight) {\r\n                maxHeight = nodeWidestPosY;\r\n            }\r\n        }\r\n\r\n        this.root.setAttributeNS(null, 'width', '' + (maxWidth + 100));\r\n        this.root.setAttributeNS(null, 'height', '' + (maxHeight + 50));\r\n    }\r\n\r\n    public saveAs(typ: string) {\r\n        typ = typ.toLowerCase();\r\n\r\n        // shrink size of graph to minimum. only to show up nodes\r\n        const currentSize = this.getRootSize();\r\n        this.fitSizeOnNodes();\r\n\r\n        if (typ === 'svg') {\r\n            this.exportSvg();\r\n        } else if (typ === 'png') {\r\n            this.exportPng();\r\n        } else if (typ === 'html') {\r\n            this.exportHtml();\r\n\r\n        } else if (typ === 'pdf') {\r\n            this.exportPdf();\r\n            // } else if (typ === 'eps') {\r\n            // this.ExportEPS();\r\n        }\r\n        else if (typ === 'json') {\r\n            this.exportJson();\r\n        }\r\n\r\n        // set the size back to default\r\n        this.root.setAttributeNS(null, 'width', '' + currentSize.width);\r\n        this.root.setAttributeNS(null, 'height', '' + currentSize.height);\r\n    }\r\n\r\n    /**\r\n     * generates a blob file and makes it available for download.\r\n     * @param type type of file\r\n     * @param data raw data\r\n     * @param name name of download file\r\n     */\r\n    public save(type: string, data: any, name: string, context: string) {\r\n        if (window['java']) {\r\n            window['java'].export(type, data, name, context);\r\n            return;\r\n        }\r\n        let a = document.createElement('a');\r\n        a.href = window.URL.createObjectURL(new Blob([data], { type: context }));\r\n        a.download = name;\r\n        document.body.appendChild(a);\r\n        a.click();\r\n        document.body.removeChild(a);\r\n    }\r\n\r\n    /** Exports the diagram as svg. */\r\n    public exportSvg(): void {\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        this.save('svg', this.serializeXmlNode(wellFormatedSvgDom), 'class_diagram.svg', 'image/svg+xml');\r\n    }\r\n\r\n    /** Exports the diagram as html. */\r\n    public exportHtml(): void {\r\n        let htmlFacade = '<html><head><title>DiagramJS - Classdiagram</title></head><body>$content</body></html>';\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        let svgAsXml = this.serializeXmlNode(wellFormatedSvgDom);\r\n\r\n        let htmlResult = htmlFacade.replace('$content', svgAsXml);\r\n\r\n        this.save('html', htmlResult, 'class_diagram.htm', 'text/plain');\r\n    }\r\n\r\n    /** Exports the diagram as json. */\r\n    public exportJson(): void {\r\n        let type = 'text/plain';\r\n        let jsonObj = Util.toJson(this.$graphModel);\r\n        let data = JSON.stringify(jsonObj, null, '\\t');\r\n\r\n        this.save('json', data, 'class_diagram.json', type);\r\n    }\r\n\r\n    /** Exports the diagram as pdf. */\r\n    public exportPdf(): void {\r\n        if (!window['jsPDF']) {\r\n            console.log('jspdf n.a.');\r\n            return;\r\n        }\r\n        let type = 'image/svg+xml';\r\n        let converter, pdf = new window['jsPDF']('l', 'px', [this.$graphModel.getSize().x, this.$graphModel.getSize().y]);\r\n        converter = new SVGConverter(this.$view, pdf, {removeInvalid: false});\r\n        pdf.save('Download.pdf');\r\n/*        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let canvas, context, a, image = new Image();\r\n        let size = this.getRootSize();\r\n\r\n        // create the loaded img source into a canvas. to generate a picture. then place this picture in the pdf\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            let pdf = new window['jsPDF']();\r\n\r\n            pdf.addImage(canvas.toDataURL('image/jpeg'), 'jpeg', 15, 40, 180, 160);\r\n            pdf.save('class_diagram.pdf');\r\n\r\n        };\r\n\r\n        image.src = url;\r\n        */\r\n    }\r\n\r\n    public import(data: string): void {\r\n        let rootElement = this.$graphModel.$view;\r\n        while (rootElement.hasChildNodes()) {\r\n            rootElement.removeChild(rootElement.firstChild);\r\n        }\r\n\r\n        while (this.$view.hasChildNodes()) {\r\n            this.$view.removeChild(this.$view.firstChild);\r\n        }\r\n\r\n        this.clearModel();\r\n        let jsonData = JSON.parse(data);\r\n        this.load(jsonData);\r\n        this.layout();\r\n    }\r\n\r\n    public exportEPS(): void {\r\n          let converter, doc = new JSEPS({inverting: true});\r\n            converter = new SVGConverter(this.$view, doc, {removeInvalid: false});\r\n            this.save('eps', doc.getData(), 'diagram.eps', doc.getType());\r\n    }\r\n\r\n    /** Exports the diagram as png. */\r\n    public exportPng(): void {\r\n        let canvas, context, a, image = new Image();\r\n        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let typ = 'image/svg+xml';\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let size = this.getRootSize();\r\n\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            a = document.createElement('a');\r\n            a.download = 'class_diagram.png';\r\n            a.href = canvas.toDataURL('image/png');\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            document.body.removeChild(a);\r\n        };\r\n\r\n        image.src = url;\r\n\r\n    }\r\n\r\n    public getSvgWithStyleAttributes(): Node {\r\n        let oDOM = this.$graphModel.$view.cloneNode(true);\r\n        this.readElement(oDOM, this.$graphModel.$view);\r\n\r\n        return oDOM;\r\n    }\r\n\r\n    public serializeXmlNode(xmlNode: any) {\r\n        if (window['XMLSerializer'] !== undefined) {\r\n            return (new window['XMLSerializer']()).serializeToString(xmlNode);\r\n        }\r\n        if (xmlNode.xml !== undefined) {\r\n            return xmlNode.xml;\r\n        }\r\n        return xmlNode.outerHTML;\r\n    }\r\n\r\n    public getRootSize(): Size {\r\n        let width: number;\r\n        let height: number;\r\n        width = +this.root.getAttribute('width');\r\n        height = +this.root.getAttribute('height');\r\n\r\n        return { width: width, height: height };\r\n    }\r\n\r\n        // Graph.prototype.ExportEPS = function () {\r\n        //     var converter, doc = new svgConverter.jsEPS({inverting: true});\r\n        //     converter = new svgConverter(this.board, doc, {removeInvalid: false});\r\n        //     doc.save();\r\n        // };\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        this.$graphModel = new GraphModel();\r\n        this.$graphModel.init(this);\r\n        this.$graphModel.load(json);\r\n    }\r\n\r\n    public clearModel(): void {\r\n        this.$graphModel.removeAllElements();\r\n        this.clearSvgRoot();\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.layout();\r\n        return this;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        return;\r\n    }\r\n\r\n    public getNextFreePosition(): Point {\r\n\r\n        if (!this.$graphModel) {\r\n            return new Point(50, 50);\r\n        }\r\n\r\n        let point = new Point(0, 50);\r\n\r\n        let maxX = 0;\r\n        let minX = 9000;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            maxX = Math.max(maxX, node.getPos().x);\r\n            minX = Math.min(minX, node.getPos().x);\r\n        }\r\n\r\n        if (minX > 170) {\r\n            point.x = 10;\r\n        }\r\n        else {\r\n            point.x = maxX + 200;\r\n        }\r\n\r\n        return point;\r\n    }\r\n\r\n    public addElement(type: string, dontDraw?: boolean): boolean {\r\n        let success = this.$graphModel.addElement(type);\r\n        if (success === true) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return success;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues?: Object, layout?: boolean, dontDraw?: boolean): DiagramElement {\r\n        let element = this.$graphModel.addElementWithValues(type, optionalValues);\r\n        if (element && layout) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public layout(dontDraw?: boolean): Graph {\r\n        this.getLayout().layout(this, this.$graphModel);\r\n\r\n        if (dontDraw) {\r\n            return this;\r\n        }\r\n\r\n        this.draw();\r\n        return this;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTDRAGOVER, EventBus.ELEMENTDRAGLEAVE, EventBus.ELEMENTDROP];\r\n    }\r\n\r\n    public draw() {\r\n        this.clearSvgRoot();\r\n        let model = this.$graphModel;\r\n        let root = this.root;\r\n        let max: Point = new Point();\r\n        if (this.options) {\r\n            max.x = this.options.minWidth || 0;\r\n            max.y = this.options.minHeight || 0;\r\n        }\r\n\r\n        for (let node of model.nodes) {\r\n            let svg = node.getSVG();\r\n            EventBus.register(node, svg);\r\n            root.appendChild(svg);\r\n\r\n            let temp: number;\r\n            temp = node.getPos().x + node.getSize().x;\r\n            if (temp > max.x) {\r\n                max.x = temp;\r\n            }\r\n            temp = node.getPos().y + node.getSize().y;\r\n            if (temp > max.y) {\r\n                max.y = temp;\r\n            }\r\n\r\n        }\r\n        Util.setAttributeSize(this.root, max.x + 60, max.y + 40);\r\n\r\n        for (let edge of model.edges) {\r\n            let svg = edge.getSVG();\r\n            EventBus.register(edge, svg);\r\n            root.appendChild(svg);\r\n        }\r\n    }\r\n\r\n    public getNode(id: string) {\r\n        return this.$graphModel.getNodeById(id);\r\n    }\r\n\r\n    public drawElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let svg = element.getSVG();\r\n        this.root.appendChild(svg);\r\n\r\n        // actualize root width size, if neccessary\r\n        // get current width of root\r\n        let rootSize = this.getRootSize();\r\n        let newWidth = element.getPos().x + element.getSize().x + 40;\r\n        let newHeight = element.getPos().y + element.getSize().y;\r\n\r\n        if (rootSize.width < newWidth) {\r\n            this.root.setAttributeNS(null, 'width', '' + newWidth);\r\n        }\r\n\r\n        if (rootSize.height < newHeight) {\r\n            this.root.setAttributeNS(null, 'height', '' + newHeight);\r\n        }\r\n\r\n        // draw edge\r\n        if (element instanceof Association) {\r\n            let edge = <Association>element;\r\n            edge.redraw(edge.$sNode);\r\n            let srcSvg = element.$sNode.getAlreadyDisplayingSVG();\r\n            let targetSvg = element.$tNode.getAlreadyDisplayingSVG();\r\n\r\n            this.root.appendChild(srcSvg);\r\n            this.root.appendChild(targetSvg);\r\n        }\r\n\r\n        EventBus.register(element, svg);\r\n    }\r\n\r\n    public removeElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let alreadyDisplayingSvg = element.getAlreadyDisplayingSVG();\r\n        if (Util.isParentOfChild(this.root, alreadyDisplayingSvg)) {\r\n            this.root.removeChild(alreadyDisplayingSvg);\r\n        }\r\n    }\r\n\r\n    public generate(packageName: string, path?: string) {\r\n        this.$graphModel.package = packageName;\r\n        this.$graphModel.genPath = path;\r\n\r\n        let data, result = Util.toJson(this.$graphModel);\r\n        data = JSON.stringify(result, null, '\\t');\r\n        if (window['java'] && typeof window['java'].generate === 'function') {\r\n            window['java'].generate(data);\r\n        }\r\n    }\r\n// REFACTORING dd\r\n    private readElement(parent: any, origData: any): void {\r\n        let children = parent.childNodes;\r\n        let origChildDat = origData.childNodes;\r\n\r\n        for (let cd = 0; cd < children.length; cd++) {\r\n            let child = children[cd];\r\n\r\n            let tagName = child.tagName;\r\n            if (this.containerElements.indexOf(tagName) !== -1) {\r\n                this.readElement(child, origChildDat[cd]);\r\n            } else if (tagName in this.relevantStyles) {\r\n                let styleDef = window.getComputedStyle(origChildDat[cd]);\r\n\r\n                let styleString = '';\r\n                for (let st = 0; st < this.relevantStyles[tagName].length; st++) {\r\n                    styleString += this.relevantStyles[tagName][st] + ':' + styleDef.getPropertyValue(this.relevantStyles[tagName][st]) + '; ';\r\n                }\r\n\r\n                child.setAttribute('style', styleString);\r\n            }\r\n        }\r\n    }\r\n\r\n    private createPattern(): Element {\r\n        const defs = Util.createShape({ tag: 'defs' });\r\n        const pattern = Util.createShape({\r\n            tag: 'pattern',\r\n            id: 'raster',\r\n            patternUnits: 'userSpaceOnUse',\r\n            width: 40,\r\n            height: 40\r\n        });\r\n        const path = 'M0 4 L0 0 L4 0 M36 0 L40 0 L40 4 M40 36 L40 40 L36 40 M4 40 L0 40 L0 36';\r\n        const cross = Util.createShape({\r\n            tag: 'path',\r\n            d: path,\r\n            stroke: '#DDD',\r\n            'stroke-width': 1,\r\n            fill: 'none'\r\n        });\r\n\r\n        const rect = Util.createShape({\r\n            tag: 'rect',\r\n            x: 0,\r\n            y: 0,\r\n            width: 40,\r\n            height: 40,\r\n            fill: 'none'\r\n        });\r\n        pattern.appendChild(rect);\r\n        pattern.appendChild(cross);\r\n        defs.appendChild(pattern);\r\n        return defs;\r\n    }\r\n\r\n    private clearSvgRoot() {\r\n        const root = this.root;\r\n        this.$graphModel.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n        while (root.firstChild) {\r\n            root.removeChild(root.firstChild);\r\n        }\r\n\r\n        root.appendChild(this.createPattern());\r\n        let fillValue = 'none';\r\n        if (this.options.raster) {\r\n            fillValue = 'url(#raster)';\r\n        }\r\n        let background = Util.createShape({\r\n            tag: 'rect',\r\n            id: 'background',\r\n            width: 5000,\r\n            height: 5000,\r\n            x: 0,\r\n            y: 0,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: fillValue\r\n        });\r\n        root.appendChild(background);\r\n\r\n        // delete inline Edit, if exists\r\n        let inlineEdit = document.getElementById('inlineEdit');\r\n        if (inlineEdit && document.body.contains(inlineEdit)) {\r\n            document.body.removeChild(inlineEdit);\r\n        }\r\n    }\r\n\r\n    private getLayout(): Layout {\r\n        if (this.currentlayout) {\r\n            return this.currentlayout;\r\n        }\r\n\r\n        let layout = this.options.layout || '';\r\n        if (this.layoutFactory[layout]) {\r\n            this.currentlayout = new this.layoutFactory[layout]();\r\n        } else {\r\n            this.currentlayout = new layouts.DagreLayout();\r\n        }\r\n\r\n        return this.currentlayout;\r\n    }\r\n\r\n    private initFactories() {\r\n\r\n        let noder = nodes;\r\n        this.nodeFactory = {};\r\n        for (let id in noder) {\r\n            if (noder.hasOwnProperty(id) === true) {\r\n                this.nodeFactory[id] = noder[id];\r\n            }\r\n        }\r\n\r\n        let edger = edges;\r\n        this.edgeFactory = {};\r\n        for (let id in edger) {\r\n            if (edger.hasOwnProperty(id) === true) {\r\n                this.edgeFactory[id] = edger[id];\r\n            }\r\n        }\r\n\r\n        let layouter = layouts;\r\n        this.layoutFactory = {};\r\n        for (let id in layouter) {\r\n            if (layouter.hasOwnProperty(id) === true) {\r\n                this.layoutFactory[id] = layouter[id];\r\n            }\r\n        }\r\n    }\r\n\r\n    private initCanvas() {\r\n        if (this.options.canvas) {\r\n            this.$view = document.getElementById(this.options.canvas);\r\n        }\r\n        if (!this.$view) {\r\n            this.$view = document.createElement('div');\r\n            this.$view.setAttribute('class', 'diagram');\r\n            document.body.appendChild(this.$view);\r\n        }\r\n    }\r\n\r\n    private initFeatures(features: any) {\r\n\r\n        if (features) {\r\n            if (features.newedge) {\r\n                EventBus.subscribe(new NewEdge(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            this.importFile = new ImportFile(this);\r\n            if (features.import) {\r\n                EventBus.subscribe(this.importFile, 'dragover', 'dragleave', 'drop');\r\n            }\r\n            if (features.zoom) {\r\n                let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n                EventBus.subscribe(new Zoom(this), mousewheel);\r\n            }\r\n            if (features.drag) {\r\n                EventBus.subscribe(new Drag(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            if (features.select) {\r\n                EventBus.subscribe(new Select(this), 'click', 'drag');\r\n            }\r\n            if (features.palette) {\r\n                new Palette(this).show();\r\n            }\r\n            if (features.toolbar) {\r\n                new Toolbar(this).show();\r\n            }\r\n            if (features.properties) {\r\n                let propertyPanel = new PanelGroup(this);\r\n                // let dispatcher = new PropertiesDispatcher(this);\r\n                EventBus.subscribe(propertyPanel, 'dblclick', 'click', EventBus.RELOADPROPERTIES);\r\n                propertyPanel.show();\r\n            }\r\n            if (features.addnode) {\r\n                EventBus.subscribe(new AddNode(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n        }\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport {DiagramElement, Point} from './BaseElements';\r\nimport {Association} from './edges';\r\nimport {Node} from './nodes';\r\nimport {Control} from '../Control';\r\nimport {Util} from '../util';\r\nimport {EventBus} from '../EventBus';\r\n\r\nexport class GraphModel extends DiagramElement {\r\n    nodes: Node[] = [];\r\n    edges: Association[] = [];\r\n    package: string;\r\n    genPath: string;\r\n    $isLoading: boolean;\r\n\r\n    public load(data?: any) {\r\n\r\n        this.$isLoading = true;\r\n        data = data || {};\r\n        this.property = data.type || data.property || 'classdiagram';\r\n        this.id = 'RootElement';\r\n        if (data.nodes) {\r\n            for (let node of data.nodes) {\r\n                this.addNode(node);\r\n            }\r\n        }\r\n        if (data.edges) {\r\n            for (let edge of data.edges) {\r\n                this.addEdge(edge);\r\n            }\r\n        }\r\n\r\n        this.$isLoading = false;\r\n    }\r\n\r\n    public getNodeByPosition(x: number, y: number): Node {\r\n        for (let node of this.nodes) {\r\n            let posOfNode: Point = (<Node>node).getPos();\r\n            let sizeOfNode: Point = (<Node>node).getSize();\r\n\r\n            if ((posOfNode.x <= x && (posOfNode.x + sizeOfNode.x) >= x)\r\n                && (posOfNode.y <= y && (posOfNode.y + sizeOfNode.y) >= y)) {\r\n                return node;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.initCanvas();\r\n        return this;\r\n    }\r\n\r\n    public addElement(type: string): boolean {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n        if (element) {\r\n            Util.saveToLocalStorage(this);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues: Object): DiagramElement {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n\r\n        // position\r\n        if (optionalValues) {\r\n            if (optionalValues.hasOwnProperty('x') && optionalValues.hasOwnProperty('y')) {\r\n                let x = optionalValues['x'];\r\n                let y = optionalValues['y'];\r\n                element.withPos(x, y);\r\n            }\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return element;\r\n    }\r\n\r\n    public removeAllElements(): void {\r\n\r\n        let nodesLength = this.nodes.length;\r\n        for (let i = 0; i < nodesLength; i++) {\r\n            this.removeElement(this.nodes[0].id);\r\n        }\r\n\r\n        this.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n    }\r\n\r\n    public removeElement(id: string): boolean {\r\n\r\n        let element = this.getDiagramElementById(id);\r\n        if (!element) {\r\n            return false;\r\n        }\r\n\r\n        (<Graph>this.$owner).removeElement(element);\r\n\r\n        if (element instanceof Node) {\r\n\r\n            let idxOfNode = this.nodes.indexOf(element);\r\n            if (idxOfNode > -1) {\r\n                this.nodes.splice(idxOfNode, 1);\r\n            }\r\n\r\n            while (element.$edges.length > 0) {\r\n                this.removeElement(element.$edges[0].id);\r\n            }\r\n\r\n            element.$edges = [];\r\n        }\r\n        else if (element instanceof Association) {\r\n\r\n            let idxOfEdge = this.edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                this.edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from source\r\n            idxOfEdge = element.$sNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$sNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from target\r\n            idxOfEdge = element.$tNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$tNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return true;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        const size = 10;\r\n        const path = `M${-size} 0 L${+size} 0 M0 ${-size} L0 ${+size}`;\r\n\r\n        const attr = {\r\n            tag: 'path',\r\n            id: 'origin',\r\n            d: path,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: 'none'\r\n        };\r\n        let shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: 0 - size,\r\n            y: 0 - size / 1.5,\r\n            'text-anchor': 'end',\r\n            'font-family': 'Verdana',\r\n            'font-size': '9',\r\n            fill: '#999'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = '(0, 0)';\r\n\r\n        let group = this.createShape({tag: 'g'});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEUP, EventBus.ELEMENTMOUSELEAVE, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTMOUSEWHEEL, EventBus.ELEMENTCLICK, EventBus.ELEMENTDRAG];\r\n    }\r\n\r\n    public getNewId(prefix?: string): string {\r\n        let id = (prefix ? prefix.toLowerCase() + '-' : '') + Math.floor(Math.random() * 100000);\r\n        return id;\r\n    }\r\n\r\n    public getEdgeById(id: string): Association {\r\n        for (let edge of this.edges) {\r\n            if (edge.id === id) {\r\n                return edge;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    public getDiagramElementById(id: string): DiagramElement {\r\n\r\n        return this.getNodeById(id) || this.getEdgeById(id);\r\n    }\r\n\r\n    /**\r\n     * Add an edge with data in json file. Optional you can say, that the edge should have\r\n     * the points of source node and target node.\r\n     * @param edge information about edge in json\r\n     * @param withPosOfNodes optional. set points to line of source and target node\r\n     */\r\n    public addEdge(edge: any, withPosOfNodes?: boolean): Association {\r\n\r\n        // lookup in factoryedges and check if the edge type realy exists\r\n        if (edge && edge.type) {\r\n            const graph = (<Graph>this.$owner);\r\n            let typeExists = false;\r\n            for (let edgeType in graph.edgeFactory) {\r\n                if (edgeType === edge.type) {\r\n                    typeExists = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!typeExists) {\r\n                edge.type = 'Association';\r\n            }\r\n        }\r\n\r\n        let type = edge.type || 'Association';\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n\r\n        let newEdge = <Association>this.createElement(type, id, edge);\r\n        newEdge.type = type;\r\n\r\n        let source: Node;\r\n        let sourceAsString: string = edge.source.id || edge.source;\r\n        if (sourceAsString) {\r\n            source = this.getNodeById(sourceAsString);\r\n            if (!source) {\r\n                let nodeID = edge.source;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                source = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                source.init(this);\r\n            }\r\n        }\r\n\r\n        let target: Node;\r\n        let targetAsString: string = edge.target.id || edge.target;\r\n        if (targetAsString) {\r\n            target = this.getNodeById(targetAsString);\r\n            if (!target) {\r\n                let nodeID = edge.target;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                target = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                target.init(this);\r\n            }\r\n        }\r\n\r\n        newEdge.withItem(source, target);\r\n\r\n        if (withPosOfNodes) {\r\n            let srcX = source.getPos().x + (source.getSize().x / 2);\r\n            let srcY = source.getPos().y + (source.getSize().y / 2);\r\n\r\n            let targetX = target.getPos().x + (target.getSize().x / 2);\r\n            let targetY = target.getPos().y + (target.getSize().y / 2);\r\n\r\n            newEdge.addPoint(srcX, srcY);\r\n            newEdge.addPoint(targetX, targetY);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public createElement(type: string, id: string, data: Object): DiagramElement {\r\n        const graph = <Graph>this.$owner;\r\n        let element: DiagramElement;\r\n        if (graph.nodeFactory[type]) {\r\n            element = new graph.nodeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.nodes.push(<Node>element);\r\n        }\r\n        if (graph.edgeFactory[type]) {\r\n            element = new graph.edgeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.edges.push(<Association>element);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public getNodeById(id: string): Node {\r\n        for (let node of this.nodes) {\r\n            if (node.id === id) {\r\n                return node;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    private initCanvas() {\r\n        const graph = <Graph>this.$owner;\r\n        graph.canvasSize = {width: graph.$view.clientWidth, height: graph.$view.clientHeight};\r\n        graph.root = Util.createShape({\r\n            tag: 'svg',\r\n            id: 'root',\r\n            width: graph.canvasSize.width,\r\n            height: graph.canvasSize.height\r\n            // FIXME,viewBox: `${this.$graph.options.origin.x * -1} ${this.$graph.options.origin.y * -1} ${this.$graph.canvasSize.width} ${this.$graph.canvasSize.height}`\r\n        });\r\n        this.$view = graph.root;\r\n        graph.$view.appendChild(graph.root);\r\n\r\n        let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    private addNode(node: Node): Node {\r\n        let type = node['type'] || node.property || 'Node';\r\n        type = Util.toPascalCase(type);\r\n        let id = node['id'] || node['name'] || this.getNewId(type);\r\n\r\n        return <Node>this.createElement(type, id, node);\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction } from './index';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\n\r\nexport abstract class Aggregate extends Association {\r\n\r\n    protected $diamond: Element;\r\n\r\n    public getSVG(): Element {\r\n\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled diamond\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n        };\r\n\r\n        this.$diamond = this.createShape(attr);\r\n\r\n        group.appendChild(this.$diamond);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint: Point = this.$points[0];\r\n        let direction: Direction = Direction.Down;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if (this.$sNode.id === startNode.id || this.$points.length == 2) {\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$diamond.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint: Point, direction: Direction): string {\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                path = `M${startX} ${startY} L${startX + 6} ${startY + 10} L${startX} ${startY + 20} L${startX - 6} ${startY + 10} Z`;\r\n                startPoint.y = startPoint.y+20;\r\n                break;\r\n            case Direction.Right:\r\n                path = `M${startX} ${startY} L${startX - 10} ${startY + 6} L${startX - 20} ${startY} L${startX - 10} ${startY - 6} Z`;\r\n                startPoint.x = startPoint.x-20;\r\n                break;\r\n            case Direction.Left:\r\n                path = `M${startX} ${startY} L${startX + 10} ${startY - 6} L${startX + 20} ${startY} L${startX + 10} ${startY + 6} Z`;\r\n                startPoint.x = startPoint.x+20;\r\n                break;\r\n            case Direction.Down:\r\n                path = `M${startX} ${startY} L${startX - 6} ${startY - 10} L${startX} ${startY - 20} L${startX + 6} ${startY - 10} Z`;\r\n                startPoint.y = startPoint.y-20;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Aggregation extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'white');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { DiagramElement, Line, Point } from '../BaseElements';\r\nimport { Node } from '../nodes';\r\nimport { InfoText } from '../nodes/InfoText';\r\nimport { Util } from '../../util';\r\nimport { EventBus } from '../../EventBus';\r\nimport * as edges from '../edges';\r\nimport { Graph } from '../Graph';\r\n\r\nexport const enum Direction {\r\n    Up, Down, Left, Right\r\n}\r\n\r\nexport class Association extends DiagramElement {\r\n    public source: string;\r\n    public target: string;\r\n    public type: string;\r\n    public $sNode: Node;\r\n    public $tNode: Node;\r\n    public lineStyle: string;\r\n    public $points: Point[] = [];\r\n    public $pathSvg: Element;\r\n    public $pathWideSvg: Element;\r\n    public info: InfoText;\r\n    public sourceInfo: InfoText;\r\n    public targetInfo: InfoText;\r\n    $m: number;\r\n    $n: number;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super();\r\n\r\n        this.withData(data);\r\n    }\r\n\r\n    public withData(data: JSON | string | Object | any): Association {\r\n\r\n        if (!data) {\r\n            return this;\r\n        }\r\n        let srcInfo;\r\n        let trgInfo;\r\n\r\n        if (data.source && typeof data.source !== 'string') {\r\n            srcInfo = data.source;\r\n        }\r\n        else if (data.sourceInfo && typeof data.sourceInfo !== 'string') {\r\n            srcInfo = data.sourceInfo;\r\n        }\r\n\r\n        if (srcInfo) {\r\n            this.sourceInfo = new InfoText(srcInfo);\r\n            this.sourceInfo.$owner = this;\r\n        }\r\n\r\n        if (data.target && typeof data.target !== 'string') {\r\n            trgInfo = data.target;\r\n        }\r\n        else if (data.targetInfo && typeof data.targetInfo !== 'string') {\r\n            trgInfo = data.targetInfo;\r\n        }\r\n\r\n        if (trgInfo) {\r\n            this.targetInfo = new InfoText(trgInfo);\r\n            this.targetInfo.$owner = this;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    public updateSrcCardinality(cardinality: string): void {\r\n        this.sourceInfo = this.updateCardinality(this.$sNode, this.sourceInfo, cardinality);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetCardinality(cardinality: string): void {\r\n        this.targetInfo = this.updateCardinality(this.$tNode, this.targetInfo, cardinality);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateSrcProperty(property: string): void {\r\n        this.sourceInfo = this.updateProperty(this.$sNode, this.sourceInfo, property);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetProperty(property: string): void {\r\n        this.targetInfo = this.updateProperty(this.$tNode, this.targetInfo, property);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public withItem(source: Node, target: Node): Association {\r\n        source.$edges.push(this);\r\n        target.$edges.push(this);\r\n        this.$sNode = source;\r\n        this.$tNode = target;\r\n        this.source = source.id;\r\n        this.target = target.id;\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let group = Util.createShape({ tag: 'g', id: this.id, class: 'SVGEdge' });\r\n\r\n        let path: string = this.getPath();\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'none'\r\n        };\r\n        let pathLine = this.createShape(attr);\r\n\r\n        //attr['style'] = 'stroke-width:20;opacity:0;width:20;height:20';\r\n        let extendedPathLine = Util.createShape(attr);\r\n\r\n        group.appendChild(extendedPathLine);\r\n        group.appendChild(pathLine);\r\n\r\n        if (this.sourceInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.sourceInfo.getSVG());\r\n        }\r\n        if (this.targetInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.targetInfo.getSVG());\r\n        }\r\n\r\n        this.$pathWideSvg = extendedPathLine;\r\n        this.$pathSvg = pathLine;\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.EDITOR, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    public convertEdge(type: string, newId: string, redraw?: boolean): Association {\r\n        if (!edges[type]) {\r\n            return this;\r\n        }\r\n\r\n        let newEdge: Association = new edges[type]();\r\n        newEdge.withItem(this.$sNode, this.$tNode);\r\n        newEdge.id = newId;\r\n        newEdge.type = type;\r\n        newEdge.lineStyle = this.lineStyle;\r\n        newEdge.$owner = this.$owner;\r\n\r\n        if (this.sourceInfo) {\r\n            newEdge.sourceInfo = new InfoText({ property: this.sourceInfo.property, cardinality: this.sourceInfo.cardinality });\r\n            newEdge.sourceInfo.$owner = newEdge;\r\n        }\r\n\r\n        if (this.targetInfo) {\r\n            newEdge.targetInfo = new InfoText({ property: this.targetInfo.property, cardinality: this.targetInfo.cardinality });\r\n            newEdge.targetInfo.$owner = newEdge;\r\n        }\r\n\r\n        this.$points.forEach(point => {\r\n            newEdge.addPoint(point.x, point.y);\r\n        });\r\n\r\n        let graph = <Graph>this.getRoot();\r\n        if (!graph) {\r\n            return this;\r\n        }\r\n\r\n        // update model. insert the edge exact on the same index, like the old edge\r\n        let idx = graph.$graphModel.edges.indexOf(this);\r\n        graph.$graphModel.removeElement(this.id);\r\n        if (idx > -1) {\r\n            graph.$graphModel.edges.splice(idx, 0, newEdge);\r\n        }\r\n        else {\r\n            graph.$graphModel.edges.push(newEdge);\r\n        }\r\n\r\n        if (!redraw) {\r\n            return newEdge;\r\n        }\r\n\r\n        let svgRoot: Element;\r\n        if (graph) {\r\n            svgRoot = graph.root;\r\n        }\r\n        else {\r\n            svgRoot = document.getElementById('root');\r\n        }\r\n        let newEdgeSvg = newEdge.getSVG();\r\n\r\n        // update graph\r\n        graph.removeElement(this);\r\n        svgRoot.appendChild(newEdgeSvg);\r\n\r\n        // redraw the edge from both sides to get the correct display\r\n        // if the type is edge, so the path can be redraw.\r\n        // if not, so the inherited class redraw the path with his own logic\r\n\r\n        let dontDrawPath: boolean = (type !== 'Edge');\r\n        newEdge.redraw(newEdge.$sNode, dontDrawPath);\r\n        newEdge.redraw(newEdge.$tNode, dontDrawPath);\r\n\r\n        EventBus.register(newEdge, newEdgeSvg);\r\n\r\n        this.sourceInfo = undefined;\r\n        this.targetInfo = undefined;\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n        // redraw the first point\r\n        // check which point is the near to startnode\r\n        let endPoint: Point;\r\n        let recalcPoint: Point;\r\n        let endPointIdx: number;\r\n\r\n        if (this.$sNode.id === startNode.id) {\r\n            recalcPoint = this.$points[0];\r\n            endPointIdx = 1;\r\n        } else if (this.$tNode.id === startNode.id) {\r\n            recalcPoint = this.$points[this.$points.length - 1];\r\n            endPointIdx = this.$points.length - 2;\r\n        }\r\n\r\n        endPoint = this.$points[endPointIdx];\r\n\r\n        // calculate and set new position of point to redraw\r\n        this.calcIntersection(startNode, recalcPoint, endPoint);\r\n\r\n        // remove the 2nd point next to startnode, if the node was dragged upper the point\r\n        if (this.$points.length > 2 && this.$tNode.id === startNode.id && endPoint.y > (startNode.getPos().y + (startNode.getSize().y / 2))) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$tNode.id === startNode.id && this.$points.length === 2) {\r\n            this.calcIntersection(this.$sNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (this.$points.length > 2 && this.$sNode.id === startNode.id && (startNode.getPos().y + (startNode.getSize().y / 2) > endPoint.y)) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$sNode.id === startNode.id && this.$points.length === 2) {\r\n\r\n            this.calcIntersection(this.$tNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (!dontDrawPoints) {\r\n            this.redrawPointsAndInfo();\r\n        }\r\n    }\r\n\r\n    public getPath(): string {\r\n\r\n        if (this.$points.length === 0) {\r\n            return '';\r\n        }\r\n\r\n        let path: string = 'M';\r\n        for (let i = 0; i < this.$points.length; i++) {\r\n            let point: Point = this.$points[i];\r\n            if (i > 0) {\r\n                path += 'L';\r\n            }\r\n            path += Math.floor(point.x) + ' ' + Math.floor(point.y) + ' ';\r\n        }\r\n\r\n        return path;\r\n    }\r\n    public calcInfoPosNew(infoTxt: InfoText, node: Node): Point {\r\n\r\n        if (!infoTxt || !node) {\r\n            return null;\r\n        }\r\n\r\n        // 1. step: get direction\r\n        let startPoint: Point;\r\n        let nextToStartPoint: Point;\r\n        if (this.$sNode.id === node.id) {\r\n            startPoint = this.$points[0];\r\n            nextToStartPoint = this.$points[1];\r\n        }\r\n        else if (this.$tNode.id === node.id) {\r\n            startPoint = this.$points[this.$points.length - 1];\r\n            nextToStartPoint = this.$points[this.$points.length - 2];\r\n        }\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(node, startPoint);\r\n\r\n        let x: number;\r\n        let y: number;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                break;\r\n            case Direction.Right:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x - (infoTxt.getSize().x) - 5;\r\n                break;\r\n            case Direction.Left:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x + 5;\r\n                break;\r\n            case Direction.Down:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        // assign calculated position to infotext\r\n        return new Point(x, y);\r\n    }\r\n\r\n    public clearPoints(): any {\r\n        this.$points = [];\r\n        this.$points = [];\r\n    }\r\n\r\n    public addPoint(x: number, y: number): Point[] {\r\n        this.$points.push(new Point(x, y));\r\n\r\n        return this.$points;\r\n    }\r\n\r\n    protected redrawPointsAndInfo(): void {\r\n        // redraw the edge with the new position\r\n        let path: string = this.getPath();\r\n        this.$pathSvg.setAttributeNS(null, 'd', path);\r\n        this.$pathWideSvg.setAttributeNS(null, 'd', path);\r\n\r\n        this.redrawSourceInfo();\r\n        this.redrawTargetInfo();\r\n    }\r\n\r\n    protected redrawSourceInfo() {\r\n        if (this.sourceInfo) {\r\n            let newPosOfSrc = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.redrawFromEdge(newPosOfSrc);\r\n        }\r\n    }\r\n\r\n    protected redrawTargetInfo() {\r\n        if (this.targetInfo) {\r\n            let newPosOfTarget = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.redrawFromEdge(newPosOfTarget);\r\n        }\r\n    }\r\n\r\n    protected getDirectionOfPointToNode(node: Node, pointNearNode: Point): Direction {\r\n        /*\r\n            Example to calculate the direction of nearest point to Node\r\n\r\n            node\r\n         x1_ _ _ _\r\n          |       |\r\n          |       |. pointNearNode\r\n          |       |\r\n          |_ _ _ x2\r\n\r\n          the calculation would return Direction.Left\r\n        */\r\n\r\n        let x1: Point = node.getPos();\r\n        let x2: Point = new Point((x1.x + node.getSize().x), (x1.y + node.getSize().y));\r\n        let direction: Direction = Direction.Down;\r\n\r\n        if (x1.y >= pointNearNode.y) {\r\n            direction = Direction.Down;\r\n        }\r\n        if (x2.y <= pointNearNode.y) {\r\n            direction = Direction.Up;\r\n        }\r\n        if (x1.x >= pointNearNode.x) {\r\n            direction = Direction.Right;\r\n        }\r\n        if (x2.x <= pointNearNode.x) {\r\n            direction = Direction.Left;\r\n        }\r\n\r\n        return direction;\r\n    }\r\n\r\n    private updateCardinality(node: Node, infoText: InfoText, cardinality: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'cardinality': cardinality });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.cardinality = cardinality;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateCardinality(cardinality);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private updateProperty(node: Node, infoText: InfoText, property: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'property': property });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.property = property;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateProperty(property);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private calcIntersection(startNode: Node, recalcPoint: Point, endPoint: Point): Point {\r\n\r\n        // https://www.mathelounge.de/21534/schnittpunkt-einer-linie-mit-den-randern-eines-rechtecks\r\n        let h = startNode.getSize().y;\r\n        let w = startNode.getSize().x;\r\n\r\n        let x1: number = startNode.getPos().x + (w / 2);\r\n        let y1: number = startNode.getPos().y + (h / 2);\r\n\r\n        let x2: number = endPoint.x;\r\n        let y2: number = endPoint.y;\r\n\r\n        let newX: number = recalcPoint.x;\r\n        let newY: number = recalcPoint.y;\r\n\r\n        if (x2 > x1) {\r\n            newX = x1 + (w / 2);\r\n        }\r\n        else if (x2 < x1) {\r\n            newX = x1 - (w / 2);\r\n        }\r\n        else {\r\n            newX = x1;\r\n        }\r\n\r\n        if ((x2 - x1) !== 0) {\r\n            newY = ((y2 - y1) / (x2 - x1) * (newX - x1)) + y1;\r\n        }\r\n        else {\r\n            if (y1 > y2) {\r\n                newY = startNode.getPos().y;\r\n            }\r\n            else {\r\n                newY = startNode.getPos().y + h;\r\n            }\r\n        }\r\n\r\n        // if the statement is not true, so the intersection is at the horizontal line\r\n        if (!((y1 - (h / 2) <= newY) && newY <= y1 + (h / 2))) {\r\n\r\n            if (y2 > y1) {\r\n                newY = y1 + (h / 2);\r\n            }\r\n            else {\r\n                newY = y1 - (h / 2);\r\n            }\r\n\r\n            if ((x2 - x1) !== 0) {\r\n                let tmp = ((y2 - y1) / (x2 - x1));\r\n                newX = (newY + (tmp * x1) - y1) / tmp;\r\n            }\r\n            else {\r\n                newX = x1;\r\n            }\r\n        }\r\n\r\n        recalcPoint.x = Math.ceil(newX);\r\n        recalcPoint.y = Math.ceil(newY);\r\n\r\n        return null;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Composition extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'black');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { Association } from './Association';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\nimport { Direction } from '../index';\r\n\r\nexport class Generalisation extends Association {\r\n\r\n    public $TARGET_ELEMENT_HEIGHT : number = 12;\r\n    protected $targetElement: Element;\r\n\r\n    public getSVG(): Element {\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction : Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled arrow\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'white'\r\n          };\r\n\r\n        this.$targetElement = this.createShape(attr);\r\n\r\n        group.appendChild(this.$targetElement);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean) : void {\r\n\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint : Point = this.$points[0];\r\n        let direction : Direction = Direction.Up;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if(this.$sNode.id === startNode.id || this.$points.length == 2){\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$targetElement.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint : Point, direction : Direction) : string{\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch(direction){\r\n            case Direction.Up:\r\n            path = `M${startX} ${startY+3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y+12;\r\n            break;\r\n            case Direction.Right:\r\n            path = `M${startX-3} ${startY} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x-12;\r\n            break;\r\n            case Direction.Left:\r\n            path = `M${startX+3} ${startY} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x+12;\r\n            break;\r\n            case Direction.Down:\r\n            path = `M${startX} ${startY-3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y-12;\r\n            break;\r\n            default :\r\n            break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n\r\n}\r\n","import { Generalisation } from './Generalisation';\r\n\r\nexport class Implements extends Generalisation {\r\n\r\n    public getSVG(): Element {\r\n        let group = super.getSVG();\r\n\r\n        this.$pathSvg.setAttributeNS(null, 'stroke-dasharray', '3, 3');\r\n\r\n        return group;\r\n    }\r\n}\r\n","export * from './Association';\r\nexport * from './Aggregate';\r\nexport * from './Aggregation';\r\nexport * from './Composition';\r\nexport * from './Generalisation';\r\nexport * from './Implements';","export * from './edges';\r\nexport * from './nodes';\r\nexport * from './BaseElements';\r\nexport * from './Graph';\r\nexport * from './Model';\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Attribute extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 28.06.2017.\r\n */\r\nimport {Control} from \"../../Control\";\r\n\r\nexport class AutoComplete extends Control {\r\n    private $inputField:HTMLInputElement;\r\n    private $dataList:HTMLDataListElement;\r\n    private $selected:HTMLSelectElement;\r\n    private $items:HTMLDivElement;\r\n    private isMultiple:boolean;\r\n\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        let div:HTMLDivElement = document.createElement('div');\r\n        this.$view = div;\r\n        this.$inputField = document.createElement('input');\r\n        this.$dataList = document.createElement(\"datalist\");\r\n        this.$dataList.id = \"data_\"+this.id;\r\n        this.$inputField.setAttribute(\"list\", \"data_\"+this.id);\r\n        if(data[\"value\"]) {\r\n            let values = data[\"value\"];\r\n            this.isMultiple = data[\"multiple\"] != null;\r\n            let option:HTMLOptionElement;\r\n            if(this.isMultiple) {\r\n                this.$selected = document.createElement(\"select\");\r\n                this.$selected.className = \"hide\";\r\n                this.$selected.multiple = true;\r\n\r\n                this.$selected.id = this.id;\r\n                this.$items = document.createElement(\"div\");\r\n                this.$items.className = \"selectedList\";\r\n                div.appendChild(this.$items);\r\n                this.$inputField.className = \"selectedInput\";\r\n                div.appendChild(this.$selected);\r\n                this.$view[\"style\"].setProperty(\"float\", \"left\");\r\n                let that = this;\r\n                this.$inputField.oninput = function(){that.onChange();}\r\n            } else {\r\n                this.$inputField.id = this.id;\r\n            }\r\n            for (let attr in values) {\r\n                if (!values.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                option = document.createElement(\"option\");\r\n                option.value = values[attr];\r\n                this.$dataList.appendChild(option);\r\n                if(this.isMultiple) {\r\n                    option = document.createElement(\"option\");\r\n                    option.value = values[attr];\r\n                    option.innerHTML = values[attr];\r\n                    this.$selected.appendChild(option);\r\n                }\r\n        }\r\n\r\n            div.appendChild(this.$inputField);\r\n            div.appendChild(this.$dataList);\r\n        }\r\n\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n            if(this.isMultiple) {\r\n                div.appendChild(this.$selected);\r\n            }\r\n        }\r\n\r\n        parent.appendChild(this);\r\n    }\r\n\r\n    public onChange() : void {\r\n        let textValue:string = this.$inputField.value;\r\n        if(textValue.length<1) {\r\n            return;\r\n        }\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == textValue) {\r\n                if(item.selected == false) {\r\n                    item.selected = true;\r\n                    item.defaultSelected = true;\r\n                    let test = document.createElement(\"li\");\r\n                    let that = this;\r\n                    test.onclick = function() {that.onDelete(item.value, test);};\r\n                    test.className = \"selectedItem\";\r\n                    test.innerHTML = item.value;\r\n                    this.$items.appendChild(test);\r\n                    this.$inputField.value = \"\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n    public onDelete(value:string, selectedItem:HTMLLIElement) : void {\r\n        this.$items.removeChild(selectedItem);\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == value ) {\r\n                if(item.selected) {\r\n                    item.selected = false;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","import {Control} from '../../Control';\r\n\r\nexport class BR extends Control {\r\n    public load(json: JSON): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('br');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            this.$view.setAttribute(attr, data[attr]);\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\nexport class Button extends Control {\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        this.$view = document.createElement('button');\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\nimport { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\nimport { Size } from '../index';\r\nimport ClazzProperty from './ClazzProperty';\r\nimport {SymbolLibary} from './Symbol';\r\nimport {StereoType} from './StereoType';\r\nimport {GraphListener} from '../../handlers/GraphListener';\r\n\r\nexport class Class extends Node {\r\n    public attributes: Attribute[] = [];\r\n    public methods: Method[] = [];\r\n    public modifier: string;\r\n    public stereoType: string;\r\n\r\n    protected $attrHeight = 25;\r\n    protected $attrFontSize = 12;\r\n    protected $labelView: Element;\r\n\r\n    constructor(json: JSON | string | Object | any) {\r\n        super(json);\r\n        return this;\r\n    }\r\n\r\n    public load(json?: any) {\r\n        if (!json) {\r\n            json = {};\r\n        }\r\n        let y = this.$labelHeight;\r\n        let labelObj = json.name || json.id || ('New ' + this.property);\r\n\r\n        let width: number = 150;\r\n        width = Math.max(width, Util.sizeOf(labelObj).width + 60);\r\n\r\n        if (json['attributes']) {\r\n            for (let attr of json['attributes']) {\r\n\r\n                let attrObj = new Attribute(attr);\r\n                attrObj.$owner = this;\r\n                this.attributes.push(attrObj);\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(attrObj.toString()).width);\r\n                let listener = new GraphListener(attrObj);\r\n                attrObj.$data.addListener(listener);\r\n            }\r\n        }\r\n        if (json['stereotype']) {\r\n            this.stereoType = json['stereotype'];\r\n        }\r\n        if (json['methods']) {\r\n            for (let method of json['methods']) {\r\n\r\n                let methodObj = new Method(method);\r\n                methodObj.$owner = this;\r\n                this.methods.push(methodObj);\r\n\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(methodObj.toString()).width);\r\n            }\r\n            y += this.$attrHeight;\r\n        }\r\n        this.withSize(width, y);\r\n    }\r\n\r\n    public getAttributes(): Attribute[] {\r\n        return this.attributes;\r\n    }\r\n\r\n    public getMethods(): Method[] {\r\n        return this.methods;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        let icon = SymbolLibary.draw({type: 'Class', property: 'HTML', width: '50', height: '50', transform: 'translate(-26,-21)'});\r\n        return icon;\r\n        // let group = this.createShape(\r\n//    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n//    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos: Point = this.getPos();\r\n        const size: Point = this.getSize();\r\n\r\n        let group = this.createShape({ tag: 'g', id: this.id, class: 'SVGClazz', transform: 'translate(0 0)' });\r\n\r\n        if (this.stereoType) {\r\n            let type = new StereoType(this.stereoType, pos.x, pos.y);\r\n            group.appendChild(type.getSVG());\r\n        }\r\n\r\n        // Full Shape\r\n        let options = null;\r\n        let style;\r\n        let clazzName;\r\n        if (this.$owner['options']) {\r\n            let options = this.$owner['options'];\r\n            if (options) {\r\n                style = options.style;\r\n            }\r\n        }\r\n        // = = = Background = = =\r\n        if (style === 'modern') {\r\n            clazzName = 'ClazzHeader';\r\n        }\r\n        clazzName = 'ClazzHeader';\r\n        const nodeShape = this.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            height: size.y,\r\n            width: size.x,\r\n            rx: 5,\r\n            ry: 5,\r\n            fill: 'none',\r\n            stroke: 'black',\r\n            'stroke-width': 1\r\n        });\r\n        if (clazzName) {\r\n            nodeShape.setAttribute('className', clazzName);\r\n            let styleHeader = Util.getStyle('ClazzHeader');\r\n            // headerHeight = styleHeader.getNumber('height');\r\n        }\r\n\r\n        // = = = LABEL = = =\r\n        let label = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y + this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': this.$labelFontSize,\r\n            fill: 'black'\r\n        });\r\n        label.textContent = this.id;\r\n        this.$labelView = label;\r\n\r\n        group.appendChild(nodeShape);\r\n        group.appendChild(label);\r\n\r\n        // = = = ATTRIBUTES = = =\r\n        if (this.attributes.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorLabelAttr = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight,\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight,\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorLabelAttr);\r\n\r\n            let groupOfAttributes = this.createShape({ tag: 'g', id: (this.id + 'Attributes') });\r\n            groupOfAttributes.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzAttribute');\r\n            group.appendChild(groupOfAttributes);\r\n\r\n            let y = pos.y + this.$labelHeight + this.$attrHeight / 2;\r\n            for (let attr of this.attributes) {\r\n\r\n                let attrSvg = attr.getSVG();\r\n                attr.$owner = this;\r\n\r\n                attrSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                attrSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfAttributes.appendChild(attrSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        // = = = METHODS = = =\r\n        let height = this.attributes.length * this.$attrHeight;\r\n        let y = pos.y + this.$labelHeight + height + this.$attrHeight / 2;\r\n        if (this.methods.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorAttrMethods = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorAttrMethods);\r\n\r\n            let groupOfMethods = this.createShape({ tag: 'g', id: (this.id + 'Methods') });\r\n            groupOfMethods.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzMethod');\r\n            group.appendChild(groupOfMethods);\r\n\r\n            y += this.$attrHeight / 2;\r\n            for (let method of this.methods) {\r\n\r\n                let methodSvg = method.getSVG();\r\n                method.$owner = this;\r\n\r\n                methodSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                methodSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfMethods.appendChild(methodSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        this.$view = group;\r\n        return group;\r\n    }\r\n\r\n    public copy(): Class {\r\n        let copy: Class;\r\n        copy = <Class>super.copy();\r\n\r\n        // copy label\r\n        copy.id = this.id + 'Copy';\r\n\r\n        // copy attributes\r\n        this.attributes.forEach(attr => {\r\n            copy.attributes.push(new Attribute(attr.toString()));\r\n        });\r\n        // copy methods\r\n        this.methods.forEach(method => {\r\n            copy.methods.push(new Method(method.toString()));\r\n        });\r\n        copy.reCalcSize();\r\n\r\n        return copy;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTCLICK,\r\n                EventBus.ELEMENTDRAG, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES, EventBus.RELOADPROPERTIES];\r\n    }\r\n\r\n    public addProperty(value: string, type: string): any {\r\n        if (!this[type] || !value || value.length === 0) {\r\n            return;\r\n        }\r\n\r\n        let extractedValue;\r\n        if (type === 'attributes') {\r\n            extractedValue = new Attribute(value);\r\n        }\r\n        else if (type === 'methods') {\r\n            extractedValue = new Method(value);\r\n        }\r\n\r\n        for (let valueOfType of this[type]) {\r\n            if (valueOfType.toString() === extractedValue.toString()) {\r\n                alert(extractedValue.toString() + ' already exists.');\r\n                extractedValue = undefined;\r\n                return;\r\n            }\r\n        }\r\n\r\n        this[type].push(extractedValue);\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        return extractedValue;\r\n    }\r\n\r\n    public addAttribute(value: string): Attribute {\r\n        return this.addProperty(value, 'attributes');\r\n    }\r\n\r\n    public addAttributeObj(attr: Attribute): Attribute[] {\r\n        this.attributes.push(attr);\r\n        return this.getAttributes();\r\n    }\r\n\r\n    public addMethodObj(method: Method): Method[] {\r\n        this.methods.push(method);\r\n        return this.getMethods();\r\n    }\r\n\r\n    public addMethod(value: string): Method {\r\n        return this.addProperty(value, 'methods');\r\n    }\r\n\r\n    public removeAttribute(attr: Attribute): void {\r\n        let idx = this.attributes.indexOf(attr);\r\n        this.attributes.splice(idx, 1);\r\n    }\r\n\r\n    public removeMethod(method: Method): void {\r\n        let idx = this.methods.indexOf(method);\r\n        this.methods.splice(idx, 1);\r\n    }\r\n\r\n    public removeProperty(property: ClazzProperty): void {\r\n\r\n        if (property instanceof Attribute) {\r\n            this.removeAttribute(<Attribute>property);\r\n        }\r\n\r\n        if (property instanceof Method) {\r\n            this.removeMethod(<Method>property);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n        let hasSizeChanged: [boolean, Size] = this.hasSizeChanged();\r\n\r\n        if (drawOnlyIfSizeChanged) {\r\n            if (!hasSizeChanged[0]) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n\r\n        // redraw only this clazz\r\n        this.$owner.$view.removeChild(this.$view);\r\n        let newSvg = this.getSVG();\r\n        this.$owner.$view.appendChild(newSvg);\r\n        this.$view = newSvg;\r\n        EventBus.register(this, newSvg);\r\n\r\n        this.redrawEdges();\r\n    }\r\n\r\n    public hasSizeChanged(): [boolean, Size] {\r\n        let oldSize = { width: this.getSize().x, height: this.getSize().y };\r\n        let newSize = this.reCalcSize();\r\n\r\n        // size doenst changed, so nothing to redraw\r\n        if (oldSize.width === newSize.width && oldSize.height === newSize.height) {\r\n            return [false, newSize];\r\n        }\r\n\r\n        return [true, newSize];\r\n    }\r\n\r\n    public updateLabel(newLabel: string): void {\r\n        if (this.$labelView) {\r\n            this.$labelView.textContent = newLabel;\r\n        }\r\n\r\n        // update label in all edges\r\n        this.$edges.forEach(edge => {\r\n            if (this.id === edge.$sNode.id) {\r\n                edge.source = newLabel;\r\n            }\r\n            else if (this.id === edge.$tNode.id) {\r\n                edge.target = newLabel;\r\n            }\r\n        });\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        this.reDraw(true);\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.modifier = modifier;\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reCalcSize(): Size {\r\n        // label\r\n        let newWidth = 150;\r\n        newWidth = Math.max(newWidth, Util.sizeOf(this.id).width + 30);\r\n\r\n        // attributes\r\n        this.attributes.forEach(attrEl => {\r\n\r\n            let widthOfAttr;\r\n            if (attrEl.$view) {\r\n                widthOfAttr = attrEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfAttr = Util.sizeOf(attrEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfAttr + 15);\r\n        });\r\n\r\n        // methods\r\n        this.methods.forEach(methodEl => {\r\n            let widthOfMethod;\r\n            if (methodEl.$view) {\r\n                widthOfMethod = methodEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfMethod = Util.sizeOf(methodEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfMethod + 15);\r\n        });\r\n\r\n        // TODO: height has to be calculated by font-size\r\n        this.getSize().x = newWidth;\r\n        this.getSize().y = this.$labelHeight + ((this.attributes.length + this.methods.length) * this.$attrHeight)\r\n            + this.$attrHeight;\r\n\r\n        let newSize = { width: newWidth, height: this.getSize().y };\r\n\r\n        return newSize;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    private getModernStyle(): Element {\r\n        let width, height, id, size, z, item, rect, g, board, styleHeader, headerHeight, x, y;\r\n        board = this.getRoot()['board'];\r\n        styleHeader = Util.getStyle('ClazzHeader');\r\n        headerHeight = styleHeader.getNumber('height');\r\n        width = 0;\r\n        height = 10 + headerHeight;\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].getType().toLowerCase() === 'objectdiagram') {\r\n            id = this.id.charAt(0).toLowerCase() + this.id.slice(1);\r\n            item = 'Object';\r\n        } else {\r\n            id = this.id;\r\n            item = 'Class';\r\n            if (this['counter']) {\r\n                id += ' (' + this['counter'] + ')';\r\n            }\r\n        }\r\n        g = Util.create({tag: 'g', model: this});\r\n        size = Util.sizeOf(id, this);\r\n        width = Math.max(width, size.width);\r\n        if (this.attributes && this.attributes.length > 0) {\r\n            height = height + this.attributes.length * 25;\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.attributes[z], this).width);\r\n            }\r\n        } else {\r\n            height += 20;\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            height = height + this.methods.length * 25;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.methods[z], this).width);\r\n            }\r\n        }\r\n        width += 20;\r\n\r\n        let pos = this.getPos();\r\n        y = pos.y;\r\n        x = pos.x;\r\n\r\n        rect = {\r\n            tag: 'rect',\r\n            'width': width,\r\n            'height': height,\r\n            'x': x,\r\n            'y': y,\r\n            'class': item + ' draggable',\r\n            'fill': 'none'\r\n        };\r\n        g.appendChild(Util.create(rect));\r\n        g.appendChild(Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            'x': x,\r\n            'y': y,\r\n            height: headerHeight,\r\n            'width': width,\r\n            'class': 'ClazzHeader'\r\n        }));\r\n\r\n        item = Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'class': 'InfoText',\r\n            'text-anchor': 'right',\r\n            'x': x + width / 2 - size.width / 2,\r\n            'y': y + (headerHeight / 2) + (size.height / 2),\r\n            'width': size.width\r\n        });\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].type.toLowerCase() === 'objectdiagram') {\r\n            item.setAttribute('text-decoration', 'underline');\r\n        }\r\n        item.appendChild(document.createTextNode(id));\r\n\r\n        g.appendChild(item);\r\n        g.appendChild(Util.create({\r\n            tag: 'line',\r\n            x1: x,\r\n            y1: y + headerHeight,\r\n            x2: x + width,\r\n            y2: y + headerHeight,\r\n            stroke: '#000'\r\n        }));\r\n        y += headerHeight + 20;\r\n\r\n        if (this.attributes) {\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': (x + 10),\r\n                    'y': y,\r\n                    value: this.attributes[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n            if (this.attributes.length > 0) {\r\n                y -= 10;\r\n            }\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            g.appendChild(Util.create({tag: 'line', x1: x, y1: y, x2: x + width, y2: y, stroke: '#000'}));\r\n            y += 20;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': x + 10,\r\n                    'y': y,\r\n                    value: this.methods[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n        }\r\n        return g;\r\n    }\r\n}\r\n","import {Util} from '../../util';\r\nimport {DiagramElement} from '../BaseElements';\r\nimport Data from '../../Data';\r\n\r\nexport default class ClazzProperty extends DiagramElement {\r\n\r\n    // Public (+)\r\n    // Private (-)\r\n    // Protected (#)\r\n    // Package (~)\r\n\r\n    public $data = new Data();\r\n//    public modifier: string = '+';\r\n//    public name: string;\r\n//    public type: string;\r\n//    public value: string;\r\n\r\n    constructor(data: any | JSON) {\r\n        super();\r\n        this.$data.setValue('modifier', '+');\r\n        this.$data.setValue('name', null);\r\n        this.$data.setValue('type', null);\r\n        this.$data.setValue('value', null);\r\n        this.extractData(data);\r\n    }\r\n\r\n    public update(data: any | JSON): void {\r\n        this.extractData(data);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.$data.setValue('modifier', modifier);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateType(type: string): void {\r\n        this.$data.setValue('type', type);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateValue(value: string): void {\r\n        this.$data.setValue('value', value);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateName(name: string): void {\r\n        this.$data.setValue('name', name);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public getName(): string {\r\n        return this.$data.getValue('name');\r\n    }\r\n\r\n    public getModifier(): string {\r\n        return this.$data.getValue('modifier');\r\n    }\r\n\r\n    public getType(): string {\r\n        return this.$data.getValue('type');\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let attrText = {\r\n            tag: 'text',\r\n            'text-anchor': 'start',\r\n            'alignment-baseline': 'middle',\r\n        };\r\n\r\n        let attrSvg = Util.createShape(attrText);\r\n        attrSvg.textContent = this.toString();\r\n\r\n        this.$view = attrSvg;\r\n\r\n        return attrSvg;\r\n    }\r\n\r\n    public toString(): string {\r\n        let value = this.$data.getValue('value');\r\n        let result = this.$data.getValue('modifier') + ' ';\r\n        result += this.$data.getValue('name') + ' : ';\r\n        result += this.$data.getValue('type');\r\n        if (value && value.length > 0) {\r\n            result += ' = ' + this.$data.getValue('value');\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.$data.setValue('type', data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.$data.setValue('name', data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.$data.setValue('modifier', data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n\r\n            // e.g. name : string or name:string\r\n            let dataSplitted = data.split(':');\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                let name;\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.$data.setValue('modifier', firstChar);\r\n                    name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                }\r\n                else {\r\n                    name = modifierAndNameSplitted;\r\n                }\r\n                // delete whitespaces in name\r\n                name = name.replace(/ /g, '_');\r\n\r\n                this.$data.setValue('name', name);\r\n                let type = dataSplitted[1].trim() || 'String';\r\n\r\n                // if the type was entered with a small begin letter\r\n                if (type.toLowerCase() === 'string') {\r\n                    type = 'String';\r\n                }\r\n                // delete whitespaces in type\r\n                type = type.replace(/ /g, '_');\r\n                this.$data.setValue('type',  type);\r\n            } else {\r\n                dataSplitted = data.split('=');\r\n                if (dataSplitted && dataSplitted.length === 2) {\r\n                    // modifer (and or) name\r\n                    let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                    // first char is +, - or #\r\n                    let firstChar = modifierAndNameSplitted[0];\r\n                    let name;\r\n                    if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                        this.$data.setValue('modifier', firstChar);\r\n                        name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                    }\r\n                    else {\r\n                        name = modifierAndNameSplitted;\r\n                    }\r\n                    // delete whitespaces in name\r\n                    name = name.replace(/ /g, '_');\r\n\r\n                    this.$data.setValue('name', name);\r\n                    let value = dataSplitted[1].trim() || '\"\"';\r\n                    this.$data.setValue('value', value);\r\n                    this.$data.setValue('type', typeof value);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected updateTextOfView() {\r\n        if (this.$view) {\r\n            this.$view.textContent = this.toString();\r\n        }\r\n        if (this.$owner) {\r\n            Util.saveToLocalStorage(this.$owner.$owner);\r\n        }\r\n    }\r\n}\r\n","import {Node} from \"./Node\";\r\n/**\r\n * Created by Stefan on 29.03.2017.\r\n */\r\n\r\nexport class Dice extends Node {\r\n    private value: number;\r\n    private max: number = 6;\r\n    private $animation: SVGElement;\r\n    private $zoom: number = 0.6;\r\n    private $border: number = 0.2;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super(data);\r\n        this.withSize(100, 100);\r\n    }\r\n\r\n    public setNumber(number: number) {\r\n        this.value = number;\r\n        this.refresh();\r\n    }\r\n\r\n    public refresh() {\r\n        if (this.$view) {\r\n            this.reset();\r\n            let group = this.createPointValue();\r\n            if (group) {\r\n                this.$view.appendChild(group);\r\n            }\r\n        }\r\n    }\r\n\r\n    public reset() {\r\n        if (this.$view) {\r\n            while (this.$view.children.length > 1) {\r\n                if(this.$view.children.item(this.$view.children.length - 1).tagName!== \"animateTransform\") {\r\n                    console.log(this.$view.children.item(this.$view.children.length - 1));\r\n                    this.$view.removeChild(this.$view.children.item(this.$view.children.length - 1));\r\n                }else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let dice: SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x + size.x * this.$border,\r\n            y: pos.y + size.y * this.$border,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y * this.$zoom,\r\n            width: size.x * this.$zoom,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        dice.appendChild(this.createShape(attr));\r\n\r\n        let group = this.createPointValue();\r\n        if (group) {\r\n            dice.appendChild(group);\r\n        }\r\n\r\n        this.$view = dice;\r\n        return dice;\r\n    }\r\n\r\n    public animationTimeout(newValues: number[]) {\r\n        if(newValues.length>0) {\r\n            let newValue = newValues.shift();\r\n            this.setNumber(newValue);\r\n            let that=this;\r\n            setTimeout(function() {that.animationTimeout(newValues)}, 100);\r\n        }\r\n    }\r\n\r\n    public roll() {\r\n        this.startAnimation();\r\n        let values:number[]=[];\r\n        let i:number;\r\n        for(i=1;i<this.max;i++) {\r\n            values.push(i);\r\n        }\r\n        for(i=this.max;i>0;i--) {\r\n            values.push(i);\r\n        }\r\n        let that=this;\r\n        values.push( Math.floor(Math.random() * this.max)+1 );\r\n        setTimeout(function() {that.animationTimeout(values)}, 100);\r\n    }\r\n    public startAnimation() {\r\n        if(this.$animation) {\r\n            return;\r\n        }\r\n        let center = this.getPos().x+this.getSize().x /2;\r\n        const attr = {\r\n            tag: 'animateTransform',\r\n            attributeType: \"xml\",\r\n            attributeName:\"transform\",\r\n            type:\"rotate\",\r\n            dur: \"1s\",\r\n            repeatCount:\"1\",\r\n            from:\"0 \"+center+\" \"+center,\r\n            to:\"360 \"+center+\" \"+center\r\n        };\r\n        this.$animation = <SVGElement>this.createShape(attr);\r\n        this.$view.appendChild(this.$animation);\r\n    }\r\n\r\n    public stopAnimation() {\r\n        if(this.$animation) {\r\n            this.$view.removeChild(this.$animation);\r\n            this.$animation = null;\r\n        }\r\n    }\r\n\r\n    public createPointValue() :SVGElement {\r\n        if (this.value == 1) {\r\n           return this.getCircle(2, 2);\r\n        } else if (this.value == 2) {\r\n            return this.getCircle(1, 1, 3, 3);\r\n        } else if (this.value == 3) {\r\n            return this.getCircle(1, 1, 2, 2, 3, 3);\r\n        } else if (this.value == 4) {\r\n            return this.getCircle(1, 1, 1, 3, 3, 1, 3, 3);\r\n        } else if (this.value == 5) {\r\n            return this.getCircle(1, 1, 1, 3, 2, 2, 3, 1, 3, 3);\r\n        } else if (this.value == 6) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 7) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 2, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 8) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 9) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private getCircle(...values:number[]) : SVGElement {\r\n        if (values.length % 2 > 0) {\r\n            return null;\r\n        }\r\n        let size = this.getSize();\r\n        let pos = this.getPos();\r\n        //FIXME let group:SVGElement = <SVGElement>this.createShape({tag: 'g', transform: 'translate(0 0)', height: size.y, width: size.x});\r\n        let group:SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n\r\n\r\n        for (let i: number = 0; i < values.length; i += 2) {\r\n            group.appendChild(this.createCircle(values[i], values[i + 1]));\r\n        }\r\n        return group;\r\n    }\r\n    private createCircle(x:number, y:number) : SVGElement {\r\n        let size = this.getSize();\r\n        let radius = size.x / 10*this.$zoom;\r\n        let border = size.y*this.$border;\r\n        let zoom = size.y*this.$zoom;\r\n        const attr = {\r\n            tag: 'circle',\r\n            r : radius,\r\n            cx: (size.x*this.$zoom * x) / 4 + border,\r\n            cy: (size.y*this.$zoom * y) / 4 + border,\r\n            stroke:\"black\",\r\n            \"stroke-width\":\"3\",\r\n            fill:\"red\",\r\n            style: 'fill:black;stroke:black;stroke-width:2'\r\n        };\r\n        return <SVGElement>this.createShape(attr);\r\n    }\r\n}","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\n\r\nexport class Div extends Control {\r\n    private className: string;\r\n\r\n    public load(data:JSON|any): any {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = <string>data;\r\n        } else {\r\n            id = data.id;\r\n            this.className = data.class;\r\n            this.property = data.property;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let div: HTMLElement = document.getElementById(id);\r\n\r\n        if (!this.property) {\r\n            // if(inputField){\r\n            // TODO disuss how to decide, which property we should listen on...\r\n            // this.property = id;\r\n            this.property = div.getAttribute('Property');\r\n            // }\r\n        }\r\n\r\n        if (div instanceof HTMLDivElement) {\r\n            this.$view = div;\r\n        } else {\r\n            if (!div) {\r\n                this.$view = document.createElement('div');\r\n                this.$view.setAttribute('id', this.id);\r\n                this.$view.setAttribute('property', this.property);\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists+\r\n        if (data.hasOwnProperty('property')) {\r\n            this.setProperty(data['property']);\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        this.$model = entity;\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.className || entity.hasProperty(this.className)) {\r\n                if (entity.id === this.property.split('.')[0]) {\r\n                    entity.addListener(this, this.className);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        this.$view.innerHTML = <string>newValue;\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Form extends Control {\r\n    // private applyingChange: boolean = false;\r\n    private children: Object = {};\r\n    // private property: string = \"\";\r\n\r\n    /**\r\n     * Data should look like the following json:\r\n     *\r\n     * <pre>{\r\n     *      id: \"t1\",\r\n     *      control: \"form\",\r\n     *      elements: [\r\n     *          {id: \"inputField1\", property: \"talk\"},\r\n     *          {id: \"inputField2\", property: \"room\"}\r\n     *      ]\r\n     * }</pre>\r\n     * @param data\r\n     */\r\n    public load(data: any) {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let form: HTMLElement = document.getElementById(id);\r\n\r\n        if (form instanceof HTMLFormElement) {\r\n            this.$view = form;\r\n            if (this.$view.hasAttribute('property')) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            if (!form) {\r\n                this.$view = document.createElement('form');\r\n                this.$view.setAttribute('id', this.id);\r\n\r\n                if (data.hasOwnProperty('property')) {\r\n                    this.property = data['property'];\r\n                }\r\n\r\n                // add all the attributes to the form element\r\n                for (let attr in data) {\r\n                    if (data.hasOwnProperty(attr) === false) {\r\n                        continue;\r\n                    }\r\n                    if (attr === 'elements') {\r\n                        continue;\r\n                    }\r\n                    this.$view.setAttribute(attr, data[attr]);\r\n                }\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists\r\n        let objId = this.property;\r\n        let hasItem = this.$owner.hasItem(objId);\r\n        if (hasItem) {\r\n            let item = this.$owner.getItem(objId);\r\n            item.addListener(this);\r\n            this.$model = item;\r\n        }\r\n\r\n        // now create all the sub input controls\r\n        for (let field of data.elements) {\r\n            // this.createField(field);\r\n            if (field.hasOwnProperty('property')) {\r\n                let property = field['property'];\r\n                property = this.property + '.' + property;\r\n                field['property'] = property;\r\n            }\r\n            if (!field.hasOwnProperty('class')) {\r\n                field['class'] = 'input';\r\n            }\r\n\r\n            // let the Bridge load the subControl\r\n            let control: Control = this.$owner.load(field, this);\r\n\r\n            // add subControl to children\r\n            this.children[control.getId()] = control;\r\n        }\r\n\r\n    }\r\n\r\n    public setProperty(id: string): void {\r\n        this.property = id;\r\n        let keys: string[] = Object.keys(this.children);\r\n        for (let k = 0; k < keys.length; k++) {\r\n            let key = keys[k];\r\n            let childControl = this.children[key];\r\n            // only set Property, if there is a Property defined before\r\n            if (childControl.property) {\r\n                childControl.setProperty(this.property + '.' + childControl.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object,  oldValue?: Object): boolean {\r\n        if (this.$owner != null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    /**\r\n     * Here we create the form elements and put all the attributes to them in order for the Control only having to load\r\n     * the data were appending here. Alternative would be loading with the bridge and afterwards setting\r\n     * the owner to the form instead of the body..\r\n     * @param field\r\n     */\r\n    /*private createField(field: Object) {\r\n     let control = 'input';\r\n     if (field.hasOwnProperty('class')) {\r\n     control = field['class'];\r\n     }\r\n     let input = document.createElement(control);\r\n     input.setAttribute('class', control);\r\n     let id: string;\r\n     if (!field.hasOwnProperty('id')) {\r\n     // TODO: not the best solution for generating unique id's for forms...\r\n     id = this.$owner.getId();\r\n     field['id'] = id;\r\n     }\r\n     if (field.hasOwnProperty('property')) {\r\n     let property = field['property'];\r\n     property = this.id + '.' + property;\r\n     input.setAttribute('property', property);\r\n     }\r\n     for (let attr in field) {\r\n     if (attr === 'property' || attr === 'class' || !field.hasOwnProperty(attr)) {\r\n     continue;\r\n     }\r\n     input.setAttribute(attr, field[attr]);\r\n     }\r\n\r\n     this.$viewElement.appendChild(input);\r\n\r\n     let newcontrol: Control = this.$owner.load(field['id']);\r\n     this.children[newcontrol.getId()] = newcontrol;\r\n     }*/\r\n}\r\n","/**\r\n * Created by Stefan on 01.03.2017.\r\n */\r\nimport {Control} from '../../Control';\r\n\r\nexport class HTML extends Control {\r\n    constructor(data: JSON|Object|any) {\r\n        super();\r\n\r\n        let id: string;\r\n        let tag: string;\r\n\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            data = {};\r\n        } else if (data) {\r\n            id = data.id;\r\n        }\r\n        if (id) {\r\n            this.id = id;\r\n            this.$view = document.getElementById(id);\r\n        }\r\n        if (!this.$view) {\r\n            if (data) {\r\n                tag = data['tag'] || 'div';\r\n            } else {\r\n                tag = 'div';\r\n            }\r\n            this.$view = document.createElement(tag);\r\n            let parent = document.getElementsByTagName('body')[0];\r\n            parent.appendChild(this.$view);\r\n        }\r\n        if (!parent) {\r\n            return;\r\n        }\r\n        this.writeAttribute(data, this.$view);\r\n    }\r\n\r\n    private writeAttribute(properties: Object, entity?: any) {\r\n        let lowKey;\r\n        if (!entity) {\r\n            lowKey = properties['tag'] || 'div';\r\n            entity = document.createElement(lowKey);\r\n        }\r\n        for (let key in properties) {\r\n            if (!properties.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            lowKey = key.toLowerCase();\r\n            if (properties[key] === null) {\r\n                entity.setAttribute(key, '');\r\n                continue;\r\n            }\r\n\r\n            if (lowKey === 'tag' || lowKey.charAt(0) === '$' || lowKey === '$graphModel' || lowKey === 'class') {\r\n                continue;\r\n            }\r\n            if (lowKey === 'children') {\r\n                if (Array.isArray(properties[key])) {\r\n                    for (let item in properties[key]) {\r\n                        if (properties[key].hasOwnProperty(item) === false) {\r\n                            continue;\r\n                        }\r\n                        let child = this.writeAttribute(item);\r\n                        if (child) {\r\n                            entity.appendChild(child);\r\n                        }\r\n                    }\r\n                } else {\r\n                    let child = this.writeAttribute(properties[key]);\r\n                    if (child) {\r\n                        entity.appendChild(child);\r\n                    }\r\n                }\r\n                continue;\r\n            }\r\n            entity[key] = properties[key];\r\n        }\r\n        return entity;\r\n    }\r\n}\r\n","import { Point } from '../BaseElements';\r\nimport { Util } from '../../util';\r\nimport { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\n\r\nexport class InfoText extends Node {\r\n\r\n    public cardinality: string = '';\r\n    private $heightOfOneTextItem: number;\r\n    private $cardinalitySvg: Element;\r\n    private $propertySvg: Element;\r\n    private $rectBackground: Element;\r\n\r\n    constructor(info: any) {\r\n        super(info);\r\n        if (typeof (info) === 'string') {\r\n            this.id = info;\r\n        } else {\r\n            if (info.property) {\r\n                this.property = info.property;\r\n            }\r\n            if (info.cardinality) {\r\n                this.cardinality = info.cardinality;\r\n            }\r\n        }\r\n        this.$isDraggable = true;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n    }\r\n\r\n    public updateCardinality(cardinality: string): void {\r\n        this.cardinality = cardinality;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (this.$rectBackground) {\r\n            this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n            this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n        }\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((cardinality.length === 0 && this.property.length > 0) || !this.$cardinalitySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$cardinalitySvg) {\r\n            this.$cardinalitySvg.textContent = cardinality;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.property.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    public updateProperty(property: string): void {\r\n        this.property = property;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((property.length === 0 && this.cardinality.length > 0) || !this.$propertySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$propertySvg) {\r\n            this.$propertySvg.textContent = property;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.cardinality.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos: Point = this.getPos();\r\n        let group = Util.create({ tag: 'g', class: 'SVGEdgeInfo', transform: 'translate(0, 0)' });\r\n\r\n        // append rect as background for text items\r\n        this.$rectBackground = Util.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y - this.$heightOfOneTextItem + 3,\r\n            width: this.getSize().x,\r\n            height: this.getSize().y,\r\n            fill: '#DDD',\r\n            'stroke-width': 0,\r\n            rx: '5',\r\n            ry: '5'\r\n        });\r\n        group.appendChild(this.$rectBackground);\r\n\r\n        let y = pos.y;\r\n        if (this.property) {\r\n            // property\r\n            this.$propertySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$propertySvg.textContent = this.property;\r\n            group.appendChild(this.$propertySvg);\r\n\r\n            y += this.$heightOfOneTextItem;\r\n        }\r\n\r\n        // cardinality\r\n        if (this.cardinality) {\r\n            this.$cardinalitySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$cardinalitySvg.textContent = this.cardinality;\r\n            group.appendChild(this.$cardinalitySvg);\r\n        }\r\n\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        let cardinalityAvailable = this.cardinality && this.cardinality.length > 0;\r\n        let propertyAvailable = this.property && this.property.length > 0;\r\n\r\n        return !propertyAvailable && !cardinalityAvailable;\r\n    }\r\n\r\n    public redrawFromEdge(newPos: Point): void {\r\n\r\n        if (!newPos) {\r\n            return;\r\n        }\r\n\r\n        let oldPos = this.getPos();\r\n\r\n        // get difference between new and the old position\r\n        let diffPos = new Point();\r\n        diffPos.x = newPos.x - oldPos.x;\r\n        diffPos.y = newPos.y - oldPos.y;\r\n\r\n        // get translate information\r\n        let translation = this.$view.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        let sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        // set new traslation values\r\n        let newTransX = (sx + diffPos.x);\r\n        let newTransY = (sy + diffPos.y);\r\n        this.$view.setAttributeNS(null, 'transform', 'translate(' + newTransX + ' ' + newTransY + ')');\r\n\r\n        // set new position of svg\r\n        this.getPos().x = newPos.x;\r\n        this.getPos().y = newPos.y;\r\n    }\r\n\r\n    public getText(): string {\r\n        let infoTxt: string = '';\r\n\r\n        if (this.property) {\r\n            infoTxt = this.property;\r\n        }\r\n        if (this.cardinality) {\r\n            if (infoTxt.length > 0) {\r\n                infoTxt += '\\n';\r\n            }\r\n            infoTxt += this.cardinality;\r\n        }\r\n\r\n        return infoTxt;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    private calcSize(): Point {\r\n        let text: string = this.getText();\r\n        let items: Array<string> = text.split('\\n');\r\n\r\n        let maxSize = new Point(0, 0);\r\n        if (text.length === 0) {\r\n            return maxSize;\r\n        }\r\n\r\n        for (let i = 0; i < items.length; i += 1) {\r\n            // calculate size\r\n            let sizeOfText: ClientRect = Util.sizeOf(items[i]);\r\n            maxSize.x = Math.max(maxSize.x, sizeOfText.width);\r\n            maxSize.y += sizeOfText.height;\r\n\r\n            this.$heightOfOneTextItem = sizeOfText.height;\r\n        }\r\n\r\n        return maxSize;\r\n    }\r\n    private resetAllSvgElements() {\r\n        this.$cardinalitySvg = undefined;\r\n        this.$view = undefined;\r\n        this.$propertySvg = undefined;\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\nimport {PropertyBinder} from '../../PropertyBinder';\r\n\r\nexport class Input extends Control {\r\n    private type: string;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data = super.initViewDataProperties(oldData);\r\n        if ('checkbox' === this.type || 'radio' === this.type) {\r\n            data.addFrom('checked', oldData);\r\n        }\r\n        data.addFrom('value', oldData);\r\n        data.addFrom('type', oldData);\r\n        return data;\r\n    }\r\n\r\n    public load(data: any) {\r\n        let id: string;\r\n        let inputField: HTMLElement;\r\n        let useData: boolean;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            useData = true;\r\n        } else {\r\n            id = data.id;\r\n            if (data.type) {\r\n                this.setType(data['type']);\r\n            } else {\r\n                this.setType('text');\r\n            }\r\n            if (data.hasOwnProperty('property')) {\r\n                this.setProperty(data['property']);\r\n            }\r\n            useData = false;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n\r\n        inputField = document.getElementById(id);\r\n\r\n        if (useData) {\r\n            if (inputField) {\r\n                // TODO disuss how to decide, which property we should listen on...\r\n                // this.property = id;\r\n                if (inputField.hasAttribute('Property')) {\r\n                    this.setProperty(inputField.getAttribute('Property'));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (inputField instanceof HTMLInputElement) {\r\n            this.setView(inputField);\r\n            this.type = inputField.type;\r\n            // useData = false;\r\n        } else {\r\n            if (!inputField) {\r\n                this.setView(document.createElement('input'));\r\n                this.$viewData = this.initViewDataProperties(this.$viewData);\r\n                // append viewListener\r\n                // this.$view.addEventListener('change', this.$viewListener);\r\n                if (typeof(data) !== 'string') {\r\n                    for (let attr in data) {\r\n                        if (data.hasOwnProperty(attr) === false) {\r\n                            continue;\r\n                        }\r\n                        // this.$view[attr] = data[attr];\r\n                        this.$viewData.setValue(attr, data[attr]);\r\n                    }\r\n                } else {\r\n                    if (this.type) {\r\n                        this.$view.setAttribute('type', this.type);\r\n                    }\r\n                    if (data.hasOwnProperty('class')) {\r\n                        this.$view.setAttribute('class', data['class']);\r\n                    }\r\n                    this.$view.setAttribute('id', this.id);\r\n                    this.$view.setAttribute('property', this.property);\r\n                }\r\n\r\n                if (data.value) {\r\n                    // if theres a value at the control, we want to change the model to the new value\r\n                    if (this.$model) {\r\n                        this.$model.setValue(this.lastProperty, data.value);\r\n                    }\r\n                }\r\n                if (this.$model) {\r\n                    PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                }\r\n\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (this.property && entity) {\r\n            if (entity.id === this.property.split('.')[0]) {\r\n                this.$model = entity;\r\n                PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                // entity.addListener(this, this.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n    // TODO FIXME protected updateElement(property: string, value: string) {\r\n    //     if (this.$view instanceof HTMLInputElement) {\r\n    //         if (value != null) {\r\n    //             if(property == this.lastProperty) {\r\n    //                 (<HTMLInputElement>this.$view)[this.getStandardProperty()] = value;\r\n    //             } else {\r\n    //                 // this.getRoot().setValue(this, property, value, (<HTMLInputElement>this.$view)[property]);\r\n    //                 (<HTMLInputElement>this.$view)[property] = value;\r\n    //             }\r\n    //         } else {\r\n    //             delete (<HTMLInputElement>this.$view)[property];\r\n    //         }\r\n    //     }\r\n    // }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            super.controlChanged(ev);\r\n        }\r\n// <<<<<<< HEAD\r\n//             let newVal = element[this.getStandardProperty()];\r\n//             if (this.isKeyOnly()) {\r\n//                 // we expect, element[this.lastProperty] to be boolean:\r\n//                 if (!newVal) {\r\n//                     newVal = null;\r\n//                 }\r\n//             } else {\r\n//             }\r\n        // let $graphModel;\r\n        // let value;\r\n        /*if (this.$graphModel) {\r\n            $graphModel = this.$graphModel;\r\n            value = this.$graphModel.getValue(this.lastProperty);\r\n        } else {\r\n            $graphModel = this;\r\n            if (this.$view) {\r\n                value = this.$view[this.lastProperty];\r\n            }\r\n        }*/\r\n        // this.$model.setValue(this.lastProperty, newVal);\r\n        // this.propertyChange(this.$graphModel,this.lastProperty, this.$graphModel.getValue(this.lastProperty), newVal);\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n// =======\r\n        // let newVal = element[this.lastProperty];\r\n        // if (this.isKeyOnly()) {\r\n        //     // we expect, element[this.lastProperty] to be boolean:\r\n        //     if (!newVal) {\r\n        //         newVal = null;\r\n        //     }\r\n        // } else {\r\n        // }\r\n        // let $graphModel;\r\n        // let value;\r\n\r\n        // $graphModel = this.getViewData();\r\n        // if (this.$graphModel) {\r\n        //     $graphModel = this.$graphModel;\r\n        //     value = this.$graphModel.getValue(this.lastProperty);\r\n        // } else {\r\n        //     $graphModel = this;\r\n        //     if (this.$view) {\r\n        //         value = this.$view[this.lastProperty];\r\n        //     }\r\n        // }\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n//            this.saveViewInData();\r\n// >>>>>>> addOldFunctions\r\n//         } else {\r\n//             console.log('value does not match the pattern...');\r\n//         }\r\n    }\r\n\r\n    public setType(type: string): void {\r\n        let oldValue: string = this.type;\r\n        if (oldValue === type) {\r\n            return;\r\n        }\r\n        if (type === 'radio') {\r\n            this.$viewData.setValue('checked', null);\r\n        } else {\r\n            this.$viewData.removeKey('checked');\r\n        }\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\n\r\nexport class Label extends Control {\r\n    public load(data: JSON): any {\r\n        this.createControl(this.$owner, data);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('label');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr === 'textContent') {\r\n                this.$view.textContent = data['textContent'];\r\n            } else {\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Method extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.updateType(data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.updateType(data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.updateType(data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n            // e.g. setName() : string or name:string\r\n            let dataSplitted = data.split(':');\r\n\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }\r\n                else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType(dataSplitted[1].trim() || 'void');\r\n            }\r\n            // set default return type of void\r\n            else {\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = data.trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }  else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType('void');\r\n            }\r\n        }\r\n\r\n        if (Util.includes(this.$data.getValue('name'), '(') && !Util.includes(this.$data.getValue('name'), ')') === false) {\r\n            this.$data.setValue('name', this.$data.getValue('name') + '()');\r\n        }\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\nimport {Association} from '../edges';\r\nimport { GraphModel } from '..';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\n\r\nexport class Node extends DiagramElement {\r\n    public $edges: Association[] = [];\r\n    public $minWidth: number = 150;\r\n    public $minheight: number = 25;\r\n    public $defaulEdgeType: string;\r\n\r\n    constructor(data: JSON|string|Object|any) {\r\n        super();\r\n\r\n        // default size\r\n        this.withSize(this.$minWidth, this.$minheight);\r\n\r\n        if (data) {\r\n            if (data['x'] && data['y']) {\r\n                this.withPos(data['x'], data['y']);\r\n            }\r\n            if (data['width'] || data['height']) {\r\n                this.withSize(data['width'], data['height']);\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos = this.getPos();\r\n        const size = this.getSize();\r\n\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x - size.x / 2,\r\n            y: pos.y - size.y / 2,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y,\r\n            width: size.x,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        const shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'middle',\r\n            'font-family': 'Verdana',\r\n            'font-size': '14',\r\n            fill: 'black'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = this.id;\r\n\r\n        let group = this.createShape({tag: 'g', id: this.id});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public copy(): Node {\r\n        let copy: Node;\r\n        // create new id\r\n        let model = <GraphModel>this.$owner || <GraphModel>this.getRoot();\r\n        if (model) {\r\n            let type = this.property || Node.name;\r\n            let newId = model.getNewId(type);\r\n            copy = <Node>model.createElement(type, newId, null);\r\n            copy.withSize(this.getSize().x, this.getSize().y);\r\n            copy.$owner = model;\r\n        } else {\r\n            copy.id = this.id + '-copy';\r\n            copy.$owner = this.getRoot();\r\n        }\r\n        return copy;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n// EMPTY\r\n    }\r\n    public addAttribute(value: string): Attribute {\r\n        return null;\r\n    }\r\n    public getAttributes(): Attribute[] {\r\n        return null;\r\n    }\r\n    public addMethod(value: string): Method {\r\n        return null;\r\n    }\r\n    public updateLabel(newLabel: string): void {\r\n// EMPTY\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\n\r\nexport class SO extends DiagramElement {\r\n    public static create(element: Object) {\r\n        let result: SO = new SO();\r\n        for (let key in element) {\r\n            if (element.hasOwnProperty(key) === false) {\r\n                continue;\r\n            }\r\n            result.withKeyValue(key, element[key]);\r\n\r\n        }\r\n        return result;\r\n    }\r\n\r\n    public withKeyValue(key: string, value: any): SO {\r\n        if (key === 'typ') {\r\n            this.property = value;\r\n        } else if (key === 'x') {\r\n            this.withPos(value, null);\r\n        } else if (key === 'y') {\r\n            this.withPos(null, value);\r\n        } else if (key === 'width') {\r\n            this.withSize(value, null);\r\n        } else if (key === 'height') {\r\n            this.withSize(null, value);\r\n        } else {\r\n            this[key] = value;\r\n        }\r\n        return this;\r\n    }\r\n}\r\n","import {Point} from '../BaseElements';\r\nimport {Node} from './Node';\r\n\r\nexport class StereoType extends Node {\r\n\r\n    protected stereoType: string;\r\n\r\n    constructor (type: string, x: number, y: number) {\r\n        super('');\r\n        this.withPos(x, y);\r\n        this.setStereoType(type);\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        let pos: Point = this.getPos();\r\n        let size: Point = this.getSize();\r\n\r\n               // = = = STEREOTYPE = = =\r\n        let stereoType = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y - this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': 10,\r\n            'font-weight': 'bold',\r\n            fill: 'black'\r\n        });\r\n        stereoType.textContent = this.stereoType;\r\n\r\n        this.$view = stereoType;\r\n        return stereoType;\r\n    }\r\n\r\n    public setStereoType(value: string): void {\r\n        this.stereoType = '<<' + value + '>>';\r\n    }\r\n\r\n    public getStereoType(): string {\r\n        return this.stereoType;\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { SO } from './SO';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport { Util } from '../../util';\r\n\r\nexport class Symbol extends Node {\r\n    public $heightMax: number = 0;\r\n    public $heightMin: number = 0;\r\n\r\n    constructor(typ: string) {\r\n        super(typ);\r\n    }\r\n\r\n    public draw(typ?: string): SVGElement {\r\n        return SymbolLibary.draw(this);\r\n    }\r\n}\r\n\r\n// \t\t\t\t###################################################### SymbolLibary ####################################################################################\r\n// Example Items\r\n// {tag: 'path', d: ''}\r\n// {tag: 'rect', width:46, height:34}\r\n// {tag: 'ellipse', width:23, height:4}\r\n// {tag: 'line', x1:650, y1:-286, x2:650, y2:-252}\r\n// {tag: 'circle', r:5, x:12, y:0}\r\n// {tag: 'image', height: 30, width: 50, content$src: hallo}\r\n// {tag: 'text', 'text-anchor': 'left', x: '10'}\r\nexport class SymbolLibary {\r\n\r\n    public static drawSVG(node: any): SVGSVGElement {\r\n        // const lib = new SymbolLibary();\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            const parent = SO.create(node);\r\n            parent['property'] = 'SVG';\r\n            symbol = fn(parent);\r\n            // symbol = fn.apply(lib, parent);\r\n\r\n            return SymbolLibary.createGroup(parent, symbol);\r\n        }\r\n        return symbol;\r\n    }\r\n\r\n    public static draw(node: any, parent?: Object): SVGElement {\r\n        // Node is Symbol or simple Object\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            if (!(node instanceof DiagramElement)) {\r\n                node = SO.create(node);\r\n                if (!node.property) {\r\n                    node.property = 'SVG';\r\n                }\r\n            }\r\n            symbol = fn.apply(this, [node]);\r\n            if (!parent) {\r\n                return SymbolLibary.createGroup(node, symbol);\r\n            }\r\n            return SymbolLibary.createGroup(node, symbol);\r\n        } else if (node.property) {\r\n            symbol = new Symbol(node.property);\r\n            symbol.init(node);\r\n            let pos = node.getPos();\r\n            let size = node.getSize();\r\n            symbol.withPos(pos.x, pos.y);\r\n            symbol.withSize(size.x, size.y);\r\n            symbol['value'] = node['value'];\r\n            parent = node['$parent'];\r\n            return SymbolLibary.draw(symbol, parent);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public static upFirstChar(txt: string): string {\r\n        return txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase();\r\n    }\r\n\r\n    public static isSymbolName(typ: string): boolean {\r\n        let fn = SymbolLibary['draw' + SymbolLibary.upFirstChar(typ)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static isSymbol(node: Symbol) {\r\n        let fn = SymbolLibary[SymbolLibary.getName(node)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static getName(node: any): string {\r\n        if (node['type']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['type']);\r\n        }\r\n        if (node.property) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node.property);\r\n        }\r\n        if (node['src']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['src']);\r\n        }\r\n        return 'drawNode';\r\n    }\r\n\r\n    /*FIXME   public static createImage(node: Symbol, $graphModel:Node) {\r\n           let n, img: HTMLElement;\r\n           // node.$graphModel = node;\r\n           if (SymbolLibary.isSymbol(node)) {\r\n               return SymbolLibary.draw(null, node);\r\n           }\r\n           n = {tag: 'img', $graphModel: node, src: node['src']};\r\n           let size = node.getSize();\r\n           if (size.isEmpty() === false) {\r\n               n['width'] = size.x;\r\n               n['height'] = size.y;\r\n           } else {\r\n               n['xmlns'] = 'http://www.w3.org/1999/xhtml';\r\n           }\r\n           img = Util.create(n);\r\n           if (size.isEmpty()) {\r\n               $graphModel.appendImage(img);\r\n               return null;\r\n           }\r\n           return img;\r\n       }*/\r\n\r\n    public static createGroup(node: DiagramElement, group: any) {\r\n        let func, y: number, z: number, box, item: Element, transform, i, offsetX = 0, offsetY = 0;\r\n        let svg: any;\r\n        if (node.property.toUpperCase() === 'HTML') {\r\n            let so = {\r\n                tag: 'svg',\r\n                style: { left: (group.x | 0) + node.getPos().x, top: (group.y | 0) + node.getPos().y, position: 'absolute' }\r\n            };\r\n            if (node['transform']) {\r\n                so['transform'] = node['transform'];\r\n            }\r\n            svg = Util.create(so);\r\n        } else {\r\n            svg = Util.create({ tag: 'g' });\r\n            transform = 'translate(' + group.getPos().x + ' ' + group.getPos().y + ')';\r\n            if (group.scale) {\r\n                transform += ' scale(' + group.scale + ')';\r\n            }\r\n            if (group.rotate) {\r\n                transform += ' rotate(' + group.rotate + ')';\r\n            }\r\n            svg.setAttribute('transform', transform);\r\n            if (group['id']) {\r\n                svg.id = group['id'];\r\n            }\r\n        }\r\n\r\n        if (node['tooltip']) {\r\n            const tooltipTitleAttr = {\r\n                tag: 'title'\r\n            };\r\n            let tooltipTitle = Util.createShape(tooltipTitleAttr);\r\n            tooltipTitle.textContent = node['tooltip'];\r\n            svg.appendChild(tooltipTitle);\r\n        }\r\n\r\n        if (node['background']) {\r\n            const attrCircle = {\r\n                tag: 'circle',\r\n                cx: 20,\r\n                cy: 20,\r\n                r: 17,\r\n                stroke: '#888',\r\n                'stroke-width': 0,\r\n                fill: '#DDD'\r\n            };\r\n            svg.appendChild(Util.create(attrCircle));\r\n        }\r\n\r\n        for (i = 0; i < group.items.length; i += 1) {\r\n            svg.appendChild(Util.create(group.items[i]));\r\n        }\r\n        let elements = node['elements'];\r\n        Util.setSize(svg, group.width + node.getSize().x, group.height + node.getSize().y);\r\n        node['$heightMin'] = node.getSize().y;\r\n        if (elements) {\r\n            for (i = 0; i < elements.length; i += 1) {\r\n                if (!elements[i] && elements[i].length < 1) {\r\n                    elements.splice(i, 1);\r\n                    i -= 1;\r\n                }\r\n            }\r\n            box = Util.create({ tag: 'g' });\r\n            // Calculate new Height\r\n            let c: number;\r\n            z = 0;\r\n            for (c = 0; c < elements.length; c += 1) {\r\n                if (typeof elements[c] === 'string') {\r\n                    z += 1;\r\n                } else {\r\n                    z += elements[c].length;\r\n                }\r\n            }\r\n            z = z * 25 + 6;\r\n            box.appendChild(Util.create({\r\n                tag: 'rect',\r\n                rx: 0,\r\n                x: offsetX,\r\n                y: (offsetY + 28),\r\n                width: 70,\r\n                height: z,\r\n                stroke: '#000',\r\n                fill: '#fff',\r\n                opacity: '0.7'\r\n            }));\r\n            node['$heightMax'] = z + node['$heightMin'];\r\n\r\n            svg['elements'] = elements;\r\n            if (node['type'] === 'DropDown') {\r\n                svg['activ'] = Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': 60,\r\n                    'x': (10 + offsetX),\r\n                    'y': 20,\r\n                    value: node['activText']\r\n                });\r\n                svg.appendChild(svg.activ);\r\n            }\r\n\r\n            y = offsetY + 46;\r\n            // 46 -28 = 18\r\n\r\n            func = function (event: Event) {\r\n                if (svg.activ) {\r\n                    svg.activ.textContent = (<any>event.currentTarget).value;\r\n                }\r\n            };\r\n            let txt: string;\r\n            let textClass = 'SVGTEXT';\r\n            for (z = 0; z < elements.length; z += 1) {\r\n                if (typeof elements[z] === 'string') {\r\n                    txt = elements[z];\r\n                } else {\r\n                    item = this.addText(y, offsetX, box, elements[z][0], 'SVGTEXT');\r\n                    y += 26;\r\n                    for (c = 1; c < elements[z].length; c += 1) {\r\n                        item = this.addText(y, offsetX, box, '* ' + elements[z][c], 'SVGTEXTITEM');\r\n\r\n                        item['value'] = elements[z];\r\n                        if (node['action']) {\r\n                            item['onclick'] = node['action'];\r\n                        } else {\r\n                            item['onclick'] = func;\r\n                        }\r\n                        y += 26;\r\n                    }\r\n                    txt = elements[z];\r\n                    let subBox = Util.create({\r\n                        tag: 'rect',\r\n                        rx: 0,\r\n                        x: offsetX,\r\n                        y: (offsetY + 28),\r\n                        width: 60,\r\n                        height: z,\r\n                        stroke: '#000',\r\n                        fill: '#fff',\r\n                        opacity: '0.7'\r\n                    });\r\n                    continue;\r\n                }\r\n                // let txt = elements[z];\r\n                item = this.addText(y, offsetX, box, txt, textClass);\r\n\r\n                item['value'] = elements[z];\r\n                if (node['action']) {\r\n                    item['onclick'] = node['action'];\r\n                } else {\r\n                    item['onclick'] = func;\r\n                }\r\n                y += 26;\r\n            }\r\n            svg.choicebox = box;\r\n        }\r\n        svg.tool = node;\r\n        svg.onclick = function () {\r\n            if (svg.status === 'close') {\r\n                svg.open();\r\n            } else {\r\n                svg.close();\r\n            }\r\n        };\r\n        svg.close = function () {\r\n            if (svg.status === 'open' && svg.choicebox) {\r\n                this.removeChild(svg.choicebox);\r\n            }\r\n            svg.status = 'close';\r\n            svg.tool.$size.height = svg.tool.heightMin;\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x, g.tool.height + g.tool.y);\r\n            Util.setSize(svg, svg.tool.$size.x, svg.tool.$size.y);\r\n        };\r\n        svg.open = function () {\r\n            if (this.tagName === 'svg') {\r\n                return;\r\n            }\r\n            if (svg.status === 'close' && svg.choicebox) {\r\n                this.appendChild(svg.choicebox);\r\n            }\r\n            svg.status = 'open';\r\n            svg.tool.$size.height = svg.tool.heightMax;\r\n            Util.setSize(svg, svg.tool.width, svg.tool.height);\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x + 10, g.tool.height + g.tool.y + 10);\r\n        };\r\n        svg.close();\r\n        return svg;\r\n    }\r\n\r\n    public static addChild(parent: SVGElement, json: JSON | Element): void {\r\n        let item: Element;\r\n        if ((<any>json).offsetLeft) {\r\n            item = <Element>json;\r\n        } else {\r\n            item = Util.create(json);\r\n        }\r\n        item.setAttribute('class', 'draggable');\r\n        parent.appendChild(item);\r\n    }\r\n\r\n    public static all(node: any): void {\r\n        SymbolLibary.drawSmiley(node);\r\n        SymbolLibary.drawDatabase(node);\r\n        SymbolLibary.drawLetter(node);\r\n        SymbolLibary.drawMobilephone(node);\r\n        SymbolLibary.drawWall(node);\r\n        SymbolLibary.drawActor(node);\r\n        SymbolLibary.drawLamp(node);\r\n        SymbolLibary.drawArrow(node);\r\n        SymbolLibary.drawButton(node);\r\n        SymbolLibary.drawDropdown(node);\r\n        SymbolLibary.drawClassicon(node);\r\n        SymbolLibary.drawClassWithEdgeicon(node);\r\n    }\r\n\r\n    public static drawHamburger(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'circle', r: 10, fill: '#ccc', cx: 12, cy: 12, 'stroke-width': 1, stroke: 'black'},\r\n                { tag: 'path', d: 'M 8,7 H 16 M 8,12 H 16 M 8,17 H 16', stroke: 'black', fill: 'none' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawSmiley(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'path', d: 'm49.01774,25.64542a24.5001,24.5 0 1 1 -49.0001,0a24.5001,24.5 0 1 1 49.0001,0z', stroke: 'black', fill: 'none' }, { tag: 'path', d: 'm8,31.5c16,20 32,0.3 32,0.3' },\r\n                { tag: 'path', d: 'm19.15,20.32a1.74,2.52 0 1 1 -3.49,0a1.74,2.52 0 1 1 3.49,0z' },\r\n                { tag: 'path', d: 'm33,20.32a1.74,2.52 0 1 1 -3.48,0a1.74,2.52 0 1 1 3.48,0z' },\r\n                { tag: 'path', d: 'm5.57,31.65c3.39,0.91 4.03,-2.20 4.03,-2.20' },\r\n                { tag: 'path', d: 'm43,32c-3,0.91 -4,-2.20 -4.04,-2.20' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDatabase(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 40,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,-6.26 25.03,-6.26 25.03,0l0,25.82c0,6.26 -25.03,6.26 -25.03,0l0,-25.82z',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLetter(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 17,\r\n            items: [\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1,1l22,0l0,14l-22,0l0,-14z' },\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1.06,1.14l10.94,6.81l10.91,-6.91' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMobilephone(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 4.2 0.5 15.61 0c 2 0 3.7 1.65 3.7 3.7l 0 41.6c 0 2-1.65 3.7-3.7 3.7l-15.6 0c-2 0-3.7-1.6-3.7-3.7l 0-41.6c 0-2 1.6-3.7 3.7-3.7z',\r\n                    fill: 'none',\r\n                    stroke: 'black'\r\n                },\r\n                { tag: 'path', d: 'm 12.5 2.73a 0.5 0.5 0 1 1-1 0 0.5 0.5 0 1 1 1 0z' },\r\n                { tag: 'path', d: 'm 14 46a 2 2 0 1 1-4 0 2 2 0 1 1 4 0z' },\r\n                { tag: 'path', d: 'm 8 5 7 0' },\r\n                { tag: 'path', d: 'm 1.63 7.54 20.73 0 0 34-20.73 0z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawWall(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'path', d: 'm26,45.44l-5,3.56l-21,-9l0,-36.41l5,-3.56l20.96,9l-0,36.4z' },\r\n                {\r\n                    tag: 'path',\r\n                    stroke: 'white',\r\n                    d: 'm2.21,11l18.34,7.91m-14.46,-12.57l0,6.3m8.2,21.74l0,6.35m-8.6,-10l0,6.351m4.1,-10.67l0,6.3m4.8,-10.2l0,6.3m-8.87,-10.23l0,6.35m4.78,-10.22l0,6.35m-8,14.5l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m0,-13l0,34m-18.23,-41.84l18.3,8m0,0.11l5,-3.57'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawActor(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'line', stroke: '#000', x1: '12', y1: '10', x2: '12', y2: '30' },\r\n                { tag: 'circle', stroke: '#000', cy: '5', cx: '12', r: '5' },\r\n                { tag: 'line', stroke: '#000', y2: '18', x2: '25', y1: '18', x1: '0' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '5', y1: '30', x1: '12' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '20', y1: '30', x1: '12' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLamp(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 22.47 10.58c-6.57 0-11.89 5.17-11.89 11.54 0 2.35 0.74 4.54 2 6.36 2 4 4.36 5.63 4.42 10.4l 11.15 0c 0.12-4.9 2.5-6.8 4.43-10.4 1.39-1.5 1.8-4.5 1.8-6.4 0-6.4-5.3-11.5-11.9-11.5z',\r\n                    fill: 'white',\r\n                    stroke: 'black'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 40 8 0c 0.58 0 1 0.5 1 1 0 0.6-0.5 1-1 1l-8 0c-0.6 0-1-0.47-1-1 0-0.58 0.47-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 42.7 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 45.3 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                { tag: 'path', d: 'm 19.5 48c 0.37 0.8 1 1.3 1.9 1.7 0.6 0.3 1.5 0.3 2 0 0.8-0.3 1.4-0.8 1.9-1.8z' },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 6 37.5 4.2-4c 0.3-0.3 0.8-0.3 1 0 0.3 0.3 0.3 0.8 0 1.1l-4.2 4c-0.3 0.3-0.8 0.3-1.1 0-0.3-0.3-0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 39 37.56-4.15-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 38 23 5.8 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.8 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 1.3 23 6 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.9 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 34.75 11.2 4-4.1c 0.3-0.3 0.3-0.8 0-1-0.3-0.3-0.8-0.3-1 0l-4 4.1c-0.3 0.3-0.3 0.8 0 1 0.3 0.3 0.8 0.3 1 0z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 11.23 10-4-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 21.64 1.3 0 5.8c 0 0.4 0.3 0.8 0.8 0.8 0.4 0 0.8-0.3 0.8-0.8l 0-5.8c 0-0.4-0.3-0.8-0.8-0.8-0.4 0-0.8 0.3-0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 26.1 24.3c-0.5 0-1 0.2-1.3 0.4-1.1 0.6-2 3-2.27 3.5-0.26-0.69-1.14-2.9-2.2-3.5-0.7-0.4-2-0.7-2.5 0-0.6 0.8 0.2 2.2 0.9 2.9 1 0.9 3.9 0.9 3.9 0.9 0 0 0 0 0 0 0.54 0 2.8 0 3.7-0.9 0.7-0.7 1.5-2 0.9-2.9-0.2-0.3-0.7-0.4-1.2-0.4z'\r\n                },\r\n                { tag: 'path', d: 'm 22.5 28.57 0 10.7' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawStop(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 30,\r\n            height: 30,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: '#FFF',\r\n                    'stroke-width': '2',\r\n                    stroke: '#B00',\r\n                    d: 'm 6,6 a 14,14 0 1 0 0.06,-0.06 z m 0,0 20,21'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMin(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    d: 'm 0,0 19,0 0,19 -19,0 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 13,-0.04'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawArrow(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 10,\r\n            height: 9,\r\n            rotate: node['rotate'],\r\n            items: [\r\n                { tag: 'path', fill: '#000', stroke: '#000', d: 'M 0,0 10,4 0,9 z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMax(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    'stroke-dashoffset': 2,\r\n                    'stroke-dasharray': '4.8,4.8',\r\n                    d: 'm 0,0 4.91187,0 5.44643,0 9.11886,0 0,19.47716 -19.47716,0 0,-15.88809 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 6,0.006 0.02,5 0.01,-11 -0.03,6.02 c 2,-0.01 4,-0.002 6,0.01'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawButton(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight, btnValue;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        btnValue = node['value'] || '';\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: 60,\r\n            height: 28,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 8,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    filter: 'url(#drop-shadow)',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                { tag: 'text', $font: true, x: 10, y: 18, fill: 'black', value: btnValue, 'class': 'hand' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDropdown(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 0,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth - 20,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 2,\r\n                    x: btnWidth - 20,\r\n                    y: 0,\r\n                    width: 20,\r\n                    height: 28,\r\n                    stroke: '#000',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    style: 'fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1',\r\n                    d: 'm ' + (btnWidth - 15) + ',13 10,0 L ' + (btnWidth - 10) + ',20 z'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassicon(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.19999l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm25.68807,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.2l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                { tag: 'line', x1: 11, y1: 7, x2: 25, y2: 7, stroke: '#000' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassWithEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M2,10 20,10 20,35 2,35 Z M2,17 20,17 M20,10 28,5 28,9 M 28.5,4.7 24,4',\r\n                    style: 'fill:none;stroke:#000000;transform:scale(0.8);'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClass(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: '100%',\r\n            height: '100%',\r\n            items: [\r\n                { tag: 'rect', width: 50, height: 40, x: 0, y: 0, 'stroke-width': 2, stroke: 'black', fill: 'none'},\r\n                { tag: 'rect', width: 50, height: 12, x: 0, y: 18, 'stroke-width': 1, stroke: 'black', fill: 'none'},\r\n                { tag: 'text', x: 27, y: 14, 'text-anchor': 'middle', 'font-size': 11, value: 'Class'},\r\n                { tag: 'text', x: 5, y: 24, 'font-size': 5, value: '+ field: type'},\r\n                { tag: 'text', x: 5, y: 36, 'font-size': 5, value: '+ method(type)'}\r\n            ]\r\n        });\r\n    }\r\n/*\r\n<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n    <g>\r\n    <text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text>\r\n        <text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>\r\n*/\r\n\r\n    public static drawEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M10,30 30,10 M19,10 30,10 30,21',\r\n                    style: 'fill:none;stroke:#555;stroke-width:2;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawCopynode(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M5 5 L15 5 L15 20 L5 20 Z M5 10 L15 10',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M8 2 L18 2 L18 17 L8 17 Z M8 7 L18 7'\r\n                        + 'M11 4.5 L15 4.5 '\r\n                        + 'M10 10 L16 10 '\r\n                        + 'M10 13 L16 13 ',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawBasket(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M12 12 L18 12 L18 11 L22 11 L22 12 L28 12 L28 14 L27 14 L27 29 L13 29 L13 14 L12 14 Z M13 14 L27 14 M20 17 L20 26 M17 16 L17 27 M23 16 L23 27',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawPencil(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M6 20 L12 23 L33 23 L33 17 L12 17 Z M30 17 L30 23 M12 17 L12 23 M15 19 L28 19 M15 21 L28 21',\r\n                    stroke: '#000',\r\n                    'stroke-width': 1,\r\n                    fill: 'white'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    private static addText(y: number, offsetX: number, box: Element, text: string, textClass: string): Element {\r\n        let item: Element;\r\n        box.appendChild(Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'text-anchor': 'left',\r\n            width: 70,\r\n            x: 10,\r\n            y: y,\r\n            class: textClass,\r\n            value: text,\r\n            eventValue: text\r\n        }));\r\n        if (textClass === 'SVGTEXT') {\r\n            textClass = 'SVGChoiceText';\r\n        } else {\r\n            textClass = 'SVGChoice';\r\n        }\r\n\r\n        item = Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            x: offsetX,\r\n            y: y - 18,\r\n            width: 70,\r\n            height: 24,\r\n            stroke: 'none',\r\n            class: textClass,\r\n        });\r\n        item['eventValue'] = text;\r\n        box.appendChild(item);\r\n        return item;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n}\r\n","import {Control} from '../../Control';\r\nimport BridgeElement from '../../BridgeElement';\r\nimport Data from '../../Data';\r\nimport {Util} from '../../util';\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Table extends Control {\r\n    protected items: BridgeElement[] = [];\r\n    private columns: Column[] = [];\r\n    private cells: Object = {};\r\n    private $bodysection: HTMLTableSectionElement;\r\n    private $headersection: HTMLTableSectionElement;\r\n    private showedItems: Array<BridgeElement> = [];\r\n    // BridgeElements:\r\n    private itemsIds: Object = {};\r\n    private countElement: HTMLElement;\r\n    private countColumn: HTMLElement;\r\n    private countColumnPos: number;\r\n    private resultColumn: string;\r\n    private lastSearchText: string;\r\n    private searchColumns: Array<string> = [];\r\n    private searchText: Array<string> = [];\r\n    private sortColumn: Column;\r\n    private direction: number;\r\n    private moveElement: Column = null;\r\n    private isDrag: boolean = false;\r\n    private moveTimeStamp: number;\r\n    private moveX: number;\r\n    private movePos: number;\r\n    private dragColumn: Column;\r\n    private dragPos: number;\r\n    private tableOption: HTMLTableHeaderCellElement;\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    private static indexOfChild(item: BridgeElement) {\r\n        let i: number = 0;\r\n        let child: Node = item.gui;\r\n        while ((child = child.previousSibling) !== null) {\r\n            i++;\r\n        }\r\n        return i;\r\n    }\r\n\r\n    public load(data: any): void {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n            if (data.property) {\r\n                this.property = data.property;\r\n            }\r\n\r\n            if (data.searchColumns) {\r\n                let search: Array<string> = [];\r\n                if (typeof(data.searchColumns) === 'string') {\r\n                    search = data.searchColumns.split(' ');\r\n                } else {\r\n                    search = data.searchColumns;\r\n                }\r\n                for (let z: number = 0; z < search.length; z++) {\r\n                    let item = search[z].trim();\r\n                    if (item.length > 0) {\r\n                        if (this.searchColumns.indexOf(item) < 0) {\r\n                            this.searchColumns.push(item);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        if (this.$view) {\r\n            // Must be an Update\r\n            if (data['columns']) {\r\n                // It is a json must add all things and generate HTML\r\n                for (let i in data['columns']) {\r\n                    if (data['columns'].hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    let col = this.parseData(data['columns'][i]);\r\n                    this.addHeaderInfo(col);\r\n                    this.columns.push(col);\r\n                    this.tableOption.parentElement.insertBefore(col.$element, this.tableOption);\r\n                }\r\n                for (let i in this.showedItems) {\r\n                    let item: BridgeElement = this.showedItems[i];\r\n                    let cell;\r\n                    // Now Add some Children\r\n                    while (item.gui.children.length < this.columns.length) {\r\n                        cell = document.createElement('td');\r\n                        item.gui.appendChild(cell);\r\n                    }\r\n                    // Now Remove Some Children\r\n                    while (item.gui.children.length > this.columns.length) {\r\n                        item.gui.removeChild(item.gui.children[item.gui.children.length - 1]);\r\n                    }\r\n                    for (let c: number = 0; c < this.columns.length; c++) {\r\n                        let name = this.columns[c].attribute;\r\n                        // let count = this.columns.length;\r\n                        cell = item.gui.children[c];\r\n                        cell.innerHTML = item.model.getValue(name);\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n\r\n        this.$view = document.getElementById(id);\r\n        let headerrow: HTMLTableRowElement;\r\n        if (this.$view) {\r\n            if (!this.property) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('table');\r\n            this.$owner.appendChild(this);\r\n        }\r\n        if (!this.$bodysection) {\r\n            // add tbody element if missing\r\n            this.$bodysection = document.createElement('tbody');\r\n            this.$view.appendChild(this.$bodysection);\r\n        }\r\n        if (data['classname']) {\r\n            this.$view.className = data['classname'];\r\n        } else {\r\n            this.$view.className = 'mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp';\r\n        }\r\n\r\n        this.id = id;\r\n        this.$view.id = id;\r\n        this.$view.setAttribute('type', this.constructor['name'].toLowerCase());\r\n        let counter = 0;\r\n        for (let c = 0; c < this.$view.children.length; c++) {\r\n            let row: HTMLTableRowElement = <HTMLTableRowElement>this.$view.children[c];\r\n            if (row instanceof HTMLTableSectionElement) {\r\n                if (row.tagName === 'THEAD') {\r\n                    headerrow = row;\r\n                    // Its a thead\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingHeader(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                } else {\r\n                    // Its a tbody\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingData(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                }\r\n            } else {\r\n                // fallback, if there are no thead and tbody...\r\n                if (counter === 0) {\r\n                    headerrow = row;\r\n                    this.parsingHeader(row);\r\n                } else {\r\n                    this.parsingData(row);\r\n                }\r\n            }\r\n            counter++;\r\n        }\r\n        if (!headerrow || !this.$headersection) {\r\n            if (!this.$headersection) {\r\n                // find eventually existing thead\r\n                let header = this.$view.getElementsByTagName('thead');\r\n                if (header.length === 0) {\r\n                    this.$headersection = document.createElement('thead');\r\n                    this.$view.appendChild(this.$headersection);\r\n                } else {\r\n                    // take first thead element\r\n                    this.$headersection = <HTMLTableSectionElement>header.item(0);\r\n                }\r\n            }\r\n            if (!headerrow) {\r\n                headerrow = document.createElement('tr');\r\n                this.$headersection.appendChild(headerrow);\r\n            }\r\n        }\r\n\r\n        if (data['columns']) {\r\n            // It is a json must add all things and generate HTML\r\n            for (let i in data['columns']) {\r\n                if (data['columns'].hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                let col = this.parseData(data['columns'][i]);\r\n                this.addHeaderInfo(col);\r\n                this.columns.push(col);\r\n                headerrow.appendChild(col.$element);\r\n            }\r\n            this.tableOption = document.createElement('th');\r\n            this.tableOption.classList.add('tableOption');\r\n            headerrow.appendChild(this.tableOption);\r\n            let context: HTMLElement = this.addOptionItem(null, this.tableOption, true);\r\n            let contentChild: HTMLElement = this.addOptionItem('show', context, true);\r\n            // let simpleLink: HTMLElement = this.addOptionItem('show', contentChild, false);\r\n            this.addOptionItem('show', contentChild, false);\r\n        }\r\n        this.registerEvents(['mousemove', 'mousedown', 'mouseup', 'resize', 'dragstart', 'dragover', 'drop', 'dragend']);\r\n\r\n        // Check for SearchBar\r\n        // if(data[\"searchproperty\"]){\r\n        // Create Full Row\r\n        let searchBar = document.createElement('tr');\r\n        let cell = document.createElement('td');\r\n        cell.setAttribute('colspan', '' + (this.columns.length));\r\n        searchBar.appendChild(cell);\r\n\r\n        let search = document.createElement('input');\r\n        search.className = 'search';\r\n        let that = this;\r\n        search.addEventListener('keyup', function (evt) {\r\n            that.search(evt.target['value']);\r\n        });\r\n\r\n        cell.appendChild(search);\r\n        if (this.resultColumn) {\r\n            if (this.resultColumn.indexOf('#') !== 0) {\r\n                this.countElement = document.createElement('div');\r\n                searchBar.appendChild(this.countElement);\r\n            } else {\r\n                for (let z: number = 0; z < this.$headersection.children.length; z++) {\r\n                    if (this.$headersection.children[z].innerHTML === this.resultColumn) {\r\n                        this.countColumn = <HTMLElement> this.$headersection.children[z];\r\n                        this.countColumnPos = z;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        let first = this.$headersection.children.item(0);\r\n        this.$headersection.insertBefore(searchBar, first);\r\n\r\n        this.updateElement(this.property, null);\r\n\r\n        // now update those elements, that were not loaded currently\r\n    }\r\n\r\n    public tableEvent(type: string, e: Event) {\r\n        let button: number = 0;\r\n        let eventX: number = 0;\r\n        if (e instanceof MouseEvent) {\r\n            button = e.buttons;\r\n            eventX = e.pageX;\r\n        }\r\n        if (type === 'mouseup') {\r\n            this.moveElement = null;\r\n        } else if (type === 'mousedown' || type === 'resize') {\r\n            // End to Resize\r\n            this.moveElement = null;\r\n            if (button === 1) {\r\n                let c: number;\r\n                for (c = 0; c < this.columns.length; c++) {\r\n                    if (this.columns[c].$resize === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = false;\r\n                        break;\r\n                    } else if (this.columns[c].$element === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = true;\r\n                    }\r\n                }\r\n                this.moveTimeStamp = e.timeStamp;\r\n                this.moveX = eventX;\r\n            } else {\r\n                this.moveTimeStamp = 0;\r\n            }\r\n        } else if (type === 'mousemove') {\r\n            if (button === 1 && this.moveElement) {\r\n                if (this.moveTimeStamp && e.timeStamp - this.moveTimeStamp < 2000) {\r\n                    if (this.isDrag) {\r\n                        // FIXME\r\n                    } else {\r\n                        let x = eventX - this.moveX;\r\n                        let width = this.moveElement.$element.offsetWidth;\r\n                        this.moveElement.$element.width = '' + (width + x);\r\n                        e.stopPropagation();\r\n                    }\r\n                }\r\n                this.moveX = eventX;\r\n                this.moveTimeStamp = e.timeStamp;\r\n            }\r\n        } else if (this.isDrag) {\r\n            this.columnDragEvent(type, <DragEvent> e);\r\n        }\r\n    }\r\n\r\n    public parsingHeader(row: HTMLTableRowElement) {\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let column: HTMLTableHeaderCellElement = <HTMLTableHeaderCellElement>row.children[i];\r\n            let id = column.innerHTML.trim();\r\n            let col: Column = null;\r\n            for (let c in this.columns) {\r\n                if (this.columns.hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                if (this.columns[c].label === id) {\r\n                    col = this.columns[c];\r\n                    col.$element = column;\r\n                    break;\r\n                }\r\n            }\r\n            if (col === null) {\r\n                col = new Column();\r\n                col.label = id;\r\n                col.attribute = column.getAttribute('attribute');\r\n                col.$element = column;\r\n                this.columns.push(col);\r\n            }\r\n            this.addHeaderInfo(col);\r\n        }\r\n    }\r\n\r\n    public parsingData(row: HTMLTableRowElement) {\r\n        let id = row.getAttribute('id');\r\n        let item: Data = this.$owner.getItem(id);\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let cell: HTMLTableCellElement = <HTMLTableCellElement>row.children[i];\r\n            let colAttribute = this.columns[i].attribute;\r\n            if (colAttribute.indexOf('\\.') < 0) {\r\n                item[colAttribute] = cell.innerHTML.trim();\r\n            }\r\n        }\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: Object, newValue: Object) {\r\n        if (entity) {\r\n            // Check for Show\r\n            if (this.property && !entity.hasProperty(property)) {\r\n                return;\r\n            }\r\n        }\r\n        if (entity.id === undefined) {\r\n            return;\r\n        }\r\n        let item: BridgeElement = <BridgeElement>this.itemsIds[entity.id];\r\n        let row: HTMLTableRowElement;\r\n        if (!item) {\r\n            item = new BridgeElement(entity);\r\n            this.items.push(item);\r\n            this.itemsIds[entity.id] = item;\r\n        }\r\n        row = this.cells[entity.id];\r\n        if (row) {\r\n            item.gui = row;\r\n        }\r\n        if (this.searching(item) === false) {\r\n            return;\r\n        }\r\n        let cell;\r\n        let showItem = false;\r\n\r\n        if (!row) {\r\n            showItem = true;\r\n            row = document.createElement('tr');\r\n            let count = this.columns.length;\r\n            for (let i = 0; i < count; i++) {\r\n                cell = document.createElement('td');\r\n                row.appendChild(cell);\r\n            }\r\n            this.cells[entity.id] = row;\r\n            item.gui = row;\r\n        }\r\n        for (let c: number = 0; c < this.columns.length; c++) {\r\n            let name = this.columns[c].attribute;\r\n            if (name === property) {\r\n                cell = row.children[c];\r\n                cell.innerHTML = <string>newValue;\r\n            }\r\n        }\r\n        if (showItem) {\r\n            this.showItem(item, true);\r\n        }\r\n        // super.propertyChange(entity, property, newValue, oldValue);\r\n    }\r\n\r\n    public sort(column: Column) {\r\n        if (this.sortColumn === column) {\r\n            if (this.direction === 1) {\r\n                this.direction = -1;\r\n                column.$element.classList.remove('asc');\r\n                column.$element.classList.add('desc');\r\n            } else {\r\n                this.direction = 1;\r\n                column.$element.classList.remove('desc');\r\n                column.$element.classList.add('asc');\r\n            }\r\n        } else {\r\n            if (this.sortColumn !== null) {\r\n                this.sortColumn.$element.classList.remove('desc');\r\n                this.sortColumn.$element.classList.remove('asc');\r\n            }\r\n            this.sortColumn = column;\r\n            this.sortColumn.$element.classList.add('asc');\r\n            this.direction = 1;\r\n        }\r\n        let that = this;\r\n        let sort = function (a: BridgeElement, b: BridgeElement) {\r\n            return that.sorting(a, b);\r\n        };\r\n        this.showedItems.sort(sort);\r\n        let len: number = this.showedItems.length;\r\n        let body = this.$bodysection;\r\n        let i = 0;\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            if (i !== Table.indexOfChild(item)) {\r\n                break;\r\n            }\r\n            i = i + 1;\r\n        }\r\n        while (body.children.length > i) {\r\n            body.removeChild(body.children.item(body.children.length - 1));\r\n        }\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            body.appendChild(item.gui);\r\n            i = i + 1;\r\n        }\r\n\r\n        //      body.removeChild(item.gui);\r\n        //      body.remove\r\n    }\r\n\r\n    public sorting(a: BridgeElement, b: BridgeElement): number {\r\n        let path: string[] = this.sortColumn.attribute.split('.');\r\n        let itemA = a.model.prop;\r\n        let itemB = b.model.prop;\r\n        let check = this.sortColumn.attribute;\r\n        for (let p = 0; p < path.length; p++) {\r\n            check = path[p];\r\n            if (itemA[check]) {\r\n                itemA = itemA[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n            if (itemB[check]) {\r\n                itemB = itemB[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n        if (itemA !== itemB) {\r\n            if (this.direction === 1) {\r\n                return (itemA < itemB) ? -1 : 1;\r\n            }\r\n            return (itemA < itemB) ? 1 : -1;\r\n\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    // Searching\r\n    public search(origSearchText: string): void {\r\n        if (!origSearchText) {\r\n            origSearchText = '';\r\n        }\r\n        let searchText: string = origSearchText.trim().toLowerCase();\r\n        if (searchText === this.lastSearchText && searchText !== '') {\r\n            return; // <==== nothing to be done\r\n        }\r\n        let oldSearch: string = this.lastSearchText;\r\n        this.lastSearchText = searchText;\r\n\r\n        this.parseSearchArray();\r\n        if (searchText !== '' && oldSearch !== null && searchText.indexOf(oldSearch) >= 0 && searchText.indexOf('|') < 0) {\r\n            this.searchArray(this.showedItems);\r\n        } else {\r\n            this.searchSet(this.items);\r\n        }\r\n        this.refreshCounter();\r\n    }\r\n\r\n    public refreshCounter() {\r\n        if (this.countColumn) {\r\n            this.countColumn.innerHTML = this.columns[this.countColumnPos].label + ' (' + this.showedItems.length + ')';\r\n        }\r\n        // var countElement = document.getElementById('talkCount');\r\n        //  if (countElement) {\r\n        //     var txt = (this.showedItems.size() > 0 && searchText.length > 0 ) ? this.options.TEXT_SEARCHLIST : this.options.TEXT_SEARCHFULLLIST;\r\n        //     countElement.innerHTML = txt.replace(\"%LEN%\", this.root['children'].length).replace(\"%COUNT%\", this.showedItems.size()).replace(\"%SEARCH%\", origSearchText);\r\n        // }\r\n        // if (this.countColumn) {\r\n        //     this.countColu1mn.innerHTML = this.countColumn[\"label\"] + \" (\" + this.showedItems.size() + \")\";\r\n        // }\r\n    }\r\n\r\n    public parseSearchArray() {\r\n        let pos: number = 0;\r\n        let split: Array<string> = [];\r\n        let quote: boolean = false;\r\n        for (let i: number = 0; i < this.lastSearchText.length; i++) {\r\n            if ((this.lastSearchText.charAt(i) === ' ') && !quote) {\r\n                let txt = this.lastSearchText.substring(pos, i).trim();\r\n                if (txt.length > 0) {\r\n                    split.push(txt);\r\n                }\r\n                pos = i + 1;\r\n            } else if (this.lastSearchText.charAt(i) === '\\\"') {\r\n                if (quote) {\r\n                    let txt = this.lastSearchText.substring(pos, i).trim();\r\n                    if (txt.length > 0) {\r\n                        split.push(txt);\r\n                    }\r\n                    pos = i + 1;\r\n                } else {\r\n                    pos = i + 1;\r\n                }\r\n                quote = !quote;\r\n            }\r\n        }\r\n        if (pos < this.lastSearchText.length) {\r\n            split.push(this.lastSearchText.substring(pos, this.lastSearchText.length).trim());\r\n        }\r\n        this.searchText = split;\r\n        return split;\r\n    }\r\n\r\n    public searchArray(root: Array<BridgeElement>) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let i: number = 0; i < root.length; i++) {\r\n            let item: BridgeElement = root[i];\r\n            this.showItem(item, this.searching(item));\r\n        }\r\n    }\r\n\r\n    public searchSet(root: BridgeElement[]) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let item of root) {\r\n            let child: BridgeElement = <BridgeElement>item;\r\n            this.showItem(child, this.searching(child));\r\n        }\r\n    }\r\n\r\n    public showItem(item: BridgeElement, visible: boolean) {\r\n        if (visible) {\r\n            this.showedItems.push(item);\r\n            this.$bodysection.appendChild(item.gui);\r\n        } else if (item.gui && item.gui.parentElement) {\r\n            this.$bodysection.removeChild(item.gui);\r\n        }\r\n    }\r\n\r\n    public searching(item: BridgeElement): boolean {\r\n        let fullText: string = '';\r\n        for (let i: number = 0; i < this.searchColumns.length; i++) {\r\n            fullText = fullText + ' ' + item.model.getValue(this.searchColumns[i]);\r\n        }\r\n        fullText = fullText.trim().toLowerCase();\r\n        for (let z: number = 0; z < this.searchText.length; z++) {\r\n            if ('' !== this.searchText[z]) {\r\n                let orSplit: Array<string>;\r\n                if (this.searchText[z].indexOf('|') > 0) {\r\n                    orSplit = this.searchText[z].split('|');\r\n                } else {\r\n                    orSplit = [this.searchText[z]];\r\n                }\r\n                let o: number = 0;\r\n                for (; o < orSplit.length; o++) {\r\n                    let pos: number = orSplit[o].indexOf(':');\r\n                    if (orSplit[o].indexOf('#') === 0 && pos > 1) {\r\n                        // if (searchProperties.contains(propString)) {\r\n                        let value: string = orSplit[o].substring(pos + 1);\r\n                        let column: string = orSplit[o].substring(1, pos - 1);\r\n                        let dataValue: Object = item.model.getValue(column);\r\n                        if (dataValue) {\r\n                            if (dataValue.toString().toLowerCase().indexOf(value) >= 0) {\r\n                                // Search for simple Property\r\n                                break;\r\n                            }\r\n                        }\r\n                    } else if (orSplit[o].length > 1 && orSplit[o].indexOf('-') === 0) {\r\n                        if (fullText.indexOf(orSplit[o].substring(1)) < 0) {\r\n                            break;\r\n                        }\r\n                    } else if (fullText.indexOf(orSplit[o]) >= 0) {\r\n                        // his search word is found in full text\r\n                        break;\r\n                    }\r\n                }\r\n                if (o === orSplit.length) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public getColumn(): Column[] {\r\n        return this.columns;\r\n    }\r\n\r\n    public updateElement(property: string, value: string): void {\r\n        // first clear all elements inside the table:\r\n        for (let item of this.items) {\r\n            if (item instanceof BridgeElement) {\r\n                (<BridgeElement>item).model.removeListener(this);\r\n            }\r\n        }\r\n\r\n        this.items = [];\r\n        this.itemsIds = {};\r\n\r\n        // load all entitys that match the property\r\n        if (this.property !== undefined) {\r\n            let items = this.$owner.getItems();\r\n            for (let j in items) {\r\n                if (items.hasOwnProperty(j)) {\r\n                    let item = items[j];\r\n                    if (item instanceof Data) {\r\n                        if (property === j) {\r\n                            // if (property == item.property) {\r\n                            let i = new BridgeElement(<Data>item);\r\n                            this.items.push(i);\r\n                            this.itemsIds[item.id] = i;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            this.redrawAllElements();\r\n        }\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        if (this.$owner !== null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    protected redrawAllElements() {\r\n        let children: HTMLCollection = this.$bodysection.children;\r\n        // remove old children\r\n        for (let i = 0; i < children.length; i++) {\r\n            let child = children.item(i);\r\n            // remove child\r\n            this.$bodysection.removeChild(child);\r\n        }\r\n\r\n        // load new children\r\n        for (let obj of this.items) {\r\n            // register listeners\r\n            obj.model.addListener(this);\r\n            // create tr\r\n            let row = this.createRow(obj);\r\n            this.$bodysection.appendChild(row);\r\n            this.cells[obj.id] = row;\r\n        }\r\n    }\r\n\r\n    private parseData(column: any): Column {\r\n        let col = new Column();\r\n        col.label = column.label || column.id;\r\n        col.attribute = column.attribute || column.label || column.id;\r\n        col.$element = document.createElement('th');\r\n        col.$element.innerHTML = col.label;\r\n        col.$element.draggable = true;\r\n\r\n        // resize Header\r\n        col.$resize = document.createElement('div');\r\n        col.$resize.classList.add('resize');\r\n        col.$element.appendChild(col.$resize);\r\n\r\n        return col;\r\n    }\r\n\r\n    private createRow(data: BridgeElement): HTMLTableRowElement {\r\n        let tr: HTMLTableRowElement = document.createElement('tr');\r\n\r\n        for (let id of this.columns) {\r\n            let td: HTMLTableDataCellElement = document.createElement('td');\r\n            tr.appendChild(td);\r\n            td.innerHTML = data.model.getValue(id.attribute);\r\n        }\r\n        return tr;\r\n    }\r\n\r\n    private addHeaderInfo(col: Column) {\r\n        let element: HTMLTableCellElement = col.$element;\r\n        let that = this;\r\n        element.classList.add('sort');\r\n        element.addEventListener('click',\r\n            function () {\r\n                that.sort(col);\r\n            },\r\n            false);\r\n    }\r\n\r\n    private columnDragEvent(type: string, e: DragEvent) {\r\n        if (type === 'dragstart') {\r\n            // Target (this) element is the source node.\r\n            this.moveElement.$element.style.opacity = '0.4';\r\n            e.dataTransfer.effectAllowed = 'move';\r\n            e.dataTransfer.setData('text/json', JSON.stringify(Util.toJson(this.moveElement)));\r\n        } else if (type === 'dragenter') {\r\n            // TO Nothing\r\n        } else if (type === 'dragleave') {\r\n            this.moveElement.$element.classList.remove('over');\r\n        } else if (type === 'dragover') {\r\n            if (e.preventDefault) {\r\n                e.preventDefault(); // Necessary. Allows us to drop.\r\n            }\r\n            for (let c = 0; c < this.columns.length; c++) {\r\n                if (this.columns[c].$element === e.target) {\r\n                    this.dragColumn = this.columns[c];\r\n                    this.dragPos = c;\r\n                    this.columns[c].$element.classList.add('over');\r\n                } else {\r\n                    this.columns[c].$element.classList.remove('over');\r\n                }\r\n            }\r\n            if (e.target === this.tableOption) {\r\n                this.tableOption.classList.add('over');\r\n                this.dragPos = this.columns.length;\r\n            } else {\r\n                this.tableOption.classList.remove('over');\r\n            }\r\n            e.dataTransfer.dropEffect = 'move';  // See the section on the DataTransfer object.\r\n        } else if (type === 'drop') {\r\n            // this / e.target is current target element.\r\n            if (e.stopPropagation) {\r\n                e.stopPropagation(); // stops the browser from redirecting.\r\n            }\r\n            if (this.movePos === this.dragPos) {\r\n                return;\r\n            }\r\n            // movePos -> dragPos\r\n            // See the section on the DataTransfer object.\r\n            // DataModel\r\n            this.columns.splice(this.movePos, 1);\r\n            if (this.movePos >= this.dragPos) {\r\n                this.columns.splice(this.dragPos, 0, this.moveElement);\r\n            } else {\r\n                this.columns.splice(this.dragPos - 1, 0, this.moveElement);\r\n            }\r\n\r\n            // Header Line\r\n            let line: HTMLElement = this.moveElement.$element.parentElement;\r\n            line.removeChild(this.moveElement.$element);\r\n            if (this.dragPos < this.columns.length) {\r\n                line.insertBefore(this.moveElement.$element, this.dragColumn.$element);\r\n            } else {\r\n                line.insertBefore(this.moveElement.$element, this.tableOption);\r\n            }\r\n\r\n            let oldElement: Element;\r\n            let newElement: Element;\r\n\r\n            // Now all Childs\r\n            for (let i = 0; i < this.$bodysection.children.length; i++) {\r\n                // Each line\r\n                line = <HTMLElement>this.$bodysection.children.item(i);\r\n                oldElement = line.children.item(this.movePos);\r\n                newElement = line.children.item(this.dragPos);\r\n                line.removeChild(oldElement);\r\n                line.insertBefore(oldElement, newElement);\r\n            }\r\n        } else if (type === 'dragend') {\r\n            // this/e.target is the source node.\r\n            this.moveElement.$element.style.opacity = '1';\r\n            for (let i = 0; i < this.columns.length; i++) {\r\n                this.columns[i].$element.classList.remove('over');\r\n            }\r\n            this.tableOption.classList.remove('over');\r\n        }\r\n    }\r\n\r\n    private addOptionItem(label: string, parent: HTMLElement, sub: boolean): HTMLElement {\r\n        let labelControl;\r\n        if (label) {\r\n            labelControl = document.createElement('a');\r\n            labelControl.appendChild(document.createTextNode(label));\r\n            labelControl.href = 'javascript:void(0);';\r\n            parent.appendChild(labelControl);\r\n        }\r\n        if (sub) {\r\n            let context = document.createElement('div');\r\n            context.classList.add('dropdown-content');\r\n            context.style.setProperty('position', 'absolute');\r\n            parent.appendChild(context);\r\n\r\n            /* When the user clicks on the button,\r\n             toggle between hiding and showing the dropdown content */\r\n            parent.addEventListener(\r\n                'click',\r\n                function () {\r\n                    context.classList.toggle('show');\r\n                },\r\n                false);\r\n            return context;\r\n        }\r\n        return labelControl;\r\n    }\r\n\r\n    private registerEvents(events: string[]) {\r\n        let that = this;\r\n        for (let i = 0; i < events.length; i++) {\r\n            this.$view.addEventListener(events[i], function (evt) {\r\n                return that.tableEvent(events[i], evt);\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\nclass Column {\r\n    label: string;\r\n    attribute: string;\r\n    $element: HTMLTableHeaderCellElement;\r\n    $resize: HTMLDivElement;\r\n    visible: boolean;\r\n}\r\n","import { AutoComplete } from './AutoComplete';\r\nimport { BR } from './BR';\r\nimport { Div } from './Div';\r\nimport { Label } from './Label';\r\n\r\nexport * from './Node';\r\nexport * from './Class';\r\nexport * from './SO';\r\nexport * from './Symbol';\r\n\r\nexport * from './BR';\r\nexport * from './Button';\r\nexport * from './Div';\r\nexport * from './Form';\r\nexport * from './Input';\r\nexport * from './Label';\r\nexport * from './Table';\r\nexport * from './HTML';\r\nexport * from './Dice';\r\nexport * from './AutoComplete';\r\nexport * from './Attribute';\r\nexport * from './Method';\r\nexport * from './ClazzProperty';\r\n\r\nnew AutoComplete();\r\nnew BR();\r\nnew Div();\r\nnew Label();\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class AddNode implements EventHandler {\r\n\r\n    public MIN_SIZE_TO_ADD_NODE: number = 30;\r\n    public MIN_SIZE_TO_ADD_TEXT: number = 10;\r\n    private graph: Graph;\r\n    private svgRect: SVGSVGElement;\r\n    private svgGroupAddNode: SVGSVGElement;\r\n    private svgTextAddNode: SVGSVGElement;\r\n    private svgTextRectAddNode: SVGSVGElement;\r\n    private isRectDrawing: boolean;\r\n    private isDrawToLeft: boolean;\r\n    private isDrawToTop: boolean;\r\n    private isBigEnoughForAddNode: boolean;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(AddNode.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(AddNode.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!this.canHandle()) {\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element.id !== 'RootElement') {\r\n            return false;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element.id === 'RootElement') {\r\n                    this.start(event, element);\r\n\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mousemove':\r\n                this.drawRect(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.removeRect();\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.addNode();\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawRect(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isRectDrawing) {\r\n            return;\r\n        }\r\n\r\n        evt.stopPropagation();\r\n\r\n        let width = Util.getEventX(evt) - this.x;\r\n        let height = Util.getEventY(evt) - this.y;\r\n\r\n        // rectangle is in a negative area, drawn to upper case. not possibble with svg\r\n        if (width < 0) {\r\n            this.isDrawToLeft = true;\r\n            width *= -1;\r\n        } else {\r\n            this.isDrawToLeft = false;\r\n        }\r\n\r\n        if (height < 0) {\r\n            this.isDrawToTop = true;\r\n            height *= -1;\r\n        } else {\r\n            this.isDrawToTop = false;\r\n        }\r\n\r\n        if (width > this.MIN_SIZE_TO_ADD_NODE && height > this.MIN_SIZE_TO_ADD_NODE) {\r\n            this.isBigEnoughForAddNode = true;\r\n        } else {\r\n            this.isBigEnoughForAddNode = false;\r\n        }\r\n\r\n        this.graph.root.style.cursor = 'pointer';\r\n\r\n        // if line wasnt draw\r\n        if (!this.svgRect) {\r\n\r\n            let rectAddNode = Util.createShape({\r\n                tag: 'rect',\r\n                id: 'addNodeRect',\r\n                x: this.x,\r\n                y: this.y,\r\n                width: 1,\r\n                height: 1,\r\n                class: 'SVGAddNode'\r\n            });\r\n\r\n            let group = Util.createShape({ tag: 'g', id: 'groupAddNode' });\r\n            group.appendChild(rectAddNode);\r\n\r\n            this.graph.root.appendChild(group);\r\n            this.svgRect = rectAddNode;\r\n            this.svgGroupAddNode = group;\r\n        }\r\n        else {\r\n\r\n            let svgRectBBox = this.svgRect.getBBox();\r\n\r\n            // if rect is big enough, show text as helper\r\n            if ((svgRectBBox.width > this.MIN_SIZE_TO_ADD_TEXT\r\n                || svgRectBBox.height > this.MIN_SIZE_TO_ADD_TEXT) && !this.svgTextAddNode) {\r\n\r\n                let textAddNode = Util.createShape({\r\n                    tag: 'text',\r\n                    x: this.x,\r\n                    y: this.y - 5,\r\n                    'font-family': 'Verdana',\r\n                    'font-size': 12,\r\n                    fill: 'black'\r\n                });\r\n                textAddNode.textContent = 'Hold on and move to create a new class';\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n\r\n\r\n                // get correct size of text node\r\n                let sizeClientRect: ClientRect = textAddNode.getBoundingClientRect();\r\n\r\n                let rectBackgroundForText = Util.createShape({\r\n                    tag: 'rect',\r\n                    x: this.x,\r\n                    y: this.y - sizeClientRect.height,\r\n                    width: sizeClientRect.width,\r\n                    height: sizeClientRect.height,\r\n                    fill: '#DDD',\r\n                    'stroke-width': 0\r\n                });\r\n\r\n                this.svgTextRectAddNode = rectBackgroundForText;\r\n                this.svgTextAddNode = textAddNode;\r\n                this.svgGroupAddNode.appendChild(rectBackgroundForText);\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n            }\r\n\r\n            if (this.isDrawToLeft) {\r\n                this.svgRect.setAttributeNS(null, 'x', '' + Util.getEventX(evt));\r\n            }\r\n\r\n            if (this.isDrawToTop) {\r\n                this.svgRect.setAttributeNS(null, 'y', '' + Util.getEventY(evt));\r\n            }\r\n\r\n            // set width and height\r\n            this.svgRect.setAttributeNS(null, 'width', width.toString());\r\n            this.svgRect.setAttributeNS(null, 'height', height.toString());\r\n\r\n            // set color\r\n            if (this.isBigEnoughForAddNode) {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode-ready');\r\n\r\n                // draw text\r\n            }\r\n            else {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeRect(): void {\r\n        this.isRectDrawing = false;\r\n        this.isBigEnoughForAddNode = false;\r\n\r\n        this.graph.root.style.cursor = 'default';\r\n\r\n        if (this.svgGroupAddNode) {\r\n            this.graph.root.removeChild(this.svgGroupAddNode);\r\n            this.svgGroupAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgRect) {\r\n            this.svgRect = undefined;\r\n        }\r\n\r\n        if (this.svgTextAddNode) {\r\n            this.svgTextAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgTextRectAddNode) {\r\n            this.svgTextRectAddNode = undefined;\r\n        }\r\n    }\r\n\r\n    private addNode(): void {\r\n\r\n        if (!this.isBigEnoughForAddNode) {\r\n            this.removeRect();\r\n            return;\r\n        }\r\n\r\n        this.removeRect();\r\n        let node = this.graph.addElementWithValues('Class', { x: this.x, y: this.y });\r\n        this.graph.drawElement(node);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isRectDrawing) {\r\n            return;\r\n        }\r\n        this.isRectDrawing = true;\r\n\r\n        this.x = Util.getEventX(evt);\r\n        this.y = Util.getEventY(evt);\r\n    }\r\n\r\n}\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement, Point } from '../elements/BaseElements';\r\nimport { GraphModel } from '../elements/Model';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Control } from '../Control';\r\nimport { Util } from '../util';\r\n\r\nexport class Drag implements EventHandler {\r\n\r\n    private element: DiagramElement;\r\n    private svgElement: SVGSVGElement;\r\n    private dragging = false;\r\n    private reinsert = false;\r\n    private mouseOffset = new Point();\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        if (!this.canHandle()) {\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if ((!this.dragging) && (element.id !== 'RootElement')) {\r\n                    this.element = element;\r\n                    this.svgElement = <SVGSVGElement>element.$view;\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mouseup':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n\r\n                break;\r\n            case 'mousemove':\r\n                if (this.dragging) {\r\n                    this.drag(event, element);\r\n                }\r\n                break;\r\n            case 'mouseleave':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Drag.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Drag.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private reset() {\r\n        this.dragging = false;\r\n        this.svgElement.style.cursor = 'pointer';\r\n\r\n        /*  WORKAROUND\r\n            Chrome got problem with the Node.appendChild() method.\r\n            Sometimes it works, sometimes not.\r\n            So the background is, in the drag method will the current element be appended\r\n            to front of the svg root.\r\n            If this happend, the click event won't fire.\r\n            So it will be fired manually.\r\n            This problem occurs only in chrome.\r\n        */\r\n        if (Util.isChrome()) {\r\n            let clickEvt = Util.createCustomEvent('click');\r\n            this.svgElement.dispatchEvent(clickEvt);\r\n        }\r\n    }\r\n\r\n    private start(evt: Event | any, element: Control) {\r\n\r\n        this.dragging = true;\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n        this.reinsert = true;\r\n\r\n        this.svgElement.style.cursor = 'move';\r\n    }\r\n\r\n    private drag(evt: Event | any, element: DiagramElement) {\r\n\r\n        if (this.reinsert) {\r\n            if (this.element.id !== 'RootElement') {\r\n                // nesseccary to set the dragged object on top of svg children\r\n                this.graph.root.appendChild(this.svgElement);\r\n            }\r\n\r\n            let dragEvent = Util.createCustomEvent('drag');\r\n            element.$view.dispatchEvent(dragEvent);\r\n        }\r\n        this.reinsert = false;\r\n\r\n        evt.stopPropagation();\r\n\r\n        const translation = this.svgElement.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        const sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        const transX = sx + evt.clientX - this.mouseOffset.x;\r\n        const transY = sy + evt.clientY - this.mouseOffset.y;\r\n        this.svgElement.setAttributeNS(null, 'transform', 'translate(' + transX + ' ' + transY + ')');\r\n        this.element.getPos().addNum(transX - sx, transY - sy);\r\n\r\n        if (this.element instanceof Node) {\r\n            (<Node>this.element).redrawEdges();\r\n        }\r\n\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n\r\n\r\n        // resize svg root\r\n        let maxX = this.element.getPos().x + this.element.getSize().x;\r\n        let maxY = this.element.getPos().y + this.element.getSize().y;\r\n\r\n        let domRectRoot = this.graph.root.getBoundingClientRect();\r\n        if(!domRectRoot){\r\n            return;\r\n        }\r\n\r\n        if(maxX > domRectRoot.width){\r\n            this.graph.root.setAttributeNS(null, 'width', '' + maxX);\r\n        }\r\n        \r\n        if(maxY > domRectRoot.height){\r\n            this.graph.root.setAttributeNS(null, 'height', '' + maxY);\r\n        }\r\n    }\r\n}\r\n","import PropertyChangeSupport from '../PropertyChangeSupport';\r\nimport Data from '../Data';\r\nimport {Adapter} from '../Adapter';\r\nimport ClazzProperty from '../elements/nodes/ClazzProperty';\r\n\r\nexport class GraphListener implements PropertyChangeSupport {\r\n    private $owner: ClazzProperty;\r\n\r\n    constructor(owner: ClazzProperty) {\r\n        this.$owner = owner;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        let adapter = this.$owner.getRoot().getAdapter();\r\n        if (adapter) {\r\n            // messages.add(\"{\\\"class\\\":\\\"de.uniks.networkparser.test.model.House\\\",\\\"id\\\":\\\"H1\\\",\\\"rem\\\":{\\\"floor\\\":4},\\\"upd\\\":{\\\"floor\\\":42}}\");\r\n            let myId =  this.$owner.$owner.getId();\r\n            if (myId && myId.length > 0) {\r\n                let pos = myId.indexOf(':');\r\n                if (pos > 0) {\r\n                    myId = myId.substring(0, pos).trim();\r\n                }\r\n            }\r\n            let myName = this.$owner.getName();\r\n            let remJson = {};\r\n            remJson[myName] = oldValue;\r\n            let updJson = {};\r\n            updJson[myName] = newValue;\r\n            let json = {};\r\n            json['id'] = myId;\r\n            json['rem'] = remJson;\r\n            json['upd'] = updJson;\r\n            let message = JSON.stringify(json);\r\n            (<Adapter> adapter).update(message);\r\n        }\r\n    }\r\n}\r\n","import {Graph} from '../elements/';\r\nimport {EventHandler, EventBus} from '../EventBus';\r\nimport {DiagramElement} from '../elements/';\r\nimport {Util} from '../util';\r\n\r\nexport class ImportFile implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(ImportFile.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(ImportFile.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        let type: string = typeof event;\r\n        if (type !== 'DragEvent') {\r\n            return false;\r\n        }\r\n        let evt: DragEvent = <DragEvent>event;\r\n        if (evt.type === 'dragover') {\r\n            this.handleDragOver(evt);\r\n        } else if (evt.type === 'dragleave') {\r\n            if (this.graph.$view !== evt.target) {\r\n                return false;\r\n            }\r\n            this.setBoardStyle('dragleave');\r\n        } else if (evt.type === 'drop') {\r\n            this.handleLoadFile(evt);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public setBoardStyle(typ: string): boolean {\r\n        let b = this.graph.$view;\r\n        Util.removeClass(b, 'Error');\r\n        Util.removeClass(b, 'Ok');\r\n        Util.removeClass(b, 'Add');\r\n        if (typ === 'dragleave') {\r\n            if (b['errorText']) {\r\n                b.removeChild(b['errorText']);\r\n                b['errorText'] = null;\r\n            }\r\n            return true;\r\n        }\r\n        Util.addClass(b, typ);\r\n        if (typ === 'Error') {\r\n            if (!b['errorText']) {\r\n                b['errorText'] = Util.create({tag: 'div', style: 'margin-top: 30%', value: 'NO TEXTFILE'});\r\n                b.appendChild(b['errorText']);\r\n            }\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private handleLoadFile(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n\r\n        let files = evt.dataTransfer.files; // FileList object.\r\n\r\n        if (files.length > 1) {\r\n            evt.dataTransfer.dropEffect = 'none';\r\n            return;\r\n        }\r\n\r\n        // files is a FileList of File objects. List some properties.\r\n        let reader  = new FileReader();\r\n        let output = [];\r\n        let htmlResult = '';\r\n        let that = this;\r\n        for (let i = 0, f; f = files[i]; i++) {\r\n            reader.onload = function(event) {\r\n                htmlResult = event.target['result'];\r\n                console.log('fileContent: ' + htmlResult);\r\n\r\n                // CHANGE TO INTERNAL OBJECT\r\n                if (that.graph) {\r\n                    that.graph.import(htmlResult);\r\n                }\r\n            };\r\n            reader.readAsText(f);\r\n        }\r\n        this.setBoardStyle('dragleave');\r\n    }\r\n\r\n    private handleDragOver(evt: DragEvent): void {\r\n        let error: boolean = true, n: string, f;\r\n        let files = evt.dataTransfer.files;\r\n        // process all File objects\r\n        if (files && files.length > 0) {\r\n            for (let i: number = 0; i < files.length; i += 1) {\r\n                f = files[i];\r\n                if (f.type.indexOf('text') === 0) {\r\n                    error = false;\r\n                } else if (f.type === '') {\r\n                    n = f.name.toLowerCase();\r\n                    if (n.indexOf('json', n.length - 4) !== -1) {\r\n                        error = false;\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            let items = evt.dataTransfer.items;\r\n            if (items && items.length > 0) {\r\n                for (let z = 0; z < items.length; z ++) {\r\n                    if (items[z].type === '' || items[z].type === 'text/plain') {\r\n                        error = false;\r\n                    }\r\n                }\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.\r\n        if (error) {\r\n            this.dragStyler(evt, 'Error');\r\n        } else if (evt.ctrlKey) {\r\n            this.dragStyler(evt, 'Add');\r\n        } else {\r\n            this.dragStyler(evt, 'Ok');\r\n        }\r\n        /* //evt.target['className'] += ' diagramLoadFile';\r\n        '//console.log('handDragOver');*/\r\n    }\r\n\r\n    private dragStyler(event: Event, typ: string) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n        this.setBoardStyle(typ);\r\n    }\r\n\r\n    private handleDragLeave(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n        evt.dataTransfer.dropEffect = 'link'; // Explicitly show this is a copy.\r\n        evt.target['className'] = 'diagram';\r\n        console.log('handDragLeave');\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Class } from '../elements/nodes/Class';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Association } from '../elements/index';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class NewEdge implements EventHandler {\r\n    private graph: Graph;\r\n    private svgLine: SVGSVGElement;\r\n    private isEdgeDrawing: boolean;\r\n    private sourceNode: Node;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    private lastTargetNode: Node;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(NewEdge.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(NewEdge.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!((<KeyboardEvent>event).ctrlKey || EventBus.isHandlerActiveOrFree('NewEdge', true))) {\r\n            this.removeLine();\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element instanceof Node) {\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n\r\n            case 'mousemove':\r\n                this.drawEdge(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.setNewEdgeToNode(event);\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default: break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawEdge(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        let lineToX = Util.getEventX(evt);\r\n        let lineToy = Util.getEventY(evt);\r\n\r\n        let path = `M${this.x} ${this.y} L${lineToX} ${lineToy}`;\r\n        // if line wasnt draw\r\n        if (!this.svgLine) {\r\n\r\n            let attr = {\r\n                tag: 'path',\r\n                id: 'newEdgePath',\r\n                d: path,\r\n                class: 'SVGEdge'\r\n            };\r\n\r\n            let shape = Util.createShape(attr);\r\n            this.svgLine = shape;\r\n\r\n            this.graph.root.appendChild(shape);\r\n            this.graph.root.appendChild(this.sourceNode.$view);\r\n        }\r\n        else {\r\n\r\n            // set new L path\r\n            this.svgLine.setAttributeNS(null, 'd', path);\r\n\r\n            // get node from position\r\n            let targetNode = this.graph.$graphModel.getNodeByPosition(Util.getEventX(evt), Util.getEventY(evt));\r\n\r\n            // if some targetnode is available, so highlight the node\r\n            if (targetNode) {\r\n\r\n                // reset the last one\r\n                if (this.lastTargetNode && this.lastTargetNode.id !== targetNode.id) {\r\n                    this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n                }\r\n\r\n                this.lastTargetNode = targetNode;\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz-drawedge');\r\n            }\r\n            else if (this.lastTargetNode) {\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeLine(): void {\r\n        this.isEdgeDrawing = false;\r\n\r\n        if (this.svgLine) {\r\n            this.graph.root.removeChild(this.svgLine);\r\n            this.svgLine = null;\r\n        }\r\n\r\n        if (this.lastTargetNode) {\r\n            this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n        }\r\n    }\r\n\r\n    private setNewEdgeToNode(event: Event | any): void {\r\n        // get node from position\r\n        let targetNode = this.graph.$graphModel\r\n            .getNodeByPosition(Util.getEventX(event), Util.getEventY(event));\r\n\r\n        if (!targetNode) {\r\n            this.removeLine();\r\n\r\n            return;\r\n        }\r\n\r\n        this.removeLine();\r\n        let edgeType = this.sourceNode.$defaulEdgeType || 'Association';\r\n\r\n        let jsonData = {\r\n            type: edgeType,\r\n            source: this.sourceNode.id,\r\n            target: targetNode.id\r\n        };\r\n\r\n        let newEdge = this.graph.$graphModel.addEdge(<any>jsonData, true);\r\n        this.graph.drawElement(newEdge);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        this.isEdgeDrawing = true;\r\n        this.sourceNode = element as Class;\r\n\r\n        this.x = this.sourceNode.getPos().x + (this.sourceNode.getSize().x / 2);\r\n        this.y = this.sourceNode.getPos().y + (this.sourceNode.getSize().y / 2);\r\n\r\n        // TODO: get this into util or select\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Node } from '../elements/nodes';\r\nimport { Association } from '../elements/edges';\r\nimport { Util } from '../util';\r\nimport { SymbolLibary } from '../elements/nodes/Symbol';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\nimport Attribute from '../elements/nodes/Attribute';\r\n\r\nexport class Select implements EventHandler {\r\n\r\n    private deleteShape: SVGSVGElement;\r\n    private addEdgeShape: SVGSVGElement;\r\n    private copyNodeShape: SVGSVGElement;\r\n    private graph: Graph;\r\n    private padding = 5;\r\n\r\n    private lastSelectedNode: Element;\r\n    private lastSelectedEdge: Element;\r\n\r\n    private isDragged: boolean;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.deleteShape = SymbolLibary.drawSVG({ type: 'Basket', background: true, id: 'trashcan', tooltip: 'Delete class' });\r\n        this.copyNodeShape = SymbolLibary.drawSVG({ type: 'Copynode', background: true, id: 'copyNode', tooltip: 'Copy class' });\r\n        this.addEdgeShape = SymbolLibary.drawSVG({ type: 'Edgeicon', background: true, id: 'addEdge', tooltip: 'Click and drag to connect this class' });\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        let x = Util.getEventX(event);\r\n        let y = Util.getEventY(event);\r\n\r\n        event.stopPropagation();\r\n        if (event.type === 'drag') {\r\n            this.isDragged = true;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            if (element instanceof Node) {\r\n                this.lastSelectedNode = <Element>element.$view;\r\n            }\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n        }\r\n\r\n        if (event.target['id'] === 'background' || element === this.graph.$graphModel) {\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let e = <Node>element;\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.graph.root.appendChild(this.addEdgeShape);\r\n            this.graph.root.appendChild(this.copyNodeShape);\r\n            this.graph.root.appendChild(element.$view);\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'visible');\r\n\r\n            let x = (e.getPos().x + e.getSize().x) + 5;\r\n            let y = e.getPos().y;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y + this.padding})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.copyNodeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 40 + this.padding})`);\r\n            this.copyNodeShape.onclick = (evt) => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let copyClass = (element).copy();\r\n                copyClass.withPos(nextFreePosition.x, nextFreePosition.y);\r\n                this.graph.drawElement(copyClass);\r\n            };\r\n\r\n            this.addEdgeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 80 + this.padding})`);\r\n            this.addEdgeShape.onmousedown = function () {\r\n                EventBus.setActiveHandler('NewEdge');\r\n                element.$view.dispatchEvent(Util.createCustomEvent('mousedown'));\r\n            };\r\n        }\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let clazz = <Node>element;\r\n\r\n            if (Util.isChrome()) {\r\n                if (this.lastSelectedNode && element.id === this.lastSelectedNode.id && !this.isDragged) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            this.isDragged = false;\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            this.lastSelectedNode = <Element>element.$view;\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete class');\r\n\r\n            // draw textbox to edit clazz in one line\r\n            let divInlineEdit = document.createElement('div');\r\n            divInlineEdit.id = 'inlineEdit';\r\n            divInlineEdit.style.position = 'absolute';\r\n            divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n            divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n            divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n            divInlineEdit.style.zIndex = '42';\r\n\r\n            let inputText = document.createElement('input');\r\n            inputText.type = 'text';\r\n            inputText.style.width = '100%';\r\n            inputText.placeholder = 'Add properties, edit label';\r\n\r\n            divInlineEdit.appendChild(inputText);\r\n            document.body.appendChild(divInlineEdit);\r\n\r\n            inputText.addEventListener('focusout', (evt) => {\r\n\r\n                if (Util.isChrome()) {\r\n                    // only if input is empty, remove the inline edit function\r\n                    if ((!inputText.value || inputText.value.length === 0) && (!this.lastSelectedNode || element.id !== this.lastSelectedNode.id)) {\r\n                        this.removeLastInlineEdit();\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                // only if input is empty, remove the inline edit function\r\n                if ((!inputText.value || inputText.value.length === 0)) {\r\n                    this.removeLastInlineEdit();\r\n                }\r\n            });\r\n\r\n            let g = this.graph;\r\n            let propertyTypes: string[] = ['boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'short', 'String', 'void'];\r\n            inputText.addEventListener('keydown', function (evt) {\r\n\r\n                let keyCode = (<any>evt).which;\r\n                let inputValue = <any>inputText.value;\r\n\r\n                if (Util.endsWith(inputValue, ':') && !document.getElementById('selectPropertyType')) {\r\n                    let selectType = document.createElement('select');\r\n                    selectType.id = 'selectPropertyType';\r\n                    selectType.style.width = '100%';\r\n\r\n                    for (let type of propertyTypes) {\r\n                        let selectOption = document.createElement('option');\r\n                        selectOption.value = type;\r\n                        selectOption.innerHTML = type;\r\n                        selectType.appendChild(selectOption);\r\n                    }\r\n\r\n                    selectType.addEventListener('change', function (evt) {\r\n                        let inputValueSplitted = inputValue.split(':');\r\n                        let selectedPropertyType = selectType.options[selectType.selectedIndex].value;\r\n\r\n                        if (inputValueSplitted.length >= 1) {\r\n                            inputText.value = inputValueSplitted[0].trim() + ' : ' + selectedPropertyType;\r\n                            inputText.focus();\r\n                        }\r\n                    });\r\n\r\n                    divInlineEdit.appendChild(selectType);\r\n                }\r\n                else if (!Util.includes(inputValue, ':')) {\r\n                    let selectType = document.getElementById('selectPropertyType');\r\n\r\n                    if (selectType) {\r\n                        selectType.remove();\r\n                    }\r\n                }\r\n\r\n                if (keyCode !== 13) {\r\n                    return;\r\n                }\r\n\r\n                // attribute\r\n                if ((Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) === false) {\r\n                    if (Util.includes(inputValue, ':')) {\r\n                        clazz.addAttribute(inputValue.trim());\r\n                        clazz.reDraw();\r\n                    } else if (Util.includes(inputValue, '=') ) {\r\n                        let attr: Attribute = null;\r\n                        let name = inputValue.substring(0, inputValue.indexOf('=')).trim();\r\n                        for (let child of clazz.getAttributes() ) {\r\n                            if ( name === child.getName()) {\r\n                                attr = child;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (attr) {\r\n                            attr.updateValue(inputValue.substring(inputValue.indexOf('=') + 1).trim());\r\n                        }\r\n                        clazz.reDraw();\r\n                    }\r\n                }\r\n\r\n                // method\r\n                else if (Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) {\r\n                    clazz.addMethod(inputValue.trim());\r\n                    clazz.reDraw();\r\n                }\r\n                // label\r\n                else if (inputValue.trim().split(' ').length === 1 && inputValue.trim().length > 0) {\r\n                    clazz.updateLabel(inputValue.trim());\r\n                }\r\n\r\n                // reset size\r\n                divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n                divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n                divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n\r\n                inputText.value = '';\r\n\r\n                // remove combobox to select type of property\r\n                let selectType = document.getElementById('selectPropertyType');\r\n\r\n                if (selectType) {\r\n                    selectType.remove();\r\n                }\r\n\r\n                // TODO: reload propertiespanel. not working!\r\n                // event wont dispatch\r\n                // let customEvt = Util.createCustomEvent(EventBus.RELOADPROPERTIES);\r\n                // element.$view.dispatchEvent(customEvt);\r\n            });\r\n\r\n            (<any>divInlineEdit.children[0]).focus();\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Association) {\r\n            this.graph.root.appendChild(element.$view);\r\n            this.graph.root.appendChild(element.$sNode.$view);\r\n            this.graph.root.appendChild(element.$tNode.$view);\r\n\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete edge');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            let edge = <Association>element;\r\n            this.lastSelectedEdge = edge.$view;\r\n\r\n            Util.addClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Select.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Select.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private setTooltipOfShape(shape: SVGSVGElement, tooltip: string): void {\r\n        if (!shape || !shape.hasChildNodes()) {\r\n            return;\r\n        }\r\n\r\n        let titleElement = <SVGSVGElement>shape.childNodes[0];\r\n        if (!titleElement || titleElement.tagName !== 'title') {\r\n            return;\r\n        }\r\n\r\n        titleElement.textContent = tooltip;\r\n    }\r\n\r\n    private resetLastSelectedElements() {\r\n        // reset the last one\r\n        if (this.lastSelectedNode) {\r\n            Util.removeClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.lastSelectedNode = undefined;\r\n        }\r\n\r\n        if (this.lastSelectedEdge) {\r\n            Util.removeClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n            this.lastSelectedEdge = undefined;\r\n        }\r\n\r\n        this.removeLastInlineEdit();\r\n    }\r\n\r\n    private removeLastInlineEdit(): void {\r\n        // remove last inline edit of clazz\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n\r\n            // its not supported in internet explorer\r\n            // lastInlineEdit.remove();\r\n        }\r\n    }\r\n\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\n\r\nexport class Zoom implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n    }\r\n\r\n    public handle(e: any, element: DiagramElement): boolean {\r\n        let delta = e.deltaY || e.wheelDeltaY || -e.wheelDelta;\r\n        let d = 1 + (delta / 1000);\r\n\r\n        let values = this.graph.root.getAttribute('viewBox').split(' ');\r\n        const newViewBox = `${values[0]} ${values[1]} ${parseInt(values[2]) * d} ${parseInt(values[3]) * d}`;\r\n        this.graph.root.setAttribute('viewBox', newViewBox);\r\n\r\n        e.preventDefault();\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Zoom.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Zoom.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n}\r\n","export * from './Drag';\r\nexport * from './Select';\r\nexport * from './Zoom';\r\nexport * from './NewEdge';\r\nexport * from './ImportFile';\r\nexport * from './AddNode';\r\n","import { Association } from '../elements/edges';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport Layout from './Layout';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\n\r\nexport class DagreLayout implements Layout {\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        if (!window['dagre']) {\r\n            return;\r\n        }\r\n        let model = graph.$graphModel;\r\n        let g = new window['dagre'].graphlib.Graph();\r\n\r\n        g.setGraph({ marginx: 100, marginy: 20 }).setDefaultEdgeLabel(function () {\r\n            return {};\r\n        });\r\n\r\n        for (let node of model.nodes) {\r\n            g.setNode(node.id, { width: node.getSize().x, height: node.getSize().y });\r\n        }\r\n\r\n        for (let edge of model.edges) {\r\n            g.setEdge(edge.$sNode.id, edge.$tNode.id);\r\n        }\r\n\r\n        window['dagre'].layout(g);\r\n\r\n        g.nodes().forEach(function (nodeId: string) {\r\n            for (let node of model.nodes) {\r\n                if (node.id === nodeId) {\r\n                    node.withPos(g.node(nodeId).x - g.node(nodeId).width / 2, g.node(nodeId).y - g.node(nodeId).height / 2);\r\n                }\r\n            }\r\n        });\r\n        g.edges().forEach(function (e: any) {\r\n            for (let edge of model.edges) {\r\n                if (edge.$sNode.id === e.v && edge.$tNode.id === e.w) {\r\n                    let size = g.edge(e).points.length;\r\n                    edge.clearPoints();\r\n                    for (let i = 0; i < size; i++) {\r\n                        let point: SVGPoint = g.edge(e).points[i];\r\n                        edge.addPoint(point.x, point.y);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n}\r\n","import {DiagramElement} from '../elements/BaseElements';\r\nimport Layout from './Layout';\r\nimport {Graph} from '../elements/Graph';\r\nimport {Association} from '../elements/edges/Association';\r\nimport {Node} from '../elements/nodes/Node';\r\nimport {Control} from '../Control';\r\n\r\nexport class LayoutGraphMin {\r\n    public nodes: Object = {};\r\n    public edges: Array<Object> = [];\r\n    public outEdges: Object = {};\r\n    public inEdges: Object = {};\r\n    public dummyNodes: Array<LayoutGraphNode> = [];\r\n    public dummyEdges: Object = {};\r\n    public count: number = 0;\r\n    public minRank: number = Number.POSITIVE_INFINITY;\r\n    public maxRank: number = 0;\r\n    public maxHeight: number = 0;\r\n    public maxWidth: number = 0;\r\n    public ranksep: number = 0;\r\n    public edgesLabel: Array<Object> = [];\r\n\r\n    public nodeCount(): number {\r\n        return this.count;\r\n    }\r\n\r\n    public node(id: string) {\r\n        return this.nodes[id];\r\n    }\r\n\r\n    public setNode(id: string, n: LayoutGraphNode) {\r\n        if (n && !this.nodes[id]) {\r\n            this.nodes[id] = n;\r\n            this.count = this.count + 1;\r\n        } else if (!n && this.nodes[id]) {\r\n            delete this.nodes[id];\r\n        }\r\n    }\r\n}\r\n\r\nexport class LayoutGraphNode {\r\n    public id: string;\r\n    public width: number;\r\n    public height: number;\r\n    public x: number;\r\n    public y: number;\r\n    public edgeObj: LayoutGraphEdge;\r\n    public rank: number;\r\n\r\n    constructor(id: string, width: number, height: number, x: number, y: number) {\r\n        this.id = id;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n\r\nexport class LayoutGraphEdge {\r\n    public source: string;\r\n    public target: string;\r\n}\r\n\r\n// \t\t\t\t######################################################### DagreGraph #########################################################\r\nexport class DagreLayoutMin implements Layout {\r\n    public static EDGE_KEY_DELIM = '\\x01';\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        let g, layoutNode, nodes, newEdge, edges;\r\n        let i, n, x, y, sId, tId, split = DagreLayoutMin.EDGE_KEY_DELIM;\r\n        let e: Association;\r\n\r\n        nodes = node['nodes'];\r\n        edges = node['edges'];\r\n        g = new LayoutGraphMin();\r\n\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            g.setNode(n.id, new LayoutGraphNode(n.id, n.getSize().x, n.getSize().y, n.getPos().x, n.getPos().y));\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            sId = this.getNodeId(e.$sNode);\r\n            tId = this.getNodeId(e.$tNode);\r\n            if (sId > tId) {\r\n                let tmp = tId;\r\n                tId = sId;\r\n                sId = tmp;\r\n            }\r\n            let idAB = sId + split + tId + split;\r\n            let idBA = tId + split + sId + split;\r\n            if (sId !== tId && g.edgesLabel.indexOf(idAB) < 0 && g.edgesLabel.indexOf(idBA) < 0) {\r\n                newEdge = {source: sId, target: tId, minlen: 1, weight: 1};\r\n                g.edges.push(newEdge);\r\n                g.edgesLabel.push(idAB);\r\n                // In Edges\r\n                if (!g.inEdges[tId]) {\r\n                    g.inEdges[tId] = [];\r\n                }\r\n                g.inEdges[tId].push(newEdge);\r\n\r\n                // Out Edges\r\n                if (!g.outEdges[sId]) {\r\n                    g.outEdges[sId] = [];\r\n                }\r\n                g.outEdges[sId].push(newEdge);\r\n            }\r\n        }\r\n        this.layouting(g);\r\n        // Set the layouting back\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            layoutNode = g.node(n.id);\r\n            x = n.getPos().x;\r\n            y = n.getPos().y;\r\n            if (x < 1 && y < 1) {\r\n                n.withPos(Math.ceil(layoutNode.x), Math.ceil(layoutNode.y));\r\n            }\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            // OBSOLETE method:  e.calc(graph.canvas);\r\n        }\r\n        graph.draw();\r\n    }\r\n\r\n    public getNodeId(node: Control): string {\r\n        if (node.$owner) {\r\n            return this.getNodeId(node.$owner) || node.id;\r\n        }\r\n        return node.id;\r\n    }\r\n\r\n    public layouting(g: LayoutGraphMin) {\r\n        this.longestPath(g);\r\n        this.normalizeRanks(g);\r\n        this.normalizeEdge(g);\r\n        // this.setSimpleOrder(g);\r\n        this.order(g);\r\n        g.ranksep = 25;\r\n        // remove Dummy\r\n        this.removeDummy(g);\r\n        this.position(g);\r\n    }\r\n\r\n    public setSimpleOrder(g: LayoutGraphMin) {\r\n        let i, n;\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            n.order = n.rank;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Applies heuristics to minimize edge crossings in the graph and sets the best\r\n     * order solution as an order attribute on each node.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Graph must be DAG\r\n     *    2. Graph nodes must be objects with a \"rank\" attribute\r\n     *    3. Graph edges must have the \"weight\" attribute\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Graph nodes will have an \"order\" attribute based on the results of the\r\n     *       algorithm.\r\n     */\r\n    public order(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        let visited = {};\r\n        let node, n, order, i;\r\n        for (i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (n in g.nodes) {\r\n            if (visited[n]) {\r\n                continue;\r\n            }\r\n            visited[n] = true;\r\n            node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank].push(n);\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                g.nodes[layering[order][n]].order = parseInt(n);\r\n            }\r\n        }\r\n        // Fix resolve conflict\r\n        for (order in layering) {\r\n            if (layering[order].length > 1) {\r\n                for (n in layering[order]) {\r\n                    if (layering[order].hasOwnProperty(n) === false) {\r\n                        continue;\r\n                    }\r\n                    let name = layering[order][n];\r\n                    let sum = 0;\r\n                    let weight = 1;\r\n                    let edges = g.dummyEdges[name];\r\n                    if (edges) {\r\n                        for (i in edges) {\r\n                            if (edges.hasOwnProperty(i) === false) {\r\n                                continue;\r\n                            }\r\n                            let edge = edges[i];\r\n                            let nodeU = g.node(edge.target);\r\n                            sum = sum + (edge.weight * nodeU.order);\r\n                            weight = weight + edge.weight;\r\n                        }\r\n                    }\r\n                    g.node(name).barycenter = sum / weight;\r\n                    g.node(name).weight = weight;\r\n                }\r\n            } else if (layering[order].length > 0) {\r\n                for (n in layering[order]) {\r\n                    let name = layering[order][n];\r\n                    g.node(name).barycenter = 1;\r\n                    g.node(name).weight = 1;\r\n                }\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                let node = g.nodes[layering[order][n]];\r\n                node.order = parseInt(n) + node.barycenter * node.weight;\r\n                if (isNaN(node.order)) {\r\n                    console.log('ERROR');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public removeDummy(g: LayoutGraphMin) {\r\n        for (let z in g.dummyNodes) {\r\n            let node = g.dummyNodes[z];\r\n            g.setNode(node.id, null);\r\n        }\r\n        g.dummyNodes = [];\r\n        g.dummyEdges = {};\r\n    }\r\n\r\n    /*\r\n     * Breaks any long edges in the graph into short segments that span 1 layer\r\n     * each. This operation is undoable with the denormalize function.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. The input graph is a DAG.\r\n     *    2. Each node in the graph has a \"rank\" property.\r\n     *\r\n     * Post-condition:\r\n     *\r\n     *    1. All edges in the graph have a length of 1.\r\n     *    2. Dummy nodes are added where edges have been split into segments.\r\n     *    3. The graph is augmented with a \"dummyChains\" attribute which contains\r\n     *       the first dummy in each chain of dummy nodes produced.\r\n     */\r\n    public normalizeEdge(g: LayoutGraphMin): void {\r\n        let i: number = 1;\r\n        for (let id in g.edges) {\r\n            let e: LayoutGraphEdge = <LayoutGraphEdge>g.edges[id];\r\n            let v: string = e.source;\r\n            let vRank = g.node(v).rank;\r\n            const w: string = e.target;\r\n            const wRank: number = g.node(w).rank;\r\n            let name: string;\r\n\r\n            if (wRank === vRank + 1) {\r\n                continue;\r\n            }\r\n\r\n            let dummy;\r\n            for (vRank = vRank + 1; vRank < wRank; ++vRank) {\r\n                name = '_d' + e.source + e.target + (i++);\r\n                let newEdge = {source: v, target: name, minlen: 1, weight: 1};\r\n                dummy = new LayoutGraphNode(name, 0, 0, 0, 0);\r\n                dummy.edgeObj = e;\r\n                dummy.rank = vRank;\r\n                // Dummy Edges\r\n                if (!g.dummyEdges[v]) {\r\n                    g.dummyEdges[v] = [];\r\n                }\r\n                g.dummyEdges[v].push(newEdge);\r\n\r\n                g.dummyNodes.push(dummy);\r\n                g.setNode(dummy.id, dummy);\r\n                v = name;\r\n            }\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Initializes ranks for the input graph using the longest path algorithm. This\r\n     * algorithm scales well and is fast in practice, it yields rather poor\r\n     * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\r\n     * ranks wide and leaving edges longer than necessary. However, due to its\r\n     * speed, this algorithm is good for getting an initial ranking that can be fed\r\n     * into other algorithms.\r\n     *\r\n     * This algorithm does not normalize layers because it will be used by other\r\n     * algorithms in most cases. If using this algorithm directly, be sure to\r\n     * run normalize at the end.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Input graph is a DAG.\r\n     *    2. Input graph node labels can be assigned properties.\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Each node will be assign an (unnormalized) \"rank\" property.\r\n     */\r\n    public longestPath(g: LayoutGraphMin) {\r\n        let i, n, visited = [];\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            visited.push(i);\r\n            n.rank = this.findAllPaths(g, n, 0, visited);\r\n            g.minRank = Math.min(g.minRank, n.rank);\r\n        }\r\n    }\r\n\r\n    public findAllPaths(g: LayoutGraphMin, n: Node, currentCost: number, path: Array<String>) {\r\n        let min: number = 0;\r\n        let id: string;\r\n        let z: number;\r\n        let target;\r\n        if (g.outEdges[n.id]) {\r\n            for (z = 0; z < g.outEdges[n.id].length; z++) {\r\n                id = g.outEdges[n.id][z].target;\r\n                target = g.nodes[id];\r\n                if (path[id]) {\r\n                    min = Math.min(min, target.rank);\r\n                } else if (path.indexOf(id) < 0) {\r\n                    min = Math.min(min, this.findAllPaths(g, target, currentCost - 2, path));\r\n                } else {\r\n                    min = currentCost;\r\n                }\r\n            }\r\n            return min;\r\n        }\r\n        return currentCost;\r\n    }\r\n\r\n    /*\r\n     * Adjusts the ranks for all nodes in the graph such that all nodes v have\r\n     * rank(v) >= 0 and at least one node w has rank(w) = 0.\r\n     */\r\n    public normalizeRanks(g: LayoutGraphMin) {\r\n        let min = g.minRank;\r\n        let value;\r\n        g.maxRank = Number.NEGATIVE_INFINITY;\r\n        g.maxHeight = 0;\r\n        g.maxWidth = 0;\r\n        for (let i in g.nodes) {\r\n            let node = g.nodes[i];\r\n            if (node.rank !== undefined) {\r\n                node.rank -= min;\r\n                value = Math.abs(node.rank);\r\n                if (value > g.maxRank) {\r\n                    g.maxRank = value;\r\n                }\r\n                g.maxHeight = Math.max(g.maxHeight, node.height);\r\n                g.maxWidth = Math.max(g.maxWidth, node.width);\r\n            }\r\n        }\r\n    }\r\n\r\n    public position(g: LayoutGraphMin) {\r\n        this.positionY(g);\r\n        let list = this.positionX(g);\r\n        for (let i in list) {\r\n            for (let pos in list[i]) {\r\n                if (list[i].hasOwnProperty(pos) === false) {\r\n                    continue;\r\n                }\r\n                if (g.node(list[i][pos])) {\r\n                    g.node(list[i][pos]).x = parseInt(pos) * g.maxWidth;\r\n                }\r\n            }\r\n\r\n        }\r\n    }\r\n\r\n    public positionY(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        let rankSep = g.ranksep;\r\n        let prevY = 0;\r\n        for (let layer in layering) {\r\n            let maxHeight = g.maxHeight;\r\n            for (let v in layering[layer]) {\r\n                if (layering[layer].hasOwnProperty(v) === false) {\r\n                    continue;\r\n                }\r\n                let id = layering[layer][v];\r\n                g.nodes[id].y = prevY + maxHeight / 2;\r\n            }\r\n            prevY += maxHeight + rankSep;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\r\n     * function will produce a matrix with the ids of each node.\r\n     */\r\n    public buildLayerMatrix(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        for (let i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (let n in g.nodes) {\r\n            let node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank][node.order] = n;\r\n            }\r\n        }\r\n        return layering;\r\n    }\r\n\r\n    public positionX(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        return layering;\r\n    }\r\n}\r\n","import { Point } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport Layout from './Layout';\r\n\r\nexport class Random implements Layout {\r\n\r\n  public layout(graph: Graph) {\r\n\r\n    let model = graph.$graphModel;\r\n\r\n    if (model.nodes) {\r\n      for (let node of model.nodes) {\r\n        let pos: Point = node.getPos();\r\n        if (pos.x === 0 && pos.y === 0) {\r\n          let x = Util.getRandomInt(0, graph.canvasSize.width);\r\n          let y = Util.getRandomInt(0, graph.canvasSize.height);\r\n          node.withPos(x, y);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","export * from './DagreLayout';\r\nexport * from './Random';\r\nexport * from './DagreLayoutMin';\r\n\r\nimport {DagreLayout} from './DagreLayout';\r\nimport {DagreLayoutMin} from './DagreLayoutMin';\r\nimport {Random} from './Random';\r\nnew DagreLayout();\r\nnew DagreLayoutMin();\r\nnew Random();\r\n","import {VirtualKeyBoard} from './VirtualKeyBoard';\r\n\r\nexport {Point} from './elements/BaseElements';\r\nexport {Bridge, DelegateAdapter} from './Bridge';\r\nexport {Graph} from './elements/Graph';\r\nexport * from './elements/nodes';\r\nexport * from './elements/edges';\r\nexport * from './adapters';\r\nexport * from './UML';\r\nimport {Point} from './elements/BaseElements';\r\nimport {Graph} from './elements/Graph';\r\nimport {ClassEditor} from './elements/ClassEditor';\r\nimport {Bridge} from './Bridge';\r\nimport {Util} from './util';\r\nimport * as nodes  from './elements/nodes';\r\nimport * as edges from './elements/edges';\r\nimport {ScrumBoard} from './ScrumBoard';\r\n\r\nif (!window['Point']) {\r\n    window['Point'] = Point;\r\n    window['Graph'] = Graph;\r\n    window['bridge'] = new Bridge();\r\n    window['Util'] = Util;\r\n    window['Class'] = nodes.Class;\r\n    window['Association'] = edges.Association;\r\n    window['SymbolLibary'] = nodes.SymbolLibary;\r\n    window['ClassEditor'] = ClassEditor;\r\n    window['VirtualKeyBoard'] = VirtualKeyBoard;\r\n    window['ScrumBoard'] = ScrumBoard;\r\n}\r\n","'use strict';\r\nimport { CSS } from './CSS';\r\nimport { Node } from './elements/nodes/Node';\r\nimport { DiagramElement, Point } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport class Util {\r\n\r\n    public static isAutoSave: boolean;\r\n\r\n    static getRandomInt(min: number, max: number): number {\r\n        return Math.floor(Math.random() * (max - min + 1)) + min;\r\n    }\r\n\r\n    static createShape(attrs: any): SVGSVGElement {\r\n        let xmlns = attrs.xmlns || 'http://www.w3.org/2000/svg';\r\n        let shape = document.createElementNS(xmlns, attrs.tag);\r\n\r\n        for (let attr in attrs) {\r\n            if (!attrs.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr !== 'tag') {\r\n                shape.setAttribute(attr, attrs[attr]);\r\n\r\n            }\r\n        }\r\n        return <SVGSVGElement><any>shape;\r\n    }\r\n\r\n    static toPascalCase(value: string): string {\r\n        value = value.charAt(0).toUpperCase() + value.substring(1).toLowerCase();\r\n        return value;\r\n    }\r\n\r\n    static isSVG(tag: string): boolean {\r\n        let i,\r\n            list = ['svg', 'path', 'polygon', 'polyline', 'line', 'title', 'rect', 'filter', 'feGaussianBlur', 'feOffset', 'feBlend', 'linearGradient', 'stop', 'text', 'symbol', 'textPath', 'defs', 'fegaussianblur', 'feoffset', 'feblend', 'circle', 'ellipse', 'g'];\r\n        for (i = 0; i < list.length; i += 1) {\r\n            if (list[i] === tag) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    static createHTML(node: any): HTMLElement {\r\n        return <HTMLElement>this.create(node);\r\n    }\r\n    static create(node: any): Element {\r\n        let style, item, xmlns, key, tag, k;\r\n        if (document.createElementNS && (this.isSVG(node.tag) || node.xmlns)) {\r\n            if (node.xmlns) {\r\n                xmlns = node.xmlns;\r\n            } else {\r\n                xmlns = 'http://www.w3.org/2000/svg';\r\n            }\r\n            if (node.tag === 'img' && xmlns) {\r\n                item = document.createElementNS(xmlns, 'image');\r\n                item.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\r\n                item.setAttributeNS('http://www.w3.org/1999/xlink', 'href', node.src);\r\n            } else {\r\n                item = document.createElementNS(xmlns, node.tag);\r\n            }\r\n        } else {\r\n            item = document.createElement(node.tag);\r\n        }\r\n        tag = node.tag.toLowerCase();\r\n        for (key in node) {\r\n            if (!node.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            k = key.toLowerCase();\r\n            if (node[key] === null) {\r\n                continue;\r\n            }\r\n            if (k === 'tag' || k.charAt(0) === '$' || k === '$graphModel') {\r\n                continue;\r\n            }\r\n            if (k.charAt(0) === '#') {\r\n                item[k.substring(1)] = node[key];\r\n                continue;\r\n            }\r\n            if (k === 'rotate') {\r\n                item.setAttribute('transform', 'rotate(' + node[key] + ',' + node.$graphModel.x + ',' + node.$graphModel.y + ')');\r\n                continue;\r\n            }\r\n            if (k === 'value') {\r\n                if (!node[key]) {\r\n                    continue;\r\n                }\r\n                if (tag !== 'input') {\r\n                    if (tag === 'text') {// SVG\r\n                        item.appendChild(document.createTextNode(node[key]));\r\n                    } else {\r\n                        item.innerHTML = node[key];\r\n                    }\r\n                } else {\r\n                    item[key] = node[key];\r\n                }\r\n                continue;\r\n            }\r\n            if (k.indexOf('on') === 0) {\r\n                this.bind(item, k.substring(2), node[key]);\r\n                continue;\r\n            }\r\n            if (k.indexOf('-') >= 0) {\r\n                item.style[key] = node[key];\r\n            } else {\r\n                if (k === 'style' && typeof (node[key]) === 'object') {\r\n                    for (style in node[key]) {\r\n                        if (!node[key].hasOwnProperty(style)) {\r\n                            continue;\r\n                        }\r\n                        if (node[key][style]) {\r\n                            if ('transform' === style) {\r\n                                item.style.transform = node[key][style];\r\n                                item.style.msTransform = item.style.MozTransform = item.style.WebkitTransform = item.style.OTransform = node[key][style];\r\n                            } else {\r\n                                item.style[style] = node[key][style];\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    item.setAttribute(key, node[key]);\r\n                }\r\n            }\r\n        }\r\n        if (node.$parent) {\r\n            node.$parent.appendChild(item);\r\n        }\r\n        if (node.$graphModel) {\r\n            item.$graphModel = node.$graphModel;\r\n        }\r\n        return item;\r\n    }\r\n\r\n    static setSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttribute('width', value);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.setAttribute('height', value);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setAttributeSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttributeNS(null, 'width', value);\r\n        value = Util.getValue(height);\r\n        item.setAttributeNS(null, 'height', value);\r\n    }\r\n\r\n    static setStyleSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setPos(item: any, x: number, y: number): void {\r\n        if (item.x && item.x.baseVal) {\r\n            item.style.left = x + 'px';\r\n            item.style.top = y + 'px';\r\n        } else {\r\n            item.x = x;\r\n            item.y = y;\r\n        }\r\n    }\r\n\r\n    static getValue(value: string | number): number {\r\n        return parseInt(('0' + value).replace('px', ''), 10);\r\n    }\r\n\r\n    static isIE(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('.net') > -1;\r\n    }\r\n\r\n    static isEdge(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('edge') > -1;\r\n    }\r\n\r\n    static isFireFox(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n    }\r\n\r\n    static isSafari(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        return navigator.userAgent.toLowerCase().indexOf('safari') > -1 && !isEdge;\r\n    }\r\n\r\n    static isOpera(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('opera') > -1;\r\n    }\r\n\r\n    static isChrome(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        let isSafari = Util.isSafari();\r\n        return navigator.userAgent.toLowerCase().indexOf('chrome') > -1 && !isEdge && isSafari;\r\n    }\r\n\r\n    static getEventX(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetX'] : event.layerX;\r\n    }\r\n\r\n    static getEventY(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetY'] : event.layerY;\r\n    }\r\n\r\n    static getNumber(str: string): number {\r\n        return parseInt((str || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    static getStyle(styleProp: string): CSS {\r\n        let i, style, diff, current, ref, el = document.createElement('div'), css;\r\n        document.body.appendChild(el);\r\n        css = new CSS(styleProp);\r\n        ref = new CSS(styleProp, el).css;\r\n        style = window.getComputedStyle(el, null);\r\n        el.className = styleProp;\r\n        current = new CSS(styleProp, el).css;\r\n        diff = Util.getNumber(style.getPropertyValue('border-width'));\r\n        for (i in current) {\r\n            if (!current.hasOwnProperty(i)) {\r\n                continue;\r\n            }\r\n            if (i === 'width' || i === 'height') {\r\n                if (Util.getNumber(current[i]) !== 0 && Util.getNumber(current[i]) + diff * 2 !== Util.getNumber(ref[i])) {\r\n                    css.add(i, current[i]);\r\n                }\r\n            } else if (current[i] !== ref[i]) {\r\n                css.add(i, current[i]);\r\n            }\r\n        }\r\n        document.body.removeChild(el);\r\n        return css;\r\n    }\r\n\r\n    static sizeOf(item: string | any, node?: Node): ClientRect {\r\n        let board;\r\n        let rect: ClientRect;\r\n        let addBoard: boolean;\r\n        if (!item) {\r\n            return undefined;\r\n        }\r\n        if (node) {\r\n            board = node.$owner.$view;\r\n            addBoard = false;\r\n        }\r\n\r\n        if (!board) {\r\n            addBoard = true;\r\n            board = Util.createShape({ tag: 'svg', id: 'root', width: 200, height: 200 });\r\n            document.body.appendChild(board);\r\n        }\r\n        if (board.tagName === 'svg') {\r\n            if (typeof item === 'string') {\r\n                item = Util.create({ tag: 'text', $font: true, value: item });\r\n                item.setAttribute('width', '5px');\r\n            }\r\n        } else if (typeof item === 'string') {\r\n            item = document.createTextNode(item);\r\n        }\r\n        board.appendChild(item);\r\n        rect = item.getBoundingClientRect();\r\n        board.removeChild(item);\r\n\r\n        if (addBoard) {\r\n            document.body.removeChild(board);\r\n        }\r\n        return rect;\r\n    }\r\n\r\n    static getColor(style: string, defaultColor?: string) {\r\n        if (style) {\r\n            if (style.toLowerCase() === 'create') {\r\n                return '#008000';\r\n            }\r\n            if (style.toLowerCase() === 'nac') {\r\n                return '#FE3E3E';\r\n            }\r\n            if (style.indexOf('#') === 0) {\r\n                return style;\r\n            }\r\n        }\r\n        if (defaultColor) {\r\n            return defaultColor;\r\n        }\r\n        return '#000';\r\n    }\r\n\r\n    public static utf8$to$b64(str: string): string {\r\n        return window.btoa(encodeURIComponent(str));\r\n    }\r\n\r\n    public static showSVG(control: DiagramElement) {\r\n        let svg = Util.create({\r\n            tag: 'svg',\r\n            style: { left: control.getPos().x, top: control.getPos().y, position: 'absolute' }\r\n        });\r\n        let child = control.getSVG();\r\n        if (child) {\r\n            svg.appendChild(child);\r\n        }\r\n        Util.setSize(svg, control.getSize().x, control.getSize().y);\r\n        document.body.appendChild(svg);\r\n    }\r\n\r\n    public static toJson(ref: JSON | Object): Object {\r\n        let result = {};\r\n        return Util.copy(result, ref, false, false);\r\n    }\r\n\r\n    public static initControl(parent: Control, control: Control, type: string, id: string, json: JSON | Object) {\r\n        if (typeof control.init === 'function') {\r\n            control.init(parent, type, id);\r\n        }\r\n        if (typeof control.load === 'function') {\r\n            control.load(json);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * copy One Json into another\r\n     * @function\r\n     * @param ref reference Json\r\n     * @param src source Json\r\n     * @param full all attributes include privet $\r\n     * @param replace set the original reference or copy it\r\n     * @returns ref\r\n     * @name copy\r\n     */\r\n    public static copy(ref: JSON | Object, src: JSON | Object, full: boolean, replace: boolean) {\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (replace) {\r\n                        ref[i] = src[i];\r\n                        continue;\r\n                    }\r\n                    if (!ref[i]) {\r\n                        if (src[i] instanceof Array) {\r\n                            ref[i] = [];\r\n                        } else {\r\n                            ref[i] = {};\r\n                        }\r\n                    }\r\n                    Util.copy(ref[i], src[i], full, false);\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref[i] = src[i];\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    public static xmlstringify(text: string): string {\r\n        text = text.replace('<', '&lt;');\r\n        text = text.replace('>', '&gt;');\r\n        return text;\r\n    }\r\n\r\n    public static toXML(ref: JSON | Object | any, src: JSON | Object | any, full: boolean, doc: Document): any {\r\n        let name;\r\n        if (!ref) {\r\n            name = src.constructor.name;\r\n            doc = document.implementation.createDocument(null, name, null);\r\n            ref = doc.childNodes[0];\r\n        }\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (!ref.getAttribute(i)) {\r\n                        if (src[i] instanceof Array) {\r\n                            for (let c in src[i]) {\r\n                                if (!src[i].hasOwnProperty(c)) {\r\n                                    continue;\r\n                                }\r\n                                name = src[i][c].constructor.name;\r\n                                let child = doc.createElement(name);\r\n                                ref.appendChild(child);\r\n                                Util.toXML(child, src[i][c], full, doc);\r\n                            }\r\n                        } else {\r\n                            name = src[i].constructor.name;\r\n                            let child = doc.createElement(name);\r\n                            ref.appendChild(child);\r\n                            Util.toXML(child, src[i], full, doc);\r\n                        }\r\n                    } else {\r\n                        Util.toXML(ref.getAttribute(i), src[i], full, doc);\r\n                    }\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref.setAttribute(i, src[i]);\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    static Range(min: Point, max: Point, x: number, y: number) {\r\n        max.x = Math.max(max.x, x);\r\n        max.y = Math.max(max.y, y);\r\n        min.x = Math.min(min.x, x);\r\n        min.y = Math.min(min.y, y);\r\n    }\r\n\r\n    public static getPosition(m: number, n: number, entity: DiagramElement, refCenter: Point) {\r\n        let t, p = [], list, distance = [], min = 999999999, position, i, step = 15;\r\n        let pos: Point = entity.getPos();\r\n        let size: Point = entity.getSize();\r\n        list = [Point.LEFT, Point.RIGHT];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = this.getLRPosition(m, n, entity, list[i]);\r\n            if (t.y >= pos.y && t.y <= (pos.y + size.y + 1)) {\r\n                t.y += (entity['$' + list[i]] * step);\r\n                if (t.y > (pos.y + size.y)) {\r\n                    // Alternative\r\n                    t = Util.getUDPosition(m, n, entity, Point.DOWN, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        list = [Point.UP, Point.DOWN];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = Util.getUDPosition(m, n, entity, list[i]);\r\n            if (t.x >= pos.x && t.x <= (pos.x + size.x + 1)) {\r\n                t.x += (entity['$' + list[i]] * step);\r\n                if (t.x > (pos.x + size.x)) {\r\n                    // Alternative\r\n                    t = this.getLRPosition(m, n, entity, Point.RIGHT, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        for (i = 0; i < p.length; i += 1) {\r\n            if (distance[i] < min) {\r\n                min = distance[i];\r\n                position = p[i];\r\n            }\r\n        }\r\n        return position;\r\n    }\r\n\r\n    public static getUDPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let x, y: number = pos.y;\r\n        if (p === Point.DOWN) {\r\n            y += size.y;\r\n        }\r\n        x = (y - n) / m;\r\n        if (step) {\r\n            x += e['$' + p] * step;\r\n            if (x < pos.x) {\r\n                x = pos.x;\r\n            } else if (x > (pos.x + size.x)) {\r\n                x = pos.x + size.x;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static getLRPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let y: number, x: number = pos.x;\r\n        if (p === Point.RIGHT) {\r\n            x += size.x;\r\n        }\r\n        y = m * x + n;\r\n        if (step) {\r\n            y += e['$' + p] * step;\r\n            if (y < pos.y) {\r\n                y = pos.y;\r\n            } else if (y > (pos.y + size.y)) {\r\n                y = pos.y + size.y;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static hasClass(element: Element, cls: string) {\r\n        let className = element.getAttribute('class');\r\n        return className.indexOf(cls) > 0;\r\n    }\r\n    public static addClass(element: Element, cls: string) {\r\n        if (!Util.hasClass(element, cls)) {\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className + ' ' + cls);\r\n        }\r\n    }\r\n    public static removeClass(element: Element, cls: string) {\r\n        if (Util.hasClass(element, cls)) {\r\n            let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className.replace(reg, ' ').trim());\r\n        }\r\n    }\r\n\r\n    public static startsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.startsWith) {\r\n            return s.indexOf(searchS) === 0;\r\n        }\r\n\r\n        return s.startsWith(searchS);\r\n    }\r\n\r\n    public static endsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.endsWith) {\r\n            let lastIndex = s.lastIndexOf(searchS);\r\n            return lastIndex !== -1 && lastIndex === (s.length - 1);\r\n        }\r\n\r\n        return s.endsWith(searchS);\r\n    }\r\n\r\n    public static includes(s: string, searchS: string): boolean {\r\n        if (!String.prototype.includes) {\r\n            let idx = s.indexOf(searchS);\r\n            return idx > -1;\r\n        }\r\n        if (s === null) {\r\n            return false;\r\n        }\r\n\r\n        return s.includes(searchS);\r\n    }\r\n\r\n    public static isParentOfChild(parent: Element, child: Element): boolean {\r\n\r\n        if (!parent || !child) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isIE()) {\r\n            let children = parent.childNodes;\r\n            // let found = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                let childItem = children[i];\r\n                if (childItem === child) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        return parent.contains(child);\r\n    }\r\n\r\n    public static createCustomEvent(type: string, params?: any): CustomEvent {\r\n        let evt: CustomEvent;\r\n\r\n        if (typeof window['CustomEvent'] !== 'function') {\r\n            params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n            evt = document.createEvent('CustomEvent');\r\n            evt.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\r\n            return evt;\r\n        }\r\n\r\n        evt = new CustomEvent(type);\r\n\r\n        return evt;\r\n    }\r\n\r\n    public static saveToLocalStorage(model: any): boolean {\r\n        if (!this.isAutoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isLocalStorageSupported()) {\r\n            if (model) {\r\n                if (model.$isLoading) {\r\n                    return false;\r\n                }\r\n                let jsonObj = Util.toJson(model);\r\n                let data = JSON.stringify(jsonObj, null, '\\t');\r\n                localStorage.setItem('diagram', data);\r\n            } else {\r\n                localStorage.removeItem('diagram');\r\n            }\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static getDiagramFromLocalStorage(): string {\r\n        if (Util.isLocalStorageSupported()) {\r\n            return localStorage.getItem('diagram');\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    public static isLocalStorageSupported(): boolean {\r\n        if (this.isEdge()) {\r\n            return false;\r\n        }\r\n        return localStorage !== undefined;\r\n    }\r\n}\r\n"],"sourceRoot":""}
Severity: Minor
Found in doc/diagram.js.map by fixme

TODO found
Open

{"version":3,"sources":["webpack://DiagramJS/webpack/bootstrap","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Adapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Bridge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/BridgeElement.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/CSS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Control.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Data.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventBus.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/EventListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/JSEPS.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Palette.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertiesPanel.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/PropertyBinder.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/RGBColor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/SVGConverter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/ScrumBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/Toolbar.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/UML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/VirtualKeyBoard.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/JavaAdapter.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/adapters/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/BaseElements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/ClassEditor.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Graph.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/Model.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregate.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Aggregation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Association.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Composition.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Generalisation.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/Implements.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/edges/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Attribute.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/AutoComplete.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/BR.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Button.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Class.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/ClazzProperty.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Dice.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Div.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Form.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/HTML.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/InfoText.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Input.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Label.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Method.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Node.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/SO.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/StereoType.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Symbol.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/Table.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/elements/nodes/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/AddNode.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Drag.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/GraphListener.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/ImportFile.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/NewEdge.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Select.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/Zoom.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/handlers/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayout.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/DagreLayoutMin.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/Random.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/layouts/index.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/main.ts","webpack://DiagramJS/./C:/Arbeit/workspace/DiagramJS/src/util.ts"],"names":[],"mappings":"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","file":"diagram.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./main.ts\");\n","export abstract class Adapter {\r\n    public id: string = null;\r\n\r\n    abstract update(evt: Object): boolean;\r\n}\r\n","'use strict';\r\n\r\nimport * as controls from './elements/nodes';\r\nimport * as adapters from './adapters';\r\nimport Data from './Data';\r\nimport {Control} from './Control';\r\nimport {Adapter} from './Adapter';\r\nimport {Graph} from './elements';\r\nimport {Util} from './util';\r\nimport {Point} from './elements';\r\n\r\nexport class Bridge extends Control {\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public static version: string = '0.42.01.1601007-1739';\r\n    private controlFactory: Object = {};\r\n    private adapterFactory: Object = {};\r\n    private controls: Object = {};\r\n    private adapters: Object = {};\r\n    private items: Object = {};\r\n    private controlNo: number = 1;\r\n    private online: boolean = true;\r\n    private language: string = navigator.language.toUpperCase();\r\n    private toolBar: HTMLElement;\r\n\r\n    constructor(viewRoot?: HTMLElement) {\r\n        super();\r\n        let i;\r\n\r\n        if (viewRoot) {\r\n            this.$view = viewRoot;\r\n        }\r\n\r\n        let keys: string[] = Object.keys(adapters);\r\n        for (i = 0; i < keys.length; i++) {\r\n            let child = adapters[keys[i]];\r\n            if (child && child.id) {\r\n                this.adapterFactory[child.id.toLowerCase()] = child;\r\n            }\r\n        }\r\n\r\n        keys = Object.keys(controls);\r\n        for (i = 0; i < keys.length; i++) {\r\n            this.addControl(controls[keys[i]]);\r\n        }\r\n        this.addControl(Graph);\r\n\r\n        let that = this;\r\n        window.addEventListener('load', function () {\r\n            let updateOnlineStatus = function updateOnlineStatus() {\r\n                that.setOnline(navigator.onLine);\r\n            };\r\n            window.addEventListener('online', updateOnlineStatus);\r\n            window.addEventListener('offline', updateOnlineStatus);\r\n        });\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public setOnline(value: boolean) {\r\n        this.online = value;\r\n        if (this.toolBar.children[0]) {\r\n            this.toolBar.children[0].className = value ? 'online' : 'offline';\r\n        }\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addToolbar(): boolean {\r\n        if (this.toolBar) {\r\n            return false;\r\n        }\r\n        this.toolBar = document.createElement('div');\r\n        this.toolBar.className = 'onlineStatus';\r\n        let child = document.createElement('div');\r\n        child.className = 'online';\r\n        this.toolBar.appendChild(child);\r\n        child = document.createElement('div');\r\n        child.className = 'lang';\r\n        child.innerHTML = this.language;\r\n        this.toolBar.appendChild(child);\r\n\r\n        let body: HTMLElement = document.getElementsByTagName('body')[0];\r\n        body.insertBefore(this.toolBar, body.firstChild);\r\n        // Refresh Online Status\r\n        this.setOnline(this.online);\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public addListener = function (listener: any) {\r\n        this.listener.push(listener);\r\n    };\r\n\r\n    public addControl(control: any) {\r\n        if (control && control.name) {\r\n            this.controlFactory[control.name.toLowerCase()] = control;\r\n        }\r\n    }\r\n\r\n    public getId(): string {\r\n        return 'control' + (this.controlNo++);\r\n    }\r\n\r\n    public adapterUpdate(message: string) {\r\n        let keys: string[] = Object.keys(this.adapters);\r\n        if (keys.length > 0) {\r\n            let i;\r\n            for (i = 0; i < keys.length; i++) {\r\n                let adapterList = this.adapters[keys[i]];\r\n                if (adapterList instanceof Adapter) {\r\n                    adapterList.update(message);\r\n                } else {\r\n                    for (let adapter of adapterList) {\r\n                        adapter.update(message);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        let config = {}, className: string, id: string;\r\n        if (typeof(json) === 'string') {\r\n            // Only a String\r\n            config['id'] = '' + json;\r\n            let item = document.getElementById(config['id']);\r\n            let className: string;\r\n            if (item) {\r\n                className = item.getAttribute('class');\r\n                if (!className) {\r\n                    className = item.getAttribute('classname') || '';\r\n                }\r\n                // Found Element and now config Data element\r\n                if (item.getAttribute('property')) {\r\n                    if (this.hasItem(item.getAttribute('property'))) {\r\n                        let data = this.getItem(item.getAttribute('property'));\r\n                        for (let key in data.prop) {\r\n                            if (item.getAttribute(key)) {\r\n                                data.setValue(key, item.getAttribute(key));\r\n                            }\r\n                        }\r\n                        if (item.getAttribute('property')) {\r\n                            // TODO: FIXME!!!\r\n                            // data.property = item.getAttribute(\"property\");\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                className = '' + json;\r\n            }\r\n            className = className.toLowerCase();\r\n            config['className'] = className;\r\n        } else {\r\n            config = <JSON>json;\r\n        }\r\n        // Config validate\r\n        if (!config['id']) {\r\n            config['id'] = this.getId();\r\n        }\r\n        // Backup for Old Graph\r\n        if (!config['className'] && (config['type'] === 'clazzdiagram' || config['type'] === 'objectdiagram')) {\r\n            config['className'] = 'graph';\r\n        }\r\n\r\n        className = config['className'] || config['class'];\r\n        className = className.toLocaleLowerCase();\r\n        id = config['id'];\r\n\r\n        // Check For Control or Data\r\n        if ((config['prop'] || config['upd'] || config['rem']) && this.controls[id] === null) {\r\n            // Its Data\r\n            let newData = !this.hasItem(config['id']);\r\n            let item: Data = this.getItem(config['id']);\r\n            // TODO: FIXME!!!\r\n            // if (id && className && !item.property) {\r\n            //      item.property = className;\r\n            // }\r\n            if (newData) {\r\n                for (let i in this.controls) {\r\n                    if (this.controls.hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    this.controls[i].addItem(this, item);\r\n                }\r\n            }\r\n            // Add all Values to item\r\n            item.addProperties(config);\r\n            // Bridge.addProperties(config['prop'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            // Bridge.addProperties(config['upd'], item);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return item;\r\n        }\r\n\r\n        let control;\r\n        if (this.controls[id]) {\r\n            control = this.controls[id];\r\n            control.initControl(json);\r\n            this.adapterUpdate(JSON.stringify(config));\r\n            return control;\r\n        }\r\n\r\n        if (typeof(this.controlFactory[className]) === 'object' || typeof(this.controlFactory[className]) === 'function') {\r\n            let obj = this.controlFactory[className];\r\n            control = new obj(json);\r\n            Util.initControl(owner || this, control, config['property'], id, json);\r\n\r\n            if (control.id) {\r\n                this.controls[control.id] = control;\r\n            } else {\r\n                this.controls[id] = control;\r\n            }\r\n\r\n            // create DataObject and register this control as listener to it\r\n            // let obj = {id:id};\r\n            // let data: Data = this.load(obj);\r\n            // data.addListener(this);\r\n\r\n            // Try to Show\r\n            if (typeof control.getSVG === 'function' && typeof control.getSize === 'function') {\r\n                let size: Point = control.getSize();\r\n\r\n                let svg = Util.createShape({\r\n                    tag: 'svg',\r\n                    id: 'root',\r\n                    width: size.x,\r\n                    height: size.y\r\n                });\r\n\r\n                let view = control.getSVG();\r\n                svg.appendChild(view);\r\n                document.getElementsByTagName('body')[0].appendChild(svg);\r\n            }\r\n            return control;\r\n        }\r\n        return null;\r\n        // bridge.load('{class:table, columns:[{id:'firstname'}, {id:'lastname'}]}');\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n\r\n        if (this.items[id] !== undefined) {\r\n            return true;\r\n        }\r\n        id = id.split('.')[0];\r\n        return (this.items[id] !== undefined);\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return this.items;\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        let item = this.items[id];\r\n        if (!item) {\r\n            id = id.split('.')[0];\r\n            item = this.items[id];\r\n            if (!item) {\r\n                item = new Data();\r\n                item.id = id;\r\n                this.items[id] = item;\r\n            }\r\n        }\r\n        return item;\r\n    }\r\n\r\n    /**\r\n     * Method for executing user input -> Event\r\n     * @param object\r\n     * @param attribute\r\n     * @param oldValue\r\n     * @param newValue\r\n     * @returns {boolean}\r\n     */\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        alert('Bridge.setValue: oldVal:' + oldValue + ', newVal: ' +  + newValue + ', attribute: ' + attribute + ', object: ' + JSON.stringify(object));\r\n        let obj: Data;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n\r\n        } else if (object instanceof Data) {\r\n            obj = object;\r\n            id = object.id;\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = <Data>object;\r\n            id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return false;\r\n        }\r\n        if (obj) {\r\n            // Execute Update to Data\r\n            obj.setValue(attribute, newValue);\r\n            // Could be done here, but currently is done at this.execueChange..:\r\n            // obj[attribute] = value;\r\n        }\r\n\r\n        /*let tmp = {'id': id};\r\n        if (typeof(newValue) !== 'undefined' && newValue !== null) {\r\n            let upd = {};\r\n            upd[attribute] = newValue;\r\n            tmp['upd'] = upd;\r\n        }\r\n        if (typeof(oldValue) !== 'undefined' && oldValue !== null) {\r\n            let rem = {};\r\n            rem[attribute] = oldValue;\r\n            tmp['rem'] = rem;\r\n        }*/\r\n        // this.load(tmp);\r\n        return true;\r\n    }\r\n\r\n    public getValue(object: Object, attribute: string): any {\r\n        let obj: Object;\r\n        let id: string;\r\n        if (object instanceof String || typeof object === 'string') {\r\n            // object is only the id of the Object, we want to change\r\n            id = object.toString();\r\n            obj = this.getItem(id);\r\n        } else if (object.hasOwnProperty('id')) {\r\n            // object is the real Object, we want to change\r\n            obj = object;\r\n            // id = object['id'];\r\n        } else {\r\n            console.log('object is neither Data nor String..');\r\n            return;\r\n        }\r\n        if (obj) {\r\n            if (obj.hasOwnProperty(attribute)) {\r\n                return obj[attribute];\r\n            } else if (obj instanceof Data) {\r\n                return (<Data>obj).getValue(attribute);\r\n            } else {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    public getNumber(object: Object, attribute: string, defaultValue: number = 0): number {\r\n        let res = <number>this.getValue(object, attribute);\r\n        if (typeof res === 'number') {\r\n            return res;\r\n        } else if (typeof res === 'string') {\r\n            // check whether res is a number\r\n            let value = Number(res);\r\n            if (value || value === 0) {\r\n                return value;\r\n            }\r\n        }\r\n        return defaultValue;\r\n    }\r\n\r\n    getControl(controlId: string) {\r\n        return this.controls[controlId];\r\n    }\r\n\r\n    public registerListener(eventType: string, control: Control, callBackfunction: string): Control {\r\n        if (typeof control === 'string') {\r\n            control = this.getControl(<string>control);\r\n        }\r\n        if (!control) {\r\n            return null;\r\n        }\r\n        if (eventType) {\r\n            eventType = eventType.toLowerCase();\r\n        }\r\n        control.registerListenerOnHTMLObject(eventType);\r\n        if (callBackfunction) {\r\n            let adapter: DelegateAdapter = new DelegateAdapter();\r\n            adapter.callBackfunction = callBackfunction;\r\n            adapter.id = control.getId();\r\n            this.addAdapter(adapter, eventType);\r\n        }\r\n        return control;\r\n    }\r\n\r\n    public addAdapter(adapter: Adapter | string, eventType: string): Adapter {\r\n        if (!eventType) {\r\n            eventType = '';\r\n        }\r\n        let result: Adapter;\r\n        if (adapter instanceof String) {\r\n            let obj = this.adapterFactory[adapter.toLowerCase()];\r\n            result = new obj();\r\n        } else {\r\n            result = <Adapter>adapter;\r\n        }\r\n        let handlers = this.adapters[eventType];\r\n\r\n        if (handlers === null || handlers === undefined) {\r\n            handlers = [];\r\n            this.adapters[eventType] = handlers;\r\n        }\r\n        handlers.push(result);\r\n        return result;\r\n    }\r\n\r\n    public fireEvent(evt: Event): void {\r\n        let handlers = this.adapters[''];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n        handlers = this.adapters[evt['eventType']];\r\n        if (handlers) {\r\n            for (let i = 0; i < handlers.length; i++) {\r\n                let adapter = handlers[i];\r\n                if (adapter.id === null || adapter.id === evt['id']) {\r\n                    adapter.update(evt);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport class DelegateAdapter extends Adapter {\r\n    adapter: Adapter;\r\n    callBackfunction: string;\r\n\r\n    update(evt: Event): boolean {\r\n        if (this.adapter) {\r\n            this.adapter.update(evt);\r\n            return true;\r\n        } else if (this.callBackfunction) {\r\n            return this.executeFunction(this.callBackfunction, evt);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public setAdapter(adapter: Adapter): boolean {\r\n        this.adapter = adapter;\r\n        return true;\r\n    }\r\n\r\n    private executeFunction(strValue: string, evt: Event): boolean {\r\n        let scope = window;\r\n        let scopeSplit = strValue.split('.');\r\n        for (let i = 0; i < scopeSplit.length - 1; i++) {\r\n            scope = scope[scopeSplit[i]];\r\n            if (scope === undefined) {\r\n                return false;\r\n            }\r\n        }\r\n        let fn: any = scope[scopeSplit[scopeSplit.length - 1]];\r\n        if (typeof fn === 'function') {\r\n            fn.call(scope);\r\n            return true;\r\n        } else {\r\n            window['callBack1'].update(evt);\r\n\r\n        }\r\n        return false;\r\n    }\r\n}\r\n","'use strict';\r\nimport Data from './Data';\r\n\r\nexport default class BridgeElement {\r\n    private static elementSet: BridgeElement[] = [];\r\n    public model: Data;\r\n    public id: string;\r\n    public gui: HTMLElement;\r\n\r\n    constructor(model: Data) {\r\n        this.model = model;\r\n        this.id = model.id;\r\n        BridgeElement.elementSet.push(this);\r\n    }\r\n}\r\n","import {Util} from './util';\r\n\r\n// \t\t\t\t######################################################### CSS #########################################################\r\nexport class CSS {\r\n    public css: Object;\r\n    private name: string;\r\n\r\n    constructor(name: string, item?: any) {\r\n        let i, value, border: string, prop, el;\r\n        this.name = name;\r\n        this.css = {};\r\n        if (!item) {\r\n            return;\r\n        }\r\n\r\n        el = window.getComputedStyle(item, null);\r\n        border = el.getPropertyValue('border');\r\n        for (i in el) {\r\n            prop = i;\r\n            value = el.getPropertyValue(prop);\r\n            if (value && value !== '') {\r\n                // optimize CSS\r\n                if (border) {\r\n                    if (prop === 'border-bottom' || prop === 'border-right' || prop === 'border-top' || prop === 'border-left') {\r\n                        if (value !== border) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-color' || prop === 'border-bottom-color' || prop === 'border-right-color' || prop === 'border-top-color' || prop === 'border-left-color') {\r\n                        if (border.substring(border.length - value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else if (prop === 'border-width') {\r\n                        if (border.substring(0, value.length) !== value) {\r\n                            this.css[prop] = value;\r\n                        }\r\n                    } else {\r\n                        this.css[prop] = value;\r\n                    }\r\n                } else {\r\n                    this.css[prop] = value;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public static getStdDef() {\r\n        let child, def = Util.create({tag: 'defs'});\r\n\r\n        child = Util.create({tag: 'filter', id: 'drop-shadow'});\r\n        child.appendChild(Util.create({tag: 'feGaussianBlur', 'in': 'SourceAlpha', result: 'blur-out', stdDeviation: 2}));\r\n        child.appendChild(Util.create({tag: 'feOffset', 'in': 'blur-out', dx: 2, dy: 2}));\r\n        child.appendChild(Util.create({tag: 'feBlend', 'in': 'SourceGraphic', mode: 'normal'}));\r\n        def.appendChild(child);\r\n        child = Util.create({tag: 'linearGradient', id: 'reflect', x1: 0, x2: 0, y1: '50%', y2: 0, spreadMethod: 'reflect'});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#aaa', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#eee', offset: '100%'}));\r\n        def.appendChild(child);\r\n\r\n        child = Util.create({tag: 'linearGradient', id: 'classelement', x1: 0, x2: '100%', y1: '100%', y2: 0});\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#fff', offset: 0}));\r\n        child.appendChild(Util.create({tag: 'stop', 'stop-color': '#d3d3d3', offset: 1}));\r\n        def.appendChild(child);\r\n\r\n        return def;\r\n    }\r\n\r\n    public static getSubstring(str: string, search: string, startChar: string, endChar: string, splitter: string): any {\r\n        let pos, end, count = 0, array = [];\r\n        pos = str.indexOf(search);\r\n        if (pos > 0) {\r\n            end = str.indexOf(startChar, pos);\r\n            pos = end + 1;\r\n            if (end > 0) {\r\n                while (end < str.length) {\r\n                    if (str.charAt(end) === startChar) {\r\n                        count += 1;\r\n                    }\r\n                    if (str.charAt(end) === endChar) {\r\n                        count -= 1;\r\n                        if (count === 0) {\r\n                            if (splitter && pos !== end) {\r\n                                array.push(str.substring(pos, end).trim());\r\n                            }\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (str.charAt(end) === splitter && count === 1) {\r\n                        array.push(str.substring(pos, end).trim());\r\n                        pos = end + 1;\r\n                    }\r\n\r\n                    end += 1;\r\n                }\r\n                if (splitter) {\r\n                    return array;\r\n                }\r\n                return str.substring(pos, end);\r\n            }\r\n            return str.substring(pos);\r\n        }\r\n        return '';\r\n    }\r\n\r\n    public static addStyle(board: SVGElement, styleName: any) {\r\n        let defs, style: any, css;\r\n        if (styleName.baseVal || styleName.baseVal === '') {\r\n            styleName = styleName.baseVal;\r\n        }\r\n        if (!styleName) {\r\n            return;\r\n        }\r\n        defs = CSS.getDefs(board);\r\n        if (defs.getElementsByTagName('style').length > 0) {\r\n            style = defs.getElementsByTagName('style')[0];\r\n        } else {\r\n            style = Util.create({tag: 'style'});\r\n            style.item = {};\r\n            defs.appendChild(style);\r\n        }\r\n        if (!style.item[styleName]) {\r\n            css = Util.getStyle(styleName);\r\n            style.item[styleName] = css;\r\n            style.innerHTML = style.innerHTML + '\\n.' + styleName + css.getSVGString(board);\r\n        }\r\n    }\r\n\r\n    public static addStyles(board: SVGElement, item: any) {\r\n        if (!item) {\r\n            return;\r\n        }\r\n        let items, i, className: any = item.className;\r\n\r\n        if (className) {\r\n            if (className.baseVal || className.baseVal === '') {\r\n                className = className.baseVal;\r\n            }\r\n        }\r\n        if (className) {\r\n            items = className.split(' ');\r\n            for (i = 0; i < items.length; i += 1) {\r\n                CSS.addStyle(board, items[i].trim());\r\n            }\r\n        }\r\n        for (i = 0; i < item.childNodes.length; i += 1) {\r\n            this.addStyles(board, item.childNodes[i]);\r\n        }\r\n    }\r\n\r\n    public static getDefs(board: SVGElement) {\r\n        let defs;\r\n        if (board.getElementsByTagName('defs').length < 1) {\r\n            defs = Util.create({tag: 'defs'});\r\n            board.insertBefore(defs, board.childNodes[0]);\r\n        } else {\r\n            defs = board.getElementsByTagName('defs')[0];\r\n        }\r\n        return defs;\r\n    }\r\n\r\n    public add(key: string, value: string) {\r\n        this.css[key] = value;\r\n    }\r\n\r\n    public get(key: string): any {\r\n        let i;\r\n        for (i in this.css) {\r\n            if (i === key) {\r\n                return this.css[key];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public getNumber(key: string) {\r\n        return parseInt((this.get(key) || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    public getSVGString(board: SVGElement) {\r\n        let str, pos, style, defs, value, filter, z;\r\n        str = '{';\r\n        for (style in this.css) {\r\n            if (!this.css.hasOwnProperty(style)) {\r\n                continue;\r\n            }\r\n            if (style === 'border') {\r\n                pos = this.css[style].indexOf(' ');\r\n                str = str + 'stroke-width: ' + this.css[style].substring(0, pos) + ';';\r\n                pos = this.css[style].indexOf(' ', pos + 1);\r\n                str = str + 'stroke:' + this.css[style].substring(pos) + ';';\r\n            } else if (style === 'background-color') {\r\n                str = str + 'fill: ' + this.css[style] + ';';\r\n            } else if (style === 'background') {\r\n                value = CSS.getSubstring(this.css[style], 'linear-gradient', '(', ')', ',');\r\n                if (value.length > 0) {\r\n                    defs = CSS.getDefs(board);\r\n                    if (value[0] === '45deg') {\r\n                        pos = 1;\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '100%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                    } else {\r\n                        filter = Util.create({\r\n                            tag: 'linearGradient',\r\n                            'id': this.name,\r\n                            x1: '0%',\r\n                            x2: '0%',\r\n                            y1: '100%',\r\n                            y2: '0%'\r\n                        });\r\n                        pos = 0;\r\n                    }\r\n                    defs.appendChild(filter);\r\n                    while (pos < value.length) {\r\n                        value[pos] = value[pos].trim();\r\n                        z = value[pos].lastIndexOf(' ');\r\n                        filter.appendChild(Util.create({\r\n                            tag: 'stop',\r\n                            'offset': value[pos].substring(z + 1),\r\n                            style: {'stop-color': value[pos].substring(0, z)}\r\n                        }));\r\n                        pos += 1;\r\n                    }\r\n                    str = str + 'fill: url(#' + this.name + ');';\r\n                    continue;\r\n                }\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n                // box-shadow: inset 0 3px 4px #888;\r\n// \t\t\t\t<defs>\r\n// \t\t\t\t\t<filter id='drop-shadow'>\r\n// \t\t\t\t\t\t<feGaussianBlur in='SourceAlpha' result='blur-out' stdDeviation='2'></feGaussianBlur>\r\n// \t\t\t\t\t\t<feOffset in='blur-out' dx='2' dy='2'></feOffset>\r\n// \t\t\t\t\t\t<feBlend in='SourceGraphic' mode='normal'></feBlend>\r\n// \t\t\t\t\t</filter>\r\n// \t\t\t\t</defs>\r\n            } else {\r\n                str = str + style + ': ' + this.css[style] + ';';\r\n            }\r\n        }\r\n        str = str + '}';\r\n        return str;\r\n    }\r\n}\r\n","import {Bridge} from './Bridge';\r\nimport Data from './Data';\r\nimport EventListener from './EventListener';\r\n\r\nexport abstract class Control {\r\n    public $owner: Control;\r\n    /**\r\n     *\r\n     */\r\n    public property: string;\r\n    public id: string;\r\n    public $view: Element;\r\n    public $viewData: Data = null;\r\n\r\n    protected $model: Data;\r\n    protected $viewListener: EventListenerOrEventListenerObject;\r\n\r\n    /**\r\n     * The properties, we want to listen to\r\n     */\r\n    // static defaultProperties: string[] = [];\r\n\r\n    // public getProperties(): string[] {\r\n    //     return this.properties;\r\n    // }\r\n\r\n    constructor() {\r\n        // e.g. this.properties.push(\"key\");\r\n        // this.properties.push(\"property\");\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data: Data = new Data();\r\n        if (oldData) {\r\n            oldData.removeListener(this);\r\n            const keys: string[] = oldData.getKeys();\r\n            for (let i = 0; i < keys.length; i++) {\r\n                let attr = keys[i];\r\n                if (this.$view) {\r\n                    if (this.$view[attr] === null) {\r\n                        continue;\r\n                    }\r\n                    data.setValue(attr, this.$view[attr]);\r\n                } else {\r\n                    data.setValue(attr, null);\r\n                }\r\n            }\r\n        }\r\n        data.addListener(this);\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     *  Set the new HTMLElement and attach listener to it.\r\n     *  Also remove Listeners from old one and return the old one, if present.\r\n     * @param element\r\n     * @returns The previous Element\r\n     */\r\n    public setView(element: Element): Element {\r\n        let oldElement: Element = null;\r\n        if (this.$view) {\r\n            oldElement = this.$view;\r\n            if (this.$viewListener) {\r\n                oldElement.removeEventListener('change', this.$viewListener);\r\n            }\r\n        }\r\n        this.$view = element;\r\n\r\n        if (this.$viewListener) {\r\n            element.addEventListener('change', this.$viewListener);\r\n        }\r\n        this.$viewData = this.initViewDataProperties(this.$viewData);\r\n        return element;\r\n    }\r\n\r\n    public init(owner: Control, property ?: string, id ?: string): Control {\r\n        if (!this.$owner) {\r\n            this.$owner = owner;\r\n        }\r\n        if (!this.id) {\r\n            this.id = id;\r\n        }\r\n        if (!this.property) {\r\n            this.property = this.generateID(property, id);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public createEventListener(): EventListener {\r\n        return new EventListener();\r\n    }\r\n\r\n    public getRoot(): Control {\r\n        if (this.$owner) {\r\n            return this.$owner.getRoot();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return null;\r\n    }\r\n\r\n    public initControl(data: any): void {\r\n        if (this.$view === null || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (data.hasOwnProperty('prop')) {\r\n            for (let key in data.prop) {\r\n                let oldValue = this.$viewData.getValue(key);\r\n                if (this.$view) {\r\n                    this.updateElement(key, oldValue, data.prop[key]);\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        let hasRem = data.hasOwnProperty('rem');\r\n        let removed: any[] = [];\r\n        if (data.hasOwnProperty('upd')) {\r\n            for (let key in data.upd) {\r\n                let oldValue;\r\n                let newValue = data.upd[key];\r\n                let entity;\r\n                const temp = false;\r\n                if (temp) {\r\n//                if (newValue == this.getViewData().getValue(key)) {\r\n                    // new Value assertEquals old value, so we don't need to change anything..\r\n                    // delete data.rem[key];\r\n                    if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                        removed.push(data.rem[key]);\r\n                    }\r\n                    continue;\r\n                }\r\n                if (hasRem && data.rem.hasOwnProperty(key)) {\r\n                    // if there's a rem, the oldValue from rem will be used and expected to be right..\r\n                    oldValue = data.rem[key];\r\n                    if (this.$model && this.$model.getValue(key) === oldValue) {\r\n                        entity = this.$model;\r\n//                    } else if (oldValue == this.getViewData().getValue(key)) {\r\n//                        $graphModel = this.getViewData();\r\n                    }\r\n                    delete data.rem[key];\r\n\r\n                    if (entity === null) {\r\n                        continue;\r\n                    }\r\n                }\r\n                if (entity) {\r\n                    if (!hasRem) {\r\n                        if (entity === this.$model) {\r\n                            oldValue = this.$model.getValue(key);\r\n                        } else {\r\n//                           oldValue = this.getViewData().getValue(key);\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (this.$model) {\r\n                        // try to get the oldValue directly from the $graphModel...\r\n                        oldValue = this.$model.getValue(key);\r\n                        entity = this.$model;\r\n                    }\r\n                    if (oldValue === null) {\r\n                        // if there was no data in the entity, we try to get oldValue from the $view\r\n//                        oldValue = this.getViewData().getValue(key);\r\n//                        entity = this.getViewData();\r\n                    }\r\n                }\r\n\r\n                //  || oldValue !== this.$viewData.getValue(key)\r\n                if (newValue === oldValue) {\r\n                    // no match, so update should be wrong...\r\n                    continue;\r\n                }\r\n                const viewDataOldValue = this.$viewData.getValue(key);\r\n                if (entity === this.$viewData) {\r\n\r\n                    // this.getViewData().setValue(key, newValue);\r\n                    if (this.$view) {\r\n                        this.updateElement(key, viewDataOldValue, newValue);\r\n                    }\r\n                } else {\r\n                    this.updateElement(key, viewDataOldValue, newValue);\r\n                }\r\n                this.getRoot().setValue(entity, key, newValue, oldValue);\r\n            }\r\n            // this.saveViewInData();\r\n        }\r\n        if (hasRem) {\r\n            for (let key in data.rem) {\r\n                if (removed.hasOwnProperty(key)) {\r\n                    continue;\r\n                }\r\n                let oldValue;\r\n//                    this.getViewData().getValue(key);\r\n//                if (oldValue != data.rem[key] || data.upd !== undefined && (data.upd[key] == oldValue || this.getViewData().getValue(key) == data.upd[key])) {\r\n                // if rem is invalid, or if the change is already applied, don't do anything..\r\n                //                  continue;\r\n                //            }\r\n                // delete this.$viewData.getValue(key);\r\n                // this.saveViewInData();\r\n                this.updateElement(key, null, null);\r\n                // this.$view.removeAttribute(key);\r\n                if (this.$model) {\r\n//                    this.getRoot().setValue(this.$graphModel, key, this.getViewData().getValue(key), oldValue);\r\n                }\r\n            }\r\n        }\r\n        if (this.property) {\r\n            // Add listener to Input field:\r\n            this.$view['onchange'] = ((ev: Event) => {\r\n                    this.controlChanged(ev);\r\n                }\r\n            );\r\n        }\r\n//        this.saveViewInData();\r\n    }\r\n\r\n    public getItem(id: string): Data {\r\n        return null;\r\n    }\r\n\r\n    public hasItem(id: string): boolean {\r\n        return false;\r\n    }\r\n\r\n    public getItems(): Object {\r\n        return new Object();\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue ?: Object): boolean {\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Is called when a object, that the Control is listening to, changes its value.\r\n     * @param entity\r\n     * @param property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        if (oldValue === newValue || this.$viewData === null) {\r\n            return;\r\n        }\r\n        if (oldValue === this.$viewData.getValue(property)) {\r\n            return;\r\n        }\r\n        // Set NewData to ViewData and Fire PC\r\n        this.$viewData.setValue(property, newValue);\r\n\r\n//\r\n//\r\n//         // if (entity == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.entity) {\r\n//                 alert(\"entity = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.entity.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.entity, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the entity is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"entity = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n// >>>>>>> addOldFunctions\r\n        if (this.$viewData) {\r\n            this.$viewData.setValue(property, newValue);\r\n        }\r\n        if (this.$model) {\r\n            this.$model.setValue(property, newValue);\r\n        }\r\n        this.updateElement(property, oldValue, newValue);\r\n    }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            // Do Nothing\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  Update GUI Element\r\n     * @param {string} property\r\n     * @param oldValue\r\n     * @param newValue\r\n     */\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        if (this.$view && this.$view.hasAttribute(property)) {\r\n            this.$view.setAttribute(property, newValue);\r\n        }\r\n    }\r\n\r\n//        if (oldValue == newValue) {\r\n//            return;\r\n//        }\r\n//        if (oldValue == this.$viewData.getValue(property)) {\r\n//            return;\r\n//        }\r\n//        // Set NewData to ViewData and Fire PC\r\n//        this.$viewData.setValue(property, newValue);\r\n//\r\n//\r\n//\r\n//         // if ($graphModel == this.$viewData) {\r\n//             // if the ViewData is changed, we want to change the $view\r\n//             // if (this.$graphModel) {\r\n//                 alert(\"$graphModel = $viewData: \" + this.getStandardProperty() + \", \" +  property + \", newVal: \" + newValue + \", oldVal: \" + oldValue);\r\n//                 if (this.getStandardProperty() == property && this.$graphModel.hasProperty(property)) {\r\n//                     this.getRoot().setValue(this.$graphModel, property, newValue, oldValue);\r\n//                 }\r\n//             // }\r\n//         // } else {\r\n//             // the $graphModel is changed, so we want tell it to the $viewData\r\n//             // if (this.$viewData) {\r\n//                 alert(\"$graphModel = Data: \" +  property);\r\n//                 // this.getRoot().setValue(this.$viewData, property, newValue, oldValue);\r\n//                 this.$viewData.setValue(property, newValue);\r\n//             // }\r\n//         // }\r\n\r\n    public getId(): string {\r\n        return this.id;\r\n    }\r\n\r\n    public load(json: JSON | Object, owner ?: Control): any {\r\n        // Do Nothing\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.property || entity.hasProperty(this.property)) {\r\n                entity.addListener(this, this.property);\r\n                this.$model = entity;\r\n            }\r\n        }\r\n    }\r\n\r\n    public appendChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.appendChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].appendChild(child.$view);\r\n        }\r\n    }\r\n\r\n    public removeChild(child: Control) {\r\n        if (this.$view) {\r\n            this.$view.removeChild(child.$view);\r\n        } else {\r\n            document.getElementsByTagName('body')[0].removeChild(child.$view);\r\n        }\r\n    }\r\n\r\n    /*\r\n     Property looks like: 't1.talk'\r\n     */\r\n    public setProperty(property: string): void {\r\n        if (!this.property) {\r\n            return;\r\n        }\r\n        let objId = property.split('.')[0];\r\n        let object = null;\r\n        if (this.$owner.hasItem(objId)) {\r\n            object = this.$owner.getItem(objId);\r\n        }\r\n\r\n        // remove listener on old object\r\n        if (this.$model) {\r\n            // this.$graphModel.removeListener(this);\r\n            this.$model.removeListener(this, this.lastProperty);\r\n        }\r\n        this.property = property;\r\n\r\n        // add listener to object..\r\n        if (object) {\r\n            object.addListener(this, this.lastProperty);\r\n            this.$model = object;\r\n            this.updateElement(this.lastProperty, this.$viewData.getValue(this.lastProperty), object.prop[this.lastProperty]);\r\n        }\r\n    }\r\n\r\n    public registerListenerOnHTMLObject(eventType: string): boolean {\r\n        return this.registerEventListener(eventType, <HTMLElement>this.$view);\r\n    }\r\n\r\n    // Normal Event HTML-Event\r\n    // Eventtype:string,\r\n    // id:string of Control\r\n    public fireEvent(evt: Event): void {\r\n        // Do Nothing\r\n    }\r\n\r\n    public isClosed(): boolean {\r\n        return this['closed'];\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        if (this.isClosed()) {\r\n            return this.$owner.getShowed();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * the id of the Data object, that contains the properties of the view\r\n     * @returns {string}\r\n     */\r\n    protected getControlDataID() {\r\n        return this.id + '_data';\r\n    }\r\n\r\n    protected generateID(property ?: string, id ?: string): string {\r\n        if (property) {\r\n            return property;\r\n        }\r\n        if (id) {\r\n            // will generate a data Object suitable for the Control..\r\n            // must be overridden, if the changeEvent shouldn't listen on value...\r\n//            return id + '.' + this.getStandardProperty();//+ \"_data\"\r\n            return id + '.' + '_data';\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected updateViewData() {\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n        const keys: string[] = this.$viewData.getKeys();\r\n        for (let i = 0; i < keys.length; i++) {\r\n            let attr = keys[i];\r\n            if (this.$view[attr] === null) {\r\n                continue;\r\n            }\r\n            this.$viewData.setValue(attr, this.$view[attr]);\r\n        }\r\n    }\r\n\r\n    protected registerEventListener(eventType: string, htmlElement: HTMLElement): boolean {\r\n        if (!htmlElement) {\r\n            return false;\r\n        }\r\n        if (htmlElement instanceof HTMLElement === false) {\r\n            return false;\r\n        }\r\n        let control = this;\r\n        let listener = (t: any) => {\r\n            t.eventType = eventType;\r\n            t.id = control.id;\r\n            control.$owner.fireEvent(t);\r\n        };\r\n        htmlElement.addEventListener(eventType, listener);\r\n        return true;\r\n    }\r\n\r\n    get lastProperty(): string {\r\n        if (!this.property) {\r\n            return '';\r\n        }\r\n        let arr: string[] = this.property.split('.');\r\n        return arr[arr.length - 1];\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\n\r\nexport default class Data {\r\n    public prop = {};\r\n    id: string;\r\n    // $listener: Control[] = [];\r\n    $listener: Object = {};\r\n\r\n    private static nullCheck(property: string): string {\r\n        if (property === undefined || property === null) {\r\n            property = '';\r\n        }\r\n        return property;\r\n    }\r\n    public getKeys(): string[] {\r\n        return Object.keys(this.prop);\r\n    }\r\n\r\n    public addProperties(values: Object) {\r\n        if (!values) {\r\n            return;\r\n        }\r\n        if (values['prop']) {\r\n            let prop = values['prop'];\r\n            for (let property in prop) {\r\n                if (prop.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (prop[property] !== null && '' !== prop[property]) {\r\n                    this.setValue(property, prop[property]);\r\n                }\r\n            }\r\n        } else {\r\n            let upd = values['upd'] || {};\r\n            let rem = values['rem'] || {};\r\n\r\n            for (let property in upd) {\r\n                if (upd.hasOwnProperty(property) === false) {\r\n                    continue;\r\n                }\r\n                if (rem.hasOwnProperty(property) === false) {\r\n                    this.setValue(property, upd[property]);\r\n                } else {\r\n                    // if we have a rem, we wan't to check, if its a valid change (teh old value is the value in rem)\r\n                    if (this.getValue(property) === rem[property]) {\r\n                        this.setValue(property, upd[property]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getValue(attribute: string) {\r\n        return this.prop[attribute];\r\n    }\r\n\r\n    public setValue(attribute: string, newValue: any): void {\r\n        let oldValue = this.prop[attribute];\r\n        if (oldValue === newValue && newValue !== null) {\r\n            return;\r\n        }\r\n        this.prop[attribute] = newValue;\r\n        this.firePropertyChange(attribute, oldValue, newValue);\r\n    }\r\n\r\n    public addTo(attribute: string, newValue: any): boolean {\r\n        let add: boolean;\r\n        if (this.prop[attribute]) {\r\n            if (this.prop[attribute].contains(newValue) === false) {\r\n                add = true;\r\n            }\r\n        } else {\r\n            this.prop[attribute] = [];\r\n            add = true;\r\n        }\r\n        if (add) {\r\n            this.prop[attribute].push(newValue);\r\n            this.firePropertyChange(attribute, null, newValue);\r\n        }\r\n        return add;\r\n    }\r\n\r\n    public removeFrom(attribute: string, newValue: any): boolean {\r\n        if (!this.prop[attribute]) {\r\n            return true;\r\n        }\r\n        let pos: number = this.prop[attribute].indexOf(newValue);\r\n        if (pos < 0) {\r\n            return true;\r\n        }\r\n        this.prop[attribute].splice(pos, 1);\r\n        this.firePropertyChange(attribute, newValue, null);\r\n        return true;\r\n    }\r\n\r\n    public addListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(property);\r\n        if (!listeners) {\r\n            listeners = [];\r\n            this.$listener[Data.nullCheck(property)] = listeners;\r\n        }\r\n        listeners.push(control);\r\n    }\r\n\r\n    public removeListener(control: PropertyChangeSupport, property?: string) {\r\n        let listeners = this.getListeners(property);\r\n        if (listeners === null) {\r\n            return;\r\n        }\r\n        let pos = listeners.indexOf(control);\r\n        if (pos >= 0) {\r\n            listeners.splice(pos, 1);\r\n        }\r\n        if (listeners.length === 0 && Data.nullCheck(property) !== '') {\r\n            // only remove, if it's not the default listener list...\r\n            delete this.$listener[property];\r\n        }\r\n    }\r\n\r\n    public hasProperty(property: string): boolean {\r\n        return this.prop.hasOwnProperty(property);\r\n    }\r\n\r\n    public addFrom(attribute: string, oldData: Data): void {\r\n        if (oldData) {\r\n            this.setValue(attribute, oldData.getValue(attribute));\r\n        } else {\r\n            this.setValue(attribute, null);\r\n        }\r\n    }\r\n\r\n    public removeKey(key: string): any {\r\n        if (this.hasProperty(key)) {\r\n            const oldValue = this.prop[key];\r\n            delete this.prop[key];\r\n            return oldValue;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    protected getListeners(property: string): PropertyChangeSupport[] {\r\n        property = Data.nullCheck(property);\r\n        return this.$listener[property];\r\n    }\r\n\r\n    protected firePropertyChange(attribute: string, oldValue: Object, newValue: Object) {\r\n        attribute = Data.nullCheck(attribute);\r\n        // at first fire for the given property\r\n        let listeners: PropertyChangeSupport[] = this.getListeners(attribute);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n        // now we need to fire the Listeners that wan't to listen to everything\r\n        listeners = this.getListeners(null);\r\n        if (listeners) {\r\n            for (let i in listeners) {\r\n                listeners[i].propertyChange(this, attribute, oldValue, newValue);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport interface EventHandler {\r\n    canHandle(): boolean;\r\n    handle(event: Event, element: DiagramElement): boolean;\r\n    setActive(active: boolean): void;\r\n}\r\n\r\nexport class EventBus {\r\n    public static CREATE: string = 'Create';\r\n    public static EDITOR: string = 'Editor';\r\n    public static OPENPROPERTIES: string = 'openProperties';\r\n    public static RELOADPROPERTIES: string = 'reloadProperties';\r\n    public static ELEMENTMOUSEDOWN: string = 'ELEMENT:MOUSEDOWN';\r\n    public static ELEMENTMOUSEUP: string = 'ELEMENT:MOUSEUP';\r\n    public static ELEMENTMOUSELEAVE: string = 'ELEMENT:MOUSELEAVE';\r\n    public static ELEMENTMOUSEMOVE: string = 'ELEMENT:MOUSEMOVE';\r\n    public static ELEMENTMOUSEWHEEL: string = 'ELEMENT:MOUSEWHEEL';\r\n    public static ELEMENTCLICK: string = 'ELEMENT:CLICK';\r\n    public static ELEMENTDBLCLICK: string = 'ELEMENT:DBLCLICK';\r\n    public static ELEMENTDRAG: string = 'ELEMENT:DRAG';\r\n    public static ELEMENTDRAGOVER: string = 'ELEMENT:DRAGOVER';\r\n    public static ELEMENTDROP: string = 'ELEMENT:DROP';\r\n    public static ELEMENTDRAGLEAVE: string = 'ELEMENT:DRAGLEAVE';\r\n\r\n    public static EVENTS: string[] = [\r\n        EventBus.CREATE,\r\n        EventBus.EDITOR,\r\n        EventBus.OPENPROPERTIES,\r\n        EventBus.RELOADPROPERTIES,\r\n        EventBus.ELEMENTMOUSEDOWN,\r\n        EventBus.ELEMENTMOUSEUP,\r\n        EventBus.ELEMENTMOUSELEAVE,\r\n        EventBus.ELEMENTMOUSEMOVE,\r\n        EventBus.ELEMENTMOUSEWHEEL,\r\n        EventBus.ELEMENTCLICK,\r\n        EventBus.ELEMENTDRAG,\r\n        EventBus.ELEMENTDBLCLICK,\r\n        EventBus.ELEMENTDRAGOVER,\r\n        EventBus.ELEMENTDROP,\r\n        EventBus.ELEMENTDRAGLEAVE,\r\n    ];\r\n\r\n    private static handlers = {};\r\n\r\n    private static $activeHandler: string = '';\r\n\r\n    public static setActiveHandler(handler: string): void {\r\n        this.$activeHandler = handler;\r\n    }\r\n\r\n    public static isHandlerActiveOrFree(handler: string, notEmpty?: boolean): boolean {\r\n        if (notEmpty) {\r\n            return this.$activeHandler === handler;\r\n        }\r\n        return this.$activeHandler === handler || this.$activeHandler === '' || this.$activeHandler === undefined;\r\n    }\r\n\r\n    public static isAnyHandlerActive(): boolean {\r\n        return !(this.$activeHandler === '' || this.$activeHandler === undefined);\r\n    }\r\n\r\n    public static releaseActiveHandler(): void {\r\n        this.$activeHandler = '';\r\n    }\r\n\r\n    public static getActiveHandler(): string {\r\n        return this.$activeHandler;\r\n    }\r\n\r\n    static register(control: Control, view: Element) {\r\n        let events: string[];\r\n        if (typeof control['getEvents'] === 'function') {\r\n            events = control['getEvents']();\r\n        }\r\n\r\n        if (!events || !view) {\r\n            return;\r\n        }\r\n        for (let event of events) {\r\n            this.registerEvent(view, event, control);\r\n        }\r\n    }\r\n\r\n    static registerEvent(view: Element, event: string, control?: any) {\r\n        const pos: number = event.indexOf(':');\r\n        if (pos > 0) {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        } else {\r\n            view.addEventListener(event.substr(pos + 1).toLowerCase(), function (evt) { EventBus.publish(<DiagramElement>control, evt); });\r\n        }\r\n    }\r\n\r\n    public static publish(element: DiagramElement, evt: Event) {\r\n        let handlers = EventBus.handlers[evt.type];\r\n        if (handlers) {\r\n            for (let handler of handlers) {\r\n                handler.handle(evt, element);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static subscribe(handler: EventHandler, ...eventTypes: string[]) {\r\n        for (let event of eventTypes) {\r\n            let handlers = EventBus.handlers[event];\r\n            if (handlers === null || handlers === undefined) {\r\n                handlers = [];\r\n                EventBus.handlers[event] = handlers;\r\n            }\r\n            handlers.push(handler);\r\n        }\r\n    }\r\n}\r\n","import SimpleEvent from './Event';\r\n\r\nexport default class EventListener {\r\n    private $onUpdate: Function;\r\n\r\n    get onUpdate(): Function {\r\n        return this.$onUpdate;\r\n    }\r\n\r\n    set onUpdate(value: Function) {\r\n        this.$onUpdate = value;\r\n    }\r\n\r\n    update(event: SimpleEvent) {\r\n        this.$onUpdate(event);\r\n    }\r\n}\r\n","// ################################## jsEPS ####################################################\r\nimport {SVGConverter} from './SVGConverter';\r\n\r\nexport class JSEPS {\r\n    private max: number;\r\n    private min: number;\r\n    private inverting: boolean;\r\n    private output: string[];\r\n    private font: number;\r\n\r\n    constructor(options: any) {\r\n        this.max = 0;\r\n        this.min = 999;\r\n        let hasInverting = typeof (options.inverting);\r\n        this.inverting = (options && hasInverting !== 'undefined' ? options.inverting : true);\r\n        this.output = ['%!PS-Adobe-3.0 EPSF-3.0', '1 setlinewidth'];\r\n        this.out('/FSD {findfont exch scalefont def} bind def % In the document prolog: define');\r\n        this.out('/SMS {setfont moveto show} bind def % some useful procedures');\r\n        this.out('/MS {moveto show} bind def');\r\n        this.out('/F1  10  /Helvetica  FSD % At the start of the script: set up');\r\n        this.font = 1;\r\n    }\r\n\r\n    public out(value: string) {this.output.push(value); }\r\n    public rect(x: number, y: number, width: number, height: number, style: string) {\r\n        y = y + (this.inverting ? height : 0);\r\n        if (style && style.indexOf('fill:url(#classelement);') >= 0) {\r\n            this.out('gsave 0.93 0.93 0.93 setrgbcolor newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectfill grestore');\r\n        } else {\r\n            this.out('newpath ' + x + ' ' + this.y(y) + ' ' + width + ' ' + height + ' rectstroke');\r\n        }\r\n    }\r\n    public setFillColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public y(value: number) {this.max = Math.max(this.max, value); this.min = Math.min(this.min, value); return this.inverting ? '%y(' + value + ')' : value; }\r\n    public getType(): string {\r\n        return 'application/postscript';\r\n    }\r\n\r\n    public getData(): string {\r\n        let t, end, url, text, typ = 'application/postscript', a = document.createElement('a'), data = '', pos, i;\r\n        for (i = 0; i < this.output.length; i += 1) {\r\n            text = this.output[i];\r\n            if (this.inverting) {\r\n                while ((pos = text.indexOf('%y')) >= 0) {\r\n                    end = text.indexOf(')', pos);\r\n                    t = this.max - parseInt(text.substring(pos + 3, end), 10);\r\n                    text = text.substring(0, pos) + t + text.substring(end + 1);\r\n                }\r\n            }\r\n            data = data + text + '\\r\\n';\r\n        }\r\n        return data;\r\n    }\r\n\r\n    public setDrawColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public ellipse(cx: number, cy: number, rx: number, ry: number, colorMode: string) {/*FIXME*/}\r\n    public circle(cx: number, cy: number, r: number, colorMode: string) {/*FIXME*/}\r\n    public setTextColor(r: number, g: number, b: number) {/*FIXME*/}\r\n    public text(x: number, y: number, text: string) {this.out('(' + text.replace('&lt;', '<').replace('&gt;', '>') + ') ' + x + ' ' + this.y(y) + ' F1 SMS'); }\r\n    public lineto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' lineto'); this.out('stroke'); }\r\n    public moveto(x: number, y: number) {this.out(x + ' ' + this.y(y) + ' moveto'); }\r\n    public line(x1: number, y1: number, x2: number, y2: number) {this.out('newpath ' + x1 + ' ' + this.y(y1) + ' moveto ' + x2 + ' ' + this.y(y2) + ' lineto stroke'); }\r\n    public setLineWidth(value: string) {this.out(value + ' setlinewidth'); }\r\n    public setFont(value: string) {this.out('/F' + (this.font += 1) + ' 10 /' + value + ' FSD'); }\r\n}\r\n","import { Graph } from './elements/Graph';\r\n\r\n/*const buttons = {\r\n    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    clazz: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n};\r\n*/\r\nexport default class Palette {\r\n\r\n    private graph: Graph;\r\n    private palette: Element;\r\n    private root: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n        let div = document.createElement('div');\r\n        div.className = 'palette';\r\n        div.id = 'palette';\r\n        this.root = div;\r\n        this.palette = div;\r\n        for (let key in graph.nodeFactory) {\r\n            let element = graph.nodeFactory[key];\r\n            let control = new element();\r\n            let icon = control.getToolBarIcon();\r\n            if (icon) {\r\n                let button = <HTMLButtonElement>document.createElement('button');\r\n                button.className = 'add' + key + 'Btn';\r\n                button.innerHTML = icon.outerHTML;\r\n                button.onclick = e => {\r\n                    let nextFreePosition = this.graph.getNextFreePosition();\r\n                    // let node = this.graph.addElementWithValues(graph.nodeFactory[key], {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    let node = this.graph.addElementWithValues(key, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                    this.graph.drawElement(node);\r\n                };\r\n                this.palette.appendChild(button);\r\n            }\r\n        }\r\n        // this.graph.nodeFactory\r\n//        this.addButtons();\r\n    }\r\n\r\n    public show() {\r\n        document.body.appendChild(this.root);\r\n    }\r\n\r\n    private addButtons() {\r\n        /*for (let btn in buttons) {\r\n            let button = <HTMLButtonElement>document.createElement('button');\r\n            button.className = 'add' + btn + 'Btn';\r\n            button.innerHTML = buttons[btn];\r\n            button.onclick = e => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let node = this.graph.addElementWithValues(btn, {x: nextFreePosition.x, y: nextFreePosition.y}, false);\r\n                this.graph.drawElement(node);\r\n            };\r\n            this.palette.appendChild(button);\r\n        }*/\r\n    }\r\n}\r\n","import {Graph} from './elements/Graph';\r\nimport * as edges from './elements/edges';\r\nimport {EventBus, EventHandler} from './EventBus';\r\nimport {DiagramElement} from './elements/BaseElements';\r\nimport {Util} from './util';\r\n\r\nexport class PanelGroup implements EventHandler {\r\n    private graph: Graph;\r\n    private selectedElement: DiagramElement;\r\n    private clearPanel: Panel;\r\n    private generatePanel: Panel;\r\n    private propertiesMasterPanel: HTMLDivElement;\r\n    private propertiesContent: HTMLDivElement;\r\n    private propHeaderLabel: HTMLDivElement;\r\n    private propHeaderButton: HTMLButtonElement;\r\n    private selectedPanel: Panel;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.clearPanel = new ClearPanel(this);\r\n        this.generatePanel = new GeneratePanel(this);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        this.handleOpenProperties(event, element);\r\n\r\n        if (event.type === EventBus.RELOADPROPERTIES\r\n            && this.selectedElement && element.id === this.selectedElement.id) {\r\n            this.handleEvent(event, element);\r\n        }\r\n\r\n        // the same element was clicked. do nothing\r\n        if (this.selectedElement && this.selectedElement.id === element.id) {\r\n            return true;\r\n        }\r\n        if (element.id === 'RootElement') {\r\n            this.setActivePanel(this.clearPanel);\r\n        }\r\n        if (element.id === 'GenerateProp') {\r\n            this.setActivePanel(this.generatePanel);\r\n        }\r\n        this.selectedElement = element;\r\n\r\n        return true;\r\n    }\r\n\r\n    public getGraph(): Graph {\r\n        return this.graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(PanelGroup.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(PanelGroup.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n     public handleEvent(event: any, element: any) {\r\n        // DO NOTHING\r\n    }\r\n\r\n    public show() {\r\n        // main div to display any properties, class, edge, etc.\r\n        this.propertiesMasterPanel = document.createElement('div');\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n\r\n        this.propertiesContent = document.createElement('div');\r\n        this.propertiesContent.className = 'properties-hidden';\r\n\r\n        this.propHeaderLabel = document.createElement('div');\r\n        this.propHeaderLabel.style.display = 'inherit';\r\n        this.propHeaderLabel.style.cursor = 'pointer';\r\n        this.propHeaderLabel.onclick = e => this.toogleProperties(e);\r\n\r\n        // button to display and hide the properties of e.g. a class\r\n        this.propHeaderButton = document.createElement('button');\r\n        this.propHeaderButton.className = 'btnHideProp';\r\n        this.propHeaderButton.style.cssFloat = 'right';\r\n        this.propHeaderButton.onclick = e => this.toogleProperties(e);\r\n\r\n        let propertiesHeader = document.createElement('div');\r\n        propertiesHeader.style.display = 'inline';\r\n        propertiesHeader.appendChild(this.propHeaderLabel);\r\n        propertiesHeader.appendChild(this.propHeaderButton);\r\n\r\n        this.propertiesMasterPanel.appendChild(propertiesHeader);\r\n        this.propertiesMasterPanel.appendChild(this.propertiesContent);\r\n        document.body.appendChild(this.propertiesMasterPanel);\r\n\r\n        this.setActivePanel(this.clearPanel);\r\n    }\r\n\r\n    public setActivePanel(panel: Panel) {\r\n        this.selectedPanel = panel;\r\n        this.propHeaderLabel.innerHTML = panel.getHeaderText();\r\n        if (this.propertiesContent) {\r\n            while (this.propertiesContent.hasChildNodes()) {\r\n                this.propertiesContent.removeChild(this.propertiesContent.childNodes[0]);\r\n            }\r\n        }\r\n        panel.show();\r\n\r\n        panel.showFirstTab();\r\n        if (panel !== this.clearPanel) {\r\n            this.showProperties(null);\r\n        } else {\r\n            this.hideProperties(null);\r\n        }\r\n    }\r\n\r\n    public getProperiesContent(): HTMLDivElement {\r\n        return this.propertiesContent;\r\n    }\r\n\r\n    private handleOpenProperties(event: Event, element: DiagramElement) {\r\n        if (event.type === 'dblclick') {\r\n            this.showProperties(event);\r\n        }\r\n    }\r\n\r\n    private showProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Show\r\n        this.propHeaderButton.innerHTML = '&#8897;';\r\n        this.propHeaderButton.title = 'Hide properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel';\r\n        this.propertiesContent.className = 'properties';\r\n    }\r\n\r\n    private toogleProperties(evt: Event): void {\r\n        if (this.propHeaderButton.title === 'Show properties') {\r\n            this.showProperties(evt);\r\n        } else {\r\n            this.hideProperties(evt);\r\n        }\r\n    }\r\n\r\n    private hideProperties(evt: Event): void {\r\n        if (evt) {\r\n            evt.stopPropagation();\r\n        }\r\n        // Hide\r\n        this.propHeaderButton.innerHTML = '&#8896;';\r\n        this.propHeaderButton.title = 'Show properties';\r\n        this.propertiesMasterPanel.className = 'propertiespanel-hidden';\r\n        this.propertiesContent.className = 'properties-hidden';\r\n    }\r\n}\r\n\r\nexport abstract class Panel {\r\n    protected divPropertiesPanel: HTMLDivElement;\r\n    protected divPropertiesTabbedPanel: HTMLDivElement;\r\n    protected element: any;\r\n    protected group: PanelGroup;\r\n    private panelItem: PanelItem[] = [];\r\n\r\n    constructor(group: PanelGroup, element: any) {\r\n        // get the properties content panel\r\n        this.divPropertiesPanel = document.createElement('div');\r\n        this.element = element;\r\n        this.group = group;\r\n\r\n        this.divPropertiesTabbedPanel = document.createElement('div');\r\n        this.divPropertiesTabbedPanel.className = 'tabbedpane';\r\n\r\n        // add tabbed panel\r\n        this.divPropertiesPanel.appendChild(this.divPropertiesTabbedPanel);\r\n    }\r\n\r\n    public show(): void {\r\n        let propertiesContent: HTMLDivElement = this.group.getProperiesContent();\r\n        if (this.panelItem.length > 1) {\r\n            propertiesContent.appendChild(this.getPropertiesTabbedPanel());\r\n        }\r\n\r\n        propertiesContent.appendChild(this.getPropertiesPanel());\r\n    }\r\n\r\n    public getPropertiesTabbedPanel(): HTMLDivElement {\r\n        return this.divPropertiesTabbedPanel;\r\n    }\r\n\r\n    public getPropertiesPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getPanel(): HTMLDivElement {\r\n        return this.divPropertiesPanel;\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return '';\r\n    }\r\n\r\n    public showFirstTab(): void {\r\n        if (this.panelItem.length > 0) {\r\n            this.openTab(this.panelItem[0]);\r\n        }\r\n    }\r\n\r\n    protected createTabElement(tabText: string, tabValue: string, item: PanelItem): PanelItem {\r\n        let tabElementBtn = document.createElement('button');\r\n        tabElementBtn.className = 'tablinks';\r\n        tabElementBtn.innerText = tabText;\r\n        tabElementBtn.value = tabValue;\r\n\r\n        if (item === null) {\r\n            item = new PanelItem(this);\r\n        }\r\n        item.withButton(tabElementBtn);\r\n\r\n        tabElementBtn.onclick = () => this.openTab(item);\r\n        this.divPropertiesTabbedPanel.appendChild(tabElementBtn);\r\n        this.panelItem.push(item);\r\n        return item;\r\n    }\r\n\r\n    protected openTab(panelItem: PanelItem): void {\r\n        for (let key in this.panelItem) {\r\n            let child = this.panelItem[key];\r\n            if (child !== panelItem) {\r\n                 child.deactive();\r\n            }\r\n        }\r\n        panelItem.active();\r\n        // hide other tabcontent\r\n        if (this.divPropertiesPanel) {\r\n            while (this.divPropertiesPanel.hasChildNodes()) {\r\n                this.divPropertiesPanel.removeChild(this.divPropertiesPanel.childNodes[0]);\r\n            }\r\n        }\r\n\r\n        // ADD\r\n        if (panelItem.getContent()) {\r\n            this.divPropertiesPanel.appendChild(panelItem.getContent());\r\n        }\r\n    }\r\n}\r\n\r\nexport class GeneratePanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n\r\n        let item: PanelItem = this.createTabElement('General', 'General', null);\r\n\r\n        // Workspace and generate code stuff\r\n        let inputGenerateWorkspace: HTMLInputElement =  <HTMLInputElement> Util.createHTML({tag: 'input', id: 'workspace', type: 'text', placeholder: 'Type your Folder for generated code...', value: 'src/main/java', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Folder:', inputGenerateWorkspace);\r\n\r\n        let inputGeneratePackage: HTMLInputElement = <HTMLInputElement> Util.createHTML({tag: 'input', id: 'package', type: 'text', placeholder: 'Type your workspace for generated code...', value: '', style: {marginRight: '5px', width: '260px'}});\r\n        item.withInput('Package:', inputGeneratePackage);\r\n\r\n        let options = document.createElement('div');\r\n        options.style.textAlign = 'center';\r\n        options.style.margin = '3';\r\n        options.style.padding = '5';\r\n\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(document.createElement('br'));\r\n        item.withContent(options);\r\n\r\n        options.style.borderStyle = 'groove';\r\n        options.style.borderRadius = '10px';\r\n\r\n        let btnGenerate = document.createElement('button');\r\n        btnGenerate.textContent = 'Generate';\r\n        btnGenerate.title = 'Generate code into your workspace';\r\n        btnGenerate.className = 'OptionElement';\r\n\r\n        let that = this;\r\n        btnGenerate.onclick = () => {\r\n            let workspace = inputGeneratePackage.value;\r\n            if (workspace.length === 0) {\r\n                alert('No workspace set.\\nEnter first your workspace');\r\n                inputGeneratePackage.focus();\r\n                return;\r\n            }\r\n            that.group.getGraph().generate(workspace, inputGenerateWorkspace.value);\r\n        };\r\n        options.appendChild(btnGenerate);\r\n        options.appendChild(document.createElement('hr'));\r\n        options.appendChild(document.createElement('br'));\r\n\r\n        let btnAutoLayout = Util.createHTML({tag: 'button', className: 'OptionElement', value: 'Auto Layout', style: {marginRight: '10px'}, onclick: () => {\r\n                that.group.getGraph().layout();\r\n            }});\r\n\r\n        options.appendChild(btnAutoLayout);\r\n\r\n        // delete all nodes\r\n        let btnDeleteAll = document.createElement('button');\r\n        btnDeleteAll.className = 'OptionElement';\r\n        btnDeleteAll.textContent = 'Delete All';\r\n        btnDeleteAll.title = 'Delete all nodes from diagram';\r\n\r\n        btnDeleteAll.onclick = () => {\r\n            let confirmDelete = confirm('All classes will be deleted!');\r\n            if (!confirmDelete) {\r\n                return;\r\n            }\r\n            that.group.getGraph().$graphModel.removeAllElements();\r\n        };\r\n        btnDeleteAll.style.marginRight = '10px';\r\n        options.appendChild(btnDeleteAll);\r\n\r\n        // export stuff\r\n        let exportTypes: string[] = ['Export', 'HTML', 'JSON', 'PDF', 'PNG', 'SVG'];\r\n        let selectExport = document.createElement('select');\r\n\r\n        exportTypes.forEach(type => {\r\n            if (!(!window['jsPDF'] && type === 'PDF')) {\r\n                let option = document.createElement('option');\r\n                option.value = type;\r\n                option.textContent = type;\r\n                selectExport.appendChild(option);\r\n            }\r\n        });\r\n\r\n        selectExport.onchange = (evt) => {\r\n            let selectedExportType = selectExport.options[selectExport.selectedIndex].value;\r\n            selectExport.selectedIndex = 0;\r\n            that.group.getGraph().saveAs(selectedExportType);\r\n        };\r\n        selectExport.className = 'OptionElement';\r\n        options.appendChild(selectExport);\r\n        options.appendChild(document.createElement('br'));\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Properties';\r\n    }\r\n\r\n}\r\n\r\nexport class ClearPanel extends Panel {\r\n    constructor(group: PanelGroup) {\r\n        super(group, null);\r\n    }\r\n\r\n    public getHeaderText(): string {\r\n        return 'Select any element to see its properties';\r\n    }\r\n}\r\n\r\nexport class PanelItem {\r\n    protected panel: Panel;\r\n    protected label: string;\r\n    protected button: HTMLButtonElement;\r\n    protected content: HTMLDivElement = <HTMLDivElement>Util.create({tag: 'div', className: 'tabContent'});\r\n\r\n    constructor(panel: Panel, label?: string) {\r\n        this.panel = panel;\r\n        this.label = label;\r\n    }\r\n\r\n    public active(): void {\r\n        if (this.getButton()) {\r\n            this.getButton().className += ' active';\r\n        }\r\n    }\r\n\r\n    public deactive(): void {\r\n        if (this.getButton()) {\r\n            Util.removeClass(this.getButton(), 'active');\r\n        }\r\n    }\r\n\r\n    public withButton(button: HTMLButtonElement): PanelItem {\r\n        this.button = button;\r\n        return this;\r\n    }\r\n\r\n    public withContent(element: HTMLElement): PanelItem {\r\n        this.content.appendChild(element);\r\n        return this;\r\n    }\r\n\r\n    public withInput(labelText: string, element: HTMLElement): PanelItem {\r\n        let group: HTMLDivElement = <HTMLDivElement> Util.createHTML({tag: 'div'});\r\n        let label = Util.createHTML({tag: 'label', for: element.id, value: labelText});\r\n        group.appendChild(label);\r\n        group.appendChild(element);\r\n\r\n        this.content.appendChild(group);\r\n        return this;\r\n    }\r\n\r\n    public getButton(): HTMLButtonElement {\r\n        return this.button;\r\n    }\r\n\r\n    public getContent(): HTMLDivElement {\r\n        return this.content;\r\n    }\r\n\r\n   public getHeader(): string {\r\n        return this.label;\r\n    }\r\n}\r\n","import PropertyChangeSupport from './PropertyChangeSupport';\r\nimport Data from './Data';\r\n\r\nexport class PropertyBinder implements PropertyChangeSupport {\r\n    private propertyClass1: string;\r\n    private propertyClass2: string;\r\n    private data1: Data;\r\n    private data2: Data;\r\n    // works like a lock\r\n    private applyingChange: boolean = false;\r\n\r\n    constructor(data1: Data, data2: Data, propertyClass1: string, propertyClass2: string) {\r\n        this.data1 = data1;\r\n        this.data2 = data2;\r\n        this.propertyClass1 = propertyClass1;\r\n        this.propertyClass2 = propertyClass2;\r\n    }\r\n    static bind(data1: Data, data2: Data, property1: string, property2: string) {\r\n        if (!data1 || !data2 || !property1) {\r\n            console.error('NullValue!!');\r\n            return null;\r\n        }\r\n        const propertyBinder = new PropertyBinder(data1, data2, property1, property2);\r\n        propertyBinder.bind();\r\n        return propertyBinder;\r\n    }\r\n\r\n    propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        if (!this.applyingChange) {\r\n            this.applyingChange = true;\r\n            if (entity === this.data1) {\r\n                // fire to data2\r\n                this.data2.setValue(this.propertyClass2, newValue);\r\n            } else if (entity === this.data2) {\r\n                // fire to data1\r\n                this.data1.setValue(this.propertyClass1, newValue);\r\n            }\r\n            this.applyingChange = false;\r\n        }\r\n    }\r\n\r\n    protected bind() {\r\n        // public addListener(control: Control, property?: string)\r\n        // todo: set value immediately\r\n        this.data1.setValue(this.propertyClass1, this.data2.getValue(this.propertyClass2));\r\n\r\n        this.data1.addListener(this, this.propertyClass1);\r\n        this.data2.addListener(this, this.propertyClass2);\r\n    }\r\n\r\n    protected unbind() {\r\n        // public addListener(control: Control, property?: string)\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n        this.data1.removeListener(this, this.propertyClass2);\r\n    }\r\n}\r\n","// ################################## RGBColor ####################################################\r\nexport class RGBColor {\r\n    public  ok: boolean;\r\n    public r: number;\r\n    public g: number;\r\n    public b: number;\r\n\r\n    constructor(value: string) {\r\n        this.ok = false;\r\n        if (value === 'none') {\r\n            return;\r\n        }\r\n        let computedColor, div = document.createElement('div');\r\n        div.style.backgroundColor = value;\r\n        document.body.appendChild(div);\r\n        computedColor = window.getComputedStyle(div).backgroundColor;\r\n        // cleanup temporary div.\r\n        document.body.removeChild(div);\r\n        this.convert(computedColor);\r\n    }\r\n    public convert(value: any) {\r\n        let values, regex = /rgb *\\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\\)/;\r\n        values = regex.exec(value);\r\n        this.r = parseInt(values[1], 10);\r\n        this.g = parseInt(values[2], 10);\r\n        this.b = parseInt(values[3], 10);\r\n        this.ok = true;\r\n    }\r\n\r\n    public toRGB(): string {return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; }\r\n    public toHex(): string {\r\n        return '#' + (this.r + 0x10000).toString(16).substring(3).toUpperCase() + (this.g + 0x10000).toString(16).substring(3).toUpperCase() + (this.b + 0x10000).toString(16).substring(3).toUpperCase();\r\n    }\r\n}\r\n","/*\r\n NetworkParser\r\n Copyright (c) 2011 - 2014, Stefan Lindel\r\n All rights reserved.\r\n\r\n Licensed under the EUPL, Version 1.1 or (as soon they\r\n will be approved by the European Commission) subsequent\r\n versions of the EUPL (the \"Licence\");\r\n You may not use this work except in compliance with the Licence.\r\n You may obtain a copy of the Licence at:\r\n\r\n http://ec.europa.eu/idabc/eupl5\r\n\r\n Unless required by applicable law or agreed to in\r\n writing, software distributed under the Licence is\r\n distributed on an \"AS IS\" basis,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\r\n express or implied.\r\n See the Licence for the specific language governing\r\n permissions and limitations under the Licence.\r\n*/\r\nimport {RGBColor} from './RGBColor';\r\nimport {JSEPS} from \"./JSEPS\";\r\n\r\nconst epsSvgAttr = {\r\n    // allowed attributes. all others are removed from the preview.\r\n    g: ['stroke', 'fill', 'stroke-width'],\r\n    line: ['x1', 'y1', 'x2', 'y2', 'stroke', 'stroke-width'],\r\n    rect: ['x', 'y', 'width', 'height', 'stroke', 'fill', 'stroke-width'],\r\n    ellipse: ['cx', 'cy', 'rx', 'ry', 'stroke', 'fill', 'stroke-width'],\r\n    circle: ['cx', 'cy', 'r', 'stroke', 'fill', 'stroke-width'],\r\n    text: ['x', 'y', 'font-size', 'font-family', 'text-anchor', 'font-weight', 'font-style', 'fill'],\r\n    path: ['']\r\n};\r\nexport class SVGConverter {\r\n    private k: number;\r\n    private remove: boolean;\r\n    private target: any;\r\n\r\n    constructor(element: any, target: any, options: any) {\r\n        this.k = 1.0;\r\n        let hasScale = typeof (options.scale), hasRemoveInvalid = typeof (options.removeInvalid);\r\n        this.k = (options && hasScale !== 'undefined' ? options.scale : 1.0);\r\n        this.remove = (options && hasRemoveInvalid !== 'undefined' ? options.removeInvalid : false);\r\n        this.target = target;\r\n        this.parse(element);\r\n    }\r\n\r\n    public parse(element: any) {\r\n        let el, i, n, colorMode, hasFillColor, fillRGB, fillColor, strokeColor, strokeRGB, fontType, pdfFontSize, x, y,\r\n            box, xOffset;\r\n        if (!element) {\r\n            return;\r\n        }\r\n        if (typeof element === 'string') {\r\n            el = document.createElement('div');\r\n            el.innerHTML = element;\r\n            element = el.childNodes[0];\r\n        }\r\n        for (i = 0; i < element.children.length; i += 1) {\r\n            n = element.children[i];\r\n            colorMode = null;\r\n            hasFillColor = false;\r\n            if ('g,line,rect,ellipse,circle,text'.indexOf(n.tagName) >= 0) {\r\n                fillColor = n.getAttribute('fill');\r\n                if (fillColor) {\r\n                    fillRGB = new RGBColor(fillColor);\r\n                    if (fillRGB.ok) {\r\n                        hasFillColor = true;\r\n                        colorMode = 'F';\r\n                    }\r\n                }\r\n            }\r\n            if ('g,line,rect,ellipse,circle'.indexOf(n.tagName) >= 0) {\r\n                if (hasFillColor) {\r\n                    this.target.setFillColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                }\r\n                strokeColor = n.getAttribute('stroke');\r\n                if (n.hasAttribute('stroke-width')) {\r\n                    this.target.setLineWidth(this.attr(n, 'stroke-width'));\r\n                }\r\n                if (strokeColor) {\r\n                    strokeRGB = new RGBColor(strokeColor);\r\n                    if (strokeRGB.ok) {\r\n                        this.target.setDrawColor(strokeRGB.r, strokeRGB.g, strokeRGB.b);\r\n                        if (colorMode === 'F') {\r\n                            colorMode = 'FD';\r\n                        } else if (!hasFillColor) {\r\n                            colorMode = 'S';\r\n                        }\r\n                    } else {\r\n                        colorMode = null;\r\n                    }\r\n                }\r\n            }\r\n            // console.log(\"write \"+n.tagName);\r\n            switch (n.tagName.toLowerCase()) {\r\n                case 'svg':\r\n                case 'a':\r\n                case 'g':\r\n                    this.parse(n);\r\n                    break;\r\n                case 'line':\r\n                    this.target.line(this.attr(n, 'x1'), this.attr(n, 'y1'), this.attr(n, 'x2'), this.attr(n, 'y2'));\r\n                    break;\r\n                case 'rect':\r\n                    this.target.rect(this.attr(n, 'x'), this.attr(n, 'y'), this.attr(n, 'width'), this.attr(n, 'height'), n.getAttribute('style'));\r\n                    break;\r\n                case 'ellipse':\r\n                    this.target.ellipse(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'rx'), this.attr(n, 'ry'), colorMode);\r\n                    break;\r\n                case 'circle':\r\n                    this.target.circle(this.attr(n, 'cx'), this.attr(n, 'cy'), this.attr(n, 'r'), colorMode);\r\n                    break;\r\n                case 'text':\r\n                    if (n.hasAttribute('font-family')) {\r\n                        switch (n.getAttribute('font-family').toLowerCase()) {\r\n                            case 'serif':\r\n                                this.target.setFont('times');\r\n                                break;\r\n                            case 'monospace':\r\n                                this.target.setFont('courier');\r\n                                break;\r\n                            default:\r\n                                n.getAttribute('font-family', 'sans-serif');\r\n                                this.target.setFont('Helvetica');\r\n                        }\r\n                    }\r\n                    if (hasFillColor) {\r\n                        this.target.setTextColor(fillRGB.r, fillRGB.g, fillRGB.b);\r\n                    }\r\n                    if (this.target instanceof JSEPS) {\r\n                        this.target.text(this.attr(n, 'x'), this.attr(n, 'y'), n.innerHTML);\r\n                        break;\r\n                    }\r\n                    fontType = '';\r\n                    if (n.hasAttribute('font-weight')) {\r\n                        if (n.getAttribute('font-weight') === 'bold') {\r\n                            fontType = 'bold';\r\n                        }\r\n                    }\r\n                    if (n.hasAttribute('font-style')) {\r\n                        if (n.getAttribute('font-style') === 'italic') {\r\n                            fontType += 'italic';\r\n                        }\r\n                    }\r\n                    this.target.setFontType(fontType);\r\n                    pdfFontSize = 16;\r\n                    if (n.hasAttribute('font-size')) {\r\n                        pdfFontSize = parseInt(n.getAttribute('font-size'), 10);\r\n                    }\r\n                    box = n.getBBox();\r\n                    // FIXME: use more accurate positioning!!\r\n                    x = this.attr(n, 'x');\r\n                    y = this.attr(n, 'y');\r\n                    xOffset = 0;\r\n                    if (n.hasAttribute('text-anchor')) {\r\n                        switch (n.getAttribute('text-anchor')) {\r\n                            case 'end':\r\n                                xOffset = box.width;\r\n                                break;\r\n                            case 'middle':\r\n                                xOffset = box.width / 2;\r\n                                break;\r\n                            case 'start':\r\n                                break;\r\n                            case 'default':\r\n                                n.getAttribute('text-anchor', 'start');\r\n                                break;\r\n                        }\r\n                        x = x - (xOffset * this.k);\r\n                    }\r\n                    this.target.setFontSize(pdfFontSize).text(x, y, n.innerHTML);\r\n                    break;\r\n                default:\r\n                    if (this.remove) {\r\n                        console.log('cant translate to target:', n);\r\n                        element.removeChild(n);\r\n                        i -= 1;\r\n                    }\r\n            }\r\n        }\r\n    }\r\n\r\n    public attr(node: any, name: string) {\r\n        return this.k * parseInt(node.getAttribute(name), 10);\r\n    }\r\n}\r\n","import {Control} from './Control';\r\n\r\nexport class ScrumBoard extends Control {\r\n    public static cards = [0, 0.5, 1, 2, 3, 5, 8, 13, 20, 40, 100, '?', 'Coffee'];\r\n    private $selected: HTMLDivElement;\r\n    private $board: HTMLDivElement;\r\n\r\n    constructor() {\r\n        super();\r\n        this.redraw();\r\n    }\r\n\r\n    public redraw(): void {\r\n        if (this.$board) {\r\n            while (this.$board.children.length > 0 ) {\r\n                this.$board.removeChild(this.$board.children[0]);\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('div');\r\n            this.$selected = document.createElement('div');\r\n            this.$board = document.createElement('div');\r\n            this.$view.appendChild(this.$board);\r\n            this.$view.appendChild(this.$selected);\r\n        }\r\n        this.$view.className = 'ScrumBoard';\r\n        for ( let i = 0; i < ScrumBoard.cards.length; i++) {\r\n            let card = document.createElement('div');\r\n            card.className = 'ScrumCard';\r\n            card.innerHTML = <string>ScrumBoard.cards[i];\r\n            card['pokervalue'] = <string>ScrumBoard.cards[i];\r\n            card.onclick = e => {\r\n                this.onClick(<HTMLDivElement>e.target);\r\n            };\r\n            this.$board.appendChild(card);\r\n        }\r\n    }\r\n\r\n    public getSVG() {\r\n        this.redraw();\r\n        return this.$view;\r\n    }\r\n\r\n    public onClick(target: HTMLDivElement): void {\r\n        console.log(target['pokervalue']);\r\n\r\n        while (this.$selected.children.length > 0 ) {\r\n            this.$selected.removeChild(this.$selected.children[0]);\r\n        }\r\n        let card = document.createElement('div');\r\n        card.className = 'ScrumCard';\r\n        card['pokervalue'] = target['pokervalue'];\r\n        card.onclick = e => {\r\n            this.onShow(<HTMLDivElement>e.target);\r\n        };\r\n        this.$selected.appendChild(card);\r\n        this.$board['style']['display'] = 'none';\r\n    }\r\n\r\n    public onShow(target: HTMLDivElement): void {\r\n        target.innerHTML = target['pokervalue'];\r\n    }\r\n}\r\n","import {Graph} from './main';\r\nimport {SymbolLibary} from './elements/nodes/Symbol';\r\nimport {EventBus} from './EventBus';\r\n\r\nexport class Toolbar {\r\n\r\n    private graph: Graph;\r\n    private mainDiv: HTMLDivElement;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public show(): void {\r\n        if (this.mainDiv) {\r\n            return;\r\n        }\r\n\r\n        this.mainDiv = document.createElement('div');\r\n        this.mainDiv.className = 'toolbar';\r\n\r\n        let h1Logo = document.createElement('h1');\r\n        h1Logo.className = 'logo';\r\n        h1Logo.textContent = 'DiagramJS';\r\n\r\n        let node = {type: 'Hamburger', property: 'HTML', width: 24, height: 24, id: 'GenerateProp'};\r\n        let hamburger = SymbolLibary.draw( node);\r\n        EventBus.registerEvent(hamburger, 'click', node);\r\n        this.mainDiv.appendChild(hamburger);\r\n\r\n        this.mainDiv.appendChild(h1Logo);\r\n        document.body.appendChild(this.mainDiv);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 06.03.2017.\r\n */\r\nimport Data from './Data';\r\n\r\n// export default class Data {\r\n//    public values = {};\r\n//    id: string;\r\n//    $listener: Control[] = [];\r\n//    property: string;\r\nexport namespace UML {\r\n    export class Clazz extends Data {\r\n        public static NAME: string = 'name';\r\n        public static ATTRIBUTES: string = 'attributes';\r\n        public static METHODS: string = 'methods';\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Clazz';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n\r\n        public getAttributes() {\r\n            return this.prop[Clazz.ATTRIBUTES];\r\n        }\r\n\r\n        public addToAttributes(newValue: string) {\r\n            this.addTo(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n\r\n        public removeFromAttributes(newValue: string) {\r\n            this.removeFrom(Clazz.ATTRIBUTES, newValue);\r\n        }\r\n    }\r\n\r\n    export class Attribute extends Data {\r\n        private property: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this.property = 'Attribute';\r\n        }\r\n\r\n        public getName() {\r\n            return this.prop[Clazz.NAME];\r\n        }\r\n\r\n        public setName(newValue: string) {\r\n            this.setValue(Clazz.NAME, newValue);\r\n        }\r\n    }\r\n\r\n    export class Methods extends Data {\r\n\r\n    }\r\n}\r\n\r\nwindow['UML'] = UML;\r\n","import {Control} from './Control';\r\n\r\nexport class VirtualKeyBoard extends Control {\r\n    constructor(data: any) {\r\n        super();\r\n        if (!data) {\r\n            data = this.getDefault();\r\n        }\r\n        let board = document.createElement('div');\r\n        this.$viewData = data;\r\n\r\n        for (let type in data) {\r\n            if (type === 'normal') {\r\n                for (let line in data[type]) {\r\n                    let lineBoard = document.createElement('div');\r\n                    lineBoard.className = 'vkLine';\r\n                    for (let key in data[type][line]) {\r\n                        let btn: HTMLButtonElement = document.createElement('button');\r\n                        let keyTag = data[type][line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                        btn.ontouchend = () => {this.action(btn); };\r\n                        btn.onclick = () => {this.action(btn); };\r\n                        lineBoard.appendChild(btn);\r\n                    }\r\n                    board.appendChild(lineBoard);\r\n                }\r\n            }\r\n        }\r\n        this.$view = board;\r\n    }\r\n\r\n    public action(btn: HTMLButtonElement) {\r\n        if (btn['key'] === '{Shift}') {\r\n            if ( btn.className === 'vkbuttonAction') {\r\n                let keys = this.$viewData['normal'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbutton');\r\n                    }\r\n                }\r\n            } else if ( btn.className === 'vkbutton') {\r\n                let keys = this.$viewData['shift'];\r\n                for (let line in keys) {\r\n                    let lineBoard = this.$view.children[line];\r\n                    for (let key in keys[line]) {\r\n                        let btn: HTMLButtonElement = lineBoard.children[key];\r\n                        let keyTag = keys[line][key];\r\n                        this.setButtonValue(keyTag, btn, 'vkbuttonAction');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        alert(btn);\r\n    }\r\n\r\n    public getDefault(): any {\r\n        let format = {\r\n            normal: [\r\n                ['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '?', '´', '{Bksp}'],\r\n                ['{Tab}', 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+'],\r\n                ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '#', '{enter}'],\r\n                ['{Shift}', '<', 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n// '{left}', '{up}', '{down}','{right}', '{Cancel}']\r\n            ],\r\n            shift: [\r\n                ['°', '!', '\"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '`', '{Bksp}'],\r\n                ['{Tab}', 'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', 'O', 'P', 'Ü', '*'],\r\n                ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', '\\'', '{enter}'],\r\n                ['{Shift}', '>', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', '{Shift}'],\r\n                ['{Accept}', '{Alt}', '{Space}', '{Cancel}']\r\n            ]\r\n        };\r\n        return format;\r\n    }\r\n\r\n    public getBoard() {\r\n        return this.$view;\r\n    }\r\n\r\n    private setButtonValue(keyTag: string, btn: HTMLButtonElement, shiftClass: string) {\r\n        btn.className = 'vkbutton';\r\n        btn['key'] = keyTag;\r\n        btn['type'] = 'normal';\r\n        if (keyTag.substring(0, 1) === '{') {\r\n            if (keyTag === '{Bksp}') {\r\n                btn.innerHTML = 'Bksp';\r\n            } else if (keyTag === '{Tab}') {\r\n                btn.innerHTML = '&#8677; Tab';\r\n            } else if (keyTag === '{enter}') {\r\n                btn.innerHTML = 'enter';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Shift}') {\r\n                btn.innerHTML = 'Shift';\r\n                btn.className = shiftClass;\r\n            } else if (keyTag === '{Accept}') {\r\n                btn.innerHTML = 'Accept';\r\n                btn.className = 'vkbuttonAction';\r\n            } else if (keyTag === '{Alt}') {\r\n                btn.innerHTML = 'Alt';\r\n            } else if (keyTag === '{Space}') {\r\n                btn.innerHTML = '&nbsp;';\r\n                btn.className = 'vkbuttonSpace';\r\n            } else if (keyTag === '{left}') {\r\n                btn.innerHTML = '&#8592';\r\n            } else if (keyTag === '{right}') {\r\n                btn.innerHTML = '&#8594;';\r\n            } else if (keyTag === '{up}') {\r\n                btn.innerHTML = '&#8593;';\r\n            } else if (keyTag === '{down}') {\r\n                btn.innerHTML = '&#8595;';\r\n            } else if (keyTag === '{Cancel}') {\r\n                btn.innerHTML = 'Cancel';\r\n                btn.className = 'vkbuttonAction';\r\n            }\r\n        } else {\r\n            btn.innerHTML = keyTag;\r\n        }\r\n    }\r\n}\r\n","import {Adapter} from '../Adapter';\r\n\r\nexport class JavaAdapter extends Adapter {\r\n    constructor() {\r\n        super();\r\n        this.id = 'JavaAdapter';\r\n    }\r\n    update(evt: Object): boolean {\r\n        if (this.isActive()) {\r\n            window['JavaBridge'].executeChange(evt);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public isActive(): boolean {\r\n        return window['JavaBridge'];\r\n    }\r\n}\r\n","export * from './JavaAdapter';\r\n","import { Util } from '../util';\r\nimport { Control } from '../Control';\r\n\r\nexport interface Size {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\ninterface GraphElement {\r\n    getSize(): Point;\r\n\r\n    getPos(): Point;\r\n\r\n    getCenter(): Point;\r\n\r\n    getSVG(): Element;\r\n\r\n    getCanvas(): Element;\r\n\r\n    getEvents(): string[];\r\n\r\n    withPos(x: number, y: number): GraphElement;\r\n\r\n    load(data: any): any;\r\n\r\n    getToolBarIcon(): Element;\r\n\r\n    loadProperties(properties: any): void;\r\n}\r\n\r\nexport abstract class DiagramElement extends Control implements GraphElement {\r\n\r\n    protected $isDraggable: boolean = true;\r\n    protected $labelHeight = 25;\r\n    protected $labelFontSize = 14;\r\n    private $pos: Point = new Point();\r\n    private $size: Point = new Point();\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getPos(): Point {\r\n        return this.$pos;\r\n    }\r\n\r\n    public getSize(): Point {\r\n        return this.$size;\r\n    }\r\n\r\n    public getCenter(): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        return new Point(pos.x + size.x / 2, pos.y + size.y / 2);\r\n    }\r\n\r\n    public getCenterPosition(p: string): Point {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let offset = this['$' + p];\r\n        let center = this.getCenter();\r\n        if (p === Point.DOWN) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y + size.y, Point.DOWN);\r\n        }\r\n        if (p === Point.UP) {\r\n            return new Point(Math.min(center.x + offset, center.x), pos.y, Point.UP);\r\n        }\r\n        if (p === Point.LEFT) {\r\n            return new Point(pos.x, Math.min(center.y + offset, pos.y + size.y), Point.LEFT);\r\n        }\r\n        if (p === Point.RIGHT) {\r\n            return new Point(pos.x + size.x, Math.min(center.y + offset, pos.y + size.y), Point.RIGHT);\r\n        }\r\n        return new Point();\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getCanvas(): Element {\r\n        return null;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return null;\r\n    }\r\n\r\n    public getAlreadyDisplayingSVG(): Element {\r\n        return document.getElementById(this.id) || this.getSVG();\r\n    }\r\n\r\n    public load(data: any) {\r\n        // Do Nothing\r\n    }\r\n\r\n    public withPos(x: number, y: number): GraphElement {\r\n        if (x && y) {\r\n            this.$pos = new Point(x, y);\r\n        } else {\r\n            if (typeof (x) !== 'undefined' && x !== null) {\r\n                this.$pos.x = x;\r\n            }\r\n            if (typeof (y) !== 'undefined' && y !== null) {\r\n                this.$pos.y = y;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public withSize(width: number, height: number): DiagramElement {\r\n        if (width && height) {\r\n            this.$size = new Point(width, height);\r\n        } else {\r\n            if (typeof (width) !== 'undefined' && width !== null) {\r\n                this.$size.x = width;\r\n            }\r\n            if (typeof (height) !== 'undefined' && height !== null) {\r\n                this.$size.y = height;\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getShowed(): Control {\r\n        // FIXME if (this.status === 'close') {\r\n        // if (!this.$owner.isClosed()) {\r\n        //        return this;\r\n        //    }\r\n        // }\r\n        return super.getShowed();\r\n    }\r\n\r\n    public loadProperties(properties: any) {\r\n        // DO Nothing\r\n    }\r\n\r\n    protected createShape(attrs: any): Element {\r\n        return Util.createShape(attrs);\r\n    }\r\n}\r\n\r\nexport class Point {\r\n    public static UP: string = 'UP';\r\n    public static LEFT: string = 'LEFT';\r\n    public static RIGHT: string = 'RIGHT';\r\n    public static DOWN: string = 'DOWN';\r\n    x: number = 0;\r\n    y: number = 0;\r\n\r\n    //    pos:string = '';\r\n\r\n    constructor(x?: number, y?: number, pos?: string) {\r\n        this.x = Math.ceil(x || 0);\r\n        this.y = Math.ceil(y || 0);\r\n        if (pos) {\r\n            this['pos'] = pos;\r\n        }\r\n    }\r\n\r\n    public add(pos: Point) {\r\n        this.x += pos.x;\r\n        this.y += pos.y;\r\n        return this;\r\n    }\r\n\r\n    public getPosition(): string {\r\n        if (!this['pos']) {\r\n            return '';\r\n        }\r\n        return this['pos'];\r\n    }\r\n\r\n    public addNum(x: number, y: number) {\r\n        this.x += x;\r\n        this.y += y;\r\n        return this;\r\n    }\r\n\r\n    public sum(pos: Point) {\r\n        let sum = new Point(this.x, this.y);\r\n        sum.add(pos);\r\n        return sum;\r\n    }\r\n\r\n    public center(posA: Point, posB: Point) {\r\n        let count = 0;\r\n        if (posA) {\r\n            this.x += posA.x;\r\n            this.y += posA.y;\r\n            count++;\r\n        }\r\n        if (posB) {\r\n            this.x += posB.x;\r\n            this.y += posB.y;\r\n            count++;\r\n        }\r\n        if (count > 0) {\r\n            this.x = (this.x / count);\r\n            this.y = (this.y / count);\r\n        }\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        return this.x < 1 && this.y < 1;\r\n    }\r\n\r\n    public size(posA: Point, posB: Point) {\r\n        let x1 = 0, x2 = 0, y1 = 0, y2 = 0;\r\n        if (posA) {\r\n            x1 = posA.x;\r\n            y1 = posA.y;\r\n        }\r\n        if (posB) {\r\n            x2 = posB.x;\r\n            y2 = posB.y;\r\n        }\r\n        if (x1 > x2) {\r\n            this.x = x1 - x2;\r\n        } else {\r\n            this.x = x2 - x1;\r\n        }\r\n        if (y1 > y2) {\r\n            this.y = y1 - y2;\r\n        } else {\r\n            this.y = y2 - y1;\r\n        }\r\n    }\r\n}\r\n\r\n// \t\t\t\t######################################################### Line #########################################################\r\nexport class Line extends DiagramElement {\r\n    public static FORMAT = { SOLID: 'SOLID', DOTTED: 'DOTTED', PATH: 'PATH' };\r\n    public source: Point;\r\n    public target: Point;\r\n    public color: string;\r\n    public lineType: string;\r\n    private path: string;\r\n    private angle: Number;\r\n\r\n    constructor(lineType: string) {\r\n        super();\r\n        this.lineType = lineType;\r\n    }\r\n\r\n    public getTyp(): string {\r\n        return 'SVG';\r\n    }\r\n\r\n    public getPos() {\r\n        let pos = new Point();\r\n        pos.center(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public getSize() {\r\n        let pos = new Point();\r\n        pos.size(this.source, this.target);\r\n        return pos;\r\n    }\r\n\r\n    public withColor(color: string): Line {\r\n        this.color = color;\r\n        return this;\r\n    }\r\n\r\n    public withSize(x: number, y: number): DiagramElement {\r\n        return this;\r\n    }\r\n\r\n    public withPath(path: Array<Point>, close: boolean, angle?: any): Line {\r\n        let i: number, d: string = 'M' + path[0].x + ' ' + path[0].y;\r\n        this.lineType = Line.FORMAT.PATH; // It is a Path not a Line\r\n        for (i = 1; i < path.length; i += 1) {\r\n            d = d + 'L ' + path[i].x + ' ' + path[i].y;\r\n        }\r\n        if (close) {\r\n            d = d + ' Z';\r\n            this.target = path[0];\r\n        } else {\r\n            this.target = path[path.length - 1];\r\n        }\r\n        this.path = d;\r\n        if (angle instanceof Number) {\r\n            this.angle = angle;\r\n        } else if (angle) {\r\n            // var lineangle, start = path[0], end = path[path.length - 1];\r\n            // lineangle = Math.atan2(end.y - start.y, end.x - start.x);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): SVGGElement {\r\n        if (this.lineType === 'PATH') {\r\n            return <SVGGElement>Util.create({\r\n                tag: 'path',\r\n                'd': this.path,\r\n                'fill': this.color,\r\n                stroke: '#000',\r\n                'stroke-width': '1px'\r\n            });\r\n        }\r\n        let line: SVGGElement = <SVGGElement>Util.create({\r\n            tag: 'line',\r\n            'x1': this.source.x,\r\n            'y1': this.source.y,\r\n            'x2': this.target.x,\r\n            'y2': this.target.y,\r\n            'stroke': Util.getColor(this.color)\r\n        });\r\n        if (this.lineType && this.lineType.toLowerCase() === 'dotted') {\r\n            line.setAttribute('stroke-miterlimit', '4');\r\n            line.setAttribute('stroke-dasharray', '1,1');\r\n        }\r\n        return line;\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport Options from '../Options';\r\nimport {JavaAdapter} from '../adapters';\r\n\r\nexport class ClassEditor extends Graph {\r\n    private adapter: JavaAdapter;\r\n    constructor(json: any, options: Options) {\r\n        if (!options ) {\r\n            options = {};\r\n        }\r\n        options.canvas = options.canvas || 'canvas';\r\n        // options.origin = options.origin || new Point(150, 45);\r\n//            layout: \"DagreLayout\",\r\n        options.autoSave = options.autoSave || true;\r\n        if (!options.features) {\r\n            options.features = {\r\n                drag: true,\r\n                editor: true,\r\n                palette: true,\r\n                select: true,\r\n                zoom: true,\r\n                toolbar: true,\r\n                import: true,\r\n                properties: true,\r\n                addnode: true,\r\n                newedge: true\r\n            };\r\n        }\r\n        super(json, options);\r\n    }\r\n\r\n    public setBoardStyle(value: string) {\r\n        console.log(value);\r\n        this.importFile.setBoardStyle(value);\r\n    }\r\n\r\n    public registerListener(): void {\r\n        this.adapter = new JavaAdapter();\r\n    }\r\n\r\n    public getAdapter(): any {\r\n        return this.adapter;\r\n    }\r\n}\r\n","import * as edges from './edges';\r\nimport { Association } from './edges';\r\nimport * as nodes from './nodes';\r\nimport * as layouts from '../layouts';\r\nimport Layout from '../layouts/Layout';\r\nimport { GraphModel } from './Model';\r\nimport { Point, Size } from './BaseElements';\r\nimport { Util } from '../util';\r\nimport { Control } from '../Control';\r\nimport Data from '../Data';\r\nimport { EventBus } from '../EventBus';\r\nimport { AddNode, Drag, NewEdge, Select, Zoom } from '../handlers';\r\nimport Options from '../Options';\r\nimport { ImportFile } from '../handlers/ImportFile';\r\nimport { CSS } from '../CSS';\r\nimport { DiagramElement } from './index';\r\nimport { Toolbar } from '../Toolbar';\r\nimport {JSEPS} from '../JSEPS';\r\nimport {SVGConverter} from '../SVGConverter';\r\nimport Palette from '../Palette';\r\nimport {PanelGroup} from '../PropertiesPanel';\r\n\r\nexport class Graph extends Control {\r\n    // canvas: HTMLElement;\r\n    root: SVGElement;\r\n    $graphModel: GraphModel;\r\n    options: Options;\r\n    canvasSize: Size;\r\n    nodeFactory: Object;\r\n    edgeFactory: Object;\r\n    layoutFactory: Object;\r\n    protected importFile: ImportFile;\r\n    private currentlayout: Layout;\r\n    // private layerToolBar: SVGSVGElement;\r\n    // https://stackoverflow.com/questions/15181452/how-to-save-export-inline-svg-styled-with-css-from-browser-to-image-file\r\n    private containerElements = ['svg', 'g'];\r\n    private relevantStyles = {\r\n        'rect': ['fill', 'stroke', 'stroke-width'],\r\n        'path': ['fill', 'stroke', 'stroke-width', 'opacity'],\r\n        'circle': ['fill', 'stroke', 'stroke-width'],\r\n        'line': ['stroke', 'stroke-width'],\r\n        'text': ['fill', 'font-size', 'text-anchor', 'font-family'],\r\n        'polygon': ['stroke', 'fill']\r\n    };\r\n\r\n    constructor(json: any, options: Options) {\r\n        super();\r\n        json = json || {};\r\n        if (json['data']) {\r\n            options = json['options'];\r\n            json = json['data'];\r\n            this.id = json['id'];\r\n        }\r\n        this.options = options || {features: { drag: true}};\r\n        if (json['init']) {\r\n            return;\r\n        }\r\n        if (!this.options.origin) {\r\n            this.options.origin = new Point(150, 45);\r\n        }\r\n        if (!this.options.style) {\r\n            // Style can be classic or modern\r\n            this.options.style = 'classic';\r\n        }\r\n        if (this.options.autoSave) {\r\n            Util.isAutoSave = options.autoSave;\r\n        }\r\n\r\n        this.initFactories();\r\n        this.initCanvas();\r\n        this.initFeatures(this.options.features);\r\n\r\n        // load previous session, if user wants it\r\n        // otherwise load the json data\r\n        if (!this.lookupInLocalStorage()) {\r\n            this.load(json);\r\n        }\r\n\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    public lookupInLocalStorage(): boolean {\r\n        if (!this.options.autoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (!Util.isLocalStorageSupported()) {\r\n            return false;\r\n        }\r\n        let diagram = Util.getDiagramFromLocalStorage();\r\n        if (diagram && diagram.length > 0) {\r\n            if (confirm('Restore previous session?')) {\r\n                let jsonData: JSON = JSON.parse(diagram);\r\n                this.load(jsonData);\r\n                this.layout();\r\n                return true;\r\n            } else {\r\n                Util.saveToLocalStorage( null);\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public fitSizeOnNodes(): void {\r\n        let maxWidth: number = 0;\r\n        let maxHeight: number = 0;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            let nodePos = node.getPos();\r\n            let nodeSize = node.getSize();\r\n            let nodeWidestPosX = nodePos.x + nodeSize.x;\r\n            let nodeWidestPosY = nodePos.y + nodeSize.y;\r\n\r\n            if (nodeWidestPosX > maxWidth) {\r\n                maxWidth = nodeWidestPosX;\r\n            }\r\n\r\n            if (nodeWidestPosY > maxHeight) {\r\n                maxHeight = nodeWidestPosY;\r\n            }\r\n        }\r\n\r\n        this.root.setAttributeNS(null, 'width', '' + (maxWidth + 100));\r\n        this.root.setAttributeNS(null, 'height', '' + (maxHeight + 50));\r\n    }\r\n\r\n    public saveAs(typ: string) {\r\n        typ = typ.toLowerCase();\r\n\r\n        // shrink size of graph to minimum. only to show up nodes\r\n        const currentSize = this.getRootSize();\r\n        this.fitSizeOnNodes();\r\n\r\n        if (typ === 'svg') {\r\n            this.exportSvg();\r\n        } else if (typ === 'png') {\r\n            this.exportPng();\r\n        } else if (typ === 'html') {\r\n            this.exportHtml();\r\n\r\n        } else if (typ === 'pdf') {\r\n            this.exportPdf();\r\n            // } else if (typ === 'eps') {\r\n            // this.ExportEPS();\r\n        }\r\n        else if (typ === 'json') {\r\n            this.exportJson();\r\n        }\r\n\r\n        // set the size back to default\r\n        this.root.setAttributeNS(null, 'width', '' + currentSize.width);\r\n        this.root.setAttributeNS(null, 'height', '' + currentSize.height);\r\n    }\r\n\r\n    /**\r\n     * generates a blob file and makes it available for download.\r\n     * @param type type of file\r\n     * @param data raw data\r\n     * @param name name of download file\r\n     */\r\n    public save(type: string, data: any, name: string, context: string) {\r\n        if (window['java']) {\r\n            window['java'].export(type, data, name, context);\r\n            return;\r\n        }\r\n        let a = document.createElement('a');\r\n        a.href = window.URL.createObjectURL(new Blob([data], { type: context }));\r\n        a.download = name;\r\n        document.body.appendChild(a);\r\n        a.click();\r\n        document.body.removeChild(a);\r\n    }\r\n\r\n    /** Exports the diagram as svg. */\r\n    public exportSvg(): void {\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        this.save('svg', this.serializeXmlNode(wellFormatedSvgDom), 'class_diagram.svg', 'image/svg+xml');\r\n    }\r\n\r\n    /** Exports the diagram as html. */\r\n    public exportHtml(): void {\r\n        let htmlFacade = '<html><head><title>DiagramJS - Classdiagram</title></head><body>$content</body></html>';\r\n        let wellFormatedSvgDom = this.getSvgWithStyleAttributes();\r\n        let svgAsXml = this.serializeXmlNode(wellFormatedSvgDom);\r\n\r\n        let htmlResult = htmlFacade.replace('$content', svgAsXml);\r\n\r\n        this.save('html', htmlResult, 'class_diagram.htm', 'text/plain');\r\n    }\r\n\r\n    /** Exports the diagram as json. */\r\n    public exportJson(): void {\r\n        let type = 'text/plain';\r\n        let jsonObj = Util.toJson(this.$graphModel);\r\n        let data = JSON.stringify(jsonObj, null, '\\t');\r\n\r\n        this.save('json', data, 'class_diagram.json', type);\r\n    }\r\n\r\n    /** Exports the diagram as pdf. */\r\n    public exportPdf(): void {\r\n        if (!window['jsPDF']) {\r\n            console.log('jspdf n.a.');\r\n            return;\r\n        }\r\n        let type = 'image/svg+xml';\r\n        let converter, pdf = new window['jsPDF']('l', 'px', [this.$graphModel.getSize().x, this.$graphModel.getSize().y]);\r\n        converter = new SVGConverter(this.$view, pdf, {removeInvalid: false});\r\n        pdf.save('Download.pdf');\r\n/*        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let canvas, context, a, image = new Image();\r\n        let size = this.getRootSize();\r\n\r\n        // create the loaded img source into a canvas. to generate a picture. then place this picture in the pdf\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            let pdf = new window['jsPDF']();\r\n\r\n            pdf.addImage(canvas.toDataURL('image/jpeg'), 'jpeg', 15, 40, 180, 160);\r\n            pdf.save('class_diagram.pdf');\r\n\r\n        };\r\n\r\n        image.src = url;\r\n        */\r\n    }\r\n\r\n    public import(data: string): void {\r\n        let rootElement = this.$graphModel.$view;\r\n        while (rootElement.hasChildNodes()) {\r\n            rootElement.removeChild(rootElement.firstChild);\r\n        }\r\n\r\n        while (this.$view.hasChildNodes()) {\r\n            this.$view.removeChild(this.$view.firstChild);\r\n        }\r\n\r\n        this.clearModel();\r\n        let jsonData = JSON.parse(data);\r\n        this.load(jsonData);\r\n        this.layout();\r\n    }\r\n\r\n    public exportEPS(): void {\r\n          let converter, doc = new JSEPS({inverting: true});\r\n            converter = new SVGConverter(this.$view, doc, {removeInvalid: false});\r\n            this.save('eps', doc.getData(), 'diagram.eps', doc.getType());\r\n    }\r\n\r\n    /** Exports the diagram as png. */\r\n    public exportPng(): void {\r\n        let canvas, context, a, image = new Image();\r\n        let xmlNode = this.serializeXmlNode(this.getSvgWithStyleAttributes());\r\n        let typ = 'image/svg+xml';\r\n        let url = window.URL.createObjectURL(new Blob([xmlNode], { type: typ }));\r\n\r\n        let size = this.getRootSize();\r\n\r\n        image.onload = function () {\r\n            canvas = document.createElement('canvas');\r\n            canvas.width = size.width;\r\n            canvas.height = size.height;\r\n            context = canvas.getContext('2d');\r\n            context.drawImage(image, 0, 0);\r\n\r\n            a = document.createElement('a');\r\n            a.download = 'class_diagram.png';\r\n            a.href = canvas.toDataURL('image/png');\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            document.body.removeChild(a);\r\n        };\r\n\r\n        image.src = url;\r\n\r\n    }\r\n\r\n    public getSvgWithStyleAttributes(): Node {\r\n        let oDOM = this.$graphModel.$view.cloneNode(true);\r\n        this.readElement(oDOM, this.$graphModel.$view);\r\n\r\n        return oDOM;\r\n    }\r\n\r\n    public serializeXmlNode(xmlNode: any) {\r\n        if (window['XMLSerializer'] !== undefined) {\r\n            return (new window['XMLSerializer']()).serializeToString(xmlNode);\r\n        }\r\n        if (xmlNode.xml !== undefined) {\r\n            return xmlNode.xml;\r\n        }\r\n        return xmlNode.outerHTML;\r\n    }\r\n\r\n    public getRootSize(): Size {\r\n        let width: number;\r\n        let height: number;\r\n        width = +this.root.getAttribute('width');\r\n        height = +this.root.getAttribute('height');\r\n\r\n        return { width: width, height: height };\r\n    }\r\n\r\n        // Graph.prototype.ExportEPS = function () {\r\n        //     var converter, doc = new svgConverter.jsEPS({inverting: true});\r\n        //     converter = new svgConverter(this.board, doc, {removeInvalid: false});\r\n        //     doc.save();\r\n        // };\r\n    public load(json: JSON | Object, owner?: Control): any {\r\n        this.$graphModel = new GraphModel();\r\n        this.$graphModel.init(this);\r\n        this.$graphModel.load(json);\r\n    }\r\n\r\n    public clearModel(): void {\r\n        this.$graphModel.removeAllElements();\r\n        this.clearSvgRoot();\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.layout();\r\n        return this;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any) {\r\n        return;\r\n    }\r\n\r\n    public getNextFreePosition(): Point {\r\n\r\n        if (!this.$graphModel) {\r\n            return new Point(50, 50);\r\n        }\r\n\r\n        let point = new Point(0, 50);\r\n\r\n        let maxX = 0;\r\n        let minX = 9000;\r\n\r\n        for (let node of this.$graphModel.nodes) {\r\n            maxX = Math.max(maxX, node.getPos().x);\r\n            minX = Math.min(minX, node.getPos().x);\r\n        }\r\n\r\n        if (minX > 170) {\r\n            point.x = 10;\r\n        }\r\n        else {\r\n            point.x = maxX + 200;\r\n        }\r\n\r\n        return point;\r\n    }\r\n\r\n    public addElement(type: string, dontDraw?: boolean): boolean {\r\n        let success = this.$graphModel.addElement(type);\r\n        if (success === true) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return success;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues?: Object, layout?: boolean, dontDraw?: boolean): DiagramElement {\r\n        let element = this.$graphModel.addElementWithValues(type, optionalValues);\r\n        if (element && layout) {\r\n            this.layout(dontDraw);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public layout(dontDraw?: boolean): Graph {\r\n        this.getLayout().layout(this, this.$graphModel);\r\n\r\n        if (dontDraw) {\r\n            return this;\r\n        }\r\n\r\n        this.draw();\r\n        return this;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTDRAGOVER, EventBus.ELEMENTDRAGLEAVE, EventBus.ELEMENTDROP];\r\n    }\r\n\r\n    public draw() {\r\n        this.clearSvgRoot();\r\n        let model = this.$graphModel;\r\n        let root = this.root;\r\n        let max: Point = new Point();\r\n        if (this.options) {\r\n            max.x = this.options.minWidth || 0;\r\n            max.y = this.options.minHeight || 0;\r\n        }\r\n\r\n        for (let node of model.nodes) {\r\n            let svg = node.getSVG();\r\n            EventBus.register(node, svg);\r\n            root.appendChild(svg);\r\n\r\n            let temp: number;\r\n            temp = node.getPos().x + node.getSize().x;\r\n            if (temp > max.x) {\r\n                max.x = temp;\r\n            }\r\n            temp = node.getPos().y + node.getSize().y;\r\n            if (temp > max.y) {\r\n                max.y = temp;\r\n            }\r\n\r\n        }\r\n        Util.setAttributeSize(this.root, max.x + 60, max.y + 40);\r\n\r\n        for (let edge of model.edges) {\r\n            let svg = edge.getSVG();\r\n            EventBus.register(edge, svg);\r\n            root.appendChild(svg);\r\n        }\r\n    }\r\n\r\n    public getNode(id: string) {\r\n        return this.$graphModel.getNodeById(id);\r\n    }\r\n\r\n    public drawElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let svg = element.getSVG();\r\n        this.root.appendChild(svg);\r\n\r\n        // actualize root width size, if neccessary\r\n        // get current width of root\r\n        let rootSize = this.getRootSize();\r\n        let newWidth = element.getPos().x + element.getSize().x + 40;\r\n        let newHeight = element.getPos().y + element.getSize().y;\r\n\r\n        if (rootSize.width < newWidth) {\r\n            this.root.setAttributeNS(null, 'width', '' + newWidth);\r\n        }\r\n\r\n        if (rootSize.height < newHeight) {\r\n            this.root.setAttributeNS(null, 'height', '' + newHeight);\r\n        }\r\n\r\n        // draw edge\r\n        if (element instanceof Association) {\r\n            let edge = <Association>element;\r\n            edge.redraw(edge.$sNode);\r\n            let srcSvg = element.$sNode.getAlreadyDisplayingSVG();\r\n            let targetSvg = element.$tNode.getAlreadyDisplayingSVG();\r\n\r\n            this.root.appendChild(srcSvg);\r\n            this.root.appendChild(targetSvg);\r\n        }\r\n\r\n        EventBus.register(element, svg);\r\n    }\r\n\r\n    public removeElement(element: DiagramElement): void {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        let alreadyDisplayingSvg = element.getAlreadyDisplayingSVG();\r\n        if (Util.isParentOfChild(this.root, alreadyDisplayingSvg)) {\r\n            this.root.removeChild(alreadyDisplayingSvg);\r\n        }\r\n    }\r\n\r\n    public generate(packageName: string, path?: string) {\r\n        this.$graphModel.package = packageName;\r\n        this.$graphModel.genPath = path;\r\n\r\n        let data, result = Util.toJson(this.$graphModel);\r\n        data = JSON.stringify(result, null, '\\t');\r\n        if (window['java'] && typeof window['java'].generate === 'function') {\r\n            window['java'].generate(data);\r\n        }\r\n    }\r\n// REFACTORING dd\r\n    private readElement(parent: any, origData: any): void {\r\n        let children = parent.childNodes;\r\n        let origChildDat = origData.childNodes;\r\n\r\n        for (let cd = 0; cd < children.length; cd++) {\r\n            let child = children[cd];\r\n\r\n            let tagName = child.tagName;\r\n            if (this.containerElements.indexOf(tagName) !== -1) {\r\n                this.readElement(child, origChildDat[cd]);\r\n            } else if (tagName in this.relevantStyles) {\r\n                let styleDef = window.getComputedStyle(origChildDat[cd]);\r\n\r\n                let styleString = '';\r\n                for (let st = 0; st < this.relevantStyles[tagName].length; st++) {\r\n                    styleString += this.relevantStyles[tagName][st] + ':' + styleDef.getPropertyValue(this.relevantStyles[tagName][st]) + '; ';\r\n                }\r\n\r\n                child.setAttribute('style', styleString);\r\n            }\r\n        }\r\n    }\r\n\r\n    private createPattern(): Element {\r\n        const defs = Util.createShape({ tag: 'defs' });\r\n        const pattern = Util.createShape({\r\n            tag: 'pattern',\r\n            id: 'raster',\r\n            patternUnits: 'userSpaceOnUse',\r\n            width: 40,\r\n            height: 40\r\n        });\r\n        const path = 'M0 4 L0 0 L4 0 M36 0 L40 0 L40 4 M40 36 L40 40 L36 40 M4 40 L0 40 L0 36';\r\n        const cross = Util.createShape({\r\n            tag: 'path',\r\n            d: path,\r\n            stroke: '#DDD',\r\n            'stroke-width': 1,\r\n            fill: 'none'\r\n        });\r\n\r\n        const rect = Util.createShape({\r\n            tag: 'rect',\r\n            x: 0,\r\n            y: 0,\r\n            width: 40,\r\n            height: 40,\r\n            fill: 'none'\r\n        });\r\n        pattern.appendChild(rect);\r\n        pattern.appendChild(cross);\r\n        defs.appendChild(pattern);\r\n        return defs;\r\n    }\r\n\r\n    private clearSvgRoot() {\r\n        const root = this.root;\r\n        this.$graphModel.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n        while (root.firstChild) {\r\n            root.removeChild(root.firstChild);\r\n        }\r\n\r\n        root.appendChild(this.createPattern());\r\n        let fillValue = 'none';\r\n        if (this.options.raster) {\r\n            fillValue = 'url(#raster)';\r\n        }\r\n        let background = Util.createShape({\r\n            tag: 'rect',\r\n            id: 'background',\r\n            width: 5000,\r\n            height: 5000,\r\n            x: 0,\r\n            y: 0,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: fillValue\r\n        });\r\n        root.appendChild(background);\r\n\r\n        // delete inline Edit, if exists\r\n        let inlineEdit = document.getElementById('inlineEdit');\r\n        if (inlineEdit && document.body.contains(inlineEdit)) {\r\n            document.body.removeChild(inlineEdit);\r\n        }\r\n    }\r\n\r\n    private getLayout(): Layout {\r\n        if (this.currentlayout) {\r\n            return this.currentlayout;\r\n        }\r\n\r\n        let layout = this.options.layout || '';\r\n        if (this.layoutFactory[layout]) {\r\n            this.currentlayout = new this.layoutFactory[layout]();\r\n        } else {\r\n            this.currentlayout = new layouts.DagreLayout();\r\n        }\r\n\r\n        return this.currentlayout;\r\n    }\r\n\r\n    private initFactories() {\r\n\r\n        let noder = nodes;\r\n        this.nodeFactory = {};\r\n        for (let id in noder) {\r\n            if (noder.hasOwnProperty(id) === true) {\r\n                this.nodeFactory[id] = noder[id];\r\n            }\r\n        }\r\n\r\n        let edger = edges;\r\n        this.edgeFactory = {};\r\n        for (let id in edger) {\r\n            if (edger.hasOwnProperty(id) === true) {\r\n                this.edgeFactory[id] = edger[id];\r\n            }\r\n        }\r\n\r\n        let layouter = layouts;\r\n        this.layoutFactory = {};\r\n        for (let id in layouter) {\r\n            if (layouter.hasOwnProperty(id) === true) {\r\n                this.layoutFactory[id] = layouter[id];\r\n            }\r\n        }\r\n    }\r\n\r\n    private initCanvas() {\r\n        if (this.options.canvas) {\r\n            this.$view = document.getElementById(this.options.canvas);\r\n        }\r\n        if (!this.$view) {\r\n            this.$view = document.createElement('div');\r\n            this.$view.setAttribute('class', 'diagram');\r\n            document.body.appendChild(this.$view);\r\n        }\r\n    }\r\n\r\n    private initFeatures(features: any) {\r\n\r\n        if (features) {\r\n            if (features.newedge) {\r\n                EventBus.subscribe(new NewEdge(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            this.importFile = new ImportFile(this);\r\n            if (features.import) {\r\n                EventBus.subscribe(this.importFile, 'dragover', 'dragleave', 'drop');\r\n            }\r\n            if (features.zoom) {\r\n                let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n                EventBus.subscribe(new Zoom(this), mousewheel);\r\n            }\r\n            if (features.drag) {\r\n                EventBus.subscribe(new Drag(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n            if (features.select) {\r\n                EventBus.subscribe(new Select(this), 'click', 'drag');\r\n            }\r\n            if (features.palette) {\r\n                new Palette(this).show();\r\n            }\r\n            if (features.toolbar) {\r\n                new Toolbar(this).show();\r\n            }\r\n            if (features.properties) {\r\n                let propertyPanel = new PanelGroup(this);\r\n                // let dispatcher = new PropertiesDispatcher(this);\r\n                EventBus.subscribe(propertyPanel, 'dblclick', 'click', EventBus.RELOADPROPERTIES);\r\n                propertyPanel.show();\r\n            }\r\n            if (features.addnode) {\r\n                EventBus.subscribe(new AddNode(this), 'mousedown', 'mouseup', 'mousemove', 'mouseleave');\r\n            }\r\n        }\r\n    }\r\n}\r\n","import {Graph} from './Graph';\r\nimport {DiagramElement, Point} from './BaseElements';\r\nimport {Association} from './edges';\r\nimport {Node} from './nodes';\r\nimport {Control} from '../Control';\r\nimport {Util} from '../util';\r\nimport {EventBus} from '../EventBus';\r\n\r\nexport class GraphModel extends DiagramElement {\r\n    nodes: Node[] = [];\r\n    edges: Association[] = [];\r\n    package: string;\r\n    genPath: string;\r\n    $isLoading: boolean;\r\n\r\n    public load(data?: any) {\r\n\r\n        this.$isLoading = true;\r\n        data = data || {};\r\n        this.property = data.type || data.property || 'classdiagram';\r\n        this.id = 'RootElement';\r\n        if (data.nodes) {\r\n            for (let node of data.nodes) {\r\n                this.addNode(node);\r\n            }\r\n        }\r\n        if (data.edges) {\r\n            for (let edge of data.edges) {\r\n                this.addEdge(edge);\r\n            }\r\n        }\r\n\r\n        this.$isLoading = false;\r\n    }\r\n\r\n    public getNodeByPosition(x: number, y: number): Node {\r\n        for (let node of this.nodes) {\r\n            let posOfNode: Point = (<Node>node).getPos();\r\n            let sizeOfNode: Point = (<Node>node).getSize();\r\n\r\n            if ((posOfNode.x <= x && (posOfNode.x + sizeOfNode.x) >= x)\r\n                && (posOfNode.y <= y && (posOfNode.y + sizeOfNode.y) >= y)) {\r\n                return node;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    public init(owner: Control, property?: string, id?: string): Control {\r\n        super.init(owner, property, id);\r\n        this.initCanvas();\r\n        return this;\r\n    }\r\n\r\n    public addElement(type: string): boolean {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n        if (element) {\r\n            Util.saveToLocalStorage(this);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public addElementWithValues(type: string, optionalValues: Object): DiagramElement {\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n        let element = <DiagramElement>this.createElement(type, id, {});\r\n\r\n        // position\r\n        if (optionalValues) {\r\n            if (optionalValues.hasOwnProperty('x') && optionalValues.hasOwnProperty('y')) {\r\n                let x = optionalValues['x'];\r\n                let y = optionalValues['y'];\r\n                element.withPos(x, y);\r\n            }\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return element;\r\n    }\r\n\r\n    public removeAllElements(): void {\r\n\r\n        let nodesLength = this.nodes.length;\r\n        for (let i = 0; i < nodesLength; i++) {\r\n            this.removeElement(this.nodes[0].id);\r\n        }\r\n\r\n        this.$view.dispatchEvent(Util.createCustomEvent('click'));\r\n    }\r\n\r\n    public removeElement(id: string): boolean {\r\n\r\n        let element = this.getDiagramElementById(id);\r\n        if (!element) {\r\n            return false;\r\n        }\r\n\r\n        (<Graph>this.$owner).removeElement(element);\r\n\r\n        if (element instanceof Node) {\r\n\r\n            let idxOfNode = this.nodes.indexOf(element);\r\n            if (idxOfNode > -1) {\r\n                this.nodes.splice(idxOfNode, 1);\r\n            }\r\n\r\n            while (element.$edges.length > 0) {\r\n                this.removeElement(element.$edges[0].id);\r\n            }\r\n\r\n            element.$edges = [];\r\n        }\r\n        else if (element instanceof Association) {\r\n\r\n            let idxOfEdge = this.edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                this.edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from source\r\n            idxOfEdge = element.$sNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$sNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n            // remove from target\r\n            idxOfEdge = element.$tNode.$edges.indexOf(element);\r\n            if (idxOfEdge > -1) {\r\n                element.$tNode.$edges.splice(idxOfEdge, 1);\r\n            }\r\n\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return true;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        const size = 10;\r\n        const path = `M${-size} 0 L${+size} 0 M0 ${-size} L0 ${+size}`;\r\n\r\n        const attr = {\r\n            tag: 'path',\r\n            id: 'origin',\r\n            d: path,\r\n            stroke: '#999',\r\n            'stroke-width': '1',\r\n            fill: 'none'\r\n        };\r\n        let shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: 0 - size,\r\n            y: 0 - size / 1.5,\r\n            'text-anchor': 'end',\r\n            'font-family': 'Verdana',\r\n            'font-size': '9',\r\n            fill: '#999'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = '(0, 0)';\r\n\r\n        let group = this.createShape({tag: 'g'});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEUP, EventBus.ELEMENTMOUSELEAVE, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTMOUSEWHEEL, EventBus.ELEMENTCLICK, EventBus.ELEMENTDRAG];\r\n    }\r\n\r\n    public getNewId(prefix?: string): string {\r\n        let id = (prefix ? prefix.toLowerCase() + '-' : '') + Math.floor(Math.random() * 100000);\r\n        return id;\r\n    }\r\n\r\n    public getEdgeById(id: string): Association {\r\n        for (let edge of this.edges) {\r\n            if (edge.id === id) {\r\n                return edge;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    public getDiagramElementById(id: string): DiagramElement {\r\n\r\n        return this.getNodeById(id) || this.getEdgeById(id);\r\n    }\r\n\r\n    /**\r\n     * Add an edge with data in json file. Optional you can say, that the edge should have\r\n     * the points of source node and target node.\r\n     * @param edge information about edge in json\r\n     * @param withPosOfNodes optional. set points to line of source and target node\r\n     */\r\n    public addEdge(edge: any, withPosOfNodes?: boolean): Association {\r\n\r\n        // lookup in factoryedges and check if the edge type realy exists\r\n        if (edge && edge.type) {\r\n            const graph = (<Graph>this.$owner);\r\n            let typeExists = false;\r\n            for (let edgeType in graph.edgeFactory) {\r\n                if (edgeType === edge.type) {\r\n                    typeExists = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!typeExists) {\r\n                edge.type = 'Association';\r\n            }\r\n        }\r\n\r\n        let type = edge.type || 'Association';\r\n        type = Util.toPascalCase(type);\r\n        let id = this.getNewId(type);\r\n\r\n        let newEdge = <Association>this.createElement(type, id, edge);\r\n        newEdge.type = type;\r\n\r\n        let source: Node;\r\n        let sourceAsString: string = edge.source.id || edge.source;\r\n        if (sourceAsString) {\r\n            source = this.getNodeById(sourceAsString);\r\n            if (!source) {\r\n                let nodeID = edge.source;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                source = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                source.init(this);\r\n            }\r\n        }\r\n\r\n        let target: Node;\r\n        let targetAsString: string = edge.target.id || edge.target;\r\n        if (targetAsString) {\r\n            target = this.getNodeById(targetAsString);\r\n            if (!target) {\r\n                let nodeID = edge.target;\r\n                if (typeof nodeID === 'object') {\r\n                    nodeID = nodeID.id;\r\n                }\r\n\t\t\t\tif(!nodeID) {\r\n\t\t\t\t\tnodeID = this.getNewId('Class');\r\n\t\t\t\t}\r\n                target = <Node>this.createElement('Class', nodeID, {name: nodeID});\r\n                target.init(this);\r\n            }\r\n        }\r\n\r\n        newEdge.withItem(source, target);\r\n\r\n        if (withPosOfNodes) {\r\n            let srcX = source.getPos().x + (source.getSize().x / 2);\r\n            let srcY = source.getPos().y + (source.getSize().y / 2);\r\n\r\n            let targetX = target.getPos().x + (target.getSize().x / 2);\r\n            let targetY = target.getPos().y + (target.getSize().y / 2);\r\n\r\n            newEdge.addPoint(srcX, srcY);\r\n            newEdge.addPoint(targetX, targetY);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this);\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public createElement(type: string, id: string, data: Object): DiagramElement {\r\n        const graph = <Graph>this.$owner;\r\n        let element: DiagramElement;\r\n        if (graph.nodeFactory[type]) {\r\n            element = new graph.nodeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.nodes.push(<Node>element);\r\n        }\r\n        if (graph.edgeFactory[type]) {\r\n            element = new graph.edgeFactory[type](data);\r\n            Util.initControl(this, element, type, id, data);\r\n            this.edges.push(<Association>element);\r\n        }\r\n        return element;\r\n    }\r\n\r\n    public getNodeById(id: string): Node {\r\n        for (let node of this.nodes) {\r\n            if (node.id === id) {\r\n                return node;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    private initCanvas() {\r\n        const graph = <Graph>this.$owner;\r\n        graph.canvasSize = {width: graph.$view.clientWidth, height: graph.$view.clientHeight};\r\n        graph.root = Util.createShape({\r\n            tag: 'svg',\r\n            id: 'root',\r\n            width: graph.canvasSize.width,\r\n            height: graph.canvasSize.height\r\n            // FIXME,viewBox: `${this.$graph.options.origin.x * -1} ${this.$graph.options.origin.y * -1} ${this.$graph.canvasSize.width} ${this.$graph.canvasSize.height}`\r\n        });\r\n        this.$view = graph.root;\r\n        graph.$view.appendChild(graph.root);\r\n\r\n        let mousewheel = 'onwheel' in document.createElement('div') ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\r\n        EventBus.register(this, this.$view);\r\n    }\r\n\r\n    private addNode(node: Node): Node {\r\n        let type = node['type'] || node.property || 'Node';\r\n        type = Util.toPascalCase(type);\r\n        let id = node['id'] || node['name'] || this.getNewId(type);\r\n\r\n        return <Node>this.createElement(type, id, node);\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction } from './index';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\n\r\nexport abstract class Aggregate extends Association {\r\n\r\n    protected $diamond: Element;\r\n\r\n    public getSVG(): Element {\r\n\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled diamond\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n        };\r\n\r\n        this.$diamond = this.createShape(attr);\r\n\r\n        group.appendChild(this.$diamond);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint: Point = this.$points[0];\r\n        let direction: Direction = Direction.Down;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if (this.$sNode.id === startNode.id || this.$points.length == 2) {\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$diamond.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint: Point, direction: Direction): string {\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                path = `M${startX} ${startY} L${startX + 6} ${startY + 10} L${startX} ${startY + 20} L${startX - 6} ${startY + 10} Z`;\r\n                startPoint.y = startPoint.y+20;\r\n                break;\r\n            case Direction.Right:\r\n                path = `M${startX} ${startY} L${startX - 10} ${startY + 6} L${startX - 20} ${startY} L${startX - 10} ${startY - 6} Z`;\r\n                startPoint.x = startPoint.x-20;\r\n                break;\r\n            case Direction.Left:\r\n                path = `M${startX} ${startY} L${startX + 10} ${startY - 6} L${startX + 20} ${startY} L${startX + 10} ${startY + 6} Z`;\r\n                startPoint.x = startPoint.x+20;\r\n                break;\r\n            case Direction.Down:\r\n                path = `M${startX} ${startY} L${startX - 6} ${startY - 10} L${startX} ${startY - 20} L${startX + 6} ${startY - 10} Z`;\r\n                startPoint.y = startPoint.y-20;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Aggregation extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'white');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { DiagramElement, Line, Point } from '../BaseElements';\r\nimport { Node } from '../nodes';\r\nimport { InfoText } from '../nodes/InfoText';\r\nimport { Util } from '../../util';\r\nimport { EventBus } from '../../EventBus';\r\nimport * as edges from '../edges';\r\nimport { Graph } from '../Graph';\r\n\r\nexport const enum Direction {\r\n    Up, Down, Left, Right\r\n}\r\n\r\nexport class Association extends DiagramElement {\r\n    public source: string;\r\n    public target: string;\r\n    public type: string;\r\n    public $sNode: Node;\r\n    public $tNode: Node;\r\n    public lineStyle: string;\r\n    public $points: Point[] = [];\r\n    public $pathSvg: Element;\r\n    public $pathWideSvg: Element;\r\n    public info: InfoText;\r\n    public sourceInfo: InfoText;\r\n    public targetInfo: InfoText;\r\n    $m: number;\r\n    $n: number;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super();\r\n\r\n        this.withData(data);\r\n    }\r\n\r\n    public withData(data: JSON | string | Object | any): Association {\r\n\r\n        if (!data) {\r\n            return this;\r\n        }\r\n        let srcInfo;\r\n        let trgInfo;\r\n\r\n        if (data.source && typeof data.source !== 'string') {\r\n            srcInfo = data.source;\r\n        }\r\n        else if (data.sourceInfo && typeof data.sourceInfo !== 'string') {\r\n            srcInfo = data.sourceInfo;\r\n        }\r\n\r\n        if (srcInfo) {\r\n            this.sourceInfo = new InfoText(srcInfo);\r\n            this.sourceInfo.$owner = this;\r\n        }\r\n\r\n        if (data.target && typeof data.target !== 'string') {\r\n            trgInfo = data.target;\r\n        }\r\n        else if (data.targetInfo && typeof data.targetInfo !== 'string') {\r\n            trgInfo = data.targetInfo;\r\n        }\r\n\r\n        if (trgInfo) {\r\n            this.targetInfo = new InfoText(trgInfo);\r\n            this.targetInfo.$owner = this;\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    public updateSrcCardinality(cardinality: string): void {\r\n        this.sourceInfo = this.updateCardinality(this.$sNode, this.sourceInfo, cardinality);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetCardinality(cardinality: string): void {\r\n        this.targetInfo = this.updateCardinality(this.$tNode, this.targetInfo, cardinality);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateSrcProperty(property: string): void {\r\n        this.sourceInfo = this.updateProperty(this.$sNode, this.sourceInfo, property);\r\n        this.redrawSourceInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public updateTargetProperty(property: string): void {\r\n        this.targetInfo = this.updateProperty(this.$tNode, this.targetInfo, property);\r\n        this.redrawTargetInfo();\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public withItem(source: Node, target: Node): Association {\r\n        source.$edges.push(this);\r\n        target.$edges.push(this);\r\n        this.$sNode = source;\r\n        this.$tNode = target;\r\n        this.source = source.id;\r\n        this.target = target.id;\r\n        return this;\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let group = Util.createShape({ tag: 'g', id: this.id, class: 'SVGEdge' });\r\n\r\n        let path: string = this.getPath();\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'none'\r\n        };\r\n        let pathLine = this.createShape(attr);\r\n\r\n        //attr['style'] = 'stroke-width:20;opacity:0;width:20;height:20';\r\n        let extendedPathLine = Util.createShape(attr);\r\n\r\n        group.appendChild(extendedPathLine);\r\n        group.appendChild(pathLine);\r\n\r\n        if (this.sourceInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.sourceInfo.getSVG());\r\n        }\r\n        if (this.targetInfo) {\r\n            let calcPos = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.withPos(calcPos.x, calcPos.y);\r\n            group.appendChild(this.targetInfo.getSVG());\r\n        }\r\n\r\n        this.$pathWideSvg = extendedPathLine;\r\n        this.$pathSvg = pathLine;\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.EDITOR, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    public convertEdge(type: string, newId: string, redraw?: boolean): Association {\r\n        if (!edges[type]) {\r\n            return this;\r\n        }\r\n\r\n        let newEdge: Association = new edges[type]();\r\n        newEdge.withItem(this.$sNode, this.$tNode);\r\n        newEdge.id = newId;\r\n        newEdge.type = type;\r\n        newEdge.lineStyle = this.lineStyle;\r\n        newEdge.$owner = this.$owner;\r\n\r\n        if (this.sourceInfo) {\r\n            newEdge.sourceInfo = new InfoText({ property: this.sourceInfo.property, cardinality: this.sourceInfo.cardinality });\r\n            newEdge.sourceInfo.$owner = newEdge;\r\n        }\r\n\r\n        if (this.targetInfo) {\r\n            newEdge.targetInfo = new InfoText({ property: this.targetInfo.property, cardinality: this.targetInfo.cardinality });\r\n            newEdge.targetInfo.$owner = newEdge;\r\n        }\r\n\r\n        this.$points.forEach(point => {\r\n            newEdge.addPoint(point.x, point.y);\r\n        });\r\n\r\n        let graph = <Graph>this.getRoot();\r\n        if (!graph) {\r\n            return this;\r\n        }\r\n\r\n        // update model. insert the edge exact on the same index, like the old edge\r\n        let idx = graph.$graphModel.edges.indexOf(this);\r\n        graph.$graphModel.removeElement(this.id);\r\n        if (idx > -1) {\r\n            graph.$graphModel.edges.splice(idx, 0, newEdge);\r\n        }\r\n        else {\r\n            graph.$graphModel.edges.push(newEdge);\r\n        }\r\n\r\n        if (!redraw) {\r\n            return newEdge;\r\n        }\r\n\r\n        let svgRoot: Element;\r\n        if (graph) {\r\n            svgRoot = graph.root;\r\n        }\r\n        else {\r\n            svgRoot = document.getElementById('root');\r\n        }\r\n        let newEdgeSvg = newEdge.getSVG();\r\n\r\n        // update graph\r\n        graph.removeElement(this);\r\n        svgRoot.appendChild(newEdgeSvg);\r\n\r\n        // redraw the edge from both sides to get the correct display\r\n        // if the type is edge, so the path can be redraw.\r\n        // if not, so the inherited class redraw the path with his own logic\r\n\r\n        let dontDrawPath: boolean = (type !== 'Edge');\r\n        newEdge.redraw(newEdge.$sNode, dontDrawPath);\r\n        newEdge.redraw(newEdge.$tNode, dontDrawPath);\r\n\r\n        EventBus.register(newEdge, newEdgeSvg);\r\n\r\n        this.sourceInfo = undefined;\r\n        this.targetInfo = undefined;\r\n\r\n        return newEdge;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean): void {\r\n\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n        // redraw the first point\r\n        // check which point is the near to startnode\r\n        let endPoint: Point;\r\n        let recalcPoint: Point;\r\n        let endPointIdx: number;\r\n\r\n        if (this.$sNode.id === startNode.id) {\r\n            recalcPoint = this.$points[0];\r\n            endPointIdx = 1;\r\n        } else if (this.$tNode.id === startNode.id) {\r\n            recalcPoint = this.$points[this.$points.length - 1];\r\n            endPointIdx = this.$points.length - 2;\r\n        }\r\n\r\n        endPoint = this.$points[endPointIdx];\r\n\r\n        // calculate and set new position of point to redraw\r\n        this.calcIntersection(startNode, recalcPoint, endPoint);\r\n\r\n        // remove the 2nd point next to startnode, if the node was dragged upper the point\r\n        if (this.$points.length > 2 && this.$tNode.id === startNode.id && endPoint.y > (startNode.getPos().y + (startNode.getSize().y / 2))) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$tNode.id === startNode.id && this.$points.length === 2) {\r\n            this.calcIntersection(this.$sNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (this.$points.length > 2 && this.$sNode.id === startNode.id && (startNode.getPos().y + (startNode.getSize().y / 2) > endPoint.y)) {\r\n\r\n            this.$points.splice(endPointIdx, 1);\r\n        }\r\n\r\n        if (this.$sNode.id === startNode.id && this.$points.length === 2) {\r\n\r\n            this.calcIntersection(this.$tNode, endPoint, recalcPoint);\r\n        }\r\n\r\n        if (!dontDrawPoints) {\r\n            this.redrawPointsAndInfo();\r\n        }\r\n    }\r\n\r\n    public getPath(): string {\r\n\r\n        if (this.$points.length === 0) {\r\n            return '';\r\n        }\r\n\r\n        let path: string = 'M';\r\n        for (let i = 0; i < this.$points.length; i++) {\r\n            let point: Point = this.$points[i];\r\n            if (i > 0) {\r\n                path += 'L';\r\n            }\r\n            path += Math.floor(point.x) + ' ' + Math.floor(point.y) + ' ';\r\n        }\r\n\r\n        return path;\r\n    }\r\n    public calcInfoPosNew(infoTxt: InfoText, node: Node): Point {\r\n\r\n        if (!infoTxt || !node) {\r\n            return null;\r\n        }\r\n\r\n        // 1. step: get direction\r\n        let startPoint: Point;\r\n        let nextToStartPoint: Point;\r\n        if (this.$sNode.id === node.id) {\r\n            startPoint = this.$points[0];\r\n            nextToStartPoint = this.$points[1];\r\n        }\r\n        else if (this.$tNode.id === node.id) {\r\n            startPoint = this.$points[this.$points.length - 1];\r\n            nextToStartPoint = this.$points[this.$points.length - 2];\r\n        }\r\n\r\n        let direction: Direction = this.getDirectionOfPointToNode(node, startPoint);\r\n\r\n        let x: number;\r\n        let y: number;\r\n\r\n        switch (direction) {\r\n            case Direction.Up:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                break;\r\n            case Direction.Right:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x - (infoTxt.getSize().x) - 5;\r\n                break;\r\n            case Direction.Left:\r\n                // compare y-coordinates from start- and nextToStart point\r\n                if (startPoint.y >= nextToStartPoint.y) {\r\n                    y = startPoint.y + (infoTxt.getSize().y / 2);\r\n                }\r\n                else {\r\n                    y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                }\r\n                x = startPoint.x + 5;\r\n                break;\r\n            case Direction.Down:\r\n                // compare x-coordinates from start- and nextToStart point\r\n                if (startPoint.x >= nextToStartPoint.x) {\r\n                    x = startPoint.x + 5;\r\n                }\r\n                else {\r\n                    x = startPoint.x - (infoTxt.getSize().x);\r\n                }\r\n                y = startPoint.y - (infoTxt.getSize().y / 2) - 5;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n\r\n        // assign calculated position to infotext\r\n        return new Point(x, y);\r\n    }\r\n\r\n    public clearPoints(): any {\r\n        this.$points = [];\r\n        this.$points = [];\r\n    }\r\n\r\n    public addPoint(x: number, y: number): Point[] {\r\n        this.$points.push(new Point(x, y));\r\n\r\n        return this.$points;\r\n    }\r\n\r\n    protected redrawPointsAndInfo(): void {\r\n        // redraw the edge with the new position\r\n        let path: string = this.getPath();\r\n        this.$pathSvg.setAttributeNS(null, 'd', path);\r\n        this.$pathWideSvg.setAttributeNS(null, 'd', path);\r\n\r\n        this.redrawSourceInfo();\r\n        this.redrawTargetInfo();\r\n    }\r\n\r\n    protected redrawSourceInfo() {\r\n        if (this.sourceInfo) {\r\n            let newPosOfSrc = this.calcInfoPosNew(this.sourceInfo, this.$sNode);\r\n            this.sourceInfo.redrawFromEdge(newPosOfSrc);\r\n        }\r\n    }\r\n\r\n    protected redrawTargetInfo() {\r\n        if (this.targetInfo) {\r\n            let newPosOfTarget = this.calcInfoPosNew(this.targetInfo, this.$tNode);\r\n            this.targetInfo.redrawFromEdge(newPosOfTarget);\r\n        }\r\n    }\r\n\r\n    protected getDirectionOfPointToNode(node: Node, pointNearNode: Point): Direction {\r\n        /*\r\n            Example to calculate the direction of nearest point to Node\r\n\r\n            node\r\n         x1_ _ _ _\r\n          |       |\r\n          |       |. pointNearNode\r\n          |       |\r\n          |_ _ _ x2\r\n\r\n          the calculation would return Direction.Left\r\n        */\r\n\r\n        let x1: Point = node.getPos();\r\n        let x2: Point = new Point((x1.x + node.getSize().x), (x1.y + node.getSize().y));\r\n        let direction: Direction = Direction.Down;\r\n\r\n        if (x1.y >= pointNearNode.y) {\r\n            direction = Direction.Down;\r\n        }\r\n        if (x2.y <= pointNearNode.y) {\r\n            direction = Direction.Up;\r\n        }\r\n        if (x1.x >= pointNearNode.x) {\r\n            direction = Direction.Right;\r\n        }\r\n        if (x2.x <= pointNearNode.x) {\r\n            direction = Direction.Left;\r\n        }\r\n\r\n        return direction;\r\n    }\r\n\r\n    private updateCardinality(node: Node, infoText: InfoText, cardinality: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'cardinality': cardinality });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.cardinality = cardinality;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateCardinality(cardinality);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private updateProperty(node: Node, infoText: InfoText, property: string): InfoText {\r\n        if (!infoText) {\r\n            infoText = new InfoText({ 'property': property });\r\n            infoText.$owner = this;\r\n\r\n            let calcPos = this.calcInfoPosNew(infoText, node);\r\n            infoText.withPos(calcPos.x, calcPos.y);\r\n            this.$view.appendChild(infoText.getSVG());\r\n\r\n            return infoText;\r\n        }\r\n\r\n        infoText.property = property;\r\n        if (infoText.isEmpty()) {\r\n            this.$view.removeChild(infoText.$view);\r\n\r\n            return undefined;\r\n        }\r\n\r\n        infoText.updateProperty(property);\r\n\r\n        return infoText;\r\n    }\r\n\r\n    private calcIntersection(startNode: Node, recalcPoint: Point, endPoint: Point): Point {\r\n\r\n        // https://www.mathelounge.de/21534/schnittpunkt-einer-linie-mit-den-randern-eines-rechtecks\r\n        let h = startNode.getSize().y;\r\n        let w = startNode.getSize().x;\r\n\r\n        let x1: number = startNode.getPos().x + (w / 2);\r\n        let y1: number = startNode.getPos().y + (h / 2);\r\n\r\n        let x2: number = endPoint.x;\r\n        let y2: number = endPoint.y;\r\n\r\n        let newX: number = recalcPoint.x;\r\n        let newY: number = recalcPoint.y;\r\n\r\n        if (x2 > x1) {\r\n            newX = x1 + (w / 2);\r\n        }\r\n        else if (x2 < x1) {\r\n            newX = x1 - (w / 2);\r\n        }\r\n        else {\r\n            newX = x1;\r\n        }\r\n\r\n        if ((x2 - x1) !== 0) {\r\n            newY = ((y2 - y1) / (x2 - x1) * (newX - x1)) + y1;\r\n        }\r\n        else {\r\n            if (y1 > y2) {\r\n                newY = startNode.getPos().y;\r\n            }\r\n            else {\r\n                newY = startNode.getPos().y + h;\r\n            }\r\n        }\r\n\r\n        // if the statement is not true, so the intersection is at the horizontal line\r\n        if (!((y1 - (h / 2) <= newY) && newY <= y1 + (h / 2))) {\r\n\r\n            if (y2 > y1) {\r\n                newY = y1 + (h / 2);\r\n            }\r\n            else {\r\n                newY = y1 - (h / 2);\r\n            }\r\n\r\n            if ((x2 - x1) !== 0) {\r\n                let tmp = ((y2 - y1) / (x2 - x1));\r\n                newX = (newY + (tmp * x1) - y1) / tmp;\r\n            }\r\n            else {\r\n                newX = x1;\r\n            }\r\n        }\r\n\r\n        recalcPoint.x = Math.ceil(newX);\r\n        recalcPoint.y = Math.ceil(newY);\r\n\r\n        return null;\r\n    }\r\n}\r\n","import { Association } from './Association';\r\nimport { Direction, Aggregate } from './index';\r\n\r\nexport class Composition extends Aggregate {\r\n  public getSVG(): Element {\r\n    let group = super.getSVG();\r\n    this.$diamond.setAttributeNS(null, 'fill', 'black');\r\n\r\n    return group;\r\n  }\r\n}\r\n","import { Association } from './Association';\r\nimport { Node } from '../nodes/Node';\r\nimport { Point } from '../BaseElements';\r\nimport { Direction } from '../index';\r\n\r\nexport class Generalisation extends Association {\r\n\r\n    public $TARGET_ELEMENT_HEIGHT : number = 12;\r\n    protected $targetElement: Element;\r\n\r\n    public getSVG(): Element {\r\n        let startPoint = this.$points[0];\r\n\r\n        let direction : Direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n        let path = this.calcCorrectPath(startPoint, direction);\r\n        \r\n        let group = super.getSVG();\r\n\r\n        // draw white filled arrow\r\n        let attr = {\r\n            tag: 'path',\r\n            d: path,\r\n            fill: 'white'\r\n          };\r\n\r\n        this.$targetElement = this.createShape(attr);\r\n\r\n        group.appendChild(this.$targetElement);\r\n        return group;\r\n    }\r\n\r\n    public redraw(startNode: Node, dontDrawPoints?: boolean) : void {\r\n\r\n        // redraw the edge\r\n        super.redraw(startNode, true);\r\n\r\n        // redraw the generalisation symbol\r\n        // first of all, get the correct direction\r\n        // get source node and the nearest point to source node\r\n        let startPoint : Point = this.$points[0];\r\n        let direction : Direction = Direction.Up;\r\n\r\n        // caclulate the path of target symbol only, if the dragged node is source or there are only 2 points left\r\n        if(this.$sNode.id === startNode.id || this.$points.length == 2){\r\n\r\n            direction = this.getDirectionOfPointToNode(this.$sNode, startPoint);\r\n\r\n            let path = this.calcCorrectPath(startPoint, direction);\r\n            this.$targetElement.setAttributeNS(null, 'd', path);\r\n        }\r\n\r\n        // draw the correct line with diamond\r\n        this.redrawPointsAndInfo();\r\n    }\r\n\r\n    protected calcCorrectPath(startPoint : Point, direction : Direction) : string{\r\n        let startX = startPoint.x;\r\n        let startY = startPoint.y;\r\n\r\n        let path;\r\n\r\n        switch(direction){\r\n            case Direction.Up:\r\n            path = `M${startX} ${startY+3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y+12;\r\n            break;\r\n            case Direction.Right:\r\n            path = `M${startX-3} ${startY} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x-12;\r\n            break;\r\n            case Direction.Left:\r\n            path = `M${startX+3} ${startY} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY+this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.x = startPoint.x+12;\r\n            break;\r\n            case Direction.Down:\r\n            path = `M${startX} ${startY-3} L${startX+this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} L${startX-this.$TARGET_ELEMENT_HEIGHT} ${startY-this.$TARGET_ELEMENT_HEIGHT} Z`;\r\n            startPoint.y = startPoint.y-12;\r\n            break;\r\n            default :\r\n            break;\r\n        }\r\n\r\n        return path;\r\n    }\r\n\r\n}\r\n","import { Generalisation } from './Generalisation';\r\n\r\nexport class Implements extends Generalisation {\r\n\r\n    public getSVG(): Element {\r\n        let group = super.getSVG();\r\n\r\n        this.$pathSvg.setAttributeNS(null, 'stroke-dasharray', '3, 3');\r\n\r\n        return group;\r\n    }\r\n}\r\n","export * from './Association';\r\nexport * from './Aggregate';\r\nexport * from './Aggregation';\r\nexport * from './Composition';\r\nexport * from './Generalisation';\r\nexport * from './Implements';","export * from './edges';\r\nexport * from './nodes';\r\nexport * from './BaseElements';\r\nexport * from './Graph';\r\nexport * from './Model';\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Attribute extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n}\r\n","/**\r\n * Created by Stefan on 28.06.2017.\r\n */\r\nimport {Control} from \"../../Control\";\r\n\r\nexport class AutoComplete extends Control {\r\n    private $inputField:HTMLInputElement;\r\n    private $dataList:HTMLDataListElement;\r\n    private $selected:HTMLSelectElement;\r\n    private $items:HTMLDivElement;\r\n    private isMultiple:boolean;\r\n\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        let div:HTMLDivElement = document.createElement('div');\r\n        this.$view = div;\r\n        this.$inputField = document.createElement('input');\r\n        this.$dataList = document.createElement(\"datalist\");\r\n        this.$dataList.id = \"data_\"+this.id;\r\n        this.$inputField.setAttribute(\"list\", \"data_\"+this.id);\r\n        if(data[\"value\"]) {\r\n            let values = data[\"value\"];\r\n            this.isMultiple = data[\"multiple\"] != null;\r\n            let option:HTMLOptionElement;\r\n            if(this.isMultiple) {\r\n                this.$selected = document.createElement(\"select\");\r\n                this.$selected.className = \"hide\";\r\n                this.$selected.multiple = true;\r\n\r\n                this.$selected.id = this.id;\r\n                this.$items = document.createElement(\"div\");\r\n                this.$items.className = \"selectedList\";\r\n                div.appendChild(this.$items);\r\n                this.$inputField.className = \"selectedInput\";\r\n                div.appendChild(this.$selected);\r\n                this.$view[\"style\"].setProperty(\"float\", \"left\");\r\n                let that = this;\r\n                this.$inputField.oninput = function(){that.onChange();}\r\n            } else {\r\n                this.$inputField.id = this.id;\r\n            }\r\n            for (let attr in values) {\r\n                if (!values.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                option = document.createElement(\"option\");\r\n                option.value = values[attr];\r\n                this.$dataList.appendChild(option);\r\n                if(this.isMultiple) {\r\n                    option = document.createElement(\"option\");\r\n                    option.value = values[attr];\r\n                    option.innerHTML = values[attr];\r\n                    this.$selected.appendChild(option);\r\n                }\r\n        }\r\n\r\n            div.appendChild(this.$inputField);\r\n            div.appendChild(this.$dataList);\r\n        }\r\n\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n            if(this.isMultiple) {\r\n                div.appendChild(this.$selected);\r\n            }\r\n        }\r\n\r\n        parent.appendChild(this);\r\n    }\r\n\r\n    public onChange() : void {\r\n        let textValue:string = this.$inputField.value;\r\n        if(textValue.length<1) {\r\n            return;\r\n        }\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == textValue) {\r\n                if(item.selected == false) {\r\n                    item.selected = true;\r\n                    item.defaultSelected = true;\r\n                    let test = document.createElement(\"li\");\r\n                    let that = this;\r\n                    test.onclick = function() {that.onDelete(item.value, test);};\r\n                    test.className = \"selectedItem\";\r\n                    test.innerHTML = item.value;\r\n                    this.$items.appendChild(test);\r\n                    this.$inputField.value = \"\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n    public onDelete(value:string, selectedItem:HTMLLIElement) : void {\r\n        this.$items.removeChild(selectedItem);\r\n        for(let i=0;i<this.$selected.children.length;i++) {\r\n            let item:HTMLOptionElement = <HTMLOptionElement>this.$selected.children[i];\r\n            if(item.value == value ) {\r\n                if(item.selected) {\r\n                    item.selected = false;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","import {Control} from '../../Control';\r\n\r\nexport class BR extends Control {\r\n    public load(json: JSON): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('br');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            this.$view.setAttribute(attr, data[attr]);\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\nexport class Button extends Control {\r\n    public load(json: JSON, owner?: Control): any {\r\n        this.createControl(this.$owner, json);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        if (typeof(data) === 'string') {\r\n            this.id = <string>data;\r\n        } else {\r\n            this.id = data['id'];\r\n        }\r\n        this.$view = document.createElement('button');\r\n        if (data instanceof Object) {\r\n            for (let attr in data) {\r\n                if (!data.hasOwnProperty(attr)) {\r\n                    continue;\r\n                }\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\nimport { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\nimport { Size } from '../index';\r\nimport ClazzProperty from './ClazzProperty';\r\nimport {SymbolLibary} from './Symbol';\r\nimport {StereoType} from './StereoType';\r\nimport {GraphListener} from '../../handlers/GraphListener';\r\n\r\nexport class Class extends Node {\r\n    public attributes: Attribute[] = [];\r\n    public methods: Method[] = [];\r\n    public modifier: string;\r\n    public stereoType: string;\r\n\r\n    protected $attrHeight = 25;\r\n    protected $attrFontSize = 12;\r\n    protected $labelView: Element;\r\n\r\n    constructor(json: JSON | string | Object | any) {\r\n        super(json);\r\n        return this;\r\n    }\r\n\r\n    public load(json?: any) {\r\n        if (!json) {\r\n            json = {};\r\n        }\r\n        let y = this.$labelHeight;\r\n        let labelObj = json.name || json.id || ('New ' + this.property);\r\n\r\n        let width: number = 150;\r\n        width = Math.max(width, Util.sizeOf(labelObj).width + 60);\r\n\r\n        if (json['attributes']) {\r\n            for (let attr of json['attributes']) {\r\n\r\n                let attrObj = new Attribute(attr);\r\n                attrObj.$owner = this;\r\n                this.attributes.push(attrObj);\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(attrObj.toString()).width);\r\n                let listener = new GraphListener(attrObj);\r\n                attrObj.$data.addListener(listener);\r\n            }\r\n        }\r\n        if (json['stereotype']) {\r\n            this.stereoType = json['stereotype'];\r\n        }\r\n        if (json['methods']) {\r\n            for (let method of json['methods']) {\r\n\r\n                let methodObj = new Method(method);\r\n                methodObj.$owner = this;\r\n                this.methods.push(methodObj);\r\n\r\n                y += this.$attrHeight;\r\n                width = Math.max(width, Util.sizeOf(methodObj.toString()).width);\r\n            }\r\n            y += this.$attrHeight;\r\n        }\r\n        this.withSize(width, y);\r\n    }\r\n\r\n    public getAttributes(): Attribute[] {\r\n        return this.attributes;\r\n    }\r\n\r\n    public getMethods(): Method[] {\r\n        return this.methods;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        let icon = SymbolLibary.draw({type: 'Class', property: 'HTML', width: '50', height: '50', transform: 'translate(-26,-21)'});\r\n        return icon;\r\n        // let group = this.createShape(\r\n//    abstract: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Abstract</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n//    interface: '<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\"><g><rect width=\"500\" height=\"400\" x=\"25\" y=\"25\" rx=\"5\" ry=\"5\" stroke-width=\"10\" stroke=\"black\" fill=\"none\"/><rect width=\"500\" height=\"125\" x=\"25\" y=\"180\" stroke-width=\"7\" stroke=\"black\" fill=\"none\"/><text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Interface</text><text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>',\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos: Point = this.getPos();\r\n        const size: Point = this.getSize();\r\n\r\n        let group = this.createShape({ tag: 'g', id: this.id, class: 'SVGClazz', transform: 'translate(0 0)' });\r\n\r\n        if (this.stereoType) {\r\n            let type = new StereoType(this.stereoType, pos.x, pos.y);\r\n            group.appendChild(type.getSVG());\r\n        }\r\n\r\n        // Full Shape\r\n        let options = null;\r\n        let style;\r\n        let clazzName;\r\n        if (this.$owner['options']) {\r\n            let options = this.$owner['options'];\r\n            if (options) {\r\n                style = options.style;\r\n            }\r\n        }\r\n        // = = = Background = = =\r\n        if (style === 'modern') {\r\n            clazzName = 'ClazzHeader';\r\n        }\r\n        clazzName = 'ClazzHeader';\r\n        const nodeShape = this.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            height: size.y,\r\n            width: size.x,\r\n            rx: 5,\r\n            ry: 5,\r\n            fill: 'none',\r\n            stroke: 'black',\r\n            'stroke-width': 1\r\n        });\r\n        if (clazzName) {\r\n            nodeShape.setAttribute('className', clazzName);\r\n            let styleHeader = Util.getStyle('ClazzHeader');\r\n            // headerHeight = styleHeader.getNumber('height');\r\n        }\r\n\r\n        // = = = LABEL = = =\r\n        let label = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y + this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': this.$labelFontSize,\r\n            fill: 'black'\r\n        });\r\n        label.textContent = this.id;\r\n        this.$labelView = label;\r\n\r\n        group.appendChild(nodeShape);\r\n        group.appendChild(label);\r\n\r\n        // = = = ATTRIBUTES = = =\r\n        if (this.attributes.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorLabelAttr = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight,\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight,\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorLabelAttr);\r\n\r\n            let groupOfAttributes = this.createShape({ tag: 'g', id: (this.id + 'Attributes') });\r\n            groupOfAttributes.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzAttribute');\r\n            group.appendChild(groupOfAttributes);\r\n\r\n            let y = pos.y + this.$labelHeight + this.$attrHeight / 2;\r\n            for (let attr of this.attributes) {\r\n\r\n                let attrSvg = attr.getSVG();\r\n                attr.$owner = this;\r\n\r\n                attrSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                attrSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfAttributes.appendChild(attrSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        // = = = METHODS = = =\r\n        let height = this.attributes.length * this.$attrHeight;\r\n        let y = pos.y + this.$labelHeight + height + this.$attrHeight / 2;\r\n        if (this.methods.length > 0) {\r\n\r\n            // line to separate label from attributes\r\n            const separatorAttrMethods = this.createShape({\r\n                tag: 'line',\r\n                x1: pos.x,                   // line doesn't overlap the full shape\r\n                y1: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                x2: pos.x + size.x,        // line doesn't overlap the full shape\r\n                y2: pos.y + this.$labelHeight + (this.$attrHeight * this.attributes.length),\r\n                'stroke-width': 1\r\n            });\r\n\r\n            group.appendChild(separatorAttrMethods);\r\n\r\n            let groupOfMethods = this.createShape({ tag: 'g', id: (this.id + 'Methods') });\r\n            groupOfMethods.setAttributeNS(null, 'class', 'SVGClazzProperty SVGClazzMethod');\r\n            group.appendChild(groupOfMethods);\r\n\r\n            y += this.$attrHeight / 2;\r\n            for (let method of this.methods) {\r\n\r\n                let methodSvg = method.getSVG();\r\n                method.$owner = this;\r\n\r\n                methodSvg.setAttributeNS(null, 'x', '' + (pos.x + 10));\r\n                methodSvg.setAttributeNS(null, 'y', '' + y);\r\n\r\n                groupOfMethods.appendChild(methodSvg);\r\n                y += this.$attrHeight;\r\n            }\r\n        }\r\n\r\n        this.$view = group;\r\n        return group;\r\n    }\r\n\r\n    public copy(): Class {\r\n        let copy: Class;\r\n        copy = <Class>super.copy();\r\n\r\n        // copy label\r\n        copy.id = this.id + 'Copy';\r\n\r\n        // copy attributes\r\n        this.attributes.forEach(attr => {\r\n            copy.attributes.push(new Attribute(attr.toString()));\r\n        });\r\n        // copy methods\r\n        this.methods.forEach(method => {\r\n            copy.methods.push(new Method(method.toString()));\r\n        });\r\n        copy.reCalcSize();\r\n\r\n        return copy;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTMOUSEDOWN, EventBus.ELEMENTMOUSEMOVE, EventBus.ELEMENTCLICK,\r\n                EventBus.ELEMENTDRAG, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES, EventBus.RELOADPROPERTIES];\r\n    }\r\n\r\n    public addProperty(value: string, type: string): any {\r\n        if (!this[type] || !value || value.length === 0) {\r\n            return;\r\n        }\r\n\r\n        let extractedValue;\r\n        if (type === 'attributes') {\r\n            extractedValue = new Attribute(value);\r\n        }\r\n        else if (type === 'methods') {\r\n            extractedValue = new Method(value);\r\n        }\r\n\r\n        for (let valueOfType of this[type]) {\r\n            if (valueOfType.toString() === extractedValue.toString()) {\r\n                alert(extractedValue.toString() + ' already exists.');\r\n                extractedValue = undefined;\r\n                return;\r\n            }\r\n        }\r\n\r\n        this[type].push(extractedValue);\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        return extractedValue;\r\n    }\r\n\r\n    public addAttribute(value: string): Attribute {\r\n        return this.addProperty(value, 'attributes');\r\n    }\r\n\r\n    public addAttributeObj(attr: Attribute): Attribute[] {\r\n        this.attributes.push(attr);\r\n        return this.getAttributes();\r\n    }\r\n\r\n    public addMethodObj(method: Method): Method[] {\r\n        this.methods.push(method);\r\n        return this.getMethods();\r\n    }\r\n\r\n    public addMethod(value: string): Method {\r\n        return this.addProperty(value, 'methods');\r\n    }\r\n\r\n    public removeAttribute(attr: Attribute): void {\r\n        let idx = this.attributes.indexOf(attr);\r\n        this.attributes.splice(idx, 1);\r\n    }\r\n\r\n    public removeMethod(method: Method): void {\r\n        let idx = this.methods.indexOf(method);\r\n        this.methods.splice(idx, 1);\r\n    }\r\n\r\n    public removeProperty(property: ClazzProperty): void {\r\n\r\n        if (property instanceof Attribute) {\r\n            this.removeAttribute(<Attribute>property);\r\n        }\r\n\r\n        if (property instanceof Method) {\r\n            this.removeMethod(<Method>property);\r\n        }\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n        let hasSizeChanged: [boolean, Size] = this.hasSizeChanged();\r\n\r\n        if (drawOnlyIfSizeChanged) {\r\n            if (!hasSizeChanged[0]) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (!this.$view) {\r\n            return;\r\n        }\r\n\r\n        // redraw only this clazz\r\n        this.$owner.$view.removeChild(this.$view);\r\n        let newSvg = this.getSVG();\r\n        this.$owner.$view.appendChild(newSvg);\r\n        this.$view = newSvg;\r\n        EventBus.register(this, newSvg);\r\n\r\n        this.redrawEdges();\r\n    }\r\n\r\n    public hasSizeChanged(): [boolean, Size] {\r\n        let oldSize = { width: this.getSize().x, height: this.getSize().y };\r\n        let newSize = this.reCalcSize();\r\n\r\n        // size doenst changed, so nothing to redraw\r\n        if (oldSize.width === newSize.width && oldSize.height === newSize.height) {\r\n            return [false, newSize];\r\n        }\r\n\r\n        return [true, newSize];\r\n    }\r\n\r\n    public updateLabel(newLabel: string): void {\r\n        if (this.$labelView) {\r\n            this.$labelView.textContent = newLabel;\r\n        }\r\n\r\n        // update label in all edges\r\n        this.$edges.forEach(edge => {\r\n            if (this.id === edge.$sNode.id) {\r\n                edge.source = newLabel;\r\n            }\r\n            else if (this.id === edge.$tNode.id) {\r\n                edge.target = newLabel;\r\n            }\r\n        });\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n\r\n        this.reDraw(true);\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.modifier = modifier;\r\n\r\n        Util.saveToLocalStorage(this.$owner);\r\n    }\r\n\r\n    public reCalcSize(): Size {\r\n        // label\r\n        let newWidth = 150;\r\n        newWidth = Math.max(newWidth, Util.sizeOf(this.id).width + 30);\r\n\r\n        // attributes\r\n        this.attributes.forEach(attrEl => {\r\n\r\n            let widthOfAttr;\r\n            if (attrEl.$view) {\r\n                widthOfAttr = attrEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfAttr = Util.sizeOf(attrEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfAttr + 15);\r\n        });\r\n\r\n        // methods\r\n        this.methods.forEach(methodEl => {\r\n            let widthOfMethod;\r\n            if (methodEl.$view) {\r\n                widthOfMethod = methodEl.$view.getBoundingClientRect().width;\r\n            }\r\n            else {\r\n                widthOfMethod = Util.sizeOf(methodEl.toString()).width;\r\n            }\r\n\r\n            newWidth = Math.max(newWidth, widthOfMethod + 15);\r\n        });\r\n\r\n        // TODO: height has to be calculated by font-size\r\n        this.getSize().x = newWidth;\r\n        this.getSize().y = this.$labelHeight + ((this.attributes.length + this.methods.length) * this.$attrHeight)\r\n            + this.$attrHeight;\r\n\r\n        let newSize = { width: newWidth, height: this.getSize().y };\r\n\r\n        return newSize;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    private getModernStyle(): Element {\r\n        let width, height, id, size, z, item, rect, g, board, styleHeader, headerHeight, x, y;\r\n        board = this.getRoot()['board'];\r\n        styleHeader = Util.getStyle('ClazzHeader');\r\n        headerHeight = styleHeader.getNumber('height');\r\n        width = 0;\r\n        height = 10 + headerHeight;\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].getType().toLowerCase() === 'objectdiagram') {\r\n            id = this.id.charAt(0).toLowerCase() + this.id.slice(1);\r\n            item = 'Object';\r\n        } else {\r\n            id = this.id;\r\n            item = 'Class';\r\n            if (this['counter']) {\r\n                id += ' (' + this['counter'] + ')';\r\n            }\r\n        }\r\n        g = Util.create({tag: 'g', model: this});\r\n        size = Util.sizeOf(id, this);\r\n        width = Math.max(width, size.width);\r\n        if (this.attributes && this.attributes.length > 0) {\r\n            height = height + this.attributes.length * 25;\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.attributes[z], this).width);\r\n            }\r\n        } else {\r\n            height += 20;\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            height = height + this.methods.length * 25;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                width = Math.max(width, Util.sizeOf(this.methods[z], this).width);\r\n            }\r\n        }\r\n        width += 20;\r\n\r\n        let pos = this.getPos();\r\n        y = pos.y;\r\n        x = pos.x;\r\n\r\n        rect = {\r\n            tag: 'rect',\r\n            'width': width,\r\n            'height': height,\r\n            'x': x,\r\n            'y': y,\r\n            'class': item + ' draggable',\r\n            'fill': 'none'\r\n        };\r\n        g.appendChild(Util.create(rect));\r\n        g.appendChild(Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            'x': x,\r\n            'y': y,\r\n            height: headerHeight,\r\n            'width': width,\r\n            'class': 'ClazzHeader'\r\n        }));\r\n\r\n        item = Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'class': 'InfoText',\r\n            'text-anchor': 'right',\r\n            'x': x + width / 2 - size.width / 2,\r\n            'y': y + (headerHeight / 2) + (size.height / 2),\r\n            'width': size.width\r\n        });\r\n\r\n        if (this.property === 'Object' || this.getRoot()['$graphModel'].type.toLowerCase() === 'objectdiagram') {\r\n            item.setAttribute('text-decoration', 'underline');\r\n        }\r\n        item.appendChild(document.createTextNode(id));\r\n\r\n        g.appendChild(item);\r\n        g.appendChild(Util.create({\r\n            tag: 'line',\r\n            x1: x,\r\n            y1: y + headerHeight,\r\n            x2: x + width,\r\n            y2: y + headerHeight,\r\n            stroke: '#000'\r\n        }));\r\n        y += headerHeight + 20;\r\n\r\n        if (this.attributes) {\r\n            for (z = 0; z < this.attributes.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': (x + 10),\r\n                    'y': y,\r\n                    value: this.attributes[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n            if (this.attributes.length > 0) {\r\n                y -= 10;\r\n            }\r\n        }\r\n        if (this.methods && this.methods.length > 0) {\r\n            g.appendChild(Util.create({tag: 'line', x1: x, y1: y, x2: x + width, y2: y, stroke: '#000'}));\r\n            y += 20;\r\n            for (z = 0; z < this.methods.length; z += 1) {\r\n                g.appendChild(Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': width,\r\n                    'x': x + 10,\r\n                    'y': y,\r\n                    value: this.methods[z]\r\n                }));\r\n                y += 20;\r\n            }\r\n        }\r\n        return g;\r\n    }\r\n}\r\n","import {Util} from '../../util';\r\nimport {DiagramElement} from '../BaseElements';\r\nimport Data from '../../Data';\r\n\r\nexport default class ClazzProperty extends DiagramElement {\r\n\r\n    // Public (+)\r\n    // Private (-)\r\n    // Protected (#)\r\n    // Package (~)\r\n\r\n    public $data = new Data();\r\n//    public modifier: string = '+';\r\n//    public name: string;\r\n//    public type: string;\r\n//    public value: string;\r\n\r\n    constructor(data: any | JSON) {\r\n        super();\r\n        this.$data.setValue('modifier', '+');\r\n        this.$data.setValue('name', null);\r\n        this.$data.setValue('type', null);\r\n        this.$data.setValue('value', null);\r\n        this.extractData(data);\r\n    }\r\n\r\n    public update(data: any | JSON): void {\r\n        this.extractData(data);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateModifier(modifier: string): void {\r\n        this.$data.setValue('modifier', modifier);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateType(type: string): void {\r\n        this.$data.setValue('type', type);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateValue(value: string): void {\r\n        this.$data.setValue('value', value);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public updateName(name: string): void {\r\n        this.$data.setValue('name', name);\r\n        this.updateTextOfView();\r\n    }\r\n\r\n    public getName(): string {\r\n        return this.$data.getValue('name');\r\n    }\r\n\r\n    public getModifier(): string {\r\n        return this.$data.getValue('modifier');\r\n    }\r\n\r\n    public getType(): string {\r\n        return this.$data.getValue('type');\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let attrText = {\r\n            tag: 'text',\r\n            'text-anchor': 'start',\r\n            'alignment-baseline': 'middle',\r\n        };\r\n\r\n        let attrSvg = Util.createShape(attrText);\r\n        attrSvg.textContent = this.toString();\r\n\r\n        this.$view = attrSvg;\r\n\r\n        return attrSvg;\r\n    }\r\n\r\n    public toString(): string {\r\n        let value = this.$data.getValue('value');\r\n        let result = this.$data.getValue('modifier') + ' ';\r\n        result += this.$data.getValue('name') + ' : ';\r\n        result += this.$data.getValue('type');\r\n        if (value && value.length > 0) {\r\n            result += ' = ' + this.$data.getValue('value');\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.$data.setValue('type', data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.$data.setValue('name', data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.$data.setValue('modifier', data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n\r\n            // e.g. name : string or name:string\r\n            let dataSplitted = data.split(':');\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                let name;\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.$data.setValue('modifier', firstChar);\r\n                    name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                }\r\n                else {\r\n                    name = modifierAndNameSplitted;\r\n                }\r\n                // delete whitespaces in name\r\n                name = name.replace(/ /g, '_');\r\n\r\n                this.$data.setValue('name', name);\r\n                let type = dataSplitted[1].trim() || 'String';\r\n\r\n                // if the type was entered with a small begin letter\r\n                if (type.toLowerCase() === 'string') {\r\n                    type = 'String';\r\n                }\r\n                // delete whitespaces in type\r\n                type = type.replace(/ /g, '_');\r\n                this.$data.setValue('type',  type);\r\n            } else {\r\n                dataSplitted = data.split('=');\r\n                if (dataSplitted && dataSplitted.length === 2) {\r\n                    // modifer (and or) name\r\n                    let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                    // first char is +, - or #\r\n                    let firstChar = modifierAndNameSplitted[0];\r\n                    let name;\r\n                    if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                        this.$data.setValue('modifier', firstChar);\r\n                        name = modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim();\r\n                    }\r\n                    else {\r\n                        name = modifierAndNameSplitted;\r\n                    }\r\n                    // delete whitespaces in name\r\n                    name = name.replace(/ /g, '_');\r\n\r\n                    this.$data.setValue('name', name);\r\n                    let value = dataSplitted[1].trim() || '\"\"';\r\n                    this.$data.setValue('value', value);\r\n                    this.$data.setValue('type', typeof value);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected updateTextOfView() {\r\n        if (this.$view) {\r\n            this.$view.textContent = this.toString();\r\n        }\r\n        if (this.$owner) {\r\n            Util.saveToLocalStorage(this.$owner.$owner);\r\n        }\r\n    }\r\n}\r\n","import {Node} from \"./Node\";\r\n/**\r\n * Created by Stefan on 29.03.2017.\r\n */\r\n\r\nexport class Dice extends Node {\r\n    private value: number;\r\n    private max: number = 6;\r\n    private $animation: SVGElement;\r\n    private $zoom: number = 0.6;\r\n    private $border: number = 0.2;\r\n\r\n    constructor(data: JSON | string | Object | any) {\r\n        super(data);\r\n        this.withSize(100, 100);\r\n    }\r\n\r\n    public setNumber(number: number) {\r\n        this.value = number;\r\n        this.refresh();\r\n    }\r\n\r\n    public refresh() {\r\n        if (this.$view) {\r\n            this.reset();\r\n            let group = this.createPointValue();\r\n            if (group) {\r\n                this.$view.appendChild(group);\r\n            }\r\n        }\r\n    }\r\n\r\n    public reset() {\r\n        if (this.$view) {\r\n            while (this.$view.children.length > 1) {\r\n                if(this.$view.children.item(this.$view.children.length - 1).tagName!== \"animateTransform\") {\r\n                    console.log(this.$view.children.item(this.$view.children.length - 1));\r\n                    this.$view.removeChild(this.$view.children.item(this.$view.children.length - 1));\r\n                }else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos = this.getPos();\r\n        let size = this.getSize();\r\n        let dice: SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x + size.x * this.$border,\r\n            y: pos.y + size.y * this.$border,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y * this.$zoom,\r\n            width: size.x * this.$zoom,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        dice.appendChild(this.createShape(attr));\r\n\r\n        let group = this.createPointValue();\r\n        if (group) {\r\n            dice.appendChild(group);\r\n        }\r\n\r\n        this.$view = dice;\r\n        return dice;\r\n    }\r\n\r\n    public animationTimeout(newValues: number[]) {\r\n        if(newValues.length>0) {\r\n            let newValue = newValues.shift();\r\n            this.setNumber(newValue);\r\n            let that=this;\r\n            setTimeout(function() {that.animationTimeout(newValues)}, 100);\r\n        }\r\n    }\r\n\r\n    public roll() {\r\n        this.startAnimation();\r\n        let values:number[]=[];\r\n        let i:number;\r\n        for(i=1;i<this.max;i++) {\r\n            values.push(i);\r\n        }\r\n        for(i=this.max;i>0;i--) {\r\n            values.push(i);\r\n        }\r\n        let that=this;\r\n        values.push( Math.floor(Math.random() * this.max)+1 );\r\n        setTimeout(function() {that.animationTimeout(values)}, 100);\r\n    }\r\n    public startAnimation() {\r\n        if(this.$animation) {\r\n            return;\r\n        }\r\n        let center = this.getPos().x+this.getSize().x /2;\r\n        const attr = {\r\n            tag: 'animateTransform',\r\n            attributeType: \"xml\",\r\n            attributeName:\"transform\",\r\n            type:\"rotate\",\r\n            dur: \"1s\",\r\n            repeatCount:\"1\",\r\n            from:\"0 \"+center+\" \"+center,\r\n            to:\"360 \"+center+\" \"+center\r\n        };\r\n        this.$animation = <SVGElement>this.createShape(attr);\r\n        this.$view.appendChild(this.$animation);\r\n    }\r\n\r\n    public stopAnimation() {\r\n        if(this.$animation) {\r\n            this.$view.removeChild(this.$animation);\r\n            this.$animation = null;\r\n        }\r\n    }\r\n\r\n    public createPointValue() :SVGElement {\r\n        if (this.value == 1) {\r\n           return this.getCircle(2, 2);\r\n        } else if (this.value == 2) {\r\n            return this.getCircle(1, 1, 3, 3);\r\n        } else if (this.value == 3) {\r\n            return this.getCircle(1, 1, 2, 2, 3, 3);\r\n        } else if (this.value == 4) {\r\n            return this.getCircle(1, 1, 1, 3, 3, 1, 3, 3);\r\n        } else if (this.value == 5) {\r\n            return this.getCircle(1, 1, 1, 3, 2, 2, 3, 1, 3, 3);\r\n        } else if (this.value == 6) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 7) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 2, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 8) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        } else if (this.value == 9) {\r\n            return this.getCircle(1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 2, 3, 3, 1, 3, 2, 3, 3);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private getCircle(...values:number[]) : SVGElement {\r\n        if (values.length % 2 > 0) {\r\n            return null;\r\n        }\r\n        let size = this.getSize();\r\n        let pos = this.getPos();\r\n        //FIXME let group:SVGElement = <SVGElement>this.createShape({tag: 'g', transform: 'translate(0 0)', height: size.y, width: size.x});\r\n        let group:SVGElement = <SVGElement>this.createShape({tag: 'g'});\r\n\r\n\r\n        for (let i: number = 0; i < values.length; i += 2) {\r\n            group.appendChild(this.createCircle(values[i], values[i + 1]));\r\n        }\r\n        return group;\r\n    }\r\n    private createCircle(x:number, y:number) : SVGElement {\r\n        let size = this.getSize();\r\n        let radius = size.x / 10*this.$zoom;\r\n        let border = size.y*this.$border;\r\n        let zoom = size.y*this.$zoom;\r\n        const attr = {\r\n            tag: 'circle',\r\n            r : radius,\r\n            cx: (size.x*this.$zoom * x) / 4 + border,\r\n            cy: (size.y*this.$zoom * y) / 4 + border,\r\n            stroke:\"black\",\r\n            \"stroke-width\":\"3\",\r\n            fill:\"red\",\r\n            style: 'fill:black;stroke:black;stroke-width:2'\r\n        };\r\n        return <SVGElement>this.createShape(attr);\r\n    }\r\n}","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\n\r\nexport class Div extends Control {\r\n    private className: string;\r\n\r\n    public load(data:JSON|any): any {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = <string>data;\r\n        } else {\r\n            id = data.id;\r\n            this.className = data.class;\r\n            this.property = data.property;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let div: HTMLElement = document.getElementById(id);\r\n\r\n        if (!this.property) {\r\n            // if(inputField){\r\n            // TODO disuss how to decide, which property we should listen on...\r\n            // this.property = id;\r\n            this.property = div.getAttribute('Property');\r\n            // }\r\n        }\r\n\r\n        if (div instanceof HTMLDivElement) {\r\n            this.$view = div;\r\n        } else {\r\n            if (!div) {\r\n                this.$view = document.createElement('div');\r\n                this.$view.setAttribute('id', this.id);\r\n                this.$view.setAttribute('property', this.property);\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists+\r\n        if (data.hasOwnProperty('property')) {\r\n            this.setProperty(data['property']);\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        this.$model = entity;\r\n        // check for new Element in Bridge\r\n        if (entity) {\r\n            if (!this.className || entity.hasProperty(this.className)) {\r\n                if (entity.id === this.property.split('.')[0]) {\r\n                    entity.addListener(this, this.className);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public updateElement(property: string, oldValue: any, newValue: any) {\r\n        this.$view.innerHTML = <string>newValue;\r\n    }\r\n}\r\n","import {Control} from \"../../Control\";\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Form extends Control {\r\n    // private applyingChange: boolean = false;\r\n    private children: Object = {};\r\n    // private property: string = \"\";\r\n\r\n    /**\r\n     * Data should look like the following json:\r\n     *\r\n     * <pre>{\r\n     *      id: \"t1\",\r\n     *      control: \"form\",\r\n     *      elements: [\r\n     *          {id: \"inputField1\", property: \"talk\"},\r\n     *          {id: \"inputField2\", property: \"room\"}\r\n     *      ]\r\n     * }</pre>\r\n     * @param data\r\n     */\r\n    public load(data: any) {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n        let form: HTMLElement = document.getElementById(id);\r\n\r\n        if (form instanceof HTMLFormElement) {\r\n            this.$view = form;\r\n            if (this.$view.hasAttribute('property')) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            if (!form) {\r\n                this.$view = document.createElement('form');\r\n                this.$view.setAttribute('id', this.id);\r\n\r\n                if (data.hasOwnProperty('property')) {\r\n                    this.property = data['property'];\r\n                }\r\n\r\n                // add all the attributes to the form element\r\n                for (let attr in data) {\r\n                    if (data.hasOwnProperty(attr) === false) {\r\n                        continue;\r\n                    }\r\n                    if (attr === 'elements') {\r\n                        continue;\r\n                    }\r\n                    this.$view.setAttribute(attr, data[attr]);\r\n                }\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n\r\n        // check if object already exists\r\n        let objId = this.property;\r\n        let hasItem = this.$owner.hasItem(objId);\r\n        if (hasItem) {\r\n            let item = this.$owner.getItem(objId);\r\n            item.addListener(this);\r\n            this.$model = item;\r\n        }\r\n\r\n        // now create all the sub input controls\r\n        for (let field of data.elements) {\r\n            // this.createField(field);\r\n            if (field.hasOwnProperty('property')) {\r\n                let property = field['property'];\r\n                property = this.property + '.' + property;\r\n                field['property'] = property;\r\n            }\r\n            if (!field.hasOwnProperty('class')) {\r\n                field['class'] = 'input';\r\n            }\r\n\r\n            // let the Bridge load the subControl\r\n            let control: Control = this.$owner.load(field, this);\r\n\r\n            // add subControl to children\r\n            this.children[control.getId()] = control;\r\n        }\r\n\r\n    }\r\n\r\n    public setProperty(id: string): void {\r\n        this.property = id;\r\n        let keys: string[] = Object.keys(this.children);\r\n        for (let k = 0; k < keys.length; k++) {\r\n            let key = keys[k];\r\n            let childControl = this.children[key];\r\n            // only set Property, if there is a Property defined before\r\n            if (childControl.property) {\r\n                childControl.setProperty(this.property + '.' + childControl.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object,  oldValue?: Object): boolean {\r\n        if (this.$owner != null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    /**\r\n     * Here we create the form elements and put all the attributes to them in order for the Control only having to load\r\n     * the data were appending here. Alternative would be loading with the bridge and afterwards setting\r\n     * the owner to the form instead of the body..\r\n     * @param field\r\n     */\r\n    /*private createField(field: Object) {\r\n     let control = 'input';\r\n     if (field.hasOwnProperty('class')) {\r\n     control = field['class'];\r\n     }\r\n     let input = document.createElement(control);\r\n     input.setAttribute('class', control);\r\n     let id: string;\r\n     if (!field.hasOwnProperty('id')) {\r\n     // TODO: not the best solution for generating unique id's for forms...\r\n     id = this.$owner.getId();\r\n     field['id'] = id;\r\n     }\r\n     if (field.hasOwnProperty('property')) {\r\n     let property = field['property'];\r\n     property = this.id + '.' + property;\r\n     input.setAttribute('property', property);\r\n     }\r\n     for (let attr in field) {\r\n     if (attr === 'property' || attr === 'class' || !field.hasOwnProperty(attr)) {\r\n     continue;\r\n     }\r\n     input.setAttribute(attr, field[attr]);\r\n     }\r\n\r\n     this.$viewElement.appendChild(input);\r\n\r\n     let newcontrol: Control = this.$owner.load(field['id']);\r\n     this.children[newcontrol.getId()] = newcontrol;\r\n     }*/\r\n}\r\n","/**\r\n * Created by Stefan on 01.03.2017.\r\n */\r\nimport {Control} from '../../Control';\r\n\r\nexport class HTML extends Control {\r\n    constructor(data: JSON|Object|any) {\r\n        super();\r\n\r\n        let id: string;\r\n        let tag: string;\r\n\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            data = {};\r\n        } else if (data) {\r\n            id = data.id;\r\n        }\r\n        if (id) {\r\n            this.id = id;\r\n            this.$view = document.getElementById(id);\r\n        }\r\n        if (!this.$view) {\r\n            if (data) {\r\n                tag = data['tag'] || 'div';\r\n            } else {\r\n                tag = 'div';\r\n            }\r\n            this.$view = document.createElement(tag);\r\n            let parent = document.getElementsByTagName('body')[0];\r\n            parent.appendChild(this.$view);\r\n        }\r\n        if (!parent) {\r\n            return;\r\n        }\r\n        this.writeAttribute(data, this.$view);\r\n    }\r\n\r\n    private writeAttribute(properties: Object, entity?: any) {\r\n        let lowKey;\r\n        if (!entity) {\r\n            lowKey = properties['tag'] || 'div';\r\n            entity = document.createElement(lowKey);\r\n        }\r\n        for (let key in properties) {\r\n            if (!properties.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            lowKey = key.toLowerCase();\r\n            if (properties[key] === null) {\r\n                entity.setAttribute(key, '');\r\n                continue;\r\n            }\r\n\r\n            if (lowKey === 'tag' || lowKey.charAt(0) === '$' || lowKey === '$graphModel' || lowKey === 'class') {\r\n                continue;\r\n            }\r\n            if (lowKey === 'children') {\r\n                if (Array.isArray(properties[key])) {\r\n                    for (let item in properties[key]) {\r\n                        if (properties[key].hasOwnProperty(item) === false) {\r\n                            continue;\r\n                        }\r\n                        let child = this.writeAttribute(item);\r\n                        if (child) {\r\n                            entity.appendChild(child);\r\n                        }\r\n                    }\r\n                } else {\r\n                    let child = this.writeAttribute(properties[key]);\r\n                    if (child) {\r\n                        entity.appendChild(child);\r\n                    }\r\n                }\r\n                continue;\r\n            }\r\n            entity[key] = properties[key];\r\n        }\r\n        return entity;\r\n    }\r\n}\r\n","import { Point } from '../BaseElements';\r\nimport { Util } from '../../util';\r\nimport { Node } from './Node';\r\nimport { EventBus } from '../../EventBus';\r\n\r\nexport class InfoText extends Node {\r\n\r\n    public cardinality: string = '';\r\n    private $heightOfOneTextItem: number;\r\n    private $cardinalitySvg: Element;\r\n    private $propertySvg: Element;\r\n    private $rectBackground: Element;\r\n\r\n    constructor(info: any) {\r\n        super(info);\r\n        if (typeof (info) === 'string') {\r\n            this.id = info;\r\n        } else {\r\n            if (info.property) {\r\n                this.property = info.property;\r\n            }\r\n            if (info.cardinality) {\r\n                this.cardinality = info.cardinality;\r\n            }\r\n        }\r\n        this.$isDraggable = true;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n    }\r\n\r\n    public updateCardinality(cardinality: string): void {\r\n        this.cardinality = cardinality;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (this.$rectBackground) {\r\n            this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n            this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n        }\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((cardinality.length === 0 && this.property.length > 0) || !this.$cardinalitySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$cardinalitySvg) {\r\n            this.$cardinalitySvg.textContent = cardinality;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.property.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    public updateProperty(property: string): void {\r\n        this.property = property;\r\n\r\n        let calcSize = this.calcSize();\r\n        this.withSize(calcSize.x, calcSize.y);\r\n\r\n        if (!this.$view) {\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if ((property.length === 0 && this.cardinality.length > 0) || !this.$propertySvg) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n\r\n            let svg = this.getSVG();\r\n            this.$owner.$view.appendChild(svg);\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.$propertySvg) {\r\n            this.$propertySvg.textContent = property;\r\n\r\n            // update background\r\n            if (this.$rectBackground) {\r\n                this.$rectBackground.setAttributeNS(null, 'width', '' + calcSize.x);\r\n                this.$rectBackground.setAttributeNS(null, 'height', '' + calcSize.y);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (this.cardinality.length === 0) {\r\n            this.$owner.$view.removeChild(this.$view);\r\n            this.resetAllSvgElements();\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        let pos: Point = this.getPos();\r\n        let group = Util.create({ tag: 'g', class: 'SVGEdgeInfo', transform: 'translate(0, 0)' });\r\n\r\n        // append rect as background for text items\r\n        this.$rectBackground = Util.createShape({\r\n            tag: 'rect',\r\n            x: pos.x,\r\n            y: pos.y - this.$heightOfOneTextItem + 3,\r\n            width: this.getSize().x,\r\n            height: this.getSize().y,\r\n            fill: '#DDD',\r\n            'stroke-width': 0,\r\n            rx: '5',\r\n            ry: '5'\r\n        });\r\n        group.appendChild(this.$rectBackground);\r\n\r\n        let y = pos.y;\r\n        if (this.property) {\r\n            // property\r\n            this.$propertySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$propertySvg.textContent = this.property;\r\n            group.appendChild(this.$propertySvg);\r\n\r\n            y += this.$heightOfOneTextItem;\r\n        }\r\n\r\n        // cardinality\r\n        if (this.cardinality) {\r\n            this.$cardinalitySvg = Util.createShape({\r\n                tag: 'text',\r\n                x: pos.x + 3,\r\n                y: y,\r\n                'text-anchor': 'left'\r\n            });\r\n            this.$cardinalitySvg.textContent = this.cardinality;\r\n            group.appendChild(this.$cardinalitySvg);\r\n        }\r\n\r\n        this.$view = group;\r\n\r\n        return group;\r\n    }\r\n\r\n    public isEmpty(): boolean {\r\n        let cardinalityAvailable = this.cardinality && this.cardinality.length > 0;\r\n        let propertyAvailable = this.property && this.property.length > 0;\r\n\r\n        return !propertyAvailable && !cardinalityAvailable;\r\n    }\r\n\r\n    public redrawFromEdge(newPos: Point): void {\r\n\r\n        if (!newPos) {\r\n            return;\r\n        }\r\n\r\n        let oldPos = this.getPos();\r\n\r\n        // get difference between new and the old position\r\n        let diffPos = new Point();\r\n        diffPos.x = newPos.x - oldPos.x;\r\n        diffPos.y = newPos.y - oldPos.y;\r\n\r\n        // get translate information\r\n        let translation = this.$view.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        let sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        // set new traslation values\r\n        let newTransX = (sx + diffPos.x);\r\n        let newTransY = (sy + diffPos.y);\r\n        this.$view.setAttributeNS(null, 'transform', 'translate(' + newTransX + ' ' + newTransY + ')');\r\n\r\n        // set new position of svg\r\n        this.getPos().x = newPos.x;\r\n        this.getPos().y = newPos.y;\r\n    }\r\n\r\n    public getText(): string {\r\n        let infoTxt: string = '';\r\n\r\n        if (this.property) {\r\n            infoTxt = this.property;\r\n        }\r\n        if (this.cardinality) {\r\n            if (infoTxt.length > 0) {\r\n                infoTxt += '\\n';\r\n            }\r\n            infoTxt += this.cardinality;\r\n        }\r\n\r\n        return infoTxt;\r\n    }\r\n\r\n    public getEvents(): string[] {\r\n        return [EventBus.ELEMENTCLICK, EventBus.ELEMENTDBLCLICK, EventBus.OPENPROPERTIES];\r\n    }\r\n\r\n    private calcSize(): Point {\r\n        let text: string = this.getText();\r\n        let items: Array<string> = text.split('\\n');\r\n\r\n        let maxSize = new Point(0, 0);\r\n        if (text.length === 0) {\r\n            return maxSize;\r\n        }\r\n\r\n        for (let i = 0; i < items.length; i += 1) {\r\n            // calculate size\r\n            let sizeOfText: ClientRect = Util.sizeOf(items[i]);\r\n            maxSize.x = Math.max(maxSize.x, sizeOfText.width);\r\n            maxSize.y += sizeOfText.height;\r\n\r\n            this.$heightOfOneTextItem = sizeOfText.height;\r\n        }\r\n\r\n        return maxSize;\r\n    }\r\n    private resetAllSvgElements() {\r\n        this.$cardinalitySvg = undefined;\r\n        this.$view = undefined;\r\n        this.$propertySvg = undefined;\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\nimport {Bridge} from '../../Bridge';\r\nimport Data from '../../Data';\r\nimport {PropertyBinder} from '../../PropertyBinder';\r\n\r\nexport class Input extends Control {\r\n    private type: string;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    public initViewDataProperties(oldData?: Data): Data {\r\n        const data = super.initViewDataProperties(oldData);\r\n        if ('checkbox' === this.type || 'radio' === this.type) {\r\n            data.addFrom('checked', oldData);\r\n        }\r\n        data.addFrom('value', oldData);\r\n        data.addFrom('type', oldData);\r\n        return data;\r\n    }\r\n\r\n    public load(data: any) {\r\n        let id: string;\r\n        let inputField: HTMLElement;\r\n        let useData: boolean;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n            useData = true;\r\n        } else {\r\n            id = data.id;\r\n            if (data.type) {\r\n                this.setType(data['type']);\r\n            } else {\r\n                this.setType('text');\r\n            }\r\n            if (data.hasOwnProperty('property')) {\r\n                this.setProperty(data['property']);\r\n            }\r\n            useData = false;\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        this.id = id;\r\n\r\n        inputField = document.getElementById(id);\r\n\r\n        if (useData) {\r\n            if (inputField) {\r\n                // TODO disuss how to decide, which property we should listen on...\r\n                // this.property = id;\r\n                if (inputField.hasAttribute('Property')) {\r\n                    this.setProperty(inputField.getAttribute('Property'));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (inputField instanceof HTMLInputElement) {\r\n            this.setView(inputField);\r\n            this.type = inputField.type;\r\n            // useData = false;\r\n        } else {\r\n            if (!inputField) {\r\n                this.setView(document.createElement('input'));\r\n                this.$viewData = this.initViewDataProperties(this.$viewData);\r\n                // append viewListener\r\n                // this.$view.addEventListener('change', this.$viewListener);\r\n                if (typeof(data) !== 'string') {\r\n                    for (let attr in data) {\r\n                        if (data.hasOwnProperty(attr) === false) {\r\n                            continue;\r\n                        }\r\n                        // this.$view[attr] = data[attr];\r\n                        this.$viewData.setValue(attr, data[attr]);\r\n                    }\r\n                } else {\r\n                    if (this.type) {\r\n                        this.$view.setAttribute('type', this.type);\r\n                    }\r\n                    if (data.hasOwnProperty('class')) {\r\n                        this.$view.setAttribute('class', data['class']);\r\n                    }\r\n                    this.$view.setAttribute('id', this.id);\r\n                    this.$view.setAttribute('property', this.property);\r\n                }\r\n\r\n                if (data.value) {\r\n                    // if theres a value at the control, we want to change the model to the new value\r\n                    if (this.$model) {\r\n                        this.$model.setValue(this.lastProperty, data.value);\r\n                    }\r\n                }\r\n                if (this.$model) {\r\n                    PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                }\r\n\r\n                this.$owner.appendChild(this);\r\n            } else {\r\n                // the id is already taken by an object, that is not an input field...\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    public addItem(source: Bridge, entity: Data) {\r\n        // check for new Element in Bridge\r\n        if (this.property && entity) {\r\n            if (entity.id === this.property.split('.')[0]) {\r\n                this.$model = entity;\r\n                PropertyBinder.bind(this.$viewData, this.$model, 'value', this.lastProperty);\r\n                // entity.addListener(this, this.lastProperty);\r\n            }\r\n        }\r\n    }\r\n\r\n    // TODO FIXME protected updateElement(property: string, value: string) {\r\n    //     if (this.$view instanceof HTMLInputElement) {\r\n    //         if (value != null) {\r\n    //             if(property == this.lastProperty) {\r\n    //                 (<HTMLInputElement>this.$view)[this.getStandardProperty()] = value;\r\n    //             } else {\r\n    //                 // this.getRoot().setValue(this, property, value, (<HTMLInputElement>this.$view)[property]);\r\n    //                 (<HTMLInputElement>this.$view)[property] = value;\r\n    //             }\r\n    //         } else {\r\n    //             delete (<HTMLInputElement>this.$view)[property];\r\n    //         }\r\n    //     }\r\n    // }\r\n\r\n    public controlChanged(ev: Event) {\r\n        if (this.$view instanceof HTMLInputElement === false) {\r\n            return;\r\n        }\r\n        let element = (<HTMLInputElement>this.$view);\r\n        if (element.checkValidity()) {\r\n            super.controlChanged(ev);\r\n        }\r\n// <<<<<<< HEAD\r\n//             let newVal = element[this.getStandardProperty()];\r\n//             if (this.isKeyOnly()) {\r\n//                 // we expect, element[this.lastProperty] to be boolean:\r\n//                 if (!newVal) {\r\n//                     newVal = null;\r\n//                 }\r\n//             } else {\r\n//             }\r\n        // let $graphModel;\r\n        // let value;\r\n        /*if (this.$graphModel) {\r\n            $graphModel = this.$graphModel;\r\n            value = this.$graphModel.getValue(this.lastProperty);\r\n        } else {\r\n            $graphModel = this;\r\n            if (this.$view) {\r\n                value = this.$view[this.lastProperty];\r\n            }\r\n        }*/\r\n        // this.$model.setValue(this.lastProperty, newVal);\r\n        // this.propertyChange(this.$graphModel,this.lastProperty, this.$graphModel.getValue(this.lastProperty), newVal);\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n// =======\r\n        // let newVal = element[this.lastProperty];\r\n        // if (this.isKeyOnly()) {\r\n        //     // we expect, element[this.lastProperty] to be boolean:\r\n        //     if (!newVal) {\r\n        //         newVal = null;\r\n        //     }\r\n        // } else {\r\n        // }\r\n        // let $graphModel;\r\n        // let value;\r\n\r\n        // $graphModel = this.getViewData();\r\n        // if (this.$graphModel) {\r\n        //     $graphModel = this.$graphModel;\r\n        //     value = this.$graphModel.getValue(this.lastProperty);\r\n        // } else {\r\n        //     $graphModel = this;\r\n        //     if (this.$view) {\r\n        //         value = this.$view[this.lastProperty];\r\n        //     }\r\n        // }\r\n        // this.getRoot().setValue($graphModel, this.lastProperty, newVal, value);\r\n//            this.saveViewInData();\r\n// >>>>>>> addOldFunctions\r\n//         } else {\r\n//             console.log('value does not match the pattern...');\r\n//         }\r\n    }\r\n\r\n    public setType(type: string): void {\r\n        let oldValue: string = this.type;\r\n        if (oldValue === type) {\r\n            return;\r\n        }\r\n        if (type === 'radio') {\r\n            this.$viewData.setValue('checked', null);\r\n        } else {\r\n            this.$viewData.removeKey('checked');\r\n        }\r\n    }\r\n}\r\n","import {Control} from '../../Control';\r\n\r\nexport class Label extends Control {\r\n    public load(data: JSON): any {\r\n        this.createControl(this.$owner, data);\r\n    }\r\n\r\n    protected createControl(parent: Control, data: JSON) {\r\n        this.$view = document.createElement('label');\r\n        for (let attr in data) {\r\n            if (!data.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr === 'textContent') {\r\n                this.$view.textContent = data['textContent'];\r\n            } else {\r\n                this.$view.setAttribute(attr, data[attr]);\r\n            }\r\n        }\r\n        parent.appendChild(this);\r\n    }\r\n}\r\n","import { Util } from '../../util';\r\nimport { Point } from '../BaseElements';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport ClazzProperty from './ClazzProperty';\r\n\r\nexport default class Method extends ClazzProperty {\r\n\r\n    constructor(data: any | JSON) {\r\n        super(data);\r\n    }\r\n\r\n    protected extractData(data: any | JSON): void {\r\n        if (!data) {\r\n            return;\r\n        }\r\n\r\n        if (data.type) {\r\n            this.updateType(data.type);\r\n        }\r\n\r\n        if (data.name) {\r\n            this.updateType(data.name);\r\n        }\r\n\r\n        if (data.modifier) {\r\n            this.updateType(data.modifier);\r\n        }\r\n\r\n        if (typeof data === 'string') {\r\n            // e.g. setName() : string or name:string\r\n            let dataSplitted = data.split(':');\r\n\r\n            if (dataSplitted && dataSplitted.length === 2) {\r\n\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = dataSplitted[0].trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }\r\n                else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType(dataSplitted[1].trim() || 'void');\r\n            }\r\n            // set default return type of void\r\n            else {\r\n                // modifer (and or) name\r\n                let modifierAndNameSplitted = data.trim();\r\n\r\n                // first char is +, - or #\r\n                let firstChar = modifierAndNameSplitted[0];\r\n                if (firstChar === '+' || firstChar === '-' || firstChar === '#') {\r\n                    this.updateModifier(firstChar);\r\n                    this.updateName(modifierAndNameSplitted.substring(1, modifierAndNameSplitted.length).trim());\r\n                }  else {\r\n                    this.updateName(modifierAndNameSplitted);\r\n                }\r\n                this.updateType('void');\r\n            }\r\n        }\r\n\r\n        if (Util.includes(this.$data.getValue('name'), '(') && !Util.includes(this.$data.getValue('name'), ')') === false) {\r\n            this.$data.setValue('name', this.$data.getValue('name') + '()');\r\n        }\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\nimport {Association} from '../edges';\r\nimport { GraphModel } from '..';\r\nimport Attribute from './Attribute';\r\nimport Method from './Method';\r\n\r\nexport class Node extends DiagramElement {\r\n    public $edges: Association[] = [];\r\n    public $minWidth: number = 150;\r\n    public $minheight: number = 25;\r\n    public $defaulEdgeType: string;\r\n\r\n    constructor(data: JSON|string|Object|any) {\r\n        super();\r\n\r\n        // default size\r\n        this.withSize(this.$minWidth, this.$minheight);\r\n\r\n        if (data) {\r\n            if (data['x'] && data['y']) {\r\n                this.withPos(data['x'], data['y']);\r\n            }\r\n            if (data['width'] || data['height']) {\r\n                this.withSize(data['width'], data['height']);\r\n            }\r\n        }\r\n    }\r\n\r\n    public getSVG(): Element {\r\n        const pos = this.getPos();\r\n        const size = this.getSize();\r\n\r\n        const attr = {\r\n            tag: 'rect',\r\n            x: pos.x - size.x / 2,\r\n            y: pos.y - size.y / 2,\r\n            rx: 4,\r\n            ry: 4,\r\n            height: size.y,\r\n            width: size.x,\r\n            style: 'fill:white;stroke:black;stroke-width:2'\r\n        };\r\n        const shape = this.createShape(attr);\r\n\r\n        const attrText = {\r\n            tag: 'text',\r\n            x: pos.x,\r\n            y: pos.y,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'middle',\r\n            'font-family': 'Verdana',\r\n            'font-size': '14',\r\n            fill: 'black'\r\n        };\r\n        let text = this.createShape(attrText);\r\n        text.textContent = this.id;\r\n\r\n        let group = this.createShape({tag: 'g', id: this.id});\r\n        group.appendChild(shape);\r\n        group.appendChild(text);\r\n\r\n        return group;\r\n    }\r\n\r\n    public copy(): Node {\r\n        let copy: Node;\r\n        // create new id\r\n        let model = <GraphModel>this.$owner || <GraphModel>this.getRoot();\r\n        if (model) {\r\n            let type = this.property || Node.name;\r\n            let newId = model.getNewId(type);\r\n            copy = <Node>model.createElement(type, newId, null);\r\n            copy.withSize(this.getSize().x, this.getSize().y);\r\n            copy.$owner = model;\r\n        } else {\r\n            copy.id = this.id + '-copy';\r\n            copy.$owner = this.getRoot();\r\n        }\r\n        return copy;\r\n    }\r\n\r\n    public redrawEdges() {\r\n        for (let edge of this.$edges) {\r\n            edge.redraw(this);\r\n        }\r\n    }\r\n\r\n    public reDraw(drawOnlyIfSizeChanged?: boolean): void {\r\n// EMPTY\r\n    }\r\n    public addAttribute(value: string): Attribute {\r\n        return null;\r\n    }\r\n    public getAttributes(): Attribute[] {\r\n        return null;\r\n    }\r\n    public addMethod(value: string): Method {\r\n        return null;\r\n    }\r\n    public updateLabel(newLabel: string): void {\r\n// EMPTY\r\n    }\r\n}\r\n","import {DiagramElement} from '../BaseElements';\r\n\r\nexport class SO extends DiagramElement {\r\n    public static create(element: Object) {\r\n        let result: SO = new SO();\r\n        for (let key in element) {\r\n            if (element.hasOwnProperty(key) === false) {\r\n                continue;\r\n            }\r\n            result.withKeyValue(key, element[key]);\r\n\r\n        }\r\n        return result;\r\n    }\r\n\r\n    public withKeyValue(key: string, value: any): SO {\r\n        if (key === 'typ') {\r\n            this.property = value;\r\n        } else if (key === 'x') {\r\n            this.withPos(value, null);\r\n        } else if (key === 'y') {\r\n            this.withPos(null, value);\r\n        } else if (key === 'width') {\r\n            this.withSize(value, null);\r\n        } else if (key === 'height') {\r\n            this.withSize(null, value);\r\n        } else {\r\n            this[key] = value;\r\n        }\r\n        return this;\r\n    }\r\n}\r\n","import {Point} from '../BaseElements';\r\nimport {Node} from './Node';\r\n\r\nexport class StereoType extends Node {\r\n\r\n    protected stereoType: string;\r\n\r\n    constructor (type: string, x: number, y: number) {\r\n        super('');\r\n        this.withPos(x, y);\r\n        this.setStereoType(type);\r\n    }\r\n\r\n    public getSVG(): Element {\r\n\r\n        let pos: Point = this.getPos();\r\n        let size: Point = this.getSize();\r\n\r\n               // = = = STEREOTYPE = = =\r\n        let stereoType = this.createShape({\r\n            tag: 'text',\r\n            x: pos.x + size.x / 2,\r\n            y: pos.y - this.$labelHeight / 2,\r\n            'text-anchor': 'middle',\r\n            'alignment-baseline': 'central',\r\n            'font-family': 'Verdana',\r\n            'font-size': 10,\r\n            'font-weight': 'bold',\r\n            fill: 'black'\r\n        });\r\n        stereoType.textContent = this.stereoType;\r\n\r\n        this.$view = stereoType;\r\n        return stereoType;\r\n    }\r\n\r\n    public setStereoType(value: string): void {\r\n        this.stereoType = '<<' + value + '>>';\r\n    }\r\n\r\n    public getStereoType(): string {\r\n        return this.stereoType;\r\n    }\r\n}\r\n","import { Node } from './Node';\r\nimport { SO } from './SO';\r\nimport { DiagramElement } from '../BaseElements';\r\nimport { Util } from '../../util';\r\n\r\nexport class Symbol extends Node {\r\n    public $heightMax: number = 0;\r\n    public $heightMin: number = 0;\r\n\r\n    constructor(typ: string) {\r\n        super(typ);\r\n    }\r\n\r\n    public draw(typ?: string): SVGElement {\r\n        return SymbolLibary.draw(this);\r\n    }\r\n}\r\n\r\n// \t\t\t\t###################################################### SymbolLibary ####################################################################################\r\n// Example Items\r\n// {tag: 'path', d: ''}\r\n// {tag: 'rect', width:46, height:34}\r\n// {tag: 'ellipse', width:23, height:4}\r\n// {tag: 'line', x1:650, y1:-286, x2:650, y2:-252}\r\n// {tag: 'circle', r:5, x:12, y:0}\r\n// {tag: 'image', height: 30, width: 50, content$src: hallo}\r\n// {tag: 'text', 'text-anchor': 'left', x: '10'}\r\nexport class SymbolLibary {\r\n\r\n    public static drawSVG(node: any): SVGSVGElement {\r\n        // const lib = new SymbolLibary();\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            const parent = SO.create(node);\r\n            parent['property'] = 'SVG';\r\n            symbol = fn(parent);\r\n            // symbol = fn.apply(lib, parent);\r\n\r\n            return SymbolLibary.createGroup(parent, symbol);\r\n        }\r\n        return symbol;\r\n    }\r\n\r\n    public static draw(node: any, parent?: Object): SVGElement {\r\n        // Node is Symbol or simple Object\r\n        let symbol, fn = this[SymbolLibary.getName(node)];\r\n        if (typeof fn === 'function') {\r\n            if (!(node instanceof DiagramElement)) {\r\n                node = SO.create(node);\r\n                if (!node.property) {\r\n                    node.property = 'SVG';\r\n                }\r\n            }\r\n            symbol = fn.apply(this, [node]);\r\n            if (!parent) {\r\n                return SymbolLibary.createGroup(node, symbol);\r\n            }\r\n            return SymbolLibary.createGroup(node, symbol);\r\n        } else if (node.property) {\r\n            symbol = new Symbol(node.property);\r\n            symbol.init(node);\r\n            let pos = node.getPos();\r\n            let size = node.getSize();\r\n            symbol.withPos(pos.x, pos.y);\r\n            symbol.withSize(size.x, size.y);\r\n            symbol['value'] = node['value'];\r\n            parent = node['$parent'];\r\n            return SymbolLibary.draw(symbol, parent);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public static upFirstChar(txt: string): string {\r\n        return txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase();\r\n    }\r\n\r\n    public static isSymbolName(typ: string): boolean {\r\n        let fn = SymbolLibary['draw' + SymbolLibary.upFirstChar(typ)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static isSymbol(node: Symbol) {\r\n        let fn = SymbolLibary[SymbolLibary.getName(node)];\r\n        return typeof fn === 'function';\r\n    }\r\n\r\n    public static getName(node: any): string {\r\n        if (node['type']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['type']);\r\n        }\r\n        if (node.property) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node.property);\r\n        }\r\n        if (node['src']) {\r\n            return 'draw' + SymbolLibary.upFirstChar(node['src']);\r\n        }\r\n        return 'drawNode';\r\n    }\r\n\r\n    /*FIXME   public static createImage(node: Symbol, $graphModel:Node) {\r\n           let n, img: HTMLElement;\r\n           // node.$graphModel = node;\r\n           if (SymbolLibary.isSymbol(node)) {\r\n               return SymbolLibary.draw(null, node);\r\n           }\r\n           n = {tag: 'img', $graphModel: node, src: node['src']};\r\n           let size = node.getSize();\r\n           if (size.isEmpty() === false) {\r\n               n['width'] = size.x;\r\n               n['height'] = size.y;\r\n           } else {\r\n               n['xmlns'] = 'http://www.w3.org/1999/xhtml';\r\n           }\r\n           img = Util.create(n);\r\n           if (size.isEmpty()) {\r\n               $graphModel.appendImage(img);\r\n               return null;\r\n           }\r\n           return img;\r\n       }*/\r\n\r\n    public static createGroup(node: DiagramElement, group: any) {\r\n        let func, y: number, z: number, box, item: Element, transform, i, offsetX = 0, offsetY = 0;\r\n        let svg: any;\r\n        if (node.property.toUpperCase() === 'HTML') {\r\n            let so = {\r\n                tag: 'svg',\r\n                style: { left: (group.x | 0) + node.getPos().x, top: (group.y | 0) + node.getPos().y, position: 'absolute' }\r\n            };\r\n            if (node['transform']) {\r\n                so['transform'] = node['transform'];\r\n            }\r\n            svg = Util.create(so);\r\n        } else {\r\n            svg = Util.create({ tag: 'g' });\r\n            transform = 'translate(' + group.getPos().x + ' ' + group.getPos().y + ')';\r\n            if (group.scale) {\r\n                transform += ' scale(' + group.scale + ')';\r\n            }\r\n            if (group.rotate) {\r\n                transform += ' rotate(' + group.rotate + ')';\r\n            }\r\n            svg.setAttribute('transform', transform);\r\n            if (group['id']) {\r\n                svg.id = group['id'];\r\n            }\r\n        }\r\n\r\n        if (node['tooltip']) {\r\n            const tooltipTitleAttr = {\r\n                tag: 'title'\r\n            };\r\n            let tooltipTitle = Util.createShape(tooltipTitleAttr);\r\n            tooltipTitle.textContent = node['tooltip'];\r\n            svg.appendChild(tooltipTitle);\r\n        }\r\n\r\n        if (node['background']) {\r\n            const attrCircle = {\r\n                tag: 'circle',\r\n                cx: 20,\r\n                cy: 20,\r\n                r: 17,\r\n                stroke: '#888',\r\n                'stroke-width': 0,\r\n                fill: '#DDD'\r\n            };\r\n            svg.appendChild(Util.create(attrCircle));\r\n        }\r\n\r\n        for (i = 0; i < group.items.length; i += 1) {\r\n            svg.appendChild(Util.create(group.items[i]));\r\n        }\r\n        let elements = node['elements'];\r\n        Util.setSize(svg, group.width + node.getSize().x, group.height + node.getSize().y);\r\n        node['$heightMin'] = node.getSize().y;\r\n        if (elements) {\r\n            for (i = 0; i < elements.length; i += 1) {\r\n                if (!elements[i] && elements[i].length < 1) {\r\n                    elements.splice(i, 1);\r\n                    i -= 1;\r\n                }\r\n            }\r\n            box = Util.create({ tag: 'g' });\r\n            // Calculate new Height\r\n            let c: number;\r\n            z = 0;\r\n            for (c = 0; c < elements.length; c += 1) {\r\n                if (typeof elements[c] === 'string') {\r\n                    z += 1;\r\n                } else {\r\n                    z += elements[c].length;\r\n                }\r\n            }\r\n            z = z * 25 + 6;\r\n            box.appendChild(Util.create({\r\n                tag: 'rect',\r\n                rx: 0,\r\n                x: offsetX,\r\n                y: (offsetY + 28),\r\n                width: 70,\r\n                height: z,\r\n                stroke: '#000',\r\n                fill: '#fff',\r\n                opacity: '0.7'\r\n            }));\r\n            node['$heightMax'] = z + node['$heightMin'];\r\n\r\n            svg['elements'] = elements;\r\n            if (node['type'] === 'DropDown') {\r\n                svg['activ'] = Util.create({\r\n                    tag: 'text',\r\n                    $font: true,\r\n                    'text-anchor': 'left',\r\n                    'width': 60,\r\n                    'x': (10 + offsetX),\r\n                    'y': 20,\r\n                    value: node['activText']\r\n                });\r\n                svg.appendChild(svg.activ);\r\n            }\r\n\r\n            y = offsetY + 46;\r\n            // 46 -28 = 18\r\n\r\n            func = function (event: Event) {\r\n                if (svg.activ) {\r\n                    svg.activ.textContent = (<any>event.currentTarget).value;\r\n                }\r\n            };\r\n            let txt: string;\r\n            let textClass = 'SVGTEXT';\r\n            for (z = 0; z < elements.length; z += 1) {\r\n                if (typeof elements[z] === 'string') {\r\n                    txt = elements[z];\r\n                } else {\r\n                    item = this.addText(y, offsetX, box, elements[z][0], 'SVGTEXT');\r\n                    y += 26;\r\n                    for (c = 1; c < elements[z].length; c += 1) {\r\n                        item = this.addText(y, offsetX, box, '* ' + elements[z][c], 'SVGTEXTITEM');\r\n\r\n                        item['value'] = elements[z];\r\n                        if (node['action']) {\r\n                            item['onclick'] = node['action'];\r\n                        } else {\r\n                            item['onclick'] = func;\r\n                        }\r\n                        y += 26;\r\n                    }\r\n                    txt = elements[z];\r\n                    let subBox = Util.create({\r\n                        tag: 'rect',\r\n                        rx: 0,\r\n                        x: offsetX,\r\n                        y: (offsetY + 28),\r\n                        width: 60,\r\n                        height: z,\r\n                        stroke: '#000',\r\n                        fill: '#fff',\r\n                        opacity: '0.7'\r\n                    });\r\n                    continue;\r\n                }\r\n                // let txt = elements[z];\r\n                item = this.addText(y, offsetX, box, txt, textClass);\r\n\r\n                item['value'] = elements[z];\r\n                if (node['action']) {\r\n                    item['onclick'] = node['action'];\r\n                } else {\r\n                    item['onclick'] = func;\r\n                }\r\n                y += 26;\r\n            }\r\n            svg.choicebox = box;\r\n        }\r\n        svg.tool = node;\r\n        svg.onclick = function () {\r\n            if (svg.status === 'close') {\r\n                svg.open();\r\n            } else {\r\n                svg.close();\r\n            }\r\n        };\r\n        svg.close = function () {\r\n            if (svg.status === 'open' && svg.choicebox) {\r\n                this.removeChild(svg.choicebox);\r\n            }\r\n            svg.status = 'close';\r\n            svg.tool.$size.height = svg.tool.heightMin;\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x, g.tool.height + g.tool.y);\r\n            Util.setSize(svg, svg.tool.$size.x, svg.tool.$size.y);\r\n        };\r\n        svg.open = function () {\r\n            if (this.tagName === 'svg') {\r\n                return;\r\n            }\r\n            if (svg.status === 'close' && svg.choicebox) {\r\n                this.appendChild(svg.choicebox);\r\n            }\r\n            svg.status = 'open';\r\n            svg.tool.$size.height = svg.tool.heightMax;\r\n            Util.setSize(svg, svg.tool.width, svg.tool.height);\r\n            // typ.Util.setSize(g, g.tool.width + g.tool.x + 10, g.tool.height + g.tool.y + 10);\r\n        };\r\n        svg.close();\r\n        return svg;\r\n    }\r\n\r\n    public static addChild(parent: SVGElement, json: JSON | Element): void {\r\n        let item: Element;\r\n        if ((<any>json).offsetLeft) {\r\n            item = <Element>json;\r\n        } else {\r\n            item = Util.create(json);\r\n        }\r\n        item.setAttribute('class', 'draggable');\r\n        parent.appendChild(item);\r\n    }\r\n\r\n    public static all(node: any): void {\r\n        SymbolLibary.drawSmiley(node);\r\n        SymbolLibary.drawDatabase(node);\r\n        SymbolLibary.drawLetter(node);\r\n        SymbolLibary.drawMobilephone(node);\r\n        SymbolLibary.drawWall(node);\r\n        SymbolLibary.drawActor(node);\r\n        SymbolLibary.drawLamp(node);\r\n        SymbolLibary.drawArrow(node);\r\n        SymbolLibary.drawButton(node);\r\n        SymbolLibary.drawDropdown(node);\r\n        SymbolLibary.drawClassicon(node);\r\n        SymbolLibary.drawClassWithEdgeicon(node);\r\n    }\r\n\r\n    public static drawHamburger(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'circle', r: 10, fill: '#ccc', cx: 12, cy: 12, 'stroke-width': 1, stroke: 'black'},\r\n                { tag: 'path', d: 'M 8,7 H 16 M 8,12 H 16 M 8,17 H 16', stroke: 'black', fill: 'none' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawSmiley(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x,\r\n            y: node.getPos().y,\r\n            width: 50,\r\n            height: 52,\r\n            items: [\r\n                { tag: 'path', d: 'm49.01774,25.64542a24.5001,24.5 0 1 1 -49.0001,0a24.5001,24.5 0 1 1 49.0001,0z', stroke: 'black', fill: 'none' }, { tag: 'path', d: 'm8,31.5c16,20 32,0.3 32,0.3' },\r\n                { tag: 'path', d: 'm19.15,20.32a1.74,2.52 0 1 1 -3.49,0a1.74,2.52 0 1 1 3.49,0z' },\r\n                { tag: 'path', d: 'm33,20.32a1.74,2.52 0 1 1 -3.48,0a1.74,2.52 0 1 1 3.48,0z' },\r\n                { tag: 'path', d: 'm5.57,31.65c3.39,0.91 4.03,-2.20 4.03,-2.20' },\r\n                { tag: 'path', d: 'm43,32c-3,0.91 -4,-2.20 -4.04,-2.20' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDatabase(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 40,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,-6.26 25.03,-6.26 25.03,0l0,25.82c0,6.26 -25.03,6.26 -25.03,0l0,-25.82z',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,6.26c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0m-25.03,2.35c0,4.69 25.03,4.69 25.03,0',\r\n                    stroke: 'black',\r\n                    fill: 'none'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLetter(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 17,\r\n            items: [\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1,1l22,0l0,14l-22,0l0,-14z' },\r\n                { tag: 'path', stroke: 'black', fill: 'none', d: 'm1.06,1.14l10.94,6.81l10.91,-6.91' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMobilephone(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 4.2 0.5 15.61 0c 2 0 3.7 1.65 3.7 3.7l 0 41.6c 0 2-1.65 3.7-3.7 3.7l-15.6 0c-2 0-3.7-1.6-3.7-3.7l 0-41.6c 0-2 1.6-3.7 3.7-3.7z',\r\n                    fill: 'none',\r\n                    stroke: 'black'\r\n                },\r\n                { tag: 'path', d: 'm 12.5 2.73a 0.5 0.5 0 1 1-1 0 0.5 0.5 0 1 1 1 0z' },\r\n                { tag: 'path', d: 'm 14 46a 2 2 0 1 1-4 0 2 2 0 1 1 4 0z' },\r\n                { tag: 'path', d: 'm 8 5 7 0' },\r\n                { tag: 'path', d: 'm 1.63 7.54 20.73 0 0 34-20.73 0z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawWall(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'path', d: 'm26,45.44l-5,3.56l-21,-9l0,-36.41l5,-3.56l20.96,9l-0,36.4z' },\r\n                {\r\n                    tag: 'path',\r\n                    stroke: 'white',\r\n                    d: 'm2.21,11l18.34,7.91m-14.46,-12.57l0,6.3m8.2,21.74l0,6.35m-8.6,-10l0,6.351m4.1,-10.67l0,6.3m4.8,-10.2l0,6.3m-8.87,-10.23l0,6.35m4.78,-10.22l0,6.35m-8,14.5l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m-18.34,-13.91l18.34,7.91m0,-13l0,34m-18.23,-41.84l18.3,8m0,0.11l5,-3.57'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawActor(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                { tag: 'line', stroke: '#000', x1: '12', y1: '10', x2: '12', y2: '30' },\r\n                { tag: 'circle', stroke: '#000', cy: '5', cx: '12', r: '5' },\r\n                { tag: 'line', stroke: '#000', y2: '18', x2: '25', y1: '18', x1: '0' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '5', y1: '30', x1: '12' },\r\n                { tag: 'line', stroke: '#000', y2: '39', x2: '20', y1: '30', x1: '12' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawLamp(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 25,\r\n            height: 50,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 22.47 10.58c-6.57 0-11.89 5.17-11.89 11.54 0 2.35 0.74 4.54 2 6.36 2 4 4.36 5.63 4.42 10.4l 11.15 0c 0.12-4.9 2.5-6.8 4.43-10.4 1.39-1.5 1.8-4.5 1.8-6.4 0-6.4-5.3-11.5-11.9-11.5z',\r\n                    fill: 'white',\r\n                    stroke: 'black'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 40 8 0c 0.58 0 1 0.5 1 1 0 0.6-0.5 1-1 1l-8 0c-0.6 0-1-0.47-1-1 0-0.58 0.47-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 42.7 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 18.4 45.3 8 0c 0.58 0 1 0.47 1 1 0 0.58-0.47 1-1 1l-8 0c-0.58 0-1-0.47-1-1 0-0.58 0.46-1 1-1z'\r\n                },\r\n                { tag: 'path', d: 'm 19.5 48c 0.37 0.8 1 1.3 1.9 1.7 0.6 0.3 1.5 0.3 2 0 0.8-0.3 1.4-0.8 1.9-1.8z' },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 6 37.5 4.2-4c 0.3-0.3 0.8-0.3 1 0 0.3 0.3 0.3 0.8 0 1.1l-4.2 4c-0.3 0.3-0.8 0.3-1.1 0-0.3-0.3-0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 39 37.56-4.15-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 38 23 5.8 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.8 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 1.3 23 6 0c 0.4 0 0.8-0.3 0.8-0.8 0-0.4-0.3-0.8-0.8-0.8l-5.9 0c-0.4 0-0.8 0.3-0.8 0.8 0 0.4 0.3 0.8 0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 34.75 11.2 4-4.1c 0.3-0.3 0.3-0.8 0-1-0.3-0.3-0.8-0.3-1 0l-4 4.1c-0.3 0.3-0.3 0.8 0 1 0.3 0.3 0.8 0.3 1 0z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 11.23 10-4-4c-0.3-0.3-0.8-0.3-1 0-0.3 0.3-0.3 0.8 0 1l 4.2 4c 0.3 0.3 0.8 0.3 1 0 0.3-0.3 0.3-0.8 0-1z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 21.64 1.3 0 5.8c 0 0.4 0.3 0.8 0.8 0.8 0.4 0 0.8-0.3 0.8-0.8l 0-5.8c 0-0.4-0.3-0.8-0.8-0.8-0.4 0-0.8 0.3-0.8 0.8z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm 26.1 24.3c-0.5 0-1 0.2-1.3 0.4-1.1 0.6-2 3-2.27 3.5-0.26-0.69-1.14-2.9-2.2-3.5-0.7-0.4-2-0.7-2.5 0-0.6 0.8 0.2 2.2 0.9 2.9 1 0.9 3.9 0.9 3.9 0.9 0 0 0 0 0 0 0.54 0 2.8 0 3.7-0.9 0.7-0.7 1.5-2 0.9-2.9-0.2-0.3-0.7-0.4-1.2-0.4z'\r\n                },\r\n                { tag: 'path', d: 'm 22.5 28.57 0 10.7' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawStop(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 30,\r\n            height: 30,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: '#FFF',\r\n                    'stroke-width': '2',\r\n                    stroke: '#B00',\r\n                    d: 'm 6,6 a 14,14 0 1 0 0.06,-0.06 z m 0,0 20,21'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMin(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    d: 'm 0,0 19,0 0,19 -19,0 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 13,-0.04'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawArrow(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 10,\r\n            height: 9,\r\n            rotate: node['rotate'],\r\n            items: [\r\n                { tag: 'path', fill: '#000', stroke: '#000', d: 'M 0,0 10,4 0,9 z' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawMax(node: DiagramElement): DiagramElement {\r\n        return SO.create({\r\n            x: node.getPos().x || 0,\r\n            y: node.getPos().y || 0,\r\n            width: 20,\r\n            height: 20,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'white',\r\n                    stroke: '#000',\r\n                    'stroke-width': 0.2,\r\n                    'stroke-linejoin': 'round',\r\n                    'stroke-dashoffset': 2,\r\n                    'stroke-dasharray': '4.8,4.8',\r\n                    d: 'm 0,0 4.91187,0 5.44643,0 9.11886,0 0,19.47716 -19.47716,0 0,-15.88809 z'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    fill: 'none',\r\n                    stroke: '#000',\r\n                    'stroke-width': '1px',\r\n                    'stroke-linejoin': 'miter',\r\n                    d: 'm 4,10 6,0.006 0.02,5 0.01,-11 -0.03,6.02 c 2,-0.01 4,-0.002 6,0.01'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawButton(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight, btnValue;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        btnValue = node['value'] || '';\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: 60,\r\n            height: 28,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 8,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    filter: 'url(#drop-shadow)',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                { tag: 'text', $font: true, x: 10, y: 18, fill: 'black', value: btnValue, 'class': 'hand' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawDropdown(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 0,\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: btnWidth - 20,\r\n                    height: btnHeight,\r\n                    stroke: '#000',\r\n                    fill: 'none'\r\n                },\r\n                {\r\n                    tag: 'rect',\r\n                    rx: 2,\r\n                    x: btnWidth - 20,\r\n                    y: 0,\r\n                    width: 20,\r\n                    height: 28,\r\n                    stroke: '#000',\r\n                    'class': 'SVGBtn'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    style: 'fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1',\r\n                    d: 'm ' + (btnWidth - 15) + ',13 10,0 L ' + (btnWidth - 10) + ',20 z'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassicon(node: DiagramElement): DiagramElement {\r\n        let btnX, btnY, btnWidth, btnHeight;\r\n\r\n        btnX = node.getPos().x || 0;\r\n        btnY = node.getPos().y || 0;\r\n        btnWidth = node.getSize().x || 60;\r\n        btnHeight = node.getSize().y || 28;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm0,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.19999l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'm25.68807,0l10.78832,0l0,4.49982l-10.78832,0.19999l0,9.19963l10.78832,0l0,-9.49962l-10.78832,0.2l0,-4.59982z',\r\n                    style: 'fill:none;stroke:#000000;'\r\n                },\r\n                { tag: 'line', x1: 11, y1: 7, x2: 25, y2: 7, stroke: '#000' }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClassWithEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M2,10 20,10 20,35 2,35 Z M2,17 20,17 M20,10 28,5 28,9 M 28.5,4.7 24,4',\r\n                    style: 'fill:none;stroke:#000000;transform:scale(0.8);'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawClass(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: '100%',\r\n            height: '100%',\r\n            items: [\r\n                { tag: 'rect', width: 50, height: 40, x: 0, y: 0, 'stroke-width': 2, stroke: 'black', fill: 'none'},\r\n                { tag: 'rect', width: 50, height: 12, x: 0, y: 18, 'stroke-width': 1, stroke: 'black', fill: 'none'},\r\n                { tag: 'text', x: 27, y: 14, 'text-anchor': 'middle', 'font-size': 11, value: 'Class'},\r\n                { tag: 'text', x: 5, y: 24, 'font-size': 5, value: '+ field: type'},\r\n                { tag: 'text', x: 5, y: 36, 'font-size': 5, value: '+ method(type)'}\r\n            ]\r\n        });\r\n    }\r\n/*\r\n<svg width=\"100%\" height=\"100%\" viewbox=\"0 0 550 450\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n    <g>\r\n    <text x=\"275\" y=\"140\" text-anchor=\"middle\" font-size=\"111\">Class</text>\r\n        <text x=\"50\" y=\"240\" font-size=\"50\">+ field: type</text><text x=\"50\" y=\"360\" font-size=\"50\">+ method(type)</text></g></svg>\r\n*/\r\n\r\n    public static drawEdgeicon(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M10,30 30,10 M19,10 30,10 30,21',\r\n                    style: 'fill:none;stroke:#555;stroke-width:2;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawCopynode(node: DiagramElement): DiagramElement {\r\n\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M5 5 L15 5 L15 20 L5 20 Z M5 10 L15 10',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                },\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M8 2 L18 2 L18 17 L8 17 Z M8 7 L18 7'\r\n                        + 'M11 4.5 L15 4.5 '\r\n                        + 'M10 10 L16 10 '\r\n                        + 'M10 13 L16 13 ',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;',\r\n                    transform: 'scale(1.3) translate(4 4)'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawBasket(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M12 12 L18 12 L18 11 L22 11 L22 12 L28 12 L28 14 L27 14 L27 29 L13 29 L13 14 L12 14 Z M13 14 L27 14 M20 17 L20 26 M17 16 L17 27 M23 16 L23 27',\r\n                    style: 'fill:white;stroke:#000;stroke-width: 1;'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    public static drawPencil(node: any): DiagramElement {\r\n        let btnX = 0, btnY = 0, btnWidth = 0, btnHeight = 0;\r\n        return SO.create({\r\n            x: btnX,\r\n            y: btnY,\r\n            id: node['id'],\r\n            background: node['brackground'] || false,\r\n            width: btnWidth,\r\n            height: btnHeight,\r\n            items: [\r\n                {\r\n                    tag: 'path',\r\n                    d: 'M6 20 L12 23 L33 23 L33 17 L12 17 Z M30 17 L30 23 M12 17 L12 23 M15 19 L28 19 M15 21 L28 21',\r\n                    stroke: '#000',\r\n                    'stroke-width': 1,\r\n                    fill: 'white'\r\n                }\r\n            ]\r\n        });\r\n    }\r\n\r\n    private static addText(y: number, offsetX: number, box: Element, text: string, textClass: string): Element {\r\n        let item: Element;\r\n        box.appendChild(Util.create({\r\n            tag: 'text',\r\n            $font: true,\r\n            'text-anchor': 'left',\r\n            width: 70,\r\n            x: 10,\r\n            y: y,\r\n            class: textClass,\r\n            value: text,\r\n            eventValue: text\r\n        }));\r\n        if (textClass === 'SVGTEXT') {\r\n            textClass = 'SVGChoiceText';\r\n        } else {\r\n            textClass = 'SVGChoice';\r\n        }\r\n\r\n        item = Util.create({\r\n            tag: 'rect',\r\n            rx: 0,\r\n            x: offsetX,\r\n            y: y - 18,\r\n            width: 70,\r\n            height: 24,\r\n            stroke: 'none',\r\n            class: textClass,\r\n        });\r\n        item['eventValue'] = text;\r\n        box.appendChild(item);\r\n        return item;\r\n    }\r\n\r\n    public getToolBarIcon(): Element {\r\n        return null;\r\n    }\r\n\r\n}\r\n","import {Control} from '../../Control';\r\nimport BridgeElement from '../../BridgeElement';\r\nimport Data from '../../Data';\r\nimport {Util} from '../../util';\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\nexport class Table extends Control {\r\n    protected items: BridgeElement[] = [];\r\n    private columns: Column[] = [];\r\n    private cells: Object = {};\r\n    private $bodysection: HTMLTableSectionElement;\r\n    private $headersection: HTMLTableSectionElement;\r\n    private showedItems: Array<BridgeElement> = [];\r\n    // BridgeElements:\r\n    private itemsIds: Object = {};\r\n    private countElement: HTMLElement;\r\n    private countColumn: HTMLElement;\r\n    private countColumnPos: number;\r\n    private resultColumn: string;\r\n    private lastSearchText: string;\r\n    private searchColumns: Array<string> = [];\r\n    private searchText: Array<string> = [];\r\n    private sortColumn: Column;\r\n    private direction: number;\r\n    private moveElement: Column = null;\r\n    private isDrag: boolean = false;\r\n    private moveTimeStamp: number;\r\n    private moveX: number;\r\n    private movePos: number;\r\n    private dragColumn: Column;\r\n    private dragPos: number;\r\n    private tableOption: HTMLTableHeaderCellElement;\r\n\r\n    get lastProperty(): string {\r\n        return this.property.split('.')[0];\r\n    }\r\n\r\n    private static indexOfChild(item: BridgeElement) {\r\n        let i: number = 0;\r\n        let child: Node = item.gui;\r\n        while ((child = child.previousSibling) !== null) {\r\n            i++;\r\n        }\r\n        return i;\r\n    }\r\n\r\n    public load(data: any): void {\r\n        let id: string;\r\n        // init form HTML\r\n        if (typeof(data) === 'string') {\r\n            id = data;\r\n        } else {\r\n            id = data.id;\r\n            if (data.property) {\r\n                this.property = data.property;\r\n            }\r\n\r\n            if (data.searchColumns) {\r\n                let search: Array<string> = [];\r\n                if (typeof(data.searchColumns) === 'string') {\r\n                    search = data.searchColumns.split(' ');\r\n                } else {\r\n                    search = data.searchColumns;\r\n                }\r\n                for (let z: number = 0; z < search.length; z++) {\r\n                    let item = search[z].trim();\r\n                    if (item.length > 0) {\r\n                        if (this.searchColumns.indexOf(item) < 0) {\r\n                            this.searchColumns.push(item);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n        }\r\n        if (!id) {\r\n            return;\r\n        }\r\n        if (this.$view) {\r\n            // Must be an Update\r\n            if (data['columns']) {\r\n                // It is a json must add all things and generate HTML\r\n                for (let i in data['columns']) {\r\n                    if (data['columns'].hasOwnProperty(i) === false) {\r\n                        continue;\r\n                    }\r\n                    let col = this.parseData(data['columns'][i]);\r\n                    this.addHeaderInfo(col);\r\n                    this.columns.push(col);\r\n                    this.tableOption.parentElement.insertBefore(col.$element, this.tableOption);\r\n                }\r\n                for (let i in this.showedItems) {\r\n                    let item: BridgeElement = this.showedItems[i];\r\n                    let cell;\r\n                    // Now Add some Children\r\n                    while (item.gui.children.length < this.columns.length) {\r\n                        cell = document.createElement('td');\r\n                        item.gui.appendChild(cell);\r\n                    }\r\n                    // Now Remove Some Children\r\n                    while (item.gui.children.length > this.columns.length) {\r\n                        item.gui.removeChild(item.gui.children[item.gui.children.length - 1]);\r\n                    }\r\n                    for (let c: number = 0; c < this.columns.length; c++) {\r\n                        let name = this.columns[c].attribute;\r\n                        // let count = this.columns.length;\r\n                        cell = item.gui.children[c];\r\n                        cell.innerHTML = item.model.getValue(name);\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n\r\n        this.$view = document.getElementById(id);\r\n        let headerrow: HTMLTableRowElement;\r\n        if (this.$view) {\r\n            if (!this.property) {\r\n                this.property = this.$view.getAttribute('property');\r\n            }\r\n        } else {\r\n            this.$view = document.createElement('table');\r\n            this.$owner.appendChild(this);\r\n        }\r\n        if (!this.$bodysection) {\r\n            // add tbody element if missing\r\n            this.$bodysection = document.createElement('tbody');\r\n            this.$view.appendChild(this.$bodysection);\r\n        }\r\n        if (data['classname']) {\r\n            this.$view.className = data['classname'];\r\n        } else {\r\n            this.$view.className = 'mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp';\r\n        }\r\n\r\n        this.id = id;\r\n        this.$view.id = id;\r\n        this.$view.setAttribute('type', this.constructor['name'].toLowerCase());\r\n        let counter = 0;\r\n        for (let c = 0; c < this.$view.children.length; c++) {\r\n            let row: HTMLTableRowElement = <HTMLTableRowElement>this.$view.children[c];\r\n            if (row instanceof HTMLTableSectionElement) {\r\n                if (row.tagName === 'THEAD') {\r\n                    headerrow = row;\r\n                    // Its a thead\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingHeader(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                } else {\r\n                    // Its a tbody\r\n                    let children = row.children;\r\n                    for (let i = 0; i < children.length; i++) {\r\n                        this.parsingData(<HTMLTableRowElement>row.children[i]);\r\n                    }\r\n                }\r\n            } else {\r\n                // fallback, if there are no thead and tbody...\r\n                if (counter === 0) {\r\n                    headerrow = row;\r\n                    this.parsingHeader(row);\r\n                } else {\r\n                    this.parsingData(row);\r\n                }\r\n            }\r\n            counter++;\r\n        }\r\n        if (!headerrow || !this.$headersection) {\r\n            if (!this.$headersection) {\r\n                // find eventually existing thead\r\n                let header = this.$view.getElementsByTagName('thead');\r\n                if (header.length === 0) {\r\n                    this.$headersection = document.createElement('thead');\r\n                    this.$view.appendChild(this.$headersection);\r\n                } else {\r\n                    // take first thead element\r\n                    this.$headersection = <HTMLTableSectionElement>header.item(0);\r\n                }\r\n            }\r\n            if (!headerrow) {\r\n                headerrow = document.createElement('tr');\r\n                this.$headersection.appendChild(headerrow);\r\n            }\r\n        }\r\n\r\n        if (data['columns']) {\r\n            // It is a json must add all things and generate HTML\r\n            for (let i in data['columns']) {\r\n                if (data['columns'].hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                let col = this.parseData(data['columns'][i]);\r\n                this.addHeaderInfo(col);\r\n                this.columns.push(col);\r\n                headerrow.appendChild(col.$element);\r\n            }\r\n            this.tableOption = document.createElement('th');\r\n            this.tableOption.classList.add('tableOption');\r\n            headerrow.appendChild(this.tableOption);\r\n            let context: HTMLElement = this.addOptionItem(null, this.tableOption, true);\r\n            let contentChild: HTMLElement = this.addOptionItem('show', context, true);\r\n            // let simpleLink: HTMLElement = this.addOptionItem('show', contentChild, false);\r\n            this.addOptionItem('show', contentChild, false);\r\n        }\r\n        this.registerEvents(['mousemove', 'mousedown', 'mouseup', 'resize', 'dragstart', 'dragover', 'drop', 'dragend']);\r\n\r\n        // Check for SearchBar\r\n        // if(data[\"searchproperty\"]){\r\n        // Create Full Row\r\n        let searchBar = document.createElement('tr');\r\n        let cell = document.createElement('td');\r\n        cell.setAttribute('colspan', '' + (this.columns.length));\r\n        searchBar.appendChild(cell);\r\n\r\n        let search = document.createElement('input');\r\n        search.className = 'search';\r\n        let that = this;\r\n        search.addEventListener('keyup', function (evt) {\r\n            that.search(evt.target['value']);\r\n        });\r\n\r\n        cell.appendChild(search);\r\n        if (this.resultColumn) {\r\n            if (this.resultColumn.indexOf('#') !== 0) {\r\n                this.countElement = document.createElement('div');\r\n                searchBar.appendChild(this.countElement);\r\n            } else {\r\n                for (let z: number = 0; z < this.$headersection.children.length; z++) {\r\n                    if (this.$headersection.children[z].innerHTML === this.resultColumn) {\r\n                        this.countColumn = <HTMLElement> this.$headersection.children[z];\r\n                        this.countColumnPos = z;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        let first = this.$headersection.children.item(0);\r\n        this.$headersection.insertBefore(searchBar, first);\r\n\r\n        this.updateElement(this.property, null);\r\n\r\n        // now update those elements, that were not loaded currently\r\n    }\r\n\r\n    public tableEvent(type: string, e: Event) {\r\n        let button: number = 0;\r\n        let eventX: number = 0;\r\n        if (e instanceof MouseEvent) {\r\n            button = e.buttons;\r\n            eventX = e.pageX;\r\n        }\r\n        if (type === 'mouseup') {\r\n            this.moveElement = null;\r\n        } else if (type === 'mousedown' || type === 'resize') {\r\n            // End to Resize\r\n            this.moveElement = null;\r\n            if (button === 1) {\r\n                let c: number;\r\n                for (c = 0; c < this.columns.length; c++) {\r\n                    if (this.columns[c].$resize === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = false;\r\n                        break;\r\n                    } else if (this.columns[c].$element === e.target) {\r\n                        this.moveElement = this.columns[c];\r\n                        this.movePos = c;\r\n                        this.isDrag = true;\r\n                    }\r\n                }\r\n                this.moveTimeStamp = e.timeStamp;\r\n                this.moveX = eventX;\r\n            } else {\r\n                this.moveTimeStamp = 0;\r\n            }\r\n        } else if (type === 'mousemove') {\r\n            if (button === 1 && this.moveElement) {\r\n                if (this.moveTimeStamp && e.timeStamp - this.moveTimeStamp < 2000) {\r\n                    if (this.isDrag) {\r\n                        // FIXME\r\n                    } else {\r\n                        let x = eventX - this.moveX;\r\n                        let width = this.moveElement.$element.offsetWidth;\r\n                        this.moveElement.$element.width = '' + (width + x);\r\n                        e.stopPropagation();\r\n                    }\r\n                }\r\n                this.moveX = eventX;\r\n                this.moveTimeStamp = e.timeStamp;\r\n            }\r\n        } else if (this.isDrag) {\r\n            this.columnDragEvent(type, <DragEvent> e);\r\n        }\r\n    }\r\n\r\n    public parsingHeader(row: HTMLTableRowElement) {\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let column: HTMLTableHeaderCellElement = <HTMLTableHeaderCellElement>row.children[i];\r\n            let id = column.innerHTML.trim();\r\n            let col: Column = null;\r\n            for (let c in this.columns) {\r\n                if (this.columns.hasOwnProperty(i) === false) {\r\n                    continue;\r\n                }\r\n                if (this.columns[c].label === id) {\r\n                    col = this.columns[c];\r\n                    col.$element = column;\r\n                    break;\r\n                }\r\n            }\r\n            if (col === null) {\r\n                col = new Column();\r\n                col.label = id;\r\n                col.attribute = column.getAttribute('attribute');\r\n                col.$element = column;\r\n                this.columns.push(col);\r\n            }\r\n            this.addHeaderInfo(col);\r\n        }\r\n    }\r\n\r\n    public parsingData(row: HTMLTableRowElement) {\r\n        let id = row.getAttribute('id');\r\n        let item: Data = this.$owner.getItem(id);\r\n        for (let i in row.children) {\r\n            if (row.children.hasOwnProperty(i) === false) {\r\n                continue;\r\n            }\r\n            let cell: HTMLTableCellElement = <HTMLTableCellElement>row.children[i];\r\n            let colAttribute = this.columns[i].attribute;\r\n            if (colAttribute.indexOf('\\.') < 0) {\r\n                item[colAttribute] = cell.innerHTML.trim();\r\n            }\r\n        }\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: Object, newValue: Object) {\r\n        if (entity) {\r\n            // Check for Show\r\n            if (this.property && !entity.hasProperty(property)) {\r\n                return;\r\n            }\r\n        }\r\n        if (entity.id === undefined) {\r\n            return;\r\n        }\r\n        let item: BridgeElement = <BridgeElement>this.itemsIds[entity.id];\r\n        let row: HTMLTableRowElement;\r\n        if (!item) {\r\n            item = new BridgeElement(entity);\r\n            this.items.push(item);\r\n            this.itemsIds[entity.id] = item;\r\n        }\r\n        row = this.cells[entity.id];\r\n        if (row) {\r\n            item.gui = row;\r\n        }\r\n        if (this.searching(item) === false) {\r\n            return;\r\n        }\r\n        let cell;\r\n        let showItem = false;\r\n\r\n        if (!row) {\r\n            showItem = true;\r\n            row = document.createElement('tr');\r\n            let count = this.columns.length;\r\n            for (let i = 0; i < count; i++) {\r\n                cell = document.createElement('td');\r\n                row.appendChild(cell);\r\n            }\r\n            this.cells[entity.id] = row;\r\n            item.gui = row;\r\n        }\r\n        for (let c: number = 0; c < this.columns.length; c++) {\r\n            let name = this.columns[c].attribute;\r\n            if (name === property) {\r\n                cell = row.children[c];\r\n                cell.innerHTML = <string>newValue;\r\n            }\r\n        }\r\n        if (showItem) {\r\n            this.showItem(item, true);\r\n        }\r\n        // super.propertyChange(entity, property, newValue, oldValue);\r\n    }\r\n\r\n    public sort(column: Column) {\r\n        if (this.sortColumn === column) {\r\n            if (this.direction === 1) {\r\n                this.direction = -1;\r\n                column.$element.classList.remove('asc');\r\n                column.$element.classList.add('desc');\r\n            } else {\r\n                this.direction = 1;\r\n                column.$element.classList.remove('desc');\r\n                column.$element.classList.add('asc');\r\n            }\r\n        } else {\r\n            if (this.sortColumn !== null) {\r\n                this.sortColumn.$element.classList.remove('desc');\r\n                this.sortColumn.$element.classList.remove('asc');\r\n            }\r\n            this.sortColumn = column;\r\n            this.sortColumn.$element.classList.add('asc');\r\n            this.direction = 1;\r\n        }\r\n        let that = this;\r\n        let sort = function (a: BridgeElement, b: BridgeElement) {\r\n            return that.sorting(a, b);\r\n        };\r\n        this.showedItems.sort(sort);\r\n        let len: number = this.showedItems.length;\r\n        let body = this.$bodysection;\r\n        let i = 0;\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            if (i !== Table.indexOfChild(item)) {\r\n                break;\r\n            }\r\n            i = i + 1;\r\n        }\r\n        while (body.children.length > i) {\r\n            body.removeChild(body.children.item(body.children.length - 1));\r\n        }\r\n        while (i < len) {\r\n            let item: BridgeElement = this.showedItems[i];\r\n            body.appendChild(item.gui);\r\n            i = i + 1;\r\n        }\r\n\r\n        //      body.removeChild(item.gui);\r\n        //      body.remove\r\n    }\r\n\r\n    public sorting(a: BridgeElement, b: BridgeElement): number {\r\n        let path: string[] = this.sortColumn.attribute.split('.');\r\n        let itemA = a.model.prop;\r\n        let itemB = b.model.prop;\r\n        let check = this.sortColumn.attribute;\r\n        for (let p = 0; p < path.length; p++) {\r\n            check = path[p];\r\n            if (itemA[check]) {\r\n                itemA = itemA[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n            if (itemB[check]) {\r\n                itemB = itemB[check];\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n        if (itemA !== itemB) {\r\n            if (this.direction === 1) {\r\n                return (itemA < itemB) ? -1 : 1;\r\n            }\r\n            return (itemA < itemB) ? 1 : -1;\r\n\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    // Searching\r\n    public search(origSearchText: string): void {\r\n        if (!origSearchText) {\r\n            origSearchText = '';\r\n        }\r\n        let searchText: string = origSearchText.trim().toLowerCase();\r\n        if (searchText === this.lastSearchText && searchText !== '') {\r\n            return; // <==== nothing to be done\r\n        }\r\n        let oldSearch: string = this.lastSearchText;\r\n        this.lastSearchText = searchText;\r\n\r\n        this.parseSearchArray();\r\n        if (searchText !== '' && oldSearch !== null && searchText.indexOf(oldSearch) >= 0 && searchText.indexOf('|') < 0) {\r\n            this.searchArray(this.showedItems);\r\n        } else {\r\n            this.searchSet(this.items);\r\n        }\r\n        this.refreshCounter();\r\n    }\r\n\r\n    public refreshCounter() {\r\n        if (this.countColumn) {\r\n            this.countColumn.innerHTML = this.columns[this.countColumnPos].label + ' (' + this.showedItems.length + ')';\r\n        }\r\n        // var countElement = document.getElementById('talkCount');\r\n        //  if (countElement) {\r\n        //     var txt = (this.showedItems.size() > 0 && searchText.length > 0 ) ? this.options.TEXT_SEARCHLIST : this.options.TEXT_SEARCHFULLLIST;\r\n        //     countElement.innerHTML = txt.replace(\"%LEN%\", this.root['children'].length).replace(\"%COUNT%\", this.showedItems.size()).replace(\"%SEARCH%\", origSearchText);\r\n        // }\r\n        // if (this.countColumn) {\r\n        //     this.countColu1mn.innerHTML = this.countColumn[\"label\"] + \" (\" + this.showedItems.size() + \")\";\r\n        // }\r\n    }\r\n\r\n    public parseSearchArray() {\r\n        let pos: number = 0;\r\n        let split: Array<string> = [];\r\n        let quote: boolean = false;\r\n        for (let i: number = 0; i < this.lastSearchText.length; i++) {\r\n            if ((this.lastSearchText.charAt(i) === ' ') && !quote) {\r\n                let txt = this.lastSearchText.substring(pos, i).trim();\r\n                if (txt.length > 0) {\r\n                    split.push(txt);\r\n                }\r\n                pos = i + 1;\r\n            } else if (this.lastSearchText.charAt(i) === '\\\"') {\r\n                if (quote) {\r\n                    let txt = this.lastSearchText.substring(pos, i).trim();\r\n                    if (txt.length > 0) {\r\n                        split.push(txt);\r\n                    }\r\n                    pos = i + 1;\r\n                } else {\r\n                    pos = i + 1;\r\n                }\r\n                quote = !quote;\r\n            }\r\n        }\r\n        if (pos < this.lastSearchText.length) {\r\n            split.push(this.lastSearchText.substring(pos, this.lastSearchText.length).trim());\r\n        }\r\n        this.searchText = split;\r\n        return split;\r\n    }\r\n\r\n    public searchArray(root: Array<BridgeElement>) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let i: number = 0; i < root.length; i++) {\r\n            let item: BridgeElement = root[i];\r\n            this.showItem(item, this.searching(item));\r\n        }\r\n    }\r\n\r\n    public searchSet(root: BridgeElement[]) {\r\n        this.showedItems = [];\r\n        // Search for Simple Context\r\n        for (let item of root) {\r\n            let child: BridgeElement = <BridgeElement>item;\r\n            this.showItem(child, this.searching(child));\r\n        }\r\n    }\r\n\r\n    public showItem(item: BridgeElement, visible: boolean) {\r\n        if (visible) {\r\n            this.showedItems.push(item);\r\n            this.$bodysection.appendChild(item.gui);\r\n        } else if (item.gui && item.gui.parentElement) {\r\n            this.$bodysection.removeChild(item.gui);\r\n        }\r\n    }\r\n\r\n    public searching(item: BridgeElement): boolean {\r\n        let fullText: string = '';\r\n        for (let i: number = 0; i < this.searchColumns.length; i++) {\r\n            fullText = fullText + ' ' + item.model.getValue(this.searchColumns[i]);\r\n        }\r\n        fullText = fullText.trim().toLowerCase();\r\n        for (let z: number = 0; z < this.searchText.length; z++) {\r\n            if ('' !== this.searchText[z]) {\r\n                let orSplit: Array<string>;\r\n                if (this.searchText[z].indexOf('|') > 0) {\r\n                    orSplit = this.searchText[z].split('|');\r\n                } else {\r\n                    orSplit = [this.searchText[z]];\r\n                }\r\n                let o: number = 0;\r\n                for (; o < orSplit.length; o++) {\r\n                    let pos: number = orSplit[o].indexOf(':');\r\n                    if (orSplit[o].indexOf('#') === 0 && pos > 1) {\r\n                        // if (searchProperties.contains(propString)) {\r\n                        let value: string = orSplit[o].substring(pos + 1);\r\n                        let column: string = orSplit[o].substring(1, pos - 1);\r\n                        let dataValue: Object = item.model.getValue(column);\r\n                        if (dataValue) {\r\n                            if (dataValue.toString().toLowerCase().indexOf(value) >= 0) {\r\n                                // Search for simple Property\r\n                                break;\r\n                            }\r\n                        }\r\n                    } else if (orSplit[o].length > 1 && orSplit[o].indexOf('-') === 0) {\r\n                        if (fullText.indexOf(orSplit[o].substring(1)) < 0) {\r\n                            break;\r\n                        }\r\n                    } else if (fullText.indexOf(orSplit[o]) >= 0) {\r\n                        // his search word is found in full text\r\n                        break;\r\n                    }\r\n                }\r\n                if (o === orSplit.length) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    // noinspection JSUnusedGlobalSymbols\r\n    public getColumn(): Column[] {\r\n        return this.columns;\r\n    }\r\n\r\n    public updateElement(property: string, value: string): void {\r\n        // first clear all elements inside the table:\r\n        for (let item of this.items) {\r\n            if (item instanceof BridgeElement) {\r\n                (<BridgeElement>item).model.removeListener(this);\r\n            }\r\n        }\r\n\r\n        this.items = [];\r\n        this.itemsIds = {};\r\n\r\n        // load all entitys that match the property\r\n        if (this.property !== undefined) {\r\n            let items = this.$owner.getItems();\r\n            for (let j in items) {\r\n                if (items.hasOwnProperty(j)) {\r\n                    let item = items[j];\r\n                    if (item instanceof Data) {\r\n                        if (property === j) {\r\n                            // if (property == item.property) {\r\n                            let i = new BridgeElement(<Data>item);\r\n                            this.items.push(i);\r\n                            this.itemsIds[item.id] = i;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            this.redrawAllElements();\r\n        }\r\n    }\r\n\r\n    public setValue(object: Object, attribute: string, newValue: Object, oldValue?: Object): boolean {\r\n        if (this.$owner !== null) {\r\n            return this.getRoot().setValue(object, attribute, newValue, oldValue);\r\n        }\r\n        return super.setValue(object, attribute, newValue, oldValue);\r\n    }\r\n\r\n    protected redrawAllElements() {\r\n        let children: HTMLCollection = this.$bodysection.children;\r\n        // remove old children\r\n        for (let i = 0; i < children.length; i++) {\r\n            let child = children.item(i);\r\n            // remove child\r\n            this.$bodysection.removeChild(child);\r\n        }\r\n\r\n        // load new children\r\n        for (let obj of this.items) {\r\n            // register listeners\r\n            obj.model.addListener(this);\r\n            // create tr\r\n            let row = this.createRow(obj);\r\n            this.$bodysection.appendChild(row);\r\n            this.cells[obj.id] = row;\r\n        }\r\n    }\r\n\r\n    private parseData(column: any): Column {\r\n        let col = new Column();\r\n        col.label = column.label || column.id;\r\n        col.attribute = column.attribute || column.label || column.id;\r\n        col.$element = document.createElement('th');\r\n        col.$element.innerHTML = col.label;\r\n        col.$element.draggable = true;\r\n\r\n        // resize Header\r\n        col.$resize = document.createElement('div');\r\n        col.$resize.classList.add('resize');\r\n        col.$element.appendChild(col.$resize);\r\n\r\n        return col;\r\n    }\r\n\r\n    private createRow(data: BridgeElement): HTMLTableRowElement {\r\n        let tr: HTMLTableRowElement = document.createElement('tr');\r\n\r\n        for (let id of this.columns) {\r\n            let td: HTMLTableDataCellElement = document.createElement('td');\r\n            tr.appendChild(td);\r\n            td.innerHTML = data.model.getValue(id.attribute);\r\n        }\r\n        return tr;\r\n    }\r\n\r\n    private addHeaderInfo(col: Column) {\r\n        let element: HTMLTableCellElement = col.$element;\r\n        let that = this;\r\n        element.classList.add('sort');\r\n        element.addEventListener('click',\r\n            function () {\r\n                that.sort(col);\r\n            },\r\n            false);\r\n    }\r\n\r\n    private columnDragEvent(type: string, e: DragEvent) {\r\n        if (type === 'dragstart') {\r\n            // Target (this) element is the source node.\r\n            this.moveElement.$element.style.opacity = '0.4';\r\n            e.dataTransfer.effectAllowed = 'move';\r\n            e.dataTransfer.setData('text/json', JSON.stringify(Util.toJson(this.moveElement)));\r\n        } else if (type === 'dragenter') {\r\n            // TO Nothing\r\n        } else if (type === 'dragleave') {\r\n            this.moveElement.$element.classList.remove('over');\r\n        } else if (type === 'dragover') {\r\n            if (e.preventDefault) {\r\n                e.preventDefault(); // Necessary. Allows us to drop.\r\n            }\r\n            for (let c = 0; c < this.columns.length; c++) {\r\n                if (this.columns[c].$element === e.target) {\r\n                    this.dragColumn = this.columns[c];\r\n                    this.dragPos = c;\r\n                    this.columns[c].$element.classList.add('over');\r\n                } else {\r\n                    this.columns[c].$element.classList.remove('over');\r\n                }\r\n            }\r\n            if (e.target === this.tableOption) {\r\n                this.tableOption.classList.add('over');\r\n                this.dragPos = this.columns.length;\r\n            } else {\r\n                this.tableOption.classList.remove('over');\r\n            }\r\n            e.dataTransfer.dropEffect = 'move';  // See the section on the DataTransfer object.\r\n        } else if (type === 'drop') {\r\n            // this / e.target is current target element.\r\n            if (e.stopPropagation) {\r\n                e.stopPropagation(); // stops the browser from redirecting.\r\n            }\r\n            if (this.movePos === this.dragPos) {\r\n                return;\r\n            }\r\n            // movePos -> dragPos\r\n            // See the section on the DataTransfer object.\r\n            // DataModel\r\n            this.columns.splice(this.movePos, 1);\r\n            if (this.movePos >= this.dragPos) {\r\n                this.columns.splice(this.dragPos, 0, this.moveElement);\r\n            } else {\r\n                this.columns.splice(this.dragPos - 1, 0, this.moveElement);\r\n            }\r\n\r\n            // Header Line\r\n            let line: HTMLElement = this.moveElement.$element.parentElement;\r\n            line.removeChild(this.moveElement.$element);\r\n            if (this.dragPos < this.columns.length) {\r\n                line.insertBefore(this.moveElement.$element, this.dragColumn.$element);\r\n            } else {\r\n                line.insertBefore(this.moveElement.$element, this.tableOption);\r\n            }\r\n\r\n            let oldElement: Element;\r\n            let newElement: Element;\r\n\r\n            // Now all Childs\r\n            for (let i = 0; i < this.$bodysection.children.length; i++) {\r\n                // Each line\r\n                line = <HTMLElement>this.$bodysection.children.item(i);\r\n                oldElement = line.children.item(this.movePos);\r\n                newElement = line.children.item(this.dragPos);\r\n                line.removeChild(oldElement);\r\n                line.insertBefore(oldElement, newElement);\r\n            }\r\n        } else if (type === 'dragend') {\r\n            // this/e.target is the source node.\r\n            this.moveElement.$element.style.opacity = '1';\r\n            for (let i = 0; i < this.columns.length; i++) {\r\n                this.columns[i].$element.classList.remove('over');\r\n            }\r\n            this.tableOption.classList.remove('over');\r\n        }\r\n    }\r\n\r\n    private addOptionItem(label: string, parent: HTMLElement, sub: boolean): HTMLElement {\r\n        let labelControl;\r\n        if (label) {\r\n            labelControl = document.createElement('a');\r\n            labelControl.appendChild(document.createTextNode(label));\r\n            labelControl.href = 'javascript:void(0);';\r\n            parent.appendChild(labelControl);\r\n        }\r\n        if (sub) {\r\n            let context = document.createElement('div');\r\n            context.classList.add('dropdown-content');\r\n            context.style.setProperty('position', 'absolute');\r\n            parent.appendChild(context);\r\n\r\n            /* When the user clicks on the button,\r\n             toggle between hiding and showing the dropdown content */\r\n            parent.addEventListener(\r\n                'click',\r\n                function () {\r\n                    context.classList.toggle('show');\r\n                },\r\n                false);\r\n            return context;\r\n        }\r\n        return labelControl;\r\n    }\r\n\r\n    private registerEvents(events: string[]) {\r\n        let that = this;\r\n        for (let i = 0; i < events.length; i++) {\r\n            this.$view.addEventListener(events[i], function (evt) {\r\n                return that.tableEvent(events[i], evt);\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\nclass Column {\r\n    label: string;\r\n    attribute: string;\r\n    $element: HTMLTableHeaderCellElement;\r\n    $resize: HTMLDivElement;\r\n    visible: boolean;\r\n}\r\n","import { AutoComplete } from './AutoComplete';\r\nimport { BR } from './BR';\r\nimport { Div } from './Div';\r\nimport { Label } from './Label';\r\n\r\nexport * from './Node';\r\nexport * from './Class';\r\nexport * from './SO';\r\nexport * from './Symbol';\r\n\r\nexport * from './BR';\r\nexport * from './Button';\r\nexport * from './Div';\r\nexport * from './Form';\r\nexport * from './Input';\r\nexport * from './Label';\r\nexport * from './Table';\r\nexport * from './HTML';\r\nexport * from './Dice';\r\nexport * from './AutoComplete';\r\nexport * from './Attribute';\r\nexport * from './Method';\r\nexport * from './ClazzProperty';\r\n\r\nnew AutoComplete();\r\nnew BR();\r\nnew Div();\r\nnew Label();\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class AddNode implements EventHandler {\r\n\r\n    public MIN_SIZE_TO_ADD_NODE: number = 30;\r\n    public MIN_SIZE_TO_ADD_TEXT: number = 10;\r\n    private graph: Graph;\r\n    private svgRect: SVGSVGElement;\r\n    private svgGroupAddNode: SVGSVGElement;\r\n    private svgTextAddNode: SVGSVGElement;\r\n    private svgTextRectAddNode: SVGSVGElement;\r\n    private isRectDrawing: boolean;\r\n    private isDrawToLeft: boolean;\r\n    private isDrawToTop: boolean;\r\n    private isBigEnoughForAddNode: boolean;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(AddNode.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(AddNode.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!this.canHandle()) {\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element.id !== 'RootElement') {\r\n            return false;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element.id === 'RootElement') {\r\n                    this.start(event, element);\r\n\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mousemove':\r\n                this.drawRect(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.removeRect();\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.addNode();\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawRect(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isRectDrawing) {\r\n            return;\r\n        }\r\n\r\n        evt.stopPropagation();\r\n\r\n        let width = Util.getEventX(evt) - this.x;\r\n        let height = Util.getEventY(evt) - this.y;\r\n\r\n        // rectangle is in a negative area, drawn to upper case. not possibble with svg\r\n        if (width < 0) {\r\n            this.isDrawToLeft = true;\r\n            width *= -1;\r\n        } else {\r\n            this.isDrawToLeft = false;\r\n        }\r\n\r\n        if (height < 0) {\r\n            this.isDrawToTop = true;\r\n            height *= -1;\r\n        } else {\r\n            this.isDrawToTop = false;\r\n        }\r\n\r\n        if (width > this.MIN_SIZE_TO_ADD_NODE && height > this.MIN_SIZE_TO_ADD_NODE) {\r\n            this.isBigEnoughForAddNode = true;\r\n        } else {\r\n            this.isBigEnoughForAddNode = false;\r\n        }\r\n\r\n        this.graph.root.style.cursor = 'pointer';\r\n\r\n        // if line wasnt draw\r\n        if (!this.svgRect) {\r\n\r\n            let rectAddNode = Util.createShape({\r\n                tag: 'rect',\r\n                id: 'addNodeRect',\r\n                x: this.x,\r\n                y: this.y,\r\n                width: 1,\r\n                height: 1,\r\n                class: 'SVGAddNode'\r\n            });\r\n\r\n            let group = Util.createShape({ tag: 'g', id: 'groupAddNode' });\r\n            group.appendChild(rectAddNode);\r\n\r\n            this.graph.root.appendChild(group);\r\n            this.svgRect = rectAddNode;\r\n            this.svgGroupAddNode = group;\r\n        }\r\n        else {\r\n\r\n            let svgRectBBox = this.svgRect.getBBox();\r\n\r\n            // if rect is big enough, show text as helper\r\n            if ((svgRectBBox.width > this.MIN_SIZE_TO_ADD_TEXT\r\n                || svgRectBBox.height > this.MIN_SIZE_TO_ADD_TEXT) && !this.svgTextAddNode) {\r\n\r\n                let textAddNode = Util.createShape({\r\n                    tag: 'text',\r\n                    x: this.x,\r\n                    y: this.y - 5,\r\n                    'font-family': 'Verdana',\r\n                    'font-size': 12,\r\n                    fill: 'black'\r\n                });\r\n                textAddNode.textContent = 'Hold on and move to create a new class';\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n\r\n\r\n                // get correct size of text node\r\n                let sizeClientRect: ClientRect = textAddNode.getBoundingClientRect();\r\n\r\n                let rectBackgroundForText = Util.createShape({\r\n                    tag: 'rect',\r\n                    x: this.x,\r\n                    y: this.y - sizeClientRect.height,\r\n                    width: sizeClientRect.width,\r\n                    height: sizeClientRect.height,\r\n                    fill: '#DDD',\r\n                    'stroke-width': 0\r\n                });\r\n\r\n                this.svgTextRectAddNode = rectBackgroundForText;\r\n                this.svgTextAddNode = textAddNode;\r\n                this.svgGroupAddNode.appendChild(rectBackgroundForText);\r\n                this.svgGroupAddNode.appendChild(textAddNode);\r\n            }\r\n\r\n            if (this.isDrawToLeft) {\r\n                this.svgRect.setAttributeNS(null, 'x', '' + Util.getEventX(evt));\r\n            }\r\n\r\n            if (this.isDrawToTop) {\r\n                this.svgRect.setAttributeNS(null, 'y', '' + Util.getEventY(evt));\r\n            }\r\n\r\n            // set width and height\r\n            this.svgRect.setAttributeNS(null, 'width', width.toString());\r\n            this.svgRect.setAttributeNS(null, 'height', height.toString());\r\n\r\n            // set color\r\n            if (this.isBigEnoughForAddNode) {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode-ready');\r\n\r\n                // draw text\r\n            }\r\n            else {\r\n                this.svgRect.setAttributeNS(null, 'class', 'SVGAddNode');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeRect(): void {\r\n        this.isRectDrawing = false;\r\n        this.isBigEnoughForAddNode = false;\r\n\r\n        this.graph.root.style.cursor = 'default';\r\n\r\n        if (this.svgGroupAddNode) {\r\n            this.graph.root.removeChild(this.svgGroupAddNode);\r\n            this.svgGroupAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgRect) {\r\n            this.svgRect = undefined;\r\n        }\r\n\r\n        if (this.svgTextAddNode) {\r\n            this.svgTextAddNode = undefined;\r\n        }\r\n\r\n        if (this.svgTextRectAddNode) {\r\n            this.svgTextRectAddNode = undefined;\r\n        }\r\n    }\r\n\r\n    private addNode(): void {\r\n\r\n        if (!this.isBigEnoughForAddNode) {\r\n            this.removeRect();\r\n            return;\r\n        }\r\n\r\n        this.removeRect();\r\n        let node = this.graph.addElementWithValues('Class', { x: this.x, y: this.y });\r\n        this.graph.drawElement(node);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isRectDrawing) {\r\n            return;\r\n        }\r\n        this.isRectDrawing = true;\r\n\r\n        this.x = Util.getEventX(evt);\r\n        this.y = Util.getEventY(evt);\r\n    }\r\n\r\n}\r\n","import { EventHandler, EventBus } from '../EventBus';\r\nimport { DiagramElement, Point } from '../elements/BaseElements';\r\nimport { GraphModel } from '../elements/Model';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Control } from '../Control';\r\nimport { Util } from '../util';\r\n\r\nexport class Drag implements EventHandler {\r\n\r\n    private element: DiagramElement;\r\n    private svgElement: SVGSVGElement;\r\n    private dragging = false;\r\n    private reinsert = false;\r\n    private mouseOffset = new Point();\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        if (!this.canHandle()) {\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if ((!this.dragging) && (element.id !== 'RootElement')) {\r\n                    this.element = element;\r\n                    this.svgElement = <SVGSVGElement>element.$view;\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n            case 'mouseup':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n\r\n                break;\r\n            case 'mousemove':\r\n                if (this.dragging) {\r\n                    this.drag(event, element);\r\n                }\r\n                break;\r\n            case 'mouseleave':\r\n                if (this.dragging) {\r\n                    this.reset();\r\n                }\r\n                this.setActive(false);\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Drag.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Drag.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private reset() {\r\n        this.dragging = false;\r\n        this.svgElement.style.cursor = 'pointer';\r\n\r\n        /*  WORKAROUND\r\n            Chrome got problem with the Node.appendChild() method.\r\n            Sometimes it works, sometimes not.\r\n            So the background is, in the drag method will the current element be appended\r\n            to front of the svg root.\r\n            If this happend, the click event won't fire.\r\n            So it will be fired manually.\r\n            This problem occurs only in chrome.\r\n        */\r\n        if (Util.isChrome()) {\r\n            let clickEvt = Util.createCustomEvent('click');\r\n            this.svgElement.dispatchEvent(clickEvt);\r\n        }\r\n    }\r\n\r\n    private start(evt: Event | any, element: Control) {\r\n\r\n        this.dragging = true;\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n        this.reinsert = true;\r\n\r\n        this.svgElement.style.cursor = 'move';\r\n    }\r\n\r\n    private drag(evt: Event | any, element: DiagramElement) {\r\n\r\n        if (this.reinsert) {\r\n            if (this.element.id !== 'RootElement') {\r\n                // nesseccary to set the dragged object on top of svg children\r\n                this.graph.root.appendChild(this.svgElement);\r\n            }\r\n\r\n            let dragEvent = Util.createCustomEvent('drag');\r\n            element.$view.dispatchEvent(dragEvent);\r\n        }\r\n        this.reinsert = false;\r\n\r\n        evt.stopPropagation();\r\n\r\n        const translation = this.svgElement.getAttributeNS(null, 'transform').slice(10, -1).split(' ');\r\n        const sx = parseInt(translation[0]);\r\n        let sy = 0;\r\n        if (translation.length > 1) {\r\n            sy = parseInt(translation[1]);\r\n        }\r\n\r\n        const transX = sx + evt.clientX - this.mouseOffset.x;\r\n        const transY = sy + evt.clientY - this.mouseOffset.y;\r\n        this.svgElement.setAttributeNS(null, 'transform', 'translate(' + transX + ' ' + transY + ')');\r\n        this.element.getPos().addNum(transX - sx, transY - sy);\r\n\r\n        if (this.element instanceof Node) {\r\n            (<Node>this.element).redrawEdges();\r\n        }\r\n\r\n        this.mouseOffset.x = evt.clientX;\r\n        this.mouseOffset.y = evt.clientY;\r\n\r\n\r\n        // resize svg root\r\n        let maxX = this.element.getPos().x + this.element.getSize().x;\r\n        let maxY = this.element.getPos().y + this.element.getSize().y;\r\n\r\n        let domRectRoot = this.graph.root.getBoundingClientRect();\r\n        if(!domRectRoot){\r\n            return;\r\n        }\r\n\r\n        if(maxX > domRectRoot.width){\r\n            this.graph.root.setAttributeNS(null, 'width', '' + maxX);\r\n        }\r\n        \r\n        if(maxY > domRectRoot.height){\r\n            this.graph.root.setAttributeNS(null, 'height', '' + maxY);\r\n        }\r\n    }\r\n}\r\n","import PropertyChangeSupport from '../PropertyChangeSupport';\r\nimport Data from '../Data';\r\nimport {Adapter} from '../Adapter';\r\nimport ClazzProperty from '../elements/nodes/ClazzProperty';\r\n\r\nexport class GraphListener implements PropertyChangeSupport {\r\n    private $owner: ClazzProperty;\r\n\r\n    constructor(owner: ClazzProperty) {\r\n        this.$owner = owner;\r\n    }\r\n\r\n    public propertyChange(entity: Data, property: string, oldValue: any, newValue: any): void {\r\n        let adapter = this.$owner.getRoot().getAdapter();\r\n        if (adapter) {\r\n            // messages.add(\"{\\\"class\\\":\\\"de.uniks.networkparser.test.model.House\\\",\\\"id\\\":\\\"H1\\\",\\\"rem\\\":{\\\"floor\\\":4},\\\"upd\\\":{\\\"floor\\\":42}}\");\r\n            let myId =  this.$owner.$owner.getId();\r\n            if (myId && myId.length > 0) {\r\n                let pos = myId.indexOf(':');\r\n                if (pos > 0) {\r\n                    myId = myId.substring(0, pos).trim();\r\n                }\r\n            }\r\n            let myName = this.$owner.getName();\r\n            let remJson = {};\r\n            remJson[myName] = oldValue;\r\n            let updJson = {};\r\n            updJson[myName] = newValue;\r\n            let json = {};\r\n            json['id'] = myId;\r\n            json['rem'] = remJson;\r\n            json['upd'] = updJson;\r\n            let message = JSON.stringify(json);\r\n            (<Adapter> adapter).update(message);\r\n        }\r\n    }\r\n}\r\n","import {Graph} from '../elements/';\r\nimport {EventHandler, EventBus} from '../EventBus';\r\nimport {DiagramElement} from '../elements/';\r\nimport {Util} from '../util';\r\n\r\nexport class ImportFile implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(ImportFile.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(ImportFile.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n        let type: string = typeof event;\r\n        if (type !== 'DragEvent') {\r\n            return false;\r\n        }\r\n        let evt: DragEvent = <DragEvent>event;\r\n        if (evt.type === 'dragover') {\r\n            this.handleDragOver(evt);\r\n        } else if (evt.type === 'dragleave') {\r\n            if (this.graph.$view !== evt.target) {\r\n                return false;\r\n            }\r\n            this.setBoardStyle('dragleave');\r\n        } else if (evt.type === 'drop') {\r\n            this.handleLoadFile(evt);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    public setBoardStyle(typ: string): boolean {\r\n        let b = this.graph.$view;\r\n        Util.removeClass(b, 'Error');\r\n        Util.removeClass(b, 'Ok');\r\n        Util.removeClass(b, 'Add');\r\n        if (typ === 'dragleave') {\r\n            if (b['errorText']) {\r\n                b.removeChild(b['errorText']);\r\n                b['errorText'] = null;\r\n            }\r\n            return true;\r\n        }\r\n        Util.addClass(b, typ);\r\n        if (typ === 'Error') {\r\n            if (!b['errorText']) {\r\n                b['errorText'] = Util.create({tag: 'div', style: 'margin-top: 30%', value: 'NO TEXTFILE'});\r\n                b.appendChild(b['errorText']);\r\n            }\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private handleLoadFile(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n\r\n        let files = evt.dataTransfer.files; // FileList object.\r\n\r\n        if (files.length > 1) {\r\n            evt.dataTransfer.dropEffect = 'none';\r\n            return;\r\n        }\r\n\r\n        // files is a FileList of File objects. List some properties.\r\n        let reader  = new FileReader();\r\n        let output = [];\r\n        let htmlResult = '';\r\n        let that = this;\r\n        for (let i = 0, f; f = files[i]; i++) {\r\n            reader.onload = function(event) {\r\n                htmlResult = event.target['result'];\r\n                console.log('fileContent: ' + htmlResult);\r\n\r\n                // CHANGE TO INTERNAL OBJECT\r\n                if (that.graph) {\r\n                    that.graph.import(htmlResult);\r\n                }\r\n            };\r\n            reader.readAsText(f);\r\n        }\r\n        this.setBoardStyle('dragleave');\r\n    }\r\n\r\n    private handleDragOver(evt: DragEvent): void {\r\n        let error: boolean = true, n: string, f;\r\n        let files = evt.dataTransfer.files;\r\n        // process all File objects\r\n        if (files && files.length > 0) {\r\n            for (let i: number = 0; i < files.length; i += 1) {\r\n                f = files[i];\r\n                if (f.type.indexOf('text') === 0) {\r\n                    error = false;\r\n                } else if (f.type === '') {\r\n                    n = f.name.toLowerCase();\r\n                    if (n.indexOf('json', n.length - 4) !== -1) {\r\n                        error = false;\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            let items = evt.dataTransfer.items;\r\n            if (items && items.length > 0) {\r\n                for (let z = 0; z < items.length; z ++) {\r\n                    if (items[z].type === '' || items[z].type === 'text/plain') {\r\n                        error = false;\r\n                    }\r\n                }\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.\r\n        if (error) {\r\n            this.dragStyler(evt, 'Error');\r\n        } else if (evt.ctrlKey) {\r\n            this.dragStyler(evt, 'Add');\r\n        } else {\r\n            this.dragStyler(evt, 'Ok');\r\n        }\r\n        /* //evt.target['className'] += ' diagramLoadFile';\r\n        '//console.log('handDragOver');*/\r\n    }\r\n\r\n    private dragStyler(event: Event, typ: string) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n        this.setBoardStyle(typ);\r\n    }\r\n\r\n    private handleDragLeave(evt: DragEvent): void {\r\n        evt.stopPropagation();\r\n        evt.preventDefault();\r\n        evt.dataTransfer.dropEffect = 'link'; // Explicitly show this is a copy.\r\n        evt.target['className'] = 'diagram';\r\n        console.log('handDragLeave');\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport { Class } from '../elements/nodes/Class';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Association } from '../elements/index';\r\nimport { Node } from '../elements/nodes/index';\r\n\r\nexport class NewEdge implements EventHandler {\r\n    private graph: Graph;\r\n    private svgLine: SVGSVGElement;\r\n    private isEdgeDrawing: boolean;\r\n    private sourceNode: Node;\r\n    private x: number;\r\n    private y: number;\r\n\r\n    private lastTargetNode: Node;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(NewEdge.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(NewEdge.name);\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        if (!((<KeyboardEvent>event).ctrlKey || EventBus.isHandlerActiveOrFree('NewEdge', true))) {\r\n            this.removeLine();\r\n            return true;\r\n        }\r\n\r\n        switch (event.type) {\r\n            case 'mousedown':\r\n                if (element instanceof Node) {\r\n                    this.start(event, element);\r\n                    this.setActive(true);\r\n                }\r\n                break;\r\n\r\n            case 'mousemove':\r\n                this.drawEdge(event, element);\r\n                break;\r\n            case 'mouseleave':\r\n                this.setActive(false);\r\n                break;\r\n            case 'mouseup':\r\n                this.setNewEdgeToNode(event);\r\n                this.setActive(false);\r\n                break;\r\n\r\n            default: break;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private drawEdge(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (!this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        let lineToX = Util.getEventX(evt);\r\n        let lineToy = Util.getEventY(evt);\r\n\r\n        let path = `M${this.x} ${this.y} L${lineToX} ${lineToy}`;\r\n        // if line wasnt draw\r\n        if (!this.svgLine) {\r\n\r\n            let attr = {\r\n                tag: 'path',\r\n                id: 'newEdgePath',\r\n                d: path,\r\n                class: 'SVGEdge'\r\n            };\r\n\r\n            let shape = Util.createShape(attr);\r\n            this.svgLine = shape;\r\n\r\n            this.graph.root.appendChild(shape);\r\n            this.graph.root.appendChild(this.sourceNode.$view);\r\n        }\r\n        else {\r\n\r\n            // set new L path\r\n            this.svgLine.setAttributeNS(null, 'd', path);\r\n\r\n            // get node from position\r\n            let targetNode = this.graph.$graphModel.getNodeByPosition(Util.getEventX(evt), Util.getEventY(evt));\r\n\r\n            // if some targetnode is available, so highlight the node\r\n            if (targetNode) {\r\n\r\n                // reset the last one\r\n                if (this.lastTargetNode && this.lastTargetNode.id !== targetNode.id) {\r\n                    this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n                }\r\n\r\n                this.lastTargetNode = targetNode;\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz-drawedge');\r\n            }\r\n            else if (this.lastTargetNode) {\r\n                this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeLine(): void {\r\n        this.isEdgeDrawing = false;\r\n\r\n        if (this.svgLine) {\r\n            this.graph.root.removeChild(this.svgLine);\r\n            this.svgLine = null;\r\n        }\r\n\r\n        if (this.lastTargetNode) {\r\n            this.lastTargetNode.$view.setAttributeNS(null, 'class', 'SVGClazz');\r\n        }\r\n    }\r\n\r\n    private setNewEdgeToNode(event: Event | any): void {\r\n        // get node from position\r\n        let targetNode = this.graph.$graphModel\r\n            .getNodeByPosition(Util.getEventX(event), Util.getEventY(event));\r\n\r\n        if (!targetNode) {\r\n            this.removeLine();\r\n\r\n            return;\r\n        }\r\n\r\n        this.removeLine();\r\n        let edgeType = this.sourceNode.$defaulEdgeType || 'Association';\r\n\r\n        let jsonData = {\r\n            type: edgeType,\r\n            source: this.sourceNode.id,\r\n            target: targetNode.id\r\n        };\r\n\r\n        let newEdge = this.graph.$graphModel.addEdge(<any>jsonData, true);\r\n        this.graph.drawElement(newEdge);\r\n    }\r\n\r\n    private start(evt: Event | any, element: DiagramElement): void {\r\n\r\n        if (this.isEdgeDrawing) {\r\n            return;\r\n        }\r\n        this.isEdgeDrawing = true;\r\n        this.sourceNode = element as Class;\r\n\r\n        this.x = this.sourceNode.getPos().x + (this.sourceNode.getSize().x / 2);\r\n        this.y = this.sourceNode.getPos().y + (this.sourceNode.getSize().y / 2);\r\n\r\n        // TODO: get this into util or select\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n        }\r\n    }\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { Node } from '../elements/nodes';\r\nimport { Association } from '../elements/edges';\r\nimport { Util } from '../util';\r\nimport { SymbolLibary } from '../elements/nodes/Symbol';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\nimport Attribute from '../elements/nodes/Attribute';\r\n\r\nexport class Select implements EventHandler {\r\n\r\n    private deleteShape: SVGSVGElement;\r\n    private addEdgeShape: SVGSVGElement;\r\n    private copyNodeShape: SVGSVGElement;\r\n    private graph: Graph;\r\n    private padding = 5;\r\n\r\n    private lastSelectedNode: Element;\r\n    private lastSelectedEdge: Element;\r\n\r\n    private isDragged: boolean;\r\n\r\n    constructor(graph: Graph) {\r\n        this.graph = graph;\r\n\r\n        this.deleteShape = SymbolLibary.drawSVG({ type: 'Basket', background: true, id: 'trashcan', tooltip: 'Delete class' });\r\n        this.copyNodeShape = SymbolLibary.drawSVG({ type: 'Copynode', background: true, id: 'copyNode', tooltip: 'Copy class' });\r\n        this.addEdgeShape = SymbolLibary.drawSVG({ type: 'Edgeicon', background: true, id: 'addEdge', tooltip: 'Click and drag to connect this class' });\r\n    }\r\n\r\n    public handle(event: Event, element: DiagramElement): boolean {\r\n\r\n        let x = Util.getEventX(event);\r\n        let y = Util.getEventY(event);\r\n\r\n        event.stopPropagation();\r\n        if (event.type === 'drag') {\r\n            this.isDragged = true;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            if (element instanceof Node) {\r\n                this.lastSelectedNode = <Element>element.$view;\r\n            }\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n        }\r\n\r\n        if (event.target['id'] === 'background' || element === this.graph.$graphModel) {\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let e = <Node>element;\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.graph.root.appendChild(this.addEdgeShape);\r\n            this.graph.root.appendChild(this.copyNodeShape);\r\n            this.graph.root.appendChild(element.$view);\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'visible');\r\n\r\n            let x = (e.getPos().x + e.getSize().x) + 5;\r\n            let y = e.getPos().y;\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y + this.padding})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.copyNodeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 40 + this.padding})`);\r\n            this.copyNodeShape.onclick = (evt) => {\r\n                let nextFreePosition = this.graph.getNextFreePosition();\r\n                let copyClass = (element).copy();\r\n                copyClass.withPos(nextFreePosition.x, nextFreePosition.y);\r\n                this.graph.drawElement(copyClass);\r\n            };\r\n\r\n            this.addEdgeShape.setAttributeNS(null, 'transform', `translate(${x} ${y + 80 + this.padding})`);\r\n            this.addEdgeShape.onmousedown = function () {\r\n                EventBus.setActiveHandler('NewEdge');\r\n                element.$view.dispatchEvent(Util.createCustomEvent('mousedown'));\r\n            };\r\n        }\r\n        if (element instanceof Node && event.type === 'click') {\r\n            let clazz = <Node>element;\r\n\r\n            if (Util.isChrome()) {\r\n                if (this.lastSelectedNode && element.id === this.lastSelectedNode.id && !this.isDragged) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            this.isDragged = false;\r\n            this.resetLastSelectedElements();\r\n\r\n            // mark the border with orange\r\n            this.lastSelectedNode = <Element>element.$view;\r\n            Util.addClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete class');\r\n\r\n            // draw textbox to edit clazz in one line\r\n            let divInlineEdit = document.createElement('div');\r\n            divInlineEdit.id = 'inlineEdit';\r\n            divInlineEdit.style.position = 'absolute';\r\n            divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n            divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n            divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n            divInlineEdit.style.zIndex = '42';\r\n\r\n            let inputText = document.createElement('input');\r\n            inputText.type = 'text';\r\n            inputText.style.width = '100%';\r\n            inputText.placeholder = 'Add properties, edit label';\r\n\r\n            divInlineEdit.appendChild(inputText);\r\n            document.body.appendChild(divInlineEdit);\r\n\r\n            inputText.addEventListener('focusout', (evt) => {\r\n\r\n                if (Util.isChrome()) {\r\n                    // only if input is empty, remove the inline edit function\r\n                    if ((!inputText.value || inputText.value.length === 0) && (!this.lastSelectedNode || element.id !== this.lastSelectedNode.id)) {\r\n                        this.removeLastInlineEdit();\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                // only if input is empty, remove the inline edit function\r\n                if ((!inputText.value || inputText.value.length === 0)) {\r\n                    this.removeLastInlineEdit();\r\n                }\r\n            });\r\n\r\n            let g = this.graph;\r\n            let propertyTypes: string[] = ['boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'short', 'String', 'void'];\r\n            inputText.addEventListener('keydown', function (evt) {\r\n\r\n                let keyCode = (<any>evt).which;\r\n                let inputValue = <any>inputText.value;\r\n\r\n                if (Util.endsWith(inputValue, ':') && !document.getElementById('selectPropertyType')) {\r\n                    let selectType = document.createElement('select');\r\n                    selectType.id = 'selectPropertyType';\r\n                    selectType.style.width = '100%';\r\n\r\n                    for (let type of propertyTypes) {\r\n                        let selectOption = document.createElement('option');\r\n                        selectOption.value = type;\r\n                        selectOption.innerHTML = type;\r\n                        selectType.appendChild(selectOption);\r\n                    }\r\n\r\n                    selectType.addEventListener('change', function (evt) {\r\n                        let inputValueSplitted = inputValue.split(':');\r\n                        let selectedPropertyType = selectType.options[selectType.selectedIndex].value;\r\n\r\n                        if (inputValueSplitted.length >= 1) {\r\n                            inputText.value = inputValueSplitted[0].trim() + ' : ' + selectedPropertyType;\r\n                            inputText.focus();\r\n                        }\r\n                    });\r\n\r\n                    divInlineEdit.appendChild(selectType);\r\n                }\r\n                else if (!Util.includes(inputValue, ':')) {\r\n                    let selectType = document.getElementById('selectPropertyType');\r\n\r\n                    if (selectType) {\r\n                        selectType.remove();\r\n                    }\r\n                }\r\n\r\n                if (keyCode !== 13) {\r\n                    return;\r\n                }\r\n\r\n                // attribute\r\n                if ((Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) === false) {\r\n                    if (Util.includes(inputValue, ':')) {\r\n                        clazz.addAttribute(inputValue.trim());\r\n                        clazz.reDraw();\r\n                    } else if (Util.includes(inputValue, '=') ) {\r\n                        let attr: Attribute = null;\r\n                        let name = inputValue.substring(0, inputValue.indexOf('=')).trim();\r\n                        for (let child of clazz.getAttributes() ) {\r\n                            if ( name === child.getName()) {\r\n                                attr = child;\r\n                                break;\r\n                            }\r\n                        }\r\n                        if (attr) {\r\n                            attr.updateValue(inputValue.substring(inputValue.indexOf('=') + 1).trim());\r\n                        }\r\n                        clazz.reDraw();\r\n                    }\r\n                }\r\n\r\n                // method\r\n                else if (Util.includes(inputValue, '(') && Util.includes(inputValue, ')')) {\r\n                    clazz.addMethod(inputValue.trim());\r\n                    clazz.reDraw();\r\n                }\r\n                // label\r\n                else if (inputValue.trim().split(' ').length === 1 && inputValue.trim().length > 0) {\r\n                    clazz.updateLabel(inputValue.trim());\r\n                }\r\n\r\n                // reset size\r\n                divInlineEdit.style.top = (clazz.getPos().y + clazz.getSize().y) + 52 + 'px';\r\n                divInlineEdit.style.left = clazz.getPos().x + 'px';\r\n                divInlineEdit.style.width = clazz.getSize().x + 'px';\r\n\r\n                inputText.value = '';\r\n\r\n                // remove combobox to select type of property\r\n                let selectType = document.getElementById('selectPropertyType');\r\n\r\n                if (selectType) {\r\n                    selectType.remove();\r\n                }\r\n\r\n                // TODO: reload propertiespanel. not working!\r\n                // event wont dispatch\r\n                // let customEvt = Util.createCustomEvent(EventBus.RELOADPROPERTIES);\r\n                // element.$view.dispatchEvent(customEvt);\r\n            });\r\n\r\n            (<any>divInlineEdit.children[0]).focus();\r\n\r\n            return true;\r\n        }\r\n\r\n        if (element instanceof Association) {\r\n            this.graph.root.appendChild(element.$view);\r\n            this.graph.root.appendChild(element.$sNode.$view);\r\n            this.graph.root.appendChild(element.$tNode.$view);\r\n\r\n            this.graph.root.appendChild(this.deleteShape);\r\n            this.setTooltipOfShape(this.deleteShape, 'Delete edge');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'visibility', 'visible');\r\n            this.addEdgeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n            this.copyNodeShape.setAttributeNS(null, 'visibility', 'hidden');\r\n\r\n            this.deleteShape.setAttributeNS(null, 'transform', `translate(${x} ${y})`);\r\n            this.deleteShape.onclick = e => this.graph.$graphModel.removeElement(element.id);\r\n\r\n            this.resetLastSelectedElements();\r\n\r\n            let edge = <Association>element;\r\n            this.lastSelectedEdge = edge.$view;\r\n\r\n            Util.addClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Select.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Select.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n\r\n    private setTooltipOfShape(shape: SVGSVGElement, tooltip: string): void {\r\n        if (!shape || !shape.hasChildNodes()) {\r\n            return;\r\n        }\r\n\r\n        let titleElement = <SVGSVGElement>shape.childNodes[0];\r\n        if (!titleElement || titleElement.tagName !== 'title') {\r\n            return;\r\n        }\r\n\r\n        titleElement.textContent = tooltip;\r\n    }\r\n\r\n    private resetLastSelectedElements() {\r\n        // reset the last one\r\n        if (this.lastSelectedNode) {\r\n            Util.removeClass(this.lastSelectedNode, 'SVGClazz-selected');\r\n            this.lastSelectedNode = undefined;\r\n        }\r\n\r\n        if (this.lastSelectedEdge) {\r\n            Util.removeClass(this.lastSelectedEdge, 'SVGEdge-selected');\r\n            this.lastSelectedEdge = undefined;\r\n        }\r\n\r\n        this.removeLastInlineEdit();\r\n    }\r\n\r\n    private removeLastInlineEdit(): void {\r\n        // remove last inline edit of clazz\r\n        let lastInlineEdit = document.getElementById('inlineEdit');\r\n        if (lastInlineEdit) {\r\n            document.body.removeChild(lastInlineEdit);\r\n\r\n            // its not supported in internet explorer\r\n            // lastInlineEdit.remove();\r\n        }\r\n    }\r\n\r\n}\r\n","import { DiagramElement } from '../elements/BaseElements';\r\nimport { EventHandler, EventBus } from '../EventBus';\r\nimport { Graph } from '../elements/Graph';\r\n\r\nexport class Zoom implements EventHandler {\r\n\r\n    private graph: Graph;\r\n\r\n    constructor(graph: Graph) {\r\n    }\r\n\r\n    public handle(e: any, element: DiagramElement): boolean {\r\n        let delta = e.deltaY || e.wheelDeltaY || -e.wheelDelta;\r\n        let d = 1 + (delta / 1000);\r\n\r\n        let values = this.graph.root.getAttribute('viewBox').split(' ');\r\n        const newViewBox = `${values[0]} ${values[1]} ${parseInt(values[2]) * d} ${parseInt(values[3]) * d}`;\r\n        this.graph.root.setAttribute('viewBox', newViewBox);\r\n\r\n        e.preventDefault();\r\n        return true;\r\n    }\r\n\r\n    public canHandle(): boolean {\r\n        return EventBus.isHandlerActiveOrFree(Zoom.name);\r\n    }\r\n\r\n    public setActive(active: boolean): void {\r\n        if (active) {\r\n            EventBus.setActiveHandler(Zoom.name);\r\n        }\r\n        else {\r\n            EventBus.releaseActiveHandler();\r\n        }\r\n    }\r\n}\r\n","export * from './Drag';\r\nexport * from './Select';\r\nexport * from './Zoom';\r\nexport * from './NewEdge';\r\nexport * from './ImportFile';\r\nexport * from './AddNode';\r\n","import { Association } from '../elements/edges';\r\nimport { Node } from '../elements/nodes';\r\nimport { Graph } from '../elements/Graph';\r\nimport Layout from './Layout';\r\nimport { DiagramElement } from '../elements/BaseElements';\r\n\r\nexport class DagreLayout implements Layout {\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        if (!window['dagre']) {\r\n            return;\r\n        }\r\n        let model = graph.$graphModel;\r\n        let g = new window['dagre'].graphlib.Graph();\r\n\r\n        g.setGraph({ marginx: 100, marginy: 20 }).setDefaultEdgeLabel(function () {\r\n            return {};\r\n        });\r\n\r\n        for (let node of model.nodes) {\r\n            g.setNode(node.id, { width: node.getSize().x, height: node.getSize().y });\r\n        }\r\n\r\n        for (let edge of model.edges) {\r\n            g.setEdge(edge.$sNode.id, edge.$tNode.id);\r\n        }\r\n\r\n        window['dagre'].layout(g);\r\n\r\n        g.nodes().forEach(function (nodeId: string) {\r\n            for (let node of model.nodes) {\r\n                if (node.id === nodeId) {\r\n                    node.withPos(g.node(nodeId).x - g.node(nodeId).width / 2, g.node(nodeId).y - g.node(nodeId).height / 2);\r\n                }\r\n            }\r\n        });\r\n        g.edges().forEach(function (e: any) {\r\n            for (let edge of model.edges) {\r\n                if (edge.$sNode.id === e.v && edge.$tNode.id === e.w) {\r\n                    let size = g.edge(e).points.length;\r\n                    edge.clearPoints();\r\n                    for (let i = 0; i < size; i++) {\r\n                        let point: SVGPoint = g.edge(e).points[i];\r\n                        edge.addPoint(point.x, point.y);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n}\r\n","import {DiagramElement} from '../elements/BaseElements';\r\nimport Layout from './Layout';\r\nimport {Graph} from '../elements/Graph';\r\nimport {Association} from '../elements/edges/Association';\r\nimport {Node} from '../elements/nodes/Node';\r\nimport {Control} from '../Control';\r\n\r\nexport class LayoutGraphMin {\r\n    public nodes: Object = {};\r\n    public edges: Array<Object> = [];\r\n    public outEdges: Object = {};\r\n    public inEdges: Object = {};\r\n    public dummyNodes: Array<LayoutGraphNode> = [];\r\n    public dummyEdges: Object = {};\r\n    public count: number = 0;\r\n    public minRank: number = Number.POSITIVE_INFINITY;\r\n    public maxRank: number = 0;\r\n    public maxHeight: number = 0;\r\n    public maxWidth: number = 0;\r\n    public ranksep: number = 0;\r\n    public edgesLabel: Array<Object> = [];\r\n\r\n    public nodeCount(): number {\r\n        return this.count;\r\n    }\r\n\r\n    public node(id: string) {\r\n        return this.nodes[id];\r\n    }\r\n\r\n    public setNode(id: string, n: LayoutGraphNode) {\r\n        if (n && !this.nodes[id]) {\r\n            this.nodes[id] = n;\r\n            this.count = this.count + 1;\r\n        } else if (!n && this.nodes[id]) {\r\n            delete this.nodes[id];\r\n        }\r\n    }\r\n}\r\n\r\nexport class LayoutGraphNode {\r\n    public id: string;\r\n    public width: number;\r\n    public height: number;\r\n    public x: number;\r\n    public y: number;\r\n    public edgeObj: LayoutGraphEdge;\r\n    public rank: number;\r\n\r\n    constructor(id: string, width: number, height: number, x: number, y: number) {\r\n        this.id = id;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n\r\nexport class LayoutGraphEdge {\r\n    public source: string;\r\n    public target: string;\r\n}\r\n\r\n// \t\t\t\t######################################################### DagreGraph #########################################################\r\nexport class DagreLayoutMin implements Layout {\r\n    public static EDGE_KEY_DELIM = '\\x01';\r\n\r\n    public layout(graph: Graph, node: DiagramElement) {\r\n        let g, layoutNode, nodes, newEdge, edges;\r\n        let i, n, x, y, sId, tId, split = DagreLayoutMin.EDGE_KEY_DELIM;\r\n        let e: Association;\r\n\r\n        nodes = node['nodes'];\r\n        edges = node['edges'];\r\n        g = new LayoutGraphMin();\r\n\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            g.setNode(n.id, new LayoutGraphNode(n.id, n.getSize().x, n.getSize().y, n.getPos().x, n.getPos().y));\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            sId = this.getNodeId(e.$sNode);\r\n            tId = this.getNodeId(e.$tNode);\r\n            if (sId > tId) {\r\n                let tmp = tId;\r\n                tId = sId;\r\n                sId = tmp;\r\n            }\r\n            let idAB = sId + split + tId + split;\r\n            let idBA = tId + split + sId + split;\r\n            if (sId !== tId && g.edgesLabel.indexOf(idAB) < 0 && g.edgesLabel.indexOf(idBA) < 0) {\r\n                newEdge = {source: sId, target: tId, minlen: 1, weight: 1};\r\n                g.edges.push(newEdge);\r\n                g.edgesLabel.push(idAB);\r\n                // In Edges\r\n                if (!g.inEdges[tId]) {\r\n                    g.inEdges[tId] = [];\r\n                }\r\n                g.inEdges[tId].push(newEdge);\r\n\r\n                // Out Edges\r\n                if (!g.outEdges[sId]) {\r\n                    g.outEdges[sId] = [];\r\n                }\r\n                g.outEdges[sId].push(newEdge);\r\n            }\r\n        }\r\n        this.layouting(g);\r\n        // Set the layouting back\r\n        for (i in nodes) {\r\n            if (!nodes.hasOwnProperty(i) || typeof (nodes[i]) === 'function') {\r\n                continue;\r\n            }\r\n            n = nodes[i];\r\n            layoutNode = g.node(n.id);\r\n            x = n.getPos().x;\r\n            y = n.getPos().y;\r\n            if (x < 1 && y < 1) {\r\n                n.withPos(Math.ceil(layoutNode.x), Math.ceil(layoutNode.y));\r\n            }\r\n        }\r\n        for (i in edges) {\r\n            if (!edges.hasOwnProperty(i) || typeof (edges[i]) === 'function') {\r\n                continue;\r\n            }\r\n            e = edges[i];\r\n            // OBSOLETE method:  e.calc(graph.canvas);\r\n        }\r\n        graph.draw();\r\n    }\r\n\r\n    public getNodeId(node: Control): string {\r\n        if (node.$owner) {\r\n            return this.getNodeId(node.$owner) || node.id;\r\n        }\r\n        return node.id;\r\n    }\r\n\r\n    public layouting(g: LayoutGraphMin) {\r\n        this.longestPath(g);\r\n        this.normalizeRanks(g);\r\n        this.normalizeEdge(g);\r\n        // this.setSimpleOrder(g);\r\n        this.order(g);\r\n        g.ranksep = 25;\r\n        // remove Dummy\r\n        this.removeDummy(g);\r\n        this.position(g);\r\n    }\r\n\r\n    public setSimpleOrder(g: LayoutGraphMin) {\r\n        let i, n;\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            n.order = n.rank;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Applies heuristics to minimize edge crossings in the graph and sets the best\r\n     * order solution as an order attribute on each node.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Graph must be DAG\r\n     *    2. Graph nodes must be objects with a \"rank\" attribute\r\n     *    3. Graph edges must have the \"weight\" attribute\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Graph nodes will have an \"order\" attribute based on the results of the\r\n     *       algorithm.\r\n     */\r\n    public order(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        let visited = {};\r\n        let node, n, order, i;\r\n        for (i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (n in g.nodes) {\r\n            if (visited[n]) {\r\n                continue;\r\n            }\r\n            visited[n] = true;\r\n            node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank].push(n);\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                g.nodes[layering[order][n]].order = parseInt(n);\r\n            }\r\n        }\r\n        // Fix resolve conflict\r\n        for (order in layering) {\r\n            if (layering[order].length > 1) {\r\n                for (n in layering[order]) {\r\n                    if (layering[order].hasOwnProperty(n) === false) {\r\n                        continue;\r\n                    }\r\n                    let name = layering[order][n];\r\n                    let sum = 0;\r\n                    let weight = 1;\r\n                    let edges = g.dummyEdges[name];\r\n                    if (edges) {\r\n                        for (i in edges) {\r\n                            if (edges.hasOwnProperty(i) === false) {\r\n                                continue;\r\n                            }\r\n                            let edge = edges[i];\r\n                            let nodeU = g.node(edge.target);\r\n                            sum = sum + (edge.weight * nodeU.order);\r\n                            weight = weight + edge.weight;\r\n                        }\r\n                    }\r\n                    g.node(name).barycenter = sum / weight;\r\n                    g.node(name).weight = weight;\r\n                }\r\n            } else if (layering[order].length > 0) {\r\n                for (n in layering[order]) {\r\n                    let name = layering[order][n];\r\n                    g.node(name).barycenter = 1;\r\n                    g.node(name).weight = 1;\r\n                }\r\n            }\r\n        }\r\n        for (order in layering) {\r\n            for (n in layering[order]) {\r\n                if (layering[order].hasOwnProperty(n) === false) {\r\n                    continue;\r\n                }\r\n                let node = g.nodes[layering[order][n]];\r\n                node.order = parseInt(n) + node.barycenter * node.weight;\r\n                if (isNaN(node.order)) {\r\n                    console.log('ERROR');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public removeDummy(g: LayoutGraphMin) {\r\n        for (let z in g.dummyNodes) {\r\n            let node = g.dummyNodes[z];\r\n            g.setNode(node.id, null);\r\n        }\r\n        g.dummyNodes = [];\r\n        g.dummyEdges = {};\r\n    }\r\n\r\n    /*\r\n     * Breaks any long edges in the graph into short segments that span 1 layer\r\n     * each. This operation is undoable with the denormalize function.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. The input graph is a DAG.\r\n     *    2. Each node in the graph has a \"rank\" property.\r\n     *\r\n     * Post-condition:\r\n     *\r\n     *    1. All edges in the graph have a length of 1.\r\n     *    2. Dummy nodes are added where edges have been split into segments.\r\n     *    3. The graph is augmented with a \"dummyChains\" attribute which contains\r\n     *       the first dummy in each chain of dummy nodes produced.\r\n     */\r\n    public normalizeEdge(g: LayoutGraphMin): void {\r\n        let i: number = 1;\r\n        for (let id in g.edges) {\r\n            let e: LayoutGraphEdge = <LayoutGraphEdge>g.edges[id];\r\n            let v: string = e.source;\r\n            let vRank = g.node(v).rank;\r\n            const w: string = e.target;\r\n            const wRank: number = g.node(w).rank;\r\n            let name: string;\r\n\r\n            if (wRank === vRank + 1) {\r\n                continue;\r\n            }\r\n\r\n            let dummy;\r\n            for (vRank = vRank + 1; vRank < wRank; ++vRank) {\r\n                name = '_d' + e.source + e.target + (i++);\r\n                let newEdge = {source: v, target: name, minlen: 1, weight: 1};\r\n                dummy = new LayoutGraphNode(name, 0, 0, 0, 0);\r\n                dummy.edgeObj = e;\r\n                dummy.rank = vRank;\r\n                // Dummy Edges\r\n                if (!g.dummyEdges[v]) {\r\n                    g.dummyEdges[v] = [];\r\n                }\r\n                g.dummyEdges[v].push(newEdge);\r\n\r\n                g.dummyNodes.push(dummy);\r\n                g.setNode(dummy.id, dummy);\r\n                v = name;\r\n            }\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Initializes ranks for the input graph using the longest path algorithm. This\r\n     * algorithm scales well and is fast in practice, it yields rather poor\r\n     * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\r\n     * ranks wide and leaving edges longer than necessary. However, due to its\r\n     * speed, this algorithm is good for getting an initial ranking that can be fed\r\n     * into other algorithms.\r\n     *\r\n     * This algorithm does not normalize layers because it will be used by other\r\n     * algorithms in most cases. If using this algorithm directly, be sure to\r\n     * run normalize at the end.\r\n     *\r\n     * Pre-conditions:\r\n     *\r\n     *    1. Input graph is a DAG.\r\n     *    2. Input graph node labels can be assigned properties.\r\n     *\r\n     * Post-conditions:\r\n     *\r\n     *    1. Each node will be assign an (unnormalized) \"rank\" property.\r\n     */\r\n    public longestPath(g: LayoutGraphMin) {\r\n        let i, n, visited = [];\r\n        for (i in g.nodes) {\r\n            n = g.nodes[i];\r\n            visited.push(i);\r\n            n.rank = this.findAllPaths(g, n, 0, visited);\r\n            g.minRank = Math.min(g.minRank, n.rank);\r\n        }\r\n    }\r\n\r\n    public findAllPaths(g: LayoutGraphMin, n: Node, currentCost: number, path: Array<String>) {\r\n        let min: number = 0;\r\n        let id: string;\r\n        let z: number;\r\n        let target;\r\n        if (g.outEdges[n.id]) {\r\n            for (z = 0; z < g.outEdges[n.id].length; z++) {\r\n                id = g.outEdges[n.id][z].target;\r\n                target = g.nodes[id];\r\n                if (path[id]) {\r\n                    min = Math.min(min, target.rank);\r\n                } else if (path.indexOf(id) < 0) {\r\n                    min = Math.min(min, this.findAllPaths(g, target, currentCost - 2, path));\r\n                } else {\r\n                    min = currentCost;\r\n                }\r\n            }\r\n            return min;\r\n        }\r\n        return currentCost;\r\n    }\r\n\r\n    /*\r\n     * Adjusts the ranks for all nodes in the graph such that all nodes v have\r\n     * rank(v) >= 0 and at least one node w has rank(w) = 0.\r\n     */\r\n    public normalizeRanks(g: LayoutGraphMin) {\r\n        let min = g.minRank;\r\n        let value;\r\n        g.maxRank = Number.NEGATIVE_INFINITY;\r\n        g.maxHeight = 0;\r\n        g.maxWidth = 0;\r\n        for (let i in g.nodes) {\r\n            let node = g.nodes[i];\r\n            if (node.rank !== undefined) {\r\n                node.rank -= min;\r\n                value = Math.abs(node.rank);\r\n                if (value > g.maxRank) {\r\n                    g.maxRank = value;\r\n                }\r\n                g.maxHeight = Math.max(g.maxHeight, node.height);\r\n                g.maxWidth = Math.max(g.maxWidth, node.width);\r\n            }\r\n        }\r\n    }\r\n\r\n    public position(g: LayoutGraphMin) {\r\n        this.positionY(g);\r\n        let list = this.positionX(g);\r\n        for (let i in list) {\r\n            for (let pos in list[i]) {\r\n                if (list[i].hasOwnProperty(pos) === false) {\r\n                    continue;\r\n                }\r\n                if (g.node(list[i][pos])) {\r\n                    g.node(list[i][pos]).x = parseInt(pos) * g.maxWidth;\r\n                }\r\n            }\r\n\r\n        }\r\n    }\r\n\r\n    public positionY(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        let rankSep = g.ranksep;\r\n        let prevY = 0;\r\n        for (let layer in layering) {\r\n            let maxHeight = g.maxHeight;\r\n            for (let v in layering[layer]) {\r\n                if (layering[layer].hasOwnProperty(v) === false) {\r\n                    continue;\r\n                }\r\n                let id = layering[layer][v];\r\n                g.nodes[id].y = prevY + maxHeight / 2;\r\n            }\r\n            prevY += maxHeight + rankSep;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\r\n     * function will produce a matrix with the ids of each node.\r\n     */\r\n    public buildLayerMatrix(g: LayoutGraphMin) {\r\n        let layering = Array(g.maxRank + 1);\r\n        for (let i = 0; i < layering.length; i++) {\r\n            layering[i] = [];\r\n        }\r\n        for (let n in g.nodes) {\r\n            let node = g.nodes[n];\r\n            if (node.rank !== undefined) {\r\n                layering[node.rank][node.order] = n;\r\n            }\r\n        }\r\n        return layering;\r\n    }\r\n\r\n    public positionX(g: LayoutGraphMin) {\r\n        let layering = this.buildLayerMatrix(g);\r\n        return layering;\r\n    }\r\n}\r\n","import { Point } from '../elements/BaseElements';\r\nimport { Graph } from '../elements/Graph';\r\nimport { Util } from '../util';\r\nimport Layout from './Layout';\r\n\r\nexport class Random implements Layout {\r\n\r\n  public layout(graph: Graph) {\r\n\r\n    let model = graph.$graphModel;\r\n\r\n    if (model.nodes) {\r\n      for (let node of model.nodes) {\r\n        let pos: Point = node.getPos();\r\n        if (pos.x === 0 && pos.y === 0) {\r\n          let x = Util.getRandomInt(0, graph.canvasSize.width);\r\n          let y = Util.getRandomInt(0, graph.canvasSize.height);\r\n          node.withPos(x, y);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","export * from './DagreLayout';\r\nexport * from './Random';\r\nexport * from './DagreLayoutMin';\r\n\r\nimport {DagreLayout} from './DagreLayout';\r\nimport {DagreLayoutMin} from './DagreLayoutMin';\r\nimport {Random} from './Random';\r\nnew DagreLayout();\r\nnew DagreLayoutMin();\r\nnew Random();\r\n","import {VirtualKeyBoard} from './VirtualKeyBoard';\r\n\r\nexport {Point} from './elements/BaseElements';\r\nexport {Bridge, DelegateAdapter} from './Bridge';\r\nexport {Graph} from './elements/Graph';\r\nexport * from './elements/nodes';\r\nexport * from './elements/edges';\r\nexport * from './adapters';\r\nexport * from './UML';\r\nimport {Point} from './elements/BaseElements';\r\nimport {Graph} from './elements/Graph';\r\nimport {ClassEditor} from './elements/ClassEditor';\r\nimport {Bridge} from './Bridge';\r\nimport {Util} from './util';\r\nimport * as nodes  from './elements/nodes';\r\nimport * as edges from './elements/edges';\r\nimport {ScrumBoard} from './ScrumBoard';\r\n\r\nif (!window['Point']) {\r\n    window['Point'] = Point;\r\n    window['Graph'] = Graph;\r\n    window['bridge'] = new Bridge();\r\n    window['Util'] = Util;\r\n    window['Class'] = nodes.Class;\r\n    window['Association'] = edges.Association;\r\n    window['SymbolLibary'] = nodes.SymbolLibary;\r\n    window['ClassEditor'] = ClassEditor;\r\n    window['VirtualKeyBoard'] = VirtualKeyBoard;\r\n    window['ScrumBoard'] = ScrumBoard;\r\n}\r\n","'use strict';\r\nimport { CSS } from './CSS';\r\nimport { Node } from './elements/nodes/Node';\r\nimport { DiagramElement, Point } from './elements/BaseElements';\r\nimport { Control } from './Control';\r\n\r\nexport class Util {\r\n\r\n    public static isAutoSave: boolean;\r\n\r\n    static getRandomInt(min: number, max: number): number {\r\n        return Math.floor(Math.random() * (max - min + 1)) + min;\r\n    }\r\n\r\n    static createShape(attrs: any): SVGSVGElement {\r\n        let xmlns = attrs.xmlns || 'http://www.w3.org/2000/svg';\r\n        let shape = document.createElementNS(xmlns, attrs.tag);\r\n\r\n        for (let attr in attrs) {\r\n            if (!attrs.hasOwnProperty(attr)) {\r\n                continue;\r\n            }\r\n            if (attr !== 'tag') {\r\n                shape.setAttribute(attr, attrs[attr]);\r\n\r\n            }\r\n        }\r\n        return <SVGSVGElement><any>shape;\r\n    }\r\n\r\n    static toPascalCase(value: string): string {\r\n        value = value.charAt(0).toUpperCase() + value.substring(1).toLowerCase();\r\n        return value;\r\n    }\r\n\r\n    static isSVG(tag: string): boolean {\r\n        let i,\r\n            list = ['svg', 'path', 'polygon', 'polyline', 'line', 'title', 'rect', 'filter', 'feGaussianBlur', 'feOffset', 'feBlend', 'linearGradient', 'stop', 'text', 'symbol', 'textPath', 'defs', 'fegaussianblur', 'feoffset', 'feblend', 'circle', 'ellipse', 'g'];\r\n        for (i = 0; i < list.length; i += 1) {\r\n            if (list[i] === tag) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    static createHTML(node: any): HTMLElement {\r\n        return <HTMLElement>this.create(node);\r\n    }\r\n    static create(node: any): Element {\r\n        let style, item, xmlns, key, tag, k;\r\n        if (document.createElementNS && (this.isSVG(node.tag) || node.xmlns)) {\r\n            if (node.xmlns) {\r\n                xmlns = node.xmlns;\r\n            } else {\r\n                xmlns = 'http://www.w3.org/2000/svg';\r\n            }\r\n            if (node.tag === 'img' && xmlns) {\r\n                item = document.createElementNS(xmlns, 'image');\r\n                item.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\r\n                item.setAttributeNS('http://www.w3.org/1999/xlink', 'href', node.src);\r\n            } else {\r\n                item = document.createElementNS(xmlns, node.tag);\r\n            }\r\n        } else {\r\n            item = document.createElement(node.tag);\r\n        }\r\n        tag = node.tag.toLowerCase();\r\n        for (key in node) {\r\n            if (!node.hasOwnProperty(key)) {\r\n                continue;\r\n            }\r\n            k = key.toLowerCase();\r\n            if (node[key] === null) {\r\n                continue;\r\n            }\r\n            if (k === 'tag' || k.charAt(0) === '$' || k === '$graphModel') {\r\n                continue;\r\n            }\r\n            if (k.charAt(0) === '#') {\r\n                item[k.substring(1)] = node[key];\r\n                continue;\r\n            }\r\n            if (k === 'rotate') {\r\n                item.setAttribute('transform', 'rotate(' + node[key] + ',' + node.$graphModel.x + ',' + node.$graphModel.y + ')');\r\n                continue;\r\n            }\r\n            if (k === 'value') {\r\n                if (!node[key]) {\r\n                    continue;\r\n                }\r\n                if (tag !== 'input') {\r\n                    if (tag === 'text') {// SVG\r\n                        item.appendChild(document.createTextNode(node[key]));\r\n                    } else {\r\n                        item.innerHTML = node[key];\r\n                    }\r\n                } else {\r\n                    item[key] = node[key];\r\n                }\r\n                continue;\r\n            }\r\n            if (k.indexOf('on') === 0) {\r\n                this.bind(item, k.substring(2), node[key]);\r\n                continue;\r\n            }\r\n            if (k.indexOf('-') >= 0) {\r\n                item.style[key] = node[key];\r\n            } else {\r\n                if (k === 'style' && typeof (node[key]) === 'object') {\r\n                    for (style in node[key]) {\r\n                        if (!node[key].hasOwnProperty(style)) {\r\n                            continue;\r\n                        }\r\n                        if (node[key][style]) {\r\n                            if ('transform' === style) {\r\n                                item.style.transform = node[key][style];\r\n                                item.style.msTransform = item.style.MozTransform = item.style.WebkitTransform = item.style.OTransform = node[key][style];\r\n                            } else {\r\n                                item.style[style] = node[key][style];\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    item.setAttribute(key, node[key]);\r\n                }\r\n            }\r\n        }\r\n        if (node.$parent) {\r\n            node.$parent.appendChild(item);\r\n        }\r\n        if (node.$graphModel) {\r\n            item.$graphModel = node.$graphModel;\r\n        }\r\n        return item;\r\n    }\r\n\r\n    static setSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttribute('width', value);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.setAttribute('height', value);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setAttributeSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.setAttributeNS(null, 'width', value);\r\n        value = Util.getValue(height);\r\n        item.setAttributeNS(null, 'height', value);\r\n    }\r\n\r\n    static setStyleSize(item: any, width: number | string, height: number | string): void {\r\n        let value: number;\r\n        value = Util.getValue(width);\r\n        item.style.width = Math.ceil(value);\r\n        value = Util.getValue(height);\r\n        item.style.height = Math.ceil(value);\r\n    }\r\n\r\n    static setPos(item: any, x: number, y: number): void {\r\n        if (item.x && item.x.baseVal) {\r\n            item.style.left = x + 'px';\r\n            item.style.top = y + 'px';\r\n        } else {\r\n            item.x = x;\r\n            item.y = y;\r\n        }\r\n    }\r\n\r\n    static getValue(value: string | number): number {\r\n        return parseInt(('0' + value).replace('px', ''), 10);\r\n    }\r\n\r\n    static isIE(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('.net') > -1;\r\n    }\r\n\r\n    static isEdge(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('edge') > -1;\r\n    }\r\n\r\n    static isFireFox(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n    }\r\n\r\n    static isSafari(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        return navigator.userAgent.toLowerCase().indexOf('safari') > -1 && !isEdge;\r\n    }\r\n\r\n    static isOpera(): boolean {\r\n        return navigator.userAgent.toLowerCase().indexOf('opera') > -1;\r\n    }\r\n\r\n    static isChrome(): boolean {\r\n        let isEdge = Util.isEdge();\r\n        let isSafari = Util.isSafari();\r\n        return navigator.userAgent.toLowerCase().indexOf('chrome') > -1 && !isEdge && isSafari;\r\n    }\r\n\r\n    static getEventX(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetX'] : event.layerX;\r\n    }\r\n\r\n    static getEventY(event: Event | any): number {\r\n        return (Util.isIE() || Util.isEdge()) ? event['offsetY'] : event.layerY;\r\n    }\r\n\r\n    static getNumber(str: string): number {\r\n        return parseInt((str || '0').replace('px', ''), 10);\r\n    }\r\n\r\n    static getStyle(styleProp: string): CSS {\r\n        let i, style, diff, current, ref, el = document.createElement('div'), css;\r\n        document.body.appendChild(el);\r\n        css = new CSS(styleProp);\r\n        ref = new CSS(styleProp, el).css;\r\n        style = window.getComputedStyle(el, null);\r\n        el.className = styleProp;\r\n        current = new CSS(styleProp, el).css;\r\n        diff = Util.getNumber(style.getPropertyValue('border-width'));\r\n        for (i in current) {\r\n            if (!current.hasOwnProperty(i)) {\r\n                continue;\r\n            }\r\n            if (i === 'width' || i === 'height') {\r\n                if (Util.getNumber(current[i]) !== 0 && Util.getNumber(current[i]) + diff * 2 !== Util.getNumber(ref[i])) {\r\n                    css.add(i, current[i]);\r\n                }\r\n            } else if (current[i] !== ref[i]) {\r\n                css.add(i, current[i]);\r\n            }\r\n        }\r\n        document.body.removeChild(el);\r\n        return css;\r\n    }\r\n\r\n    static sizeOf(item: string | any, node?: Node): ClientRect {\r\n        let board;\r\n        let rect: ClientRect;\r\n        let addBoard: boolean;\r\n        if (!item) {\r\n            return undefined;\r\n        }\r\n        if (node) {\r\n            board = node.$owner.$view;\r\n            addBoard = false;\r\n        }\r\n\r\n        if (!board) {\r\n            addBoard = true;\r\n            board = Util.createShape({ tag: 'svg', id: 'root', width: 200, height: 200 });\r\n            document.body.appendChild(board);\r\n        }\r\n        if (board.tagName === 'svg') {\r\n            if (typeof item === 'string') {\r\n                item = Util.create({ tag: 'text', $font: true, value: item });\r\n                item.setAttribute('width', '5px');\r\n            }\r\n        } else if (typeof item === 'string') {\r\n            item = document.createTextNode(item);\r\n        }\r\n        board.appendChild(item);\r\n        rect = item.getBoundingClientRect();\r\n        board.removeChild(item);\r\n\r\n        if (addBoard) {\r\n            document.body.removeChild(board);\r\n        }\r\n        return rect;\r\n    }\r\n\r\n    static getColor(style: string, defaultColor?: string) {\r\n        if (style) {\r\n            if (style.toLowerCase() === 'create') {\r\n                return '#008000';\r\n            }\r\n            if (style.toLowerCase() === 'nac') {\r\n                return '#FE3E3E';\r\n            }\r\n            if (style.indexOf('#') === 0) {\r\n                return style;\r\n            }\r\n        }\r\n        if (defaultColor) {\r\n            return defaultColor;\r\n        }\r\n        return '#000';\r\n    }\r\n\r\n    public static utf8$to$b64(str: string): string {\r\n        return window.btoa(encodeURIComponent(str));\r\n    }\r\n\r\n    public static showSVG(control: DiagramElement) {\r\n        let svg = Util.create({\r\n            tag: 'svg',\r\n            style: { left: control.getPos().x, top: control.getPos().y, position: 'absolute' }\r\n        });\r\n        let child = control.getSVG();\r\n        if (child) {\r\n            svg.appendChild(child);\r\n        }\r\n        Util.setSize(svg, control.getSize().x, control.getSize().y);\r\n        document.body.appendChild(svg);\r\n    }\r\n\r\n    public static toJson(ref: JSON | Object): Object {\r\n        let result = {};\r\n        return Util.copy(result, ref, false, false);\r\n    }\r\n\r\n    public static initControl(parent: Control, control: Control, type: string, id: string, json: JSON | Object) {\r\n        if (typeof control.init === 'function') {\r\n            control.init(parent, type, id);\r\n        }\r\n        if (typeof control.load === 'function') {\r\n            control.load(json);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * copy One Json into another\r\n     * @function\r\n     * @param ref reference Json\r\n     * @param src source Json\r\n     * @param full all attributes include privet $\r\n     * @param replace set the original reference or copy it\r\n     * @returns ref\r\n     * @name copy\r\n     */\r\n    public static copy(ref: JSON | Object, src: JSON | Object, full: boolean, replace: boolean) {\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (replace) {\r\n                        ref[i] = src[i];\r\n                        continue;\r\n                    }\r\n                    if (!ref[i]) {\r\n                        if (src[i] instanceof Array) {\r\n                            ref[i] = [];\r\n                        } else {\r\n                            ref[i] = {};\r\n                        }\r\n                    }\r\n                    Util.copy(ref[i], src[i], full, false);\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref[i] = src[i];\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    public static xmlstringify(text: string): string {\r\n        text = text.replace('<', '&lt;');\r\n        text = text.replace('>', '&gt;');\r\n        return text;\r\n    }\r\n\r\n    public static toXML(ref: JSON | Object | any, src: JSON | Object | any, full: boolean, doc: Document): any {\r\n        let name;\r\n        if (!ref) {\r\n            name = src.constructor.name;\r\n            doc = document.implementation.createDocument(null, name, null);\r\n            ref = doc.childNodes[0];\r\n        }\r\n        if (src) {\r\n            let i;\r\n            for (i in src) {\r\n                if (!src.hasOwnProperty(i) || typeof (src[i]) === 'function') {\r\n                    continue;\r\n                }\r\n                if (i.charAt(0) === '$') {\r\n                    if (full) {\r\n                        ref[i] = src[i];\r\n                    }\r\n                    continue;\r\n                }\r\n                if (typeof (src[i]) === 'object') {\r\n                    if (!ref.getAttribute(i)) {\r\n                        if (src[i] instanceof Array) {\r\n                            for (let c in src[i]) {\r\n                                if (!src[i].hasOwnProperty(c)) {\r\n                                    continue;\r\n                                }\r\n                                name = src[i][c].constructor.name;\r\n                                let child = doc.createElement(name);\r\n                                ref.appendChild(child);\r\n                                Util.toXML(child, src[i][c], full, doc);\r\n                            }\r\n                        } else {\r\n                            name = src[i].constructor.name;\r\n                            let child = doc.createElement(name);\r\n                            ref.appendChild(child);\r\n                            Util.toXML(child, src[i], full, doc);\r\n                        }\r\n                    } else {\r\n                        Util.toXML(ref.getAttribute(i), src[i], full, doc);\r\n                    }\r\n                } else {\r\n                    if (src[i] === '') {\r\n                        continue;\r\n                    }\r\n                    ref.setAttribute(i, src[i]);\r\n                }\r\n            }\r\n        }\r\n        return ref;\r\n    }\r\n\r\n    static Range(min: Point, max: Point, x: number, y: number) {\r\n        max.x = Math.max(max.x, x);\r\n        max.y = Math.max(max.y, y);\r\n        min.x = Math.min(min.x, x);\r\n        min.y = Math.min(min.y, y);\r\n    }\r\n\r\n    public static getPosition(m: number, n: number, entity: DiagramElement, refCenter: Point) {\r\n        let t, p = [], list, distance = [], min = 999999999, position, i, step = 15;\r\n        let pos: Point = entity.getPos();\r\n        let size: Point = entity.getSize();\r\n        list = [Point.LEFT, Point.RIGHT];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = this.getLRPosition(m, n, entity, list[i]);\r\n            if (t.y >= pos.y && t.y <= (pos.y + size.y + 1)) {\r\n                t.y += (entity['$' + list[i]] * step);\r\n                if (t.y > (pos.y + size.y)) {\r\n                    // Alternative\r\n                    t = Util.getUDPosition(m, n, entity, Point.DOWN, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        list = [Point.UP, Point.DOWN];\r\n        for (i = 0; i < 2; i += 1) {\r\n            t = Util.getUDPosition(m, n, entity, list[i]);\r\n            if (t.x >= pos.x && t.x <= (pos.x + size.x + 1)) {\r\n                t.x += (entity['$' + list[i]] * step);\r\n                if (t.x > (pos.x + size.x)) {\r\n                    // Alternative\r\n                    t = this.getLRPosition(m, n, entity, Point.RIGHT, step);\r\n                }\r\n                p.push(t);\r\n                distance.push(Math.sqrt((refCenter.x - t.x) * (refCenter.x - t.x) + (refCenter.y - t.y) * (refCenter.y - t.y)));\r\n            }\r\n        }\r\n        for (i = 0; i < p.length; i += 1) {\r\n            if (distance[i] < min) {\r\n                min = distance[i];\r\n                position = p[i];\r\n            }\r\n        }\r\n        return position;\r\n    }\r\n\r\n    public static getUDPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let x, y: number = pos.y;\r\n        if (p === Point.DOWN) {\r\n            y += size.y;\r\n        }\r\n        x = (y - n) / m;\r\n        if (step) {\r\n            x += e['$' + p] * step;\r\n            if (x < pos.x) {\r\n                x = pos.x;\r\n            } else if (x > (pos.x + size.x)) {\r\n                x = pos.x + size.x;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static getLRPosition(m: number, n: number, e: DiagramElement, p: string, step?: number) {\r\n        let pos: Point = e.getPos();\r\n        let size: Point = e.getSize();\r\n        let y: number, x: number = pos.x;\r\n        if (p === Point.RIGHT) {\r\n            x += size.x;\r\n        }\r\n        y = m * x + n;\r\n        if (step) {\r\n            y += e['$' + p] * step;\r\n            if (y < pos.y) {\r\n                y = pos.y;\r\n            } else if (y > (pos.y + size.y)) {\r\n                y = pos.y + size.y;\r\n            }\r\n        }\r\n        return new Point(x, y, p);\r\n    }\r\n\r\n    public static hasClass(element: Element, cls: string) {\r\n        let className = element.getAttribute('class');\r\n        return className.indexOf(cls) > 0;\r\n    }\r\n    public static addClass(element: Element, cls: string) {\r\n        if (!Util.hasClass(element, cls)) {\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className + ' ' + cls);\r\n        }\r\n    }\r\n    public static removeClass(element: Element, cls: string) {\r\n        if (Util.hasClass(element, cls)) {\r\n            let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\r\n            let className = element.getAttribute('class');\r\n            element.setAttributeNS(null, 'class', className.replace(reg, ' ').trim());\r\n        }\r\n    }\r\n\r\n    public static startsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.startsWith) {\r\n            return s.indexOf(searchS) === 0;\r\n        }\r\n\r\n        return s.startsWith(searchS);\r\n    }\r\n\r\n    public static endsWith(s: string, searchS: string): boolean {\r\n        if (!String.prototype.endsWith) {\r\n            let lastIndex = s.lastIndexOf(searchS);\r\n            return lastIndex !== -1 && lastIndex === (s.length - 1);\r\n        }\r\n\r\n        return s.endsWith(searchS);\r\n    }\r\n\r\n    public static includes(s: string, searchS: string): boolean {\r\n        if (!String.prototype.includes) {\r\n            let idx = s.indexOf(searchS);\r\n            return idx > -1;\r\n        }\r\n        if (s === null) {\r\n            return false;\r\n        }\r\n\r\n        return s.includes(searchS);\r\n    }\r\n\r\n    public static isParentOfChild(parent: Element, child: Element): boolean {\r\n\r\n        if (!parent || !child) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isIE()) {\r\n            let children = parent.childNodes;\r\n            // let found = false;\r\n            for (let i = 0; i < children.length; i++) {\r\n                let childItem = children[i];\r\n                if (childItem === child) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        return parent.contains(child);\r\n    }\r\n\r\n    public static createCustomEvent(type: string, params?: any): CustomEvent {\r\n        let evt: CustomEvent;\r\n\r\n        if (typeof window['CustomEvent'] !== 'function') {\r\n            params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n            evt = document.createEvent('CustomEvent');\r\n            evt.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\r\n            return evt;\r\n        }\r\n\r\n        evt = new CustomEvent(type);\r\n\r\n        return evt;\r\n    }\r\n\r\n    public static saveToLocalStorage(model: any): boolean {\r\n        if (!this.isAutoSave) {\r\n            return false;\r\n        }\r\n\r\n        if (Util.isLocalStorageSupported()) {\r\n            if (model) {\r\n                if (model.$isLoading) {\r\n                    return false;\r\n                }\r\n                let jsonObj = Util.toJson(model);\r\n                let data = JSON.stringify(jsonObj, null, '\\t');\r\n                localStorage.setItem('diagram', data);\r\n            } else {\r\n                localStorage.removeItem('diagram');\r\n            }\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static getDiagramFromLocalStorage(): string {\r\n        if (Util.isLocalStorageSupported()) {\r\n            return localStorage.getItem('diagram');\r\n        }\r\n\r\n        return undefined;\r\n    }\r\n\r\n    public static isLocalStorageSupported(): boolean {\r\n        if (this.isEdge()) {\r\n            return false;\r\n        }\r\n        return localStorage !== undefined;\r\n    }\r\n}\r\n"],"sourceRoot":""}
Severity: Minor
Found in doc/diagram.js.map by fixme

There are no issues that match your filters.

Category
Status